mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
313 lines
7.5 KiB
Bash
313 lines
7.5 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
|
|
# ATM #
|
|
check_pvc() {
|
|
local vpi=$1
|
|
local vci=$2
|
|
local ret
|
|
|
|
ret=$(xtmctl operate conn --show | awk -v test="$vpi/$vci" '{if ($3==test ) print $5 }')
|
|
|
|
case $ret in
|
|
''|*[!0-9]*) return 0 ;;
|
|
*) return $ret ;;
|
|
esac
|
|
}
|
|
|
|
check_xtm_list() {
|
|
local qclass=$1
|
|
local pcr scr mbs
|
|
local ret
|
|
|
|
case $# in
|
|
1)
|
|
pcr=0
|
|
scr=0
|
|
mbs=0
|
|
;;
|
|
2)
|
|
pcr=$2
|
|
scr=0
|
|
mbs=0
|
|
;;
|
|
4)
|
|
pcr=$2
|
|
scr=$3
|
|
mbs=$4
|
|
;;
|
|
esac
|
|
|
|
ret=$(xtmctl operate tdte --show | awk -v test="$qclass" -v pcr="$pcr" -v scr="$scr" -v mbs="$mbs" '{if ($2==test && $3==pcr && $4==scr && $5==mbs ) print $1 }')
|
|
|
|
case $ret in
|
|
''|*[!0-9]*) return 0 ;;
|
|
*) return $ret ;;
|
|
esac
|
|
}
|
|
|
|
configure_atm_device() {
|
|
local name vpi vci device link_type encapsulation qos_class pcr mbs scr i
|
|
|
|
config_get name $1 name "ATM"
|
|
config_get vpi $1 vpi "8"
|
|
config_get vci $1 vci "35"
|
|
config_get device $1 device "atm0"
|
|
config_get link_type $1 link_type "eoa"
|
|
config_get encapsulation $1 encapsulation "llc"
|
|
config_get qos_class $1 qos_class "ubr"
|
|
config_get pcr $1 pcr
|
|
config_get mbs $1 mbs
|
|
config_get scr $1 scr
|
|
|
|
check_pvc $vpi $vci
|
|
ret=$?
|
|
|
|
if [ "$ret" -eq 0 ]; then
|
|
check_xtm_list $qos_class $pcr $scr $mbs
|
|
ret=$?
|
|
|
|
if [ "$ret" -eq 0 ]; then
|
|
case $qos_class in # ubr, cbr, gfr, vbr-nrt, vbr-rt, ubr+, abr
|
|
ubr)
|
|
xtmctl operate tdte --add "$qos_class"
|
|
;;
|
|
ubr_pcr|ubr+)
|
|
xtmctl operate tdte --add "$qos_class" $pcr
|
|
;;
|
|
cbr)
|
|
xtmctl operate tdte --add "$qos_class" $pcr
|
|
;;
|
|
nrtvbr|vbr-nrt)
|
|
xtmctl operate tdte --add "$qos_class" $pcr $scr $mbs
|
|
;;
|
|
rtvbr|vbr-rt)
|
|
xtmctl operate tdte --add "$qos_class" $pcr $scr $mbs
|
|
;;
|
|
gfr)
|
|
;;
|
|
abr)
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case $link_type in # EoA, IPoA, PPPoA, CIP
|
|
EoA|eoa)
|
|
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_eth" || encapsulation="llcsnap_eth"
|
|
;;
|
|
PPPoA|pppoa)
|
|
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_pppoa" || encapsulation="llcencaps_ppp"
|
|
;;
|
|
IPoA|ipoa)
|
|
[ $encapsulation == "vcmux" ] && encapsulation="vcmux_ipoa" || encapsulation="llcsnap_rtip"
|
|
;;
|
|
CIP|cip)
|
|
;;
|
|
esac
|
|
|
|
check_xtm_list $qos_class $pcr $scr $mbs
|
|
ret="$?"
|
|
|
|
xtmctl operate conn --add 1.$vpi.$vci aal5 $encapsulation 0 1 $ret
|
|
for i in `seq 0 7`; do
|
|
xtmctl operate conn --addq 1.$vpi.$vci $i wrr 1 dt # queue priority 0-7
|
|
done
|
|
xtmctl operate conn --createnetdev 1.$vpi.$vci $device
|
|
xtmctl operate intf --state 1 enable
|
|
fi
|
|
}
|
|
|
|
remove_atm_devices() {
|
|
local vpi vci rest
|
|
local vpivci=`xtmctl operate conn --show | grep "ATM\|mode" | awk '{if (NR!=1 && $1!="PTM") {print $3}}'`
|
|
|
|
for i in $vpivci
|
|
do
|
|
rest=${i#\/}
|
|
vpi=${rest%%\/*}
|
|
vci=${rest#*\/}
|
|
echo "xtmctl operate conn --delete 1.$vpi.$vci"
|
|
xtmctl operate conn --delete 1.$vpi.$vci
|
|
echo "xtmctl operate conn --deletenetdev 1.$vpi.$vci"
|
|
xtmctl operate conn --deletenetdev 1.$vpi.$vci
|
|
done
|
|
}
|
|
|
|
create_atm_devices() {
|
|
echo "Creating ATM Device(s)"
|
|
config_load dsl
|
|
config_foreach configure_atm_device atm-device
|
|
}
|
|
# ATM END #
|
|
|
|
# PTM #
|
|
check_ptm() {
|
|
local ret
|
|
local ptmprio=$1
|
|
local dslat=$2
|
|
|
|
if [ "$ptmprio" -eq 2 ]; then
|
|
ptmprio="high"
|
|
else
|
|
ptmprio="low"
|
|
fi
|
|
|
|
ret=$(xtmctl operate conn --show | awk -v dslat="$dslat" -v ptmprio="$ptmprio" '{if ($2 == dslat && $3 == ptmprio ) print $2 }')
|
|
|
|
case $ret in
|
|
''|*[!0-9]*) return 0 ;;
|
|
*) return $ret ;;
|
|
esac
|
|
}
|
|
|
|
configure_ptm_device() {
|
|
local name device priority portid i
|
|
|
|
config_get name $1 name "PTM"
|
|
config_get device $1 device "ptm0"
|
|
config_get priority $1 priority 1
|
|
config_get portid $1 portid 1
|
|
|
|
check_ptm $priority $portid
|
|
ret=$?
|
|
|
|
if [ "$ret" -eq 0 ]; then
|
|
xtmctl operate conn --add $portid.$priority
|
|
|
|
for i in `seq 0 7`; do
|
|
xtmctl operate conn --addq $portid.$priority $i wrr 1 dt -1 -1 3000 # queue priority 0-7
|
|
done
|
|
echo "xtmctl operate conn --createnetdev $portid.$priority $device"
|
|
xtmctl operate conn --createnetdev $portid.$priority $device
|
|
xtmctl operate intf --state 1 enable
|
|
fi
|
|
}
|
|
|
|
remove_ptm_devices() {
|
|
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"."$11}')
|
|
echo "xtmctl operate conn --delete $delptm"
|
|
xtmctl operate conn --delete $delptm
|
|
xtmctl operate conn --deletenetdev $delptm
|
|
fi
|
|
x=1
|
|
done
|
|
unset IFS
|
|
}
|
|
|
|
create_ptm_devices() {
|
|
echo "Creating PTM Device(s)"
|
|
config_load dsl
|
|
config_foreach configure_ptm_device ptm-device
|
|
}
|
|
# PTM END #
|
|
|
|
prioritize_arp()
|
|
{
|
|
ebtables -t nat -D POSTROUTING -j mark --mark-or 0x7 -p ARP >/dev/null
|
|
ebtables -t nat -A POSTROUTING -j mark --mark-or 0x7 -p ARP >/dev/null
|
|
}
|
|
|
|
xtm_remove_devices() {
|
|
remove_atm_devices
|
|
remove_ptm_devices
|
|
}
|
|
|
|
xtm_create_devices() {
|
|
local tpstc="$(xdslctl info --show | grep TPS-TC)"
|
|
if echo "$tpstc" | grep -q "ATM Mode"; then
|
|
create_atm_devices
|
|
elif echo "$tpstc" | grep -q "PTM Mode"; then
|
|
create_ptm_devices
|
|
fi
|
|
}
|
|
|
|
xdsl_configure() {
|
|
local VDSL=0
|
|
local GFAST=0
|
|
local mod=""
|
|
local modes=""
|
|
local profile=""
|
|
|
|
config_load dsl
|
|
|
|
# Modes
|
|
config_get mode line mode
|
|
for mod in $mode; do
|
|
[ $mod == "gdmt" ] && modes="${modes}d"
|
|
[ $mod == "glite" ] && modes="${modes}l"
|
|
[ $mod == "t1413" ] && modes="${modes}t"
|
|
[ $mod == "adsl2" ] && modes="${modes}2"
|
|
[ $mod == "adsl2p" ] && modes="${modes}p"
|
|
[ $mod == "annexl" ] && modes="${modes}e"
|
|
[ $mod == "annexm" ] && modes="${modes}m"
|
|
[ $mod == "vdsl2" ] && modes="${modes}v" && VDSL=1
|
|
[ $mod == "gfast" ] && modes="${modes}f" && GFAST=1
|
|
done
|
|
|
|
# VDSL Profiles
|
|
config_get profile line profile
|
|
# Capabilities
|
|
config_get_bool bitswap line bitswap 1
|
|
[ $bitswap -eq 1 ] && bitswap="on" || bitswap="off"
|
|
config_get_bool sra line sra 1
|
|
[ $sra -eq 1 ] && sra="on" || sra="off"
|
|
# config_get_bool trellis line trellis 1
|
|
config_get_bool sesdrop line sesdrop 0
|
|
[ $sesdrop -eq 1 ] && sesdrop="on" || sesdrop="off"
|
|
# VDSL2 only
|
|
config_get_bool us0 line us0 1
|
|
[ $us0 -eq 1 ] && us0="on" || us0="off"
|
|
# config_get_bool dynamicd line dynamicd 1
|
|
# config_get_bool dynamicf line dynamicf 1
|
|
config_get_bool sos line sos 0
|
|
[ $sos -eq 1 ] && sos="on" || sos="off"
|
|
|
|
config_get_bool phyReXmtUs line phyReXmtUs 0
|
|
config_get_bool phyReXmtDs line phyReXmtDs 1
|
|
phyReXmt=$(( $((phyReXmtUs<<1)) + phyReXmtDs))
|
|
|
|
if [ $VDSL -eq 1 -o $GFAST -eq 1 ]; then
|
|
echo "xdslctl start --up --mod $modes --profile "$profile" --sra $sra --bitswap $bitswap --us0 $us0 --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt"
|
|
xdslctl start --up --mod $modes --profile "$profile" --sra $sra --bitswap $bitswap --us0 $us0 --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt
|
|
# G.Fast hardware to VDSL hardware, to set the driver bit kPhyCfg2EnableGfastVdslMMTimeOut0.
|
|
# Enable V43 tone for GFAST.
|
|
echo "xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400"
|
|
xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400
|
|
else
|
|
echo "xdslctl start --up --mod $modes --sra $sra --bitswap $bitswap --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt"
|
|
xdslctl start --up --mod $modes --sra $sra --bitswap $bitswap --sesdrop $sesdrop --SOS $sos --phyReXmt $phyReXmt
|
|
fi
|
|
|
|
if [ $GFAST -eq 1 ]; then
|
|
# G.Fast hardware to VDSL hardware, to set the driver bit kPhyCfg2EnableGfastVdslMMTimeOut0.
|
|
# Enable V43 tone for GFAST.
|
|
echo "xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400"
|
|
xdslctl configure1 --phycfg 0 0 0 0 0 0 0 0 0 0 0 0x1400400 0x1400400
|
|
fi
|
|
}
|
|
|
|
xdsl_stop() {
|
|
# echo "Stopping DSL"
|
|
# stop causes IRQ issues
|
|
# xdslctl stop
|
|
return 0
|
|
}
|
|
|
|
xdsl_init() {
|
|
[ -d /sys/class/net/dsl0/ ] || exit
|
|
|
|
prioritize_arp
|
|
|
|
echo "Starting DSL"
|
|
|
|
xtmctl start
|
|
xtmctl operate intf --state 1 enable
|
|
}
|