【问题标题】:Interface Bonding (aggregation) in Linux using C使用 C 的 Linux 中的接口绑定(聚合)
【发布时间】:2013-08-02 09:19:08
【问题描述】:

我们通常使用linux(Ubuntu)中的interfaces或sysfs或ifenslave来配置bonding接口,用于聚合两个或多个NIC卡。然后,有一个 netlink 库,它允许我们创建和删除绑定以及从中添加和删除接口。但它目前不提供的是动态改变债券的其他属性。

例如,我想更改绑定的 MTU 或硬件地址,或者绑定模式本身。此信息通常位于

 /sys/class/net/bondx/... 

在bonding_masters中,我们需要做一些类似的事情

 # ifconfig bond0 down
 echo 6 > /sys/class/net/bond0/bonding/mode

将其绑定模式动态更改为 balance-alb,即无需重新启动或通过更改接口文件重新启动网络。同样,我们可以更改绑定模块随附的文档中给出的其他参数

但是,如果我要通过交互式 C 程序更改它,我如何与 sysfs 交互?除了 C 语言中的基本文件处理之外,我没有直接与文件系统交互的经验。开发人员对 libsysfs 是不可以的,我在某处读到 libudev 可能有用但我不太确定。那么像 sysctl() 是针对 /proc 文件系统的,那么 sysfs 文件系统的接口是什么?

或者还有其他编程方法可以解决这个问题吗?也许是 ioctl?

【问题讨论】:

标签: c linux interface network-programming linux-kernel


【解决方案1】:

如果您可以在 shell 中使用echo 写入/sys/class/net/bond0/bonding/mode,您也可以在程序中使用write() 写入它。

【讨论】:

    【解决方案2】:

    在 linux/ubuntu/Debian 中,您可以简单地使用 $ip link [options] 命令来完成您的任务。 通过使用更改或修改绑定选项

    $ip link set dev bond0 type bond mode mode_name

    您可以通过键入查看所有可用于修改绑定界面的选项

    $ip link set dev bond0 type bond --help

    在这里您会找到所有可能的绑定选项,可用于进一步修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2017-05-05
      相关资源
      最近更新 更多