linux bond - 如果静态链接则更改参数

linux bond - 如果静态链接则更改参数

我想使用 Linux 网络绑定运行一些测试。我正在使用 qemu 虚拟机,并且使用自定义构建的内核来运行它们,我将其设置为具有静态链接的绑定。我在文档中看到可以在加载模块时设置绑定参数(如 miimon)。但是静态链接时如何设置这些值呢?

答案1

有两个 API 可以处理绑定接口,此外到过时的命令(在 Linux 上)ifconfigifenslave,它们可能无法创建新的绑定接口(因此要求绑定模块的max_bonds参数非零)。

  • 内核的 (室温网络链接API:通过提供的大多数现代命令ip路由2包括ip link命令。

  • 内核的系统文件系统通过伪文件的 API:通常安装在/sys/.

我可以注意到“最近”版本ifenslave实际上依赖于系统文件系统API 和一些关于rtnetlinkAPI 通过ip link.

您可能应该配置绑定来创建零个接口,而不是默认的一两个接口:这是一项历史功能,随着这两个 API 的出现而变得过时。这些接口可以稍后动态创建或删除。当然,对于一个非常小的系统,保留它或设置它以创建所需的数量仍然是一种选择。将其添加到内核命令行选项(通常在/etc/default/grubGRUB_CMDLINE_LINUX=条目中找到,但正确执行此操作可能取决于发行版)应该可以做到:

bonding.max_bonds=0
  • 使用 iproute2 手动配置绑定( ip link):

    警告:链接的文档相当不完整/过时,并且没有显示大多数(如果不是全部)粘合功能都可以通过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
    

    可以使用以下命令删除 bond 设备:

    ip link delete dev mybond0
    

    与某个相关的各种信息纽带设备(或到债券奴隶设备)可以通过附加选项看到-details。在某些时候,使用 JSON 输出对于脚本来说会更容易(例如,这个 Q/A:iproute2:如何显示网络设备的类型?)。

    ip -detail link show dev mybond0
    ip -detail link show dev eth0
    ip -detail link show dev eth1
    
  • 通过 Sysfs 手动配置绑定

    我认为今天使用这个 API 没有多大意义,除非特定功能无法通过ip link.它可能是之前创建的ip路由2工具可以处理所有这一切。也许在受限/嵌入式系统上的工具无法再访问命令的情况下,从中读取内容仍然会有所帮助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
    

    我没有看到任何方法可以通过以下方式设置接口系统文件系统反正。为了确保安全:

    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/*
    

相关内容