#!/bin/sh /etc/rc.common . /lib/functions.sh include /lib/network START=22 USE_PROCD=1 checkptm() { local retur local ptmprio=$1 local dslat=$2 if [ "$ptmprio" -eq 2 ]; then ptmprio="high" else ptmprio="low" fi retur=$(xtmctl operate conn --show | awk -v dslat="$dslat" -v ptmprio="$ptmprio" '{if ($2 == dslat && $3 == ptmprio ) print $2 }') case $retur in ''|*[!0-9]*) return 0 ;; *) return $retur ;; esac } ptm_inf_conf() { local ret local ptmprio local dslat local ifname local bridge config_get ptmprio $1 ptmprio config_get dslat $1 dslat config_get ifname $1 ifname config_get baseifname $1 baseifname config_get bridge $1 bridge ifname="${ifname:-$baseifname.1}" checkptm $ptmprio $dslat ret=$? if [ "$ret" -eq 0 ]; then xtmctl operate conn --add $dslat.$ptmprio 0 1 xtmctl operate conn --addq $dslat.$ptmprio 0 wrr 1 -1 -1 3000 # low priority queue xtmctl operate conn --addq $dslat.$ptmprio 1 wrr 1 -1 -1 3000 # mid priority queue upstream ACK's and ping from LAN will use this queue xtmctl operate conn --addq $dslat.$ptmprio 7 wrr 1 -1 -1 3000 # high priority queue, internal traffic dhcp igmp dns and icmp xtmctl operate conn --createnetdev $dslat.$ptmprio ${ifname%%.*} xtmctl operate intf --state 1 enable xtmctl start brcm_virtual_interface_rules "$baseifname" "$ifname" "$bridge" fi } remove_netdevices() { local delptm local x=0 IFS=$'\n' for i in `xtmctl operate conn --show | grep "PTM\|mode"` do if [ $x -eq 1 ]; then delptm=$(echo $i | awk '{if ($1!="ATM") print $2"."$10}') echo "xtmctl operate conn --delete $delptm" xtmctl operate conn --delete $delptm xtmctl operate conn --deletenetdev $delptm fi x=1 done unset IFS } start_service() { local vdslstatus echo "Starting VDSL" config_load layer2_interface config_get vdslstatus vdsl device if [ "$vdslstatus" == "up" ]; then xtmctl start config_load layer2_interface_vdsl config_foreach ptm_inf_conf vdsl_interface fi } stop_service() { echo "Stopping VDSL" # bug in broadcom stop casues IRQ issue # xtmctl stop remove_netdevices } reload_service() { stop start } service_triggers() { procd_add_reload_trigger layer2_interface_vdsl }