iptables -I test -m limit --limit xxx/yyy
iptables用户空间:libxt_limit.c
int parse_rate(const char *rate, uint32_t *val)
该函数中:*val = XT_LIMIT_SCALE * mult/ r;
XT_LIMIT_SCALE:10000(时间精度)
mult:yyy是s则mult:1,yyy是m则mult:60,yyy是h则mult是:60x60,yyy是d则mult是:24x60x60
r为xxx
所以上式中的*val为传输一个包需要的时间。iptables显示的数字实际应该是:10000/(*val),即表示每秒允许的数据包数量。
以iptables -I test -m limit --limit 2600/s为例:
*val=10000*1/2600=3
10000/3=3333
以iptables -I test -m limit --limit 1400/s为例:
*val=10000*1/1400=7
10000/7=1428
iptables内核空间:xt_limit.c
staticstructxt_matchlimit_mt_reg__read_mostly={ .name ="limit", .revision =0, .family =NFPROTO_UNSPEC, .match =limit_mt, .checkentry =limit_mt_check, .destroy =limit_mt_destroy, .matchsize =sizeof(structxt_rateinfo), #ifdef CONFIG_COMPAT .compatsize =sizeof(struct |