深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https://wiki.openwrt.org/doc/techref/ubus)。咱们先来了解openwrt下无线启动,我们首先查看系统启动脚本:/etc/preinit,发现该脚本主要是系统的检验与初始化,然后我们进入/etc/init.d/:

root@openwrt:/etc/init.d# ls
cron done firewall log odhcpd rpcd sysfixtime system uhttpd
boot dropbear led network protectx sysctl sysntpd telnet umount

通过查看与网络相关的启动脚本,最后发现network文件里面,出现:

start_service() {
init_switch procd_open_instance
procd_set_param command /sbin/netifd
procd_set_param respawn
procd_set_param watch network.interface
[ -e /proc/sys/kernel/core_pattern ] && {
procd_set_param limits core="unlimited"
echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
}
procd_close_instance
}

通过查阅相关资料发现netifd大有文章(https://wiki.openwrt.org/doc/techref/netifd), 简单的来说,netifd是老版本openwrt脚本初始化与配置网络的替代品,主要底层构建在netlink之上。netifd可以监视/etc/config/network配置文件,这样一来可能通过/etc/init.d/network reload重新加载网络,而不用每次重启全部的网络组件,netifd主要的组成有:

openwrt编译目录为:package/network/config/netifd
. Shell脚本:
/sbin/ifup,
/sbin/ifdown(link to ifup),
/sbin/ifstatus,
/sbin/devstatus
. init.d脚本:
/etc/init.d/network
. hotplug2脚本:
/etc/hotplug.d/iface/-netstate,
/etc/hotplug.d/iface/-sysctl
. udhcpc脚本:
/usr/share/udhcpc/default.script
. netifd守护进程binary:
/sbin/netifd
其它相关:
hostapd(hostapd.sh)
dhcp
等等

netifd在启动时候会调用网络相关组件进行初始化:

void netifd_init_script_handlers(int dir_fd, script_dump_cb cb)
{
glob_t g;
int i, prev_fd; prev_fd = netifd_dir_push(dir_fd);
glob("./*.sh", , NULL, &g);
for (i = ; i < g.gl_pathc; i++)
netifd_parse_script_handler(g.gl_pathv[i], cb);
netifd_dir_pop(prev_fd);
} 上述函数中即调用了hostapd的启动脚本:
lib/netifd/wireless/mac80211.sh 向ubus注册了网络接口处理函数
int
netifd_ubus_init(const char *path)
{
uloop_init();
ubus_path = path; ubus_ctx = ubus_connect(path);
if (!ubus_ctx)
return -EIO; DPRINTF("connected as %08x\n", ubus_ctx->local_id);
ubus_ctx->connection_lost = netifd_ubus_connection_lost;
netifd_ubus_add_fd(); netifd_add_object(&main_object);
netifd_add_object(&dev_object);
netifd_add_object(&wireless_object);
netifd_add_iface_object(); return ;
}

hostapd阅读(openwrt)-2的更多相关文章

  1. hostapd阅读(openwrt)-3

    从官网下载相对而言比较干净的源码版本http://w1.fi/hostapd/,然后将其移植到openwrt下,方便在源码阅读时候进行调试编译,移植的过程总结如下心得. 1. openwrt编译与cl ...

  2. hostapd阅读(openwrt)-1

    好久没有来博客园写点东西了,这段时间主要搞了openwrt系统的移植,无线的校验等相关工作,鉴于我是一个懒惰的大龄菜鸟程序员,就先自我原谅自己了,好了废话少说,直奔主题--hostapd. 由于我主要 ...

  3. hostapd阅读(openwrt)-4

    接下来,咱们来看看hostapd的源码目录之hostapd,今天我们先分析整体功能,然后从main.c开始注释 hostapd下代码主要作用有:配置解析,环境初始化,控制接口建立,AP接口管理模块. ...

  4. 【openwrt】再设置

    https://wiki.openwrt.org/zh-cn/doc/uci/network https://wiki.openwrt.org/zh-cn/doc/uci/wireless https ...

  5. OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎

    本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...

  6. openwrt 更改 debug 等级(hostapd)

    https://wiki.openwrt.org/doc/devel/debugging 调试hostapd,其中hostapd的调试等级如下: # Levels (minimum value for ...

  7. OpenWrt笔记

    ## 1. OpenWrt目录结构说明 作者:辛勤的摆渡人 来源:CSDN 原文:https://blog.csdn.net/hunter168_wang/article/details/507805 ...

  8. CentOS_7 OpenWrt Eclipse 环境搭建与 Dr.com 开发笔记

    一:内核的编译. 1,linux 编译环境的搭建与源码的准备工作 2,常用软件的安装 (make menuconfig) 3,  针对TP-Link WR740N 一些软件的openwrt 的移植 4 ...

  9. OpenWrt——神奇的路由系统

    鉴于最近大家对这个系统比较感兴趣而且疑问很多所以本渣就整理下我对这个系统的理解和最实用的802.1x认证的理解.还望大家多多互相交流. 如果您时间紧张直接看最后的步骤,时间充裕的请仔细阅读,理解. O ...

随机推荐

  1. keras 从txt加载预测数据

    ImageDataGenerator.flow_from_directory()的用法已经非常多了,优点是简单方便,但数据量很大时,需要组织目录结构和copy数据,很浪费资源和时间 1. 训练时从tx ...

  2. dart快速入门教程 (1)

    1.环境搭建 1.1.dart简介 Dart 是一种 易于学习. 易于扩展.并且可以部署到 任何地方 的 应用 编程 语言.Google 使用 Dart 来开发 大型应用.flutter使用dart语 ...

  3. Nuxt+Express后端api接口配置与实现方式

    Nuxt.js 是一个基于 Vue.js 的轻量级应用框架,可用来创建服务端渲染 (SSR) 应用.本文带你了解在 Nuxt.js 中使用 Express 如何编写实现后端的 api 接口. 创建接口 ...

  4. Python之浅谈深浅拷贝

    目录 深浅拷贝 拷贝 浅拷贝 深拷贝 深浅拷贝 拷贝 s=['tim','age'] s2=s #这里的s2列表指向与s相同的id 当s2为s的拷贝对象时,s内的可变类型变化,s2变化;s内的不可变类 ...

  5. Nginx 从入门到放弃(一)

    Nginx nginx的使用场景 静态资源服务 通过本地文件系统提供服务 反向代理服务 nginx的强大性能 缓存 负载均衡 API服务 OpenResty nginx优点 高并发.高性能 可扩展性好 ...

  6. 调试HotSpot源代码

    之前的文章在Ubuntu 16.04上编译OpenJDK8的源代码 已经介绍过在Ubuntu上编译OpenJDK8的源代码,这一篇将介绍在Ubuntu上调试OpenJDK8源代码的2种方式. 1.GD ...

  7. innobackupex 数据库备份

    一,安装innobackupex CentOS: yum install percona-xtrabackup 二,备份数据 备份: innobackupex --user=user --passwo ...

  8. kibana限制用户只具备读图的权限

    假设需求 因为业务需要将日志系统收集到的信息进行图表化展示并交付到用户进行业务交流. 解决方案 这个需求看着似乎蛮简单的,如何解决? 1.对需要的数据进行过滤制作图表 2.对用户的权限限制为只读级别, ...

  9. 【MySQL】Merge Index导致死锁

    水稻:最近有个朋友生产环境出现MySQL死锁问题,一听是死锁,那必须去看看啊,于是饶(si)有(qu)兴(huo)致(lai)的研究了好几天 菜瓜:MySQL死锁,赶紧分享一下 水稻:能否先让我装完X ...

  10. SaaS 系统架构,Spring Boot 动态数据源实现!

    这段时候在准备从零开始做一套SaaS系统,之前的经验都是开发单数据库系统并没有接触过SaaS系统,所以接到这个任务的时候也有也些头疼,不过办法部比困难多,难得的机会. 在网上找了很多关于SaaS的资料 ...