我们通常使用linux(Ubuntu)中的interfaces或sysfs或ifenslave来配置bonding接口,用于聚合两个或多个网卡。然后,有一个 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?