Linux中使用C的接口绑定(聚合)
我们通常在linux(Ubuntu)中使用interfaces或sysfs或ifenslave来配置绑定接口,以聚合两个或更多网卡。然后,有一个netlink库,它允许我们创建和删除绑定,并从中添加和删除接口。但它目前没有提供的是动态地改变债券的其他属性 例如,我想更改MTU或键合的硬件地址,或其键合模式本身。这些信息通常位于Linux中使用C的接口绑定(聚合),c,linux,interface,network-programming,linux-kernel,C,Linux,Interface,Network Programming,Linux Kernel,我们通常在linux(Ubuntu)中使用interfaces或sysfs或ifenslave来配置绑定接口,以聚合两个或更多网卡。然后,有一个netlink库,它允许我们创建和删除绑定,并从中添加和删除接口。但它目前没有提供的是动态地改变债券的其他属性 例如,我想更改MTU或键合的硬件地址,或其键合模式本身。这些信息通常位于 /sys/class/net/bondx/... 我们需要做一些事情,比如 # ifconfig bond0 down echo 6 > /sys/cla
/sys/class/net/bondx/...
我们需要做一些事情,比如
# ifconfig bond0 down
echo 6 > /sys/class/net/bond0/bonding/mode
更改其绑定模式以动态平衡alb,即无需重新启动或通过更改接口文件重新启动网络。同样,我们也可以更改随粘接模块提供的文档中给出的其他参数
但如果我要通过一个交互式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链接集开发绑定0类型绑定模式\u名称
及
您可以通过键入来查看所有可用于修改bond界面的选项
$ip链接集dev bond0类型绑定--帮助
在这里,您可以找到所有可能的粘合选项,这些选项可用于进一步修改。我认为答案如下: