2011-12-27 5 views
0

Я пытаюсь использовать iptables-1.4.3.2 с Linux-2.6.35.9 на нашей платформе на базе MIPS. Команда выдается вiptables дает ошибку ввода/вывода

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; Любые предложения по отладке ошибки будут полезны. Благодарю.

ответ

0

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

0

Проблема, кажется, решить, изменив следующие строки в Linux-2.6.35/нетто/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;

Аналогично в FUNC Тион 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;

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

Смежные вопросы