Add serviceclass config
[rahunas] / src / rh-config.h
1 /**
2  * RahuNAS configuration header
3  * Author: Suriya Soutmun <darksolar@gmail.com>
4  * Date:   2008-11-26
5  */
6 #ifndef __RH_CONFIG_H 
7 #define __RH_CONFIG_H 
8
9 #include "../lcfg/lcfg_static.h"
10 #include "rh-server.h"
11
12 #define DEFAULT_LOG RAHUNAS_LOG_DIR "rahunas.log"
13 #define VSERVER_ID 99
14 #define IDLE_TIMEOUT 600
15 #define POLLING 60 
16 #define BANDWIDTH_SHAPE 0
17
18 #define XMLSERVICE_HOST "localhost"
19 #define XMLSERVICE_PORT 80
20 #define XMLSERVICE_URL  "/rahunas_service/xmlrpc_service.php"
21
22 #define MAX_IFB_IFACE   64
23
24 #define CONFIG_FILE RAHUNAS_CONF_DIR "rahunas.conf"
25 #define DEFAULT_PID RAHUNAS_RUN_DIR "rahunasd.pid"
26 #define DB_NAME "rahunas"
27
28 struct interfaces {
29   char dev_internal[32];
30   char dev_ifb[32];
31   int  hit;
32   int  init;
33 };
34
35 struct rahunas_main_config {
36   char *conf_dir;
37   char *log_file;
38   char *dhcp;
39   int  bandwidth_shape;
40   int  bittorrent_download_max;
41   int  bittorrent_upload_max;
42   int  polling_interval;
43   int  service_class_enabled;
44 };
45
46 struct rahunas_vserver_config {
47   char *vserver_name;
48   int  vserver_id;
49   int  init_flag;
50   char *dev_external;
51   char *dev_internal;
52   struct interfaces *iface;
53   char *vlan;
54   char *vlan_raw_dev_external;
55   char *vlan_raw_dev_internal;
56   char *bridge;
57   char *masquerade;
58   char *ignore_mac;
59   char *vserver_ip;
60   char *vserver_fqdn;
61   char *vserver_ports_allow;
62   char *vserver_ports_intercept;
63   char *clients;
64   char *excluded;
65   int  idle_timeout;
66   char *dns;
67   char *ssh;
68   char *proxy;
69   char *proxy_host;
70   char *proxy_port;
71   char *bittorrent;
72   char *bittorrent_allow;
73   char *radius_host;
74   char *radius_secret;
75   char *radius_encrypt;
76   char *radius_auth_port;
77   char *radius_account_port;
78   char *nas_identifier;
79   char *nas_port;
80   char *nas_login_title;
81   char *nas_default_redirect;
82   char *nas_default_language;
83   char *nas_weblogin_template;
84 };
85
86 struct rahunas_serviceclass_config {
87   char *name;
88   char *description;
89   char *network;
90   struct in_addr start_addr;
91   uint32_t network_size;
92   char *fake_arpd;
93   char *fake_arpd_iface;
94 };
95
96 union rahunas_config {
97   struct rahunas_main_config rh_main;
98   struct rahunas_vserver_config rh_vserver;
99   struct rahunas_serviceclass_config rh_serviceclass;
100 };
101
102 enum config_type {
103   MAIN,
104   VSERVER,
105   SERVICECLASS
106 };
107
108 enum vserver_config_init_flag {
109   VS_NONE,
110   VS_INIT,
111   VS_RELOAD,
112   VS_RESET,
113   VS_DONE
114 };
115
116 extern GList *interfaces_list;
117
118 int get_config(const char *cfg_file, union rahunas_config *config);
119 int get_value(const char *cfg_file, const char *key, void **data, size_t *len);
120 int get_vservers_config(const char *conf_dir, struct main_server *server);
121 int cleanup_vserver_config(struct rahunas_vserver_config *config);
122 int cleanup_serviceclass_config(struct rahunas_serviceclass_config *config);
123 int cleanup_mainserver_config(struct rahunas_main_config *config);
124 enum lcfg_status rahunas_visitor(const char *key, void *data, size_t size, 
125                                  void *user_data);
126
127 GList *append_interface (GList *inf, 
128                          const char *inf_name);
129 GList *remove_interface (GList *inf,
130                          const char *inf_name);
131 struct interfaces *get_interface (GList *inf,
132                                   const char *inf_name);
133 int    ifb_interface_reserve (void);
134 void    ifb_interface_release (int ifno);
135 #endif // __RH_CONFIG_H