我正在尝试理解这个 shell 脚本的用途。如果有人能帮忙,我将不胜感激。谢谢!它位于 android 系统中的 system/etc/throttle.sh
#!/system/bin/sh
# traffic control; arg1:ifname, arg2: rx, arg 3 tx.
#
export PATH=/data:$PATH
# clear rules
tc qdisc del dev $1 root
tc qdisc del dev $1 ingress
tc qdisc del dev ifb0 root
# set interface throttle
tc qdisc add dev $1 root handle 1: htb default 1 r2q 1000
tc class add dev $1 parent 1: classid 1:1 htb rate $3kbit
ifconfig ifb0 up
tc qdisc add dev ifb0 root handle 1: htb default 1 r2q 1000
tc class add dev ifb0 parent 1: classid 1:1 htb rate $2kbit
tc qdisc add dev $1 ingress
tc filter add dev $1 parent ffff: protocol ip prio 10 u32 match \
u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
答案1
这是一个流量整形(也称为限制)脚本。
它似乎需要 3 个参数。接口、接收限制和传输限制。
第一部分只是删除所有内容:
tc qdisc del dev $1 root
tc qdisc del dev $1 ingress
tc qdisc del dev ifb0 root
如您所见,第一个参数 ($1) 是设备接口,例如它可以是 wifi 接口。它还会重置接口 ifb0,这是处理入口流量的 tc 过滤器的替代方案,方法是将其重定向到虚拟 (ifb0) 接口并将其视为出口流量。这个想法是,您可以调整出口流量但不能调整入口流量,因此如果您可以让所有流量都出口,那么您就可以调整它。
这一行针对参数 $1 提供的接口上的流量创建一个调度程序 (qdisc):
tc qdisc add dev $1 root handle 1: htb default 1 r2q 1000
在这里,您定义了一个应用规则的类(在本例中,参数$3 的速率是千比特的出口):
tc class add dev $1 parent 1: classid 1:1 htb rate $3kbit
在这里,您为虚拟接口创建另一个调度程序,并创建一个类,该类具有一个规则,定义参数 $2 的速率,即入口速率,以千比特为单位:
tc qdisc add dev ifb0 root handle 1: htb default 1 r2q 1000
tc class add dev ifb0 parent 1: classid 1:1 htb rate $2kbit
更新: 顺便说一句,在普通的 Linux 机器中,您可以使用 tc -s 查看流量整形队列的状态。例如,您可以尝试在手机中发出以下命令,它们也应该有效:
tc -s qdisc ls dev ifb0
tc -s class ls dev ifb0
这将显示有关正在执行的流量整形的大量信息。