#!/bin/sh /etc/rc.common # Copyright (c) 2018, The Linux Foundation. All rights reserved. # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # START=16 #!/bin/sh ruletype="ip4 ip6" side="wan lan" qwan="1 3 2 0 5 7 6 4" qlan="0 1 2 3 4 5 6 7" board="" if [ -e /lib/ipq806x.sh ];then . /lib/ipq806x.sh board=$(ipq806x_board_name) fi function create_war_acl_rules(){ for lw in $side do #echo $lw if [ "$lw" == "wan" ];then listid=254 queue=$qwan case "$board" in dlan2-2400-ac) portmap=0x10 ;; *) portmap=0x20 ;; esac else listid=255 queue=$qlan case "$board" in dlan2-2400-ac) portmap=0x28 ;; *) portmap=0x1e ;; esac fi #echo $queue #echo "creating list $listid" ssdk_sh acl list create $listid 255 ruleid=0 for rt in $ruletype do for qid in $queue do cmd="ssdk_sh acl rule add $listid $ruleid 1 n 0 0" #echo $cmd if [ "$rt" == "ip4" ];then cmd="$cmd ip4 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" #echo $cmd else cmd="$cmd ip6 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n" #echo $cmd fi if [ $ruleid -le 3 ];then #non-zero dscp cmd="$cmd y 0x0 0xff" elif [ $ruleid -le 7 ];then #zero dscp cmd="$cmd n" elif [ $ruleid -le 11 ];then #non-zero dscp cmd="$cmd y 0x0 0xff" else #zero dscp cmd="$cmd n" fi p=$((ruleid/2)) cmd="$cmd y mask $((ruleid%2)) 0x1 y mask $((p%2)) 0x1 n n n n n n n n n n n n n n n y n n n n n n n y $qid n n 0 0 n n n n n n n n n n n n n n n n n n n n" #echo $cmd $cmd ruleid=`expr $ruleid + 1` done done ssdk_sh acl list bind $listid 0 1 $portmap done } function create_war_cosmap(){ ssdk_sh cosmap pri2q set 0 0 ssdk_sh cosmap pri2q set 1 0 ssdk_sh cosmap pri2q set 2 0 ssdk_sh cosmap pri2q set 3 0 ssdk_sh cosmap pri2q set 4 1 ssdk_sh cosmap pri2q set 5 1 ssdk_sh cosmap pri2q set 6 1 ssdk_sh cosmap pri2q set 7 1 ssdk_sh cosmap pri2ehq set 0 0 ssdk_sh cosmap pri2ehq set 1 0 ssdk_sh cosmap pri2ehq set 2 0 ssdk_sh cosmap pri2ehq set 3 0 ssdk_sh cosmap pri2ehq set 4 1 ssdk_sh cosmap pri2ehq set 5 1 ssdk_sh cosmap pri2ehq set 6 1 ssdk_sh cosmap pri2ehq set 7 1 } function delete_war_acl_rules(){ for lw in $side do #echo $lw if [ "$lw" == "wan" ];then listid=254 queue=$qwan portmap=0x20 else listid=255 queue=$qlan portmap=0x1e fi ssdk_sh acl list unbind $listid 0 1 $portmap for rt in $ruletype do for qid in $queue do cmd="ssdk_sh acl rule del $listid 0 1" echo $cmd $cmd done done #echo "deleting list $listid" ssdk_sh acl list destroy $listid done } function delete_war_cosmap(){ ssdk_sh cosmap pri2q set 0 0 ssdk_sh cosmap pri2q set 1 0 ssdk_sh cosmap pri2q set 2 1 ssdk_sh cosmap pri2q set 3 1 ssdk_sh cosmap pri2q set 4 2 ssdk_sh cosmap pri2q set 5 2 ssdk_sh cosmap pri2q set 6 3 ssdk_sh cosmap pri2q set 7 3 ssdk_sh cosmap pri2ehq set 0 1 ssdk_sh cosmap pri2ehq set 1 0 ssdk_sh cosmap pri2ehq set 2 2 ssdk_sh cosmap pri2ehq set 3 2 ssdk_sh cosmap pri2ehq set 4 3 ssdk_sh cosmap pri2ehq set 5 3 ssdk_sh cosmap pri2ehq set 6 4 ssdk_sh cosmap pri2ehq set 7 5 } start() { #The following commands should be uncommented to enable EDMA WAR case "$board" in dlan2-2400-ac) create_war_cosmap ssdk_sh acl status set enable create_war_acl_rules ;; esac } stop() { #The following commands should be uncommented to disable EDMA WAR case "$board" in dlan2-2400-ac) delete_war_acl_rules delete_war_cosmap ;; esac }