2 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <arpa/inet.h>
21 #include "net_wifi_private.h"
23 static char* __ap_convert_ip_to_string(net_addr_t *ip_addr)
25 unsigned char *ipaddr = (unsigned char *)&ip_addr->Data.Ipv4.s_addr;
27 char *ipstr = g_try_malloc0(16);
31 g_snprintf(ipstr, 16, "%d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
36 static void __wifi_init_ap(net_profile_info_t *profile_info, const char *essid)
38 profile_info->profile_type = NET_DEVICE_WIFI;
39 profile_info->ProfileState = NET_STATE_TYPE_IDLE;
40 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
41 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
42 profile_info->ProfileInfo.Wlan.wlan_mode = NETPM_WLAN_CONNMODE_AUTO;
43 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
44 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
45 g_strlcpy(profile_info->ProfileInfo.Wlan.essid, essid, NET_WLAN_ESSID_LEN+1);
48 static char *__wifi_create_profile_name(const char *ssid, const int net_mode, const int sec_mode)
52 const char *hidden_str = "hidden";
53 char buf_tmp[32] = { 0, };
57 const char *mode = "managed";
60 if (net_mode == NETPM_WLAN_CONNMODE_ADHOC) {
61 WIFI_LOG(WIFI_ERROR, "wlan_mode is adhoc");
66 case WLAN_SEC_MODE_NONE:
69 case WLAN_SEC_MODE_WEP:
72 case WLAN_SEC_MODE_WPA_PSK:
73 case WLAN_SEC_MODE_WPA2_PSK:
76 case WLAN_SEC_MODE_IEEE8021X:
80 WIFI_LOG(WIFI_ERROR, "Invalid security type");
85 ssid_len = strlen(ssid);
86 actual_len = ssid_len * 2;
88 ssid_len = strlen(hidden_str);
89 actual_len = ssid_len;
92 buf = g_try_malloc0(actual_len + strlen(mode) + strlen(g_sec) + 3);
99 for (i = 0; i < ssid_len; i++) {
100 g_snprintf(pbuf, 3, "%02x", ssid[i]);
104 g_strlcat(buf, hidden_str,
105 actual_len + strlen(mode) + strlen(g_sec) + 3);
107 g_snprintf(buf_tmp, 32, "_%s_%s", mode, g_sec);
108 g_strlcat(buf, buf_tmp,
109 actual_len + strlen(mode) + strlen(g_sec) + 3);
111 WIFI_LOG(WIFI_INFO, "Profile name: %s", buf);
116 static bool _wifi_set_profile_name_to_ap(net_profile_info_t *ap_info)
118 char *profile_name = NULL;
120 if (ap_info == NULL) {
121 WIFI_LOG(WIFI_ERROR, "profile_info is NULL");
125 profile_name = __wifi_create_profile_name(
126 ap_info->ProfileInfo.Wlan.essid,
127 ap_info->ProfileInfo.Wlan.wlan_mode,
128 ap_info->ProfileInfo.Wlan.security_info.sec_mode);
129 if (profile_name == NULL) {
130 WIFI_LOG(WIFI_ERROR, "Failed to make a group name");
134 g_strlcpy(ap_info->ProfileInfo.Wlan.net_info.ProfileName,
135 profile_name, NET_PROFILE_NAME_LEN_MAX);
137 g_free(profile_name);
142 wifi_connection_state_e _wifi_convert_to_ap_state(net_state_type_t state)
144 wifi_connection_state_e ap_state;
147 case NET_STATE_TYPE_ONLINE:
148 case NET_STATE_TYPE_READY:
149 ap_state = WIFI_CONNECTION_STATE_CONNECTED;
151 case NET_STATE_TYPE_FAILURE:
152 ap_state = WIFI_CONNECTION_STATE_FAILURE;
154 case NET_STATE_TYPE_IDLE:
155 case NET_STATE_TYPE_DISCONNECT:
156 ap_state = WIFI_CONNECTION_STATE_DISCONNECTED;
158 case NET_STATE_TYPE_ASSOCIATION:
159 ap_state = WIFI_CONNECTION_STATE_ASSOCIATION;
161 case NET_STATE_TYPE_CONFIGURATION:
162 ap_state = WIFI_CONNECTION_STATE_CONFIGURATION;
172 /* Wi-Fi AP ******************************************************************/
173 EXPORT_API int wifi_ap_create(const char* essid, wifi_ap_h* ap)
175 if (essid == NULL || ap == NULL) {
176 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
177 return WIFI_ERROR_INVALID_PARAMETER;
180 net_profile_info_t *ap_info = g_try_malloc0(sizeof(net_profile_info_t));
182 return WIFI_ERROR_OUT_OF_MEMORY;
184 __wifi_init_ap(ap_info, essid);
186 _wifi_libnet_add_to_ap_list((wifi_ap_h)ap_info);
187 *ap = (wifi_ap_h)ap_info;
189 return WIFI_ERROR_NONE;
192 EXPORT_API int wifi_ap_hidden_create(const char* essid, wifi_ap_h* ap)
194 if (essid == NULL || ap == NULL) {
195 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
196 return WIFI_ERROR_INVALID_PARAMETER;
199 net_profile_info_t *ap_info = g_try_malloc0(sizeof(net_profile_info_t));
201 return WIFI_ERROR_OUT_OF_MEMORY;
203 __wifi_init_ap(ap_info, essid);
204 ap_info->ProfileInfo.Wlan.is_hidden = TRUE;
206 _wifi_libnet_add_to_ap_list((wifi_ap_h)ap_info);
207 *ap = (wifi_ap_h)ap_info;
209 return WIFI_ERROR_NONE;
212 EXPORT_API int wifi_ap_destroy(wifi_ap_h ap)
214 if (_wifi_libnet_check_ap_validity(ap) == false) {
215 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
216 return WIFI_ERROR_INVALID_PARAMETER;
219 _wifi_libnet_remove_from_ap_list(ap);
221 return WIFI_ERROR_NONE;
224 EXPORT_API int wifi_ap_clone(wifi_ap_h* cloned_ap, wifi_ap_h origin)
226 if (_wifi_libnet_check_ap_validity(origin) == false || cloned_ap == NULL) {
227 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
228 return WIFI_ERROR_INVALID_PARAMETER;
231 net_profile_info_t *ap_info = g_try_malloc0(sizeof(net_profile_info_t));
233 return WIFI_ERROR_OUT_OF_MEMORY;
235 memcpy(ap_info, origin, sizeof(net_profile_info_t));
237 _wifi_libnet_add_to_ap_list((wifi_ap_h)ap_info);
238 *cloned_ap = (wifi_ap_h)ap_info;
240 return WIFI_ERROR_NONE;
243 EXPORT_API int wifi_ap_refresh(wifi_ap_h ap)
245 net_profile_info_t ap_info_local;
246 net_profile_info_t *ap_info = ap;
248 if (_wifi_libnet_check_ap_validity(ap) == false) {
249 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
250 return WIFI_ERROR_INVALID_PARAMETER;
253 int rv = NET_ERR_NONE;
254 rv = net_get_profile_info(ap_info->ProfileName, &ap_info_local);
255 if (rv == NET_ERR_ACCESS_DENIED) {
256 WIFI_LOG(WIFI_ERROR, "Access denied");
257 return WIFI_ERROR_PERMISSION_DENIED;
258 } else if (rv != NET_ERR_NONE) {
259 WIFI_LOG(WIFI_ERROR, "Failed to getprofile_info");
260 return WIFI_ERROR_OPERATION_FAILED;
263 memcpy(ap, &ap_info_local, sizeof(net_profile_info_t));
265 return WIFI_ERROR_NONE;
268 /* Wi-Fi network information *************************************************/
269 EXPORT_API int wifi_ap_get_essid(wifi_ap_h ap, char** essid)
271 if (_wifi_libnet_check_ap_validity(ap) == false || essid == NULL) {
272 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
273 return WIFI_ERROR_INVALID_PARAMETER;
276 net_profile_info_t *profile_info = ap;
277 *essid = g_strdup(profile_info->ProfileInfo.Wlan.essid);
279 return WIFI_ERROR_OUT_OF_MEMORY;
281 return WIFI_ERROR_NONE;
284 EXPORT_API int wifi_ap_get_bssid(wifi_ap_h ap, char** bssid)
286 if (_wifi_libnet_check_ap_validity(ap) == false || bssid == NULL) {
287 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
288 return WIFI_ERROR_INVALID_PARAMETER;
291 net_profile_info_t *profile_info = ap;
292 *bssid = g_strdup(profile_info->ProfileInfo.Wlan.bssid);
294 return WIFI_ERROR_OUT_OF_MEMORY;
296 return WIFI_ERROR_NONE;
299 EXPORT_API int wifi_ap_get_rssi(wifi_ap_h ap, int* rssi)
301 if (_wifi_libnet_check_ap_validity(ap) == false || rssi == NULL) {
302 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
303 return WIFI_ERROR_INVALID_PARAMETER;
306 net_profile_info_t *profile_info = ap;
307 *rssi = (int)(profile_info->ProfileInfo.Wlan.Strength - 120);
309 return WIFI_ERROR_NONE;
312 EXPORT_API int wifi_ap_get_frequency(wifi_ap_h ap, int* frequency)
314 if (_wifi_libnet_check_ap_validity(ap) == false || frequency == NULL) {
315 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
316 return WIFI_ERROR_INVALID_PARAMETER;
319 net_profile_info_t *profile_info = ap;
320 *frequency = (int)profile_info->ProfileInfo.Wlan.frequency;
322 return WIFI_ERROR_NONE;
325 EXPORT_API int wifi_ap_get_max_speed(wifi_ap_h ap, int* max_speed)
327 if (_wifi_libnet_check_ap_validity(ap) == false || max_speed == NULL) {
328 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
329 return WIFI_ERROR_INVALID_PARAMETER;
332 net_profile_info_t *profile_info = ap;
333 *max_speed = (int)profile_info->ProfileInfo.Wlan.max_rate / 1000000;
335 return WIFI_ERROR_NONE;
338 EXPORT_API int wifi_ap_is_favorite(wifi_ap_h ap, bool* favorite)
340 if (_wifi_libnet_check_ap_validity(ap) == false || favorite == NULL) {
341 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
342 return WIFI_ERROR_INVALID_PARAMETER;
345 net_profile_info_t *profile_info = ap;
347 if (profile_info->Favourite)
352 return WIFI_ERROR_NONE;
355 EXPORT_API int wifi_ap_is_passpoint(wifi_ap_h ap, bool* passpoint)
357 if (_wifi_libnet_check_ap_validity(ap) == false || passpoint == NULL) {
358 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
359 return WIFI_ERROR_INVALID_PARAMETER;
362 net_profile_info_t *profile_info = ap;
364 if (profile_info->ProfileInfo.Wlan.passpoint)
369 return WIFI_ERROR_NONE;
372 EXPORT_API int wifi_ap_get_connection_state(wifi_ap_h ap, wifi_connection_state_e* state)
374 if (_wifi_libnet_check_ap_validity(ap) == false || state == NULL) {
375 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
376 return WIFI_ERROR_INVALID_PARAMETER;
379 net_profile_info_t *profile_info = ap;
381 *state = _wifi_convert_to_ap_state(profile_info->ProfileState);
384 return WIFI_ERROR_OPERATION_FAILED;
386 return WIFI_ERROR_NONE;
389 EXPORT_API int wifi_ap_get_ip_config_type(wifi_ap_h ap, wifi_address_family_e address_family, wifi_ip_config_type_e* type)
391 if (_wifi_libnet_check_ap_validity(ap) == false ||
392 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
393 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
395 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
396 return WIFI_ERROR_INVALID_PARAMETER;
399 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
400 WIFI_LOG(WIFI_ERROR, "Not supported yet");
401 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
404 net_profile_info_t *profile_info = ap;
406 switch (profile_info->ProfileInfo.Wlan.net_info.IpConfigType) {
407 case NET_IP_CONFIG_TYPE_STATIC:
408 *type = WIFI_IP_CONFIG_TYPE_STATIC;
410 case NET_IP_CONFIG_TYPE_DYNAMIC:
411 *type = WIFI_IP_CONFIG_TYPE_DYNAMIC;
413 case NET_IP_CONFIG_TYPE_AUTO_IP:
414 *type = WIFI_IP_CONFIG_TYPE_AUTO;
416 case NET_IP_CONFIG_TYPE_FIXED:
417 *type = WIFI_IP_CONFIG_TYPE_FIXED;
419 case NET_IP_CONFIG_TYPE_OFF:
420 *type = WIFI_IP_CONFIG_TYPE_NONE;
423 return WIFI_ERROR_OPERATION_FAILED;
426 return WIFI_ERROR_NONE;
429 EXPORT_API int wifi_ap_set_ip_config_type(wifi_ap_h ap, wifi_address_family_e address_family, wifi_ip_config_type_e type)
431 if (_wifi_libnet_check_ap_validity(ap) == false ||
432 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
433 address_family != WIFI_ADDRESS_FAMILY_IPV6)) {
434 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
435 return WIFI_ERROR_INVALID_PARAMETER;
438 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
439 WIFI_LOG(WIFI_ERROR, "Not supported yet");
440 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
443 net_profile_info_t *profile_info = ap;
446 case WIFI_IP_CONFIG_TYPE_STATIC:
447 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_STATIC;
449 case WIFI_IP_CONFIG_TYPE_DYNAMIC:
450 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_DYNAMIC;
452 case WIFI_IP_CONFIG_TYPE_AUTO:
453 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_AUTO_IP;
455 case WIFI_IP_CONFIG_TYPE_FIXED:
456 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_FIXED;
458 case WIFI_IP_CONFIG_TYPE_NONE:
459 profile_info->ProfileInfo.Wlan.net_info.IpConfigType = NET_IP_CONFIG_TYPE_OFF;
462 return WIFI_ERROR_INVALID_PARAMETER;
465 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
466 return WIFI_ERROR_NONE;
468 return _wifi_update_ap_info(profile_info);
471 EXPORT_API int wifi_ap_get_ip_address(wifi_ap_h ap, wifi_address_family_e address_family, char** ip_address)
473 if (_wifi_libnet_check_ap_validity(ap) == false ||
474 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
475 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
476 ip_address == NULL) {
477 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
478 return WIFI_ERROR_INVALID_PARAMETER;
481 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
482 WIFI_LOG(WIFI_ERROR, "Not supported yet");
483 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
486 net_profile_info_t *profile_info = ap;
487 *ip_address = __ap_convert_ip_to_string(&profile_info->ProfileInfo.Wlan.net_info.IpAddr);
488 if (*ip_address == NULL)
489 return WIFI_ERROR_OUT_OF_MEMORY;
491 return WIFI_ERROR_NONE;
494 EXPORT_API int wifi_ap_set_ip_address(wifi_ap_h ap, wifi_address_family_e address_family, const char* ip_address)
496 if (_wifi_libnet_check_ap_validity(ap) == false ||
497 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
498 address_family != WIFI_ADDRESS_FAMILY_IPV6)) {
499 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
500 return WIFI_ERROR_INVALID_PARAMETER;
503 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
504 WIFI_LOG(WIFI_ERROR, "Not supported yet");
505 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
508 net_profile_info_t *profile_info = ap;
510 if (ip_address == NULL)
511 profile_info->ProfileInfo.Wlan.net_info.IpAddr.Data.Ipv4.s_addr = 0;
512 else if (inet_aton(ip_address, &(profile_info->ProfileInfo.Wlan.net_info.IpAddr.Data.Ipv4)) == 0)
513 return WIFI_ERROR_INVALID_PARAMETER;
515 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
516 return WIFI_ERROR_NONE;
518 return _wifi_update_ap_info(profile_info);
521 EXPORT_API int wifi_ap_get_subnet_mask(wifi_ap_h ap, wifi_address_family_e address_family, char** subnet_mask)
523 if (_wifi_libnet_check_ap_validity(ap) == false ||
524 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
525 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
526 subnet_mask == NULL) {
527 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
528 return WIFI_ERROR_INVALID_PARAMETER;
531 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
532 WIFI_LOG(WIFI_ERROR, "Not supported yet");
533 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
536 net_profile_info_t *profile_info = ap;
537 *subnet_mask = __ap_convert_ip_to_string(&profile_info->ProfileInfo.Wlan.net_info.SubnetMask);
538 if (*subnet_mask == NULL)
539 return WIFI_ERROR_OUT_OF_MEMORY;
541 return WIFI_ERROR_NONE;
544 EXPORT_API int wifi_ap_set_subnet_mask(wifi_ap_h ap, wifi_address_family_e address_family, const char* subnet_mask)
546 if (_wifi_libnet_check_ap_validity(ap) == false ||
547 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
548 address_family != WIFI_ADDRESS_FAMILY_IPV6)) {
549 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
550 return WIFI_ERROR_INVALID_PARAMETER;
553 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
554 WIFI_LOG(WIFI_ERROR, "Not supported yet");
555 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
558 net_profile_info_t *profile_info = ap;
560 if (subnet_mask == NULL)
561 profile_info->ProfileInfo.Wlan.net_info.SubnetMask.Data.Ipv4.s_addr = 0;
562 else if (inet_aton(subnet_mask, &(profile_info->ProfileInfo.Wlan.net_info.SubnetMask.Data.Ipv4)) == 0)
563 return WIFI_ERROR_INVALID_PARAMETER;
565 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
566 return WIFI_ERROR_NONE;
568 return _wifi_update_ap_info(profile_info);
571 EXPORT_API int wifi_ap_get_gateway_address(wifi_ap_h ap, wifi_address_family_e address_family, char** gateway_address)
573 if (_wifi_libnet_check_ap_validity(ap) == false ||
574 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
575 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
576 gateway_address == NULL) {
577 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
578 return WIFI_ERROR_INVALID_PARAMETER;
581 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
582 WIFI_LOG(WIFI_ERROR, "Not supported yet");
583 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
586 net_profile_info_t *profile_info = ap;
587 *gateway_address = __ap_convert_ip_to_string(&profile_info->ProfileInfo.Wlan.net_info.GatewayAddr);
588 if (*gateway_address == NULL)
589 return WIFI_ERROR_OUT_OF_MEMORY;
591 return WIFI_ERROR_NONE;
594 EXPORT_API int wifi_ap_set_gateway_address(wifi_ap_h ap, wifi_address_family_e address_family, const char* gateway_address)
596 if (_wifi_libnet_check_ap_validity(ap) == false ||
597 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
598 address_family != WIFI_ADDRESS_FAMILY_IPV6)) {
599 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
600 return WIFI_ERROR_INVALID_PARAMETER;
603 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
604 WIFI_LOG(WIFI_ERROR, "Not supported yet");
605 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
608 net_profile_info_t *profile_info = ap;
610 if (gateway_address == NULL)
611 profile_info->ProfileInfo.Wlan.net_info.GatewayAddr.Data.Ipv4.s_addr = 0;
612 else if (inet_aton(gateway_address, &(profile_info->ProfileInfo.Wlan.net_info.GatewayAddr.Data.Ipv4)) == 0)
613 return WIFI_ERROR_INVALID_PARAMETER;
615 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
616 return WIFI_ERROR_NONE;
618 return _wifi_update_ap_info(profile_info);
621 EXPORT_API int wifi_ap_get_proxy_address(wifi_ap_h ap, wifi_address_family_e address_family, char** proxy_address)
623 if (_wifi_libnet_check_ap_validity(ap) == false ||
624 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
625 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
626 proxy_address == NULL) {
627 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
628 return WIFI_ERROR_INVALID_PARAMETER;
631 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
632 WIFI_LOG(WIFI_ERROR, "Not supported yet");
633 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
636 net_profile_info_t *profile_info = ap;
637 *proxy_address = g_strdup(profile_info->ProfileInfo.Wlan.net_info.ProxyAddr);
638 if (*proxy_address == NULL)
639 return WIFI_ERROR_OUT_OF_MEMORY;
641 return WIFI_ERROR_NONE;
644 EXPORT_API int wifi_ap_set_proxy_address(wifi_ap_h ap, wifi_address_family_e address_family, const char* proxy_address)
646 if (_wifi_libnet_check_ap_validity(ap) == false ||
647 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
648 address_family != WIFI_ADDRESS_FAMILY_IPV6)) {
649 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
650 return WIFI_ERROR_INVALID_PARAMETER;
653 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
654 WIFI_LOG(WIFI_ERROR, "Not supported yet");
655 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
658 net_profile_info_t *profile_info = ap;
660 if (proxy_address == NULL)
661 profile_info->ProfileInfo.Wlan.net_info.ProxyAddr[0] = '\0';
663 g_strlcpy(profile_info->ProfileInfo.Wlan.net_info.ProxyAddr,
664 proxy_address, NET_PROXY_LEN_MAX+1);
666 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
667 return WIFI_ERROR_NONE;
669 return _wifi_update_ap_info(profile_info);
672 EXPORT_API int wifi_ap_get_proxy_type(wifi_ap_h ap, wifi_proxy_type_e* type)
674 if (_wifi_libnet_check_ap_validity(ap) == false || type == NULL) {
675 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
676 return WIFI_ERROR_INVALID_PARAMETER;
679 net_profile_info_t *profile_info = ap;
681 switch (profile_info->ProfileInfo.Wlan.net_info.ProxyMethod) {
682 case NET_PROXY_TYPE_DIRECT:
683 *type = WIFI_PROXY_TYPE_DIRECT;
685 case NET_PROXY_TYPE_AUTO:
686 *type = WIFI_PROXY_TYPE_AUTO;
688 case NET_PROXY_TYPE_MANUAL:
689 *type = WIFI_PROXY_TYPE_MANUAL;
691 case NET_PROXY_TYPE_UNKNOWN:
692 *type = WIFI_PROXY_TYPE_DIRECT;
695 return WIFI_ERROR_OPERATION_FAILED;
698 return WIFI_ERROR_NONE;
701 EXPORT_API int wifi_ap_set_proxy_type(wifi_ap_h ap, wifi_proxy_type_e proxy_type)
703 if (_wifi_libnet_check_ap_validity(ap) == false) {
704 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
705 return WIFI_ERROR_INVALID_PARAMETER;
708 net_profile_info_t *profile_info = ap;
711 switch (proxy_type) {
712 case WIFI_PROXY_TYPE_DIRECT:
713 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_DIRECT;
715 case WIFI_PROXY_TYPE_AUTO:
716 profile_info->ProfileInfo.Wlan.net_info.ProxyAddr[0] = '\0';
717 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_AUTO;
719 case WIFI_PROXY_TYPE_MANUAL:
720 profile_info->ProfileInfo.Wlan.net_info.ProxyAddr[0] = '\0';
721 profile_info->ProfileInfo.Wlan.net_info.ProxyMethod = NET_PROXY_TYPE_MANUAL;
724 return WIFI_ERROR_INVALID_PARAMETER;
727 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
728 return WIFI_ERROR_NONE;
730 rv =_wifi_update_ap_info(profile_info);
731 if (rv != NET_ERR_NONE && proxy_type == WIFI_PROXY_TYPE_MANUAL) {
732 g_strlcpy(profile_info->ProfileInfo.Wlan.net_info.ProxyAddr, "0.0.0.0:8080", 15);
733 rv = _wifi_update_ap_info(profile_info);
739 EXPORT_API int wifi_ap_get_dns_address(wifi_ap_h ap, int order, wifi_address_family_e address_family, char** dns_address)
741 if (_wifi_libnet_check_ap_validity(ap) == false ||
742 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
743 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
744 dns_address == NULL ||
746 order > NET_DNS_ADDR_MAX) {
747 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
748 return WIFI_ERROR_INVALID_PARAMETER;
751 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
752 WIFI_LOG(WIFI_ERROR, "Not supported yet");
753 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
756 net_profile_info_t *profile_info = ap;
758 *dns_address = __ap_convert_ip_to_string(&profile_info->ProfileInfo.Wlan.net_info.DnsAddr[order-1]);
759 if (*dns_address == NULL)
760 return WIFI_ERROR_OUT_OF_MEMORY;
762 return WIFI_ERROR_NONE;
765 EXPORT_API int wifi_ap_set_dns_address(wifi_ap_h ap, int order, wifi_address_family_e address_family, const char* dns_address)
767 if (_wifi_libnet_check_ap_validity(ap) == false ||
768 (address_family != WIFI_ADDRESS_FAMILY_IPV4 &&
769 address_family != WIFI_ADDRESS_FAMILY_IPV6) ||
771 order > NET_DNS_ADDR_MAX) {
772 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
773 return WIFI_ERROR_INVALID_PARAMETER;
776 if (address_family == WIFI_ADDRESS_FAMILY_IPV6) {
777 WIFI_LOG(WIFI_ERROR, "Not supported yet");
778 return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
781 net_profile_info_t *profile_info = ap;
783 if (dns_address == NULL)
784 profile_info->ProfileInfo.Wlan.net_info.DnsAddr[order-1].Data.Ipv4.s_addr = 0;
785 else if (inet_aton(dns_address, &(profile_info->ProfileInfo.Wlan.net_info.DnsAddr[order-1].Data.Ipv4)) == 0)
786 return WIFI_ERROR_INVALID_PARAMETER;
788 if (profile_info->ProfileInfo.Wlan.net_info.DnsCount < order)
789 profile_info->ProfileInfo.Wlan.net_info.DnsCount = order;
791 if (_wifi_libnet_check_profile_name_validity(profile_info->ProfileName) == false)
792 return WIFI_ERROR_NONE;
794 return _wifi_update_ap_info(profile_info);
797 /* Wi-Fi security information ************************************************/
798 EXPORT_API int wifi_ap_get_security_type(wifi_ap_h ap, wifi_security_type_e* type)
800 if (_wifi_libnet_check_ap_validity(ap) == false || type == NULL) {
801 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
802 return WIFI_ERROR_INVALID_PARAMETER;
805 net_profile_info_t *profile_info = ap;
807 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
808 case WLAN_SEC_MODE_NONE:
809 *type = WIFI_SECURITY_TYPE_NONE;
811 case WLAN_SEC_MODE_WEP:
812 *type = WIFI_SECURITY_TYPE_WEP;
814 case WLAN_SEC_MODE_IEEE8021X:
815 *type = WIFI_SECURITY_TYPE_EAP;
817 case WLAN_SEC_MODE_WPA_PSK:
818 *type = WIFI_SECURITY_TYPE_WPA_PSK;
820 case WLAN_SEC_MODE_WPA2_PSK:
821 *type = WIFI_SECURITY_TYPE_WPA2_PSK;
824 return WIFI_ERROR_OPERATION_FAILED;
827 return WIFI_ERROR_NONE;
830 EXPORT_API int wifi_ap_set_security_type(wifi_ap_h ap, wifi_security_type_e type)
832 if (_wifi_libnet_check_ap_validity(ap) == false) {
833 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
834 return WIFI_ERROR_INVALID_PARAMETER;
837 net_profile_info_t *profile_info = ap;
840 case WIFI_SECURITY_TYPE_NONE:
841 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_NONE;
843 case WIFI_SECURITY_TYPE_WEP:
844 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_WEP;
846 case WIFI_SECURITY_TYPE_EAP:
847 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_IEEE8021X;
849 case WIFI_SECURITY_TYPE_WPA_PSK:
850 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_WPA_PSK;
852 case WIFI_SECURITY_TYPE_WPA2_PSK:
853 profile_info->ProfileInfo.Wlan.security_info.sec_mode = WLAN_SEC_MODE_WPA2_PSK;
856 return WIFI_ERROR_INVALID_PARAMETER;
859 _wifi_set_profile_name_to_ap(profile_info);
861 return WIFI_ERROR_NONE;
864 EXPORT_API int wifi_ap_get_encryption_type(wifi_ap_h ap, wifi_encryption_type_e* type)
866 if (_wifi_libnet_check_ap_validity(ap) == false || type == NULL) {
867 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
868 return WIFI_ERROR_INVALID_PARAMETER;
871 net_profile_info_t *profile_info = ap;
873 switch (profile_info->ProfileInfo.Wlan.security_info.enc_mode) {
874 case WLAN_ENC_MODE_NONE:
875 *type = WIFI_ENCRYPTION_TYPE_NONE;
877 case WLAN_ENC_MODE_WEP:
878 *type = WIFI_ENCRYPTION_TYPE_WEP;
880 case WLAN_ENC_MODE_TKIP:
881 *type = WIFI_ENCRYPTION_TYPE_TKIP;
883 case WLAN_ENC_MODE_AES:
884 *type = WIFI_ENCRYPTION_TYPE_AES;
886 case WLAN_ENC_MODE_TKIP_AES_MIXED:
887 *type = WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED;
890 return WIFI_ERROR_OPERATION_FAILED;
893 return WIFI_ERROR_NONE;
896 EXPORT_API int wifi_ap_set_encryption_type(wifi_ap_h ap, wifi_encryption_type_e type)
898 if (_wifi_libnet_check_ap_validity(ap) == false) {
899 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
900 return WIFI_ERROR_INVALID_PARAMETER;
903 net_profile_info_t *profile_info = ap;
906 case WIFI_ENCRYPTION_TYPE_NONE:
907 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_NONE;
909 case WIFI_ENCRYPTION_TYPE_WEP:
910 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_WEP;
912 case WIFI_ENCRYPTION_TYPE_TKIP:
913 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_TKIP;
915 case WIFI_ENCRYPTION_TYPE_AES:
916 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_AES;
918 case WIFI_ENCRYPTION_TYPE_TKIP_AES_MIXED:
919 profile_info->ProfileInfo.Wlan.security_info.enc_mode = WLAN_ENC_MODE_TKIP_AES_MIXED;
922 return WIFI_ERROR_INVALID_PARAMETER;
925 return WIFI_ERROR_NONE;
928 EXPORT_API int wifi_ap_is_passphrase_required(wifi_ap_h ap, bool* required)
930 if (_wifi_libnet_check_ap_validity(ap) == false || required == NULL) {
931 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
932 return WIFI_ERROR_INVALID_PARAMETER;
935 net_profile_info_t *profile_info = ap;
937 if (profile_info->Favourite) {
939 return WIFI_ERROR_NONE;
942 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
943 case WLAN_SEC_MODE_NONE:
946 case WLAN_SEC_MODE_WEP:
947 case WLAN_SEC_MODE_IEEE8021X:
948 case WLAN_SEC_MODE_WPA_PSK:
949 case WLAN_SEC_MODE_WPA2_PSK:
953 return WIFI_ERROR_OPERATION_FAILED;
956 return WIFI_ERROR_NONE;
959 EXPORT_API int wifi_ap_set_passphrase(wifi_ap_h ap, const char* passphrase)
961 if (_wifi_libnet_check_ap_validity(ap) == false || passphrase == NULL) {
962 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
963 return WIFI_ERROR_INVALID_PARAMETER;
966 net_profile_info_t *profile_info = ap;
968 switch (profile_info->ProfileInfo.Wlan.security_info.sec_mode) {
969 case WLAN_SEC_MODE_WEP:
970 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.wep.wepKey,
971 passphrase, NETPM_WLAN_MAX_WEP_KEY_LEN+1);
973 case WLAN_SEC_MODE_WPA_PSK:
974 case WLAN_SEC_MODE_WPA2_PSK:
975 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.psk.pskKey,
976 passphrase, NETPM_WLAN_MAX_PSK_PASSPHRASE_LEN+1);
978 case WLAN_SEC_MODE_NONE:
979 case WLAN_SEC_MODE_IEEE8021X:
981 return WIFI_ERROR_OPERATION_FAILED;
984 return WIFI_ERROR_NONE;
987 EXPORT_API int wifi_ap_is_wps_supported(wifi_ap_h ap, bool* supported)
989 if (_wifi_libnet_check_ap_validity(ap) == false || supported == NULL) {
990 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
991 return WIFI_ERROR_INVALID_PARAMETER;
994 net_profile_info_t *profile_info = ap;
996 if (profile_info->ProfileInfo.Wlan.security_info.wps_support)
1001 return WIFI_ERROR_NONE;
1004 /* Wi-Fi EAP *****************************************************************/
1005 EXPORT_API int wifi_ap_set_eap_passphrase(wifi_ap_h ap, const char* user_name, const char* password)
1007 if (_wifi_libnet_check_ap_validity(ap) == false || (user_name == NULL && password == NULL)) {
1008 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1009 return WIFI_ERROR_INVALID_PARAMETER;
1012 net_profile_info_t *profile_info = ap;
1013 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1014 return WIFI_ERROR_INVALID_OPERATION;
1017 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.username,
1018 user_name, NETPM_WLAN_USERNAME_LEN+1);
1021 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.password,
1022 password, NETPM_WLAN_PASSWORD_LEN+1);
1024 return WIFI_ERROR_NONE;
1027 EXPORT_API int wifi_ap_get_eap_passphrase(wifi_ap_h ap, char** user_name, bool* is_password_set)
1029 if (_wifi_libnet_check_ap_validity(ap) == false ||user_name == NULL || is_password_set == NULL) {
1030 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1031 return WIFI_ERROR_INVALID_PARAMETER;
1034 net_profile_info_t *profile_info = ap;
1035 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1036 return WIFI_ERROR_INVALID_OPERATION;
1038 *user_name = g_strdup(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.username);
1039 if (*user_name == NULL)
1040 return WIFI_ERROR_OUT_OF_MEMORY;
1042 if (strlen(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.password) > 0)
1043 *is_password_set = true;
1045 *is_password_set = false;
1048 return WIFI_ERROR_NONE;
1051 EXPORT_API int wifi_ap_get_eap_ca_cert_file(wifi_ap_h ap, char** file)
1053 net_profile_info_t *profile_info = NULL;
1055 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1056 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1057 return WIFI_ERROR_INVALID_PARAMETER;
1060 profile_info = (net_profile_info_t *)ap;
1061 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1062 return WIFI_ERROR_INVALID_OPERATION;
1064 *file = g_strdup(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.ca_cert_filename);
1066 return WIFI_ERROR_OUT_OF_MEMORY;
1068 return WIFI_ERROR_NONE;
1071 EXPORT_API int wifi_ap_set_eap_ca_cert_file(wifi_ap_h ap, const char* file)
1073 net_profile_info_t *profile_info = NULL;
1075 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1076 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1077 return WIFI_ERROR_INVALID_PARAMETER;
1080 profile_info = (net_profile_info_t *)ap;
1081 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1082 return WIFI_ERROR_INVALID_OPERATION;
1084 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.ca_cert_filename,
1085 file, NETPM_WLAN_CA_CERT_FILENAME_LEN+1);
1087 return WIFI_ERROR_NONE;
1090 EXPORT_API int wifi_ap_get_eap_client_cert_file(wifi_ap_h ap, char** file)
1092 net_profile_info_t *profile_info = NULL;
1094 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1095 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1096 return WIFI_ERROR_INVALID_PARAMETER;
1099 profile_info = (net_profile_info_t *)ap;
1100 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1101 return WIFI_ERROR_INVALID_OPERATION;
1103 *file = g_strdup(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.client_cert_filename);
1105 return WIFI_ERROR_OUT_OF_MEMORY;
1107 return WIFI_ERROR_NONE;
1110 EXPORT_API int wifi_ap_set_eap_client_cert_file(wifi_ap_h ap, const char* file)
1112 net_profile_info_t *profile_info = NULL;
1114 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1115 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1116 return WIFI_ERROR_INVALID_PARAMETER;
1119 profile_info = (net_profile_info_t *)ap;
1120 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1121 return WIFI_ERROR_INVALID_OPERATION;
1123 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.client_cert_filename,
1124 file, NETPM_WLAN_CLIENT_CERT_FILENAME_LEN+1);
1126 return WIFI_ERROR_NONE;
1129 EXPORT_API int wifi_ap_get_eap_private_key_file(wifi_ap_h ap, char** file)
1131 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1132 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1133 return WIFI_ERROR_INVALID_PARAMETER;
1136 net_profile_info_t *profile_info = ap;
1137 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1138 return WIFI_ERROR_INVALID_OPERATION;
1140 *file = g_strdup(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.private_key_filename);
1142 return WIFI_ERROR_OUT_OF_MEMORY;
1144 return WIFI_ERROR_NONE;
1147 EXPORT_API int wifi_ap_set_eap_private_key_info(wifi_ap_h ap, const char* file, const char* password)
1149 if (_wifi_libnet_check_ap_validity(ap) == false || file == NULL) {
1150 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1151 return WIFI_ERROR_INVALID_PARAMETER;
1154 net_profile_info_t *profile_info = ap;
1155 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1156 return WIFI_ERROR_INVALID_OPERATION;
1158 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.private_key_filename,
1159 file, NETPM_WLAN_PRIVATE_KEY_FILENAME_LEN+1);
1162 g_strlcpy(profile_info->ProfileInfo.Wlan.security_info.authentication.eap.private_key_passwd,
1163 password, NETPM_WLAN_PRIVATE_KEY_PASSWD_LEN+1);
1166 return WIFI_ERROR_NONE;
1169 EXPORT_API int wifi_ap_get_eap_type(wifi_ap_h ap, wifi_eap_type_e* type)
1171 if (_wifi_libnet_check_ap_validity(ap) == false || type == NULL) {
1172 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1173 return WIFI_ERROR_INVALID_PARAMETER;
1176 net_profile_info_t *profile_info = ap;
1177 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1178 return WIFI_ERROR_INVALID_OPERATION;
1180 switch (profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type) {
1181 case WLAN_SEC_EAP_TYPE_PEAP:
1182 *type = WIFI_EAP_TYPE_PEAP;
1184 case WLAN_SEC_EAP_TYPE_TLS:
1185 *type = WIFI_EAP_TYPE_TLS;
1187 case WLAN_SEC_EAP_TYPE_TTLS:
1188 *type = WIFI_EAP_TYPE_TTLS;
1190 case WLAN_SEC_EAP_TYPE_SIM:
1191 *type = WIFI_EAP_TYPE_SIM;
1193 case WLAN_SEC_EAP_TYPE_AKA:
1194 *type = WIFI_EAP_TYPE_AKA;
1197 return WIFI_ERROR_OPERATION_FAILED;
1200 return WIFI_ERROR_NONE;
1203 EXPORT_API int wifi_ap_set_eap_type(wifi_ap_h ap, wifi_eap_type_e type)
1205 if (_wifi_libnet_check_ap_validity(ap) == false) {
1206 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1207 return WIFI_ERROR_INVALID_PARAMETER;
1210 net_profile_info_t *profile_info = ap;
1211 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1212 return WIFI_ERROR_INVALID_OPERATION;
1215 case WIFI_EAP_TYPE_PEAP:
1216 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type = WLAN_SEC_EAP_TYPE_PEAP;
1218 case WIFI_EAP_TYPE_TLS:
1219 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type = WLAN_SEC_EAP_TYPE_TLS;
1221 case WIFI_EAP_TYPE_TTLS:
1222 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type = WLAN_SEC_EAP_TYPE_TTLS;
1224 case WIFI_EAP_TYPE_SIM:
1225 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type = WLAN_SEC_EAP_TYPE_SIM;
1227 case WIFI_EAP_TYPE_AKA:
1228 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_type = WLAN_SEC_EAP_TYPE_AKA;
1231 return WIFI_ERROR_INVALID_PARAMETER;
1234 return WIFI_ERROR_NONE;
1237 EXPORT_API int wifi_ap_get_eap_auth_type(wifi_ap_h ap, wifi_eap_auth_type_e* type)
1239 if (_wifi_libnet_check_ap_validity(ap) == false || type == NULL) {
1240 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1241 return WIFI_ERROR_INVALID_PARAMETER;
1244 net_profile_info_t *profile_info = ap;
1245 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1246 return WIFI_ERROR_INVALID_OPERATION;
1248 switch (profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth) {
1249 case WLAN_SEC_EAP_AUTH_NONE:
1250 *type = WIFI_EAP_AUTH_TYPE_NONE;
1252 case WLAN_SEC_EAP_AUTH_PAP:
1253 *type = WIFI_EAP_AUTH_TYPE_PAP;
1255 case WLAN_SEC_EAP_AUTH_MSCHAP:
1256 *type = WIFI_EAP_AUTH_TYPE_MSCHAP;
1258 case WLAN_SEC_EAP_AUTH_MSCHAPV2:
1259 *type = WIFI_EAP_AUTH_TYPE_MSCHAPV2;
1261 case WLAN_SEC_EAP_AUTH_GTC:
1262 *type = WIFI_EAP_AUTH_TYPE_GTC;
1264 case WLAN_SEC_EAP_AUTH_MD5:
1265 *type = WIFI_EAP_AUTH_TYPE_MD5;
1268 return WIFI_ERROR_OPERATION_FAILED;
1271 return WIFI_ERROR_NONE;
1274 EXPORT_API int wifi_ap_set_eap_auth_type(wifi_ap_h ap, wifi_eap_auth_type_e type)
1276 if (_wifi_libnet_check_ap_validity(ap) == false) {
1277 WIFI_LOG(WIFI_ERROR, "Invalid parameter");
1278 return WIFI_ERROR_INVALID_PARAMETER;
1281 net_profile_info_t *profile_info = ap;
1282 if (profile_info->ProfileInfo.Wlan.security_info.sec_mode != WLAN_SEC_MODE_IEEE8021X)
1283 return WIFI_ERROR_INVALID_OPERATION;
1286 case WIFI_EAP_AUTH_TYPE_NONE:
1287 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_NONE;
1289 case WIFI_EAP_AUTH_TYPE_PAP:
1290 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_PAP;
1292 case WIFI_EAP_AUTH_TYPE_MSCHAP:
1293 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_MSCHAP;
1295 case WIFI_EAP_AUTH_TYPE_MSCHAPV2:
1296 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_MSCHAPV2;
1298 case WIFI_EAP_AUTH_TYPE_GTC:
1299 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_GTC;
1301 case WIFI_EAP_AUTH_TYPE_MD5:
1302 profile_info->ProfileInfo.Wlan.security_info.authentication.eap.eap_auth = WLAN_SEC_EAP_AUTH_MD5;
1305 return WIFI_ERROR_INVALID_PARAMETER;
1308 return WIFI_ERROR_NONE;