Advertisement
Guest User

Untitled

a guest
Feb 11th, 2012
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1.  
  2. #!/bin/bash
  3.  
  4. #ifb0
  5. #rmmod ifb
  6. #modprobe ifb numifbs=1
  7. ip link set dev ifb0 up
  8.  
  9. # set this to your internet-facing network interface:
  10. WAN_INTERFACE=eth1
  11.  
  12. # set this to your local network interface:
  13. LAN_INTERFACE=ifb0
  14.  
  15. # how fast is your downlink?
  16. MAX_DOWNRATE=3500kbit
  17.  
  18. # how close should we get to max down? e.g. 90%
  19. USE_DOWNPERCENT=0.90
  20.  
  21. # how fast is your uplink?
  22. MAX_UPRATE=2000kbit
  23.  
  24. # how close should we get to max up? e.g. 80%
  25. USE_UPPERCENT=0.80
  26.  
  27. # what port do you want to prioritize? e.g. for ssh, use 22
  28. INTERACTIVE_PORT=44679
  29.  
  30. ## now for the magic
  31.  
  32. # remove any existing qdiscs
  33. /sbin/tc qdisc del dev $WAN_INTERFACE root 2> /dev/null
  34. /sbin/tc qdisc del dev $WAN_INTERFACE ingress 2> /dev/null
  35. /sbin/tc qdisc del dev $LAN_INTERFACE root 2> /dev/null
  36. /sbin/tc qdisc del dev $LAN_INTERFACE ingress 2> /dev/null
  37.  
  38. # computations
  39. MAX_UPNUM=`echo $MAX_UPRATE | sed 's/[^0-9]//g'`
  40. MAX_UPBASE=`echo $MAX_UPRATE | sed 's/[0-9]//g'`
  41. MAX_DOWNNUM=`echo $MAX_DOWNRATE | sed 's/[^0-9]//g'`
  42. MAX_DOWNBASE=`echo $MAX_DOWNRATE | sed 's/[0-9]//g'`
  43.  
  44. NEAR_MAX_UPNUM=`echo "$MAX_UPNUM * $USE_UPPERCENT" | bc | xargs printf "%.0f"`
  45. NEAR_MAX_UPRATE="${NEAR_MAX_UPNUM}${MAX_UPBASE}"
  46.  
  47. NEAR_MAX_DOWNNUM=`echo "$MAX_DOWNNUM * $USE_DOWNPERCENT" | bc | xargs printf "%.0f"`
  48. NEAR_MAX_DOWNRATE="${NEAR_MAX_DOWNNUM}${MAX_DOWNBASE}"
  49.  
  50. HALF_MAXUPNUM=$(( $MAX_UPNUM / 2 ))
  51. HALF_MAXUP="${HALF_MAXUPNUM}${MAX_UPBASE}"
  52.  
  53. HALF_MAXDOWNNUM=$(( $MAX_DOWNNUM / 2 ))
  54. HALF_MAXDOWN="${HALF_MAXDOWNNUM}${MAX_DOWNBASE}"
  55.  
  56. # install HFSC under WAN to limit upload
  57. /sbin/tc qdisc add dev $WAN_INTERFACE root handle 1: hfsc default 11
  58. /sbin/tc class add dev $WAN_INTERFACE parent 1: classid 1:1 hfsc sc rate $NEAR_MAX_UPRATE ul rate $NEAR_MAX_UPRATE
  59. /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
  60. /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
  61.  
  62. # prioritize interactive ports
  63. /sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
  64. /sbin/tc filter add dev $WAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10
  65.  
  66. # add SFQ
  67. /sbin/tc qdisc add dev $WAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
  68. /sbin/tc qdisc add dev $WAN_INTERFACE parent 1:11 handle 40: sfq perturb 10
  69.  
  70. #/sbin/tc qdisc add dev $WAN_INTERFACE ingress
  71.  
  72. # install ingress filter to limit download to 97% max
  73. MAX_DOWNRATE_INGRESSNUM=`echo "$MAX_DOWNNUM * 0.97" | bc | xargs printf "%.0f"`
  74. MAX_DOWNRATE_INGRESS="${MAX_DOWNRATE_INGRESSNUM}${MAX_DOWNBASE}"
  75. #/sbin/tc qdisc add dev $WAN_INTERFACE ingress
  76. /sbin/tc qdisc add dev $WAN_INTERFACE handle ffff: ingress
  77. /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid :1
  78. /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid :1
  79. #/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
  80.  
  81. #Ifb0 Mirror
  82. /sbin/tc filter add dev $WAN_INTERFACE parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
  83.  
  84. # install HFSC under LAN to limit download
  85. /sbin/tc qdisc add dev $LAN_INTERFACE root handle 1: hfsc default 11
  86. /sbin/tc class add dev $LAN_INTERFACE parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
  87. /sbin/tc class add dev $LAN_INTERFACE parent 1:1 classid 1:10 hfsc sc umax 1540 dmax 5ms rate 90mbit ul rate 90mbit
  88. /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
  89.  
  90. # prioritize interactive ports
  91. /sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip sport $INTERACTIVE_PORT 0xffff flowid 1:10
  92. /sbin/tc filter add dev $LAN_INTERFACE protocol ip parent 1:0 prio 1 u32 match ip dport $INTERACTIVE_PORT 0xffff flowid 1:10
  93.  
  94. # add SFQ
  95. /sbin/tc qdisc add dev $LAN_INTERFACE parent 1:10 handle 30: sfq perturb 10
  96. /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