欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > wpa_supplicant源码剖析-main.c解析

wpa_supplicant源码剖析-main.c解析

2025/4/25 13:50:36 来源:https://blog.csdn.net/hollow2420655128/article/details/145937935  浏览:    关键词:wpa_supplicant源码剖析-main.c解析

这里记录了 wpa_supplicant 的命令行用法

static void usage(void)
{int i;printf("%s\n\n%s\n""usage:\n""  wpa_supplicant [-BddhKLqq"
#ifdef CONFIG_DEBUG_SYSLOG"s"
#endif /* CONFIG_DEBUG_SYSLOG */"t"
#ifdef CONFIG_CTRL_IFACE_DBUS_NEW"u"
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */"vW] [-P<pid file>] ""[-g<global ctrl>] \\\n""        [-G<group>] \\\n""        -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] ""[-p<driver_param>] \\\n""        [-b<br_ifname>] [-e<entropy file>]"
#ifdef CONFIG_DEBUG_FILE" [-f<debug file>]"
#endif /* CONFIG_DEBUG_FILE */" \\\n""        [-o<override driver>] [-O<override ctrl>] \\\n""        [-N -i<ifname> -c<conf> [-C<ctrl>] ""[-D<driver>] \\\n"
#ifdef CONFIG_P2P"        [-m<P2P Device config file>] \\\n"
#endif /* CONFIG_P2P */"        [-p<driver_param>] [-b<br_ifname>] [-I<config file>] ""...]\n""\n""drivers:\n",wpa_supplicant_version, wpa_supplicant_license);for (i = 0; wpa_drivers[i]; i++) {printf("  %s = %s\n",wpa_drivers[i]->name,wpa_drivers[i]->desc);}#ifndef CONFIG_NO_STDOUT_DEBUGprintf("options:\n""  -b = optional bridge interface name\n""  -B = run daemon in the background\n""  -c = Configuration file\n""  -C = ctrl_interface parameter (only used if -c is not)\n""  -d = increase debugging verbosity (-dd even more)\n""  -D = driver name (can be multiple drivers: nl80211,wext)\n""  -e = entropy file\n"
#ifdef CONFIG_DEBUG_FILE"  -f = log output to debug file instead of stdout\n"
#endif /* CONFIG_DEBUG_FILE */"  -g = global ctrl_interface\n""  -G = global ctrl_interface group\n""  -h = show this help text\n""  -i = interface name\n""  -I = additional configuration file\n""  -K = include keys (passwords, etc.) in debug output\n""  -L = show license (BSD)\n"
#ifdef CONFIG_P2P"  -m = Configuration file for the P2P Device interface\n"
#endif /* CONFIG_P2P */
#ifdef CONFIG_MATCH_IFACE"  -M = start describing new matching interface\n"
#endif /* CONFIG_MATCH_IFACE */"  -N = start describing new interface\n""  -o = override driver parameter for new interfaces\n""  -O = override ctrl_interface parameter for new interfaces\n""  -p = driver parameters\n""  -P = PID file\n""  -q = decrease debugging verbosity (-qq even less)\n"
#ifdef CONFIG_DEBUG_SYSLOG"  -s = log output to syslog instead of stdout\n"
#endif /* CONFIG_DEBUG_SYSLOG */"  -t = include timestamp in debug messages\n"
#ifdef CONFIG_DEBUG_LINUX_TRACING"  -T = record to Linux tracing in addition to logging\n""       (records all messages regardless of debug verbosity)\n"
#endif /* CONFIG_DEBUG_LINUX_TRACING */
#ifdef CONFIG_CTRL_IFACE_DBUS_NEW"  -u = enable DBus control interface\n"
#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */"  -v = show version\n""  -W = wait for a control interface monitor before starting\n");printf("example:\n""  wpa_supplicant -D%s -iwlan0 -c/etc/wpa_supplicant.conf\n",wpa_drivers[0] ? wpa_drivers[0]->name : "nl80211");
#endif /* CONFIG_NO_STDOUT_DEBUG */
}

这里会将 0,1,2 文件描述符指向/dev/null,相当于关闭标准输入,标准输出,标准错误

将输入的参数处理完之后,使用参数对 wpa_supplicant 进行初始化

\wpa_supplicant\wpa_supplicant.c

日志相关初始化

注册 eap 协议相关回调函数

填充完用户传下来的参数之后初始化 eloop

这里主要是得到 epollfd 和 kqueuefd

这里进行 random 初始化,random 的作用是生成高质量随机数,可以用于会话加密

初始化全局控制接口

通知 wpa_supplicant 初始化了,这里主要是对 binder 进行初始化,以便于后续进行 rpc,通常手机厂商会在这里将 binder 去掉,加入 hidl 和 aidl 的初始化,一般通过 hidl 接口去调用 wpa_supplicant 的功能

回到 main 函数

这里初始化 fst,fst 是做 ap 切换时会话保持的

添加所有的 wlan 接口

这里面主要是进行驱动初始化及 wpa_supplicant 上下文初始化,后续作者会更新驱动初始化的内容

这里面是注册 wlan 上下文到 dbus,但是手机一般注册到 hidl

回到wpa_supplicant_add_iface

这里是将连接状态机设置为WPA_DISCONNECTED 状态

main 函数的最后去启动 wpa_supplicant

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词