mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
d0397abd9d
This tells the modem about the WAN MAC address, which is used as source
address for vectoring error reports that are generated by the firmware.
It needs to be set early, as the MEI driver only actually writes the
value to the modem when is in reset state (i.e. the firmware has been
loaded, but connection has not started yet).
Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Jan Hoffmann <jan@3e8.eu>
(cherry picked from commit b35d33c8b8
)
323 lines
7.1 KiB
Bash
323 lines
7.1 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2012 OpenWrt.org
|
|
|
|
START=97
|
|
USE_PROCD=1
|
|
|
|
dslstat() {
|
|
ubus call dsl metrics
|
|
}
|
|
|
|
extra_command "dslstat" "Get DSL status information"
|
|
|
|
#
|
|
# ITU-T G.997.1 (06/2012) - Section 7.3.1.1.1 (xTU transmission system enabling (XTSE))
|
|
# ITU-T G.997.1 Amendment 2 (04/2013) - Section 2.1 - (Vectoring mode enable (VECTORMODE_ENABLE))
|
|
#
|
|
# G.992.1 Annex A
|
|
# G.992.2 Annex A
|
|
# G.992.3 Annex A / L-US1 / L_US-2 / M
|
|
# G.992.5 Annex A / M
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_a="05_01_04_00_4C_01_04_07"
|
|
|
|
# G.992.1 Annex B
|
|
# G.992.3 Annex B
|
|
# G.992.5 Annex B
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_b="10_00_10_00_00_04_00_07"
|
|
|
|
# G.992.1 Annex B
|
|
# G.992.3 Annex B
|
|
# G.992.3 Annex J
|
|
# G.992.5 Annex B
|
|
# G.992.5 Annex J
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_j="10_00_10_40_00_04_01_07"
|
|
|
|
# G.992.1 Annex B
|
|
xtse_xdsl_bdmt="10_00_00_00_00_00_00_00"
|
|
|
|
# G.992.3 Annex B
|
|
xtse_xdsl_b2="00_00_10_00_00_00_00_00"
|
|
|
|
# G.992.5 Annex B
|
|
xtse_xdsl_b2p="00_00_00_00_00_04_00_00"
|
|
|
|
# ANSI T1.413
|
|
xtse_xdsl_at1="01_00_00_00_00_00_00_00"
|
|
|
|
# G.992.2 Annex A
|
|
xtse_xdsl_alite="00_01_00_00_00_00_00_00"
|
|
|
|
# G.992.1 Annex A
|
|
xtse_xdsl_admt="04_00_00_00_00_00_00_00"
|
|
|
|
# G.992.3 Annex A
|
|
xtse_xdsl_a2="00_00_04_00_00_00_00_00"
|
|
|
|
# G.992.5 Annex A
|
|
xtse_xdsl_a2p="00_00_00_00_00_01_00_00"
|
|
|
|
# G.992.3 Annex L
|
|
xtse_xdsl_l="00_00_00_00_0C_00_00_00"
|
|
|
|
# G.992.3 Annex M
|
|
# G.992.5 Annex M
|
|
xtse_xdsl_m="00_00_00_00_40_00_04_00"
|
|
|
|
# G.992.3 Annex M
|
|
xtse_xdsl_m2="00_00_00_00_40_00_00_00"
|
|
|
|
# G.992.5 Annex M
|
|
xtse_xdsl_m2p="00_00_00_00_00_00_04_00"
|
|
|
|
#
|
|
# ITU-T G.994.1 (06/2012) - Table 2 (Mandatory carrier sets)
|
|
#
|
|
|
|
# A43
|
|
tone_adsl_a="0x142" # A43C + J43 + A43
|
|
tone_vdsl_a="0x142" # A43C + J43 + A43
|
|
|
|
# A43 + V43
|
|
tone_adsl_av="0x142" # A43C + J43 + A43
|
|
tone_vdsl_av="0x146" # A43C + J43 + A43 + V43
|
|
|
|
# B43
|
|
tone_adsl_b="0x81" # B43 + B43c
|
|
tone_vdsl_b="0x1" # B43
|
|
|
|
# B43 + V43
|
|
tone_adsl_bv="0x81" # B43 + B43c
|
|
tone_vdsl_bv="0x5" # B43 + V43
|
|
|
|
# create DSL autoboot script. Used for SNR margin tweak and to set MAC address for vectoring error reports
|
|
autoboot_script() {
|
|
echo "[WaitForConfiguration]={
|
|
locs 0 $1
|
|
dsmmcs $2
|
|
}
|
|
|
|
[WaitForLinkActivate]={
|
|
}
|
|
|
|
[WaitForRestart]={
|
|
}
|
|
|
|
[Common]={
|
|
}" > /tmp/dsl.scr
|
|
}
|
|
|
|
lowlevel_cfg() {
|
|
echo "# VRX Low Level Configuration File
|
|
#
|
|
# Parameters must be separated by tabs or spaces.
|
|
# Empty lines and comments will be ignored.
|
|
#
|
|
|
|
# nFilter
|
|
#
|
|
# NA = -1
|
|
# OFF = 0
|
|
# ISDN = 1
|
|
# POTS = 2
|
|
# POTS_2 = 3
|
|
# POTS_3 = 4
|
|
#
|
|
# (dec)
|
|
-1
|
|
|
|
# nHsToneGroupMode nHsToneGroup_A nHsToneGroup_V nHsToneGroup_AV
|
|
#
|
|
# NA = -1 NA = -1 see see
|
|
# AUTO = 0 VDSL2_B43 = 0x0001 nHsToneGroup_A nHsToneGroup_A
|
|
# MANUAL = 1 VDSL2_A43 = 0x0002
|
|
# VDSL2_V43 = 0x0004
|
|
# VDSL1_V43P = 0x0008
|
|
# VDSL1_V43I = 0x0010
|
|
# ADSL1_C43 = 0x0020
|
|
# ADSL2_J43 = 0x0040
|
|
# ADSL2_B43C = 0x0080
|
|
# ADSL2_A43C = 0x0100
|
|
#
|
|
# (dec) (hex) (hex) (hex)
|
|
1 $1 $2 0x0
|
|
|
|
# nBaseAddr nIrqNum
|
|
#
|
|
# (hex) (dec)
|
|
0x1e116000 63
|
|
|
|
# nUtopiaPhyAdr nUtopiaBusWidth nPosPhyParity
|
|
# default(16b) = 0 NA = -1
|
|
# 8-bit = 1 ODD = 0
|
|
# 16-bit = 2
|
|
#
|
|
#
|
|
# (hex) (dec) (dec)
|
|
0xFF 0 0
|
|
|
|
# bNtrEnable
|
|
#
|
|
# (dec)
|
|
0" > /tmp/lowlevel.cfg
|
|
}
|
|
|
|
get_macaddr() {
|
|
local name
|
|
config_get name $1 name
|
|
[ "$name" = "dsl0" ] && config_get $2 $1 macaddr
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger network
|
|
}
|
|
|
|
start_service() {
|
|
local annex
|
|
local firmware
|
|
local tone
|
|
local tone_adsl
|
|
local tone_vdsl
|
|
local xtse
|
|
local xfer_mode
|
|
local line_mode
|
|
local tc_layer
|
|
local mode
|
|
local lowlevel
|
|
local snr
|
|
local macaddr
|
|
|
|
config_load network
|
|
config_get tone dsl tone
|
|
config_get annex dsl annex
|
|
config_get firmware dsl firmware
|
|
config_get xfer_mode dsl xfer_mode
|
|
config_get line_mode dsl line_mode
|
|
config_get snr dsl ds_snr_offset
|
|
config_foreach get_macaddr device macaddr
|
|
|
|
eval "xtse=\"\${xtse_xdsl_$annex}\""
|
|
|
|
case "${xfer_mode}" in
|
|
atm)
|
|
tc_layer="-T1:0x1:0x1_1:0x1:0x1"
|
|
;;
|
|
ptm)
|
|
tc_layer="-T2:0x1:0x1_2:0x1:0x1"
|
|
;;
|
|
esac
|
|
|
|
case "${line_mode}" in
|
|
adsl)
|
|
mode="-M1"
|
|
|
|
# mask out VDSL bits when ADSL is requested
|
|
xtse="${xtse%_*}_00"
|
|
;;
|
|
vdsl)
|
|
mode="-M2"
|
|
|
|
# mask out ADSL bits when VDSL is requested
|
|
xtse="00_00_00_00_00_00_00_${xtse##*_}"
|
|
;;
|
|
esac
|
|
|
|
local annexgpio="/sys/class/gpio/annex"
|
|
if [ -d "${annexgpio}a" ] && [ -d "${annexgpio}b" ]; then
|
|
case "${annex}" in
|
|
a*|l*|m*)
|
|
echo 1 > "${annexgpio}a/value"
|
|
echo 0 > "${annexgpio}b/value"
|
|
;;
|
|
b*|j*)
|
|
echo 0 > "${annexgpio}a/value"
|
|
echo 1 > "${annexgpio}b/value"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ -z "${firmware}" ]; then
|
|
# search for the firmware provided by dsl-vrx200-firmware-xdsl-*
|
|
if grep -qE "system type.*: (VR9|xRX200)" /proc/cpuinfo; then
|
|
case "${annex}" in
|
|
a*|l*|m*)
|
|
if [ -f "/lib/firmware/lantiq-vrx200-a.bin" ]; then
|
|
firmware="/lib/firmware/lantiq-vrx200-a.bin"
|
|
elif [ -f "/tmp/lantiq-vrx200-a.bin" ]; then
|
|
firmware="/tmp/lantiq-vrx200-a.bin"
|
|
elif [ -f "/lib/firmware/lantiq-vrx200-b.bin" ] && [ -f "/lib/firmware/lantiq-vrx200-b-to-a.bspatch" ]; then
|
|
bspatch /lib/firmware/lantiq-vrx200-b.bin \
|
|
/tmp/lantiq-vrx200-a.bin \
|
|
/lib/firmware/lantiq-vrx200-b-to-a.bspatch
|
|
firmware="/tmp/lantiq-vrx200-a.bin"
|
|
else
|
|
echo "firmware for annex a not found"
|
|
return 1
|
|
fi
|
|
;;
|
|
b*|j*)
|
|
if [ -f "/lib/firmware/vr9_dsl_fw_annex_b.bin" ]; then
|
|
firmware="/lib/firmware/vr9_dsl_fw_annex_b.bin"
|
|
elif [ -f "/lib/firmware/lantiq-vrx200-b.bin" ]; then
|
|
firmware="/lib/firmware/lantiq-vrx200-b.bin"
|
|
elif [ -f "/tmp/lantiq-vrx200-b.bin" ]; then
|
|
firmware="/tmp/lantiq-vrx200-b.bin"
|
|
elif [ -f "/lib/firmware/lantiq-vrx200-a.bin" ] && [ -f "/lib/firmware/lantiq-vrx200-a-to-b.bspatch" ]; then
|
|
bspatch /lib/firmware/lantiq-vrx200-a.bin \
|
|
/tmp/lantiq-vrx200-b.bin \
|
|
/lib/firmware/lantiq-vrx200-a-to-b.bspatch
|
|
firmware="/tmp/lantiq-vrx200-b.bin"
|
|
else
|
|
echo "firmware for annex b not found"
|
|
return 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "annex type not supported use a or b"
|
|
return 1
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
[ -z "${firmware}" ] && firmware=/lib/firmware/vdsl.bin
|
|
[ -f "${firmware}" ] || {
|
|
echo failed to find $firmware
|
|
return 1
|
|
}
|
|
|
|
eval "tone_adsl=\"\${tone_adsl_$tone}\""
|
|
eval "tone_vdsl=\"\${tone_vdsl_$tone}\""
|
|
[ -n "${tone_adsl}" ] && [ -n "${tone_vdsl}" ] && {
|
|
lowlevel_cfg "${tone_adsl}" "${tone_vdsl}"
|
|
lowlevel="-l /tmp/lowlevel.cfg"
|
|
}
|
|
|
|
[ -z "${snr}" ] && snr=0
|
|
[ -z "${macaddr}" ] && macaddr="00:00:00:00:00:00"
|
|
autoboot_script "$snr" "$macaddr"
|
|
autoboot="-a /tmp/dsl.scr -A /tmp/dsl.scr"
|
|
|
|
procd_open_instance
|
|
procd_set_param command /sbin/vdsl_cpe_control \
|
|
-i$xtse \
|
|
-n /sbin/dsl_notify.sh \
|
|
-f ${firmware} \
|
|
$lowlevel \
|
|
${mode} \
|
|
${tc_layer} \
|
|
$autoboot
|
|
procd_close_instance
|
|
}
|
|
|
|
stop_service() {
|
|
DSL_NOTIFICATION_TYPE="DSL_INTERFACE_STATUS" \
|
|
DSL_INTERFACE_STATUS="DOWN" \
|
|
/sbin/dsl_notify.sh
|
|
}
|