3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #ifndef __MOBILEAP_SOFTAP_H__
19 #define __MOBILEAP_SOFTAP_H__
22 #include <glib-object.h>
23 #include <dbus/dbus.h>
26 #include <netinet/in.h>
33 #define LOG_TAG "MOBILEAP_AGENT"
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)
40 #define DRIVER_DELAY 250000 /* micro seconds */
43 #define NET_BUF_LEN 12
44 #define INTERFACE_NAME_LEN 12
45 #define SECURITY_TYPE_LEN 32
47 /* Network Interface */
48 #define IP_SUBNET_MASK "255.255.255.0"
50 #define WIFI_IF "wlan0"
51 #define IP_ADDRESS_WIFI 0xC0A82B02 /* 192.168.43.2 */
53 #define SOFTAP_IF "wl0.1"
54 #define IP_ADDRESS_SOFTAP 0xC0A82B01 /* 192.168.43.1 */
57 #define IP_ADDRESS_USB 0xC0A88103 /* 192.168.129.3 */
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 */
69 #define RET_FAILURE (-1)
70 #define RET_SUCCESS (0)
71 #define MAX_BUF_SIZE (256u)
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"\
88 "dhcp-option=tag:blue,option:router,192.168.129.3\n"
89 #define DNSMASQ_CONF_FILE "/tmp/dnsmasq.conf"
91 /* Start of hostapd configuration */
92 #define MH_CTRL_INTF "/tmp/mh_wpa_ctrl"
93 #define MH_MONITOR_INTF "/tmp/mh_wpa_monitor"
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" \
103 "ctrl_interface=%s\n" \
106 "ignore_broadcast_ssid=%d\n" \
111 #define HOSTAPD_CONF "interface=%s\n" \
113 "ctrl_interface=%s\n" \
116 "ignore_broadcast_ssid=%d\n" \
120 "wowlan_triggers=any\n"
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 */
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.
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 */
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"
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"
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"
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
163 #define DNSMASQ_DBUS_INTERFACE "uk.org.thekelleys.dnsmasq"
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
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];
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;
188 vconf_callback_fn cb;
193 MOBILE_AP_DRV_INTERFACE_NONE,
196 } mobile_ap_drv_interface_e;
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);
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);
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);