网络连接管理Connection Manager(connman)记录
ConnMan是一个Linux下网络连接管理守护进程。ConnMan是一个模块化的系统,通过各种插件,可以扩展支持各种有线或无线设备。所有的应用程序通过D-Bus和ConnMan通信。
1 ConnMan架构
2 ConnMan内部组成
2.1 Buildroot ConnMan配置
Target packages
->Networking applications
->connman
->enable Ethernet support--支持以太网。
->enable WiFi support--支持WiFi。
->enable WISPr support--Wireless ISP roaming。
->enable Bluetooth support--支持蓝牙。
->enable loopback support--loopback接口。
->enable neard support--支持NFC。
->enable ofono support--支持2/3/4G。
->enable command line client
2.2 connmand代码
主要代码流程:
main
->main_loop--调用g_main_loop_new()创建一个主事件循环。
->g_dbus_setup_bus--分配DBus连接并进行配置。
->g_dbus_set_disconnect_function--设置DBus连接断开回调函数。
->__connman_dbus_init--将创建的DBus连接赋给connection。
->__connman_plugin_init--遍历内嵌和插件目录中的插件到plugins列表中,并执行init()初始化函数。
->g_main_loop_run--运行main_loop主事件循环,不停检查主事件并分发。直到调用g_main_loop_qui(main_loop)才会退出。
->后面是清理工作和资源释放。
通过CONNMAN_PLUGIN_DEFINE定义一个plugin,包含初始化和退出函数。
Makefile中调用genbuiltin生成src/builtin.h,__connman_builtin数组是内嵌的plugin列表:
static struct connman_plugin_desc *__connman_builtin[] = { &__connman_builtin_ethernet,--以太网连接。 &__connman_builtin_gadget,--USB Gadget连接。 &__connman_builtin_wifi,--WiFi连接。 &__connman_builtin_bluetooth,--蓝牙连接。 &__connman_builtin_ofono,--2G/3G/4G电信连接。 &__connman_builtin_dundee,--蓝牙连接。 &__connman_builtin_pacrunner,--PAC runner proxy处理。 NULL };
3 参考文档
《Managing Internet Connections on Linux Devices with ConnMan》:ConnMan架构、内部组成、功能和特性、D-Bus接口、connmand/connmanctl命令使用、调试等。
《ConnMan - ArchWiki (archlinux.org)》:ConnMan简单介绍,以及前端配置程序列表、配置使用方法以及常见问题解决方法。
《connman/connman.git - Connection Manager (kernel.org)》:维护ConnMan代码的仓库。
联系方式:arnoldlu@qq.com