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