X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fnetwork.c;h=8eb8c1e557838aa7cfe1d81a6645a4bde334553d;hb=00b8c314dc2cfb641494d413f4b00d90a10ecbeb;hp=334202c0590fe3529c98a2ce3ac360da8b47156a;hpb=e8a4cf558fcca1fa316205dbef2c72c67e1e6fab;p=platform%2Fupstream%2Fconnman.git diff --git a/src/network.c b/src/network.c index 334202c..8eb8c1e 100755 --- a/src/network.c +++ b/src/network.c @@ -122,6 +122,7 @@ struct connman_network { unsigned int keymgmt; char *keymgmt_type; bool rsn_mode; + bool pmf_required; int disconnect_reason; int assoc_status_code; GSList *vsie_list; @@ -131,6 +132,7 @@ struct connman_network { char *phase1; unsigned char country_code[WIFI_COUNTRY_CODE_LEN]; GSList *bssid_list; + GSList *sec_list; ieee80211_modes_e phy_mode; connection_mode_e connection_mode; char *connector; @@ -140,6 +142,17 @@ struct connman_network { #if defined TIZEN_EXT unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX]; GHashTable *assoc_reject_table; + bool owe_transition_mode; + void *transition_mode_ssid; + int transition_mode_ssid_len; + unsigned char transition_mode_bssid[WIFI_BSSID_LEN_MAX]; + bool roaming_progress; + bool roaming_dhcp; + char *roaming_cur_bssid; + char *roaming_dst_bssid; + __time_t roam_scan_time; + unsigned int max_bssid_count; + int snr; #endif } wifi; @@ -550,6 +563,10 @@ static int set_connected_manual(struct connman_network *network) ipconfig = __connman_service_get_ip4config(service); __connman_ipconfig_enable(ipconfig); +#if defined TIZEN_EXT + if (!service || !ipconfig) + return -EINVAL; +#endif if (!__connman_ipconfig_get_local(ipconfig)) __connman_service_read_ip4config(service); @@ -585,7 +602,11 @@ static void remove_dhcp_timeout(struct connman_network *network) } } +#if defined TIZEN_EXT +int set_connected_dhcp(struct connman_network *network) +#else static int set_connected_dhcp(struct connman_network *network) +#endif { struct connman_service *service; struct connman_ipconfig *ipconfig_ipv4; @@ -731,6 +752,10 @@ static int dhcpv6_set_addresses(struct connman_network *network) network->connecting = false; ipconfig_ipv6 = __connman_service_get_ip6config(service); +#if defined TIZEN_EXT + if (!ipconfig_ipv6) + goto err; +#endif err = __connman_ipconfig_address_add(ipconfig_ipv6); if (err < 0) goto err; @@ -1161,7 +1186,9 @@ static int network_probe(struct connman_network *network) driver = NULL; continue; } - +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("driver %p name %s", driver, driver->name); if (driver->probe(network) == 0) @@ -1329,6 +1356,7 @@ static void network_destruct(struct connman_network *network) #if defined TIZEN_EXT g_slist_free_full(network->wifi.vsie_list, g_free); g_slist_free_full(network->wifi.bssid_list, g_free); + g_hash_table_destroy(network->wifi.assoc_reject_table); #endif g_free(network->path); g_free(network->group); @@ -1344,7 +1372,7 @@ static void network_destruct(struct connman_network *network) /** * connman_network_create: - * @identifier: network identifier (for example an unqiue name) + * @identifier: network identifier (for example an unique name) * * Allocate a new network and assign the #identifier to it. * @@ -1393,6 +1421,9 @@ struct connman_network * connman_network_ref_debug(struct connman_network *network, const char *file, int line, const char *caller) { +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("%p name %s ref %d by %s:%d:%s()", network, network->name, network->refcount + 1, file, line, caller); @@ -1410,6 +1441,9 @@ connman_network_ref_debug(struct connman_network *network, void connman_network_unref_debug(struct connman_network *network, const char *file, int line, const char *caller) { +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("%p name %s ref %d by %s:%d:%s()", network, network->name, network->refcount - 1, file, line, caller); @@ -1777,6 +1811,22 @@ int connman_network_set_associating(struct connman_network *network, return 0; } +#if defined TIZEN_EXT +static void set_authenticate_error(struct connman_network *network) +{ + struct connman_service *service; + + service = connman_service_lookup_from_network(network); + + if (!service) + return; + + __connman_service_indicate_error(service, + CONNMAN_SERVICE_ERROR_AUTH_FAILED); +} +#endif + + static void set_associate_error(struct connman_network *network) { struct connman_service *service; @@ -1784,8 +1834,11 @@ static void set_associate_error(struct connman_network *network) service = connman_service_lookup_from_network(network); #if defined TIZEN_EXT + if (!service) + return; + __connman_service_indicate_error(service, - CONNMAN_SERVICE_ERROR_AUTH_FAILED); + CONNMAN_SERVICE_ERROR_ASSOC_FAILED); #else __connman_service_indicate_error(service, CONNMAN_SERVICE_ERROR_CONNECT_FAILED); @@ -1907,6 +1960,9 @@ void connman_network_set_error(struct connman_network *network, set_connect_error(network); break; #if defined TIZEN_EXT + case CONNMAN_NETWORK_ERROR_AUTHENTICATE_FAIL: + set_authenticate_error(network); + break; case CONNMAN_NETWORK_ERROR_DHCP_FAIL: set_dhcp_error(network); break; @@ -2102,7 +2158,9 @@ int __connman_network_connect(struct connman_network *network) int __connman_network_disconnect(struct connman_network *network) { int err = 0; - +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("network %p", network); remove_ipv4ll_timeout(network); @@ -2334,9 +2392,10 @@ int connman_network_set_bssid(struct connman_network *network, if (bssid == NULL) return -EINVAL; - DBG("network %p bssid %02x:%02x:%02x:%02x:%02x:%02x", network, - bssid[0], bssid[1], bssid[2], - bssid[3], bssid[4], bssid[5]); + if (!simplified_log) + DBG("network %p bssid %02x:%02x:%02x:%02x:%02x:%02x", network, + bssid[0], bssid[1], bssid[2], + bssid[3], bssid[4], bssid[5]); for (;i < WIFI_BSSID_LEN_MAX;i++) network->wifi.bssid[i] = bssid[i]; @@ -2349,6 +2408,41 @@ unsigned char *connman_network_get_bssid(struct connman_network *network) return (unsigned char *)network->wifi.bssid; } +int connman_network_set_transition_mode_bssid(struct connman_network *network, + const unsigned char *transition_mode_bssid) +{ + int i = 0; + + if (transition_mode_bssid == NULL) + return -EINVAL; + + for (;i < WIFI_BSSID_LEN_MAX;i++) + network->wifi.transition_mode_bssid[i] = transition_mode_bssid[i]; + + return 0; +} + +unsigned char *connman_network_get_transition_mode_bssid(struct connman_network *network) +{ + return (unsigned char *)network->wifi.transition_mode_bssid; +} + +bool connman_network_check_transition_mode(struct connman_network *network1, struct connman_network *network2) +{ + + if (network1 == NULL || network2 == NULL) + return FALSE; + + if (network1->wifi.owe_transition_mode == FALSE || network2->wifi.owe_transition_mode == FALSE) + return FALSE; + + if ((memcmp(network1->wifi.bssid, network2->wifi.transition_mode_bssid, WIFI_BSSID_LEN_MAX) == 0) + && (memcmp(network1->wifi.transition_mode_bssid, network2->wifi.bssid, WIFI_BSSID_LEN_MAX) == 0)) + return TRUE; + else + return FALSE; +} + int connman_network_set_maxspeed(struct connman_network *network, int maxspeed) { @@ -2367,6 +2461,20 @@ int connman_network_get_maxspeed(struct connman_network *network) return 0; } +int connman_network_set_sec_list(struct connman_network *network, + GSList *sec_list) +{ + g_slist_free(network->wifi.sec_list); + network->wifi.sec_list = sec_list; + + return 0; +} + +void *connman_network_get_sec_list(struct connman_network *network) +{ + return network->wifi.sec_list; +} + int connman_network_set_maxrate(struct connman_network *network, unsigned int maxrate) { @@ -2390,7 +2498,8 @@ int connman_network_set_enc_mode(struct connman_network *network, if (encryption_mode == NULL) return -EINVAL; - DBG("network %p encryption mode %s", network, encryption_mode); + if (!simplified_log) + DBG("network %p encryption mode %s", network, encryption_mode); g_strlcpy(network->wifi.encryption_mode, encryption_mode, WIFI_ENCYPTION_MODE_LEN_MAX); @@ -2483,8 +2592,9 @@ int connman_network_set_countrycode(struct connman_network *network, if (country_code == NULL) return -EINVAL; - DBG("network %p Country Code %02x:%02x",network, - country_code[0],country_code[1]); + if (!simplified_log) + DBG("network %p Country Code %02x:%02x",network, + country_code[0],country_code[1]); for (; i < WIFI_COUNTRY_CODE_LEN; i++) network->wifi.country_code[i] = country_code[i]; @@ -2500,16 +2610,23 @@ unsigned char *connman_network_get_countrycode(struct connman_network *network) int connman_network_set_bssid_list(struct connman_network *network, GSList *bssids) { + unsigned int max_bssid_count; + g_slist_free_full(network->wifi.bssid_list, g_free); network->wifi.bssid_list = bssids; + max_bssid_count = g_slist_length(bssids); + if (network->wifi.max_bssid_count < max_bssid_count) + network->wifi.max_bssid_count = max_bssid_count; + return 0; } int connman_network_set_phy_mode(struct connman_network *network, ieee80211_modes_e mode) { - DBG("network %p phy mode %d", network, mode); + if (!simplified_log) + DBG("network %p phy mode %d", network, mode); network->wifi.phy_mode = mode; return 0; @@ -2539,6 +2656,11 @@ void *connman_network_get_bssid_list(struct connman_network *network) return network->wifi.bssid_list; } +unsigned int connman_network_get_max_bssid_count(struct connman_network *network) +{ + return network->wifi.max_bssid_count; +} + int connman_network_set_last_connected_bssid(struct connman_network *network, const unsigned char *bssid) { @@ -2567,6 +2689,8 @@ void connman_network_set_assoc_reject_table(struct connman_network *network, if (!assoc_reject_table) return; + g_hash_table_destroy(network->wifi.assoc_reject_table); + network->wifi.assoc_reject_table = assoc_reject_table; } @@ -2577,6 +2701,27 @@ GHashTable *connman_network_get_assoc_reject_table(struct connman_network *netwo return network->wifi.assoc_reject_table; } + +__time_t connman_network_get_roam_scan_time(struct connman_network *network) +{ + return network->wifi.roam_scan_time; +} + +void connman_network_set_roam_scan_time(struct connman_network *network, + __time_t roam_scan_time) +{ + network->wifi.roam_scan_time = roam_scan_time; +} + +int connman_network_get_snr(struct connman_network *network) +{ + return network->wifi.snr; +} + +void connman_network_set_snr(struct connman_network *network, int snr) +{ + network->wifi.snr = snr; +} #endif int connman_network_set_nameservers(struct connman_network *network, @@ -2641,6 +2786,9 @@ int connman_network_set_domain(struct connman_network *network, int connman_network_set_name(struct connman_network *network, const char *name) { +#if defined TIZEN_EXT + if (!simplified_log) +#endif DBG("network %p name %s", network, name); g_free(network->name); @@ -2694,6 +2842,21 @@ int connman_network_set_wifi_channel(struct connman_network *network, return 0; } +int connman_network_set_autoconnect(struct connman_network *network, + bool autoconnect) +{ + if (!network->driver || !network->driver->set_autoconnect) + return 0; + return network->driver->set_autoconnect(network, autoconnect); +} + +bool __connman_network_native_autoconnect(struct connman_network *network) +{ + if (!network->driver || !network->driver->set_autoconnect) + return false; + return true; +} + uint16_t connman_network_get_wifi_channel(struct connman_network *network) { return network->wifi.channel; @@ -2783,6 +2946,12 @@ int connman_network_set_string(struct connman_network *network, } else if (g_str_equal(key, "WiFi.NetAccessKey")) { g_free(network->wifi.net_access_key); network->wifi.net_access_key = g_strdup(value); + } else if (g_str_equal(key, "WiFi.RoamingCurBSSID")) { + g_free(network->wifi.roaming_cur_bssid); + network->wifi.roaming_cur_bssid = g_strdup(value); + } else if (g_str_equal(key, "WiFi.RoamingDstBSSID")) { + g_free(network->wifi.roaming_dst_bssid); + network->wifi.roaming_dst_bssid = g_strdup(value); #endif } else { return -EINVAL; @@ -2810,15 +2979,7 @@ const char *connman_network_get_string(struct connman_network *network, else if (g_str_equal(key, "WiFi.Mode")) return network->wifi.mode; else if (g_str_equal(key, "WiFi.Security")) -#if defined TIZEN_EXT - if (network->wifi.rsn_mode != true || - g_str_equal(network->wifi.security, "ieee8021x")) - return network->wifi.security; - else - return "rsn"; -#else return network->wifi.security; -#endif else if (g_str_equal(key, "WiFi.Passphrase")) return network->wifi.passphrase; else if (g_str_equal(key, "WiFi.EAP")) @@ -2856,6 +3017,10 @@ const char *connman_network_get_string(struct connman_network *network, return network->wifi.c_sign_key; else if (g_str_equal(key, "WiFi.NetAccessKey")) return network->wifi.net_access_key; + else if (g_str_equal(key, "WiFi.RoamingCurBSSID")) + return network->wifi.roaming_cur_bssid; + else if (g_str_equal(key, "WiFi.RoamingDstBSSID")) + return network->wifi.roaming_dst_bssid; #endif return NULL; @@ -2885,6 +3050,14 @@ int connman_network_set_bool(struct connman_network *network, network->default_internet = value; else if (g_strcmp0(key, "WiFi.HS20AP") == 0) network->wifi.isHS20AP = value; + else if (g_strcmp0(key, "WiFi.TRANSITION_MODE") == 0) + network->wifi.owe_transition_mode = value; + else if (g_strcmp0(key, "WiFi.Roaming") == 0) + network->wifi.roaming_progress = value; + else if (g_strcmp0(key, "WiFi.RoamingDHCP") == 0) + network->wifi.roaming_dhcp = value; + else if (g_strcmp0(key, "WiFi.PMFRequired") == 0) + network->wifi.pmf_required = value; #endif return -EINVAL; @@ -2913,6 +3086,14 @@ bool connman_network_get_bool(struct connman_network *network, return network->default_internet; else if (g_str_equal(key, "WiFi.HS20AP")) return network->wifi.isHS20AP; + else if (g_str_equal(key, "WiFi.TRANSITION_MODE")) + return network->wifi.owe_transition_mode; + else if (g_str_equal(key, "WiFi.Roaming")) + return network->wifi.roaming_progress; + else if (g_str_equal(key, "WiFi.RoamingDHCP")) + return network->wifi.roaming_dhcp; + else if (g_str_equal(key, "WiFi.PMFRequired")) + return network->wifi.pmf_required; #endif return false; @@ -2964,6 +3145,16 @@ int connman_network_set_blob(struct connman_network *network, network->wifi.ssid_len = size; } else network->wifi.ssid_len = 0; +#ifdef TIZEN_EXT + } else if (g_str_equal(key, "WiFi.TRANSITION_MODE_SSID")) { + g_free(network->wifi.transition_mode_ssid); + network->wifi.transition_mode_ssid = g_try_malloc(size); + if (network->wifi.transition_mode_ssid) { + memcpy(network->wifi.transition_mode_ssid, data, size); + network->wifi.transition_mode_ssid_len = size; + } else + network->wifi.transition_mode_ssid_len = 0; +#endif } else { return -EINVAL; } @@ -2986,6 +3177,12 @@ const void *connman_network_get_blob(struct connman_network *network, if (size) *size = network->wifi.ssid_len; return network->wifi.ssid; +#ifdef TIZEN_EXT + } else if (g_str_equal(key, "WiFi.TRANSITION_MODE_SSID")) { + if (size) + *size = network->wifi.transition_mode_ssid_len; + return network->wifi.transition_mode_ssid; +#endif } return NULL;