lantiq: fix dsl_control status handling.
[openwrt/openwrt.git] / target / linux / lantiq / base-files / lib / functions / lantiq_dsl.sh
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2012-2014 OpenWrt.org
3
4 if [ "$( which vdsl_cpe_control )" ]; then
5 XDSL_CTRL=vdsl_cpe_control
6 else
7 XDSL_CTRL=dsl_cpe_control
8 fi
9
10 #
11 # Basic functions to send CLI commands to the vdsl_cpe_control daemon
12 #
13 dsl_cmd() {
14 killall -q -0 ${XDSL_CTRL} && (
15 lock /var/lock/dsl_pipe
16 echo "$@" > /tmp/pipe/dsl_cpe0_cmd
17 cat /tmp/pipe/dsl_cpe0_ack
18 lock -u /var/lock/dsl_pipe
19 )
20 }
21 dsl_val() {
22 echo $(expr "$1" : '.*'$2'=\([-\.[:alnum:]]*\).*')
23 }
24 dsl_string() {
25 echo $(expr "$1" : '.*'$2'=(\([A-Z0-9,]*\))')
26 }
27
28 #
29 # Simple divide by 10 routine to cope with one decimal place
30 #
31 dbt() {
32 local a=$(expr $1 / 10)
33 local b=$(expr $1 % 10)
34 echo "${a}.${b#-}"
35 }
36 #
37 # Take a number and convert to k or meg
38 #
39 scale() {
40 local val=$1
41 local a
42 local b
43
44 if [ "$val" -gt 1000000 ]; then
45 a=$(expr $val / 1000)
46 b=$(expr $a % 1000)
47 a=$(expr $a / 1000)
48 printf "%d.%03d Mb" ${a} ${b}
49 elif [ "$val" -gt 1000 ]; then
50 a=$(expr $val / 1000)
51 printf "%d Kb" ${a}
52 else
53 echo "${val} b"
54 fi
55 }
56
57 scale_latency() {
58 local val=$1
59 local a
60 local b
61
62 a=$(expr $val / 100)
63 b=$(expr $val % 100)
64 printf "%d.%d ms" ${a} ${b}
65 }
66
67 scale_latency_us() {
68 local val=$1
69
70 expr $val \* 10
71 }
72
73 #
74 # convert vendorid into human readable form
75 #
76 parse_vendorid() {
77 local val=$1
78 local name
79 local version
80
81 case "$val" in
82 B5,00,41,4C,43,42*)
83 name="Alcatel"
84 version=${val##*B5,00,41,4C,43,42,}
85 ;;
86 B5,00,41,4E,44,56*)
87 name="Analog Devices"
88 version=${val##*B5,00,41,4E,44,56,}
89 ;;
90 B5,00,42,44,43,4D*)
91 name="Broadcom"
92 version=${val##*B5,00,42,44,43,4D,}
93 ;;
94 B5,00,43,45,4E,54*)
95 name="Centillium"
96 version=${val##*B5,00,43,45,4E,54,}
97 ;;
98 B5,00,47,53,50,4E*)
99 name="Globespan"
100 version=${val##*B5,00,47,53,50,4E,}
101 ;;
102 B5,00,49,4B,4E,53*)
103 name="Ikanos"
104 version=${val##*B5,00,49,4B,4E,53,}
105 ;;
106 B5,00,49,46,54,4E*)
107 name="Infineon"
108 version=${val##*B5,00,49,46,54,4E,}
109 ;;
110 B5,00,54,53,54,43*)
111 name="Texas Instruments"
112 version=${val##*B5,00,54,53,54,43,}
113 ;;
114 B5,00,54,4D,4D,42*)
115 name="Thomson MultiMedia Broadband"
116 version=${val##*B5,00,54,4D,4D,42,}
117 ;;
118 B5,00,54,43,54,4E*)
119 name="Trend Chip Technologies"
120 version=${val##*B5,00,54,43,54,4E,}
121 ;;
122 B5,00,53,54,4D,49*)
123 name="ST Micro"
124 version=${val##*B5,00,53,54,4D,49,}
125 ;;
126 esac
127
128 [ -n "$name" ] && {
129 val="$name"
130
131 [ "$version" != "00,00" ] && val="$(printf "%s %d.%d" "$val" 0x${version//,/ 0x})"
132 }
133
134 echo "$val"
135 }
136
137 #
138 # Read the data rates for both directions
139 #
140 data_rates() {
141 local csg
142 local dru
143 local drd
144 local sdru
145 local sdrd
146
147 csg=$(dsl_cmd g997csg 0 1)
148 drd=$(dsl_val "$csg" ActualDataRate)
149
150 csg=$(dsl_cmd g997csg 0 0)
151 dru=$(dsl_val "$csg" ActualDataRate)
152
153 [ -z "$drd" ] && drd=0
154 [ -z "$dru" ] && dru=0
155
156 sdrd=$(scale $drd)
157 sdru=$(scale $dru)
158
159 if [ "$action" = "lucistat" ]; then
160 echo "dsl.data_rate_down=$drd"
161 echo "dsl.data_rate_up=$dru"
162 echo "dsl.data_rate_down_s=\"$sdrd\""
163 echo "dsl.data_rate_up_s=\"$sdru\""
164 else
165 echo "Data Rate: Down: ${sdrd}/s / Up: ${sdru}/s"
166 fi
167 }
168
169 #
170 # Chipset
171 #
172 chipset() {
173 local vig
174 local cs
175
176 vig=$(dsl_cmd vig)
177 cs=$(dsl_val "$vig" DSL_ChipSetType)
178 csfw=$(dsl_val "$vig" DSL_ChipSetFWVersion)
179 csapi=$(dsl_val "$vig" DSL_DriverVersionApi)
180
181 if [ "$action" = "lucistat" ]; then
182 echo "dsl.chipset=\"${cs}\""
183 echo "dsl.firmware_version=\"${csfw}\""
184 echo "dsl.api_version=\"${csapi}\""
185 else
186 echo "Chipset: ${cs}"
187 echo "Firmware Version: ${csfw}"
188 echo "API Version: ${csapi}"
189 fi
190 }
191
192 #
193 # Vendor information
194 #
195 vendor() {
196 local lig
197 local vid
198 local svid
199
200 lig=$(dsl_cmd g997lig 1)
201 vid=$(dsl_string "$lig" G994VendorID)
202 svid=$(dsl_string "$lig" SystemVendorID)
203
204 vid=$(parse_vendorid $vid)
205 svid=$(parse_vendorid $svid)
206
207 if [ "$action" = "lucistat" ]; then
208 echo "dsl.atuc_vendor_id=\"${vid}\""
209 echo "dsl.atuc_system_vendor_id=\"${svid}\""
210 else
211 echo "ATU-C Vendor ID: ${vid}"
212 echo "ATU-C System Vendor ID: ${svid}"
213 fi
214 }
215
216 #
217 # XTSE capabilities
218 #
219 xtse() {
220 local xtusesg
221 local xtse1
222 local xtse2
223 local xtse3
224 local xtse4
225 local xtse5
226 local xtse6
227 local xtse7
228 local xtse8
229
230 local xtse_s=""
231
232 local annex_s=""
233 local line_mode_s=""
234 local vector_s=""
235
236 local dsmsg=""
237 local cmd=""
238
239 xtusesg=$(dsl_cmd g997xtusesg)
240 xtse1=$(dsl_val "$xtusesg" XTSE1)
241 xtse2=$(dsl_val "$xtusesg" XTSE2)
242 xtse3=$(dsl_val "$xtusesg" XTSE3)
243 xtse4=$(dsl_val "$xtusesg" XTSE4)
244 xtse5=$(dsl_val "$xtusesg" XTSE5)
245 xtse6=$(dsl_val "$xtusesg" XTSE6)
246 xtse7=$(dsl_val "$xtusesg" XTSE7)
247 xtse8=$(dsl_val "$xtusesg" XTSE8)
248
249 # Evaluate Annex (according to G.997.1, 7.3.1.1.1)
250 if [ $((xtse1 & 13)) != 0 \
251 -o $((xtse2 & 1)) != 0 \
252 -o $((xtse3 & 12)) != 0 \
253 -o $((xtse4 & 3)) != 0 \
254 -o $((xtse6 & 3)) != 0 \
255 -o $((xtse8 & 1)) != 0 ]; then
256 annex_s=" A,"
257 fi
258
259 if [ $((xtse1 & 48)) != 0 \
260 -o $((xtse2 & 2)) != 0 \
261 -o $((xtse3 & 48)) != 0 \
262 -o $((xtse6 & 12)) != 0 \
263 -o $((xtse8 & 2)) != 0 ]; then
264 annex_s="$annex_s B,"
265 fi
266
267 if [ $((xtse1 & 194)) != 0 \
268 -o $((xtse2 & 12)) != 0 \
269 -o $((xtse8 & 4)) != 0 ]; then
270 annex_s="$annex_s C,"
271 fi
272
273 if [ $((xtse4 & 48)) != 0 \
274 -o $((xtse5 & 3)) != 0 \
275 -o $((xtse6 & 192)) != 0 ]; then
276 annex_s="$annex_s I,"
277 fi
278
279 if [ $((xtse4 & 192)) != 0 \
280 -o $((xtse7 & 3)) != 0 ]; then
281 annex_s="$annex_s J,"
282 fi
283
284 if [ $((xtse5 & 60)) != 0 ]; then
285 annex_s="$annex_s L,"
286 fi
287
288 if [ $((xtse5 & 192)) != 0 \
289 -o $((xtse7 & 12)) != 0 ]; then
290 annex_s="$annex_s M,"
291 fi
292
293 annex_s=${annex_s:1}
294 annex_s=${annex_s%?}
295
296 # Evaluate Line Mode (according to G.997.1, 7.3.1.1.1)
297
298 # Regional standard: ANSI T1.413
299 if [ $((xtse1 & 1)) != 0 ]; then
300 line_mode_s=" T1.413,"
301 fi
302
303 # Regional standard: TS 101 388
304 if [ $((xtse1 & 1)) != 0 ]; then
305 line_mode_s="$line_mode_s TS 101 388,"
306 fi
307
308 if [ $((xtse1 & 252)) != 0 ]; then
309 line_mode_s="$line_mode_s G.992.1 (ADSL),"
310 fi
311
312 if [ $((xtse2 & 15)) != 0 ]; then
313 line_mode_s="$line_mode_s G.992.2 (ADSL lite),"
314 fi
315
316 if [ $((xtse3 & 60)) != 0 \
317 -o $((xtse4 & 240)) != 0 \
318 -o $((xtse5 & 252)) != 0 ]; then
319 line_mode_s="$line_mode_s G.992.3 (ADSL2),"
320 fi
321
322 if [ $((xtse4 & 3)) != 0 \
323 -o $((xtse5 & 3)) != 0 ]; then
324 line_mode_s="$line_mode_s G.992.4 (ADSL2 lite),"
325 fi
326
327 if [ $((xtse6 & 199)) != 0 \
328 -o $((xtse7 & 15)) != 0 ]; then
329 line_mode_s="$line_mode_s G.992.5 (ADSL2+),"
330 fi
331
332 if [ $((xtse8 & 7)) != 0 ]; then
333 dsmsg=$(dsl_cmd dsmsg)
334 vector_s=$(dsl_val "$dsmsg" eVectorStatus)
335
336 case "$vector_s" in
337 "0") line_mode_s="$line_mode_s G.993.2 (VDSL2)," ;;
338 "1") line_mode_s="$line_mode_s G.993.5 (VDSL2 with downstream vectoring)," ;;
339 "2") line_mode_s="$line_mode_s G.993.5 (VDSL2 with down- and upstream vectoring)," ;;
340 *) line_mode_s="$line_mode_s unknown," ;;
341 esac
342 fi
343
344 #!!! PROPRIETARY & INTERMEDIATE USE !!!
345 if [ $((xtse8 & 128)) != 0 ]; then
346 line_mode_s="$line_mode_s G.993.1 (VDSL),"
347 fi
348
349 line_mode_s=${line_mode_s:1}
350 line_mode_s=${line_mode_s%?}
351
352 xtse_s="${xtse1}, ${xtse2}, ${xtse3}, ${xtse4}, ${xtse5}, ${xtse6}, ${xtse7}, ${xtse8}"
353
354 if [ "$action" = "lucistat" ]; then
355 echo "dsl.xtse1=${xtse1:-nil}"
356 echo "dsl.xtse2=${xtse2:-nil}"
357 echo "dsl.xtse3=${xtse3:-nil}"
358 echo "dsl.xtse4=${xtse4:-nil}"
359 echo "dsl.xtse5=${xtse5:-nil}"
360 echo "dsl.xtse6=${xtse6:-nil}"
361 echo "dsl.xtse7=${xtse7:-nil}"
362 echo "dsl.xtse8=${xtse8:-nil}"
363 echo "dsl.xtse_s=\"$xtse_s\""
364 echo "dsl.annex_s=\"${annex_s}\""
365 echo "dsl.line_mode_s=\"${line_mode_s}\""
366 else
367 echo "XTSE Capabilities: ${xtse_s}"
368 echo "Annex: ${annex_s}"
369 echo "Line Mode: ${line_mode_s}"
370 fi
371 }
372
373 #
374 # Power Management Mode
375 #
376 power_mode() {
377 local pmsg=$(dsl_cmd g997pmsg)
378 local pm=$(dsl_val "$pmsg" nPowerManagementStatus);
379 local s;
380
381 case "$pm" in
382 "-1") s="Power management state is not available" ;;
383 "0") s="L0 - Synchronized" ;;
384 "1") s="L1 - Power Down Data transmission (G.992.2)" ;;
385 "2") s="L2 - Power Down Data transmission (G.992.3 and G.992.4)" ;;
386 "3") s="L3 - No power" ;;
387 *) s="unknown" ;;
388 esac
389
390 if [ "$action" = "lucistat" ]; then
391 echo "dsl.power_mode_num=${pm:-nil}"
392 echo "dsl.power_mode_s=\"$s\""
393 else
394 echo "Power Management Mode: $s"
395 fi
396 }
397
398 #
399 # Latency type (interleave delay)
400 #
401 latency_delay() {
402 local csg
403
404 local idu
405 local idu_s;
406 local sidu
407
408 local idd
409 local idd_s;
410 local sidd
411
412 csg=$(dsl_cmd g997csg 0 1)
413 idd=$(dsl_val "$csg" ActualInterleaveDelay)
414
415 csg=$(dsl_cmd g997csg 0 0)
416 idu=$(dsl_val "$csg" ActualInterleaveDelay)
417
418 [ -z "$idd" ] && idd=0
419 [ -z "$idu" ] && idu=0
420
421 if [ "$idd" -gt 100 ]; then
422 idd_s="Interleave"
423 else
424 idd_s="Fast"
425 fi
426
427 if [ "$idu" -gt 100 ]; then
428 idu_s="Interleave"
429 else
430 idu_s="Fast"
431 fi
432
433 sidu=$(scale_latency $idu)
434 sidd=$(scale_latency $idd)
435
436 if [ "$action" = "lucistat" ]; then
437 echo "dsl.latency_down=\"$(scale_latency_us $idd)\""
438 echo "dsl.latency_up=\"$(scale_latency_us $idu)\""
439 echo "dsl.latency_num_down=\"$sidd\""
440 echo "dsl.latency_num_up=\"$sidu\""
441 echo "dsl.latency_s_down=\"$idd_s\""
442 echo "dsl.latency_s_up=\"$idu_s\""
443 else
444 echo "Latency [Interleave Delay]: ${sidd} [${idd_s}] ${sidu} [${idu_s}]"
445 fi
446 }
447
448 #
449 # Errors
450 #
451 errors() {
452 local lsctg
453 local dpctg
454 local fecsf
455 local fecsn
456 local esf
457 local esn
458 local sesf
459 local sesn
460 local lossf
461 local lossn
462 local uasf
463 local uasn
464
465 local crc_pf
466 local crc_pn
467 local crcp_pf
468 local crcp_pn
469 local hecf
470 local hecn
471
472 lsctg=$(dsl_cmd pmlsctg 1)
473 fecsf=$(dsl_val "$lsctg" nFECS)
474 esf=$(dsl_val "$lsctg" nES)
475 sesf=$(dsl_val "$lsctg" nSES)
476 lossf=$(dsl_val "$lsctg" nLOSS)
477 uasf=$(dsl_val "$lsctg" nUAS)
478
479 lsctg=$(dsl_cmd pmlsctg 0)
480 fecsn=$(dsl_val "$lsctg" nFECS)
481 esn=$(dsl_val "$lsctg" nES)
482 sesn=$(dsl_val "$lsctg" nSES)
483 lossn=$(dsl_val "$lsctg" nLOSS)
484 uasn=$(dsl_val "$lsctg" nUAS)
485
486 dpctg=$(dsl_cmd pmdpctg 0 1)
487 hecf=$(dsl_val "$dpctg" nHEC)
488 crc_pf=$(dsl_val "$dpctg" nCRC_P)
489 crcp_pf=$(dsl_val "$dpctg" nCRCP_P)
490
491 dpctg=$(dsl_cmd pmdpctg 0 0)
492 hecn=$(dsl_val "$dpctg" nHEC)
493 crc_pn=$(dsl_val "$dpctg" nCRC_P)
494 crcp_pn=$(dsl_val "$dpctg" nCRCP_P)
495
496 if [ "$action" = "lucistat" ]; then
497 echo "dsl.errors_fecs_near=${fecsn:-nil}"
498 echo "dsl.errors_fecs_far=${fecsf:-nil}"
499 echo "dsl.errors_es_near=${esn:-nil}"
500 echo "dsl.errors_es_far=${esf:-nil}"
501 echo "dsl.errors_ses_near=${sesn:-nil}"
502 echo "dsl.errors_ses_far=${sesf:-nil}"
503 echo "dsl.errors_loss_near=${lossn:-nil}"
504 echo "dsl.errors_loss_far=${lossf:-nil}"
505 echo "dsl.errors_uas_near=${uasn:-nil}"
506 echo "dsl.errors_uas_far=${uasf:-nil}"
507 echo "dsl.errors_hec_near=${hecn:-nil}"
508 echo "dsl.errors_hec_far=${hecf:-nil}"
509 echo "dsl.errors_crc_p_near=${crc_pn:-nil}"
510 echo "dsl.errors_crc_p_far=${crc_pf:-nil}"
511 echo "dsl.errors_crcp_p_near=${crcp_pn:-nil}"
512 echo "dsl.errors_crcp_p_far=${crcp_pf:-nil}"
513 else
514 echo "Forward Error Correction Seconds (FECS): Near: ${fecsn} / Far: ${fecsf}"
515 echo "Errored seconds (ES): Near: ${esn} / Far: ${esf}"
516 echo "Severely Errored Seconds (SES): Near: ${sesn} / Far: ${sesf}"
517 echo "Loss of Signal Seconds (LOSS): Near: ${lossn} / Far: ${lossf}"
518 echo "Unavailable Seconds (UAS): Near: ${uasn} / Far: ${uasf}"
519 echo "Header Error Code Errors (HEC): Near: ${hecn} / Far: ${hecf}"
520 echo "Non Pre-emtive CRC errors (CRC_P): Near: ${crc_pn} / Far: ${crc_pf}"
521 echo "Pre-emtive CRC errors (CRCP_P): Near: ${crcp_pn} / Far: ${crcp_pf}"
522 fi
523 }
524
525 #
526 # Work out how long the line has been up
527 #
528 line_uptime() {
529 local ccsg
530 local et
531 local etr
532 local d
533 local h
534 local m
535 local s
536 local rc=""
537
538 ccsg=$(dsl_cmd pmccsg 0 0 0)
539 et=$(dsl_val "$ccsg" nElapsedTime)
540
541 [ -z "$et" ] && et=0
542
543 d=$(expr $et / 86400)
544 etr=$(expr $et % 86400)
545 h=$(expr $etr / 3600)
546 etr=$(expr $etr % 3600)
547 m=$(expr $etr / 60)
548 s=$(expr $etr % 60)
549
550
551 [ "${d}${h}${m}${s}" -ne 0 ] && rc="${s}s"
552 [ "${d}${h}${m}" -ne 0 ] && rc="${m}m ${rc}"
553 [ "${d}${h}" -ne 0 ] && rc="${h}h ${rc}"
554 [ "${d}" -ne 0 ] && rc="${d}d ${rc}"
555
556 [ -z "$rc" ] && rc="down"
557
558
559 if [ "$action" = "lucistat" ]; then
560 echo "dsl.line_uptime=${et}"
561 echo "dsl.line_uptime_s=\"${rc}\""
562 else
563
564 echo "Line Uptime Seconds: ${et}"
565 echo "Line Uptime: ${rc}"
566 fi
567 }
568
569 #
570 # Get noise and attenuation figures
571 #
572 line_data() {
573 local lsg
574 local latnu
575 local latnd
576 local satnu
577 local satnd
578 local snru
579 local snrd
580 local attndru
581 local attndrd
582 local sattndru
583 local sattndrd
584 local actatpu
585 local actatpd
586
587 lsg=$(dsl_cmd g997lsg 1 1)
588 latnd=$(dsl_val "$lsg" LATN)
589 satnd=$(dsl_val "$lsg" SATN)
590 snrd=$(dsl_val "$lsg" SNR)
591 attndrd=$(dsl_val "$lsg" ATTNDR)
592 actatpd=$(dsl_val "$lsg" ACTATP)
593
594 lsg=$(dsl_cmd g997lsg 0 1)
595 latnu=$(dsl_val "$lsg" LATN)
596 satnu=$(dsl_val "$lsg" SATN)
597 snru=$(dsl_val "$lsg" SNR)
598 attndru=$(dsl_val "$lsg" ATTNDR)
599 actatpu=$(dsl_val "$lsg" ACTATP)
600
601 [ -z "$latnd" ] && latnd=0
602 [ -z "$latnu" ] && latnu=0
603 [ -z "$satnd" ] && satnd=0
604 [ -z "$satnu" ] && satnu=0
605 [ -z "$snrd" ] && snrd=0
606 [ -z "$snru" ] && snru=0
607 [ -z "$actatpd" ] && actatpd=0
608 [ -z "$actatpu" ] && actatpu=0
609
610 latnd=$(dbt $latnd)
611 latnu=$(dbt $latnu)
612 satnd=$(dbt $satnd)
613 satnu=$(dbt $satnu)
614 snrd=$(dbt $snrd)
615 snru=$(dbt $snru)
616 actatpd=$(dbt $actatpd)
617 actatpu=$(dbt $actatpu)
618
619 [ -z "$attndrd" ] && attndrd=0
620 [ -z "$attndru" ] && attndru=0
621
622 sattndrd=$(scale $attndrd)
623 sattndru=$(scale $attndru)
624
625 if [ "$action" = "lucistat" ]; then
626 echo "dsl.line_attenuation_down=\"$latnd\""
627 echo "dsl.line_attenuation_up=\"$latnu\""
628 echo "dsl.noise_margin_down=\"$snrd\""
629 echo "dsl.noise_margin_up=\"$snru\""
630 echo "dsl.signal_attenuation_down=\"$satnd\""
631 echo "dsl.signal_attenuation_up=\"$satnu\""
632 echo "dsl.actatp_down=\"$actatpd\""
633 echo "dsl.actatp_up=\"$actatpu\""
634 echo "dsl.max_data_rate_down=$attndrd"
635 echo "dsl.max_data_rate_up=$attndru"
636 echo "dsl.max_data_rate_down_s=\"$sattndrd\""
637 echo "dsl.max_data_rate_up_s=\"$sattndru\""
638 else
639 echo "Line Attenuation (LATN): Down: ${latnd} dB / Up: ${latnu} dB"
640 echo "Signal Attenuation (SATN): Down: ${satnd} dB / Up: ${satnu} dB"
641 echo "Noise Margin (SNR): Down: ${snrd} dB / Up: ${snru} dB"
642 echo "Aggregate Transmit Power (ACTATP): Down: ${actatpd} dB / Up: ${actatpu} dB"
643 echo "Max. Attainable Data Rate (ATTNDR): Down: ${sattndrd}/s / Up: ${sattndru}/s"
644 fi
645 }
646
647 #
648 # Is the line up? Or what state is it in?
649 #
650 line_state() {
651 local lsg=$(dsl_cmd lsg)
652 local ls=$(dsl_val "$lsg" nLineState);
653 local s;
654
655 case "$ls" in
656 "0x0") s="not initialized" ;;
657 "0x1") s="exception" ;;
658 "0x10") s="not updated" ;;
659 "0xff") s="idle request" ;;
660 "0x100") s="idle" ;;
661 "0x1ff") s="silent request" ;;
662 "0x200") s="silent" ;;
663 "0x300") s="handshake" ;;
664 "0x380") s="full_init" ;;
665 "0x400") s="discovery" ;;
666 "0x500") s="training" ;;
667 "0x600") s="analysis" ;;
668 "0x700") s="exchange" ;;
669 "0x800") s="showtime_no_sync" ;;
670 "0x801") s="showtime_tc_sync" ;;
671 "0x900") s="fastretrain" ;;
672 "0xa00") s="lowpower_l2" ;;
673 "0xb00") s="loopdiagnostic active" ;;
674 "0xb10") s="loopdiagnostic data exchange" ;;
675 "0xb20") s="loopdiagnostic data request" ;;
676 "0xc00") s="loopdiagnostic complete" ;;
677 "0x1000000") s="test" ;;
678 "0xd00") s="resync" ;;
679 "0x3c0") s="short init entry" ;;
680 "") s="not running daemon"; ls="0xfff" ;;
681 *) s="unknown" ;;
682 esac
683
684 if [ "$action" = "lucistat" ]; then
685 echo "dsl.line_state_num=$ls"
686 echo "dsl.line_state_detail=\"$s\""
687 if [ "$ls" = "0x801" ]; then
688 echo "dsl.line_state=\"UP\""
689 else
690 echo "dsl.line_state=\"DOWN\""
691 fi
692 else
693 if [ "$ls" = "0x801" ]; then
694 echo "Line State: UP [$ls: $s]"
695 else
696 echo "Line State: DOWN [$ls: $s]"
697 fi
698 fi
699 }
700
701 #
702 # Which profile is used?
703 #
704 profile() {
705 local bpstg=$(dsl_cmd bpstg)
706 local profile=$(dsl_val "$bpstg" nProfile);
707 local s;
708
709 case "$profile" in
710 "0") s="8a" ;;
711 "1") s="8b" ;;
712 "2") s="8c" ;;
713 "3") s="8d" ;;
714 "4") s="12a" ;;
715 "5") s="12b" ;;
716 "6") s="17a" ;;
717 "7") s="30a" ;;
718 "8") s="17b" ;;
719 "") s="";;
720 *) s="unknown" ;;
721 esac
722
723 if [ "$action" = "lucistat" ]; then
724 echo "dsl.profile=${profile:-nil}"
725 echo "dsl.profile_s=\"${s}\""
726 else
727 echo "Profile: $s"
728 fi
729 }
730
731 dslstat() {
732 vendor
733 chipset
734 xtse
735 profile
736 line_state
737 errors
738 power_mode
739 latency_delay
740 data_rates
741 line_data
742 line_uptime
743 }
744
745 lucistat() {
746 echo "local dsl={}"
747 dslstat
748 echo "return dsl"
749 }