Linux 网络管理器
来源:互联网 发布:国学经典软件50 编辑:程序博客网 时间:2024/05/21 06:41
导读:
Linux 网络管理器
转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd
作者联系方式:李先静
更新时间:2007-5-7
Linux NetworkManager是一个后台服务程序,它构建于HAL之上,提供更专注于网络管理的功能。包括网络接口管理和网络状态查询,支持普通网络、拨号网络和无线网络,另外还提供VPN、DHCP和DNS等附加功能。
在手机上,拨号网络和网络状态查询是我们比较关心的。像邮件和彩信等应用程序它们关心当前的网络状态是否连接,如果没有连接它需要连接到拨号网络。而状态栏上的网络状态标识,需要时刻关注网络状态,让用户对网络状态一目了然。
网络管理器和相关组件之间的关系如下图所示:
看来MVC模型真的很好用,HAL使用了MVC模型,作为HAL的观察者Network Manager同样也使用了MVC模型,而应用程序和nm-applet充当它的观察者。
Network Manager作为HAL观察者,它在初始化(nm_hal_init)时,调用HAL的接口函数libhal_find_device_by_capability查询到所有具有网络能力的设备,该函数所返回的是网络设备的UID,所以还要再调用nm_get_device_interface_from_hal用UID查询到网络设备的网络接口名。接下来再调用libhal_device_get_property_string获取属性info.category,以确定该网络接口是net.80211的无线网呢,还是net.80203的有线网。最后创建的设备对象,将它加入到网络设备列表中,并触发相应事件。
为了监控网络设备的变化,Network Manager在初始化时(nm_get_hal_ctx):
1. 调用libhal_ctx_set_device_added设置新网络设备插入时的回调函数nm_hal_device_added,当有新网络设备插入时,nm_hal_device_added简单的为该设备创建一个对象,将它加入到网络设备列表中去,并触发相应事件。
2. 调用libhal_ctx_set_device_removed设置网络设备拔除时的回调函数nm_hal_device_removed,当有网络设备拔除时,nm_hal_device_removed从网络设备列表中删除该设备,并触发相应事件。
3. 调用libhal_ctx_set_device_new_capability设置设备能力变化的回调函数nm_hal_device_new_capability,nm_hal_device_new_capability判断有某个设备具有网络能力时,创建一个对象,并加入到网络设备列表中去,并触发相应事件。
4. 调用libhal_device_property_watch_all监控设备属性的变化,但我在dbus的filter函数nm_dbus_signal_filter并没有找到相应的处理。
至于Network Manager如何去up/down网络接口,如何去设置/获取接口的参数,基本上与HAL无关,而是由backends下的代码实现。这里的实现一般都是调用ip/ifconfig等系统命令,或者直接存取系统中的配置文件。
在nm-dbus-xxx.c中,Network Manager为客户端提供了丰富的接口函数。比如:
1. nm-dbus-nm.c
l nm_dbus_nm_get_devices
l nm_dbus_nm_get_dialup
l nm_dbus_nm_activate_dialup
l nm_dbus_nm_deactivate_dialup
l nm_dbus_nm_set_active_device
l nm_dbus_nm_create_wireless_network
l nm_dbus_nm_set_wireless_enabled
l nm_dbus_nm_get_wireless_enabled
l nm_dbus_nm_sleep
l nm_dbus_nm_wake
l nm_dbus_nm_get_state
l nm_dbus_nm_create_test_device
l nm_dbus_nm_remove_test_device
2. nm-dbus-net.c
l nm_dbus_net_get_properties
l nm_dbus_net_get_name
l nm_dbus_net_get_address
l nm_dbus_net_get_strength
l nm_dbus_net_get_frequency
l nm_dbus_net_get_rate
l nm_dbus_net_get_encrypted
l nm_dbus_net_get_mode
3. nm-dbus-device.c
l nm_dbus_device_get_properties
l nm_dbus_device_get_name
l nm_dbus_device_get_type
l nm_dbus_device_get_hal_udi
l nm_dbus_device_get_ip4_address
l nm_dbus_device_get_hw_address
l nm_dbus_device_get_mode
l nm_dbus_device_get_active_network
l nm_dbus_device_get_networks
l nm_dbus_device_get_link_active
l nm_dbus_device_set_link_active
l nm_dbus_device_get_capabilities
l nm_dbus_device_get_driver
Network Manager提供了以上这些函数,但并没有提供相应客户端的封装,使用者可以用DBUS标准的方法去调用。另外,Network Manager在gnome/libnm_glib目录下,提供了一个非常简单的包装,它只支持网络状态的查询和监控。
Network Manager提供了丰富的接口,但对我们来说,只需要知道几个函数就够用了:用nm_dbus_nm_activate_dialup来连接拨号网络,用nm_dbus_nm_deactivate_dialup来断开拨号网络,用libnm_glib_get_network_state来查询网络状态,用libnm_glib_register_callback来监控网络状态。
(对于VPN和无线网络,目前不太关心,所以没有研究。)
~~end~~
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1605200
本文转自
http://blog.csdn.net/absurd/archive/2007/05/11/1605200.aspx
Linux 网络管理器
转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd
作者联系方式:李先静
更新时间:2007-5-7
Linux NetworkManager是一个后台服务程序,它构建于HAL之上,提供更专注于网络管理的功能。包括网络接口管理和网络状态查询,支持普通网络、拨号网络和无线网络,另外还提供VPN、DHCP和DNS等附加功能。
在手机上,拨号网络和网络状态查询是我们比较关心的。像邮件和彩信等应用程序它们关心当前的网络状态是否连接,如果没有连接它需要连接到拨号网络。而状态栏上的网络状态标识,需要时刻关注网络状态,让用户对网络状态一目了然。
网络管理器和相关组件之间的关系如下图所示:
看来MVC模型真的很好用,HAL使用了MVC模型,作为HAL的观察者Network Manager同样也使用了MVC模型,而应用程序和nm-applet充当它的观察者。
Network Manager作为HAL观察者,它在初始化(nm_hal_init)时,调用HAL的接口函数libhal_find_device_by_capability查询到所有具有网络能力的设备,该函数所返回的是网络设备的UID,所以还要再调用nm_get_device_interface_from_hal用UID查询到网络设备的网络接口名。接下来再调用libhal_device_get_property_string获取属性info.category,以确定该网络接口是net.80211的无线网呢,还是net.80203的有线网。最后创建的设备对象,将它加入到网络设备列表中,并触发相应事件。
为了监控网络设备的变化,Network Manager在初始化时(nm_get_hal_ctx):
1. 调用libhal_ctx_set_device_added设置新网络设备插入时的回调函数nm_hal_device_added,当有新网络设备插入时,nm_hal_device_added简单的为该设备创建一个对象,将它加入到网络设备列表中去,并触发相应事件。
2. 调用libhal_ctx_set_device_removed设置网络设备拔除时的回调函数nm_hal_device_removed,当有网络设备拔除时,nm_hal_device_removed从网络设备列表中删除该设备,并触发相应事件。
3. 调用libhal_ctx_set_device_new_capability设置设备能力变化的回调函数nm_hal_device_new_capability,nm_hal_device_new_capability判断有某个设备具有网络能力时,创建一个对象,并加入到网络设备列表中去,并触发相应事件。
4. 调用libhal_device_property_watch_all监控设备属性的变化,但我在dbus的filter函数nm_dbus_signal_filter并没有找到相应的处理。
至于Network Manager如何去up/down网络接口,如何去设置/获取接口的参数,基本上与HAL无关,而是由backends下的代码实现。这里的实现一般都是调用ip/ifconfig等系统命令,或者直接存取系统中的配置文件。
在nm-dbus-xxx.c中,Network Manager为客户端提供了丰富的接口函数。比如:
1. nm-dbus-nm.c
l nm_dbus_nm_get_devices
l nm_dbus_nm_get_dialup
l nm_dbus_nm_activate_dialup
l nm_dbus_nm_deactivate_dialup
l nm_dbus_nm_set_active_device
l nm_dbus_nm_create_wireless_network
l nm_dbus_nm_set_wireless_enabled
l nm_dbus_nm_get_wireless_enabled
l nm_dbus_nm_sleep
l nm_dbus_nm_wake
l nm_dbus_nm_get_state
l nm_dbus_nm_create_test_device
l nm_dbus_nm_remove_test_device
2. nm-dbus-net.c
l nm_dbus_net_get_properties
l nm_dbus_net_get_name
l nm_dbus_net_get_address
l nm_dbus_net_get_strength
l nm_dbus_net_get_frequency
l nm_dbus_net_get_rate
l nm_dbus_net_get_encrypted
l nm_dbus_net_get_mode
3. nm-dbus-device.c
l nm_dbus_device_get_properties
l nm_dbus_device_get_name
l nm_dbus_device_get_type
l nm_dbus_device_get_hal_udi
l nm_dbus_device_get_ip4_address
l nm_dbus_device_get_hw_address
l nm_dbus_device_get_mode
l nm_dbus_device_get_active_network
l nm_dbus_device_get_networks
l nm_dbus_device_get_link_active
l nm_dbus_device_set_link_active
l nm_dbus_device_get_capabilities
l nm_dbus_device_get_driver
Network Manager提供了以上这些函数,但并没有提供相应客户端的封装,使用者可以用DBUS标准的方法去调用。另外,Network Manager在gnome/libnm_glib目录下,提供了一个非常简单的包装,它只支持网络状态的查询和监控。
Network Manager提供了丰富的接口,但对我们来说,只需要知道几个函数就够用了:用nm_dbus_nm_activate_dialup来连接拨号网络,用nm_dbus_nm_deactivate_dialup来断开拨号网络,用libnm_glib_get_network_state来查询网络状态,用libnm_glib_register_callback来监控网络状态。
(对于VPN和无线网络,目前不太关心,所以没有研究。)
~~end~~
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1605200
本文转自
http://blog.csdn.net/absurd/archive/2007/05/11/1605200.aspx
- Linux 网络管理器
- Linux 网络管理器
- Linux网络管理器_Linux上如何停用网络连接管理器【译】
- Oracle 网络管理器配置
- 网络:下载操作管理器
- QNetworkAccessManager(网络访问管理器)
- QNetworkAccessManager(网络访问管理器)
- 【Linux系列】 Ubuntu系统的网络服务与此版本的网络管理器不兼容
- linux (REHL)系统的网络服务与此版本的网络管理器不兼容问题解决方法
- 网络管理器 v0.1 官网
- 网络文档管理器的需求
- linux常用文件管理器
- linux任务管理器
- linux下任务管理器
- linux服务管理器rcconf
- linux rpm软件包管理器
- Linux启动管理器
- linux 项目管理器make
- 35岁后我们能够做什么
- 如何彻底删除VSTS上的项目
- JS的正则表达式详解
- 18girl,girl,18girl电影
- Matlab:元素平移
- Linux 网络管理器
- 群硕笔试
- 关于ACE的InputCDR和OutputCDR读写数据
- log4j:WARN No appenders could be found for logger
- SQL:创建使用约束
- 探讨GTK+应用程序的优化方法
- My first letter
- Linux PPP 数据收发流程
- Linux HAL (Hardware Abstraction Layer)的工作原理