tizen 2.3.1 release
[framework/connectivity/mobileap-agent.git] / include / mobileap_softap.h
1 /*
2  * mobileap-agent
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #ifndef __MOBILEAP_SOFTAP_H__
19 #define __MOBILEAP_SOFTAP_H__
20
21 #include <glib.h>
22 #include <dbus/dbus.h>
23 #include <dbus/dbus-glib.h>
24 #include <dbus/dbus-glib-lowlevel.h>
25 #include <dlog.h>
26 #include <vconf.h>
27 #include <netinet/in.h>
28
29 #include "mobileap.h"
30
31 #ifdef LOG_TAG
32 #undef LOG_TAG
33 #endif
34 #define LOG_TAG         "MOBILEAP_AGENT"
35
36 #define DBG(fmt, args...)       LOGD(fmt, ##args)
37 #define ERR(fmt, args...)       LOGE(fmt, ##args)
38 #define SDBG(fmt, args...)      SECURE_LOGD(fmt, ##args)
39 #define SERR(fmt, args...)      SECURE_LOGE(fmt, ##args)
40
41 #define DRIVER_DELAY            250000  /* micro seconds */
42
43 #define IF_BUF_LEN              32
44 #define NET_BUF_LEN             12
45 #define INTERFACE_NAME_LEN      12
46 #define SECURITY_TYPE_LEN       32
47
48 /* Network Interface */
49 #define IP_SUBNET_MASK          "255.255.255.0"
50
51 #define WIFI_IF                 "wlan0"
52 #define IP_ADDRESS_WIFI         0xC0A82B02      /* 192.168.43.2 */
53
54 #define SOFTAP_IF               "wl0.1"
55 #define IP_ADDRESS_SOFTAP       0xC0A82B01      /* 192.168.43.1 */
56
57 #define USB_IF                  "usb0"
58 #define IP_ADDRESS_USB          0xC0A88103      /* 192.168.129.3 */
59
60 #define BT_IF_PREFIX            "bnep"
61 #define BT_IF_ALL               BT_IF_PREFIX"+"
62 #define IP_ADDRESS_BT_1         0xC0A88201      /* 192.168.130.1 */
63 #define IP_ADDRESS_BT_2         0xC0A88301      /* 192.168.131.1 */
64 #define IP_ADDRESS_BT_3         0xC0A88401      /* 192.168.132.1 */
65 #define IP_ADDRESS_BT_4         0xC0A88501      /* 192.168.133.1 */
66 #define IP_ADDRESS_BT_5         0xC0A88601      /* 192.168.134.1 */
67 #define IP_ADDRESS_BT_6         0xC0A88701      /* 192.168.135.1 */
68 #define IP_ADDRESS_BT_7         0xC0A88801      /* 192.168.136.1 */
69
70 #define RET_FAILURE             (-1)
71 #define RET_SUCCESS             (0)
72 #define MAX_BUF_SIZE            (256u)
73
74 #define DNSMASQ_CONF_LEN        1024
75 #define DNSMASQ_CONF    \
76                         "dhcp-range=192.168.43.3,192.168.43.254,255.255.255.0\n" \
77                         "dhcp-range=192.168.130.2,192.168.130.150,255.255.255.0\n" \
78                         "dhcp-range=192.168.131.2,192.168.131.150,255.255.255.0\n" \
79                         "dhcp-range=192.168.132.2,192.168.132.150,255.255.255.0\n" \
80                         "dhcp-range=192.168.133.2,192.168.133.150,255.255.255.0\n" \
81                         "dhcp-range=192.168.134.2,192.168.134.150,255.255.255.0\n" \
82                         "dhcp-range=192.168.135.2,192.168.135.150,255.255.255.0\n" \
83                         "dhcp-range=192.168.136.2,192.168.136.150,255.255.255.0\n" \
84                         "dhcp-range=192.168.137.2,192.168.137.150,255.255.255.0\n" \
85                         "dhcp-range=set:blue,192.168.129.4,192.168.129.150,255.255.255.0\n"\
86                         "enable-dbus\n" \
87                         "group=app\n" \
88                         "user=app\n" \
89                         "dhcp-option=tag:blue,option:router,192.168.129.3\n"
90 #define DNSMASQ_CONF_FILE       "/tmp/dnsmasq.conf"
91
92 /* Start of hostapd configuration */
93 #define MH_CTRL_INTF            "/tmp/mh_wpa_ctrl"
94 #define MH_MONITOR_INTF         "/tmp/mh_wpa_monitor"
95
96 #define HOSTAPD_BIN             "/usr/sbin/hostapd"
97 #define HOSTAPD_ENTROPY_FILE    "/opt/var/lib/misc/hostapd.bin"
98 #define HOSTAPD_CONF_FILE       "/opt/var/lib/misc/hostapd.conf"
99 #define HOSTAPD_CTRL_INTF_DIR   "/opt/var/lib/misc/hostapd"
100 #define HOSTAPD_CONF_LEN        1024
101 #define HOSTAPD_CONF            "interface=%s\n" \
102                                 "driver=nl80211\n" \
103                                 "ctrl_interface=%s\n" \
104                                 "ssid=%s\n" \
105                                 "channel=%d\n" \
106                                 "ignore_broadcast_ssid=%d\n" \
107                                 "hw_mode=g\n" \
108                                 "max_num_sta=%d\n" \
109                                 "ieee80211n=1\n"
110 #define HOSTAPD_DEBUG_FILE      "/var/log/hostapd.log"
111 #define HOSTAPD_REQ_MAX_LEN     128
112 #define HOSTAPD_RETRY_MAX       5
113 #define HOSTAPD_RETRY_DELAY     500000  /* us */
114 #define HOSTAPD_STA_DISCONN     "AP-STA-DISCONNECTED "  /* from wpa_ctrl.h */
115 #define HOSTAPD_STA_CONN        "AP-STA-CONNECTED "
116 #define HOSTAPD_STA_DISCONN_LEN 20
117 #define HOSTAPD_STA_CONN_LEN    17
118 #define HOSTAPD_MONITOR_ATTACH  "ATTACH"
119 #define HOSTAPD_MONITOR_DETACH  "DETACH"
120 #define HOSTAPD_DHCP_MAX_INTERVAL 30000 /* 30 seconds */
121
122 /* Samsung VSIE value in beacon / probe response.
123  * Wi-Fi station can identify AP whether it is tethering or AP only using this value.
124  */
125 #define HOSTAPD_VENDOR_ELEMENTS_TETH    "DD050016328000"        /* Samsung tethering device */
126 #define HOSTAPD_VENDOR_ELEMENTS_WIFI_AP "DD050016321000"        /* Specific application mode AP (e.g. GroupPlay) */
127 /* End of hostapd configuration */
128
129 #define IP_FORWARD      "/proc/sys/net/ipv4/ip_forward"
130 #define IP_CMD          "/usr/sbin/ip"
131 #define GREP            "/bin/grep"
132 #define AWK             "/usr/bin/awk"
133 #define DATA_USAGE_FILE "/tmp/tethering_data_usage.txt"
134
135 #define TETHERING_ROUTING_TABLE 252
136 #define SRC_ROUTING_RULE        "iif %s lookup %d"
137 #define DEFAULT_ROUTER          "default via %s dev %s scope global table %d"
138 #define INTERFACE_ROUTING       "%s/24 table %d dev %s"
139 #define DNS_ORDER               1
140 #define TCP_DNS_FORWARD_RULE    "-i %s -p tcp --dport 53 -j DNAT --to %s:53"
141 #define UDP_DNS_FORWARD_RULE    "-i %s -p udp --dport 53 -j DNAT --to %s:53"
142
143 #define MOBILE_AP_STATE_NONE    0
144 #define MOBILE_AP_STATE_WIFI    1
145 #define MOBILE_AP_STATE_USB     2
146 #define MOBILE_AP_STATE_BT      4
147 #define MOBILE_AP_STATE_WIFI_AP 8
148 #define MOBILE_AP_STATE_ALL     15
149
150 #define DNSMASQ_DBUS_INTERFACE "uk.org.thekelleys.dnsmasq"
151
152 #define PROC_NET_DEV                    "/proc/net/dev"
153 #define TETHERING_CONN_TIMEOUT          (1200)  /* 20 Mins */
154 #define WIFI_AP_CONN_TIMEOUT            (300)   /* 5 Mins */
155 #define CHECK_NET_STATE_RETRY_COUNT     5
156 #define PSK_ITERATION_COUNT             4096
157
158 typedef struct {
159         int hide_mode;
160
161         char ssid[MOBILE_AP_WIFI_SSID_MAX_LEN + 1];
162         /* in AP case, hex key will be passed from library, so one extra byte is needed */
163         char key[MOBILE_AP_WIFI_KEY_MAX_LEN + 1];
164         char security_type[SECURITY_TYPE_LEN];
165 } softap_settings_t;
166
167 typedef struct {
168         /* The parent class object state. */
169         GObject parent;
170
171         int init_count;
172
173         softap_settings_t softap_settings;
174 } TetheringObject;
175
176 typedef struct {
177         /* The parent class state. */
178         GObjectClass parent;
179
180         /* class member */
181         guint signals[E_SIGNAL_MAX];
182 } TetheringObjectClass;
183
184 typedef struct {
185         unsigned int number;    /* Number of connected device */
186                                 /* BSSID list of connected device */
187         char bssid[MOBILE_AP_MAX_WIFI_STA][MOBILE_AP_STR_INFO_LEN];
188 } softap_device_info_t;
189
190 typedef struct {
191         const char *key;
192         vconf_callback_fn cb;
193         int *value;
194 } vconf_reg_t;
195
196 typedef enum {
197         MOBILE_AP_DRV_INTERFACE_NONE,
198         MOBILE_AP_WEXT,
199         MOBILE_AP_NL80211,
200 } mobile_ap_drv_interface_e;
201
202 typedef struct {
203         guint tid;
204         char *mac_addr;
205 } sta_timer_t;
206
207 /* ssid : 32  key : 64 */
208 int _mh_core_enable_softap(const mobile_ap_type_e type, const char *ssid,
209                 const char *security, const char *key, int hide_mode);
210 int _mh_core_disable_softap(void);
211 int _mh_core_get_device_info(softap_device_info_t *di);
212 int _mh_core_execute_dhcp_server(void);
213 int _mh_core_terminate_dhcp_server(void);
214 int _mh_core_enable_masquerade(const char *ext_if);
215 int _mh_core_disable_masquerade(const char *ext_if);
216 void _mh_core_add_data_to_array(GPtrArray *array, guint type, gchar *dev_name);
217 int _mh_core_set_ip_address(const char *if_name, const in_addr_t ip);
218 void _register_wifi_station_handler(void);
219 void _unregister_wifi_station_handler(void);
220
221
222 void _block_device_sleep(void);
223 void _unblock_device_sleep(void);
224 int _init_tethering(TetheringObject *obj);
225 gboolean _deinit_tethering(TetheringObject *obj);
226 gboolean _mobileap_clear_state(int state);
227 gboolean _terminate_mobileap_agent(gpointer user_data);
228
229
230 gboolean _mobileap_is_disabled(void);
231 gboolean _mobileap_is_enabled(int state);
232 gboolean _mobileap_is_enabled_by_type(mobile_ap_type_e type);
233 gboolean _mobileap_set_state(int state);
234 void _flush_dhcp_ack_timer(void);
235 void _destroy_dhcp_ack_timer(char *mac_addr);
236
237 #endif