Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #ifb0
- #rmmod ifb
- #modprobe ifb numifbs=1
- ip link set dev ifb0 up
- # set this to your internet-facing network interface:
- WAN_INTERFACE=eth1
- # set this to your local network interface:
- LAN_INTERFACE=ifb0
- # how fast is your downlink?
- MAX_DOWNRATE=3500kbit
- # how close should we get to max down? e.g. 90%
- USE_DOWNPERCENT=0.90
- # how fast is your uplink?
- MAX_UPRATE=2000kbit
- # how close should we get to max up? e.g. 80%
- USE_UPPERCENT=0.80
- # what port do you want to prioritize? e.g. for ssh, use 22
- INTERACTIVE_PORT=44679
- ## now for the magic
- # remove any existing qdiscs
- /sbin/tc qdisc del dev $WAN_INTERFACE root 2> /dev/null
- /sbin/tc qdisc del dev $WAN_INTERFACE ingress 2> /dev/null
- /sbin/tc qdisc del dev $LAN_INTERFACE root 2> /dev/null
- /sbin/tc qdisc del dev $LAN_INTERFACE ingress 2> /dev/null
- # computations
- MAX_UPNUM=`echo $MAX_UPRATE | sed 's/[^0-9]//g'`
- MAX_UPBASE=`echo $MAX_UPRATE | sed 's/[0-9]//g'`
- MAX_DOWNNUM=`echo $MAX_DOWNRATE | sed 's/[^0-9]//g'`
- MAX_DOWNBASE=`echo $MAX_DOWNRATE | sed 's/[0-9]//g'`
- NEAR_MAX_UPNUM=`echo "$MAX_UPNUM * $USE_UPPERCENT" | bc | xargs printf "%.0f"`
- NEAR_MAX_UPRATE="${NEAR_MAX_UPNUM}${MAX_UPBASE}"
- NEAR_MAX_DOWNNUM=`echo "$MAX_DOWNNUM * $USE_DOWNPERCENT" | bc | xargs printf "%.0f"`
- NEAR_MAX_DOWNRATE="${NEAR_MAX_DOWNNUM}${MAX_DOWNBASE}"
- HALF_MAXUPNUM=$(( $MAX_UPNUM / 2 ))
- HALF_MAXUP="${HALF_MAXUPNUM}${MAX_UPBASE}"
- HALF_MAXDOWNNUM=$(( $MAX_DOWNNUM / 2 ))
- HALF_MAXDOWN="${HALF_MAXDOWNNUM}${MAX_DOWNBASE}"
- # install HFSC under WAN to limit upload
- /sbin/tc qdisc add dev $WAN_INTERFACE root handle 1: hfsc default 11
- /sbin/tc class add dev $WAN_INTERFACE parent 1: classid 1:1 hfsc sc rate $NEAR_MAX_UPRATE ul rate $NEAR_MAX_UPRATE
- /sbin/tc class add dev $WAN_INTERFACE parent 1:1 classid 1:10 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXUP ul rate $NEAR_MAX_UPRATE
- /sbin/tc class add dev $WAN_INTERFACE parent 1:1 classid 1:11 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXUP ul rate $HALF_MAXUP
- # prioritize interactive ports
- /sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
- /sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10
- # add SFQ
- /sbin/tc qdisc add dev $WAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
- /sbin/tc qdisc add dev $WAN_INTERFACE parent 1:11 handle 40: sfq perturb 10
- #/sbin/tc qdisc add dev $WAN_INTERFACE ingress
- # install ingress filter to limit download to 97% max
- MAX_DOWNRATE_INGRESSNUM=`echo "$MAX_DOWNNUM * 0.97" | bc | xargs printf "%.0f"`
- MAX_DOWNRATE_INGRESS="${MAX_DOWNRATE_INGRESSNUM}${MAX_DOWNBASE}"
- #/sbin/tc qdisc add dev $WAN_INTERFACE ingress
- /sbin/tc qdisc add dev $WAN_INTERFACE handle ffff: ingress
- /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid :1
- /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid :1
- #/sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $MAX_DOWNRATE_INGRESS burst 20k drop flowid :2
- #Ifb0 Mirror
- /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
- # install HFSC under LAN to limit download
- /sbin/tc qdisc add dev $LAN_INTERFACE root handle 1: hfsc default 11
- /sbin/tc class add dev $LAN_INTERFACE parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
- /sbin/tc class add dev $LAN_INTERFACE parent 1:1 classid 1:10 hfsc sc umax 1540 dmax 5ms rate 90mbit ul rate 90mbit
- /sbin/tc class add dev $LAN_INTERFACE parent 1:1 classid 1:11 hfsc sc umax 1540 dmax 5ms rate $HALF_MAXDOWN ul rate $NEAR_MAX_DOWNRATE
- # prioritize interactive ports
- /sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
- /sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10
- # add SFQ
- /sbin/tc qdisc add dev $LAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
- /sbin/tc qdisc add dev $LAN_INTERFACE parent 1:11 handle 40: sfq perturb 10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement