hostapd wpa_supplicant madwifi详细分析(二)——main之for循环

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lee244868149/article/details/42027823

欢迎转载,转载请注明出处。


下面从main函数开始源代码的分析,这一篇主要对开始处的for循环介绍,里面的选项和参数的处理方式,主要依赖于命令行或者脚本调用hostapd时,传进来的参数是什么


 
 
  1. int main(int argc, char *argv[])
  2. {
  3. struct hapd_interfaces interfaces;
  4. int ret = 1, k;
  5. size_t i, j;
  6. int c, debug = 0, daemonize = 0, tnc = 0;
  7. char *pid_file = NULL;
  8. hostapd_logger_register_cb(hostapd_logger_cb);
  9. for (;;) {
  10. c = getopt(argc, argv, "Bde:hKP:tv");
  11. switch (c) {
  12. case 'h':
  13. usage();
  14. break;
  15. case 'd':
  16. debug++;
  17. if (wpa_debug_level > 0)
  18. wpa_debug_level--;
  19. break;
  20. case 'e':
  21. entropy_file = optarg;
  22. break;
  23.   case 'B':
  24. daemonize++;
  25. break;
  26. case 'K':
  27. wpa_debug_show_keys++;
  28. break;
  29. case 'P':
  30. os_free(pid_file);
  31. pid_file = os_rel2abs_path(optarg);
  32. break;
  33. case 't':
  34. wpa_debug_timestamp++;
  35. break;
  36. case 'v':
  37. show_version();
  38. exit( 1);
  39. break;
  40. default:
  41. usage();
  42. break;
  43. }
  44. ....

理解这个for循环,首先要很准确的理解getopt函数的使用,以及对argc和argv的把握,可以先参考
<a target=_blank href="http://blog.csdn.net/lee244868149/article/details/42025221">getopt
和getopt_long </a> 和 <a target=_blank href="http://blog.csdn.net/lee244868149/article/details/42002741">getopt解析命令行选项参数 </a>,
特别是理解optarg和optind代表的含义很重要。

-h
如果选项是-h,那么调用usage()函数,打印命令帮助信息

-d
当选择-d选项时,debug变量加一,wpa_debug_level调试级别变量减一。
在src/utils/wpa_debug.c中有定义:
                                int wpa_debug_level = MSG_INFO;
                                int wpa_debug_show_keys = 0;
                                int wpa_debug_timestamp = 0;
MSG_INFO是一个枚举成员,enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };它在第三个位置,所以MSG_INFO值为2,这个是默认值,在该级别时正常情况下基本没有日志输出。在这种情况下,就能打印MSG_INFO, MSG_WARNING, MSG_ERROR这三个级别的信息,在该级别时正常情况下基本没有
日志输出的,因而要想获得更多执行流程中的输出就需要增加debug级别,如果想把码流及各radius属性均打印出的话就将级别调为MSG_MSGDUMP了。
debug级别越高,那么对应的wpa_debug_level值就越小,输出的信息就越多

-e
指定entropy文件的路径

-B
该选项将hostapd进程作为守护进程运行,如果含有该选项则执行os_daemonize(pid_file),在utils/os_win32.c中该函数未实现,
在utils/os_unix.c中定义为int os_daemonize(const char *pid_file),<span style="color:#FF0000;">其中os_daemon即为daemon系统调,如果调用成功则获取进程id并写入pid_file指定的文件中</span>。

-K
该选项用于控制在调试时是否输出密钥相关key值。如需输出密钥还需要设置日志级别为MSG_DEBUG或以上
例如:wpa_hexdump_key(MSG_DEBUG, "EAP-TTLS: Derived implicit challenge", challenge, len);
如果选项中没有K显式说明,则即使日志级别为MSG_DEBUG或MSG_MSGDUMP也不会输出的

-P
设定pid_file的值,os_rel2abs_path 将参数提供的相对路径转为绝对路径。


-t

该项作用为在日志中包含时间戳信息,wpa_debug_timestamp的定义参见选项-d的说明,默认值为0,即不包含。
带时间戳效果为:
1270995804.000000: EAP: EAP entering state RECEIVED
1270995804.000000: EAP: parseEapResp: rxResp=1 respId=77 respMethod=21 respVendor=0 respVendorMethod=0

-v

打印版本信息并退出


这些选项主要用于hostapd程序被调用时,实现交互和传入参数的处理,下一篇将介绍hostapd_global_init()函数所完成的初始化工作。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值