Linux 網路管理器

2021-04-13 22:45:39 字數 3231 閱讀 2726

linux 網路管理器

作者****:李先靜

linux networkmanager是乙個後台服務程式,它構建於hal之上,提供更專注於網路管理的功能。包括網路介面管理和網路狀態查詢,支援普通網路、撥號網路和無線網路,另外還提供vpn、dhcp和dns等附加功能。

在手機上,撥號網路和網路狀態查詢是我們比較關心的。像郵件和彩信等應用程式它們關心當前的網路狀態是否連線,如果沒有連線它需要連線到撥號網路。而狀態列上的網路狀態標識,需要時刻關注網路狀態,讓使用者對網路狀態一目了然。

network manager作為hal觀察者,它在初始化(nm_hal_init)時,呼叫hal的介面函式libhal_find_device_by_capability查詢到所有具有網路能力的裝置,該函式所返回的是網路裝置的uid,所以還要再呼叫nm_get_device_inte***ce_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-***.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和無線網路,目前不太關心,所以沒有研究。)

本文**

linux任務管理器

在redhat2.4.20 8下編譯通過 由於本程式視窗部分由glad工具編制,源 不易貼出,現只給出部分 函式的 1,退出 按鈕 函式 void on button9 clicked gtkbutton button,gpointer user data 2,關機 按鈕 函式 void on bu...

Linux啟動管理器

啟動管理器是儲存在磁碟開始扇區中的一段程式,例如,硬碟的mbr master boot record 在系統完成啟動測試後,如果系統是從mbr啟動,則bios basic input output system 將控制傳送給mbr。然後儲存在mbr中的這段程式將執行。這 段程式被稱為啟動管理器。它的...

Linux包管理器

使用 linux 系統總是免不了要接觸包管理工具。比如,debian ubuntu 的 apt opensuse 的 zypp fedora 的 yum mandriva 的 urpmi slackware 的 slackpkg archlinux 的 pacman gentoo 的 emerge ...