DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T i

⟦576f29ca4⟧ TextFile

    Length: 9145 (0x23b9)
    Types: TextFile
    Names: »icmp.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/snmp/icmp.c« 

TextFile

/* icmp.c - MIB realization of the ICMP group */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/snmp/RCS/icmp.c,v 7.0 89/11/23 22:23:02 mrose Rel $";
#endif

/* 
 * $Header: /f/osi/snmp/RCS/icmp.c,v 7.0 89/11/23 22:23:02 mrose Rel $
 *
 * Contributed by NYSERNet Inc.  This work was partially supported by the
 * U.S. Defense Advanced Research Projects Agency and the Rome Air Development
 * Center of the U.S. Air Force Systems Command under contract number
 * F30602-88-C-0016.
 *
 *
 * $Log:	icmp.c,v $
 * Revision 7.0  89/11/23  22:23:02  mrose
 * Release 6.0
 * 
 */

/*
 *				  NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 */


#include <stdio.h>
#include "mib.h"

#include "internet.h"
#ifdef	BSD44
#include <machine/machparam.h>
#endif
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp_var.h>

/* \f

 */

static struct icmpstat icmpstat;

/* \f

 */

#define	icmpInMsgs	0
#define	icmpInErrors	1
#define	icmpInDestUnreachs 2
#define	icmpInTimeExcds	3
#define	icmpInParmProbs	4
#define	icmpInSrcQuenchs 5
#define	icmpInRedirects	6
#define	icmpInEchos	7
#define	icmpInEchoReps	8
#define	icmpInTimestamps 9
#define	icmpInTimestampReps 10
#define	icmpInAddrMasks	11
#define	icmpInAddrMaskReps 12
#define	icmpOutMsgs	13
#define	icmpOutErrors	14
#define	icmpOutDestUnreachs 15
#define	icmpOutTimeExcds 16
#define	icmpOutParmProbs 17
#define	icmpOutSrcQuenchs 18
#define	icmpOutRedirects 19
#define	icmpOutEchos	20
#define	icmpOutEchoReps	21
#define	icmpOutTimestamps 22
#define	icmpOutTimestampReps 23
#define	icmpOutAddrMasks 24
#define	icmpOutAddrMaskReps 25


static int  o_icmp (oi, v, offset)
OI	oi;
register struct type_SNMP_VarBind *v;
int	offset;
{
    int	    ifvar;
    register struct icmpstat *icps = &icmpstat;
    register OID    oid = oi -> oi_name;
    register OT	    ot = oi -> oi_type;
    static   int lastq = -1;

    ifvar = (int) ot -> ot_info;
    switch (offset) {
	case type_SNMP_PDUs_get__request:
	    if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1
		    || oid -> oid_elements[oid -> oid_nelem - 1] != 0)
		return int_SNMP_error__status_noSuchName;
	    break;

	case type_SNMP_PDUs_get__next__request:
	    if (oid -> oid_nelem > ot -> ot_name -> oid_nelem + 1)
		return int_SNMP_error__status_noSuchName;
	    if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
		OID	new;

		if ((new = oid_extend (oid, 1)) == NULLOID)
		    return int_SNMP_error__status_genErr;
		new -> oid_elements[new -> oid_nelem - 1] = 0;

		if (v -> name)
		    free_SNMP_ObjectName (v -> name);
		v -> name = new;
	    }
	    else
		return NOTOK;
	    break;

	default:
	    return int_SNMP_error__status_genErr;
    }

    if (quantum != lastq) {
	lastq = quantum;

	if (getkmem (nl + N_ICMPSTAT, (caddr_t) icps, sizeof *icps) == NOTOK)
	    return int_SNMP_error__status_genErr;
    }

    switch (ifvar) {
	case icmpInMsgs:
	    return o_integer (oi, v, icps -> icps_checksum
				   + icps -> icps_badlen
				   + icps -> icps_inhist[ICMP_ECHOREPLY]
				   + icps -> icps_inhist[ICMP_UNREACH]
				   + icps -> icps_inhist[ICMP_SOURCEQUENCH]
				   + icps -> icps_inhist[ICMP_REDIRECT]
				   + icps -> icps_inhist[ICMP_ECHO]
				   + icps -> icps_inhist[ICMP_TIMXCEED]
				   + icps -> icps_inhist[ICMP_PARAMPROB]
				   + icps -> icps_inhist[ICMP_TSTAMP]
				   + icps -> icps_inhist[ICMP_TSTAMPREPLY]
			           + icps -> icps_inhist[ICMP_MASKREQ]
			           + icps -> icps_inhist[ICMP_MASKREPLY]);

	case icmpInErrors:
	    return o_integer (oi, v, icps -> icps_badcode
			           + icps -> icps_checksum
			           + icps -> icps_badlen);

	case icmpInDestUnreachs:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_UNREACH]);

	case icmpInTimeExcds:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_TIMXCEED]);

	case icmpInParmProbs:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_PARAMPROB]);

	case icmpInSrcQuenchs:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_SOURCEQUENCH]);

	case icmpInRedirects:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_REDIRECT]);

	case icmpInEchos:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_ECHO]);

	case icmpInEchoReps:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_ECHOREPLY]);

	case icmpInTimestamps:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_TSTAMP]);

	case icmpInTimestampReps:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_TSTAMPREPLY]);

	case icmpInAddrMasks:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_MASKREQ]);

	case icmpInAddrMaskReps:
	    return o_integer (oi, v, icps -> icps_inhist[ICMP_MASKREPLY]);

	case icmpOutMsgs:
	    return o_integer (oi, v, icps -> icps_error + icps -> icps_reflect);

	case icmpOutErrors:
	    return o_integer (oi, v, icps -> icps_error);

	case icmpOutDestUnreachs:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_UNREACH]);

	case icmpOutTimeExcds:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_TIMXCEED]);

	case icmpOutParmProbs:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_PARAMPROB]);

	case icmpOutSrcQuenchs:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_SOURCEQUENCH]);

	case icmpOutRedirects:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_REDIRECT]);

	case icmpOutEchos:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_ECHO]);

	case icmpOutEchoReps:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_ECHOREPLY]);

	case icmpOutTimestamps:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_TSTAMP]);

	case icmpOutTimestampReps:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_TSTAMPREPLY]);

	case icmpOutAddrMasks:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_MASKREQ]);

	case icmpOutAddrMaskReps:
	    return o_integer (oi, v, icps -> icps_outhist[ICMP_MASKREPLY]);

	default:
	    return int_SNMP_error__status_noSuchName;
    }
}

