繁体   English   中英

使用C在Linux中进行接口绑定(聚合)

[英]Interface Bonding (aggregation) in Linux using C

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

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

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

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

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

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

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

还是有其他程序化方法来解决这个问题? 也许是ioctl?

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

在linux / ubuntu / Debian中,您只需使用$ ip link [options]命令即可完成任务。 使用更改或修改绑定选项

$ ip link set dev bond0 type bond mode mode_name

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

$ ip link set dev bond0 type bond --help

在这里,您将找到所有可能的粘合选项,可用于进一步修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM