установить MTU для устройства с несколькими интерфейсами - PullRequest
0 голосов
/ 09 июня 2011

Я использую

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 за все это. Я хочу сделать это специально только для одного интерфейса, не затрагивая все остальные. Как мне это сделать?

Бонд1: 43. Ограничение канала: Ethernet HWaddr 00: 0E: 0C: E4: C5: 45
адрес в сети Интернет: 10.7.181.59 Bcast: 10.7.181.255 Маска: 255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Метрика: 1

Bond1: 48. Ограничение канала: Ethernet HWaddr 00: 0E: 0C: E4: C5: 45
адрес в сети Интернет: 10.7.181.60 Bcast: 10.7.181.255 Маска: 255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Метрика: 1

bond1: 49 Код соединения: Ethernet HWaddr 00: 0E: 0C: E4: C5: 45
адрес в сети Интернет: 10.7.181.61 Bcast: 10.7.181.255 Маска: 255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Метрика: 1

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Если вы хотите обновить MTU для конкретного интерфейса, вы должны установить ifr_name в поле struct ifreq на имя интерфейса

РЕДАКТИРОВАТЬ: Ваша проблема в имениинтерфейса.Число после столбца в имени интерфейса - просто псевдоним.На самом деле, у вас нет нескольких разных интерфейсов, это один и тот же интерфейс.Вот почему ваши настройки применяются ко всем интерфейсам с именем "bond: xx"

0 голосов
/ 12 декабря 2012

Это может сработать.Сначала получите интерфейс Alias ​​и установите MTU.

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