I am using
ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)
to change the MTU for an interface.
code is similar to this
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)
My problem is that the device has multiple interfaces and that the MTU is set to 1492 for all of these. I want to do it specifically for only one interface, leaving all the others not impacted. How can I do it?
bond1:43 Link encap:Ethernet 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 Link encap:Ethernet 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 Link encap:Ethernet 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
If you want to update MTU for the specific interface you shallset ifr_name
field of the struct ifreq
to the name of the interface
EDIT: You problem is in the name of the interface. The number after the column in the interface name is just an alias. Actually, you don't have several different interfaces it's the same interface. That is why you setting is applied onto all interfaces with name "bond:xx"