1#!/bin/sh /etc/rc.common 2# Copyright (C) 2012-2014 OpenWrt.org 3 4if [ "$( which vdsl_cpe_control )" ]; then 5 XDSL_CTRL=vdsl_cpe_control 6else 7 XDSL_CTRL=dsl_cpe_control 8fi 9 10# 11# Basic functions to send CLI commands to the vdsl_cpe_control daemon 12# 13dsl_cmd() { 14 killall -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} 21dsl_val() { 22 echo $(expr "$1" : '.*'$2'=\([-\.[:alnum:]]*\).*') 23} 24dsl_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# 31dbt() { 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# 39scale() { 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 57scale_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# 70parse_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# 134data_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# 166chipset() { 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# 191vendor() { 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# 215xtse() { 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# 372power_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# 397latency_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: Down: ${idd_s} (${sidd}) / Up: ${idu_s} (${sidu})" 439 fi 440} 441 442# 443# Errors 444# 445errors() { 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# 528line_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# 572line_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# 650line_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# 704profile() { 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 731status() { 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 745lucistat() { 746 echo "local dsl={}" 747 status 748 echo "return dsl" 749} 750