/* \f

 */

init_icmp () {
    register OT	    ot;

    if (ot = text2obj ("icmpInMsgs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInMsgs;
    if (ot = text2obj ("icmpInErrors"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInErrors;
    if (ot = text2obj ("icmpInDestUnreachs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInDestUnreachs;
    if (ot = text2obj ("icmpInTimeExcds"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInTimeExcds;
    if (ot = text2obj ("icmpInParmProbs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInParmProbs;
    if (ot = text2obj ("icmpInSrcQuenchs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInSrcQuenchs;
    if (ot = text2obj ("icmpInRedirects"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInRedirects;
    if (ot = text2obj ("icmpInEchos"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInEchos;
    if (ot = text2obj ("icmpInEchoReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInEchoReps;
    if (ot = text2obj ("icmpInTimestamps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInTimestamps;
    if (ot = text2obj ("icmpInTimestampReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInTimestampReps;
    if (ot = text2obj ("icmpInAddrMasks"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInAddrMasks;
    if (ot = text2obj ("icmpInAddrMaskReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpInAddrMaskReps;
    if (ot = text2obj ("icmpOutMsgs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutMsgs;
    if (ot = text2obj ("icmpOutErrors"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutErrors;
    if (ot = text2obj ("icmpOutDestUnreachs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutDestUnreachs;
    if (ot = text2obj ("icmpOutTimeExcds"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutTimeExcds;
    if (ot = text2obj ("icmpOutParmProbs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutParmProbs;
    if (ot = text2obj ("icmpOutSrcQuenchs"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutSrcQuenchs;
    if (ot = text2obj ("icmpOutRedirects"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutRedirects;
    if (ot = text2obj ("icmpOutEchos"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutEchos;
    if (ot = text2obj ("icmpOutEchoReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutEchoReps;
    if (ot = text2obj ("icmpOutTimestamps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutTimestamps;
    if (ot = text2obj ("icmpOutTimestampReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutTimestampReps;
    if (ot = text2obj ("icmpOutAddrMasks"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutAddrMasks;
    if (ot = text2obj ("icmpOutAddrMaskReps"))
	ot -> ot_getfnx = o_icmp,
	ot -> ot_info = (caddr_t) icmpOutAddrMaskReps;
}