使用qdisc和tc对ipset进行带宽整形

我正在尝试使用这些教程1,3,2 1做一个ipset的带宽控制。 而这个脚本 。 我已经修改它以获得ipsetnames。

这是我的bandwithshaing脚本。

TC=/sbin/tc IF=wlan0 # Interface DNLD=1mbit # DOWNLOAD Limit UPLD=1mbit # UPLOAD Limit IP1="myIPset1" # Host IP IP2="myIPset2" U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32" start() { $TC qdisc add dev $IF root handle 1: htb default 30 $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD $U32 match iptables dst $IP flowid 1:1 $U32 match iptables src $IP flowid 1:2 #second chain $TC qdisc add dev $IF root handle 1: htb default 30 $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD $U32 match iptables dst $IP1 flowid 1:1 $U32 match iptables src $IP1 flowid 1:2 } stop() { $TC qdisc del dev $IF root } restart() { stop sleep 1 start } show() { $TC -s qdisc ls dev $IF } case "$1" in start) echo -n "Starting bandwidth shaping: " start echo "done" ;; stop) echo -n "Stopping bandwidth shaping: " stop echo "done" ;; restart) echo -n "Restarting bandwidth shaping: " restart echo "done" ;; show) echo "Bandwidth shaping status for $IF:\n" show echo "" ;; *) pwd=$(pwd) echo "Usage: $(/usr/bin/dirname $pwd)/tc.bash {start|stop|restart|show}" ;; esac exit 0 

当我尝试启动bandwithshaping脚本,我得到以下输出。 开始带宽整形:非法“匹配”

 Illegal "match" RTNETLINK answers: File exists RTNETLINK answers: File exists RTNETLINK answers: File exists Illegal "match" Illegal "match" done 

这不会影响带宽。 如果我使用IP地址,它工作正常。

我是新的QDisc和TC,有可能做到这一点?

提前致谢。 我在这里错过了什么?

“RTNETLINK答案:文件存在”错误出现时,已经有一个qdisc连接到根。 在设置设备上的tc规则之前,通常会运行“tc qdisc del dev $ IF root”,以便删除旧规则。

Tc规则只能用于出口stream量。 根处理用于出口stream量,并且不会有dst设置为IP1或IP2的数据包。 我们使用ifb设备将入口stream量转换为出口,并在其上应用规则 – http://linux-ip.net/gl/tc-filters/tc-filters-node3.html

我不确定在filter中使用ipset名称