繁体   English   中英

为具有多个接口的设备设置 MTU

[英]set MTU for device with multiple interfaces

我在用

ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

更改接口的 MTU。

代码与此类似

struct ifreq ifr; 
ifr.ifr_addr.sa_family = AF_INET;
//iap->ifa_name is bond1:xx
strncpy(ifr.ifr_name, iap->ifa_name, sizeof(ifr.ifr_name));
ifr.ifr_mtu = 1492; 
ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

我的问题是设备有多个接口,并且所有这些的 MTU 都设置为 1492。 我只想专门为一个接口做这件事,而其他所有接口都不受影响。 我该怎么做?

bond1:43 链接封装:以太网 HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.59 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:48 链路封装:以太网 HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.60 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:49 链接封装:以太网 HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.61 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

如果要更新特定接口的 MTU,应将struct ifreqifr_name字段设置为接口的名称

编辑:你的问题出在界面的名称上。 接口名称中列后面的数字只是一个别名。 实际上,您没有几个不同的接口,它是同一个接口。 这就是为什么您的设置应用于名称为“bond:xx”的所有接口

这可能有效。 先获取 Alias 接口,然后设置 MTU。

ioctl(s, SIOCGIFALIAS, (caddr_t)&ifr)

暂无
暂无

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

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