Annotation of 43BSDReno/contrib/isode-beta/snmp/clnp.c, revision 1.1.1.1

1.1       root        1: /* clnp.c - MIB realization of the experimental CLNP group */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/snmp/RCS/clnp.c,v 7.5 90/07/09 14:48:34 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/snmp/RCS/clnp.c,v 7.5 90/07/09 14:48:34 mrose Exp $
                      9:  *
                     10:  * Contributed by NYSERNet Inc.  This work was partially supported by the
                     11:  * U.S. Defense Advanced Research Projects Agency and the Rome Air Development
                     12:  * Center of the U.S. Air Force Systems Command under contract number
                     13:  * F30602-88-C-0016.
                     14:  *
                     15:  *
                     16:  * $Log:       clnp.c,v $
                     17:  * Revision 7.5  90/07/09  14:48:34  mrose
                     18:  * sync
                     19:  * 
                     20:  * Revision 7.4  90/05/22  20:30:21  mrose
                     21:  * cache
                     22:  * 
                     23:  * Revision 7.3  90/02/27  18:49:28  mrose
                     24:  * unix stuff
                     25:  * 
                     26:  * Revision 7.2  90/02/17  10:37:37  mrose
                     27:  * smux
                     28:  * 
                     29:  * Revision 7.1  90/01/11  18:33:54  mrose
                     30:  * real-sync
                     31:  * 
                     32:  * Revision 7.0  89/11/23  22:22:55  mrose
                     33:  * Release 6.0
                     34:  * 
                     35:  */
                     36: 
                     37: /*
                     38:  *                               NOTICE
                     39:  *
                     40:  *    Acquisition, use, and distribution of this module and related
                     41:  *    materials are subject to the restrictions of a license agreement.
                     42:  *    Consult the Preface in the User's Manual for the full terms of
                     43:  *    this agreement.
                     44:  *
                     45:  */
                     46: 
                     47: 
                     48: #include <stdio.h>
                     49: #include "mib.h"
                     50: #include "interfaces.h"
                     51: #include "routes.h"
                     52: 
                     53: #ifdef BSD44
                     54: #include <sys/kinfo.h>
                     55: #include <net/if_dl.h>
                     56: #include <netiso/iso_snpac.h>
                     57: #define        CLNP_ER_CODES
                     58: #include <netiso/clnp.h>
                     59: #include <netiso/clnp_stat.h>
                     60: #include <netiso/esis.h>
                     61: 
                     62: /*  */
                     63: 
                     64: #define        FORW_IS         1               /* clnpForwarding */
                     65: #define        FORW_ES         2
                     66: static int     iso_systype;
                     67: 
                     68: static struct clnp_stat clnp_stat;
                     69: 
                     70: /*  */
                     71: 
                     72: #define        clnpForwarding  0
                     73: #define        clnpDefaultLifeTime 1
                     74: #define        clnpInReceives  2
                     75: #define        clnpInHdrErrors 3
                     76: #define        clnpInAddrErrors 4
                     77: #define        clnpForwPDUs    5
                     78: #undef clnpInUnknownNLPs 6             /* NOT IMPLEMENTED */
                     79: #define        clnpInUnknownULPs 7
                     80: #undef clnpInDiscards  8               /* NOT IMPLEMENTED */
                     81: #define        clnpInDelivers  9
                     82: #define        clnpOutRequests 10
                     83: #define        clnpOutDiscards 11
                     84: #define        clnpOutNoRoutes 12
                     85: #define        clnpReasmTimeout 13
                     86: #define        clnpReasmReqds  14
                     87: #define        clnpReasmOKs    15
                     88: #define        clnpReasmFails  16
                     89: #define        clnpSegOKs      17
                     90: #define        clnpSegFails    18
                     91: #define        clnpSegCreates  19
                     92: #undef clnpInOpts      20              /* NOT IMPLEMENTED */
                     93: #undef clnpInOpts      21              /* NOT IMPLEMENTED */
                     94: 
                     95: #define        clnpInErrors    (100 + 0)
                     96: #define        clnpOutErrors   (100 + 1)
                     97: #define        clnpInErrUnspecs (100 + 2)
                     98: #define        clnpInErrProcs  (100 + 3)
                     99: #define        clnpInErrCksums (100 + 4)
                    100: #define        clnpInErrCongests (100 + 5)
                    101: #define        clnpInErrHdrs   (100 + 6)
                    102: #define        clnpInErrSegs   (100 + 7)
                    103: #define        clnpInErrIncomps (100 + 8)
                    104: #define        clnpInErrDups   (100 + 9)
                    105: #define        clnpInErrUnreachDsts (100 + 10)
                    106: #define        clnpInErrUnknownDsts (100 + 11)
                    107: #define        clnpInErrSRUnspecs (100 + 12)
                    108: #define        clnpInErrSRSyntaxes (100 + 13)
                    109: #define        clnpInErrSRUnkAddrs (100 + 14)
                    110: #define        clnpInErrSRBadPaths (100 + 15)
                    111: #define        clnpInErrHops   (100 + 16)
                    112: #define        clnpInErrHopReassms (100 + 17)
                    113: #define        clnpInErrUnsOptions (100 + 18)
                    114: #define        clnpInErrUnsVersions (100 + 19)
                    115: #define        clnpInErrUnsSecurities (100 + 20)
                    116: #define        clnpInErrUnsSRs (100 + 21)
                    117: #define        clnpInErrUnsRRs (100 + 22)
                    118: #define        clnpInErrInterferences (100 + 23)
                    119: #define        clnpOutErrUnspecs       (100 + 24)
                    120: #define        clnpOutErrProcs (100 + 25)
                    121: #define        clnpOutErrCksums (100 + 26)
                    122: #define        clnpOutErrCongests (100 + 27)
                    123: #define        clnpOutErrHdrs  (100 + 28)
                    124: #define        clnpOutErrSegs  (100 + 29)
                    125: #define        clnpOutErrIncomps (100 + 30)
                    126: #define        clnpOutErrDups  (100 + 31)
                    127: #define        clnpOutErrUnreachDsts (100 + 32)
                    128: #define        clnpOutErrUnknownDsts (100 + 33)
                    129: #define        clnpOutErrSRUnspecs (100 + 34)
                    130: #define        clnpOutErrSRSyntaxes (100 + 35)
                    131: #define        clnpOutErrSRUnkAddrs (100 + 36)
                    132: #define        clnpOutErrSRBadPaths (100 + 37)
                    133: #define        clnpOutErrHops  (100 + 38)
                    134: #define        clnpOutErrHopReassms (100 + 39)
                    135: #define        clnpOutErrUnsOptions (100 + 40)
                    136: #define        clnpOutErrUnsVersions (100 + 41)
                    137: #define        clnpOutErrUnsSecurities (100 + 42)
                    138: #define        clnpOutErrUnsSRs (100 + 43)
                    139: #define        clnpOutErrUnsRRs (100 + 44)
                    140: #define        clnpOutErrInterferences (100 + 45)
                    141: 
                    142: 
                    143: static int  o_clnp (oi, v, offset)
                    144: OI     oi;
                    145: register struct type_SNMP_VarBind *v;
                    146: int    offset;
                    147: {
                    148:     register int   *dp,
                    149:                   *ep,
                    150:                    j;
                    151:     int            ifvar;
                    152:     register struct clnp_stat *cns = &clnp_stat;
                    153:     register OID    oid = oi -> oi_name;
                    154:     register OT            ot = oi -> oi_type;
                    155:     static   int lastq = -1;
                    156: 
                    157:     ifvar = (int) ot -> ot_info;
                    158:     switch (offset) {
                    159:        case type_SNMP_PDUs_get__request:
                    160:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
                    161:                    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
                    162:                return int_SNMP_error__status_noSuchName;
                    163:            break;
                    164: 
                    165:        case type_SNMP_PDUs_get__next__request:
                    166:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                    167:                OID     new;
                    168: 
                    169:                if ((new = oid_extend (oid, 1)) == NULLOID)
                    170:                    return int_SNMP_error__status_genErr;
                    171:                new -> oid_elements[new -> oid_nelem - 1] = 0;
                    172: 
                    173:                if (v -> name)
                    174:                    free_SNMP_ObjectName (v -> name);
                    175:                v -> name = new;
                    176:            }
                    177:            else
                    178:                return NOTOK;
                    179:            break;
                    180: 
                    181:        default:
                    182:            return int_SNMP_error__status_genErr;
                    183:     }
                    184: 
                    185:     switch (ifvar) {
                    186:        case clnpDefaultLifeTime:
                    187:        case clnpReasmTimeout:
                    188:            break;
                    189:            
                    190:        default:
                    191:            if (quantum != lastq) {
                    192:                lastq = quantum;
                    193: 
                    194:                if (getkmem (nl + N_ISO_SYSTYPE, (caddr_t) &iso_systype,
                    195:                             sizeof iso_systype) == NOTOK
                    196:                        || getkmem (nl + N_CLNP_STAT, (caddr_t) cns,
                    197:                                    sizeof *cns) == NOTOK)
                    198:                    return int_SNMP_error__status_genErr;
                    199:            }
                    200:            break;
                    201:     }
                    202: 
                    203:     switch (ifvar) {
                    204:        case clnpForwarding:
                    205:            return o_integer (oi, v,
                    206:                              iso_systype & SNPA_ES ? FORW_ES : FORW_IS);
                    207: 
                    208:        case clnpDefaultLifeTime:
                    209:            return o_integer (oi, v, CLNP_TTL);
                    210: 
                    211:        case clnpInReceives:
                    212:            return o_integer (oi, v, cns -> cns_total);
                    213: 
                    214:        case clnpInHdrErrors:
                    215:            return o_integer (oi, v, cns -> cns_toosmall
                    216:                                   + cns -> cns_badhlen
                    217:                                   + cns -> cns_badcsum
                    218:                                   + cns -> cns_noseg
                    219:                                   + cns -> cns_badvers);
                    220: 
                    221:        case clnpInAddrErrors:
                    222:            return o_integer (oi, v, cns -> cns_badaddr);
                    223: 
                    224:        case clnpForwPDUs:
                    225:            return o_integer (oi, v, cns -> cns_forward);
                    226: 
                    227:        case clnpInUnknownULPs:
                    228:            return o_integer (oi, v, cns -> cns_noproto);
                    229: 
                    230:        case clnpInDelivers:
                    231:            return o_integer (oi, v, cns -> cns_delivered);
                    232: 
                    233:        case clnpOutRequests:
                    234:            return o_integer (oi, v, cns -> cns_sent - cns -> cns_forward);
                    235: 
                    236:        case clnpOutDiscards:
                    237:            return o_integer (oi, v, cns -> cns_odropped);
                    238: 
                    239:        case clnpOutNoRoutes:
                    240:            return o_integer (oi, v, cns -> cns_cantforward);
                    241: 
                    242:        case clnpReasmTimeout:
                    243:            return o_integer (oi, v, CLNP_TTL);
                    244: 
                    245:        case clnpReasmReqds:
                    246:            return o_integer (oi, v, cns -> cns_fragments);
                    247: 
                    248:        case clnpReasmOKs:
                    249:            return o_integer (oi, v, cns -> cns_reassembled);
                    250: 
                    251:        case clnpReasmFails:
                    252:            return o_integer (oi, v, cns -> cns_fragdropped
                    253:                                   + cns -> cns_fragtimeout);
                    254: 
                    255:        case clnpSegOKs:
                    256:            return o_integer (oi, v, cns -> cns_fragmented);
                    257: 
                    258:        case clnpSegFails:
                    259:            return o_integer (oi, v, cns -> cns_cantfrag);
                    260: 
                    261:        case clnpSegCreates:
                    262:            return o_integer (oi, v, cns -> cns_ofragments);
                    263: 
                    264:        case clnpInErrors:
                    265:            j = 0;
                    266:            for (ep = (dp = cns -> cns_er_inhist) + CLNP_ERRORS; dp <= ep; )
                    267:                j += *dp++;
                    268:            return o_integer (oi, v, j);
                    269: 
                    270:        case clnpOutErrors:
                    271:            j = 0;
                    272:            for (ep = (dp = cns -> cns_er_outhist) + CLNP_ERRORS; dp <= ep; )
                    273:                j += *dp++;
                    274:            return o_integer (oi, v, j);
                    275: 
                    276: #define        clnpInputError(r)       cns -> cns_er_inhist[clnp_er_index (r)]
                    277: 
                    278:        case clnpInErrUnspecs:
                    279:            return o_integer (oi, v, clnpInputError (GEN_NOREAS));
                    280: 
                    281:        case clnpInErrProcs:
                    282:            return o_integer (oi, v, clnpInputError (GEN_PROTOERR));
                    283: 
                    284:        case clnpInErrCksums:
                    285:            return o_integer (oi, v, clnpInputError (GEN_BADCSUM));
                    286: 
                    287:        case clnpInErrCongests:
                    288:            return o_integer (oi, v, clnpInputError (GEN_CONGEST));
                    289: 
                    290:        case clnpInErrHdrs:
                    291:            return o_integer (oi, v, clnpInputError (GEN_HDRSYNTAX));
                    292: 
                    293:        case clnpInErrSegs:
                    294:            return o_integer (oi, v, clnpInputError (GEN_SEGNEEDED));
                    295: 
                    296:        case clnpInErrIncomps:
                    297:            return o_integer (oi, v, clnpInputError (GEN_INCOMPLETE));
                    298: 
                    299:        case clnpInErrDups:
                    300:            return o_integer (oi, v, clnpInputError (GEN_DUPOPT));
                    301: 
                    302:        case clnpInErrUnreachDsts:
                    303:            return o_integer (oi, v, clnpInputError (ADDR_DESTUNREACH));
                    304: 
                    305:        case clnpInErrUnknownDsts:
                    306:            return o_integer (oi, v, clnpInputError (ADDR_DESTUNKNOWN));
                    307: 
                    308:        case clnpInErrSRUnspecs:
                    309:            return o_integer (oi, v, clnpInputError (SRCRT_UNSPECERR));
                    310: 
                    311:        case clnpInErrSRSyntaxes:
                    312:            return o_integer (oi, v, clnpInputError (SRCRT_SYNTAX));
                    313: 
                    314:        case clnpInErrSRUnkAddrs:
                    315:            return o_integer (oi, v, clnpInputError (SRCRT_UNKNOWNADDR));
                    316: 
                    317:        case clnpInErrSRBadPaths:
                    318:            return o_integer (oi, v, clnpInputError (SRCRT_BADPATH));
                    319: 
                    320:        case clnpInErrHops:
                    321:            return o_integer (oi, v, clnpInputError (TTL_EXPTRANSIT));
                    322: 
                    323:        case clnpInErrHopReassms:
                    324:            return o_integer (oi, v, clnpInputError (TTL_EXPREASS));
                    325: 
                    326:        case clnpInErrUnsOptions:
                    327:            return o_integer (oi, v, clnpInputError (DISC_UNSUPPOPT));
                    328: 
                    329:        case clnpInErrUnsVersions:
                    330:            return o_integer (oi, v, clnpInputError (DISC_UNSUPPVERS));
                    331: 
                    332:        case clnpInErrUnsSecurities:
                    333:            return o_integer (oi, v, clnpInputError (DISC_UNSUPPSECURE));
                    334: 
                    335:        case clnpInErrUnsSRs:
                    336:            return o_integer (oi, v, clnpInputError (DISC_UNSUPPSRCRT));
                    337: 
                    338:        case clnpInErrUnsRRs:
                    339:            return o_integer (oi, v, clnpInputError (DISC_UNSUPPRECRT));
                    340: 
                    341:        case clnpInErrInterferences:
                    342:            return o_integer (oi, v, clnpInputError (REASS_INTERFERE));
                    343: 
                    344: #undef clnpInputError
                    345: #define        clnpOutputError(r)      cns -> cns_er_outhist[clnp_er_index (r)]
                    346: 
                    347:        case clnpOutErrUnspecs:
                    348:            return o_integer (oi, v, clnpOutputError (GEN_NOREAS));
                    349: 
                    350:        case clnpOutErrProcs:
                    351:            return o_integer (oi, v, clnpOutputError (GEN_PROTOERR));
                    352: 
                    353:        case clnpOutErrCksums:
                    354:            return o_integer (oi, v, clnpOutputError (GEN_BADCSUM));
                    355: 
                    356:        case clnpOutErrCongests:
                    357:            return o_integer (oi, v, clnpOutputError (GEN_CONGEST));
                    358: 
                    359:        case clnpOutErrHdrs:
                    360:            return o_integer (oi, v, clnpOutputError (GEN_HDRSYNTAX));
                    361: 
                    362:        case clnpOutErrSegs:
                    363:            return o_integer (oi, v, clnpOutputError (GEN_SEGNEEDED));
                    364: 
                    365:        case clnpOutErrIncomps:
                    366:            return o_integer (oi, v, clnpOutputError (GEN_INCOMPLETE));
                    367: 
                    368:        case clnpOutErrDups:
                    369:            return o_integer (oi, v, clnpOutputError (GEN_DUPOPT));
                    370: 
                    371:        case clnpOutErrUnreachDsts:
                    372:            return o_integer (oi, v, clnpOutputError (ADDR_DESTUNREACH));
                    373: 
                    374:        case clnpOutErrUnknownDsts:
                    375:            return o_integer (oi, v, clnpOutputError (ADDR_DESTUNKNOWN));
                    376: 
                    377:        case clnpOutErrSRUnspecs:
                    378:            return o_integer (oi, v, clnpOutputError (SRCRT_UNSPECERR));
                    379: 
                    380:        case clnpOutErrSRSyntaxes:
                    381:            return o_integer (oi, v, clnpOutputError (SRCRT_SYNTAX));
                    382: 
                    383:        case clnpOutErrSRUnkAddrs:
                    384:            return o_integer (oi, v, clnpOutputError (SRCRT_UNKNOWNADDR));
                    385: 
                    386:        case clnpOutErrSRBadPaths:
                    387:            return o_integer (oi, v, clnpOutputError (SRCRT_BADPATH));
                    388: 
                    389:        case clnpOutErrHops:
                    390:            return o_integer (oi, v, clnpOutputError (TTL_EXPTRANSIT));
                    391: 
                    392:        case clnpOutErrHopReassms:
                    393:            return o_integer (oi, v, clnpOutputError (TTL_EXPREASS));
                    394: 
                    395:        case clnpOutErrUnsOptions:
                    396:            return o_integer (oi, v, clnpOutputError (DISC_UNSUPPOPT));
                    397: 
                    398:        case clnpOutErrUnsVersions:
                    399:            return o_integer (oi, v, clnpOutputError (DISC_UNSUPPVERS));
                    400: 
                    401:        case clnpOutErrUnsSecurities:
                    402:            return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSECURE));
                    403: 
                    404:        case clnpOutErrUnsSRs:
                    405:            return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSRCRT));
                    406: 
                    407:        case clnpOutErrUnsRRs:
                    408:            return o_integer (oi, v, clnpOutputError (DISC_UNSUPPRECRT));
                    409: 
                    410:        case clnpOutErrInterferences:
                    411:            return o_integer (oi, v, clnpOutputError (REASS_INTERFERE));
                    412: 
                    413: #undef clnpOutputError
                    414: 
                    415:        default:
                    416:            return int_SNMP_error__status_noSuchName;
                    417:     }
                    418: }
                    419: 
                    420: /*  */
                    421: 
                    422: static int  clnp_er_index (p)
                    423: u_char p;
                    424: {
                    425:     register u_char *cp = clnp_er_codes + CLNP_ERRORS;
                    426: 
                    427:     while (cp-- > clnp_er_codes)
                    428:        if (*cp == p)
                    429:            return (cp - clnp_er_codes);
                    430: 
                    431:     return (CLNP_ERRORS + 1);
                    432: }
                    433: 
                    434: /*  */
                    435: 
                    436: #define        CLNP_MAXPACKET  65535           /* clnpAdEntReasmMaxSize */
                    437:                                        /* equivalent of IP_MAXPACKET */
                    438: 
                    439: 
                    440: #define        clnpAdEntAddr   0
                    441: #define        clnpAdEntIfIndex 1
                    442: #define        clnpAdEntNetMask 2
                    443: #define        clnpAdEntReasmMaxSize 3
                    444: 
                    445: 
                    446: static int  o_clnp_addr (oi, v, offset)
                    447: OI     oi;
                    448: register struct type_SNMP_VarBind *v;
                    449: int    offset;
                    450: {
                    451:     register int   i;
                    452:     int            ifvar;
                    453:     register unsigned int *ip,
                    454:                          *jp;
                    455:     register struct address   *as;
                    456:     register OID    oid = oi -> oi_name;
                    457:     register OT            ot = oi -> oi_type;
                    458: 
                    459:     if (sort_interfaces () == NOTOK)
                    460:        return int_SNMP_error__status_genErr;
                    461: 
                    462:     ifvar = (int) ot -> ot_info;
                    463:     switch (offset) {
                    464:        case type_SNMP_PDUs_get__request:
                    465:            if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
                    466:                return int_SNMP_error__status_noSuchName;
                    467:            if ((as = get_addrent (oid -> oid_elements
                    468:                                        + ot -> ot_name -> oid_nelem,
                    469:                                   oid -> oid_nelem
                    470:                                        - ot -> ot_name -> oid_nelem,
                    471:                                   afs_iso, 0)) == NULL)
                    472:                return int_SNMP_error__status_noSuchName;
                    473:            break;
                    474: 
                    475:        case type_SNMP_PDUs_get__next__request:
                    476:            if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
                    477:                return int_SNMP_error__status_noSuchName;
                    478:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                    479:                OID     new;
                    480: 
                    481:                if ((as = afs_iso) == NULL)
                    482:                    return NOTOK;
                    483: 
                    484:                if ((new = oid_extend (oid, as -> adr_insize)) == NULLOID)
                    485:                    return int_SNMP_error__status_genErr;
                    486:                ip = new -> oid_elements + new -> oid_nelem - as -> adr_insize;
                    487:                jp = as -> adr_instance;
                    488:                for (i = as -> adr_insize; i > 0; i--)
                    489:                    *ip++ = *jp++;
                    490:                
                    491:                if (v -> name)
                    492:                    free_SNMP_ObjectName (v -> name);
                    493:                v -> name = new;
                    494:            }
                    495:            else {
                    496:                int     j;
                    497:                
                    498:                if ((as = get_addrent (oid -> oid_elements
                    499:                                           + ot -> ot_name -> oid_nelem,
                    500:                                       j = oid -> oid_nelem
                    501:                                               - ot -> ot_name -> oid_nelem,
                    502:                                       afs_iso, 1)) == NULL)
                    503:                    return NOTOK;
                    504: 
                    505:                if ((i = j - as -> adr_insize) < 0) {
                    506:                    OID     new;
                    507: 
                    508:                    if ((new = oid_extend (oid, -i)) == NULLOID)
                    509:                        return int_SNMP_error__status_genErr;
                    510:                    if (v -> name)
                    511:                        free_SNMP_ObjectName (v -> name);
                    512:                    v -> name = new;
                    513: 
                    514:                    oid = new;
                    515:                }
                    516:                else
                    517:                    if (i > 0)
                    518:                        oid -> oid_nelem -= i;
                    519: 
                    520:                ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
                    521:                jp = as -> adr_instance;
                    522:                for (i = as -> adr_insize; i > 0; i--)
                    523:                    *ip++ = *jp++;
                    524:            }
                    525:            break;
                    526: 
                    527:        default:
                    528:            return int_SNMP_error__status_genErr;
                    529:     }
                    530: 
                    531:     switch (ifvar) {
                    532:        case clnpAdEntAddr:
                    533:            return o_clnpaddr (oi, v,
                    534:                               (struct sockaddr_iso *) &as -> adr_address);
                    535: 
                    536:        case clnpAdEntIfIndex:
                    537:            return o_integer (oi, v, ffs (as -> adr_indexmask));
                    538: 
                    539:        case clnpAdEntNetMask:
                    540:            return o_clnpaddr (oi, v,
                    541:                               (struct sockaddr_iso *) &as -> adr_netmask);
                    542: 
                    543:        case clnpAdEntReasmMaxSize:
                    544:            return o_integer (oi, v, CLNP_MAXPACKET);
                    545: 
                    546:        default:
                    547:            return int_SNMP_error__status_noSuchName;
                    548:     }
                    549: }
                    550: 
                    551: /*  */
                    552: 
                    553: #define        clnpRouteDest   0
                    554: #define        clnpRouteIfIndex 1
                    555: #define        clnpRouteMetric1 2
                    556: #define        clnpRouteMetric2 3
                    557: #define        clnpRouteMetric3 4
                    558: #define        clnpRouteMetric4 5
                    559: #define        clnpRouteNextHop 6
                    560: #define        clnpRouteType   7
                    561: #define        clnpRouteProto  8
                    562: #define        clnpRouteAge    9
                    563: #define        unixClnpRouteFlags 10
                    564: #define        unixClnpRouteRefCnt 11
                    565: #define        unixClnpRouteUses       12
                    566: 
                    567: 
                    568: static int  o_clnp_route (oi, v, offset)
                    569: OI     oi;
                    570: register struct type_SNMP_VarBind *v;
                    571: int    offset;
                    572: {
                    573:     int            ifvar;
                    574:     register int    i;
                    575:     register unsigned int *ip,
                    576:                          *jp;
                    577:     register struct rtetab *rt;
                    578:     register OID    oid = oi -> oi_name;
                    579:     register OT            ot = oi -> oi_type;
                    580: 
                    581:     if (get_routes (offset) == NOTOK)
                    582:        return int_SNMP_error__status_genErr;
                    583: 
                    584:     ifvar = (int) ot -> ot_info;
                    585:     switch (offset) {
                    586:        case type_SNMP_PDUs_get__request:
                    587:            if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
                    588:                return int_SNMP_error__status_noSuchName;
                    589:            if ((rt = get_rtent (oid -> oid_elements
                    590:                                     + ot -> ot_name -> oid_nelem,
                    591:                                 oid -> oid_nelem
                    592:                                     - ot -> ot_name -> oid_nelem,
                    593:                                 rts_iso, 0)) == NULL)
                    594:                return int_SNMP_error__status_noSuchName;
                    595:            break;
                    596: 
                    597:        case type_SNMP_PDUs_get__next__request:
                    598:            if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
                    599:                return int_SNMP_error__status_noSuchName;
                    600:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                    601:                OID     new;
                    602: 
                    603:                if ((rt = rts_iso) == NULL)
                    604:                    return NOTOK;
                    605: 
                    606:                if ((new = oid_extend (oid, rt -> rt_insize)) == NULLOID)
                    607:                    return int_SNMP_error__status_genErr;
                    608:                ip = new -> oid_elements + new -> oid_nelem - rt -> rt_insize;
                    609:                jp = rt -> rt_instance;
                    610:                for (i = rt -> rt_insize; i > 0; i--)
                    611:                    *ip++ = *jp++;
                    612:                
                    613:                if (v -> name)
                    614:                    free_SNMP_ObjectName (v -> name);
                    615:                v -> name = new;
                    616:            }
                    617:            else {
                    618:                int     j;
                    619: 
                    620:                if ((rt = get_rtent (oid -> oid_elements
                    621:                                         + ot -> ot_name -> oid_nelem,
                    622:                                     j = oid -> oid_nelem
                    623:                                             - ot -> ot_name -> oid_nelem,
                    624:                                     rts_iso, 1)) == NULL)
                    625:                    return NOTOK;
                    626: 
                    627:                if ((i = j - rt -> rt_insize) < 0) {
                    628:                    OID     new;
                    629: 
                    630:                    if ((new = oid_extend (oid, -i)) == NULLOID)
                    631:                        return int_SNMP_error__status_genErr;
                    632:                    if (v -> name)
                    633:                        free_SNMP_ObjectName (v -> name);
                    634:                    v -> name = new;
                    635: 
                    636:                    oid = new;
                    637:                }
                    638:                else
                    639:                    if (i > 0)
                    640:                        oid -> oid_nelem -= i;
                    641: 
                    642:                ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
                    643:                jp = rt -> rt_instance;
                    644:                for (i = rt -> rt_insize; i > 0; i--)
                    645:                    *ip++ = *jp++;
                    646:            }
                    647:            break;
                    648: 
                    649:        default:
                    650:            return int_SNMP_error__status_genErr;
                    651:     }
                    652: 
                    653:     switch (ifvar) {
                    654:        case clnpRouteDest:
                    655:            return o_clnpaddr (oi, v,
                    656:                             (struct sockaddr_iso *) &rt -> rt_dst);
                    657: 
                    658:        case clnpRouteIfIndex:
                    659:            {
                    660:                register struct interface *is;
                    661: 
                    662:                for (is = ifs; is; is = is -> ifn_next)
                    663:                    if ((caddr_t) is -> ifn_offset
                    664:                                == (caddr_t) rt -> rt_rt.rt_ifp) {
                    665:                        if (is -> ifn_ready)
                    666:                            return o_integer (oi, v, is -> ifn_index);
                    667:                        break;
                    668:                    }
                    669: 
                    670:                if (offset == type_SNMP_PDUs_get__next__request)
                    671:                    return NOTOK;
                    672:                return int_SNMP_error__status_noSuchName;
                    673:            }
                    674:            
                    675:        case clnpRouteMetric1:
                    676:        case clnpRouteMetric2:
                    677:        case clnpRouteMetric3:
                    678:        case clnpRouteMetric4:
                    679:            return o_integer (oi, v, METRIC_NONE);
                    680: 
                    681:        case clnpRouteNextHop:
                    682:            return o_clnpaddr (oi, v,
                    683:                               (struct sockaddr_iso *) &rt -> rt_gateway);
                    684: 
                    685:        case clnpRouteType:
                    686:            switch (rt -> rt_rt.rt_flags & (RTF_GATEWAY | RTF_HOST)) {
                    687:                case RTF_GATEWAY:
                    688:                case RTF_HOST:
                    689:                    return o_integer (oi, v, TYPE_REMOTE);
                    690: 
                    691:                case 0:
                    692:                    return o_integer (oi, v, TYPE_DIRECT);
                    693: 
                    694:                default:
                    695:                    return o_integer (oi, v, TYPE_OTHER);
                    696:            }
                    697: 
                    698:        case clnpRouteProto:
                    699:            if (rt -> rt_rt.rt_flags & (RTF_DYNAMIC | RTF_MODIFIED))
                    700:                return o_integer (oi, v, PROTO_ESIS);
                    701:            else
                    702:                return o_integer (oi, v, PROTO_OTHER);
                    703: 
                    704:        case clnpRouteAge:
                    705:            return o_integer (oi, v, 0);
                    706: 
                    707:        case unixClnpRouteFlags:
                    708:            return o_integer (oi, v, rt -> rt_rt.rt_flags & 0xffff);
                    709: 
                    710:        case unixClnpRouteRefCnt:
                    711:            return o_integer (oi, v, rt -> rt_rt.rt_refcnt & 0xffff);
                    712: 
                    713:        case unixClnpRouteUses:
                    714:            return o_integer (oi, v, rt -> rt_rt.rt_use);
                    715: 
                    716:        default:
                    717:            return int_SNMP_error__status_noSuchName;
                    718:     }
                    719: }
                    720: 
                    721: /*  */
                    722: 
                    723: struct adrtab {
                    724: #define        ADN_SIZE        ADR_SIZE                /* ClnpAddress instance */
                    725:     unsigned int    adn_instance[ADN_SIZE];    
                    726:     int            adn_insize;                         
                    727: 
                    728:     struct iso_addr adn_address;               /* ClnpAddress */
                    729: 
                    730: 
                    731: #define        ADM_SIZE        ADR_SIZE                /* PhysAddress instance */
                    732:     unsigned int    adm_instance[ADM_SIZE];    
                    733:     int            adm_insize;                         
                    734: 
                    735:     u_char     adm_address[ADM_SIZE];          /* PhysAddress */
                    736:     u_char     adm_addrlen;                    /*   .. */
                    737: 
                    738: 
                    739:     int            adr_index;                          /* ifIndex */
                    740: 
                    741:     int            adr_type;                           /* clnpNetToMediaType */
                    742:                                                /* clnpMediaToNetType */
                    743: #define        DYNAMIC_MAPPING 3
                    744: #define        STATIC_MAPPING  4
                    745: 
                    746: 
                    747:     struct adrtab *adn_next;                   /* next ClnpAddress */
                    748:     struct adrtab *adm_next;                   /* next PhysAddress */
                    749: };
                    750: 
                    751: static struct adrtab *adn = NULL;
                    752: static struct adrtab *adm = NULL;
                    753: 
                    754: 
                    755: static struct adrtab *get_arpent ();
                    756: 
                    757: /*  */
                    758: 
                    759: #define        clnpNetToMediaIfIndex 0
                    760: #define        clnpNetToMediaPhysAddress 1
                    761: #define        clnpNetToMediaNetAddress 2
                    762: #define        clnpNetToMediaType 3
                    763: #undef clnpNetToMediaAge 4             /* NOT IMPLEMENTED */
                    764: #undef clnpNetToMediaHoldTime 5        /* NOT IMPLEMENTED */
                    765: 
                    766: #define        clnpMediaToNetIfIndex 6
                    767: #define        clnpMediaToNetNetAddress 7
                    768: #define        clnpMediaToNetPhysAddress 8
                    769: #define        clnpMediaToNetType 9
                    770: #undef clnpMediaToNetAge 10            /* NOT IMPLEMENTED */
                    771: #undef clnpMediaToNetHoldTime 11       /* NOT IMPLEMENTED */
                    772: 
                    773: static int  o_address (oi, v, offset)
                    774: OI     oi;
                    775: register struct type_SNMP_VarBind *v;
                    776: int    offset;
                    777: {
                    778:     register int    i;
                    779:     int            ifvar,
                    780:            isnpa;
                    781:     register unsigned int *ip,
                    782:                          *jp;
                    783:     register struct adrtab *at;
                    784:     struct sockaddr_iso netaddr;
                    785:     register OID    oid = oi -> oi_name;
                    786:     register OT            ot = oi -> oi_type;
                    787: 
                    788:     if (get_arptab () == NOTOK)
                    789:        return int_SNMP_error__status_genErr;
                    790: 
                    791:     switch (ifvar = (int) ot -> ot_info) {
                    792:        case clnpNetToMediaIfIndex:
                    793:        case clnpNetToMediaPhysAddress:
                    794:        case clnpNetToMediaNetAddress:
                    795:        case clnpNetToMediaType:
                    796:            isnpa = 0;
                    797:            break;
                    798: 
                    799:        case clnpMediaToNetIfIndex:
                    800:        case clnpMediaToNetNetAddress:
                    801:        case clnpMediaToNetPhysAddress:
                    802:        case clnpMediaToNetType:
                    803:            isnpa = 1;
                    804:            break;
                    805:     }
                    806:     
                    807:     switch (offset) {
                    808:        case type_SNMP_PDUs_get__request:
                    809:            if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
                    810:                return int_SNMP_error__status_noSuchName;
                    811:            if ((at = get_arpent (oid -> oid_elements
                    812:                                        + ot -> ot_name -> oid_nelem,
                    813:                                  oid -> oid_nelem
                    814:                                        - ot -> ot_name -> oid_nelem,
                    815:                                  isnpa, 0)) == NULL)
                    816:                return int_SNMP_error__status_noSuchName;
                    817:            break;
                    818: 
                    819:        case type_SNMP_PDUs_get__next__request:
                    820:            if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
                    821:                return int_SNMP_error__status_noSuchName;
                    822:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                    823:                OID     new;
                    824: 
                    825:                if ((at = isnpa ? adm : adn) == NULL)
                    826:                    return NOTOK;
                    827:                if (isnpa)
                    828:                    jp = at -> adm_instance, i = at -> adm_insize;
                    829:                else
                    830:                    jp = at -> adn_instance, i = at -> adn_insize;
                    831: 
                    832:                if ((new = oid_extend (oid, i)) == NULLOID)
                    833:                    return int_SNMP_error__status_genErr;
                    834:                ip = new -> oid_elements + new -> oid_nelem - i;
                    835:                for (; i > 0; i--)
                    836:                    *ip++ = *jp++;
                    837: 
                    838:                if (v -> name)
                    839:                    free_SNMP_ObjectName (v -> name);
                    840:                v -> name = new;
                    841:            }
                    842:            else {
                    843:                int     j;
                    844: 
                    845:                if ((at = get_arpent (oid -> oid_elements
                    846:                                          + ot -> ot_name -> oid_nelem,
                    847:                                      j = oid -> oid_nelem
                    848:                                              - ot -> ot_name -> oid_nelem,
                    849:                                      isnpa, 1)) == NULL)
                    850:                    return NOTOK;
                    851:                i = isnpa ? at -> adm_insize : at -> adn_insize;
                    852: 
                    853:                if ((i = j - i) < 0) {
                    854:                    OID     new;
                    855: 
                    856:                    if ((new = oid_extend (oid, -i)) == NULLOID)
                    857:                        return int_SNMP_error__status_genErr;
                    858:                    if (v -> name)
                    859:                        free_SNMP_ObjectName (v -> name);
                    860:                    v -> name = new;
                    861: 
                    862:                    oid = new;
                    863:                }
                    864:                else
                    865:                    if (i > 0)
                    866:                        oid -> oid_nelem -= i;
                    867: 
                    868:                ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
                    869:                if (isnpa)
                    870:                    jp = at -> adm_instance, i = at -> adm_insize;
                    871:                else
                    872:                    jp = at -> adn_instance, i = at -> adn_insize;
                    873:                for (; i > 0; i--)
                    874:                    *ip++ = *jp++;
                    875:            }
                    876:            break;
                    877: 
                    878:        default:
                    879:            return int_SNMP_error__status_genErr;
                    880:     }
                    881: 
                    882:     switch (ifvar) {
                    883:        case clnpNetToMediaIfIndex:
                    884:        case clnpMediaToNetIfIndex:
                    885:            return o_integer (oi, v, at -> adr_index);
                    886: 
                    887:        case clnpNetToMediaPhysAddress:
                    888:        case clnpMediaToNetPhysAddress:
                    889:            return o_string (oi, v, (char *) at -> adm_address,
                    890:                             (int) at -> adm_addrlen);
                    891: 
                    892:        case clnpNetToMediaNetAddress:
                    893:        case clnpMediaToNetNetAddress:
                    894:            netaddr.siso_addr = at -> adn_address;      /* struct copy */
                    895:            return o_clnpaddr (oi, v, &netaddr);
                    896: 
                    897:        case clnpNetToMediaType:
                    898:        case clnpMediaToNetType:
                    899:            return o_integer (oi, v, at -> adr_type);
                    900: 
                    901:        default:
                    902:            return int_SNMP_error__status_noSuchName;
                    903:     }
                    904: }
                    905: 
                    906: /*  */
                    907: 
                    908: static int  adn_compar (a, b)
                    909: register struct adrtab **a,
                    910:                       **b;
                    911: {
                    912:     return elem_cmp ((*a) -> adn_instance, (*a) -> adn_insize,
                    913:                     (*b) -> adn_instance, (*b) -> adn_insize);
                    914: }
                    915: 
                    916: 
                    917: static int  adm_compar (a, b)
                    918: register struct adrtab **a,
                    919:                       **b;
                    920: {
                    921:     return elem_cmp ((*a) -> adm_instance, (*a) -> adm_insize,
                    922:                     (*b) -> adm_instance, (*b) -> adm_insize);
                    923: }
                    924: 
                    925: 
                    926: #define        ROUND(a)        (1 + (((a) - 1) | (sizeof (long) - 1)))
                    927: 
                    928: static int  get_arptab () {
                    929:     int            adrNumber = 0,
                    930:            rlen,
                    931:            tblsize;
                    932:     char   *snpac;
                    933:     register char *sc,
                    934:                  *se;
                    935:     register struct adrtab *at,
                    936:                           *ap,
                    937:                          **base,
                    938:                          **afe,
                    939:                          **afp;
                    940:     register struct interface *is;
                    941:     register struct rt_msghdr *rtm;
                    942:     static  int first_time = 1;
                    943:     static  int lastq = -1;
                    944: 
                    945:     if (quantum == lastq)
                    946:        return OK;
                    947:     lastq = quantum;
                    948: 
                    949:     for (at = adn; at; at = ap) {
                    950:        ap = at -> adn_next;
                    951: 
                    952:        free ((char *) at);
                    953:     }
                    954:     adn = adm = NULL;
                    955: 
                    956:     if ((tblsize = getkerninfo (KINFO_RT_DUMP, NULLCP, NULLIP, 0)) == NOTOK)
                    957:        return NOTOK;
                    958:     if ((snpac = malloc ((unsigned) tblsize)) == NULL)
                    959:        adios (NULLCP, "out of memory");
                    960:     if ((rlen = getkerninfo (KINFO_RT_DUMP, snpac, &tblsize, 0)) == NOTOK) {
                    961:        free (snpac);
                    962:        return NOTOK;
                    963:     }
                    964: 
                    965:     afp = &adn;
                    966:     for (se = (sc = snpac) + rlen; sc < se; sc += rtm -> rtm_msglen) {
                    967:        register struct sockaddr_dl *sdl;
                    968:        register struct sockaddr *sa;
                    969:        struct iso_addr nsap;
                    970: 
                    971:        rtm = (struct rt_msghdr *) sc;
                    972:        sa = (struct sockaddr *) (rtm + 1);
                    973:        if (sa -> sa_family != AF_ISO)
                    974:            continue;
                    975: 
                    976:        sdl = (struct sockaddr_dl *) (((caddr_t) sa) + ROUND (sa -> sa_len));
                    977:        if (sdl -> sdl_family != AF_LINK)
                    978:            continue;
                    979: 
                    980:        nsap = ((struct sockaddr_iso *) sa) -> siso_addr;    /* struct copy */
                    981:        if (nsap.isoa_len == 0)
                    982:            continue;
                    983: 
                    984:        for (is = ifs; is; is = is -> ifn_next)
                    985:            if (is -> ifn_interface.ac_if.if_index == rtm -> rtm_index)
                    986:                break;
                    987:        if (!is) {
                    988:            if (first_time)
                    989:                advise (LLOG_EXCEPTIONS, NULLCP,
                    990:                        "unable to find interface for SNPA in cache");
                    991:            continue;
                    992:        }
                    993: 
                    994:        if ((at = (struct adrtab *) calloc (1, sizeof *at)) == NULL)
                    995:            adios (NULLCP, "out of memory");
                    996:        *afp = at, afp = &at -> adn_next, adrNumber++;
                    997: 
                    998:        at -> adr_index = is -> ifn_index;
                    999: 
                   1000:        at -> adr_type = rtm -> rtm_flags & (RTF_DYNAMIC | RTF_MODIFIED)
                   1001:                                ? DYNAMIC_MAPPING : STATIC_MAPPING;
                   1002: 
                   1003:        at -> adn_address = nsap;       /* struct copy */
                   1004:        at -> adn_instance[0] = at -> adr_index, at -> adn_insize = 1;
                   1005:        at -> adn_insize += clnpaddr2oid (at -> adn_instance + 1,
                   1006:                                          &at -> adn_address);
                   1007: 
                   1008:        bcopy ((char *) LLADDR (sdl), (char *) at -> adm_address,
                   1009:               (int) (at -> adm_addrlen = sdl -> sdl_alen));
                   1010:        at -> adm_instance[0] = at -> adr_index, at -> adm_insize = 1;
                   1011:        at -> adm_insize += mediaddr2oid (at -> adm_instance + 1,
                   1012:                                          at -> adm_address,
                   1013:                                          (int) at -> adm_addrlen, 0);
                   1014: 
                   1015:        if (debug && first_time) {
                   1016:            char    buffer[BUFSIZ];
                   1017:            OIDentifier oids;
                   1018: 
                   1019:            oids.oid_elements = at -> adn_instance;
                   1020:            oids.oid_nelem = at -> adn_insize;
                   1021:            (void) strcpy (buffer, sprintoid (&oids));
                   1022:            oids.oid_elements = at -> adm_instance;
                   1023:            oids.oid_nelem = at -> adm_insize;
                   1024:            advise (LLOG_DEBUG, NULLCP,
                   1025:                    "add mapping on interface %d: %s -> %s",
                   1026:                    at -> adr_index, buffer, sprintoid (&oids));
                   1027:        }
                   1028:     }
                   1029:     first_time = 0;
                   1030:     free ((char *) snpac);
                   1031: 
                   1032:     if (adrNumber <= 1) {
                   1033:        adm = adn;
                   1034:        return OK;
                   1035:     }
                   1036: 
                   1037:     if ((base = (struct adrtab **)
                   1038:                    malloc ((unsigned) (adrNumber * sizeof *base))) == NULL)
                   1039:        adios (NULLCP, "out of memory");
                   1040: 
                   1041:     afe = base;
                   1042:     for (at = adn; at; at = at -> adn_next)
                   1043:        *afe++ = at;
                   1044: 
                   1045:     qsort ((char *) base, adrNumber, sizeof *base, adn_compar);
                   1046: 
                   1047:     afp = base;
                   1048:     at = adn = *afp++;
                   1049:     while (afp < afe) {
                   1050:        at -> adn_next = *afp;
                   1051:        at = *afp++;
                   1052:     }
                   1053:     at -> adn_next = NULL;
                   1054: 
                   1055:     qsort ((char *) base, adrNumber, sizeof *base, adm_compar);
                   1056: 
                   1057:     afp = base;
                   1058:     at = adm = *afp++;
                   1059:     while (afp < afe) {
                   1060:        at -> adm_next = *afp;
                   1061:        at = *afp++;
                   1062:     }
                   1063:     at -> adm_next = NULL;
                   1064: 
                   1065:     free ((char *) base);
                   1066: 
                   1067:     return OK;
                   1068: }
                   1069: #undef ROUND
                   1070: 
                   1071: /*  */
                   1072: 
                   1073: static struct adrtab *get_arpent (ip, len, isnpa, isnext)
                   1074: register unsigned int *ip;
                   1075: int    len;
                   1076: int    isnpa,
                   1077:        isnext;
                   1078: {
                   1079:     register struct adrtab *at;
                   1080: 
                   1081:     if (isnpa)
                   1082:        for (at = adm; at; at = at -> adm_next)
                   1083:            switch (elem_cmp (at -> adm_instance, at -> adm_insize, ip, len)) {
                   1084:                case 0:
                   1085:                    return (isnext ? at -> adm_next : at);
                   1086: 
                   1087:                case 1:
                   1088:                    return (isnext ? at : NULL);
                   1089:            }
                   1090:     else
                   1091:        for (at = adn; at; at = at -> adn_next)
                   1092:            switch (elem_cmp (at -> adn_instance, at -> adn_insize, ip, len)) {
                   1093:                case 0:
                   1094:                    return (isnext ? at -> adn_next : at);
                   1095: 
                   1096:                case 1:
                   1097:                    return (isnext ? at : NULL);
                   1098:            }
                   1099: 
                   1100:     return NULL;
                   1101: }
                   1102: 
                   1103: /*  */
                   1104: 
                   1105: static struct esis_stat esis_stat;
                   1106: 
                   1107: /*  */
                   1108: 
                   1109: #define        esisESHins      0
                   1110: #define        esisESHouts     1
                   1111: #define        esisISHins      2
                   1112: #define        esisISHouts     3
                   1113: #define        esisRDUins      4
                   1114: #define        esisRDUouts     5
                   1115: 
                   1116: 
                   1117: static int  o_esis (oi, v, offset)
                   1118: OI     oi;
                   1119: register struct type_SNMP_VarBind *v;
                   1120: int    offset;
                   1121: {
                   1122:     int            ifvar;
                   1123:     register struct esis_stat *es = &esis_stat;
                   1124:     register OID    oid = oi -> oi_name;
                   1125:     register OT            ot = oi -> oi_type;
                   1126:     static   int lastq = -1;
                   1127: 
                   1128:     ifvar = (int) ot -> ot_info;
                   1129:     switch (offset) {
                   1130:        case type_SNMP_PDUs_get__request:
                   1131:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
                   1132:                    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
                   1133:                return int_SNMP_error__status_noSuchName;
                   1134:            break;
                   1135: 
                   1136:        case type_SNMP_PDUs_get__next__request:
                   1137:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                   1138:                OID     new;
                   1139: 
                   1140:                if ((new = oid_extend (oid, 1)) == NULLOID)
                   1141:                    return int_SNMP_error__status_genErr;
                   1142:                new -> oid_elements[new -> oid_nelem - 1] = 0;
                   1143: 
                   1144:                if (v -> name)
                   1145:                    free_SNMP_ObjectName (v -> name);
                   1146:                v -> name = new;
                   1147:            }
                   1148:            else
                   1149:                return NOTOK;
                   1150:            break;
                   1151: 
                   1152:        default:
                   1153:            return int_SNMP_error__status_genErr;
                   1154:     }
                   1155: 
                   1156:     if (quantum != lastq) {
                   1157:        lastq = quantum;
                   1158: 
                   1159:        if (getkmem (nl + N_ESIS_STAT, (caddr_t) &esis_stat, sizeof esis_stat)
                   1160:                == NOTOK)
                   1161:            return int_SNMP_error__status_genErr;
                   1162:     }
                   1163: 
                   1164:     switch (ifvar) {
                   1165:        case esisESHins:
                   1166:            return o_integer (oi, v, es -> es_eshrcvd);
                   1167: 
                   1168:        case esisESHouts:
                   1169:            return o_integer (oi, v, es -> es_eshsent);
                   1170: 
                   1171:        case esisISHins:
                   1172:            return o_integer (oi, v, es -> es_ishrcvd);
                   1173: 
                   1174:        case esisISHouts:
                   1175:            return o_integer (oi, v, es -> es_ishsent);
                   1176: 
                   1177:        case esisRDUins:
                   1178:            return o_integer (oi, v, es -> es_rdrcvd);
                   1179: 
                   1180:        case esisRDUouts:
                   1181:            return o_integer (oi, v, es -> es_rdsent);
                   1182: 
                   1183:        default:
                   1184:            return int_SNMP_error__status_noSuchName;
                   1185:     }
                   1186: }
                   1187: 
                   1188: /*  */
                   1189: 
                   1190: init_clnp () {
                   1191:     register OT            ot;
                   1192: 
                   1193:     if (nl[N_ISO_SYSTYPE].n_value == 0)
                   1194:        return;
                   1195: 
                   1196:     if (ot = text2obj ("clnpForwarding"))
                   1197:        ot -> ot_getfnx = o_clnp,
                   1198:        ot -> ot_info = (caddr_t) clnpForwarding;
                   1199:     if (ot = text2obj ("clnpDefaultLifeTime"))
                   1200:        ot -> ot_getfnx = o_clnp,
                   1201:        ot -> ot_info = (caddr_t) clnpDefaultLifeTime;
                   1202:     if (ot = text2obj ("clnpInReceives"))
                   1203:        ot -> ot_getfnx = o_clnp,
                   1204:        ot -> ot_info = (caddr_t) clnpInReceives;
                   1205:     if (ot = text2obj ("clnpInHdrErrors"))
                   1206:        ot -> ot_getfnx = o_clnp,
                   1207:        ot -> ot_info = (caddr_t) clnpInHdrErrors;
                   1208:     if (ot = text2obj ("clnpInAddrErrors"))
                   1209:        ot -> ot_getfnx = o_clnp,
                   1210:        ot -> ot_info = (caddr_t) clnpInAddrErrors;
                   1211:     if (ot = text2obj ("clnpForwPDUs"))
                   1212:        ot -> ot_getfnx = o_clnp,
                   1213:        ot -> ot_info = (caddr_t) clnpForwPDUs;
                   1214: #ifdef clnpInUnknownNLPs
                   1215:     if (ot = text2obj ("clnpInUnknownNLPs"))
                   1216:        ot -> ot_getfnx = o_clnp,
                   1217:        ot -> ot_info = (caddr_t) clnpInUnknownNLPs;
                   1218: #endif
                   1219:     if (ot = text2obj ("clnpInUnknownULPs"))
                   1220:        ot -> ot_getfnx = o_clnp,
                   1221:        ot -> ot_info = (caddr_t) clnpInUnknownULPs;
                   1222: #ifdef clnpInDiscards
                   1223:     if (ot = text2obj ("clnpInDiscards"))
                   1224:        ot -> ot_getfnx = o_clnp,
                   1225:        ot -> ot_info = (caddr_t) clnpInDiscards;
                   1226: #endif
                   1227:     if (ot = text2obj ("clnpInDelivers"))
                   1228:        ot -> ot_getfnx = o_clnp,
                   1229:        ot -> ot_info = (caddr_t) clnpInDelivers;
                   1230:     if (ot = text2obj ("clnpOutRequests"))
                   1231:        ot -> ot_getfnx = o_clnp,
                   1232:        ot -> ot_info = (caddr_t) clnpOutRequests;
                   1233:     if (ot = text2obj ("clnpOutDiscards"))
                   1234:        ot -> ot_getfnx = o_clnp,
                   1235:        ot -> ot_info = (caddr_t) clnpOutDiscards;
                   1236:     if (ot = text2obj ("clnpOutNoRoutes"))
                   1237:        ot -> ot_getfnx = o_clnp,
                   1238:        ot -> ot_info = (caddr_t) clnpOutNoRoutes;
                   1239:     if (ot = text2obj ("clnpReasmTimeout"))
                   1240:        ot -> ot_getfnx = o_clnp,
                   1241:        ot -> ot_info = (caddr_t) clnpReasmTimeout;
                   1242:     if (ot = text2obj ("clnpReasmReqds"))
                   1243:        ot -> ot_getfnx = o_clnp,
                   1244:        ot -> ot_info = (caddr_t) clnpReasmReqds;
                   1245:     if (ot = text2obj ("clnpReasmOKs"))
                   1246:        ot -> ot_getfnx = o_clnp,
                   1247:        ot -> ot_info = (caddr_t) clnpReasmOKs;
                   1248:     if (ot = text2obj ("clnpReasmFails"))
                   1249:        ot -> ot_getfnx = o_clnp,
                   1250:        ot -> ot_info = (caddr_t) clnpReasmFails;
                   1251:     if (ot = text2obj ("clnpSegOKs"))
                   1252:        ot -> ot_getfnx = o_clnp,
                   1253:        ot -> ot_info = (caddr_t) clnpSegOKs;
                   1254:     if (ot = text2obj ("clnpSegFails"))
                   1255:        ot -> ot_getfnx = o_clnp,
                   1256:        ot -> ot_info = (caddr_t) clnpSegFails;
                   1257:     if (ot = text2obj ("clnpSegCreates"))
                   1258:        ot -> ot_getfnx = o_clnp,
                   1259:        ot -> ot_info = (caddr_t) clnpSegCreates;
                   1260: #ifdef clnpInOpts
                   1261:     if (ot = text2obj ("clnpInOpts"))
                   1262:        ot -> ot_getfnx = o_clnp,
                   1263:        ot -> ot_info = (caddr_t) clnpInOpts;
                   1264: #endif
                   1265: #ifdef clnpOutOpts
                   1266:     if (ot = text2obj ("clnpOutOpts"))
                   1267:        ot -> ot_getfnx = o_clnp,
                   1268:        ot -> ot_info = (caddr_t) clnpOutOpts;
                   1269: #endif
                   1270: 
                   1271:     if (ot = text2obj ("clnpAdEntAddr"))
                   1272:        ot -> ot_getfnx = o_clnp_addr,
                   1273:        ot -> ot_info = (caddr_t) clnpAdEntAddr;
                   1274:     if (ot = text2obj ("clnpAdEntIfIndex"))
                   1275:        ot -> ot_getfnx = o_clnp_addr,
                   1276:        ot -> ot_info = (caddr_t) clnpAdEntIfIndex;
                   1277:     if (ot = text2obj ("clnpAdEntNetMask"))
                   1278:        ot -> ot_getfnx = o_clnp_addr,
                   1279:        ot -> ot_info = (caddr_t) clnpAdEntNetMask;
                   1280:     if (ot = text2obj ("clnpAdEntReasmMaxSize"))
                   1281:        ot -> ot_getfnx = o_clnp_addr,
                   1282:        ot -> ot_info = (caddr_t) clnpAdEntReasmMaxSize;
                   1283: 
                   1284:     if (ot = text2obj ("clnpRouteDest"))
                   1285:        ot -> ot_getfnx = o_clnp_route,
                   1286:        ot -> ot_info = (caddr_t) clnpRouteDest;
                   1287:     if (ot = text2obj ("clnpRouteIfIndex"))
                   1288:        ot -> ot_getfnx = o_clnp_route,
                   1289:        ot -> ot_info = (caddr_t) clnpRouteIfIndex;
                   1290:     if (ot = text2obj ("clnpRouteMetric1"))
                   1291:        ot -> ot_getfnx = o_clnp_route,
                   1292:        ot -> ot_info = (caddr_t) clnpRouteMetric1;
                   1293:     if (ot = text2obj ("clnpRouteMetric2"))
                   1294:        ot -> ot_getfnx = o_clnp_route,
                   1295:        ot -> ot_info = (caddr_t) clnpRouteMetric2;
                   1296:     if (ot = text2obj ("clnpRouteMetric3"))
                   1297:        ot -> ot_getfnx = o_clnp_route,
                   1298:        ot -> ot_info = (caddr_t) clnpRouteMetric3;
                   1299:     if (ot = text2obj ("clnpRouteMetric4"))
                   1300:        ot -> ot_getfnx = o_clnp_route,
                   1301:        ot -> ot_info = (caddr_t) clnpRouteMetric4;
                   1302:     if (ot = text2obj ("clnpRouteNextHop"))
                   1303:        ot -> ot_getfnx = o_clnp_route,
                   1304:        ot -> ot_info = (caddr_t) clnpRouteNextHop;
                   1305:     if (ot = text2obj ("clnpRouteType"))
                   1306:        ot -> ot_getfnx = o_clnp_route,
                   1307:        ot -> ot_info = (caddr_t) clnpRouteType;
                   1308:     if (ot = text2obj ("clnpRouteProto"))
                   1309:        ot -> ot_getfnx = o_clnp_route,
                   1310:        ot -> ot_info = (caddr_t) clnpRouteProto;
                   1311:     if (ot = text2obj ("clnpRouteAge"))
                   1312:        ot -> ot_getfnx = o_clnp_route,
                   1313:        ot -> ot_info = (caddr_t) clnpRouteAge;
                   1314: 
                   1315:     if (ot = text2obj ("unixClnpRouteFlags"))
                   1316:        ot -> ot_getfnx = o_clnp_route,
                   1317:        ot -> ot_info = (caddr_t) unixClnpRouteFlags;
                   1318:     if (ot = text2obj ("unixClnpRouteRefCnt"))
                   1319:        ot -> ot_getfnx = o_clnp_route,
                   1320:        ot -> ot_info = (caddr_t) unixClnpRouteRefCnt;
                   1321:     if (ot = text2obj ("unixClnpRouteUses"))
                   1322:        ot -> ot_getfnx = o_clnp_route,
                   1323:        ot -> ot_info = (caddr_t) unixClnpRouteUses;
                   1324: 
                   1325:     if (ot = text2obj ("clnpNetToMediaIfIndex"))
                   1326:        ot -> ot_getfnx = o_address,
                   1327:        ot -> ot_info = (caddr_t) clnpNetToMediaIfIndex;
                   1328:     if (ot = text2obj ("clnpNetToMediaPhysAddress"))
                   1329:        ot -> ot_getfnx = o_address,
                   1330:        ot -> ot_info = (caddr_t) clnpNetToMediaPhysAddress;
                   1331:     if (ot = text2obj ("clnpNetToMediaNetAddress"))
                   1332:        ot -> ot_getfnx = o_address,
                   1333:        ot -> ot_info = (caddr_t) clnpNetToMediaNetAddress;
                   1334:     if (ot = text2obj ("clnpNetToMediaType"))
                   1335:        ot -> ot_getfnx = o_address,
                   1336:        ot -> ot_info = (caddr_t) clnpNetToMediaType;
                   1337: #ifdef clnpNetToMediaAge
                   1338:     if (ot = text2obj ("clnpNetToMediaAge"))
                   1339:        ot -> ot_getfnx = o_address,
                   1340:        ot -> ot_info = (caddr_t) clnpNetToMediaAge;
                   1341: #endif
                   1342: #ifdef clnpNetToMediaHoldTime
                   1343:     if (ot = text2obj ("clnpNetToMediaHoldTime"))
                   1344:        ot -> ot_getfnx = o_address,
                   1345:        ot -> ot_info = (caddr_t) clnpNetToMediaHoldTime;
                   1346: #endif
                   1347:     if (ot = text2obj ("clnpMediaToNetIfIndex"))
                   1348:        ot -> ot_getfnx = o_address,
                   1349:        ot -> ot_info = (caddr_t) clnpMediaToNetIfIndex;
                   1350:     if (ot = text2obj ("clnpMediaToNetNetAddress"))
                   1351:        ot -> ot_getfnx = o_address,
                   1352:        ot -> ot_info = (caddr_t) clnpMediaToNetNetAddress;
                   1353:     if (ot = text2obj ("clnpMediaToNetPhysAddress"))
                   1354:        ot -> ot_getfnx = o_address,
                   1355:        ot -> ot_info = (caddr_t) clnpMediaToNetPhysAddress;
                   1356:     if (ot = text2obj ("clnpMediaToNetType"))
                   1357:        ot -> ot_getfnx = o_address,
                   1358:        ot -> ot_info = (caddr_t) clnpMediaToNetType;
                   1359: #ifdef clnpMediaToNetAge
                   1360:     if (ot = text2obj ("clnpMediaToNetAge"))
                   1361:        ot -> ot_getfnx = o_address,
                   1362:        ot -> ot_info = (caddr_t) clnpMediaToNetAge;
                   1363: #endif
                   1364: #ifdef clnpMediaToNetHoldTime
                   1365:     if (ot = text2obj ("clnpMediaToNetHoldTime"))
                   1366:        ot -> ot_getfnx = o_address,
                   1367:        ot -> ot_info = (caddr_t) clnpMediaToNetHoldTime;
                   1368: #endif
                   1369: 
                   1370:     if (ot = text2obj ("clnpInErrors"))
                   1371:        ot -> ot_getfnx = o_clnp,
                   1372:        ot -> ot_info = (caddr_t) clnpInErrors;
                   1373:     if (ot = text2obj ("clnpOutErrors"))
                   1374:        ot -> ot_getfnx = o_clnp,
                   1375:        ot -> ot_info = (caddr_t) clnpOutErrors;
                   1376:     if (ot = text2obj ("clnpInErrUnspecs"))
                   1377:        ot -> ot_getfnx = o_clnp,
                   1378:        ot -> ot_info = (caddr_t) clnpInErrUnspecs;
                   1379:     if (ot = text2obj ("clnpInErrProcs"))
                   1380:        ot -> ot_getfnx = o_clnp,
                   1381:        ot -> ot_info = (caddr_t) clnpInErrProcs;
                   1382:     if (ot = text2obj ("clnpInErrCksums"))
                   1383:        ot -> ot_getfnx = o_clnp,
                   1384:        ot -> ot_info = (caddr_t) clnpInErrCksums;
                   1385:     if (ot = text2obj ("clnpInErrCongests"))
                   1386:        ot -> ot_getfnx = o_clnp,
                   1387:        ot -> ot_info = (caddr_t) clnpInErrCongests;
                   1388:     if (ot = text2obj ("clnpInErrHdrs"))
                   1389:        ot -> ot_getfnx = o_clnp,
                   1390:        ot -> ot_info = (caddr_t) clnpInErrHdrs;
                   1391:     if (ot = text2obj ("clnpInErrSegs"))
                   1392:        ot -> ot_getfnx = o_clnp,
                   1393:        ot -> ot_info = (caddr_t) clnpInErrSegs;
                   1394:     if (ot = text2obj ("clnpInErrIncomps"))
                   1395:        ot -> ot_getfnx = o_clnp,
                   1396:        ot -> ot_info = (caddr_t) clnpInErrIncomps;
                   1397:     if (ot = text2obj ("clnpInErrDups"))
                   1398:        ot -> ot_getfnx = o_clnp,
                   1399:        ot -> ot_info = (caddr_t) clnpInErrDups;
                   1400:     if (ot = text2obj ("clnpInErrUnreachDsts"))
                   1401:        ot -> ot_getfnx = o_clnp,
                   1402:        ot -> ot_info = (caddr_t) clnpInErrUnreachDsts;
                   1403:     if (ot = text2obj ("clnpInErrUnknownDsts"))
                   1404:        ot -> ot_getfnx = o_clnp,
                   1405:        ot -> ot_info = (caddr_t) clnpInErrUnknownDsts;
                   1406:     if (ot = text2obj ("clnpInErrSRUnspecs"))
                   1407:        ot -> ot_getfnx = o_clnp,
                   1408:        ot -> ot_info = (caddr_t) clnpInErrSRUnspecs;
                   1409:     if (ot = text2obj ("clnpInErrSRSyntaxes"))
                   1410:        ot -> ot_getfnx = o_clnp,
                   1411:        ot -> ot_info = (caddr_t) clnpInErrSRSyntaxes;
                   1412:     if (ot = text2obj ("clnpInErrSRUnkAddrs"))
                   1413:        ot -> ot_getfnx = o_clnp,
                   1414:        ot -> ot_info = (caddr_t) clnpInErrSRUnkAddrs;
                   1415:     if (ot = text2obj ("clnpInErrSRBadPaths"))
                   1416:        ot -> ot_getfnx = o_clnp,
                   1417:        ot -> ot_info = (caddr_t) clnpInErrSRBadPaths;
                   1418:     if (ot = text2obj ("clnpInErrHops"))
                   1419:        ot -> ot_getfnx = o_clnp,
                   1420:        ot -> ot_info = (caddr_t) clnpInErrHops;
                   1421:     if (ot = text2obj ("clnpInErrHopReassms"))
                   1422:        ot -> ot_getfnx = o_clnp,
                   1423:        ot -> ot_info = (caddr_t) clnpInErrHopReassms;
                   1424:     if (ot = text2obj ("clnpInErrUnsOptions"))
                   1425:        ot -> ot_getfnx = o_clnp,
                   1426:        ot -> ot_info = (caddr_t) clnpInErrUnsOptions;
                   1427:     if (ot = text2obj ("clnpInErrUnsVersions"))
                   1428:        ot -> ot_getfnx = o_clnp,
                   1429:        ot -> ot_info = (caddr_t) clnpInErrUnsVersions;
                   1430:     if (ot = text2obj ("clnpInErrUnsSecurities"))
                   1431:        ot -> ot_getfnx = o_clnp,
                   1432:        ot -> ot_info = (caddr_t) clnpInErrUnsSecurities;
                   1433:     if (ot = text2obj ("clnpInErrUnsSRs"))
                   1434:        ot -> ot_getfnx = o_clnp,
                   1435:        ot -> ot_info = (caddr_t) clnpInErrUnsSRs;
                   1436:     if (ot = text2obj ("clnpInErrUnsRRs"))
                   1437:        ot -> ot_getfnx = o_clnp,
                   1438:        ot -> ot_info = (caddr_t) clnpInErrUnsRRs;
                   1439:     if (ot = text2obj ("clnpInErrInterferences"))
                   1440:        ot -> ot_getfnx = o_clnp,
                   1441:        ot -> ot_info = (caddr_t) clnpInErrInterferences;
                   1442:     if (ot = text2obj ("clnpOutErrUnspecs"))
                   1443:        ot -> ot_getfnx = o_clnp,
                   1444:        ot -> ot_info = (caddr_t) clnpOutErrUnspecs;
                   1445:     if (ot = text2obj ("clnpOutErrProcs"))
                   1446:        ot -> ot_getfnx = o_clnp,
                   1447:        ot -> ot_info = (caddr_t) clnpOutErrProcs;
                   1448:     if (ot = text2obj ("clnpOutErrCksums"))
                   1449:        ot -> ot_getfnx = o_clnp,
                   1450:        ot -> ot_info = (caddr_t) clnpOutErrCksums;
                   1451:     if (ot = text2obj ("clnpOutErrCongests"))
                   1452:        ot -> ot_getfnx = o_clnp,
                   1453:        ot -> ot_info = (caddr_t) clnpOutErrCongests;
                   1454:     if (ot = text2obj ("clnpOutErrHdrs"))
                   1455:        ot -> ot_getfnx = o_clnp,
                   1456:        ot -> ot_info = (caddr_t) clnpOutErrHdrs;
                   1457:     if (ot = text2obj ("clnpOutErrSegs"))
                   1458:        ot -> ot_getfnx = o_clnp,
                   1459:        ot -> ot_info = (caddr_t) clnpOutErrSegs;
                   1460:     if (ot = text2obj ("clnpOutErrIncomps"))
                   1461:        ot -> ot_getfnx = o_clnp,
                   1462:        ot -> ot_info = (caddr_t) clnpOutErrIncomps;
                   1463:     if (ot = text2obj ("clnpOutErrDups"))
                   1464:        ot -> ot_getfnx = o_clnp,
                   1465:        ot -> ot_info = (caddr_t) clnpOutErrDups;
                   1466:     if (ot = text2obj ("clnpOutErrUnreachDsts"))
                   1467:        ot -> ot_getfnx = o_clnp,
                   1468:        ot -> ot_info = (caddr_t) clnpOutErrUnreachDsts;
                   1469:     if (ot = text2obj ("clnpOutErrUnknownDsts"))
                   1470:        ot -> ot_getfnx = o_clnp,
                   1471:        ot -> ot_info = (caddr_t) clnpOutErrUnknownDsts;
                   1472:     if (ot = text2obj ("clnpOutErrSRUnspecs"))
                   1473:        ot -> ot_getfnx = o_clnp,
                   1474:        ot -> ot_info = (caddr_t) clnpOutErrSRUnspecs;
                   1475:     if (ot = text2obj ("clnpOutErrSRSyntaxes"))
                   1476:        ot -> ot_getfnx = o_clnp,
                   1477:        ot -> ot_info = (caddr_t) clnpOutErrSRSyntaxes;
                   1478:     if (ot = text2obj ("clnpOutErrSRUnkAddrs"))
                   1479:        ot -> ot_getfnx = o_clnp,
                   1480:        ot -> ot_info = (caddr_t) clnpOutErrSRUnkAddrs;
                   1481:     if (ot = text2obj ("clnpOutErrSRBadPaths"))
                   1482:        ot -> ot_getfnx = o_clnp,
                   1483:        ot -> ot_info = (caddr_t) clnpOutErrSRBadPaths;
                   1484:     if (ot = text2obj ("clnpOutErrHops"))
                   1485:        ot -> ot_getfnx = o_clnp,
                   1486:        ot -> ot_info = (caddr_t) clnpOutErrHops;
                   1487:     if (ot = text2obj ("clnpOutErrHopReassms"))
                   1488:        ot -> ot_getfnx = o_clnp,
                   1489:        ot -> ot_info = (caddr_t) clnpOutErrHopReassms;
                   1490:     if (ot = text2obj ("clnpOutErrUnsOptions"))
                   1491:        ot -> ot_getfnx = o_clnp,
                   1492:        ot -> ot_info = (caddr_t) clnpOutErrUnsOptions;
                   1493:     if (ot = text2obj ("clnpOutErrUnsVersions"))
                   1494:        ot -> ot_getfnx = o_clnp,
                   1495:        ot -> ot_info = (caddr_t) clnpOutErrUnsVersions;
                   1496:     if (ot = text2obj ("clnpOutErrUnsSecurities"))
                   1497:        ot -> ot_getfnx = o_clnp,
                   1498:        ot -> ot_info = (caddr_t) clnpOutErrUnsSecurities;
                   1499:     if (ot = text2obj ("clnpOutErrUnsSRs"))
                   1500:        ot -> ot_getfnx = o_clnp,
                   1501:        ot -> ot_info = (caddr_t) clnpOutErrUnsSRs;
                   1502:     if (ot = text2obj ("clnpOutErrUnsRRs"))
                   1503:        ot -> ot_getfnx = o_clnp,
                   1504:        ot -> ot_info = (caddr_t) clnpOutErrUnsRRs;
                   1505:     if (ot = text2obj ("clnpOutErrInterferences"))
                   1506:        ot -> ot_getfnx = o_clnp,
                   1507:        ot -> ot_info = (caddr_t) clnpOutErrInterferences;
                   1508: 
                   1509:     if (ot = text2obj ("esisESHins"))
                   1510:        ot -> ot_getfnx = o_esis,
                   1511:        ot -> ot_info = (caddr_t) esisESHins;
                   1512:     if (ot = text2obj ("esisESHouts"))
                   1513:        ot -> ot_getfnx = o_esis,
                   1514:        ot -> ot_info = (caddr_t) esisESHouts;
                   1515:     if (ot = text2obj ("esisISHins"))
                   1516:        ot -> ot_getfnx = o_esis,
                   1517:        ot -> ot_info = (caddr_t) esisISHins;
                   1518:     if (ot = text2obj ("esisISHouts"))
                   1519:        ot -> ot_getfnx = o_esis,
                   1520:        ot -> ot_info = (caddr_t) esisISHouts;
                   1521:     if (ot = text2obj ("esisRDUins"))
                   1522:        ot -> ot_getfnx = o_esis,
                   1523:        ot -> ot_info = (caddr_t) esisRDUins;
                   1524:     if (ot = text2obj ("esisRDUouts"))
                   1525:        ot -> ot_getfnx = o_esis,
                   1526:        ot -> ot_info = (caddr_t) esisRDUouts;
                   1527: }
                   1528: #else
                   1529: 
                   1530: init_clnp () {}
                   1531: 
                   1532: #endif

unix.superglobalmegacorp.com

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