Annotation of 43BSDReno/contrib/isode-beta/compat/sunlink.c, revision 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.