本文对了解NetworkManager的使用和开发有很大帮助,澄清了一些NetworkManager中使用的概念,对阅读源代码和修改Bug有很大的帮助。

 

设置服务(Settings Services)

通过D-Bus服务提供配置给NetworkManager和客户端应用程序的服务就是设置服务(settings services),有用户级和系统级两种。

设置服务按照自己的方式来存储配置,例如Gnome小应用程序(nm-applet)使用GConf,系统级的NetworkManager使用与发行版本相关的插件来读取和存储配置,并按发行版的文件格式保存。

用户设置服务 运行在用户的会话中,经常与图形的网络控制小程序在同一进程内,但也不是必须的。用户设置服务 通过使用org.freedesktop.NetworkManagerUserSettings D-Bus服务来向NetworkManager提供用户定义的配置。 用户级的连接在同一机器上只对特定的用户可用,对其它的用户来说是看不见的。

系统设置服务 以root用户运行,因为需要访问和更新系统范围内的网络配置。它通过org.freedesktop.NetworkManagerSystemSettings D-Bus服务向NetworkManager和客户端应用程序提供配置。系统设置服务 提供的连接对所有用户都可用并且可以在启动时和任何用户登录前使用。系统连接先于任何用户连接。在NM0.7中系统设置服务是一个叫 nm-system-settings 的外部进程,在NM0.8中 nm-system-settings 进程已经被集成到NetworkManager的核心进程。

概念上的对象

设备(Device):硬件设备是网络连接的直接提供者。无线网卡、蓝牙适配器、串行猫、PCI以太网卡、USB无线网卡或以太网卡等。设备分类为不同的类型“types”,如802.11 wifi,以太网、蓝牙等

连接(Connection):一组具体的、封装的、独立的设置,需要连接到一个特定网络的所有配置的描述。被一个叫UUID的唯一标识来指定。一个连接与一个特定的设备类型关联,但并不一定与一个特定的硬件设备。它由一个或多个设置对象组成。

设置(Setting):是一组相关的键/值对来描述一个特定的连接。设置键和允许的值是当前在linbnm-utils中每一个设置对象的最好描述。在每一个设置的源文件中的底部查看"class_init"函数。

- 0 (Connection)
    |
    |- connection (Setting)
    |   |- name: 'nifty-wireless'
    |   |- uuid: 'c78e4e9d-25b2-4c2c-9227-fdf3e4b9e4f1'
    |   |- devtype: '802-11-wireless'
    |   `- autoconnect: True
    |
    |- 802-11-wireless (Setting)
    |   |- ssid: 'nifty-wireless'
    |   |- mode: 'infrastructure'
    |   `- seen-bssids: ['xx:xx:xx:xx:xx:xx', 'yy:yy:yy:yy:yy:yy']
    |
    |- 802-11-security-wpa (Setting)
    |   |- proto: 'WPA'
    |   |- key_mgmt: 'WPA-PSK'
    |   |- pariwise: ['TKIP', 'CCMP']
    |   |- group: ['TKIP', 'CCMP']
    |   `- psk: '9ad8da8a8da8f8dsa8...'
    |
    `- ip4 (Setting)
        |- dns: ['1.1.1.1', '1.1.1.2']
        `- dns-search: 'foobar.com'
- 1 (Connection)
    |
    |- connection (Setting)
    |   |- name: 'Work @ BigCorp'
    |   |- uuid: '9bad8110-aac8-44db-b2b0-17af4c78675d'
    |   `- devtype: '802-3-ethernet'
    |
    |- 802-3-ethernet (Setting)
    |   `- mtu: 1500
    |
    `- ip4 (Setting)
        |- address: 10.1.1.50
        |- netmask: 255.255.255.0
        |- gateway: 10.1.1.1
        |- dns: ['10.1.1.3', '10.1.1.4']
        |- dns-search: 'bigcorp.com'
        `- ypbind: ['1.1.1.3']
- 2 (Connection)
    |
    |- connection (Setting)
    |   |- name: 'Sprint PCS'
    |   |- uuid: '1cc9daab-957a-4c5e-b2bf-84dc2d7a3cc0'
    |   `- devtype: 'bluetooth'
    |
    `- bluetooth (Setting)
        |- type: 'panu'
        `- bdaddr: xx:xx:xx:xx:xx:xx



 每一个 设置对象 严格的定义键名和值的类型。当键名没有时,使用缺省值。例如使用静态IP设置没有在'ip4'设置对象中指定时,将使用DHCP。

 NetworkManager向所有的设置服务 (用户的和系统的) 请求连接对象并进行有效性检查。如果 设置对象 的键或值无效,这个设置对象将被拒绝并不在NetworkManager中使用。

 连接的UUID不应派生于 连接 的名字,应被 设置服务 随机地命名,在连接的生命周期中一直有效。UUID从不用于其它的连接。

 连接 能过D-Bus以一系列设置的字典传送。每一个设置又是另一个字典。

管理和权限

 NetworkManager 使用PolicyKit 来决定什么用户被授权并允许做什么。一些操作将被锁定,例如从网络连接编辑器中编辑系统连接,修改主机的hostname,通过wifi共享互联网连接。这些权限缺省地在/usr/share/PolicyKit/policy/org.freedesktop.network-manager-settings.system.policy 文件中配置。查看PolicyKit文档 的"DECLARING ACTIONS"部分来了解更多关于.policy文件的细节。

 Gnome 图形界面的实现利用GConf的缺省(default)和强制(mandatory)设置(例子1 和例子2 )来锁定用户可以使用的 连接 。