Annotation of 43BSDReno/contrib/isode-beta/compat/sunlink.c, revision 1.1.1.1

1.1       root        1: /* sunlink.c - X.25 abstractions for SunLink X25 */
                      2: 
                      3: #ifndef lint
                      4: static char *rcsid = "$Header: /f/osi/compat/RCS/sunlink.c,v 7.2 90/07/27 08:41:49 mrose Exp $";
                      5: #endif
                      6: 
                      7: /*
                      8:  * $Header: /f/osi/compat/RCS/sunlink.c,v 7.2 90/07/27 08:41:49 mrose Exp $
                      9:  *
                     10:  * Contributed by John Pavel, Department of Trade and Industry/National
                     11:  * Physical Laboratory in the UK
                     12:  *
                     13:  *
                     14:  * $Log:       sunlink.c,v $
                     15:  * Revision 7.2  90/07/27  08:41:49  mrose
                     16:  * update
                     17:  * 
                     18:  * Revision 7.1  90/07/09  14:32:22  mrose
                     19:  * sync
                     20:  * 
                     21:  * Revision 7.0  89/11/23  21:23:42  mrose
                     22:  * Release 6.0
                     23:  * 
                     24:  */
                     25: 
                     26: /*
                     27:  *                                NOTICE
                     28:  *
                     29:  *    Acquisition, use, and distribution of this module and related
                     30:  *    materials are subject to the restrictions of a license agreement.
                     31:  *    Consult the Preface in the User's Manual for the full terms of
                     32:  *    this agreement.
                     33:  *
                     34:  */
                     35: 
                     36: 
                     37: /* LINTLIBRARY */
                     38: 
                     39: #include <stdio.h>
                     40: #include "general.h"
                     41: #include "manifest.h"
                     42: #include "tailor.h"
                     43: 
                     44: /*    SUN UNIX: SunLink X25 */
                     45: 
                     46: #ifdef  X25
                     47: 
                     48: #include "x25.h"
                     49: #include "isoaddrs.h"
                     50: 
                     51: #ifdef  SUN_X25
                     52: 
                     53: #define CALLING 0
                     54: #define CALLED  1
                     55: #define        PROBE   (-1)
                     56: 
                     57: /*  */
                     58: 
                     59: #ifdef  DEBUG
                     60: void    print_x25_facilities ();
                     61: #endif
                     62: 
                     63: /*  */
                     64: 
                     65: /* ARGSUSED */
                     66: 
                     67: int     start_x25_client (local, priv)
                     68: struct  NSAPaddr *local;
                     69: int     priv;
                     70: {
                     71:     int     sd;
                     72: 
                     73:     if ((sd = socket (AF_X25, SOCK_STREAM, 0)) == NOTOK) {
                     74:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("socket"));
                     75:        return NOTOK;
                     76:     }
                     77: 
                     78:     return sd;
                     79: }
                     80: 
                     81: /*  */
                     82: 
                     83: int     start_x25_server (local, backlog, opt1, opt2)
                     84: struct  NSAPaddr *local;
                     85: int     backlog,
                     86:        opt1,
                     87:        opt2;
                     88: {
                     89:     CONN_DB     sbuf,
                     90:                xbuf;
                     91:     CONN_DB     *sock = &sbuf,
                     92:                *xs = &xbuf;
                     93:     int     sd, onoff;
                     94: 
                     95:     if ((sd = socket (AF_X25, SOCK_STREAM, 0)) == NOTOK) {
                     96:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("socket"));
                     97:        return NOTOK;
                     98:     }
                     99: 
                    100:     onoff = 0;
                    101:     if (ioctl (sd, X25_CALL_ACPT_APPROVAL, (char *) &onoff) == NOTOK) {
                    102:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed",
                    103:              ("X25_CALL_ACPT_APPROVAL"));
                    104:        (void) close_x25_socket (sd);
                    105:        return NOTOK;
                    106:     }
                    107: 
                    108:     if (ioctl (sd, X25_RD_HOSTADR, (char *) xs) == NOTOK) {
                    109:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_RD_HOSTADR"));
                    110:        (void) close_x25_socket (sd);
                    111:        return NOTOK;
                    112:     }
                    113:                                        /* if null DTE in /etc/x25params
                    114:                                           then ALWAYS use null DTE for
                    115:                                           listen if PID is specified */
                    116:     if (xs -> hostlen == 0 && local -> na_pidlen > 0) {
                    117:        if (local -> na_pidlen > NPSIZE)
                    118:            local -> na_pidlen = NPSIZE;
                    119:        *sock = *xs;    /* struct copy */
                    120:        bzero((char *) sock -> data, NPSIZE);
                    121:        bcopy (local -> na_pid, (char *) sock -> data, local -> na_pidlen);
                    122:        bcopy (local -> na_cudf, (char *) sock -> data + NPSIZE,
                    123:               local -> na_cudflen);
                    124:        sock -> datalen = local -> na_pidlen + local -> na_cudflen;
                    125:     }
                    126:     else
                    127:        sock = gen2if(local, sock, ADDR_LISTEN);
                    128: 
                    129:     /* Adopt the convention that if a null DTE is given,
                    130:        we should get the one from /etc/x25params */
                    131:     if(!local->na_dtelen) {
                    132:        /* Now set the generic local address */
                    133:        local = if2gen(local, xs, ADDR_LOCAL);
                    134:        /* Modified by INRIA to avoid a null local address */
                    135:        if (!local->na_dtelen) {
                    136:                local->na_dtelen = 1;
                    137:                local->na_dte[0] = '0';
                    138:        }
                    139:     }
                    140: 
                    141:     if (bind (sd, (struct sockaddr *) sock, sizeof(CONN_DB)) == NOTOK) {
                    142:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("bind"));
                    143:        (void) close_x25_socket (sd);
                    144:        return NOTOK;
                    145:     }
                    146: 
                    147: #ifndef        BSD43
                    148:     if (opt1)
                    149:        (void) setsockopt (sd, SOL_SOCKET, opt1, NULLCP, 0);
                    150:     if (opt2)
                    151:        (void) setsockopt (sd, SOL_SOCKET, opt2, NULLCP, 0);
                    152: #else
                    153:     onoff = 1;
                    154:     if (opt1)
                    155:        (void) setsockopt (sd, SOL_SOCKET, opt1, (char *)&onoff, sizeof onoff);
                    156:     if (opt2)
                    157:        (void) setsockopt (sd, SOL_SOCKET, opt2, (char *)&onoff, sizeof onoff);
                    158: #endif
                    159: 
                    160:     if (set_x25_facilities(sd, CALLED, "Acceptable") == NOTOK) {
                    161:        (void) close_x25_socket (sd);
                    162:        return NOTOK;
                    163:     }
                    164: 
                    165:     (void) listen (sd, backlog);
                    166: 
                    167:     return sd;
                    168: }
                    169: 
                    170: /*  */
                    171: 
                    172: int     join_x25_server (fd, remote)
                    173: register int fd;
                    174: register struct NSAPaddr *remote;
                    175: {
                    176:     CONN_DB sbuf;
                    177:     CONN_DB *sock = &sbuf;
                    178:     register int nfd;
                    179: 
                    180:     if ((sock = gen2if (remote, sock, ADDR_REMOTE)) == NULL)
                    181:        return NOTOK;
                    182: 
                    183:     if (set_x25_facilities(fd, CALLING, "Proposed") == NOTOK)
                    184:        return NOTOK;
                    185: #ifdef ANY_LINK
                    186:     sock -> hostlen |= ANY_LINK;
                    187: #endif
                    188:     if ((nfd = connect (fd, (struct sockaddr *)sock, sizeof (CONN_DB)))
                    189:            == NOTOK) {
                    190:        if (compat_log -> ll_events & LLOG_EXCEPTIONS)
                    191:            (void) log_cause_and_diag(fd);      /* Sun's documentation throwns
                    192:                                                   no light as to whether, or
                    193:                                                   not this will result in any
                    194:                                                   useful information */
                    195:     }
                    196: #ifdef  DEBUG
                    197:     else
                    198:        if (compat_log -> ll_events & LLOG_DEBUG)
                    199:            (void) log_x25_facilities(fd, CALLING, "Effective Calling");
                    200: #endif
                    201: #ifdef ANY_LINK
                    202:     sock -> hostlen &= ~ANY_LINK;
                    203: #endif
                    204:     remote = if2gen (remote, sock, ADDR_REMOTE);
                    205: 
                    206:     return nfd;
                    207: }
                    208: 
                    209: /*  */
                    210: 
                    211: int     join_x25_client (fd, remote)
                    212: int     fd;
                    213: struct  NSAPaddr *remote;
                    214: {
                    215:     CONN_DB     sbuf;
                    216:     CONN_DB     *sock = &sbuf;
                    217:     int     len = sizeof *sock;
                    218:     int     nfd;
                    219: 
                    220:     if ((nfd = accept (fd, (struct sockaddr *) sock, &len)) == NOTOK) {
                    221:        if (compat_log -> ll_events & LLOG_EXCEPTIONS)
                    222:            (void) log_cause_and_diag(fd);      /* Sun's documentation throwns
                    223:                                                   no light as to whether, or
                    224:                                                   not this will result in any
                    225:                                                   useful information */
                    226:     }
                    227: #ifdef  DEBUG
                    228:      else
                    229:         if (compat_log -> ll_events & LLOG_DEBUG)
                    230:             (void) log_x25_facilities(fd, CALLED, "Effective Called");
                    231: #endif
                    232:     if (nfd < 0) return nfd;
                    233: 
                    234:     /* May also need to send call accept packet if using
                    235:      * FAST_ACPT_CLR, or X25_CALL_ACPT_APPROVAL
                    236:      * there was a SUNLINK bug in this area
                    237:      *
                    238:      * May as well try it -- if it fails, so what ??
                    239:      */
                    240:     if (ioctl(nfd,X25_SEND_CALL_ACPT, NULLCP) < 0)
                    241:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_SEND_CALL_ACPT"));
                    242: 
                    243:     remote = if2gen (remote, sock, ADDR_REMOTE);
                    244: 
                    245:     return nfd;
                    246: }
                    247: 
                    248: /*  */
                    249: 
                    250: /* There is a bug whereby if the thruput is set, calls fail. [email protected] */
                    251: 
                    252: int    sun_fixed_thruput = 0;
                    253: 
                    254: /* Set up X.25 Facilities.  Note that setting even one value causes
                    255:    the default (/etc/x25params) values to be set explicitly on the
                    256:    call request (and probably also call accept).  This can screw
                    257:    things up, if your /etc/x25params has not been properly
                    258:    localised as is normally the case.  */
                    259: 
                    260: int     set_x25_facilities(sd, coc, caption)
                    261: int     sd, coc;
                    262: char *caption;
                    263: {
                    264:     FACILITY_DB facilities;
                    265: 
                    266:     bzero ((char *) &facilities, sizeof facilities);
                    267: 
                    268:     if (coc != CALLED
                    269:            && ioctl (sd, X25_RD_FACILITY, (char *) &facilities) == NOTOK) {
                    270:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_RD_FACILITY"));
                    271:        return NOTOK;
                    272:     }
                    273: 
                    274:     if (coc == PROBE
                    275:            || !(coc == CALLED
                    276:                    || reverse_charge   || recvpktsize || sendpktsize
                    277:                    || recvwndsize      || sendwndsize || recvthruput
                    278:                    || sendthruput      || cug_req  /* || cug_index */
                    279:                    || fast_select_type || rpoa_req /* || rpoa */)) {
                    280:        if (facilities.recvpktsize)
                    281:            recvpktsize = facilities.recvpktsize;
                    282:        if (facilities.sendpktsize)
                    283:            sendpktsize = facilities.sendpktsize;
                    284: 
                    285:        return OK;
                    286:     }
                    287: 
                    288:     if (reverse_charge)
                    289:        facilities.reverse_charge = reverse_charge;
                    290:     if (recvpktsize)
                    291:        facilities.recvpktsize = recvpktsize;
                    292:     if (sendpktsize)
                    293:        facilities.sendpktsize = sendpktsize;
                    294:     if (recvwndsize)
                    295:        facilities.recvwndsize = recvwndsize;
                    296:     if (sendwndsize)
                    297:        facilities.sendwndsize = sendwndsize;
                    298:     if (sun_fixed_thruput) {   /* get round Sun bug */
                    299:        if (recvthruput)
                    300:            facilities.recvthruput = recvthruput;
                    301:        if (sendthruput)
                    302:            facilities.sendthruput = sendthruput;
                    303:     }
                    304:     else
                    305:        facilities.recvthruput = facilities.sendthruput = 0;
                    306:     if (cug_req)
                    307:        facilities.cug_req = cug_req;
                    308:     if (cug_index)
                    309:        facilities.cug_index = cug_index;
                    310:     if (fast_select_type)
                    311:        facilities.fast_select_type = fast_select_type;
                    312:       /* May as well accept FCS calls */
                    313:     else
                    314:        if (coc == CALLED)
                    315:            facilities.fast_select_type = FAST_ACPT_CLR;
                    316:     if (rpoa_req)
                    317:        facilities.rpoa_req = rpoa_req;
                    318:     if (rpoa)
                    319:        facilities.rpoa = rpoa;
                    320: 
                    321: #ifdef  DEBUG
                    322:     if (compat_log -> ll_events & LLOG_DEBUG)
                    323:        print_x25_facilities (facilities, coc, caption);
                    324: #endif
                    325: 
                    326:     if (ioctl (sd, X25_WR_FACILITY, (char *) &facilities) == NOTOK) {
                    327:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_WR_FACILITY"));
                    328:        return NOTOK;
                    329:     }
                    330: 
                    331: #ifdef notyet
                    332:     if (facilities.recvpktsize)
                    333:        recvpktsize = facilities.recvpktsize;
                    334:     if (facilities.sendpktsize)
                    335:        sendpktsize = facilities.sendpktsize;
                    336: #endif
                    337: 
                    338:     return OK;
                    339: }
                    340: 
                    341: /*  */
                    342: 
                    343: int     log_cause_and_diag(fd)
                    344: int fd;
                    345: {
                    346:     X25_CAUSE_DIAG      diag;
                    347: 
                    348:     if (ioctl(fd, X25_RD_CAUSE_DIAG, (char *) &diag) == NOTOK) {
                    349:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_RD_CAUSE_DIAG"));
                    350:        return NOTOK;
                    351:     }
                    352: 
                    353:     return elucidate_x25_err ((int) diag.flags, (char *) diag.data);
                    354: 
                    355: }
                    356: 
                    357: /*  */
                    358: 
                    359: #ifdef  DEBUG
                    360: 
                    361: static int  log_x25_facilities (fd, coc, caption)
                    362: int     fd;
                    363: int     coc;
                    364: char   *caption;
                    365: {
                    366:     FACILITY_DB f;
                    367: 
                    368:     if (ioctl (fd, X25_RD_FACILITY, (char *) &f) == NOTOK) {
                    369:        SLOG (compat_log, LLOG_EXCEPTIONS, "failed", ("X25_RD_FACILITY"));
                    370:        return NOTOK;
                    371:     }
                    372: 
                    373:     print_x25_facilities (f, coc, caption);
                    374: 
                    375:     return OK;
                    376: }
                    377: 
                    378: /*  */
                    379: 
                    380: static void  print_x25_facilities (f, coc, caption)
                    381: FACILITY_DB f;
                    382: int     coc;
                    383: char   *caption;
                    384: {
                    385:     int     baud;
                    386: 
                    387:     DLOG (compat_log, LLOG_DEBUG, ("%s X.25 Facilities:", caption));
                    388: 
                    389:     switch (f.reverse_charge) {
                    390:        case 0:
                    391:            DLOG (compat_log, LLOG_DEBUG, ((coc == CALLED)
                    392:                      ? "reverse charging not requested"
                    393:                      : "reverse charging not allowed"));
                    394:            break;
                    395: 
                    396:        case 1:
                    397:            DLOG (compat_log, LLOG_DEBUG, ((coc == CALLING)
                    398:                      ? "reverse charging requested"
                    399:                      : "reverse charging allowed"));
                    400:            break;
                    401: 
                    402:        default:
                    403:            DLOG (compat_log, LLOG_DEBUG, ("invalid reverse_charge: %d",
                    404:                      f.reverse_charge));
                    405:            break;
                    406:     }
                    407: 
                    408:     switch (f.recvpktsize) {
                    409:        case 0:
                    410:            DLOG (compat_log, LLOG_DEBUG, ("default recv packet size"));
                    411:            break;
                    412: 
                    413:        case 16:
                    414:        case 32:
                    415:        case 64:
                    416:        case 128:
                    417:        case 256:
                    418:        case 512:
                    419:        case 1024:
                    420:            DLOG (compat_log, LLOG_DEBUG, ("recv packet size %d",
                    421:                      f.recvpktsize));
                    422:            break;
                    423: 
                    424:        default:
                    425:            DLOG (compat_log, LLOG_DEBUG, ("invalid recv packet size %d",
                    426:                      f.recvpktsize));
                    427:            break;
                    428:     }
                    429: 
                    430:     switch (f.sendpktsize) {
                    431:        case 0:
                    432:            DLOG (compat_log, LLOG_DEBUG, ("default send packet size"));
                    433:            break;
                    434: 
                    435:        case 16:
                    436:        case 32:
                    437:        case 64:
                    438:        case 128:
                    439:        case 256:
                    440:        case 512:
                    441:        case 1024:
                    442:            DLOG (compat_log, LLOG_DEBUG, ("send packet size %d",
                    443:                      f.sendpktsize));
                    444:            break;
                    445: 
                    446:        default:
                    447:            DLOG (compat_log, LLOG_DEBUG, ("invalid send packet size %d",
                    448:                      f.sendpktsize));
                    449:            break;
                    450:     }
                    451: 
                    452:     DLOG (compat_log, LLOG_DEBUG,
                    453:          (f.recvwndsize == 0 ? "default recv window size"
                    454:                  : 1 <= f.recvwndsize && f.recvwndsize <= 127
                    455:                      ? "recv window size %d"
                    456:                      : "invalid recv window size %d",
                    457:              f.recvwndsize));
                    458: 
                    459:     DLOG (compat_log, LLOG_DEBUG,
                    460:          (f.sendwndsize == 0 ? "default send window size"
                    461:                  : 1 <= f.sendwndsize && f.sendwndsize <= 127
                    462:                      ? "send window size %d"
                    463:                      : "invalid send window size %d",
                    464:              f.sendwndsize));
                    465: 
                    466:     switch (f.recvthruput) {
                    467:        case 0:
                    468:            DLOG (compat_log, LLOG_DEBUG, ("default recv throughput"));
                    469:            break;
                    470: 
                    471:        case 3:
                    472:            baud = 75;
                    473: print_recv: ;
                    474:            DLOG (compat_log, LLOG_DEBUG, ("recv throughput %dbps", baud));
                    475:            break;
                    476: 
                    477:        case 4:
                    478:            baud = 150;
                    479:            goto print_recv;
                    480: 
                    481:        case 5:
                    482:            baud = 300;
                    483:            goto print_recv;
                    484: 
                    485:        case 6:
                    486:            baud = 600;
                    487:            goto print_recv;
                    488: 
                    489:        case 7:
                    490:            baud = 1200;
                    491:            goto print_recv;
                    492: 
                    493:        case 8:
                    494:            baud = 2400;
                    495:            goto print_recv;
                    496: 
                    497:        case 9:
                    498:            baud = 4800;
                    499:            goto print_recv;
                    500: 
                    501:        case 10:
                    502:            baud = 9600;
                    503:            goto print_recv;
                    504: 
                    505:        case 11:
                    506:            baud = 19200;
                    507:            goto print_recv;
                    508: 
                    509:        case 12:
                    510:            baud = 48000;
                    511:            goto print_recv;
                    512: 
                    513:        default:
                    514:            DLOG (compat_log, LLOG_DEBUG, ("invalid recv throughput %d",
                    515:                      f.recvthruput));
                    516:            break;
                    517:     }
                    518: 
                    519:     switch (f.sendthruput) {
                    520:        case 0:
                    521:            DLOG (compat_log, LLOG_DEBUG, ("default send throughput"));
                    522:            break;
                    523: 
                    524:        case 3:
                    525:            baud = 75;
                    526: print_send: ;
                    527:            DLOG (compat_log, LLOG_DEBUG, ("send throughput %dbps", baud));
                    528:            break;
                    529: 
                    530:        case 4:
                    531:            baud = 150;
                    532:            goto print_send;
                    533: 
                    534:        case 5:
                    535:            baud = 300;
                    536:            goto print_send;
                    537: 
                    538:        case 6:
                    539:            baud = 600;
                    540:            goto print_send;
                    541: 
                    542:        case 7:
                    543:            baud = 1200;
                    544:            goto print_send;
                    545: 
                    546:        case 8:
                    547:            baud = 2400;
                    548:            goto print_send;
                    549: 
                    550:        case 9:
                    551:            baud = 4800;
                    552:            goto print_send;
                    553: 
                    554:        case 10:
                    555:            baud = 9600;
                    556:            goto print_send;
                    557: 
                    558:        case 11:
                    559:            baud = 19200;
                    560:            goto print_send;
                    561: 
                    562:        case 12:
                    563:            baud = 48000;
                    564:            goto print_send;
                    565: 
                    566:        default:
                    567:            DLOG (compat_log, LLOG_DEBUG, ("invalid send throughput %d",
                    568:                      f.sendthruput));
                    569:            break;
                    570:     }
                    571: 
                    572:     switch (f.cug_req) {
                    573:        case 0:
                    574:            DLOG (compat_log, LLOG_DEBUG, ("no closed user group"));
                    575:            break;
                    576: 
                    577:        case 1:
                    578:            DLOG (compat_log, LLOG_DEBUG, ("closed user group 0x%x (BCD)",
                    579:                      f.cug_req));
                    580:            break;
                    581: 
                    582:        default:
                    583:            DLOG (compat_log, LLOG_DEBUG, ("invalid closed user group %d",
                    584:                      f.cug_req));
                    585:            break;
                    586:     }
                    587: 
                    588:     switch (f.fast_select_type) {
                    589:        case FAST_OFF:
                    590:            DLOG (compat_log, LLOG_DEBUG, ("don't use fast select"));
                    591:            break;
                    592: 
                    593:        case FAST_CLR_ONLY:
                    594:            DLOG (compat_log, LLOG_DEBUG, ("clear is fast select response"));
                    595:            break;
                    596: 
                    597:        case FAST_ACPT_CLR:
                    598:            DLOG (compat_log, LLOG_DEBUG,
                    599:                  ("clear or call accepted is fast select response"));
                    600:            break;
                    601: 
                    602:        default:
                    603:            DLOG (compat_log, LLOG_DEBUG, ("invalid fast select type %d",
                    604:                      f.fast_select_type));
                    605:            break;
                    606:     }
                    607: 
                    608:     switch (f.rpoa_req) {
                    609:        case 0:
                    610:            DLOG (compat_log, LLOG_DEBUG, ("no RPOA transit request"));
                    611:            break;
                    612: 
                    613:        case 1:
                    614:            DLOG (compat_log, LLOG_DEBUG, ("RPOA transit request 0x%x",
                    615:                      f.rpoa_req));
                    616:            break;
                    617: 
                    618:        default:
                    619:            DLOG (compat_log, LLOG_DEBUG, ("invalid RPOA transit request %d",
                    620:                      f.rpoa_req));
                    621:     }
                    622: }
                    623: #endif
                    624: #endif
                    625: 
                    626: elucidate_x25_err (flags, pkt)
                    627: int flags;
                    628: char * pkt;
                    629: {
                    630:     char * cp;
                    631: 
                    632:     if (flags & (1 << RECV_DIAG)) {
                    633:        SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP,
                    634:              (( flags & (1 << DIAG_TYPE) ) ? "cleared 0x%02x" : "reset 0x%02x",
                    635:               pkt[0] ));
                    636: 
                    637:        if ((flags) & (1 << DIAG_TYPE)) /* cleared */
                    638:            switch(pkt[0]) {
                    639:                case 0x00:
                    640:                    cp = "DTE Clearing";
                    641:                    break;
                    642: 
                    643:                case 0x01:
                    644:                    cp = "Number Busy";
                    645:                    break;
                    646: 
                    647:                case 0x09:
                    648:                    cp = "Out of Order";
                    649:                    break;
                    650: 
                    651:                case 0x11:
                    652:                    cp = "Remote Procedure Error";
                    653:                    break;
                    654: 
                    655:                case 0x19:
                    656:                    cp = "Reverse Charging not subscribed";
                    657:                    break;
                    658: 
                    659:                case 0x03:
                    660:                    cp = "Invalid Facility Request";
                    661:                    break;
                    662: 
                    663:                case 0x0B:
                    664:                    cp = "Access Barred";
                    665:                    break;
                    666: 
                    667:                case 0x13:
                    668:                    cp = "Local Procedure Error";
                    669:                    break;
                    670: 
                    671:                case 0x05:
                    672:                    cp = "Network Congestion";
                    673:                    break;
                    674: 
                    675:                case 0x0D:
                    676:                    cp = "Not Obtainable";
                    677:                    break;
                    678: 
                    679:                case 0x21:
                    680:                    cp = "DTE Incompatible Call";
                    681:                    break;
                    682: 
                    683:                case 0x29:
                    684:                    cp = "Fast Select Acceptance not Subscribed";
                    685:                    break;
                    686: 
                    687:                default:
                    688:                    SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP,
                    689:                          ("clearing cause 0x2%x", pkt[0]));
                    690:                    goto next;
                    691:            }
                    692:        else /* reset */
                    693:            switch(pkt[0]) {
                    694:                case 0x00:
                    695:                    cp = "DTE Reset";
                    696:                    break;
                    697: 
                    698:                case 0x01:
                    699:                    cp = "Out of Order (PVC Only)";
                    700:                    break;
                    701: 
                    702:                case 0x03:
                    703:                    cp = "Remote Procedure Error";
                    704:                    break;
                    705: 
                    706:                case 0x05:
                    707:                    cp = "Local Procedure Error";
                    708:                    break;
                    709: 
                    710:                case 0x07:
                    711:                    cp = "Network Congestion";
                    712:                    break;
                    713: 
                    714:                case 0x09:
                    715:                    cp = "Remote DTE Operational (PVC Only)";
                    716:                    break;
                    717: 
                    718:                case 0x0F:
                    719:                    cp = "Network Operational (PVC Only";
                    720:                    break;
                    721: 
                    722:                default:
                    723:                    SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP,
                    724:                          ("resetting cause 0x%2x", pkt[0]));
                    725:                    goto next;
                    726: 
                    727:            }
                    728:        SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP, ("%s%s",
                    729:            ( flags & (1 << DIAG_TYPE) ) ? "clearing cause " :
                    730:            "resetting cause ", cp));
                    731: 
                    732: next: ;
                    733:        /* The following may only be applicable to PSS in the UK */
                    734:        /* In any case, if someone is keen, they can stuff it all
                    735:           into a text file and read it out */
                    736: 
                    737:        switch (pkt[1]) {
                    738:            case 0x00:
                    739:                cp = "NO ADDITIONAL INFORMATION";
                    740:                break;
                    741: 
                    742:            case 0x01:
                    743:                cp = "INVALID P(S)\tRESET";
                    744:                break;
                    745: 
                    746:            case 0x02:
                    747:                cp = "INVALID P(R)\tRESET";
                    748:                break;
                    749: 
                    750:            case 0x11:
                    751:                cp = "PACKET TYPE INVALID FOR STATE r1\tRESTART";
                    752:                break;
                    753: 
                    754:            case 0x12:
                    755:                cp = "PACKET TYPE INVALID FOR STATE r2\tRESTART";
                    756:                break;
                    757: 
                    758:            case 0x13:
                    759:                cp = "PACKET TYPE INVALID FOR STATE r3\tRESTART";
                    760:                break;
                    761: 
                    762:            case 0x14:
                    763:                cp = "PACKET TYPE INVALID FOR STATE p1\tCLEAR";
                    764:                break;
                    765: 
                    766:            case 0x15:
                    767:                cp = "PACKET TYPE INVALID FOR STATE p2\tCLEAR";
                    768:                break;
                    769: 
                    770:            case 0x16:
                    771:                cp = "PACKET TYPE INVALID FOR STATE p3\tCLEAR";
                    772:                break;
                    773: 
                    774:            case 0x17:
                    775:                cp = "PACKET TYPE INVALID FOR STATE p4\tCLEAR";
                    776:                break;
                    777: 
                    778:            case 0x18:
                    779:                cp = "PACKET TYPE INVALID FOR STATE p5\tRESET";
                    780:                break;
                    781: 
                    782:            case 0x19:
                    783:                cp = "PACKET TYPE INVALID FOR STATE p6\tCLEAR";
                    784:                break;
                    785: 
                    786:            case 0x1A:
                    787:                cp = "PACKET TYPE INVALID FOR STATE p7\tCLEAR";
                    788:                break;
                    789: 
                    790:            case 0x1B:
                    791:                cp = "PACKET TYPE INVALID FOR STATE d1\tRESET";
                    792:                break;
                    793: 
                    794:            case 0x1C:
                    795:                cp = "PACKET TYPE INVALID FOR STATE d2\tRESET";
                    796:                break;
                    797: 
                    798:            case 0x1D:
                    799:                cp = "PACKET TYPE INVALID FOR STATE d3\tRESET";
                    800:                break;
                    801: 
                    802:            case 0x20:
                    803:                cp = "PACKET NOT ALLOWED";
                    804:                break;
                    805: 
                    806:            case 0x21:
                    807:                cp = "UNIDENTIFIABLE PACKET";
                    808:                break;
                    809: 
                    810:            case 0x22:
                    811:                cp = "CALL ON ONE-WAY LOGICAL CHANNEL\tCLEAR";
                    812:                break;
                    813: 
                    814:            case 0x23:
                    815:                cp = "INVALID PACKET TYPE ON PVC\tRESET";
                    816:                break;
                    817: 
                    818:            case 0x24:
                    819:                cp = "PACKET ON UNASSIGNED LCN\tCLEAR";
                    820:                break;
                    821: 
                    822:            case 0x25:
                    823:                cp = "REJECT NOT SUBSCRIBED TO\tRESET";
                    824:                break;
                    825: 
                    826:            case 0x26:
                    827:                cp = "PACKET TOO SHORT\tRESET";
                    828:                break;
                    829: 
                    830:            case 0x27:
                    831:                cp = "PACKET TOO LONG\tRESET";
                    832:                break;
                    833: 
                    834:            case 0x28:
                    835:                cp = "INVALID GFI\tCLEAR";
                    836:                break;
                    837: 
                    838:            case 0x29:
                    839:                cp = "RESTART WITH NON-ZERO BITS 5-16";
                    840:                break;
                    841: 
                    842:            case 0x2A:
                    843:                cp = "PACKET TYPE NOT COMPATIBLE WITH FACILITY\tCLEAR";
                    844:                break;
                    845: 
                    846:            case 0x2B:
                    847:                cp = "UNAUTHORISED INTERRUPT CONF\tRESET";
                    848:                break;
                    849: 
                    850:            case 0x2C:
                    851:                cp = "UNAUTHORISED INTERRUPT\tRESET";
                    852:                break;
                    853: 
                    854:            case 0x31:
                    855:                cp = "TIMER EXPIRED;  INCOMING CALL";
                    856:                break;
                    857: 
                    858:            case 0x32:
                    859:                cp = "TIMER EXPIRED;\tCLEAR INDICATION";
                    860:                break;
                    861: 
                    862:            case 0x33:
                    863:                cp = "TIMER EXPIRED;\tRESET INDICATION";
                    864:                break;
                    865: 
                    866:            case 0x34:
                    867:                cp = "TIMER EXPIRED;\tRESTART IND";
                    868:                break;
                    869: 
                    870:            case 0x40:
                    871:                cp = "UNSPECIFIED CALL SET-UP PROBLEM CLEAR";
                    872:                break;
                    873: 
                    874:            case 0x41:
                    875:                cp = "FACILITY CODE NOT ALLOWED\tCLEAR";
                    876:                break;
                    877: 
                    878:            case 0x42:
                    879:                cp = "FACILITY PARAMETER NOT ALLOWED\tCLEAR";
                    880:                break;
                    881: 
                    882:            case 0x43:
                    883:                cp = "INVALID CALLED ADDRESS\tCLEAR";
                    884:                break;
                    885: 
                    886:            case 0x44:
                    887:                cp = "INVALID CALLING ADDRESS\tCLEAR";
                    888:                break;
                    889: 
                    890:            case 0x90:
                    891:                cp = "DTE/DCE CONGESTION\tRESET";
                    892:                break;
                    893: 
                    894:            case 0x91:
                    895:                cp = "RECEIVED FAST SELECT CLEAR REQUEST";
                    896:                break;
                    897: 
                    898:            case 0x92:
                    899:                cp = "LINE RESTARTING BY INMC COMMAND\tRESTART";
                    900:                break;
                    901: 
                    902:            case 0xA0:
                    903:                cp = "NON-ZERO RESET CAUSE FROM DTE\tRESET";
                    904:                break;
                    905: 
                    906:            case 0xA1:
                    907:                cp = "DATA PACKET TOO LONG\tRESET";
                    908:                break;
                    909: 
                    910:            case 0xA2:
                    911:                cp = "INTERRUPT PACKET TOO LONG\tRESET";
                    912:                break;
                    913: 
                    914:            case 0xA3:
                    915:                cp = "INT PACKET TOO SHORT; NO USER DATA\tRESET";
                    916:                break;
                    917: 
                    918:            case 0xA4:
                    919:                cp = "INT CONFIRMATION PACKET TOO LONG\tRESET";
                    920:                break;
                    921: 
                    922:            case 0xA5:
                    923:                cp = "RR PACKET TOO LONG\tRESET";
                    924:                break;
                    925: 
                    926:            case 0xA6:
                    927:                cp = "RNR PACKET TOO LONG\tRESET";
                    928:                break;
                    929: 
                    930:            case 0xA7:
                    931:                cp = "RESET PACKET TOO LONG\tRESET";
                    932:                break;
                    933: 
                    934:            case 0xA8:
                    935:                cp = "RESET CONF PACKET TOO LONG\tRESET";
                    936:                break;
                    937: 
                    938:            case 0xA9:
                    939:                cp = "INVALID `Q' BIT IN DATA PACKET\tRESET";
                    940:                break;
                    941: 
                    942:            case 0xAA:
                    943:                cp = "PACKET WINDOW RANGE EXCEEDED\tRESET";
                    944:                break;
                    945: 
                    946:            case 0xAB:
                    947:                cp = "UNABLE TO TRANSMIT PACKET\tRESET";
                    948:                break;
                    949: 
                    950:            case 0xAC:
                    951:                cp = "diagnostic `Q' BIT SET IN NON-DATA PACKET\tRESET";
                    952:                break;
                    953: 
                    954:            case 0xAD:
                    955:                cp = "OUTSTANDING PACKET COUNT LESS THAN ZERO\tRESET";
                    956:                break;
                    957: 
                    958:            case 0xAE:
                    959:                cp = "RETRANSMISSION ERROR\tRESET";
                    960:                break;
                    961: 
                    962:            case 0xAF:
                    963:                cp = "RESET PACKET TOO SHORT (NO CAUSE)\tRESET";
                    964:                break;
                    965: 
                    966:            case 0xB0:
                    967:                cp = "REJECT PACKET TOO LONG\tRESET";
                    968:                break;
                    969: 
                    970:            case 0xB1:
                    971:                cp = "INVALID 1D PACKET\tRESET";
                    972:                break;
                    973: 
                    974:            case 0xB2:
                    975:                cp = "UNSUCCESSFUL RECONNECTION RESNC\tCLEAR";
                    976:                break;
                    977: 
                    978:            case 0xB3:
                    979:                cp = "NON-RECONNECT CALL IN STATE C1\tCLEAR";
                    980:                break;
                    981: 
                    982:            case 0xB4:
                    983:                cp = "SECOND 1D PACKET FROM DTE\tCLEAR";
                    984:                break;
                    985: 
                    986:            case 0xB5:
                    987:                cp = "BAD DATA TRANSFER STATE IN RECONNECT\tCLEAR";
                    988:                break;
                    989: 
                    990:            case 0xB6:
                    991:                cp = "PACKET FORMAT INVALID\tCLEAR";
                    992:                break;
                    993: 
                    994:            case 0xB7:
                    995:                cp = "FACILITY BYTE COUNT TOO LARGE\tCLEAR";
                    996:                break;
                    997: 
                    998:            case 0xB8:
                    999:                cp = "INVALID PACKET DETECTED\tCLEAR";
                   1000:                break;
                   1001: 
                   1002:            case 0xB9:
                   1003:                cp = "FACILITY/UTILITY FIELD BYTE COUNT > 63\tCLEAR";
                   1004:                break;
                   1005: 
                   1006:            case 0xBA:
                   1007:                cp = "OUTGOING CALLS BARRED\tCLEAR";
                   1008:                break;
                   1009: 
                   1010:            case 0xBB:
                   1011:                cp = "INCOMING CALLS BARRED\tCLEAR";
                   1012:                break;
                   1013: 
                   1014:            case 0xBC:
                   1015:                cp = "CLEARING OF PVC\tCLEAR";
                   1016:                break;
                   1017: 
                   1018:            case 0xBD:
                   1019:                cp = "CALLED ADDRESS TOO LONG\tCLEAR";
                   1020:                break;
                   1021: 
                   1022:            case 0xBE:
                   1023:                cp = "CALLED ADDRESS TOO SHORT\tCLEAR";
                   1024:                break;
                   1025: 
                   1026:            case 0xBF:
                   1027:                cp = "CALLING ADDRESS TOO LONG\tCLEAR";
                   1028:                break;
                   1029: 
                   1030:            case 0xC0:
                   1031:                cp = "CALLING ADDRESS TOO SHORT\tCLEAR";
                   1032:                break;
                   1033: 
                   1034:            case 0xC1:
                   1035:                cp = "BCD ERROR IN CALL ADDRESS\tCLEAR";
                   1036:                break;
                   1037: 
                   1038:            case 0xC2:
                   1039:                cp = "BCD ERROR IN CALLING ADDRESS\tCLEAR";
                   1040:                break;
                   1041: 
                   1042:            case 0xC3:
                   1043:                cp = "USER DATA FIELD TOO LONG\tCLEAR";
                   1044:                break;
                   1045: 
                   1046:            case 0xC4:
                   1047:                cp = "NO BUFFER AVAILABLE\tCLEAR";
                   1048:                break;
                   1049: 
                   1050:            case 0xC5:
                   1051:                cp = "LOCAL DTE IS NOT ENHANCED\tCLEAR";
                   1052:                break;
                   1053: 
                   1054:            case 0xC6:
                   1055:                cp = "FACILITY NEGOTIATION INVALID\tCLEAR";
                   1056:                break;
                   1057: 
                   1058:            case 0xC7:
                   1059:                cp = "MANDATORY UTILITY NOT INPUT\tCLEAR";
                   1060:                break;
                   1061: 
                   1062:            case 0xC8:
                   1063:                cp = "BUFFER NO AVAILABLE FOR TNIC\tCLEAR";
                   1064:                break;
                   1065: 
                   1066:            case 0xC9:
                   1067:                cp = "OVERFLOW OF TNIC IN BUFFER\tCLEAR";
                   1068:                break;
                   1069: 
                   1070:            case 0xCA:
                   1071:                cp = "DTE LINE CONGESTED\tCLEAR";
                   1072:                break;
                   1073: 
                   1074:            case 0xCB:
                   1075:                cp = "TABLE ERROR IN PACKET PROCEDURES";
                   1076:                break;
                   1077: 
                   1078:            case 0xCC:
                   1079:                cp = "INSERT TABLE OVERFLOW";
                   1080:                break;
                   1081: 
                   1082:            case 0xCD:
                   1083:                cp = "DELETE TABLE OVERFLOW";
                   1084:                break;
                   1085: 
                   1086:            case 0xD0:
                   1087:                cp = "TRUNK LINE RESTART\tRESTART";
                   1088:                break;
                   1089: 
                   1090:            case 0xD1:
                   1091:                cp = "INVALID EVENT IN STATE p2";
                   1092:                break;
                   1093: 
                   1094:            case 0xD2:
                   1095:                cp = "INVALID EVENT IN STATE p3";
                   1096:                break;
                   1097: 
                   1098:            case 0xD3:
                   1099:                cp = "INVALID 1D EVENT IN STATE d1";
                   1100:                break;
                   1101: 
                   1102:            case 0xD4:
                   1103:                cp = "CALL COLLISION ON TRUNK LINE";
                   1104:                break;
                   1105: 
                   1106:            case 0xD5:
                   1107:                cp = "NO BUFFER AVAILABLE";
                   1108:                break;
                   1109: 
                   1110:            case 0xD6:
                   1111: 
                   1112:                cp = "CALL COLLISION ON DTE LINE";
                   1113:                break;
                   1114: 
                   1115:            case 0xD7:
                   1116:                cp = "DTE RESTART";
                   1117:                break;
                   1118: 
                   1119:            case 0xD8:
                   1120:                cp = "CALL REQUEST TO TRUNK LINE TIMEOUT";
                   1121:                break;
                   1122: 
                   1123:            case 0xD9:
                   1124:                cp = "RECONNECT SET-UP TIMED OUT";
                   1125:                break;
                   1126: 
                   1127:            case 0xDA:
                   1128:                cp = "INVALID OUTPUT SIDE STATE";
                   1129:                break;
                   1130: 
                   1131:            case 0xDB:
                   1132:                cp = "ERROR DETECTED IN BLINK PACKET QUEUE PROCEDURE";
                   1133:                break;
                   1134: 
                   1135:            case 0xDC:
                   1136:                cp = "RESET INDICATION RETRANSMISSION COUNT EXPIRED";
                   1137:                break;
                   1138: 
                   1139:            case 0xDD:
                   1140:                cp = "INVALID OUTPUT SIDE STATE";
                   1141:                break;
                   1142: 
                   1143:            case 0xDE:
                   1144:                cp = "BLIND BUFFER QUEUE OVERFLOW IN STATE d4";
                   1145:                break;
                   1146: 
                   1147:            case 0xDF:
                   1148:                cp = "BLIND BUFFER QUEUE OVERFLOW IN STATE c1";
                   1149:                break;
                   1150: 
                   1151:            case 0xE0:
                   1152:                cp = "BLIND BUFFER QUEUE OVERFLOW IN STATE c2";
                   1153:                break;
                   1154: 
                   1155:            case 0xE1:
                   1156:                cp = "CLEAR PACKET BYTE COUNT TOO LARGE OR TOO SMALL";
                   1157:                break;
                   1158: 
                   1159:            case 0xE2:
                   1160:                cp = "NON-ZERO\tCLEAR CAUSE";
                   1161:                break;
                   1162: 
                   1163:            case 0xE3:
                   1164:                cp = "CLEAR CONF PACKET BYTE COUNT TOO SMALL OR TOO LARGE";
                   1165:                break;
                   1166: 
                   1167:            case 0xE4:
                   1168:                cp = "CALL COLLISION";
                   1169:                break;
                   1170: 
                   1171:            case 0xE5:
                   1172:                cp = "INVALID TP LOAD REQUEST CALL PKT";
                   1173:                break;
                   1174: 
                   1175:            case 0xE6:
                   1176:                cp = "MAXIMUM HOPCOUNT EXCEEDED";
                   1177:                break;
                   1178: 
                   1179:            case 0xE7:
                   1180:                cp = "ROUTING LOOP DETECTED";
                   1181:                break;
                   1182: 
                   1183:            case 0xE8:
                   1184:                cp = "PVC CALL REQUEST FAILURE";
                   1185:                break;
                   1186: 
                   1187:            case 0xE9:
                   1188:                cp = "RECONNECT CALL REQUEST FAILED";
                   1189:                break;
                   1190: 
                   1191:            case 0xEA:
                   1192:                cp = "NO LC AVAILABLE ON OUTPUT SIDE";
                   1193:                break;
                   1194: 
                   1195:            case 0xEB:
                   1196:                cp = "NO BUFFER AVAILABLE";
                   1197:                break;
                   1198: 
                   1199:            case 0xEC:
                   1200:                cp = "CALL REDIRECTION CLEAR";
                   1201:                break;
                   1202: 
                   1203:            case 0xED:
                   1204:                cp = "NO PATH ROUTE CALL";
                   1205:                break;
                   1206: 
                   1207:            case 0xEE:
                   1208:                cp = "CALL ROUTED TO DTE LINE";
                   1209:                break;
                   1210: 
                   1211:            case 0xEF:
                   1212:                cp = "CALL CANNOT BE REROUTED";
                   1213:                break;
                   1214: 
                   1215:            case 0xF0:
                   1216:                cp = "ADDRESS NOT IN ROUTING TABLES";
                   1217:                break;
                   1218: 
                   1219:            case 0xF1:
                   1220:                cp = "ROUTING TABLE CHANGE DURING CALL ROUTING";
                   1221:                break;
                   1222: 
                   1223:            case 0xF2:
                   1224:                cp = "NO LC AVAILABLE ON FAKE TRUNK";
                   1225:                break;
                   1226: 
                   1227:            case 0xF3:
                   1228:                cp = "REMOTE DTE DOWN ON A PVC";
                   1229:                break;
                   1230: 
                   1231:            case 0xF4:
                   1232:                cp = "INVALID EVENT DETECTED";
                   1233:                break;
                   1234: 
                   1235:            case 0xF5:
                   1236:                cp = "INVALID PACKET RECEIVED; STATE d4";
                   1237:                break;
                   1238: 
                   1239:            case 0xF6:
                   1240:                cp = "INVALID PACKET RECEIVED; STATE d5";
                   1241:                break;
                   1242: 
                   1243:            case 0xF7:
                   1244:                cp = "INVALID PACKET RECEIVED; STATE p8";
                   1245:                break;
                   1246: 
                   1247:            case 0xF8:
                   1248:                cp = "INTERNAL PROCESSING FAILURE";
                   1249:                break;
                   1250: 
                   1251:            case 0xF9:
                   1252:                cp = "INVALID RESTART INDICATION";
                   1253:                break;
                   1254: 
                   1255:            case 0xFA:
                   1256:                cp = "LINE STATUS CHANGE IN STATE r4";
                   1257:                break;
                   1258: 
                   1259:            case 0xFB:
                   1260:                cp = "INVALID PACKET RECEIVED; STATE r4";
                   1261:                break;
                   1262: 
                   1263:            case 0xFC:
                   1264:                cp = "INVALID PACKET RECEIVED; STATE r3";
                   1265:                break;
                   1266: 
                   1267:            case 0xFD:
                   1268:                cp = "LINE STATUS CHANGE IN STATE r2";
                   1269:                break;
                   1270: 
                   1271:            case 0xFE:
                   1272:                cp = "LINE STATUS CHANGE IN STATE r1";
                   1273:                break;
                   1274: 
                   1275:            case 0xFF:
                   1276:                cp = "LINE STATUS CHANGE IN STATE r0";
                   1277:                break;
                   1278: 
                   1279:            default:
                   1280:                SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP,
                   1281:                      ("diagnostic: 0x%2x", pkt[1]));
                   1282:                goto done;
                   1283:        }
                   1284:        SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP, ("diagnostic %s", cp));
                   1285:     }
                   1286:     else        /* Not RECV_DIAG */
                   1287:        if (flags)
                   1288:            SLOG (compat_log, LLOG_EXCEPTIONS, NULLCP,
                   1289:                  ("diag flags: 0x%02x", flags));
                   1290: 
                   1291: done: ;
                   1292:     return OK;
                   1293: }
                   1294: 
                   1295: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.