iptables дает ошибку ввода / вывода - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь, чтобы iptables-1.4.3.2 работал с Linux-2.6.35.9 на нашей платформе на основе MIPS.Выдана команда

iptables -t mangle -A POSTROUTING -p udp -j <TC name> --map tos

iptables завершается с ошибкой ввода / вывода (та же команда работала в Linux-2.6.28.8).Затем сделал то же самое для нашей цели и обнаружил проблему, как показано ниже:

socket(PF_INET, SOCK_RAW, IPPROTO_RAW)  = 3
getsockopt(3, SOL_IP, 0x40 /* IP_??? */, "mangle\0\0\0\0\0\34\200F\0\0\200\1\340   \244\200\1\340\244\200\7W\224\200\7W\f\0"..., [84]) = 0
getsockopt(3, SOL_IP, 0x41 /* IP_??? */, "mangle\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., [976]) = 0
setsockopt(3, SOL_IP, 0x40 /* IP_??? */, "mangle\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1240) = -1 EIO (Input/output error)
close(3)                                = 0
write(2, "iptables: "..., 10iptables: )           = 10
write(2, "Input/output error"..., 18Input/output error)   = 18
write(2, ".\n"..., 2.
)                   = 2
munmap(0x2ab9b000, 75264)               = 0
exit(1)                                

Приведенный выше код находится в libiptc.c;Любые предложения по дальнейшему устранению ошибки будут полезны.Благодарю.

Ответы [ 2 ]

0 голосов
/ 18 января 2012

EIO означает, что ваш пользовательский целевой модуль "TC" (или что-то еще, что вы подразумевали под ним), то есть xt_TC.c, не придерживается API.checkentry не должен возвращать значения больше нуля (для них нет назначенного значения) в 2.6.35 и выше.

0 голосов
/ 28 декабря 2011

Проблема, похоже, решается путем изменения следующих строк в linux-2.6.35 / net / netfilter / x_tables.c

функция xt_check_match: изменены следующие строки с:

if (par->match->checkentry != NULL) { ret = par->match->checkentry(par); if (ret < 0) return ret; else if (ret > 0) { /* Flag up potential errors. */ return -EIO; } }

до:

if (par->match->checkentry != NULL && !par->match->checkentry(par)) return -EINVAL;

Аналогично в функции xt_check_target: изменились строки с:

if (par->target->checkentry != NULL) { ret = par->target->checkentry(par); if (ret < 0) return ret; else if (ret > 0) { /* Flag up potential errors. */ return -EIO; } }

до:

if (par->target->checkentry != NULL && !par->target->checkentry(par)) return -EINVAL;

Это были проверки, присутствующие в предыдущих ядрах. Наличие тех же проверок решает вышеуказанную проблему. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...