diff --git a/xs.sh b/xs.sh index d2cd075..aa4072f 100644 --- a/xs.sh +++ b/xs.sh @@ -8,7 +8,7 @@ LIMIT_RATE="3mbit" # 检查是否提供操作参数 if [ "$#" -lt 1 ]; then - echo "Usage: $0 {add|delete}" + echo "Usage: $0 {add|del}" exit 1 fi @@ -16,17 +16,28 @@ fi add_limit() { echo "Adding bandwidth limit of $LIMIT_RATE on ports 8337 and 8338 for interface $INTERFACE..." - # 添加全局队列规则 + # 添加全局队列规则(上行限制) tc qdisc add dev "$INTERFACE" root handle 1: htb default 11 tc class add dev "$INTERFACE" parent 1: classid 1:1 htb rate "$LIMIT_RATE" tc class add dev "$INTERFACE" parent 1:1 classid 1:11 htb rate "$LIMIT_RATE" - # 针对端口 8337 添加过滤规则 + # 针对端口 8337 上行流量添加过滤规则 tc filter add dev "$INTERFACE" protocol ip parent 1:0 prio 1 u32 match ip dport 8337 0xffff flowid 1:11 - # 针对端口 8338 添加过滤规则 + # 针对端口 8338 上行流量添加过滤规则 tc filter add dev "$INTERFACE" protocol ip parent 1:0 prio 1 u32 match ip dport 8338 0xffff flowid 1:11 + # 添加全局队列规则(下行限制) + tc qdisc add dev ifb0 root handle 1: htb default 11 + tc class add dev ifb0 parent 1: classid 1:1 htb rate "$LIMIT_RATE" + tc class add dev ifb0 parent 1:1 classid 1:11 htb rate "$LIMIT_RATE" + + # 针对端口 8337 下行流量添加过滤规则 + tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip sport 8337 0xffff flowid 1:11 + + # 针对端口 8338 下行流量添加过滤规则 + tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip sport 8338 0xffff flowid 1:11 + echo "Bandwidth limit applied successfully." } @@ -34,23 +45,33 @@ add_limit() { delete_limit() { echo "Removing bandwidth limit from interface $INTERFACE..." - # 删除队列规则 + # 删除上行规则 tc qdisc del dev "$INTERFACE" root + # 删除下行规则 + tc qdisc del dev ifb0 root + echo "Bandwidth limit removed successfully." } # 根据用户输入执行操作 case "$1" in add) + # 启用下行流量接口 ifb0 + modprobe ifb + ip link set ifb0 up + add_limit ;; del) delete_limit + + # 禁用下行流量接口 ifb0 + ip link set ifb0 down ;; *) echo "Invalid option: $1" - echo "Usage: $0 {add|del}" + echo "Usage: $0 {add|delete}" exit 1 ;; esac