Настройка MTU пространства имен сети в C по сравнению с утилитой «ip» с большими кадрами EthernetLinux

Ответить
Anonymous
 Настройка MTU пространства имен сети в C по сравнению с утилитой «ip» с большими кадрами Ethernet

Сообщение Anonymous »

У меня есть проект Linux C, который (среди прочих) отправляет (размером более 1500 байт) необработанные кадры Ethernet между сетевыми интерфейсами различных процессов. У меня есть несколько системных тестов, в которых эта функциональность проверяется с использованием сетевых пространств имен. У меня нет привычки допускать провалы тестов, поэтому пять лет назад все эти тесты прошли успешно.
Из-за разных приоритетов я оставил проект в покое в 2022 году и начал его несколько недель назад. Поэтому я запускаю системные тесты, которые написал для них, и все они проваливаются. Поэтому я начал расследование.
Я обнаружил, что все работает нормально, за исключением этих больших кадров Ethernet. Они в обязательном порядке вызывали код ошибки 105 или 90; коды ошибок, относящиеся к слишком большому размеру пакетов или слишком маленькому буферу. Я проверил свой код, и вроде бы он все делает правильно: он устанавливает MTU интерфейса с помощью обычных вызовов ioctl.

Код: Выделить всё

  ifr.ifr_mtu = 9000;
if (ioctl(rawsock, SIOCSIFMTU, (caddr_t)&ifr) < 0) {
DBGMSG("NETP Could not set MTU %u to device '%s'\n", mtu, device);
return -1;
}
Я даже это добавил:

Код: Выделить всё

  setsockopt(rawsock, SOL_SOCKET, SO_SNDBUF, (void*)&mtu, sizeof(mtu));
setsockopt(rawsock, SOL_SOCKET, SO_RCVBUF, (void*)&mtu, sizeof(mtu));
Ничего не получилось. Затем я просто установил MTU интерфейса в тестовом скрипте, используя «ip», и все снова заработало:

Код: Выделить всё

ip netns exec core2 ip link set core2red mtu 9000
Кто-нибудь знает, что здесь произошло? То есть я могу снова работать и развиваться над этим проектом, но меня это все равно беспокоит. Что произошло за последние пять лет, что установка MTU через C не так хороша, как то, что делает утилита ip?

Подробнее здесь: https://stackoverflow.com/questions/798 ... net-frames
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»