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

1.1       root        1: /* icmp.c - MIB realization of the ICMP group */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/snmp/RCS/icmp.c,v 7.1 90/02/17 10:38:06 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/snmp/RCS/icmp.c,v 7.1 90/02/17 10:38:06 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:       icmp.c,v $
                     17:  * Revision 7.1  90/02/17  10:38:06  mrose
                     18:  * smux
                     19:  * 
                     20:  * Revision 7.0  89/11/23  22:23:02  mrose
                     21:  * Release 6.0
                     22:  * 
                     23:  */
                     24: 
                     25: /*
                     26:  *                               NOTICE
                     27:  *
                     28:  *    Acquisition, use, and distribution of this module and related
                     29:  *    materials are subject to the restrictions of a license agreement.
                     30:  *    Consult the Preface in the User's Manual for the full terms of
                     31:  *    this agreement.
                     32:  *
                     33:  */
                     34: 
                     35: 
                     36: #include <stdio.h>
                     37: #include "mib.h"
                     38: 
                     39: #include "internet.h"
                     40: #ifdef BSD44
                     41: #include <machine/machparam.h>
                     42: #endif
                     43: #include <netinet/in_systm.h>
                     44: #include <netinet/ip.h>
                     45: #include <netinet/ip_icmp.h>
                     46: #include <netinet/icmp_var.h>
                     47: 
                     48: /*  */
                     49: 
                     50: static struct icmpstat icmpstat;
                     51: 
                     52: /*  */
                     53: 
                     54: #define        icmpInMsgs      0
                     55: #define        icmpInErrors    1
                     56: #define        icmpInDestUnreachs 2
                     57: #define        icmpInTimeExcds 3
                     58: #define        icmpInParmProbs 4
                     59: #define        icmpInSrcQuenchs 5
                     60: #define        icmpInRedirects 6
                     61: #define        icmpInEchos     7
                     62: #define        icmpInEchoReps  8
                     63: #define        icmpInTimestamps 9
                     64: #define        icmpInTimestampReps 10
                     65: #define        icmpInAddrMasks 11
                     66: #define        icmpInAddrMaskReps 12
                     67: #define        icmpOutMsgs     13
                     68: #define        icmpOutErrors   14
                     69: #define        icmpOutDestUnreachs 15
                     70: #define        icmpOutTimeExcds 16
                     71: #define        icmpOutParmProbs 17
                     72: #define        icmpOutSrcQuenchs 18
                     73: #define        icmpOutRedirects 19
                     74: #define        icmpOutEchos    20
                     75: #define        icmpOutEchoReps 21
                     76: #define        icmpOutTimestamps 22
                     77: #define        icmpOutTimestampReps 23
                     78: #define        icmpOutAddrMasks 24
                     79: #define        icmpOutAddrMaskReps 25
                     80: 
                     81: 
                     82: static int  o_icmp (oi, v, offset)
                     83: OI     oi;
                     84: register struct type_SNMP_VarBind *v;
                     85: int    offset;
                     86: {
                     87:     int            ifvar;
                     88:     register struct icmpstat *icps = &icmpstat;
                     89:     register OID    oid = oi -> oi_name;
                     90:     register OT            ot = oi -> oi_type;
                     91:     static   int lastq = -1;
                     92: 
                     93:     ifvar = (int) ot -> ot_info;
                     94:     switch (offset) {
                     95:        case type_SNMP_PDUs_get__request:
                     96:            if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
                     97:                    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
                     98:                return int_SNMP_error__status_noSuchName;
                     99:            break;
                    100: 
                    101:        case type_SNMP_PDUs_get__next__request:
                    102:            if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
                    103:                OID     new;
                    104: 
                    105:                if ((new = oid_extend (oid, 1)) == NULLOID)
                    106:                    return int_SNMP_error__status_genErr;
                    107:                new -> oid_elements[new -> oid_nelem - 1] = 0;
                    108: 
                    109:                if (v -> name)
                    110:                    free_SNMP_ObjectName (v -> name);
                    111:                v -> name = new;
                    112:            }
                    113:            else
                    114:                return NOTOK;
                    115:            break;
                    116: 
                    117:        default:
                    118:            return int_SNMP_error__status_genErr;
                    119:     }
                    120: 
                    121:     if (quantum != lastq) {
                    122:        lastq = quantum;
                    123: 
                    124:        if (getkmem (nl + N_ICMPSTAT, (caddr_t) icps, sizeof *icps) == NOTOK)
                    125:            return int_SNMP_error__status_genErr;
                    126:     }
                    127: 
                    128:     switch (ifvar) {
                    129:        case icmpInMsgs:
                    130:            return o_integer (oi, v, icps -> icps_checksum
                    131:                                   + icps -> icps_badlen
                    132:                                   + icps -> icps_inhist[ICMP_ECHOREPLY]
                    133:                                   + icps -> icps_inhist[ICMP_UNREACH]
                    134:                                   + icps -> icps_inhist[ICMP_SOURCEQUENCH]
                    135:                                   + icps -> icps_inhist[ICMP_REDIRECT]
                    136:                                   + icps -> icps_inhist[ICMP_ECHO]
                    137:                                   + icps -> icps_inhist[ICMP_TIMXCEED]
                    138:                                   + icps -> icps_inhist[ICMP_PARAMPROB]
                    139:                                   + icps -> icps_inhist[ICMP_TSTAMP]
                    140:                                   + icps -> icps_inhist[ICMP_TSTAMPREPLY]
                    141:                                   + icps -> icps_inhist[ICMP_MASKREQ]
                    142:                                   + icps -> icps_inhist[ICMP_MASKREPLY]);
                    143: 
                    144:        case icmpInErrors:
                    145:            return o_integer (oi, v, icps -> icps_badcode
                    146:                                   + icps -> icps_checksum
                    147:                                   + icps -> icps_badlen);
                    148: 
                    149:        case icmpInDestUnreachs:
                    150:            return o_integer (oi, v, icps -> icps_inhist[ICMP_UNREACH]);
                    151: 
                    152:        case icmpInTimeExcds:
                    153:            return o_integer (oi, v, icps -> icps_inhist[ICMP_TIMXCEED]);
                    154: 
                    155:        case icmpInParmProbs:
                    156:            return o_integer (oi, v, icps -> icps_inhist[ICMP_PARAMPROB]);
                    157: 
                    158:        case icmpInSrcQuenchs:
                    159:            return o_integer (oi, v, icps -> icps_inhist[ICMP_SOURCEQUENCH]);
                    160: 
                    161:        case icmpInRedirects:
                    162:            return o_integer (oi, v, icps -> icps_inhist[ICMP_REDIRECT]);
                    163: 
                    164:        case icmpInEchos:
                    165:            return o_integer (oi, v, icps -> icps_inhist[ICMP_ECHO]);
                    166: 
                    167:        case icmpInEchoReps:
                    168:            return o_integer (oi, v, icps -> icps_inhist[ICMP_ECHOREPLY]);
                    169: 
                    170:        case icmpInTimestamps:
                    171:            return o_integer (oi, v, icps -> icps_inhist[ICMP_TSTAMP]);
                    172: 
                    173:        case icmpInTimestampReps:
                    174:            return o_integer (oi, v, icps -> icps_inhist[ICMP_TSTAMPREPLY]);
                    175: 
                    176:        case icmpInAddrMasks:
                    177:            return o_integer (oi, v, icps -> icps_inhist[ICMP_MASKREQ]);
                    178: 
                    179:        case icmpInAddrMaskReps:
                    180:            return o_integer (oi, v, icps -> icps_inhist[ICMP_MASKREPLY]);
                    181: 
                    182:        case icmpOutMsgs:
                    183:            return o_integer (oi, v, icps -> icps_error + icps -> icps_reflect);
                    184: 
                    185:        case icmpOutErrors:
                    186:            return o_integer (oi, v, icps -> icps_error);
                    187: 
                    188:        case icmpOutDestUnreachs:
                    189:            return o_integer (oi, v, icps -> icps_outhist[ICMP_UNREACH]);
                    190: 
                    191:        case icmpOutTimeExcds:
                    192:            return o_integer (oi, v, icps -> icps_outhist[ICMP_TIMXCEED]);
                    193: 
                    194:        case icmpOutParmProbs:
                    195:            return o_integer (oi, v, icps -> icps_outhist[ICMP_PARAMPROB]);
                    196: 
                    197:        case icmpOutSrcQuenchs:
                    198:            return o_integer (oi, v, icps -> icps_outhist[ICMP_SOURCEQUENCH]);
                    199: 
                    200:        case icmpOutRedirects:
                    201:            return o_integer (oi, v, icps -> icps_outhist[ICMP_REDIRECT]);
                    202: 
                    203:        case icmpOutEchos:
                    204:            return o_integer (oi, v, icps -> icps_outhist[ICMP_ECHO]);
                    205: 
                    206:        case icmpOutEchoReps:
                    207:            return o_integer (oi, v, icps -> icps_outhist[ICMP_ECHOREPLY]);
                    208: 
                    209:        case icmpOutTimestamps:
                    210:            return o_integer (oi, v, icps -> icps_outhist[ICMP_TSTAMP]);
                    211: 
                    212:        case icmpOutTimestampReps:
                    213:            return o_integer (oi, v, icps -> icps_outhist[ICMP_TSTAMPREPLY]);
                    214: 
                    215:        case icmpOutAddrMasks:
                    216:            return o_integer (oi, v, icps -> icps_outhist[ICMP_MASKREQ]);
                    217: 
                    218:        case icmpOutAddrMaskReps:
                    219:            return o_integer (oi, v, icps -> icps_outhist[ICMP_MASKREPLY]);
                    220: 
                    221:        default:
                    222:            return int_SNMP_error__status_noSuchName;
                    223:     }
                    224: }
                    225: 
                    226: /*  */
                    227: 
                    228: init_icmp () {
                    229:     register OT            ot;
                    230: 
                    231:     if (ot = text2obj ("icmpInMsgs"))
                    232:        ot -> ot_getfnx = o_icmp,
                    233:        ot -> ot_info = (caddr_t) icmpInMsgs;
                    234:     if (ot = text2obj ("icmpInErrors"))
                    235:        ot -> ot_getfnx = o_icmp,
                    236:        ot -> ot_info = (caddr_t) icmpInErrors;
                    237:     if (ot = text2obj ("icmpInDestUnreachs"))
                    238:        ot -> ot_getfnx = o_icmp,
                    239:        ot -> ot_info = (caddr_t) icmpInDestUnreachs;
                    240:     if (ot = text2obj ("icmpInTimeExcds"))
                    241:        ot -> ot_getfnx = o_icmp,
                    242:        ot -> ot_info = (caddr_t) icmpInTimeExcds;
                    243:     if (ot = text2obj ("icmpInParmProbs"))
                    244:        ot -> ot_getfnx = o_icmp,
                    245:        ot -> ot_info = (caddr_t) icmpInParmProbs;
                    246:     if (ot = text2obj ("icmpInSrcQuenchs"))
                    247:        ot -> ot_getfnx = o_icmp,
                    248:        ot -> ot_info = (caddr_t) icmpInSrcQuenchs;
                    249:     if (ot = text2obj ("icmpInRedirects"))
                    250:        ot -> ot_getfnx = o_icmp,
                    251:        ot -> ot_info = (caddr_t) icmpInRedirects;
                    252:     if (ot = text2obj ("icmpInEchos"))
                    253:        ot -> ot_getfnx = o_icmp,
                    254:        ot -> ot_info = (caddr_t) icmpInEchos;
                    255:     if (ot = text2obj ("icmpInEchoReps"))
                    256:        ot -> ot_getfnx = o_icmp,
                    257:        ot -> ot_info = (caddr_t) icmpInEchoReps;
                    258:     if (ot = text2obj ("icmpInTimestamps"))
                    259:        ot -> ot_getfnx = o_icmp,
                    260:        ot -> ot_info = (caddr_t) icmpInTimestamps;
                    261:     if (ot = text2obj ("icmpInTimestampReps"))
                    262:        ot -> ot_getfnx = o_icmp,
                    263:        ot -> ot_info = (caddr_t) icmpInTimestampReps;
                    264:     if (ot = text2obj ("icmpInAddrMasks"))
                    265:        ot -> ot_getfnx = o_icmp,
                    266:        ot -> ot_info = (caddr_t) icmpInAddrMasks;
                    267:     if (ot = text2obj ("icmpInAddrMaskReps"))
                    268:        ot -> ot_getfnx = o_icmp,
                    269:        ot -> ot_info = (caddr_t) icmpInAddrMaskReps;
                    270:     if (ot = text2obj ("icmpOutMsgs"))
                    271:        ot -> ot_getfnx = o_icmp,
                    272:        ot -> ot_info = (caddr_t) icmpOutMsgs;
                    273:     if (ot = text2obj ("icmpOutErrors"))
                    274:        ot -> ot_getfnx = o_icmp,
                    275:        ot -> ot_info = (caddr_t) icmpOutErrors;
                    276:     if (ot = text2obj ("icmpOutDestUnreachs"))
                    277:        ot -> ot_getfnx = o_icmp,
                    278:        ot -> ot_info = (caddr_t) icmpOutDestUnreachs;
                    279:     if (ot = text2obj ("icmpOutTimeExcds"))
                    280:        ot -> ot_getfnx = o_icmp,
                    281:        ot -> ot_info = (caddr_t) icmpOutTimeExcds;
                    282:     if (ot = text2obj ("icmpOutParmProbs"))
                    283:        ot -> ot_getfnx = o_icmp,
                    284:        ot -> ot_info = (caddr_t) icmpOutParmProbs;
                    285:     if (ot = text2obj ("icmpOutSrcQuenchs"))
                    286:        ot -> ot_getfnx = o_icmp,
                    287:        ot -> ot_info = (caddr_t) icmpOutSrcQuenchs;
                    288:     if (ot = text2obj ("icmpOutRedirects"))
                    289:        ot -> ot_getfnx = o_icmp,
                    290:        ot -> ot_info = (caddr_t) icmpOutRedirects;
                    291:     if (ot = text2obj ("icmpOutEchos"))
                    292:        ot -> ot_getfnx = o_icmp,
                    293:        ot -> ot_info = (caddr_t) icmpOutEchos;
                    294:     if (ot = text2obj ("icmpOutEchoReps"))
                    295:        ot -> ot_getfnx = o_icmp,
                    296:        ot -> ot_info = (caddr_t) icmpOutEchoReps;
                    297:     if (ot = text2obj ("icmpOutTimestamps"))
                    298:        ot -> ot_getfnx = o_icmp,
                    299:        ot -> ot_info = (caddr_t) icmpOutTimestamps;
                    300:     if (ot = text2obj ("icmpOutTimestampReps"))
                    301:        ot -> ot_getfnx = o_icmp,
                    302:        ot -> ot_info = (caddr_t) icmpOutTimestampReps;
                    303:     if (ot = text2obj ("icmpOutAddrMasks"))
                    304:        ot -> ot_getfnx = o_icmp,
                    305:        ot -> ot_info = (caddr_t) icmpOutAddrMasks;
                    306:     if (ot = text2obj ("icmpOutAddrMaskReps"))
                    307:        ot -> ot_getfnx = o_icmp,
                    308:        ot -> ot_info = (caddr_t) icmpOutAddrMaskReps;
                    309: }

unix.superglobalmegacorp.com

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