Из-за разных приоритетов я оставил проект в покое в 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));
Код: Выделить всё
ip netns exec core2 ip link set core2red mtu 9000
Подробнее здесь: https://stackoverflow.com/questions/798 ... net-frames
Мобильная версия