#!/bin/sh /etc/rc.common
# Copyright (C) 2012 OpenWrt.org
-START=99
+# needs to start before the atm layer which starts at 50
+START=48
+USE_PROCD=1
EXTRA_COMMANDS="status lucistat"
EXTRA_HELP=" status Get DSL status information
lucistat Get status information if lua friendly format"
-SERVICE_DAEMONIZE=1
-SERVICE_WRITE_PID=1
+[ -f /lib/functions/lantiq_dsl.sh ] && . /lib/functions/lantiq_dsl.sh
-. /lib/functions/lantiq_dsl.sh
-XDSL_CTRL=vdsl_cpe_control
+# G.992.1 Annex A
+# G.992.2 Annex A
+# G.992.3 Annex A
+# G.992.4 Annex A
+# G.992.5 Annex A
+# G.993.2 Annex A/B/C
+xtse_adsl_a="04 01 04 01 00 01 00 00"
+
+# G.992.1 Annex B
+# G.992.3 Annex B
+# G.992.5 Annex B
+# G.993.2 Annex A/B/C
+xtse_adsl_b="10 00 10 00 00 04 00 00"
+
+# 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
+xtse_adsl_j="10 00 10 40 00 04 01 00"
+
+xtse_vdsl="00 00 00 00 00 00 00 07"
+
+service_triggers() {
+ procd_add_reload_trigger network
+}
+
+start_service() {
+ local annex
+ local firmware
+ local xtse
+ local xtse_adsl
+ local mode
-start() {
- local firmware xtu
-
config_load network
-
- config_get firmware wan firmware
- [ -z "${firmware}" ] &&
- firmware=vdsl.bin
-
- config_get xtu wan xtu
- [ -z "${xtu}" ] &&
- xtu=10_00_10_00_00_04_01_07
-
- service_start /sbin/vdsl_cpe_control \
- -i${xtu} \
- -T4_0_1
- -n /sbin/dsl_notify.sh \
- -f /lib/firmware/${firmware}
+ config_get annex dsl annex
+ config_get firmware dsl firmware
+ config_get xfer_mode dsl xfer_mode
+
+ [ -z "${xfer_mode}" ] && xfer_mode=ptm
+
+ case "${xfer_mode}" in
+ atm)
+ LOAD=ltq_atm_vr9
+ UNLOAD=ltq_ptm_vr9
+ mode=1
+ ;;
+ *)
+ LOAD=ltq_ptm_vr9
+ UNLOAD=ltq_atm_vr9
+ mode=2
+ ;;
+ esac
+
+ eval "xtse_adsl=\"\${xtse_adsl_$annex}\""
+ if [ "${xtse_adsl}" ]; then
+ xtse=$xtse_adsl
+ else
+ xtse=$xtse_vdsl
+ fi
+
+ [ -z "${firmware}" ] && firmware=/lib/firmware/vdsl.bin
+ [ -f "${firmware}" ] || {
+ echo failed to find $firmware
+ return 1
+ }
+
+ procd_open_instance
+ procd_set_param command /sbin/vdsl_cpe_control_wrapper \
+ -i `echo $xtse | sed "s/ /_/g"` \
+ -n /sbin/dsl_notify.sh \
+ -f ${firmware} \
+ -M ${mode}
+ procd_append_param env "LOAD=$LOAD" "UNLOAD=$UNLOAD"
+ procd_close_instance
}
-stop() {
+stop_service() {
DSL_NOTIFICATION_TYPE="DSL_INTERFACE_STATUS" \
DSL_INTERFACE_STATUS="DOWN" \
/sbin/dsl_notify.sh
-
- service_stop /sbin/vdsl_cpe_control
}