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

时间:2011-06-09 09:39:09

标签: c linux network-programming ioctl mtu

我正在使用

  

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 公制: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 公制: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 公制:1

2 个答案:

答案 0 :(得分:2)

如果要更新特定接口的MTU,您应将ifr_name的{​​{1}}字段设置为接口名称

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

的所有接口的原因

答案 1 :(得分:0)

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

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