47f5b738148a8e01a3ac54a5c0880602f8f4d9c2
[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 #
68 # convert vendorid into human readable form
69 #
70 parse_vendorid() {
71 local val=$1
72 local name
73 local version
74
75 case "$val" in
76 B5,00,41,4C,43,42*)
77 name="Alcatel"
78 version=${val##*B5,00,41,4C,43,42,}
79 ;;
80 B5,00,41,4E,44,56*)
81 name="Analog Devices"
82 version=${val##*B5,00,41,4E,44,56,}
83 ;;
84 B5,00,42,44,43,4D*)
85 name="Broadcom"
86 version=${val##*B5,00,42,44,43,4D,}
87 ;;
88 B5,00,43,45,4E,54*)
89 name="Centillium"
90 version=${val##*B5,00,43,45,4E,54,}
91 ;;
92 B5,00,47,53,50,4E*)
93 name="Globespan"
94 version=${val##*B5,00,47,53,50,4E,}
95 ;;
96 B5,00,49,4B,4E,53*)
97 name="Ikanos"
98 version=${val##*B5,00,49,4B,4E,53,}
99 ;;
100 B5,00,49,46,54,4E*)
101 name="Infineon"
102 version=${val##*B5,00,49,46,54,4E,}
103 ;;
104 B5,00,54,53,54,43*)
105 name="Texas Instruments"
106 version=${val##*B5,00,54,53,54,43,}
107 ;;
108 B5,00,54,4D,4D,42*)
109 name="Thomson MultiMedia Broadband"
110 version=${val##*B5,00,54,4D,4D,42,}
111 ;;
112 B5,00,54,43,54,4E*)
113 name="Trend Chip Technologies"
114 version=${val##*B5,00,54,43,54,4E,}
115 ;;
116 B5,00,53,54,4D,49*)
117 name="ST Micro"
118 version=${val##*B5,00,53,54,4D,49,}
119 ;;
120 esac
121
122 [ -n "$name" ] && {
123 val="$name"
124
125 [ "$version" != "00,00" ] && val="$(printf "%s %d.%d" "$val" 0x${version//,/ 0x})"
126 }
127
128 echo "$val"
129 }
130
131 #
132 # Read the data rates for both directions
133 #
134 data_rates() {
135 local csg
136 local dru
137 local drd
138 local sdru
139 local sdrd
140
141 csg=$(dsl_cmd g997csg 0 1)
142 drd=$(dsl_val "$csg" ActualDataRate)
143
144 csg=$(dsl_cmd g997csg 0 0)
145 dru=$(dsl_val "$csg" ActualDataRate)
146
147 [ -z "$drd" ] && drd=0
148 [ -z "$dru" ] && dru=0
149
150 sdrd=$(scale $drd)
151 sdru=$(scale $dru)
152
153 if [ "$action" = "lucistat" ]; then
154 echo "dsl.data_rate_down=$drd"
155 echo "dsl.data_rate_up=$dru"
156 echo "dsl.data_rate_down_s=\"$sdrd\""
157 echo "dsl.data_rate_up_s=\"$sdru\""
158 else
159 echo "Data Rate: Down: ${sdrd}/s / Up: ${sdru}/s"
160 fi
161 }
162
163 #
164 # Chipset
165 #
166 chipset() {
167 local vig
168 local cs
169 local csv
170
171 vig=$(dsl_cmd vig)
172 cs=$(dsl_val "$vig" DSL_ChipSetType)
173 csv=$(dsl_val "$vig" DSL_ChipSetHWVersion)
174 csfw=$(dsl_val "$vig" DSL_ChipSetFWVersion)
175 csapi=$(dsl_val "$vig" DSL_DriverVersionApi)
176
177 if [ "$action" = "lucistat" ]; then
178 echo "dsl.chipset=\"${cs} ${csv}\""
179 echo "dsl.firmware_version=\"${csfw}\""
180 echo "dsl.api_version=\"${csapi}\""
181 else
182 echo "Chipset: ${cs} ${csv}"
183 echo "Firmware Version: ${csfw}"
184 echo "API Version: ${csapi}"
185 fi
186 }
187
188 #
189 # Vendor information
190 #
191 vendor() {
192 local lig
193 local vid
194 local svid
195
196 lig=$(dsl_cmd g997lig 1)
197 vid=$(dsl_string "$lig" G994VendorID)
198 svid=$(dsl_string "$lig" SystemVendorID)
199
200 vid=$(parse_vendorid $vid)
201 svid=$(parse_vendorid $svid)
202
203 if [ "$action" = "lucistat" ]; then
204 echo "dsl.atuc_vendor_id=\"${vid}\""
205 echo "dsl.atuc_system_vendor_id=\"${svid}\""
206 else
207 echo "ATU-C Vendor ID: ${vid}"
208 echo "ATU-C System Vendor ID: ${svid}"
209 fi
210 }
211
212 #
213 # XTSE capabilities
214 #
215 xtse() {
216 local xtusesg
217 local xtse1
218 local xtse2
219 local xtse3
220 local xtse4
221 local xtse5
222 local xtse6
223 local xtse7
224 local xtse8
225
226 local xtse_s=""
227
228 local annex_s=""
229 local line_mode_s=""
230 local vector_s=""
231
232 local dsmsg=""
233 local cmd=""
234
235 xtusesg=$(dsl_cmd g997xtusesg)
236 xtse1=$(dsl_val "$xtusesg" XTSE1)
237 xtse2=$(dsl_val "$xtusesg" XTSE2)
238 xtse3=$(dsl_val "$xtusesg" XTSE3)
239 xtse4=$(dsl_val "$xtusesg" XTSE4)
240 xtse5=$(dsl_val "$xtusesg" XTSE5)
241 xtse6=$(dsl_val "$xtusesg" XTSE6)
242 xtse7=$(dsl_val "$xtusesg" XTSE7)
243 xtse8=$(dsl_val "$xtusesg" XTSE8)
244
245 # Evaluate Annex (according to G.997.1, 7.3.1.1.1)
246 if [ $((xtse1 & 13)) != 0 \
247 -o $((xtse2 & 1)) != 0 \
248 -o $((xtse3 & 12)) != 0 \
249 -o $((xtse4 & 3)) != 0 \
250 -o $((xtse6 & 3)) != 0 \
251 -o $((xtse8 & 1)) != 0 ]; then
252 annex_s=" A,"
253 fi
254
255 if [ $((xtse1 & 48)) != 0 \
256 -o $((xtse2 & 2)) != 0 \
257 -o $((xtse3 & 48)) != 0 \
258 -o $((xtse6 & 12)) != 0 \
259 -o $((xtse8 & 2)) != 0 ]; then
260 annex_s="$annex_s B,"
261 fi
262
263 if [ $((xtse1 & 194)) != 0 \
264 -o $((xtse2 & 12)) != 0 \
265 -o $((xtse8 & 4)) != 0 ]; then
266 annex_s="$annex_s C,"
267 fi
268
269 if [ $((xtse4 & 48)) != 0 \
270 -o $((xtse5 & 3)) != 0 \
271 -o $((xtse6 & 192)) != 0 ]; then
272 annex_s="$annex_s I,"
273 fi
274
275 if [ $((xtse4 & 192)) != 0 \
276 -o $((xtse7 & 3)) != 0 ]; then
277 annex_s="$annex_s J,"
278 fi
279
280 if [ $((xtse5 & 60)) != 0 ]; then
281 annex_s="$annex_s L,"
282 fi
283
284 if [ $((xtse5 & 192)) != 0 \
285 -o $((xtse7 & 12)) != 0 ]; then
286 annex_s="$annex_s M,"
287 fi
288
289 annex_s=`echo ${annex_s:1}`
290 annex_s=`echo ${annex_s%?}`
291
292 # Evaluate Line Mode (according to G.997.1, 7.3.1.1.1)
293
294 # Regional standard: ANSI T1.413
295 if [ $((xtse1 & 1)) != 0 ]; then
296 line_mode_s=" T1.413,"
297 fi
298
299 # Regional standard: TS 101 388
300 if [ $((xtse1 & 1)) != 0 ]; then
301 line_mode_s="$line_mode_s TS 101 388,"
302 fi
303
304 if [ $((xtse1 & 252)) != 0 ]; then
305 line_mode_s="$line_mode_s G.992.1 (ADSL),"
306 fi
307
308 if [ $((xtse2 & 15)) != 0 ]; then
309 line_mode_s="$line_mode_s G.992.2 (ADSL lite),"
310 fi
311
312 if [ $((xtse3 & 60)) != 0 \
313 -o $((xtse4 & 240)) != 0 \
314 -o $((xtse5 & 252)) != 0 ]; then
315 line_mode_s="$line_mode_s G.992.3 (ADSL2),"
316 fi
317
318 if [ $((xtse4 & 3)) != 0 \
319 -o $((xtse5 & 3)) != 0 ]; then
320 line_mode_s="$line_mode_s G.992.4 (ADSL2 lite),"
321 fi
322
323 if [ $((xtse6 & 199)) != 0 \
324 -o $((xtse7 & 15)) != 0 ]; then
325 line_mode_s="$line_mode_s G.992.5 (ADSL2+),"
326 fi
327
328 if [ $((xtse8 & 7)) != 0 ]; then
329 dsmsg=$(dsl_cmd dsmsg)
330 vector_s=$(dsl_val "$dsmsg" eVectorStatus)
331
332 case "$vector_s" in
333 "0") line_mode_s="$line_mode_s G.993.2 (VDSL2)," ;;
334 "1") line_mode_s="$line_mode_s G.993.5 (VDSL2 with downstream vectoring)," ;;
335 "2") line_mode_s="$line_mode_s G.993.5 (VDSL2 with down- and upstream vectoring)," ;;
336 *) line_mode_s="$line_mode_s unknown," ;;
337 esac
338 fi
339
340 #!!! PROPRIETARY & INTERMEDIATE USE !!!
341 if [ $((xtse8 & 128)) != 0 ]; then
342 line_mode_s="$line_mode_s G.993.1 (VDSL),"
343 fi
344
345 line_mode_s=`echo ${line_mode_s:1}`
346 line_mode_s=`echo ${line_mode_s%?}`
347
348 xtse_s="${xtse1}, ${xtse2}, ${xtse3}, ${xtse4}, ${xtse5}, ${xtse6}, ${xtse7}, ${xtse8}"
349
350 if [ "$action" = "lucistat" ]; then
351 echo "dsl.xtse1=${xtse1:-nil}"
352 echo "dsl.xtse2=${xtse2:-nil}"
353 echo "dsl.xtse3=${xtse3:-nil}"
354 echo "dsl.xtse4=${xtse4:-nil}"
355 echo "dsl.xtse5=${xtse5:-nil}"
356 echo "dsl.xtse6=${xtse6:-nil}"
357 echo "dsl.xtse7=${xtse7:-nil}"
358 echo "dsl.xtse8=${xtse8:-nil}"
359 echo "dsl.xtse_s=\"$xtse_s\""
360 echo "dsl.annex_s=\"${annex_s}\""
361 echo "dsl.line_mode_s=\"${line_mode_s}\""
362 else
363 echo "XTSE Capabilities: ${xtse_s}"
364 echo "Annex: ${annex_s}"
365 echo "Line Mode: ${line_mode_s}"
366 fi
367 }
368
369 #
370 # Power Management Mode
371 #
372 power_mode() {
373 local pmsg=$(dsl_cmd g997pmsg)
374 local pm=$(dsl_val "$pmsg" nPowerManagementStatus);
375 local s;
376
377 case "$pm" in
378 "-1") s="Power management state is not available" ;;
379 "0") s="L0 - Synchronized" ;;
380 "1") s="L1 - Power Down Data transmission (G.992.2)" ;;
381 "2") s="L2 - Power Down Data transmission (G.992.3 and G.992.4)" ;;
382 "3") s="L3 - No power" ;;
383 *) s="unknown" ;;
384 esac
385
386 if [ "$action" = "lucistat" ]; then
387 echo "dsl.power_mode_num=${pm:-nil}"
388 echo "dsl.power_mode_s=\"$s\""
389 else
390 echo "Power Management Mode: $s"
391 fi
392 }
393
394 #
395 # Latency type (interleave delay)
396 #
397 latency_delay() {
398 local csg
399
400 local idu
401 local idu_s;
402 local sidu
403
404 local idd
405 local idd_s;
406 local sidd
407
408 csg=$(dsl_cmd g997csg 0 1)
409 idd=$(dsl_val "$csg" ActualInterleaveDelay)
410
411 csg=$(dsl_cmd g997csg 0 0)
412 idu=$(dsl_val "$csg" ActualInterleaveDelay)
413
414 [ -z "$idd" ] && idd=0
415 [ -z "$idu" ] && idu=0
416
417 if [ "$idd" -gt 100 ]; then
418 idd_s="Interleave"
419 else
420 idd_s="Fast"
421 fi
422
423 if [ "$idu" -gt 100 ]; then
424 idu_s="Interleave"
425 else
426 idu_s="Fast"
427 fi
428
429 sidu=$(scale_latency $idu)
430 sidd=$(scale_latency $idd)
431
432 if [ "$action" = "lucistat" ]; then
433 echo "dsl.latency_num_down=\"$sidd\""
434 echo "dsl.latency_num_up=\"$sidu\""
435 echo "dsl.latency_s_down=\"$idd_s\""
436 echo "dsl.latency_s_up=\"$idu_s\""
437 else
438 echo "Latency [Interleave Delay]: ${sidd} [${idd_s}] ${sidu} [${idu_s}]"
439 fi
440 }
441
442 #
443 # Errors
444 #
445 errors() {
446 local lsctg
447 local dpctg
448 local ccsg
449 local esf
450 local esn
451 local sesf
452 local sesn
453 local lossf
454 local lossn
455 local uasf
456 local uasn
457
458 local crc_pf
459 local crc_pn
460 local crcp_pf
461 local crcp_pn
462 local hecf
463 local hecn
464
465 local fecn
466 local fecf
467
468 lsctg=$(dsl_cmd pmlsctg 1)
469 esf=$(dsl_val "$lsctg" nES)
470 sesf=$(dsl_val "$lsctg" nSES)
471 lossf=$(dsl_val "$lsctg" nLOSS)
472 uasf=$(dsl_val "$lsctg" nUAS)
473
474 lsctg=$(dsl_cmd pmlsctg 0)
475 esn=$(dsl_val "$lsctg" nES)
476 sesn=$(dsl_val "$lsctg" nSES)
477 lossn=$(dsl_val "$lsctg" nLOSS)
478 uasn=$(dsl_val "$lsctg" nUAS)
479
480 dpctg=$(dsl_cmd pmdpctg 0 1)
481 hecf=$(dsl_val "$dpctg" nHEC)
482 crc_pf=$(dsl_val "$dpctg" nCRC_P)
483 crcp_pf=$(dsl_val "$dpctg" nCRCP_P)
484
485 dpctg=$(dsl_cmd pmdpctg 0 0)
486 hecn=$(dsl_val "$dpctg" nHEC)
487 crc_pn=$(dsl_val "$dpctg" nCRC_P)
488 crcp_pn=$(dsl_val "$dpctg" nCRCP_P)
489
490 ccsg=$(dsl_cmd pmccsg 0 1 0)
491 fecf=$(dsl_val "$ccsg" nFEC)
492
493 ccsg=$(dsl_cmd pmccsg 0 0 0)
494 fecn=$(dsl_val "$ccsg" nFEC)
495
496 if [ "$action" = "lucistat" ]; then
497 echo "dsl.errors_fec_near=${fecn:-nil}"
498 echo "dsl.errors_fec_far=${fecf:-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: ${fecn} / Far: ${fecf}"
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 status() {
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 status
748 echo "return dsl"
749 }