Linux

linux綁定-如果靜態連結則更改參數

  • May 16, 2021

我想使用 linux 網路綁定執行一些測試。我正在使用 qemu VM,並且我正在使用定制的核心來執行它們,我將其設置為靜態連結綁定。我在文件中看到可以在載入模組時設置綁定參數(如 miimon)。但是當它是靜態連結時,如何設置這些值呢?

除了過時的命令(在 Linux 上)ifconfig和之外,還有兩個 API 可以處理綁定介面,ifenslave它們可能無法創建新的綁定介面(因此要求綁定模組的max_bonds參數不為零)。

  • 核心的 ( rt ) netlink API:通過iproute2提供的大多數現代命令,包括ip link命令。
  • 核心的sysfs API 通過偽文件:通常安裝在/sys/.

我可以注意到,“最新”版本ifenslave實際上依賴於sysfs API,並且通過ip link.

您可能應該將綁定配置為創建零介面而不是預設的一個或兩個:這是一個歷史特性,已被這兩個 API 淘汰。這些介面可以在以後動態創建或刪除。當然,對於一個非常小的系統,留下它或將其設置為創建所需的數字仍然是一種選擇。將此添加到核心命令行選項(通常在/etc/default/grubGRUB_CMDLINE_LINUX=條目中找到,但正確執行此操作可能取決於發行版)應該這樣做:

bonding.max_bonds=0

警告:連結的文件非常不完整/過時,並且沒有顯示大多數(如果不是全部)綁定功能都可以通過ip link.

ip link您可以使用正確的命令創建刪除更改設置奴役等。type bond每當必須在關鍵字之後指定特定的選項時,此命令都應包含關鍵字。

命令語法提醒,顯示特定的設置:

ip link add type bond help

範例(介面必須在被奴役之前關閉,但可以在同一個命令中設置,以防以前的狀態未知):

ip link add dev mybond0 type bond mode active-backup miimon 100
ip link set dev eth0 down master mybond0
ip link set dev eth1 down master mybond0
ip link set dev mybond0 up
ip link set dev eth0 up
ip link set dev eth1 up

更改設置:

ip link set dev mybond0 type bond miimon 200

ifenslave相等的:

ip link set dev mybond0 type bond active_slave eth1

當有任何被奴役的設備時,某些設置無法更改。例如,重新定義債券類型:

# ip link set dev mybond0 type bond mode balance-rr
RTNETLINK answers: Directory not empty

可以通過以下方式釋放被奴役的設備:

ip link set dev eth0 nomaster

並且可以通過以下方式刪除綁定設備:

ip link delete dev mybond0

通過附加選項可以查看與綁定設備(或bond_slave設備)相關的各種資訊。-details在某些時候,使用 JSON 輸出對腳本來說可能更容易(例如,這個 Q/A:iproute2: How to display the TYPE of a network devices?)。

ip -detail link show dev mybond0
ip -detail link show dev eth0
ip -detail link show dev eth1

我認為今天使用這個 API 沒有多大意義,除非某個特定的功能沒有通過ip link. 它可能是在iproute2工具可以處理所有這些之前創建的。如果受限制/嵌入式系統上的工具不再有權訪問ip link命令,也許從中讀取仍然會有所幫助,但即使這似乎也不太可能。

如鍊接文件中所述,您可以創建和刪除綁定介面/sys/class/net/bonding_masters,只要綁定模組存在(此處為內置),就可以通過這些介面存在。

以下是上面的等效命令,只需echo ... > ...從根 shell 使用(或必須使用 解決重定向sudo echo ... | tee ...):

echo +mybond0 > /sys/class/net/bonding_masters
echo active-backup > /sys/class/net/mybond0/bonding/mode
echo 100 > /sys/class/net/mybond0/bonding/miimon

無論如何,我看不到任何通過sysfs設置介面的方法。為了安全起見:

ip link set dev eth0 down
ip link set dev eth1 down

echo +eth0 > /sys/class/net/mybond0/bonding/slaves
echo +eth1 > /sys/class/net/mybond0/bonding/slaves

同樣,沒有其他辦法:

ip link set dev mybond0 up
ip link set dev eth0 up
ip link set dev eth1 up

然後像前面的例子一樣繼續:

echo 200 > /sys/class/net/mybond0/bonding/miimon
echo eth1 > /sys/class/net/mybond0/bonding/active_slave

# echo balance-rr > /sys/class/net/mybond0/bonding/mode
bash: echo: write error: Directory not empty

echo -eth0 > /sys/class/net/mybond0/bonding/slaves
echo -mybond0 > /sys/class/net/bonding_masters

那裡提供了特定的綁定資訊:

cat /sys/class/net/bonding_masters
grep ^ /sys/class/net/mybond0/bonding/*
grep ^ /sys/class/net/eth0/bonding_slave/*
grep ^ /sys/class/net/eth1/bonding_slave/*

引用自:https://unix.stackexchange.com/questions/649632