Annotation of 43BSDReno/contrib/isode-beta/snmp/ip.c, revision 1.1

1.1     ! root        1: /* ip.c - MIB realization of the IP (and Address Translation) group */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/snmp/RCS/ip.c,v 7.12 90/07/09 14:48:44 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/snmp/RCS/ip.c,v 7.12 90/07/09 14:48:44 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:       ip.c,v $
        !            17:  * Revision 7.12  90/07/09  14:48:44  mrose
        !            18:  * sync
        !            19:  * 
        !            20:  * Revision 7.11  90/05/22  20:30:26  mrose
        !            21:  * cache
        !            22:  * 
        !            23:  * Revision 7.10  90/05/12  17:02:02  mrose
        !            24:  * sync
        !            25:  * 
        !            26:  * Revision 7.9  90/04/18  08:51:47  mrose
        !            27:  * oid_normalize
        !            28:  * 
        !            29:  * Revision 7.8  90/03/24  10:54:09  mrose
        !            30:  * update
        !            31:  * 
        !            32:  * Revision 7.7  90/03/06  13:50:55  mrose
        !            33:  * jch
        !            34:  * 
        !            35:  * Revision 7.6  90/02/27  18:52:11  mrose
        !            36:  * unix stuff
        !            37:  * 
        !            38:  * Revision 7.5  90/02/27  18:49:40  mrose
        !            39:  * unix stuff
        !            40:  * 
        !            41:  * Revision 7.4  90/02/23  17:47:43  mrose
        !            42:  * update
        !            43:  * 
        !            44:  * Revision 7.3  90/02/17  10:38:14  mrose
        !            45:  * smux
        !            46:  * 
        !            47:  * Revision 7.2  90/01/27  08:21:52  mrose
        !            48:  * touch-up
        !            49:  * 
        !            50:  * Revision 7.1  90/01/11  18:34:10  mrose
        !            51:  * real-sync
        !            52:  * 
        !            53:  * Revision 7.0  89/11/23  22:23:06  mrose
        !            54:  * Release 6.0
        !            55:  * 
        !            56:  */
        !            57: 
        !            58: /*
        !            59:  *                               NOTICE
        !            60:  *
        !            61:  *    Acquisition, use, and distribution of this module and related
        !            62:  *    materials are subject to the restrictions of a license agreement.
        !            63:  *    Consult the Preface in the User's Manual for the full terms of
        !            64:  *    this agreement.
        !            65:  *
        !            66:  */
        !            67: 
        !            68: 
        !            69: #include <stdio.h>
        !            70: #include "mib.h"
        !            71: #include "interfaces.h"
        !            72: #include "routes.h"
        !            73: 
        !            74: #include <netinet/in_systm.h>
        !            75: #include <netinet/ip.h>
        !            76: #include <netinet/ip_var.h>
        !            77: #include <sys/ioctl.h>
        !            78: 
        !            79: /*  */
        !            80: 
        !            81: #define        FORW_GATEWAY    1               /* ipForwarding */
        !            82: #define        FORW_HOST       2
        !            83: static int     ipforwarding;
        !            84: 
        !            85: static struct ipstat ipstat;
        !            86: 
        !            87: /*  */
        !            88: 
        !            89: #define        ipForwarding    0
        !            90: #define        ipDefaultTTL    1
        !            91: #ifdef BSD43
        !            92: #define        ipInReceives    2
        !            93: #endif
        !            94: #define        ipInHdrErrors   3
        !            95: #undef ipInAddrErrors  4               /* NOT IMPLEMENTED */
        !            96: #ifdef BSD43
        !            97: #define        ipForwDatagrams 5
        !            98: #endif
        !            99: #ifdef BSD44
        !           100: #define        ipInUnknownProtos 6
        !           101: #endif
        !           102: #undef ipInDiscards    7               /* NOT IMPLEMENTED */
        !           103: #ifdef BSD44
        !           104: #define        ipInDelivers    8
        !           105: #define        ipOutRequests   9
        !           106: #define        ipOutDiscards   10
        !           107: #endif
        !           108: #ifdef BSD43
        !           109: #define        ipOutNoRoutes   11
        !           110: #endif 
        !           111: #define        ipReasmTimeout  12
        !           112: #ifdef BSD43
        !           113: #define        ipReasmReqds    13
        !           114: #endif
        !           115: #ifdef BSD44
        !           116: #define        ipReasmOKs      14
        !           117: #endif
        !           118: #ifdef BSD43
        !           119: #define        ipReasmFails    15
        !           120: #endif
        !           121: #ifdef BSD44
        !           122: #undef ipFragOKs       16
        !           123: #undef ipFragFails     17
        !           124: #undef ipFragCreates   18
        !           125: #endif
        !           126: 
        !           127: 
        !           128: static int  o_ip (oi, v, offset)
        !           129: OI     oi;
        !           130: register struct type_SNMP_VarBind *v;
        !           131: int    offset;
        !           132: {
        !           133:     int            ifvar;
        !           134:     register struct ipstat *ips = &ipstat;
        !           135:     register OID    oid = oi -> oi_name;
        !           136:     register OT            ot = oi -> oi_type;
        !           137:     static   int lastq = -1;
        !           138: 
        !           139:     ifvar = (int) ot -> ot_info;
        !           140:     switch (offset) {
        !           141:        case type_SNMP_PDUs_get__request:
        !           142:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
        !           143:                    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
        !           144:                return int_SNMP_error__status_noSuchName;
        !           145:            break;
        !           146: 
        !           147:        case type_SNMP_PDUs_get__next__request:
        !           148:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
        !           149:                OID     new;
        !           150: 
        !           151:                if ((new = oid_extend (oid, 1)) == NULLOID)
        !           152:                    return int_SNMP_error__status_genErr;
        !           153:                new -> oid_elements[new -> oid_nelem - 1] = 0;
        !           154: 
        !           155:                if (v -> name)
        !           156:                    free_SNMP_ObjectName (v -> name);
        !           157:                v -> name = new;
        !           158:            }
        !           159:            else
        !           160:                return NOTOK;
        !           161:            break;
        !           162: 
        !           163:        default:
        !           164:            return int_SNMP_error__status_genErr;
        !           165:     }
        !           166: 
        !           167:     switch (ifvar) {
        !           168:        case ipDefaultTTL:
        !           169:        case ipReasmTimeout:
        !           170:            break;
        !           171:            
        !           172:        default:
        !           173:            if (quantum != lastq) {
        !           174:                lastq = quantum;
        !           175: 
        !           176:                if (getkmem (nl + N_IPFORWARDING, (caddr_t) &ipforwarding,
        !           177:                             sizeof ipforwarding) == NOTOK
        !           178:                        || getkmem (nl + N_IPSTAT, (caddr_t) ips, sizeof *ips)
        !           179:                                == NOTOK)
        !           180:                    return int_SNMP_error__status_genErr;
        !           181:            }
        !           182:            break;
        !           183:     }
        !           184: 
        !           185:     switch (ifvar) {
        !           186:        case ipForwarding:
        !           187:            return o_integer (oi, v, ipforwarding ? FORW_GATEWAY : FORW_HOST);
        !           188:            
        !           189:        case ipDefaultTTL:
        !           190:            return o_integer (oi, v, MAXTTL);
        !           191: 
        !           192: #ifdef ipInReceives
        !           193:        case ipInReceives:
        !           194:            return o_integer (oi, v, ips -> ips_total);
        !           195: #endif
        !           196: 
        !           197:        case ipInHdrErrors:
        !           198:            return o_integer (oi, v, ips -> ips_badsum
        !           199:                                   + ips -> ips_tooshort
        !           200:                                   + ips -> ips_toosmall
        !           201:                                   + ips -> ips_badhlen
        !           202:                                   + ips -> ips_badlen);
        !           203: 
        !           204: #ifdef ipForwDatagrams
        !           205:        case ipForwDatagrams:
        !           206:            return o_integer (oi, v, ips -> ips_forward);
        !           207: #endif
        !           208: 
        !           209: #ifdef ipInUnknownProtos
        !           210:        case ipInUnknownProtos:
        !           211:            return o_integer (oi, v, ips -> ips_noproto);
        !           212: #endif
        !           213: 
        !           214: #ifdef ipInDelivers
        !           215:        case ipInDelivers:
        !           216:            return o_integer (oi, v, ips -> ips_delivered);
        !           217: #endif
        !           218: 
        !           219: #ifdef ipOutRequests
        !           220:        case ipOutRequests:
        !           221:            return o_integer (oi, v, ips -> ips_localout);
        !           222: #endif
        !           223: 
        !           224: #ifdef ipOutDiscards
        !           225:        case ipOutDiscards:
        !           226:            return o_integer (oi, v, ips -> ips_odropped);
        !           227: #endif
        !           228: 
        !           229: #ifdef ipOutNoRoutes
        !           230:        case ipOutNoRoutes:
        !           231:            return o_integer (oi, v, ips -> ips_cantforward);
        !           232: #endif
        !           233: 
        !           234:        case ipReasmTimeout:
        !           235:            return o_integer (oi, v, IPFRAGTTL);
        !           236: 
        !           237: #ifdef ipReasmReqds
        !           238:        case ipReasmReqds:
        !           239:            return o_integer (oi, v, ips -> ips_fragments);
        !           240: #endif
        !           241: 
        !           242: #ifdef ipReasmOKs
        !           243:        case ipReasmOKs:
        !           244:            return o_integer (oi, v, ips -> ips_reassembled);
        !           245: #endif
        !           246: 
        !           247: #ifdef ipReasmFails
        !           248:        case ipReasmFails:
        !           249:            return o_integer (oi, v, ips -> ips_fragdropped
        !           250:                                   + ips -> ips_fragtimeout);
        !           251: #endif
        !           252: 
        !           253: #ifdef ipFragOKs
        !           254:        case ipFragOKs:
        !           255:            return o_integer (oi, v, ips -> ips_fragmented);
        !           256: #endif
        !           257: 
        !           258: #ifdef ipFragFails
        !           259:        case ipFragFails:
        !           260:            return o_integer (oi, v, ips -> ips_cantfrag);
        !           261: #endif
        !           262: 
        !           263: #ifdef ipFragCreates
        !           264:        case ipFragCreates:
        !           265:            return o_integer (oi, v, ips -> ips_ofragments);
        !           266: #endif
        !           267: 
        !           268:        default:
        !           269:            return int_SNMP_error__status_noSuchName;
        !           270:     }
        !           271: }
        !           272: 
        !           273: /*  */
        !           274: 
        !           275: #ifndef        IP_MAXPACKET
        !           276: #define        IP_MAXPACKET    65535           /* ipAdEntReasmMaxSize */
        !           277: #endif
        !           278: 
        !           279: 
        !           280: #define        IFN_SIZE        4
        !           281: 
        !           282: /*  */
        !           283: 
        !           284: #define        ipAdEntAddr     0
        !           285: #define        ipAdEntIfIndex  1
        !           286: #define        ipAdEntNetMask  2
        !           287: #define        ipAdEntBcastAddr 3
        !           288: #define        ipAdEntReasmMaxSize 4
        !           289: 
        !           290: 
        !           291: static int  o_ip_addr (oi, v, offset)
        !           292: OI     oi;
        !           293: register struct type_SNMP_VarBind *v;
        !           294: int    offset;
        !           295: {
        !           296:     register int   i;
        !           297:     int            ifvar;
        !           298:     register unsigned int *ip,
        !           299:                          *jp;
        !           300:     register struct address   *as;
        !           301:     register OID    oid = oi -> oi_name;
        !           302:     OID            new;
        !           303:     register OT            ot = oi -> oi_type;
        !           304: 
        !           305:     if (sort_interfaces () == NOTOK)
        !           306:        return int_SNMP_error__status_genErr;
        !           307: 
        !           308:     ifvar = (int) ot -> ot_info;
        !           309:     switch (offset) {
        !           310:        case type_SNMP_PDUs_get__request:
        !           311:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + IFN_SIZE)
        !           312:                return int_SNMP_error__status_noSuchName;
        !           313:            if ((as = get_addrent (oid -> oid_elements + oid -> oid_nelem
        !           314:                                   - IFN_SIZE, IFN_SIZE, afs_inet, 0)) == NULL)
        !           315:                return int_SNMP_error__status_noSuchName;
        !           316:            break;
        !           317: 
        !           318:        case type_SNMP_PDUs_get__next__request:
        !           319:            if ((i = oid -> oid_nelem - ot -> ot_name -> oid_nelem) != 0
        !           320:                    && i < IFN_SIZE) {
        !           321:                for (jp = (ip = oid -> oid_elements + ot -> ot_name -> oid_nelem - 1) + i;
        !           322:                         jp > ip;
        !           323:                         jp--)
        !           324:                    if (*jp != 0)
        !           325:                        break;
        !           326:                if (jp == ip)
        !           327:                    oid -> oid_nelem = ot -> ot_name -> oid_nelem;
        !           328:                else {
        !           329:                    if ((new = oid_normalize (oid, IFN_SIZE - i, 256))
        !           330:                            == NULLOID)
        !           331:                        return int_SNMP_error__status_genErr;
        !           332:                    if (v -> name)
        !           333:                        free_SNMP_ObjectName (v -> name);
        !           334:                    v -> name = oid = new;
        !           335:                }
        !           336:            }
        !           337: 
        !           338:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
        !           339:                if ((as = afs_inet) == NULL)
        !           340:                    return NOTOK;
        !           341: 
        !           342:                if ((new = oid_extend (oid, IFN_SIZE)) == NULLOID)
        !           343:                    return int_SNMP_error__status_genErr;
        !           344:                ip = new -> oid_elements + new -> oid_nelem - IFN_SIZE;
        !           345:                jp = as -> adr_instance;
        !           346:                for (i = IFN_SIZE; i> 0; i--)
        !           347:                    *ip++ = *jp++;
        !           348:                
        !           349:                if (v -> name)
        !           350:                    free_SNMP_ObjectName (v -> name);
        !           351:                v -> name = new;
        !           352:            }
        !           353:            else {
        !           354:                if ((as = get_addrent (ip = oid -> oid_elements
        !           355:                                            + oid -> oid_nelem - IFN_SIZE,
        !           356:                                       IFN_SIZE, afs_inet, 1)) == NULL)
        !           357:                    return NOTOK;
        !           358: 
        !           359:                jp = as -> adr_instance;
        !           360:                for (i = IFN_SIZE; i > 0; i--)
        !           361:                    *ip++ = *jp++;
        !           362:            }
        !           363:            break;
        !           364: 
        !           365:        default:
        !           366:            return int_SNMP_error__status_genErr;
        !           367:     }
        !           368: 
        !           369:     switch (ifvar) {
        !           370:        case ipAdEntAddr:
        !           371:            return o_ipaddr (oi, v, (struct sockaddr_in *) &as -> adr_address);
        !           372: 
        !           373:        case ipAdEntIfIndex:
        !           374:            return o_integer (oi, v, ffs (as -> adr_indexmask));
        !           375: 
        !           376:        case ipAdEntNetMask:
        !           377:            return o_ipaddr (oi, v, (struct sockaddr_in *) &as -> adr_netmask);
        !           378: 
        !           379:        case ipAdEntBcastAddr:  /* beyond belief! */
        !           380:            {
        !           381:                u_long a =  (((struct sockaddr_in *) &as -> adr_netmask)
        !           382:                                                            -> sin_addr.s_addr)
        !           383:                                  & ~(((struct sockaddr_in *) &as
        !           384:                                        -> adr_broadaddr) -> sin_addr.s_addr);
        !           385: 
        !           386:                return o_integer (oi, v, a ? 1 : 0);
        !           387:            }
        !           388: 
        !           389:        case ipAdEntReasmMaxSize:
        !           390:            return o_integer (oi, v, IP_MAXPACKET);
        !           391: 
        !           392:        default:
        !           393:            return int_SNMP_error__status_noSuchName;
        !           394:     }
        !           395: }
        !           396: 
        !           397: /*  */
        !           398: 
        !           399: #define        ipRouteDest     0
        !           400: #define        ipRouteIfIndex  1
        !           401: #define        ipRouteMetric1  2
        !           402: #define        ipRouteMetric2  3
        !           403: #define        ipRouteMetric3  4
        !           404: #define        ipRouteMetric4  5
        !           405: #define        ipRouteNextHop  6
        !           406: #define        ipRouteType     7
        !           407: #define        ipRouteProto    8
        !           408: #define        ipRouteAge      9
        !           409: #define        ipRouteMask     10
        !           410: #define        unixIpRouteFlags 11
        !           411: #define        unixIpRouteRefCnt 12
        !           412: #define        unixIpRouteUses 13
        !           413: 
        !           414: 
        !           415: static int  o_ip_route (oi, v, offset)
        !           416: OI     oi;
        !           417: register struct type_SNMP_VarBind *v;
        !           418: int    offset;
        !           419: {
        !           420:     int            ifvar;
        !           421:     register int    i;
        !           422:     register unsigned int *ip,
        !           423:                          *jp;
        !           424:     register struct rtetab *rt;
        !           425:     register OID    oid = oi -> oi_name;
        !           426:     OID            new;
        !           427:     register OT            ot = oi -> oi_type;
        !           428: 
        !           429:     if (get_routes (offset) == NOTOK)
        !           430:        return int_SNMP_error__status_genErr;
        !           431: 
        !           432:     ifvar = (int) ot -> ot_info;
        !           433:     switch (offset) {
        !           434:        case type_SNMP_PDUs_get__request:
        !           435:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + IFN_SIZE)
        !           436:                return int_SNMP_error__status_noSuchName;
        !           437:            if ((rt = get_rtent (oid -> oid_elements + oid -> oid_nelem
        !           438:                                        - IFN_SIZE, IFN_SIZE, rts_inet, 0))
        !           439:                    == NULL)
        !           440:                return int_SNMP_error__status_noSuchName;
        !           441:            break;
        !           442: 
        !           443:        case type_SNMP_PDUs_get__next__request:
        !           444:            if ((i = oid -> oid_nelem - ot -> ot_name -> oid_nelem) != 0
        !           445:                    && i < IFN_SIZE) {
        !           446:                for (jp = (ip = oid -> oid_elements + ot -> ot_name -> oid_nelem - 1) + i;
        !           447:                         jp > ip;
        !           448:                         jp--)
        !           449:                    if (*jp != 0)
        !           450:                        break;
        !           451:                if (jp == ip)
        !           452:                    oid -> oid_nelem = ot -> ot_name -> oid_nelem;
        !           453:                else {
        !           454:                    if ((new = oid_normalize (oid, IFN_SIZE - i, 256))
        !           455:                            == NULLOID)
        !           456:                        return int_SNMP_error__status_genErr;
        !           457:                    if (v -> name)
        !           458:                        free_SNMP_ObjectName (v -> name);
        !           459:                    v -> name = oid = new;
        !           460:                }
        !           461:            }
        !           462: 
        !           463:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
        !           464:                if ((rt = rts_inet) == NULL)
        !           465:                    return NOTOK;
        !           466: 
        !           467:                if ((new = oid_extend (oid, IFN_SIZE)) == NULLOID)
        !           468:                    return int_SNMP_error__status_genErr;
        !           469:                ip = new -> oid_elements + new -> oid_nelem - IFN_SIZE;
        !           470: 
        !           471:                if (v -> name)
        !           472:                    free_SNMP_ObjectName (v -> name);
        !           473:                v -> name = new;
        !           474:            }
        !           475:            else
        !           476:                if ((rt = get_rtent (ip = oid -> oid_elements
        !           477:                                            + oid -> oid_nelem - IFN_SIZE,
        !           478:                                     IFN_SIZE, rts_inet, 1)) == NULL)
        !           479:                    return NOTOK;
        !           480:            jp = rt -> rt_instance;
        !           481:            for (i = IFN_SIZE; i> 0; i--)
        !           482:                *ip++ = *jp++;
        !           483:                
        !           484:            break;
        !           485: 
        !           486:        default:
        !           487:            return int_SNMP_error__status_genErr;
        !           488:     }
        !           489: 
        !           490:     switch (ifvar) {
        !           491:        case ipRouteDest:
        !           492:            return o_ipaddr (oi, v, (struct sockaddr_in *) &rt -> rt_dst);
        !           493: 
        !           494:        case ipRouteIfIndex:
        !           495:            {
        !           496:                register struct interface *is;
        !           497: 
        !           498:                if (sort_interfaces () == NOTOK)
        !           499:                    return int_SNMP_error__status_genErr;
        !           500: 
        !           501:                for (is = ifs; is; is = is -> ifn_next)
        !           502:                    if ((caddr_t) is -> ifn_offset
        !           503:                                == (caddr_t) rt -> rt_rt.rt_ifp) {
        !           504:                        if (is -> ifn_ready)
        !           505:                            return o_integer (oi, v, is -> ifn_index);
        !           506:                        break;
        !           507:                    }
        !           508: 
        !           509:                if (offset == type_SNMP_PDUs_get__next__request)
        !           510:                    return NOTOK;
        !           511:                return int_SNMP_error__status_noSuchName;
        !           512:            }
        !           513:            
        !           514:        case ipRouteMetric1:
        !           515:        case ipRouteMetric2:
        !           516:        case ipRouteMetric3:
        !           517:        case ipRouteMetric4:
        !           518:            return o_integer (oi, v, METRIC_NONE);
        !           519: 
        !           520:        case ipRouteNextHop:
        !           521:            return o_ipaddr (oi, v, (struct sockaddr_in *) &rt -> rt_gateway);
        !           522: 
        !           523:        case ipRouteType:
        !           524:            switch (rt -> rt_rt.rt_flags & (RTF_GATEWAY | RTF_HOST)) {
        !           525:                case RTF_GATEWAY:
        !           526:                case RTF_HOST:
        !           527:                    return o_integer (oi, v, TYPE_REMOTE);
        !           528: 
        !           529:                case 0:
        !           530:                    return o_integer (oi, v, TYPE_DIRECT);
        !           531: 
        !           532:                default:
        !           533:                    return o_integer (oi, v, TYPE_OTHER);
        !           534:            }
        !           535: 
        !           536:        case ipRouteProto:
        !           537: #ifdef RTF_DYNAMIC
        !           538: #ifndef        RTF_MODIFIED
        !           539:            if (rt -> rt_rt.rt_flags & RTF_DYNAMIC)
        !           540: #else
        !           541:            if (rt -> rt_rt.rt_flags & (RTF_DYNAMIC | RTF_MODIFIED))
        !           542: #endif
        !           543:                return o_integer (oi, v, PROTO_ICMP);
        !           544:            else
        !           545: #endif
        !           546:                return o_integer (oi, v, PROTO_OTHER);
        !           547: 
        !           548:        case ipRouteAge:
        !           549:            return o_integer (oi, v, 0);
        !           550: 
        !           551:        case ipRouteMask:
        !           552:            {
        !           553:                struct sockaddr_in mask;
        !           554:                struct sockaddr_in *sin = (struct sockaddr_in *) &rt -> rt_dst;
        !           555: #ifndef        BSD44
        !           556:                register struct interface *is;
        !           557:                register struct address *as;
        !           558: #endif
        !           559: 
        !           560:                bzero ((char *) &mask, sizeof mask);
        !           561:                
        !           562:                if (rt->rt_rt.rt_flags & RTF_HOST)
        !           563:                    mask.sin_addr.s_addr = (u_long) 0xffffffff;
        !           564:                else
        !           565:                    if (sin -> sin_addr.s_addr != 0L) {
        !           566: #ifndef        BSD44
        !           567:                        /* XXX - BSD44 shouldn't use this code, it has a */
        !           568:                        /* mask associated with each route, but I don't */
        !           569:                        /* know how to locate it at the moment (jch) */
        !           570: 
        !           571:                        if (sort_interfaces () == NOTOK)
        !           572:                            return int_SNMP_error__status_genErr;
        !           573: 
        !           574:                        for (is = ifs; is; is = is -> ifn_next)
        !           575:                            if ((caddr_t) is -> ifn_offset
        !           576:                                    == (caddr_t) rt -> rt_rt.rt_ifp)
        !           577:                                break;
        !           578: 
        !           579:                        if (!is || !is -> ifn_ready)
        !           580:                            return int_SNMP_error__status_noSuchName;
        !           581: 
        !           582:                        for (as = afs_inet; as; as = as -> adr_next)
        !           583:                            if (is -> ifn_indexmask & as -> adr_indexmask)
        !           584:                                break;
        !           585: 
        !           586:                        if (!as)
        !           587:                            return int_SNMP_error__status_noSuchName;
        !           588: 
        !           589:                        mask.sin_addr.s_addr = as -> adr_netmask.un_in.sin_addr.s_addr;
        !           590: #else
        !           591:                        if (IN_CLASSA (sin -> sin_addr.s_addr))
        !           592:                            mask.sin_addr.s_addr = IN_CLASSA_NET;
        !           593:                        else
        !           594:                            if (IN_CLASSB (sin -> sin_addr.s_addr))
        !           595:                                mask.sin_addr.s_addr = IN_CLASSB_NET;
        !           596:                            else
        !           597:                                mask.sin_addr.s_addr = IN_CLASSC_NET;
        !           598: #endif
        !           599:                }
        !           600: 
        !           601:                return o_ipaddr (oi, v, &mask);
        !           602:            }
        !           603: 
        !           604:        case unixIpRouteFlags:
        !           605:            return o_integer (oi, v, rt -> rt_rt.rt_flags & 0xffff);
        !           606: 
        !           607:        case unixIpRouteRefCnt:
        !           608:            return o_integer (oi, v, rt -> rt_rt.rt_refcnt & 0xffff);
        !           609: 
        !           610:        case unixIpRouteUses:
        !           611:            return o_integer (oi, v, rt -> rt_rt.rt_use);
        !           612: 
        !           613:        default:
        !           614:            return int_SNMP_error__status_noSuchName;
        !           615:     }
        !           616: }
        !           617: 
        !           618: /*  */
        !           619: 
        !           620: static struct rtstat rtstat;
        !           621: 
        !           622: /*  */
        !           623: 
        !           624: #define        unixRouteBadRedirects 0
        !           625: #define        unixRouteCreatedByRedirects 1
        !           626: #define        unixRouteModifiedByRedirects 2
        !           627: #define        unixRouteLookupFails 3
        !           628: #define        unixRouteWildcardUses 4
        !           629: 
        !           630: 
        !           631: static int  o_ip_routing_stats (oi, v, offset)
        !           632: OI     oi;
        !           633: register struct type_SNMP_VarBind *v;
        !           634: int    offset;
        !           635: {
        !           636:     int            ifvar;
        !           637:     register struct rtstat *rts = &rtstat;
        !           638:     register OID    oid = oi -> oi_name;
        !           639:     register OT            ot = oi -> oi_type;
        !           640:     static   int lastq = -1;
        !           641: 
        !           642:     ifvar = (int) ot -> ot_info;
        !           643:     switch (offset) {
        !           644:        case type_SNMP_PDUs_get__request:
        !           645:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
        !           646:                    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
        !           647:                return int_SNMP_error__status_noSuchName;
        !           648:            break;
        !           649: 
        !           650:        case type_SNMP_PDUs_get__next__request:
        !           651:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
        !           652:                OID     new;
        !           653: 
        !           654:                if ((new = oid_extend (oid, 1)) == NULLOID)
        !           655:                    return int_SNMP_error__status_genErr;
        !           656:                new -> oid_elements[new -> oid_nelem - 1] = 0;
        !           657: 
        !           658:                if (v -> name)
        !           659:                    free_SNMP_ObjectName (v -> name);
        !           660:                v -> name = new;
        !           661:            }
        !           662:            else
        !           663:                return NOTOK;
        !           664:            break;
        !           665: 
        !           666:        default:
        !           667:            return int_SNMP_error__status_genErr;
        !           668:     }
        !           669: 
        !           670:     if (quantum != lastq) {
        !           671:        lastq = quantum;
        !           672: 
        !           673:        if (getkmem (nl + N_RTSTAT, (caddr_t) rts, sizeof *rts) == NOTOK)
        !           674:            return int_SNMP_error__status_genErr;
        !           675:     }
        !           676: 
        !           677:     switch (ifvar) {
        !           678:        case unixRouteBadRedirects:
        !           679:            return o_integer (oi, v, rts -> rts_badredirect & 0xffff);
        !           680: 
        !           681:        case unixRouteCreatedByRedirects:
        !           682:            return o_integer (oi, v, rts -> rts_dynamic & 0xffff);
        !           683: 
        !           684:        case unixRouteModifiedByRedirects:
        !           685:            return o_integer (oi, v, rts -> rts_newgateway & 0xffff);
        !           686: 
        !           687:        case unixRouteLookupFails:
        !           688:            return o_integer (oi, v, rts -> rts_unreach & 0xffff);
        !           689: 
        !           690:        case unixRouteWildcardUses:
        !           691:            return o_integer (oi, v, rts -> rts_wildcard & 0xffff);
        !           692: 
        !           693:        default:
        !           694:            return int_SNMP_error__status_noSuchName;
        !           695:     }
        !           696: }
        !           697: 
        !           698: /*  */
        !           699: 
        !           700: struct adrtab {
        !           701: #define        ADN_SIZE        (IFN_SIZE + 1)          /* IpAddress instance */
        !           702:     unsigned int    adn_instance[ADN_SIZE];    
        !           703:     int            adn_insize;
        !           704: 
        !           705:     struct in_addr adn_address;                        /* IpAddress */
        !           706: 
        !           707: 
        !           708: #define        ADM_SIZE        ADR_SIZE                /* PhysAddress instance */
        !           709:     unsigned int    adm_instance[ADM_SIZE];    
        !           710:     int            adm_insize;
        !           711: 
        !           712:     u_char     adm_address[ADM_SIZE];          /* PhysAddress */
        !           713:     u_char     adm_addrlen;                    /*   .. */
        !           714: 
        !           715: 
        !           716: #define        ADA_SIZE        (IFN_SIZE + 2)          /* AtEntry instance */
        !           717:     unsigned int    ada_instance[ADA_SIZE];    
        !           718:     int            ada_insize;
        !           719: 
        !           720: 
        !           721:     int            adr_index;                          /* ifIndex */
        !           722: 
        !           723:     int            adr_type;                           /* ipNetToMediaType */
        !           724: #define        OTHER_MAPPING   1
        !           725: #define        DYNAMIC_MAPPING 3
        !           726: #define        STATIC_MAPPING  4
        !           727: 
        !           728:     struct adrtab *adn_next;                   /* next IpAddress */
        !           729:     struct adrtab *adm_next;                   /* next PhysAddress */
        !           730:     struct adrtab *ada_next;                   /* next AtEntry */
        !           731: };
        !           732: 
        !           733: static struct adrtab *ada = NULL;
        !           734: static struct adrtab *adn = NULL;
        !           735: static struct adrtab *adm = NULL;
        !           736: 
        !           737: 
        !           738: static struct adrtab *get_arpent ();
        !           739: 
        !           740: /*  */
        !           741: 
        !           742: #define        atIfIndex       0
        !           743: #define        atPhysAddress   1
        !           744: #define        atNetAddress    2
        !           745: 
        !           746: #define        ipNetToMediaIfIndex 3
        !           747: #define        ipNetToMediaPhysAddress 4
        !           748: #define        ipNetToMediaNetAddress 5
        !           749: #define        ipNetToMediaType 6
        !           750: 
        !           751: 
        !           752: static int  o_address (oi, v, offset)
        !           753: OI     oi;
        !           754: register struct type_SNMP_VarBind *v;
        !           755: int    offset;
        !           756: {
        !           757:     register int    i;
        !           758:     int            ifvar,
        !           759:            isnpa;
        !           760:     register unsigned int *ip,
        !           761:                          *jp;
        !           762:     register struct adrtab *at;
        !           763:     struct sockaddr_in netaddr;
        !           764:     register OID    oid = oi -> oi_name;
        !           765:     register OT            ot = oi -> oi_type;
        !           766: 
        !           767:     if (get_arptab () == NOTOK)
        !           768:        return int_SNMP_error__status_genErr;
        !           769: 
        !           770:     switch (ifvar = (int) ot -> ot_info) {
        !           771:        case ipNetToMediaIfIndex:
        !           772:        case ipNetToMediaPhysAddress:
        !           773:        case ipNetToMediaNetAddress:
        !           774:        case ipNetToMediaType:
        !           775:            isnpa = 0;
        !           776:            break;
        !           777: 
        !           778:        case atIfIndex:
        !           779:        case atPhysAddress:
        !           780:        case atNetAddress:
        !           781:            isnpa = -1;
        !           782:     }
        !           783:     
        !           784:     switch (offset) {
        !           785:        case type_SNMP_PDUs_get__request:
        !           786:            if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
        !           787:                return int_SNMP_error__status_noSuchName;
        !           788:            if ((at = get_arpent (oid -> oid_elements
        !           789:                                        + ot -> ot_name -> oid_nelem,
        !           790:                                  oid -> oid_nelem
        !           791:                                        - ot -> ot_name -> oid_nelem,
        !           792:                                  isnpa, 0)) == NULL)
        !           793:                return int_SNMP_error__status_noSuchName;
        !           794:            break;
        !           795: 
        !           796:        case type_SNMP_PDUs_get__next__request:
        !           797:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
        !           798:                OID     new;
        !           799: 
        !           800:                switch (isnpa) {
        !           801:                    case 0:
        !           802:                        if (at = adn)
        !           803:                            jp = at -> adn_instance, i = at -> adn_insize;
        !           804:                        break;
        !           805: 
        !           806:                    case 1:
        !           807:                        if (at = adm)
        !           808:                            jp = at -> adm_instance, i = at -> adm_insize;
        !           809:                        break;
        !           810: 
        !           811:                    case -1:
        !           812:                        if (at = ada)
        !           813:                            jp = at -> ada_instance, i = at -> ada_insize;
        !           814:                        break;
        !           815:                }
        !           816:                if (at == NULL)
        !           817:                    return NOTOK;
        !           818: 
        !           819:                if ((new = oid_extend (oid, i)) == NULLOID)
        !           820:                    return int_SNMP_error__status_genErr;
        !           821:                ip = new -> oid_elements + new -> oid_nelem - i;
        !           822:                for (; i > 0; i--)
        !           823:                    *ip++ = *jp++;
        !           824: 
        !           825:                if (v -> name)
        !           826:                    free_SNMP_ObjectName (v -> name);
        !           827:                v -> name = new;
        !           828:            }
        !           829:            else {
        !           830:                int     j;
        !           831: 
        !           832:                if ((at = get_arpent (oid -> oid_elements
        !           833:                                          + ot -> ot_name -> oid_nelem,
        !           834:                                      j = oid -> oid_nelem
        !           835:                                              - ot -> ot_name -> oid_nelem,
        !           836:                                      isnpa, 1)) == NULL)
        !           837:                    return NOTOK;
        !           838:                i = isnpa > 0 ? at -> adm_insize
        !           839:                              : isnpa == 0 ? at -> adn_insize
        !           840:                                           : at -> ada_insize;
        !           841: 
        !           842:                if ((i = j - i) < 0) {
        !           843:                    OID     new;
        !           844: 
        !           845:                    if ((new = oid_extend (oid, -i)) == NULLOID)
        !           846:                        return int_SNMP_error__status_genErr;
        !           847:                    if (v -> name)
        !           848:                        free_SNMP_ObjectName (v -> name);
        !           849:                    v -> name = new;
        !           850: 
        !           851:                    oid = new;
        !           852:                }
        !           853:                else
        !           854:                    if (i > 0)
        !           855:                        oid -> oid_nelem -= i;
        !           856: 
        !           857:                ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
        !           858:                switch (isnpa) {
        !           859:                    case 0:
        !           860:                        jp = at -> adn_instance, i = at -> adn_insize;
        !           861:                        break;
        !           862: 
        !           863:                    case 1:
        !           864:                        jp = at -> adm_instance, i = at -> adm_insize;
        !           865:                        break;
        !           866: 
        !           867:                    case -1:
        !           868:                        jp = at -> ada_instance, i = at -> ada_insize;
        !           869:                        break;
        !           870: 
        !           871:                }
        !           872:                for (; i > 0; i--)
        !           873:                    *ip++ = *jp++;
        !           874:            }
        !           875:            break;
        !           876: 
        !           877:        default:
        !           878:            return int_SNMP_error__status_genErr;
        !           879:     }
        !           880: 
        !           881:     switch (ifvar) {
        !           882:        case atIfIndex:
        !           883:        case ipNetToMediaIfIndex:
        !           884:            return o_integer (oi, v, at -> adr_index);
        !           885: 
        !           886:        case atPhysAddress:
        !           887:        case ipNetToMediaPhysAddress:
        !           888:            return o_string (oi, v, (char *) at -> adm_address,
        !           889:                             (int) at -> adm_addrlen);
        !           890: 
        !           891:        case atNetAddress:
        !           892:        case ipNetToMediaNetAddress:
        !           893:            netaddr.sin_addr = at -> adn_address;       /* struct copy */
        !           894:            return o_ipaddr (oi, v, &netaddr);
        !           895: 
        !           896:        case ipNetToMediaType:
        !           897:            return o_integer (oi, v, at -> adr_type);
        !           898:            
        !           899:        default:
        !           900:            return int_SNMP_error__status_noSuchName;
        !           901:     }
        !           902: }
        !           903: 
        !           904: /*  */
        !           905: 
        !           906: static int  adn_compar (a, b)
        !           907: register struct adrtab **a,
        !           908:                       **b;
        !           909: {
        !           910:     return elem_cmp ((*a) -> adn_instance, (*a) -> adn_insize,
        !           911:                     (*b) -> adn_instance, (*b) -> adn_insize);
        !           912: }
        !           913: 
        !           914: 
        !           915: static int  adm_compar (a, b)
        !           916: register struct adrtab **a,
        !           917:                       **b;
        !           918: {
        !           919:     return elem_cmp ((*a) -> adm_instance, (*a) -> adm_insize,
        !           920:                     (*b) -> adm_instance, (*b) -> adm_insize);
        !           921: }
        !           922: 
        !           923: static int  ada_compar (a, b)
        !           924: register struct adrtab **a,
        !           925:                       **b;
        !           926: {
        !           927:     return elem_cmp ((*a) -> ada_instance, (*a) -> ada_insize,
        !           928:                     (*b) -> ada_instance, (*b) -> ada_insize);
        !           929: }
        !           930: 
        !           931: 
        !           932: 
        !           933: static int  get_arptab () {
        !           934:     int            adrNumber = 0,
        !           935:            arptab_size,
        !           936:            tblsize;
        !           937:     register struct arptab *ac,
        !           938:                           *ae;
        !           939:     struct arptab *arptab;
        !           940:     register struct adrtab *at,
        !           941:                           *ap,
        !           942:                          **base,
        !           943:                          **afe,
        !           944:                          **afp;
        !           945:     register struct interface *is;
        !           946:     static  int first_time = 1;
        !           947:     static  int lastq = -1;
        !           948: 
        !           949:     if (quantum == lastq)
        !           950:        return OK;
        !           951:     lastq = quantum;
        !           952: 
        !           953:     for (at = adn; at; at = ap) {
        !           954:        ap = at -> adn_next;
        !           955: 
        !           956:        free ((char *) at);
        !           957:     }
        !           958:     adn = adm = ada = NULL;
        !           959: 
        !           960:     if (getkmem (nl + N_ARPTAB_SIZE, (caddr_t) &arptab_size,
        !           961:                 sizeof arptab_size) == NOTOK)
        !           962:        return NOTOK;
        !           963:     tblsize = arptab_size * sizeof *arptab;
        !           964:     if ((arptab = (struct arptab *) malloc ((unsigned) (tblsize))) == NULL)
        !           965:        adios (NULLCP, "out of memory");
        !           966:     if (getkmem (nl + N_ARPTAB, (caddr_t) arptab, tblsize) == NOTOK) {
        !           967:        free ((char *) arptab);
        !           968:        return NOTOK;
        !           969:     }
        !           970: 
        !           971:     afp = &adn;
        !           972:     for (ae = (ac = arptab) + arptab_size; ac < ae; ac++) {
        !           973:        int     type;
        !           974: 
        !           975:        if (!(ac -> at_iaddr.s_addr) || !(ac -> at_flags & ATF_COM))
        !           976:            continue;
        !           977:        type = ac -> at_flags & ATF_PERM ? OTHER_MAPPING
        !           978:             : ac -> at_flags & ATF_PUBL ? STATIC_MAPPING
        !           979:             : DYNAMIC_MAPPING;
        !           980: 
        !           981: /* there appears to be no way to gather per-interface address translation
        !           982:    tables, so we simply duplicate the arptable for each interface... */
        !           983:        for (is = ifs; is; is = is -> ifn_next) {
        !           984:            if (!is -> ifn_ready)
        !           985:                continue;
        !           986: 
        !           987:            if ((at = (struct adrtab *) calloc (1, sizeof *at)) == NULL)
        !           988:                adios (NULLCP, "out of memory");
        !           989:            *afp = at, afp = &at -> adn_next, adrNumber++;
        !           990: 
        !           991:            at -> adr_index = is -> ifn_index;
        !           992:            at -> adr_type = type;
        !           993: 
        !           994:            at -> adn_address = ac -> at_iaddr; /* struct copy */
        !           995:            at -> adn_instance[0] = at -> adr_index, at -> adn_insize = 1;
        !           996:            at -> adn_insize += ipaddr2oid (at -> adn_instance + 1,
        !           997:                                            &at -> adn_address);
        !           998: 
        !           999: #ifdef NEW_AT
        !          1000:            bcopy ((char *) ac -> at_enaddr,
        !          1001:                   (char *) at -> adm_address,
        !          1002:                   (int) (at -> adm_addrlen = sizeof ac -> at_enaddr));
        !          1003: #else
        !          1004:            bcopy ((char *) ac -> at_enaddr.ether_addr_octet,
        !          1005:                   (char *) at -> adm_address,
        !          1006:                   (int) (at -> adm_addrlen =
        !          1007:                          sizeof ac -> at_enaddr.ether_addr_octet));
        !          1008: #endif
        !          1009:            at -> adm_instance[0] = at -> adr_index, at -> adm_insize = 1;
        !          1010:            at -> adm_insize += mediaddr2oid (at -> adm_instance + 1,
        !          1011:                                              at -> adm_address,
        !          1012:                                              (int) at -> adm_addrlen, 0);
        !          1013: 
        !          1014:            at -> ada_instance[0] = at -> adr_index;
        !          1015:            at -> ada_instance[1] = 1;
        !          1016:            at -> ada_insize = 2;
        !          1017:            at -> ada_insize += ipaddr2oid (at -> ada_instance + 2,
        !          1018:                                            &at -> adn_address);
        !          1019: 
        !          1020:            if (debug && first_time) {
        !          1021:                char    buffer[BUFSIZ];
        !          1022:                OIDentifier     oids;
        !          1023: 
        !          1024:                oids.oid_elements = at -> adn_instance;
        !          1025:                oids.oid_nelem = at -> adn_insize;
        !          1026:                (void) strcpy (buffer, sprintoid (&oids));
        !          1027:                oids.oid_elements = at -> adm_instance;
        !          1028:                oids.oid_nelem = at -> adm_insize;
        !          1029:                advise (LLOG_DEBUG, NULLCP,
        !          1030:                        "add mapping on %d: %s -> %s",
        !          1031:                        at -> adr_index, buffer, sprintoid (&oids));
        !          1032:            }
        !          1033:        }
        !          1034:     }
        !          1035:     first_time = 0;
        !          1036:     free ((char *) arptab);
        !          1037: 
        !          1038:     if (adrNumber <= 1) {
        !          1039:        adm = ada = adn;
        !          1040:        return OK;
        !          1041:     }
        !          1042: 
        !          1043:     if ((base = (struct adrtab **)
        !          1044:                    malloc ((unsigned) (adrNumber * sizeof *base))) == NULL)
        !          1045:        adios (NULLCP, "out of memory");
        !          1046: 
        !          1047:     afe = base;
        !          1048:     for (at = adn; at; at = at -> adn_next)
        !          1049:        *afe++ = at;
        !          1050: 
        !          1051:     qsort ((char *) base, adrNumber, sizeof *base, adn_compar);
        !          1052: 
        !          1053:     afp = base;
        !          1054:     at = adn = *afp++;
        !          1055:     while (afp < afe) {
        !          1056:        at -> adn_next = *afp;
        !          1057:        at = *afp++;
        !          1058:     }
        !          1059:     at -> adn_next = NULL;
        !          1060: 
        !          1061:     qsort ((char *) base, adrNumber, sizeof *base, adm_compar);
        !          1062: 
        !          1063:     afp = base;
        !          1064:     at = adm = *afp++;
        !          1065:     while (afp < afe) {
        !          1066:        at -> adm_next = *afp;
        !          1067:        at = *afp++;
        !          1068:     }
        !          1069:     at -> adm_next = NULL;
        !          1070: 
        !          1071:     qsort ((char *) base, adrNumber, sizeof *base, ada_compar);
        !          1072: 
        !          1073:     afp = base;
        !          1074:     at = ada = *afp++;
        !          1075:     while (afp < afe) {
        !          1076:        at -> ada_next = *afp;
        !          1077:        at = *afp++;
        !          1078:     }
        !          1079:     at -> ada_next = NULL;
        !          1080: 
        !          1081:     free ((char *) base);
        !          1082: 
        !          1083:     return OK;
        !          1084: }
        !          1085: 
        !          1086: /*  */
        !          1087: 
        !          1088: static struct adrtab *get_arpent (ip, len, isnpa, isnext)
        !          1089: register unsigned int *ip;
        !          1090: int    len;
        !          1091: int    isnpa,
        !          1092:        isnext;
        !          1093: {
        !          1094:     register struct adrtab *at;
        !          1095: 
        !          1096:     switch (isnpa) {
        !          1097:        case 0:
        !          1098:            for (at = adn; at; at = at -> adn_next)
        !          1099:                switch (elem_cmp (at -> adn_instance, at -> adn_insize,
        !          1100:                                  ip, len)) {
        !          1101:                    case 0:
        !          1102:                        return (isnext ? at -> adn_next : at);
        !          1103: 
        !          1104:                    case 1:
        !          1105:                        return (isnext ? at : NULL);
        !          1106:                }
        !          1107:            break;
        !          1108: 
        !          1109:        case 1:
        !          1110:            for (at = adm; at; at = at -> adm_next)
        !          1111:                switch (elem_cmp (at -> adm_instance, at -> adm_insize,
        !          1112:                                  ip, len)) {
        !          1113:                    case 0:
        !          1114:                        return (isnext ? at -> adm_next : at);
        !          1115: 
        !          1116:                    case 1:
        !          1117:                        return (isnext ? at : NULL);
        !          1118:                }
        !          1119:            break;
        !          1120: 
        !          1121:        case -1:
        !          1122:            for (at = ada; at; at = at -> ada_next)
        !          1123:                switch (elem_cmp (at -> ada_instance, at -> ada_insize,
        !          1124:                                  ip, len)) {
        !          1125:                    case 0:
        !          1126:                        return (isnext ? at -> ada_next : at);
        !          1127: 
        !          1128:                    case 1:
        !          1129:                        return (isnext ? at : NULL);
        !          1130:                }
        !          1131:            break;
        !          1132:     }
        !          1133: 
        !          1134:     return NULL;
        !          1135: }
        !          1136: 
        !          1137: /*  */
        !          1138: 
        !          1139: init_ip () {
        !          1140:     register OT            ot;
        !          1141: 
        !          1142:     if (ot = text2obj ("ipForwarding"))
        !          1143:        ot -> ot_getfnx = o_ip,
        !          1144:        ot -> ot_info = (caddr_t) ipForwarding;
        !          1145:     if (ot = text2obj ("ipDefaultTTL"))
        !          1146:        ot -> ot_getfnx = o_ip,
        !          1147:        ot -> ot_info = (caddr_t) ipDefaultTTL;
        !          1148: #ifdef ipInReceives
        !          1149:     if (ot = text2obj ("ipInReceives"))
        !          1150:        ot -> ot_getfnx = o_ip,
        !          1151:        ot -> ot_info = (caddr_t) ipInReceives;
        !          1152: #endif
        !          1153:     if (ot = text2obj ("ipInHdrErrors"))
        !          1154:        ot -> ot_getfnx = o_ip,
        !          1155:        ot -> ot_info = (caddr_t) ipInHdrErrors;
        !          1156: #ifdef ipInAddrErrors
        !          1157:     if (ot = text2obj ("ipInAddrErrors"))
        !          1158:        ot -> ot_getfnx = o_ip,
        !          1159:        ot -> ot_info = (caddr_t) ipInAddrErrors;
        !          1160: #endif
        !          1161: #ifdef ipForwDatagrams
        !          1162:     if (ot = text2obj ("ipForwDatagrams"))
        !          1163:        ot -> ot_getfnx = o_ip,
        !          1164:        ot -> ot_info = (caddr_t) ipForwDatagrams;
        !          1165: #endif
        !          1166: #ifdef ipInUnknownProtos
        !          1167:     if (ot = text2obj ("ipInUnknownProtos"))
        !          1168:        ot -> ot_getfnx = o_ip,
        !          1169:        ot -> ot_info = (caddr_t) ipInUnknownProtos;
        !          1170: #endif
        !          1171: #ifdef ipInDiscards
        !          1172:     if (ot = text2obj ("ipInDiscards"))
        !          1173:        ot -> ot_getfnx = o_ip,
        !          1174:        ot -> ot_info = (caddr_t) ipInDiscards;
        !          1175: #endif
        !          1176: #ifdef ipInDelivers
        !          1177:     if (ot = text2obj ("ipInDelivers"))
        !          1178:        ot -> ot_getfnx = o_ip,
        !          1179:        ot -> ot_info = (caddr_t) ipInDelivers;
        !          1180: #endif
        !          1181: #ifdef ipOutRequests
        !          1182:     if (ot = text2obj ("ipOutRequests"))
        !          1183:        ot -> ot_getfnx = o_ip,
        !          1184:        ot -> ot_info = (caddr_t) ipOutRequests;
        !          1185: #endif
        !          1186: #ifdef ipOutDiscards
        !          1187:     if (ot = text2obj ("ipOutDiscards"))
        !          1188:        ot -> ot_getfnx = o_ip,
        !          1189:        ot -> ot_info = (caddr_t) ipOutDiscards;
        !          1190: #endif
        !          1191: #ifdef ipOutNoRoutes
        !          1192:     if (ot = text2obj ("ipOutNoRoutes"))
        !          1193:        ot -> ot_getfnx = o_ip,
        !          1194:        ot -> ot_info = (caddr_t) ipOutNoRoutes;
        !          1195: #endif
        !          1196:     if (ot = text2obj ("ipReasmTimeout"))
        !          1197:        ot -> ot_getfnx = o_ip,
        !          1198:        ot -> ot_info = (caddr_t) ipReasmTimeout;
        !          1199: #ifdef ipReasmReqds
        !          1200:     if (ot = text2obj ("ipReasmReqds"))
        !          1201:        ot -> ot_getfnx = o_ip,
        !          1202:        ot -> ot_info = (caddr_t) ipReasmReqds;
        !          1203: #endif
        !          1204: #ifdef ipReasmOKs
        !          1205:     if (ot = text2obj ("ipReasmOKs"))
        !          1206:        ot -> ot_getfnx = o_ip,
        !          1207:        ot -> ot_info = (caddr_t) ipReasmOKs;
        !          1208: #endif
        !          1209: #ifdef ipReasmFails
        !          1210:     if (ot = text2obj ("ipReasmFails"))
        !          1211:        ot -> ot_getfnx = o_ip,
        !          1212:        ot -> ot_info = (caddr_t) ipReasmFails;
        !          1213: #endif
        !          1214: #ifdef ipFragOKs
        !          1215:     if (ot = text2obj ("ipFragOKs"))
        !          1216:        ot -> ot_getfnx = o_ip,
        !          1217:        ot -> ot_info = (caddr_t) ipFragOKs;
        !          1218: #endif
        !          1219: #ifdef ipFragFails
        !          1220:     if (ot = text2obj ("ipFragFails"))
        !          1221:        ot -> ot_getfnx = o_ip,
        !          1222:        ot -> ot_info = (caddr_t) ipFragFails;
        !          1223: #endif
        !          1224: #ifdef ipFragCreates
        !          1225:     if (ot = text2obj ("ipFragCreates"))
        !          1226:        ot -> ot_getfnx = o_ip,
        !          1227:        ot -> ot_info = (caddr_t) ipFragCreates;
        !          1228: #endif
        !          1229: 
        !          1230:     if (ot = text2obj ("ipAdEntAddr"))
        !          1231:        ot -> ot_getfnx = o_ip_addr,
        !          1232:        ot -> ot_info = (caddr_t) ipAdEntAddr;
        !          1233:     if (ot = text2obj ("ipAdEntIfIndex"))
        !          1234:        ot -> ot_getfnx = o_ip_addr,
        !          1235:        ot -> ot_info = (caddr_t) ipAdEntIfIndex;
        !          1236:     if (ot = text2obj ("ipAdEntNetMask"))
        !          1237:        ot -> ot_getfnx = o_ip_addr,
        !          1238:        ot -> ot_info = (caddr_t) ipAdEntNetMask;
        !          1239:     if (ot = text2obj ("ipAdEntBcastAddr"))
        !          1240:        ot -> ot_getfnx = o_ip_addr,
        !          1241:        ot -> ot_info = (caddr_t) ipAdEntBcastAddr;
        !          1242:     if (ot = text2obj ("ipAdEntReasmMaxSize"))
        !          1243:        ot -> ot_getfnx = o_ip_addr,
        !          1244:        ot -> ot_info = (caddr_t) ipAdEntReasmMaxSize;
        !          1245: 
        !          1246:     if (ot = text2obj ("ipRouteDest"))
        !          1247:        ot -> ot_getfnx = o_ip_route,
        !          1248:        ot -> ot_info = (caddr_t) ipRouteDest;
        !          1249:     if (ot = text2obj ("ipRouteIfIndex"))
        !          1250:        ot -> ot_getfnx = o_ip_route,
        !          1251:        ot -> ot_info = (caddr_t) ipRouteIfIndex;
        !          1252:     if (ot = text2obj ("ipRouteMetric1"))
        !          1253:        ot -> ot_getfnx = o_ip_route,
        !          1254:        ot -> ot_info = (caddr_t) ipRouteMetric1;
        !          1255:     if (ot = text2obj ("ipRouteMetric2"))
        !          1256:        ot -> ot_getfnx = o_ip_route,
        !          1257:        ot -> ot_info = (caddr_t) ipRouteMetric2;
        !          1258:     if (ot = text2obj ("ipRouteMetric3"))
        !          1259:        ot -> ot_getfnx = o_ip_route,
        !          1260:        ot -> ot_info = (caddr_t) ipRouteMetric3;
        !          1261:     if (ot = text2obj ("ipRouteMetric4"))
        !          1262:        ot -> ot_getfnx = o_ip_route,
        !          1263:        ot -> ot_info = (caddr_t) ipRouteMetric4;
        !          1264:     if (ot = text2obj ("ipRouteNextHop"))
        !          1265:        ot -> ot_getfnx = o_ip_route,
        !          1266:        ot -> ot_info = (caddr_t) ipRouteNextHop;
        !          1267:     if (ot = text2obj ("ipRouteType"))
        !          1268:        ot -> ot_getfnx = o_ip_route,
        !          1269:        ot -> ot_info = (caddr_t) ipRouteType;
        !          1270:     if (ot = text2obj ("ipRouteProto"))
        !          1271:        ot -> ot_getfnx = o_ip_route,
        !          1272:        ot -> ot_info = (caddr_t) ipRouteProto;
        !          1273:     if (ot = text2obj ("ipRouteAge"))
        !          1274:        ot -> ot_getfnx = o_ip_route,
        !          1275:        ot -> ot_info = (caddr_t) ipRouteAge;
        !          1276:     if (ot = text2obj ("ipRouteMask"))
        !          1277:        ot -> ot_getfnx = o_ip_route,
        !          1278:        ot -> ot_info = (caddr_t) ipRouteMask;
        !          1279:     
        !          1280:     if (ot = text2obj ("unixIpRouteFlags"))
        !          1281:        ot -> ot_getfnx = o_ip_route,
        !          1282:        ot -> ot_info = (caddr_t) unixIpRouteFlags;
        !          1283:     if (ot = text2obj ("unixIpRouteRefCnt"))
        !          1284:        ot -> ot_getfnx = o_ip_route,
        !          1285:        ot -> ot_info = (caddr_t) unixIpRouteRefCnt;
        !          1286:     if (ot = text2obj ("unixIpRouteUses"))
        !          1287:        ot -> ot_getfnx = o_ip_route,
        !          1288:        ot -> ot_info = (caddr_t) unixIpRouteUses;
        !          1289: 
        !          1290:     if (ot = text2obj ("unixRouteBadRedirects"))
        !          1291:        ot -> ot_getfnx = o_ip_routing_stats,
        !          1292:        ot -> ot_info = (caddr_t) unixRouteBadRedirects;
        !          1293:     if (ot = text2obj ("unixRouteCreatedByRedirects"))
        !          1294:        ot -> ot_getfnx = o_ip_routing_stats,
        !          1295:        ot -> ot_info = (caddr_t) unixRouteCreatedByRedirects;
        !          1296:     if (ot = text2obj ("unixRouteModifiedByRedirects"))
        !          1297:        ot -> ot_getfnx = o_ip_routing_stats,
        !          1298:        ot -> ot_info = (caddr_t) unixRouteModifiedByRedirects;
        !          1299:     if (ot = text2obj ("unixRouteLookupFails"))
        !          1300:        ot -> ot_getfnx = o_ip_routing_stats,
        !          1301:        ot -> ot_info = (caddr_t) unixRouteLookupFails;
        !          1302:     if (ot = text2obj ("unixRouteWildcardUses"))
        !          1303:        ot -> ot_getfnx = o_ip_routing_stats,
        !          1304:        ot -> ot_info = (caddr_t) unixRouteWildcardUses;
        !          1305: 
        !          1306:     if (ot = text2obj ("atIfIndex"))
        !          1307:        ot -> ot_getfnx = o_address,
        !          1308:        ot -> ot_info = (caddr_t) atIfIndex;
        !          1309:     if (ot = text2obj ("atPhysAddress"))
        !          1310:        ot -> ot_getfnx = o_address,
        !          1311:        ot -> ot_info = (caddr_t) atPhysAddress;
        !          1312:     if (ot = text2obj ("atNetAddress"))
        !          1313:        ot -> ot_getfnx = o_address,
        !          1314:        ot -> ot_info = (caddr_t) atNetAddress;
        !          1315: 
        !          1316:     if (ot = text2obj ("ipNetToMediaIfIndex"))
        !          1317:        ot -> ot_getfnx = o_address,
        !          1318:        ot -> ot_info = (caddr_t) ipNetToMediaIfIndex;
        !          1319:     if (ot = text2obj ("ipNetToMediaPhysAddress"))
        !          1320:        ot -> ot_getfnx = o_address,
        !          1321:        ot -> ot_info = (caddr_t) ipNetToMediaPhysAddress;
        !          1322:     if (ot = text2obj ("ipNetToMediaNetAddress"))
        !          1323:        ot -> ot_getfnx = o_address,
        !          1324:        ot -> ot_info = (caddr_t) ipNetToMediaNetAddress;
        !          1325:     if (ot = text2obj ("ipNetToMediaType"))
        !          1326:        ot -> ot_getfnx = o_address,
        !          1327:        ot -> ot_info = (caddr_t) ipNetToMediaType;
        !          1328: }

unix.superglobalmegacorp.com

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