#define WIFI_BSSID_LEN_MAX 6
#endif
+/*
+ * As per RFC 4861, a host should transmit up to MAX_RTR_SOLICITATIONS(3)
+ * Router Solicitation messages, each separated by at least
+ * RTR_SOLICITATION_INTERVAL(4) seconds to obtain RA for IPv6 auto-configuration.
+ */
+#define RTR_SOLICITATION_INTERVAL 4
+
static GSList *network_list = NULL;
static GSList *driver_list = NULL;
char encryption_mode[WIFI_ENCYPTION_MODE_LEN_MAX];
unsigned char bssid[WIFI_BSSID_LEN_MAX];
unsigned int maxrate;
- unsigned int isHS20AP;
+ bool isHS20AP;
unsigned int keymgmt;
char *keymgmt_type;
bool rsn_mode;
int disconnect_reason;
+ int assoc_status_code;
+ GSList *vsie_list;
#endif
} wifi;
};
-static void autoconf_ipv6_set(struct connman_network *network);
-
static const char *type2string(enum connman_network_type type)
{
switch (type) {
struct connman_network *network,
bool success, gpointer data)
{
-#if defined TIZEN_EXT
- struct connman_service *service;
- struct connman_ipconfig *ipconfig_ipv6;
-#endif
-
network->connecting = false;
if (success)
dhcp_success(network);
else
dhcp_failure(network);
-
-#if defined TIZEN_EXT
- service = connman_service_lookup_from_network(network);
- ipconfig_ipv6 = __connman_service_get_ip6config(service);
- if (__connman_ipconfig_get_method(ipconfig_ipv6) == CONNMAN_IPCONFIG_METHOD_AUTO) {
- DBG("IPv6 autoconf start");
- set_configuration(network, CONNMAN_IPCONFIG_TYPE_IPV6);
- autoconf_ipv6_set(network);
- }
-#endif
}
static int set_connected_manual(struct connman_network *network)
return err;
}
+static void autoconf_ipv6_set(struct connman_network *network);
static void dhcpv6_callback(struct connman_network *network,
enum __connman_dhcpv6_status status, gpointer data);
DBG("re-send router solicitation %d",
network->router_solicit_count);
network->router_solicit_count--;
- __connman_inet_ipv6_send_rs(network->index, 1,
+ __connman_inet_ipv6_send_rs(network->index, RTR_SOLICITATION_INTERVAL,
check_dhcpv6, network);
return;
}
+#if defined TIZEN_EXT
+ DBG("RA message is not received from server in reply of RS.");
+#endif
connman_network_unref(network);
return;
}
*/
if (!network->connected) {
connman_network_unref(network);
+#if defined TIZEN_EXT
+ DBG("Network is not connected");
+#endif
return;
}
* We do stateful/stateless DHCPv6 if router advertisement says so.
*/
if (reply->nd_ra_flags_reserved & ND_RA_FLAG_MANAGED) {
+#if defined TIZEN_EXT
+ DBG("IPv6 ND_RA_FLAG_MANAGED");
+#endif
__connman_dhcpv6_start(network, prefixes, dhcpv6_callback);
} else {
if (reply->nd_ra_flags_reserved & ND_RA_FLAG_OTHER)
+#if defined TIZEN_EXT
+ {
+ DBG("IPv6 ND_RA_FLAG_OTHER");
+#endif
__connman_dhcpv6_start_info(network,
dhcpv6_info_callback);
+#if defined TIZEN_EXT
+ }
+#endif
g_slist_free_full(prefixes, g_free);
network->connecting = false;
/* Try to get stateless DHCPv6 information, RFC 3736 */
network->router_solicit_count = 3;
- __connman_inet_ipv6_send_rs(index, 1, check_dhcpv6, network);
+ __connman_inet_ipv6_send_rs(index, RTR_SOLICITATION_INTERVAL,
+ check_dhcpv6, network);
}
static void set_connected(struct connman_network *network)
g_free(network->wifi.private_key_passphrase);
g_free(network->wifi.phase2_auth);
g_free(network->wifi.pin_wps);
-
+#if defined TIZEN_EXT
+ g_slist_free_full(network->wifi.vsie_list, g_free);
+#endif
g_free(network->path);
g_free(network->group);
g_free(network->node);
if (network->type != CONNMAN_NETWORK_TYPE_CELLULAR)
#endif
__connman_device_disconnect(network->device);
-
+#if defined TIZEN_EXT
+ DBG("ConnMan, Connect Request [%s]", network->name);
+#endif
err = network->driver->connect(network);
if (err < 0) {
if (err == -EINPROGRESS) {
return -EUNATCH;
network->connecting = false;
-
+#if defined TIZEN_EXT
+ DBG("ConnMan, Disconnect request");
+#endif
if (network->driver->disconnect)
err = network->driver->disconnect(network);
return -ENOSYS;
case CONNMAN_IPCONFIG_TYPE_IPV6:
-#if !defined TIZEN_EXT
set_configuration(network, type);
-#endif
method = __connman_ipconfig_get_method(ipconfig);
CONNMAN_SERVICE_STATE_CONFIGURATION,
CONNMAN_IPCONFIG_TYPE_IPV6);
#endif
-#if !defined TIZEN_EXT
autoconf_ipv6_set(network);
-#endif
break;
case CONNMAN_IPCONFIG_METHOD_FIXED:
case CONNMAN_IPCONFIG_METHOD_MANUAL:
-#if defined TIZEN_EXT
- set_configuration(network, type);
-#endif
r = manual_ipv6_set(network, ipconfig);
break;
return 0;
}
-int connman_network_set_is_hs20AP(struct connman_network *network,
- unsigned int isHS20AP)
+int connman_network_set_keymgmt(struct connman_network *network,
+ unsigned int keymgmt)
{
- if (!network)
+ if (network == NULL)
return 0;
- network->wifi.isHS20AP = isHS20AP;
+ network->wifi.keymgmt = keymgmt;
return 0;
}
-unsigned int connman_network_get_is_hs20AP(struct connman_network *network)
+unsigned int connman_network_get_keymgmt(struct connman_network *network)
{
- if (!network)
+ if (network == NULL)
return 0;
- return network->wifi.isHS20AP;
+ return network->wifi.keymgmt;
}
-int connman_network_set_keymgmt(struct connman_network *network,
- unsigned int keymgmt)
+int connman_network_set_disconnect_reason(struct connman_network *network,
+ int reason_code)
{
if (network == NULL)
return 0;
- network->wifi.keymgmt = keymgmt;
+ network->wifi.disconnect_reason = reason_code;
return 0;
}
-unsigned int connman_network_get_keymgmt(struct connman_network *network)
+int connman_network_get_disconnect_reason(struct connman_network *network)
{
if (network == NULL)
return 0;
- return network->wifi.keymgmt;
+ return network->wifi.disconnect_reason;
}
-int connman_network_set_disconnect_reason(struct connman_network *network,
- int reason_code)
+int connman_network_set_assoc_status_code(struct connman_network *network,
+ int assoc_status_code)
{
+
if (network == NULL)
return 0;
- network->wifi.disconnect_reason = reason_code;
-
+ network->wifi.assoc_status_code = assoc_status_code;
return 0;
}
-int connman_network_get_disconnect_reason(struct connman_network *network)
+int connman_network_get_assoc_status_code(struct connman_network *network)
{
if (network == NULL)
return 0;
- return network->wifi.disconnect_reason;
+ return network->wifi.assoc_status_code;
}
+
#endif
int connman_network_set_nameservers(struct connman_network *network,
g_free(network->wifi.security);
network->wifi.security = g_strdup(value);
} else if (g_str_equal(key, "WiFi.Passphrase")) {
+#if defined TIZEN_EXT
+ DBG("ConnMan, %p key %s", network, key);
+#endif
g_free(network->wifi.passphrase);
network->wifi.passphrase = g_strdup(value);
} else if (g_str_equal(key, "WiFi.EAP")) {
#if defined TIZEN_EXT
else if (g_strcmp0(key, "DefaultInternet") == 0)
network->default_internet = value;
+ else if (g_strcmp0(key, "WiFi.HS20AP") == 0)
+ network->wifi.isHS20AP = value;
#endif
return -EINVAL;
#if defined TIZEN_EXT
else if (g_str_equal(key, "DefaultInternet"))
return network->default_internet;
+ else if (g_str_equal(key, "WiFi.HS20AP"))
+ return network->wifi.isHS20AP;
#endif
return false;
}
+#if defined TIZEN_EXT
+/**
+ * connman_network_set_vsie_list:
+ * @network: network structure
+ * @vsie_list: GSList pointer
+ *
+ * Set vendor specific list pointer
+ */
+void connman_network_set_vsie_list(struct connman_network *network, GSList *vsie_list)
+{
+ network->wifi.vsie_list = vsie_list;
+}
+
+/**
+ * connman_network_get_vsie_list:
+ * @network: network structure
+ *
+ * Get vendor specific list pointer
+ */
+void *connman_network_get_vsie_list(struct connman_network *network)
+{
+ return network->wifi.vsie_list;
+}
+#endif
+
/**
* connman_network_set_blob:
* @network: network structure
const void *connman_network_get_blob(struct connman_network *network,
const char *key, unsigned int *size)
{
+#if !defined TIZEN_EXT
DBG("network %p key %s", network, key);
+#endif
if (g_str_equal(key, "WiFi.SSID")) {
if (size)