2011-12-27 162 views
0

我想在基於MIPS的平臺上使用iptables-1.4.3.2與Linux-2.6.35.9一起工作。發出的命令是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

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; } }

到:灰xt_check_target:從改變線

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

這些存在於之前的內核中的檢查。具有相同的檢查解決了上述問題。謝謝。