我在用
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掩码: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掩码: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掩码:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 公制:1
2 回答
如果要更新特定接口的MTU,则应将
struct ifreq
的ifr_name
字段设置为接口名称EDIT: 您的问题出在界面名称中 . 接口名称中列之后的数字只是一个别名 . 实际上,你没有't have several different interfaces it'相同的界面 . 这就是您将设置应用于名称为"bond:xx"的所有接口的原因
这可能有效 . 先获取Alias接口,然后设置MTU .