基于tc的流控脚本

自己写的简单的流控脚本,在此记录,以作笔记

脚本用来均分totle的总带宽,使用hfsc流控算法

 

脚本内容如下

#!/bin/sh

macs=mac.conf  #需要做流控的mac地址,一行一个
intf=wlan1           #需要应用流控的接口名称
totle=10240 #kbps    #总带宽


sta_count=`cat $macs |wc -l`
reserv_bw=`expr $totle / 20`
bw=`expr $totle - $reserv_bw`
sta_bw=`expr $bw / $sta_count`

#init_qos()
#{
    tc qdisc del dev $intf root
    tc qdisc add dev $intf root handle 1000: hfsc default 1002
    tc class add dev $intf parent 1000: classid 1000:1001 hfsc sc rate ${reserv_bw}kbit ul rate ${totle}kbit
    tc class add dev $intf parent 1000: classid 1000:1002 hfsc sc rate ${bw}kbit ul rate ${totle}kbit
    tc qdisc add dev $intf parent 1000:1002 handle 2000: hfsc default 2001
    tc class add dev $intf parent 2000: classid 2000:2001 hfsc sc rate ${sta_bw}kbit ul rate ${bw}kbit
#}


index=1
while read LINE
do
    mac2=`echo $LINE | awk '{print $1}'`
    mac4=`echo $LINE | awk '{print $2}'`
    tc class add dev $intf parent 2000: classid 2000:$index hfsc sc rate ${sta_bw}kbit ul rate ${bw}kbit
    tc filter add dev $intf parent 2000: prio 1 protocol ip handle 800::$index u32 match u32 0x${mac4} 0xffffffff at -12 match u16 0x${mac2} 0xffff at -14 flowid 2000:$index
    index=`expr $index + 1`
done < $macs
 

 

配置文件如下:

mac.conf

5800 e3fb786f
6c94 f8341d74
b4f6 1cc5f4d1
d88f 76ad9205
dc0c 5cd84a8b
f431 c33694a1

一行表示一个mac。

此脚本亲测有效

你可能感兴趣的:(基于tc的流控脚本)