cateof
cateof

Reputation: 6758

set MTU for device with multiple interfaces

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

Upvotes: 0

Views: 4841

Answers (2)

Logesh
Logesh

Reputation: 53

This may work . Get the Alias interface first and the set the MTU .

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

Upvotes: 0

Eugene
Eugene

Reputation: 2908

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"

Upvotes: 2

Related Questions