[英]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.