wifidog 代码简单分析(2)

上一节提到httpdAddC404Content 及它的回调函数,还有相应的流程,只是讲解功能,并不是指注册了回调函数就可以执行回调函数了,而是要等客户端触发回调函数才执行。下面接着讲解其他部分。

fw_destroy(), 清掉和wifidog 有关的iptables 规则,这里不细说。

fw_init(), 添加wifidog 相关的iptables 链及规则,这里的规则主要是wifidog.conf 里设置的firewall rule set, global/validating-users/known-users/unknown-users/locked-users,这里unknown-users 默认的四条关于53/67 port 的allow 规则需要打开。除了.conf里的,还有认证服务器也会被加入白名单,以使得客户端能够正常和认证服务器交互。

接下来,wifidog 会创建几个线程,注意,wifidog 是多线程运行不是fork 子进程:

1,超时检查线程:函数thread_client_timeout_check;

2,ping协议线程:函数thread_ping;

3,和wdctl 交互的线程,wdctl 是控制wifidog 结束,重启的程序,这里不细说;

4,httpd处理线程,函数thread_httpd,这个线程是在一个while 死循环里接受http 连接然后处理连接的线程,可以读取http 请求的具体内容,主要调用了两个函数httpdReadRequest/httpdProcessRequest,读取和处理http 请求。

我们主要来讲解下超时检查和ping 协议线程.

1) 函数thread_client_timeout_check 调用了fw_sync_with_authserver,其他部分代码是线程锁,我们只需要关注fw_sync_with_authserver 函数。

fw_sync_with_authserver 函数功能:网关每隔config.checkinterval 时间检查,把所有客户端链表的信息发送给认证服务器进行流量更新,并且计算每一个客户端距离上次认证成功之后所经过的时间,如果距离上次认证成功经过的时间超过config.checkinterval * config.clienttimeout,即认为已经超时,网关会发送此客户端的logout 通知认证服务器,并将此客户端的iptables 白名单移除,客户端需要重新认证。

2) 函数thread_ping 调用ping 函数。

ping()函数功能:网关定时发送Ping 协议包通知认证服务器证明自己是活的,发包的时间间隔也是config.checkinterval, ping协议格式:http://auth_server/ping/?gw_id=xxx&sys_uptime=xxx&sys_memfree&sys_load=xxx&wifidog_uptime=xxx,这些都是网关的参数,和客户端没有的关系。

本文由http://www.wifidog.pro/2014/12/09/wifidog%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90-1.html整理编辑,转载请注明出处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,662评论 19 139
  • 引言 当wifidog启动时,会启动一个线程(thread_client_timeout_check)维护客户端列...
    3c937c88e6c0阅读 3,468评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,993评论 18 399
  • 本文针对wifidog-20090925版本解释下wifidog的代码功能。 源码包括wifidog网关协议src...
    3c937c88e6c0阅读 5,216评论 0 2
  • 使用AVPlayer播放网络音频简单易行,但是在使用的时候我们需要很多时间的监控处理,这里就需要分装一下,好供我们...
    朝阳独行者阅读 4,136评论 0 0