深入理解Android:wiifi-wpa_supplicant
来源:互联网 发布:数据质量提升方案 编辑:程序博客网 时间:2024/06/10 22:05
int main(int argc, char *argv[]){ int c, i; struct wpa_interface *ifaces, *iface; int iface_count, exitcode = -1; struct wpa_params params; struct wpa_global *global; if (os_program_init()) return -1; os_memset(¶ms, 0, sizeof(params)); params.wpa_debug_level = MSG_INFO;/*默认的打印输出*/ iface = ifaces = os_zalloc(sizeof(struct wpa_interface)); if (ifaces == NULL) return -1; iface_count = 1; wpa_supplicant_fd_workaround(1);/*输入输出重定向到/dev/null*/ for (;;) {/*参数解析*/ c = getopt(argc, argv, "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW"); if (c < 0) break; switch (c) { case 'b': iface->bridge_ifname = optarg; break; case 'B': params.daemonize++; break; case 'c':/*指定 配置文件名,参数值给了wpa_interface中的变量*/ iface->confname = optarg; break; case 'C': iface->ctrl_interface = optarg; break; case 'D':/*驱动名称 指定 配置文件名,参数值给了wpa_interface中的变量*/ iface->driver = optarg; break; case 'd':#ifdef CONFIG_NO_STDOUT_DEBUG printf("Debugging disabled with " "CONFIG_NO_STDOUT_DEBUG=y build time " "option.\n"); goto out;#else /* CONFIG_NO_STDOUT_DEBUG */ params.wpa_debug_level--; break;#endif /* CONFIG_NO_STDOUT_DEBUG */ case 'e':/*指定随机数*/ params.entropy_file = optarg; break;#ifdef CONFIG_DEBUG_FILE case 'f': params.wpa_debug_file_path = optarg; break;#endif /* CONFIG_DEBUG_FILE */ case 'g': params.ctrl_interface = optarg; break; case 'G': params.ctrl_interface_group = optarg; break; case 'h': usage(); exitcode = 0; goto out; case 'i':/*指定网络接口设 备,这里为wlan0*/ iface->ifname = optarg break; case 'I': iface->confanother = optarg; break; case 'K': params.wpa_debug_show_keys++; break; case 'L': license(); exitcode = 0; goto out;#ifdef CONFIG_P2P case 'm': params.conf_p2p_dev = optarg; break;#endif /* CONFIG_P2P */ case 'o': params.override_driver = optarg; break; case 'O': params.override_ctrl_interface = optarg; break; case 'p': iface->driver_param = optarg; break; case 'P': os_free(params.pid_file); params.pid_file = os_rel2abs_path(optarg); break; case 'q': params.wpa_debug_level++; break;#ifdef CONFIG_DEBUG_SYSLOG case 's': params.wpa_debug_syslog++; break;#endif /* CONFIG_DEBUG_SYSLOG */#ifdef CONFIG_DEBUG_LINUX_TRACING case 'T': params.wpa_debug_tracing++; break;#endif /* CONFIG_DEBUG_LINUX_TRACING */ case 't': params.wpa_debug_timestamp++; break;#ifdef CONFIG_DBUS case 'u': params.dbus_ctrl_interface = 1; break;#endif /* CONFIG_DBUS */ case 'v': printf("%s\n", wpa_supplicant_version); exitcode = 0; goto out; case 'W': params.wait_for_monitor++; break;#ifdef CONFIG_MATCH_IFACE case 'M': params.match_iface_count++; iface = os_realloc_array(params.match_ifaces, params.match_iface_count, sizeof(struct wpa_interface)); if (!iface) goto out; params.match_ifaces = iface; iface = ¶ms.match_ifaces[params.match_iface_count - 1]; os_memset(iface, 0, sizeof(*iface)); break;#endif /* CONFIG_MATCH_IFACE */ case 'N': iface_count++; iface = os_realloc_array(ifaces, iface_count, sizeof(struct wpa_interface)); if (iface == NULL) goto out; ifaces = iface; iface = &ifaces[iface_count - 1]; os_memset(iface, 0, sizeof(*iface)); break; default: usage(); exitcode = 0; goto out; } } exitcode = 0; global = wpa_supplicant_init(¶ms);/*根据指定的参数构造,wpa_global对象*/ if (global == NULL) { wpa_printf(MSG_ERROR, "Failed to initialize wpa_supplicant"); exitcode = -1; goto out; } else { wpa_printf(MSG_INFO, "Successfully initialized " "wpa_supplicant"); } if (fst_global_init()) { wpa_printf(MSG_ERROR, "Failed to initialize FST"); exitcode = -1; goto out; }#if defined(CONFIG_FST) && defined(CONFIG_CTRL_IFACE) if (!fst_global_add_ctrl(fst_ctrl_cli)) wpa_printf(MSG_WARNING, "Failed to add CLI FST ctrl");#endif for (i = 0; exitcode == 0 && i < iface_count; i++) { struct wpa_supplicant *wpa_s; if ((ifaces[i].confname == NULL && ifaces[i].ctrl_interface == NULL) || ifaces[i].ifname == NULL) { if (iface_count == 1 && (params.ctrl_interface ||#ifdef CONFIG_MATCH_IFACE params.match_iface_count ||#endif /* CONFIG_MATCH_IFACE */ params.dbus_ctrl_interface)) break; usage(); exitcode = -1; break; } wpa_s = wpa_supplicant_add_iface(global, &ifaces[i], NULL);/*wpa支持操作多个无线网络设备,这里需要将它们一一添加到WPAS中,wpas内部初始化这些设备*/ if (wpa_s == NULL) { exitcode = -1; break; } }#ifdef CONFIG_MATCH_IFACE if (exitcode == 0) exitcode = wpa_supplicant_init_match(global);#endif /* CONFIG_MATCH_IFACE */ if (exitcode == 0) exitcode = wpa_supplicant_run(global);/*android中,wpas通过select /epoll I/O多路复用*/ wpa_supplicant_deinit(global); fst_global_deinit();out: wpa_supplicant_fd_workaround(0); os_free(ifaces);#ifdef CONFIG_MATCH_IFACE os_free(params.match_ifaces);#endif /* CONFIG_MATCH_IFACE */ os_free(params.pid_file); os_program_deinit(); return exitcode;}
阅读全文
0 0
- 深入理解Android:wiifi-wpa_supplicant
- 深入理解wpa_supplicant
- 深入理解 wpa_supplicant(一)
- 深入理解 wpa_supplicant(二)
- 深入理解 wpa_supplicant(三)
- 深入理解 wpa_supplicant(四)
- 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第四章 深入理解wpa_supplicant
- 关于wpa_supplicant的理解
- 深入理解Android
- android --- 深入理解 JNI
- Android - 深入理解 JNI
- Android - 深入理解 JNI
- 深入理解android 系列
- android 深入理解AnsyncTask
- 深入理解android
- 深入理解Android博客
- Android Service 深入理解
- Android 深入理解View
- 第十周收获
- 557
- epoll模型
- ksh日常学习记录
- 输出一个渐变桃心
- 深入理解Android:wiifi-wpa_supplicant
- 2017.11.13作业
- Javaweb-xml编程-sax解析与实例
- 2017-11-13 每周小结(编码,注解,反射)
- poj 1364 King(hud 1531)
- js/jQuery 跨iframe操作
- 自定义View的自定义属性,TypedArray的使用和命名空间
- 【C++对象模型】之虚函数详解
- VINS_Mono,OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName问题终于解决了