Advertisement
Guest User

Shell script port of Asuswrt bandwidth limiter (repost)

a guest
Feb 23rd, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 15.85 KB | None | 0 0
  1. #!/bin/sh
  2. # Shell script port of Asuswrt bandwidth limiter
  3. #
  4. # SOURCE: https://github.com/RMerl/asuswrt-merlin/blob/380.57/release/src/router/rc/qos.c
  5. #         https://github.com/RMerl/asuswrt-merlin/blob/380.57/release/src/router/shared/model.c
  6. #
  7. #
  8. local action=$1
  9. local pcWANIF=$2
  10. local qos_bw_rulelist="$3"
  11.  
  12. local GUEST_NETWORK_NAMES="wl* vlan*"    # list of network interaces (space separated)
  13. local QOS_SCRIPT="/tmp/qos_custom"
  14. local MANGLE_SCRIPT="/tmp/mangle_rules_custom"
  15. local qos_enable=1
  16. local qos_type=2
  17. local addr_type=-1
  18. local addr_new=""
  19. local guest=0
  20. local TYPE_IP=0
  21. local TYPE_MAC=1
  22. local TYPE_IPRANGE=2
  23. local TYPE_GUEST=3
  24.  
  25.  
  26. address_checker()
  27. {
  28.   local addr_old=$1
  29.  
  30.   addr_type=-1
  31.   addr_new=""
  32.  
  33.   for name in $GUEST_NETWORK_NAMES; do
  34.     if [ "${addr_old#$name}" != "$addr_old" ]; then
  35.       addr_type=$TYPE_GUEST
  36.       addr_new=$addr_old
  37.       return 0
  38.     fi
  39.   done
  40.  
  41.   local second=${addr_old##*-}
  42.   if [ "$second" != "$addr_old" ]; then
  43.     addr_type=$TYPE_IPRANGE
  44.     if [ "${second#.}" != "$second" ]; then
  45.       # long notation
  46.       addr_new=$addr_old
  47.     else
  48.       # short notation
  49.       local first=${addr_old%%-*}
  50.       local len_second=${#second}
  51.       local len_first=${#first}
  52.       local copy_first=${first:0:$((len_first-len_second))}
  53.       addr_new=${first}-${copy_first}${second}
  54.     fi
  55.   else
  56.     if [ ${#addr_old} == 17 ]; then
  57.       addr_type=$TYPE_MAC
  58.     else
  59.       addr_type=$TYPE_IP
  60.     fi
  61.     addr_new=$addr_old
  62.   fi
  63. }
  64.  
  65. update_rule()
  66. {
  67.   local CMD="$1"
  68.   local CHAIN="$2"
  69.   local RULENUM="$3"
  70.   local RULE="$4"
  71.   local ACTION="$5"
  72.  
  73.   #/bin/echo update_rule $CMD $CHAIN $RULENUM $RULE $DELETE
  74.  
  75.   if [ "${CMD%iptables}" != "$CMD" ]; then
  76.  
  77.     if [ "$ACTION" == "append" ]; then
  78.       $CMD -C $CHAIN $RULE > /dev/null 2>&1 || $CMD -A $CHAIN $RULE
  79.     elif [ "$ACTION" == "insert" ]; then
  80.       $CMD -C $CHAIN $RULE > /dev/null 2>&1 || $CMD -I $CHAIN $RULENUM $RULE
  81.     elif [ "$ACTION" == "delete" ]; then
  82.       $CMD -C $CHAIN $RULE > /dev/null 2>&1 && $CMD -D $CHAIN $RULE
  83.     else
  84.       /bin/echo "Invalid action."
  85.     fi
  86.  
  87.   elif [ "${CMD%ebtables}" != "$CMD" ]; then
  88.  
  89.     $CMD -D $CHAIN $RULE
  90.     while [ $? == 0 ]; do
  91.       $CMD -D $CHAIN $RULE
  92.     done
  93.  
  94.     if [ "$ACTION" == "append" ]; then
  95.       $CMD -A $CHAIN $RULE
  96.     elif [ "$ACTION" == "insert" ]; then
  97.       $CMD -I $CHAIN $RULENUM $RULE
  98.     elif [ "$ACTION" != "delete" ]; then
  99.       /bin/echo "Invalid action."
  100.     fi
  101.  
  102.   fi
  103. }
  104.  
  105. del_EbtablesRules()
  106. {
  107.   /usr/sbin/ebtables -t nat -F
  108. }
  109.  
  110. del_iQosRules()
  111. {
  112. #  /usr/sbin/ip link set imq0 down
  113.   del_EbtablesRules
  114.   /usr/sbin/iptables -t mangle -F
  115.   /usr/sbin/ip6tables -t mangle -F
  116. }
  117.  
  118. add_bandwidth_limiter_rules()
  119. {
  120.   /bin/rm -f $MANGLE_SCRIPT
  121.   #del_iQosRules  # flush all rules in mangle table
  122.  
  123.   local model=$(/usr/sbin/nvram get model)
  124.   case ${model} in
  125.      "DSL-N55U" | "DSL-N55U-B" | "RT-N13U" | "RT-N56UB1" | "RT-N56UB2" | "RT-N56U")
  126.         local action="CONNMARK --set-return"
  127.         local manual_return=0
  128.         ;;
  129.      *)  
  130.         local action="MARK --set-mark"
  131.         local manual_return=1
  132.         ;;
  133.   esac
  134.  
  135.   local lan_ipaddr=$(/usr/sbin/nvram get lan_ipaddr)
  136.   local lan_addr="${lan_ipaddr}/$(/usr/sbin/nvram get lan_netmask)"
  137.  
  138.   /usr/bin/printf "*mangle\n" >> $MANGLE_SCRIPT
  139.   /usr/bin/printf ":PREROUTING ACCEPT [0:0]\n" >> $MANGLE_SCRIPT
  140.   /usr/bin/printf ":OUTPUT ACCEPT [0:0]\n" >> $MANGLE_SCRIPT
  141.  
  142.   # access router : mark 9
  143.   /usr/bin/printf "-A POSTROUTING -s %s -d %s -j %s 9\n" "$lan_ipaddr" "$lan_addr" "$action" >> $MANGLE_SCRIPT
  144.   /usr/bin/printf "-A PREROUTING -s %s -d %s -j %s 9\n" "$lan_addr" "$lan_ipaddr" "$action" >> $MANGLE_SCRIPT
  145.  
  146.   if [ $manual_return == 1 ]; then
  147.     /usr/bin/printf "-A POSTROUTING -s %s -d %s -j RETURN\n" "$lan_ipaddr" "$lan_addr" >> $MANGLE_SCRIPT
  148.     /usr/bin/printf "-A PREROUTING -s %s -d %s -j RETURN\n" "$lan_addr" "$lan_ipaddr" >> $MANGLE_SCRIPT
  149.   fi
  150.  
  151.   local N=1
  152.   local g="${qos_bw_rulelist}<"
  153.   local rule=$(/bin/echo ${g} | /usr/bin/cut -f${N} -d'<')
  154.   while [ "$rule" != "" ]; do
  155.     local enable=$(/bin/echo $rule | /usr/bin/cut -f1 -d'>')
  156.    
  157.     if [ "$enable" == "0" ]; then
  158.       continue
  159.     fi
  160.  
  161.     local addr=$(/bin/echo $rule | /usr/bin/cut -f2 -d'>')
  162.     local dlc=$(/bin/echo $rule | /usr/bin/cut -f3 -d'>')
  163.     local upc=$(/bin/echo $rule | /usr/bin/cut -f4 -d'>')
  164.     local prio=$(/bin/echo $rule | /usr/bin/cut -f5 -d'>')
  165.     address_checker $addr
  166.     let local class=prio+10
  167.    
  168.     if [ $addr_type == $TYPE_IP ]; then
  169.       printf "-A POSTROUTING ! -s %s -d %s -j %s %d\n" "$lan_addr" "$addr_new" "$action" "$class" >> $MANGLE_SCRIPT
  170.       printf "-A PREROUTING -s %s ! -d %s -j %s %d\n" "$addr_new" "$lan_addr" "$action" "$class" >> $MANGLE_SCRIPT
  171.       if [ $manual_return == 1 ]; then
  172.         printf "-A POSTROUTING ! -s %s -d %s -j RETURN\n" "$lan_addr" "$addr_new" >> $MANGLE_SCRIPT
  173.         printf "-A PREROUTING -s %s ! -d %s -j RETURN\n" "$addr_new" "$lan_addr" >> $MANGLE_SCRIPT
  174.       fi
  175.     elif [ $addr_type == $TYPE_MAC ]; then
  176.       printf "-A PREROUTING -m mac --mac-source %s ! -d %s  -j %s %d\n" "$addr_new" "$lan_addr" "$action" "$class" >> $MANGLE_SCRIPT
  177.       if [ $manual_return == 1 ]; then
  178.         printf "-A PREROUTING -m mac --mac-source %s ! -d %s  -j RETURN\n" "$addr_new" "$lan_addr" >> $MANGLE_SCRIPT
  179.       fi
  180.     elif [ $addr_type == $TYPE_IPRANGE ]; then
  181.       printf "-A POSTROUTING ! -s %s -m iprange --dst-range %s -j %s %d\n" "$lan_addr" "$addr_new" "$action" "$class" >> $MANGLE_SCRIPT
  182.       printf "-A PREROUTING -m iprange --src-range %s ! -d %s -j %s %d\n" "$addr_new" "$lan_addr" "$action" "$class" >> $MANGLE_SCRIPT
  183.       if [ $manual_return == 1 ]; then
  184.         printf "-A POSTROUTING ! -s %s -m iprange --dst-range %s -j RETURN\n" "$lan_addr" "$addr_new" >> $MANGLE_SCRIPT
  185.         printf "-A PREROUTING -m iprange --src-range %s ! -d %s -j RETURN\n" "$addr_new" "$lan_addr" >> $MANGLE_SCRIPT
  186.       fi
  187.     elif [ $addr_type == $TYPE_GUEST ]; then
  188.       continue
  189.     fi
  190.    
  191.     let local N++
  192.     local rule=$(/bin/echo ${g} | /usr/bin/cut -f${N} -d'<')
  193.   done
  194.  
  195.   /usr/bin/printf "COMMIT\n" >> $MANGLE_SCRIPT
  196.   /bin/chmod 0700 $MANGLE_SCRIPT
  197.   /usr/sbin/iptables-restore $MANGLE_SCRIPT
  198. }
  199.  
  200. start_bandwidth_limiter()
  201. {
  202.   # init guest 3: ~ 12: (9 guestnetwork), start number = 3
  203.   guest=3
  204.  
  205.   /bin/rm -f $QOS_SCRIPT
  206.   /usr/bin/printf "#!/bin/sh\n" >> $QOS_SCRIPT
  207.   /usr/bin/printf "WAN=${pcWANIF}\n" >> $QOS_SCRIPT
  208.   /usr/bin/printf "\n" >> $QOS_SCRIPT
  209.   /usr/bin/printf "case \"\$1\" in\n" >> $QOS_SCRIPT
  210.   /usr/bin/printf "start)\n" >> $QOS_SCRIPT
  211.  
  212.   if [ "$qos_bw_rulelist" != "" ]; then
  213.     /usr/bin/printf "/usr/sbin/tc qdisc del dev \$WAN root 2>/dev/null\n" >> $QOS_SCRIPT
  214.     /usr/bin/printf "/usr/sbin/tc qdisc del dev \$WAN ingress 2>/dev/null\n" >> $QOS_SCRIPT
  215.     /usr/bin/printf "/usr/sbin/tc qdisc del dev br0 root 2>/dev/null\n" >> $QOS_SCRIPT
  216.     /usr/bin/printf "/usr/sbin/tc qdisc del dev br0 ingress 2>/dev/null\n" >> $QOS_SCRIPT
  217.     /usr/bin/printf "\n" >> $QOS_SCRIPT
  218.     /usr/bin/printf "TQAU=\"/usr/sbin/tc qdisc add dev \$WAN\"\n" >> $QOS_SCRIPT
  219.     /usr/bin/printf "TCAU=\"/usr/sbin/tc class add dev \$WAN\"\n" >> $QOS_SCRIPT
  220.     /usr/bin/printf "TFAU=\"/usr/sbin/tc filter add dev \$WAN\"\n" >> $QOS_SCRIPT
  221.     /usr/bin/printf "SFQ=\"sfq perturb 10\"\n" >> $QOS_SCRIPT
  222.     /usr/bin/printf "TQA=\"/usr/sbin/tc qdisc add dev br0\"\n" >> $QOS_SCRIPT
  223.     /usr/bin/printf "TCA=\"/usr/sbin/tc class add dev br0\"\n" >> $QOS_SCRIPT
  224.     /usr/bin/printf "TFA=\"/usr/sbin/tc filter add dev br0\"\n" >> $QOS_SCRIPT
  225.     /usr/bin/printf "\n" >> $QOS_SCRIPT
  226.     /usr/bin/printf "\$TQA root handle 1: htb\n" >> $QOS_SCRIPT
  227.     /usr/bin/printf "\$TCA parent 1: classid 1:1 htb rate 10240000kbit\n" >> $QOS_SCRIPT
  228.     /usr/bin/printf "\n" >> $QOS_SCRIPT
  229.     /usr/bin/printf "\$TQAU root handle 2: htb\n" >> $QOS_SCRIPT
  230.     /usr/bin/printf "\$TCAU parent 2: classid 2:1 htb rate 10240000kbit\n" >> $QOS_SCRIPT
  231.  
  232.     # access router : mark 9
  233.     # default : 10Gbps
  234.     /usr/bin/printf "\n" >> $QOS_SCRIPT
  235.     /usr/bin/printf "\$TCA parent 1:1 classid 1:9 htb rate 10240000kbit ceil 10240000kbit prio 1\n" >> $QOS_SCRIPT
  236.     /usr/bin/printf "\$TQA parent 1:9 handle 9: \$SFQ\n" >> $QOS_SCRIPT
  237.     /usr/bin/printf "\$TFA parent 1: prio 1 protocol ip handle 9 fw flowid 1:9\n" >> $QOS_SCRIPT
  238.     /usr/bin/printf "\n" >> $QOS_SCRIPT
  239.     /usr/bin/printf "\$TCAU parent 2:1 classid 2:9 htb rate 10240000kbit ceil 10240000kbit prio 1\n" >> $QOS_SCRIPT
  240.     /usr/bin/printf "\$TQAU parent 2:9 handle 9: \$SFQ\n" >> $QOS_SCRIPT
  241.     /usr/bin/printf "\$TFAU parent 2: prio 1 protocol ip handle 9 fw flowid 2:9\n" >> $QOS_SCRIPT
  242.   fi
  243.  
  244.   local N=1
  245.   local g="${qos_bw_rulelist}<"
  246.   local rule=$(/bin/echo ${g} | /usr/bin/cut -f${N} -d'<')
  247.   while [ "$rule" != "" ]; do
  248.     local enable=$(/bin/echo $rule | /usr/bin/cut -f1 -d'>')
  249.    
  250.     if [ "$enable" == "0" ]; then
  251.       continue
  252.     fi
  253.  
  254.     local addr=$(/bin/echo $rule | /usr/bin/cut -f2 -d'>')
  255.     local dlc=$(/bin/echo $rule | /usr/bin/cut -f3 -d'>')
  256.     local upc=$(/bin/echo $rule | /usr/bin/cut -f4 -d'>')
  257.     local prio=$(/bin/echo $rule | /usr/bin/cut -f5 -d'>')
  258.     address_checker $addr
  259.     let local class=prio+10
  260.    
  261.     if [ $addr_type == $TYPE_MAC ]; then
  262.       for X in 1 2 3 4 5 6; do eval local s${X}=0x$(/bin/echo ${addr} | /usr/bin/cut -f${X} -d':'); done
  263.       /usr/bin/printf "\$TCA parent 1:1 classid 1:%d htb rate %skbit ceil %skbit prio %s\n" "$class" "$dlc" "$dlc" "$prio" >> $QOS_SCRIPT
  264.       /usr/bin/printf "\$TQA parent 1:%d handle %d: \$SFQ\n" "$class" "$class" >> $QOS_SCRIPT
  265.       /usr/bin/printf "\$TFA parent 1: protocol ip prio %s u32 match u16 0x0800 0xFFFF at -2 match u32 0x%02X%02X%02X%02X 0xFFFFFFFF at -12 match u16 0x%02X%02X 0xFFFF at -14 flowid 1:%d\n" "$prio" "$s3" "$s4" "$s5" "$s6" "$s1" "$s2" "$class" >> $QOS_SCRIPT
  266.       /usr/bin/printf "\$TCAU parent 2:1 classid 2:%d htb rate %skbit ceil %skbit prio %s\n" "$class" "$upc" "$upc" "$prio" >> $QOS_SCRIPT
  267.       /usr/bin/printf "\$TQAU parent 2:%d handle %d: \$SFQ\n" "$class" "$class" >> $QOS_SCRIPT
  268.       /usr/bin/printf "\$TFAU parent 2: prio %s protocol ip handle %d fw flowid 2:%d\n" "$prio" "$class" "$class" >> $QOS_SCRIPT
  269.    
  270.     elif [ $addr_type == $TYPE_IP ] || [ $addr_type == $TYPE_IPRANGE ]; then
  271.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  272.       /usr/bin/printf "\$TCA parent 1:1 classid 1:%d htb rate %skbit ceil %skbit prio %s\n" "$class" "$dlc" "$dlc" "$prio" >> $QOS_SCRIPT
  273.       /usr/bin/printf "\$TQA parent 1:%d handle %d: \$SFQ\n" "$class" "$class" >> $QOS_SCRIPT
  274.       /usr/bin/printf "\$TFA parent 1: prio %s protocol ip handle %d fw flowid 1:%d\n" "$prio" "$class" "$class" >> $QOS_SCRIPT
  275.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  276.       /usr/bin/printf "\$TCAU parent 2:1 classid 2:%d htb rate %skbit ceil %skbit prio %s\n" "$class" "$upc" "$upc" "$prio" >> $QOS_SCRIPT
  277.       /usr/bin/printf "\$TQAU parent 2:%d handle %d: \$SFQ\n" "$class" "$class" >> $QOS_SCRIPT
  278.       /usr/bin/printf "\$TFAU parent 2: prio %s protocol ip handle %d fw flowid 2:%d\n" "$prio" "$class" "$class" >> $QOS_SCRIPT
  279.    
  280.     elif [ $addr_type == $TYPE_GUEST ]; then
  281.       local ij=${addr_new#wl*}
  282.       local i=${ij%.*}
  283.       local j=${ij#*.}
  284.    
  285.       mssid_mark="$class"
  286.      
  287.       if [ "$ij" != "$addr_new" ]; then
  288.         if [ "$(/usr/sbin/nvram get model)" == "RT-AC87U" ] && [ $i == 1 ]; then
  289.           [ $j == 1 ] && local wl_if="vlan4000"
  290.           [ $j == 2 ] && local wl_if="vlan4001"
  291.           [ $j == 3 ] && local wl_if="vlan4002"
  292.         else
  293.           local wl_if="$addr_new"
  294.         fi
  295.       else
  296.         local wl_if="$addr_new"
  297.         local i=990
  298.         local j=${addr_new#vlan*}
  299.         if [ "$j" == "$addr_new" ]; then
  300.           local i=991
  301.           local j=${addr_new#eth*}
  302.         fi
  303.       fi
  304.  
  305.       /usr/sbin/ebtables -t nat PREROUTING -i $wl_if -j mark --set-mark $mssid_mark --mark-target ACCEPT
  306.       /usr/sbin/ebtables -t nat POSTROUTING -o $wl_if -j mark --set-mark $mssid_mark --mark-target ACCEPT
  307.  
  308.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  309.       /usr/bin/printf "/usr/sbin/tc qdisc del dev %s root 2>/dev/null\n" "$wl_if" >> $QOS_SCRIPT
  310.       /usr/bin/printf "GUEST%d%d=%s\n" "$i" "$j" "$wl_if" >> $QOS_SCRIPT
  311.       /usr/bin/printf "TQA%d%d=\"/usr/sbin/tc qdisc add dev \$GUEST%d%d\"\n" "$i" "$j" "$i" "$j" >> $QOS_SCRIPT
  312.       /usr/bin/printf "TCA%d%d=\"/usr/sbin/tc class add dev \$GUEST%d%d\"\n" "$i" "$j" "$i" "$j" >> $QOS_SCRIPT
  313.       /usr/bin/printf "TFA%d%d=\"/usr/sbin/tc filter add dev \$GUEST%d%d\"\n" "$i" "$j" "$i" "$j" >> $QOS_SCRIPT  # 5
  314.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  315.       /usr/bin/printf "\$TQA%d%d root handle %d: htb\n" "$i" "$j" "$guest" >> $QOS_SCRIPT
  316.       /usr/bin/printf "\$TCA%d%d parent %d: classid %d:1 htb rate %skbit\n" "$i" "$j" "$guest" "$guest" "$dlc" >> $QOS_SCRIPT  # 7
  317.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  318.       /usr/bin/printf "\$TCA%d%d parent %d:1 classid %d:%d htb rate 1kbit ceil %skbit prio %d\n" "$i" "$j" "$guest" "$guest" "$class" "$dlc" "$class" >> $QOS_SCRIPT
  319.       /usr/bin/printf "\$TQA%d%d parent %d:%d handle %d: \$SFQ\n" "$i" "$j" "$guest" "$class" "$class" >> $QOS_SCRIPT
  320.       /usr/bin/printf "\$TFA%d%d parent %d: prio %d protocol ip handle %d fw flowid %d:%d\n" "$i" "$j" "$guest" "$class" "$class" "$guest" "$class" >> $QOS_SCRIPT  # 10
  321.       /usr/bin/printf "\n" >> $QOS_SCRIPT
  322.       /usr/bin/printf "\$TCAU parent 2:1 classid 2:%d htb rate 1kbit ceil %skbit prio %d\n" "$class" "$upc" "$class" >> $QOS_SCRIPT
  323.       /usr/bin/printf "\$TQAU parent 2:%d handle %d: \$SFQ\n" "$class" "$class" >> $QOS_SCRIPT
  324.       /usr/bin/printf "\$TFAU parent 2: prio %d protocol ip handle %d fw flowid 2:%d\n" "$class" "$class" "$class" >> $QOS_SCRIPT  # 13
  325.       let local guest++;  # add guest 3: ~ 12: (9 guestnetwork)
  326.     fi
  327.    
  328.     let local N++
  329.     local rule=$(/bin/echo ${g} | /usr/bin/cut -f${N} -d'<')
  330.   done
  331.  
  332.   /usr/bin/printf ";;\n" >> $QOS_SCRIPT
  333.   /usr/bin/printf "stop)\n" >> $QOS_SCRIPT
  334.   /usr/bin/printf "/usr/sbin/tc qdisc del dev \$WAN root 2>/dev/null\n" >> $QOS_SCRIPT
  335.   /usr/bin/printf "/usr/sbin/tc qdisc del dev \$WAN ingress 2>/dev/null\n" >> $QOS_SCRIPT
  336.   /usr/bin/printf "/usr/sbin/tc qdisc del dev br0 root 2>/dev/null\n" >> $QOS_SCRIPT
  337.   /usr/bin/printf "/usr/sbin/tc qdisc del dev br0 ingress 2>/dev/null\n" >> $QOS_SCRIPT
  338.   /usr/bin/printf ";;\n" >> $QOS_SCRIPT
  339.   /usr/bin/printf "*)\n" >> $QOS_SCRIPT
  340.   /usr/bin/printf "/usr/sbin/tc -s -d class ls dev \$WAN\n" >> $QOS_SCRIPT
  341.   /usr/bin/printf "/usr/sbin/tc -s -d class ls dev br0\n" >> $QOS_SCRIPT
  342.   /usr/bin/printf "esac\n" >> $QOS_SCRIPT
  343.   /bin/chmod 0700 $QOS_SCRIPT
  344.   $QOS_SCRIPT start
  345. }
  346.  
  347. add_iQosRules()
  348. {
  349.   local status=0
  350.   if [ "$pcWANIF" == "" ] || [ $qos_enable != 1 ] || [ $qos_type == 1 ]; then
  351.     return -1
  352.   fi
  353.  
  354.   if [ $qos_enable == 1 ] && [ $qos_type == 0 ]; then
  355.     /bin/echo "TODO: add_qos_rules"; status=-1
  356.   elif [ $qos_enable == 1 ] && [ $qos_type == 2 ]; then
  357.     add_bandwidth_limiter_rules; status=$?
  358.   fi
  359.  
  360.   if [ $status -lt 0 ]; then
  361.     /bin/echo "add_iQosRules() returned $status"
  362.   fi
  363.  
  364.   return $status
  365. }
  366.  
  367. start_iQos()
  368. {
  369.   local status=0
  370.   if [ "$pcWANIF" == "" ] || [ $qos_enable != 1 ] || [ $qos_type == 1 ]; then
  371.     return -1
  372.   fi
  373.  
  374.   if [ $qos_enable == 1 ] && [ $qos_type == 0 ]; then
  375.     /bin/echo "TODO: start_tqos"; status=-1
  376.   elif [ $qos_enable == 1 ] && [ $qos_type == 2 ]; then
  377.     start_bandwidth_limiter; status=$?
  378.   fi
  379.  
  380.   if [ $status -lt 0 ]; then
  381.     /bin/echo "start_iQos() returned $status"
  382.   fi
  383.  
  384.   return $status
  385. }
  386.  
  387. stop_iQos()
  388. {
  389.   $QOS_SCRIPT stop
  390. }
  391.  
  392. ##################################################################################
  393.  
  394. if [ "$action" == "start" ]; then
  395.   add_iQosRules
  396.   start_iQos
  397. elif [ "$action" == "stop" ]; then
  398.   stop_iQos
  399. fi
  400.  
  401. ##################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement