|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 40108 (0x9cac)
Types: TextFile
Names: »clnp.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/snmp/clnp.c«
/* clnp.c - MIB realization of the experimental CLNP group */
#ifndef lint
static char *rcsid = "$Header: /f/osi/snmp/RCS/clnp.c,v 7.1 90/01/11 18:33:54 mrose Exp $";
#endif
/*
* $Header: /f/osi/snmp/RCS/clnp.c,v 7.1 90/01/11 18:33:54 mrose Exp $
*
* 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: clnp.c,v $
* Revision 7.1 90/01/11 18:33:54 mrose
* real-sync
*
* Revision 7.0 89/11/23 22:22:55 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 "interfaces.h"
#include "routes.h"
#ifdef BSD44
#include <netiso/iso_map.h>
#include <netiso/iso_snpac.h>
#define CLNP_ER_CODES
#include <netiso/clnp.h>
#include <netiso/clnp_stat.h>
#include <netiso/esis.h>
/* \f
*/
#define FORW_IS 1 /* clnpForwarding */
#define FORW_ES 2
static int iso_systype;
static struct clnp_stat clnp_stat;
/* \f
*/
#define clnpForwarding 0
#define clnpDefaultLifeTime 1
#define clnpInReceives 2
#define clnpInHdrErrors 3
#define clnpInAddrErrors 4
#define clnpForwPDUs 5
#undef clnpInUnknownNLPs 6 /* NOT IMPLEMENTED */
#define clnpInUnknownULPs 7
#undef clnpInDiscards 8 /* NOT IMPLEMENTED */
#define clnpInDelivers 9
#define clnpOutRequests 10
#define clnpOutDiscards 11
#define clnpOutNoRoutes 12
#define clnpReasmTimeout 13
#define clnpReasmReqds 14
#define clnpReasmOKs 15
#define clnpReasmFails 16
#define clnpSegOKs 17
#define clnpSegFails 18
#define clnpSegCreates 19
#define clnpInErrors (100 + 0)
#define clnpOutErrors (100 + 1)
#define clnpInErrUnspecs (100 + 2)
#define clnpInErrProcs (100 + 3)
#define clnpInErrCksums (100 + 4)
#define clnpInErrCongests (100 + 5)
#define clnpInErrHdrs (100 + 6)
#define clnpInErrSegs (100 + 7)
#define clnpInErrIncomps (100 + 8)
#define clnpInErrDups (100 + 9)
#define clnpInErrUnreachDsts (100 + 10)
#define clnpInErrUnknownDsts (100 + 11)
#define clnpInErrSRUnspecs (100 + 12)
#define clnpInErrSRSyntaxes (100 + 13)
#define clnpInErrSRUnkAddrs (100 + 14)
#define clnpInErrSRBadPaths (100 + 15)
#define clnpInErrHops (100 + 16)
#define clnpInErrHopReassms (100 + 17)
#define clnpInErrUnsOptions (100 + 18)
#define clnpInErrUnsVersions (100 + 19)
#define clnpInErrUnsSecurities (100 + 20)
#define clnpInErrUnsSRs (100 + 21)
#define clnpInErrUnsRRs (100 + 22)
#define clnpInErrInterferences (100 + 23)
#define clnpOutErrUnspecs (100 + 24)
#define clnpOutErrProcs (100 + 25)
#define clnpOutErrCksums (100 + 26)
#define clnpOutErrCongests (100 + 27)
#define clnpOutErrHdrs (100 + 28)
#define clnpOutErrSegs (100 + 29)
#define clnpOutErrIncomps (100 + 30)
#define clnpOutErrDups (100 + 31)
#define clnpOutErrUnreachDsts (100 + 32)
#define clnpOutErrUnknownDsts (100 + 33)
#define clnpOutErrSRUnspecs (100 + 34)
#define clnpOutErrSRSyntaxes (100 + 35)
#define clnpOutErrSRUnkAddrs (100 + 36)
#define clnpOutErrSRBadPaths (100 + 37)
#define clnpOutErrHops (100 + 38)
#define clnpOutErrHopReassms (100 + 39)
#define clnpOutErrUnsOptions (100 + 40)
#define clnpOutErrUnsVersions (100 + 41)
#define clnpOutErrUnsSecurities (100 + 42)
#define clnpOutErrUnsSRs (100 + 43)
#define clnpOutErrUnsRRs (100 + 44)
#define clnpOutErrInterferences (100 + 45)
static int o_clnp (oi, v, offset)
OI oi;
register struct type_SNMP_VarBind *v;
int offset;
{
register int *dp,
*ep,
j;
int ifvar;
register struct clnp_stat *cns = &clnp_stat;
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;
}
switch (ifvar) {
case clnpDefaultLifeTime:
case clnpReasmTimeout:
break;
default:
if (quantum != lastq) {
lastq = quantum;
if (getkmem (nl + N_ISO_SYSTYPE, (caddr_t) &iso_systype,
sizeof iso_systype) == NOTOK
|| getkmem (nl + N_CLNP_STAT, (caddr_t) cns,
sizeof *cns) == NOTOK)
return int_SNMP_error__status_genErr;
}
break;
}
switch (ifvar) {
case clnpForwarding:
return o_integer (oi, v,
iso_systype & SNPA_ES ? FORW_ES : FORW_IS);
case clnpDefaultLifeTime:
return o_integer (oi, v, CLNP_TTL);
case clnpInReceives:
return o_integer (oi, v, cns -> cns_total);
case clnpInHdrErrors:
return o_integer (oi, v, cns -> cns_toosmall
+ cns -> cns_badhlen
+ cns -> cns_badcsum
+ cns -> cns_noseg
+ cns -> cns_badvers);
case clnpInAddrErrors:
return o_integer (oi, v, cns -> cns_badaddr);
case clnpForwPDUs:
return o_integer (oi, v, cns -> cns_forward);
case clnpInUnknownULPs:
return o_integer (oi, v, cns -> cns_noproto);
case clnpInDelivers:
return o_integer (oi, v, cns -> cns_delivered);
case clnpOutRequests:
return o_integer (oi, v, cns -> cns_sent - cns -> cns_forward);
case clnpOutDiscards:
return o_integer (oi, v, cns -> cns_odropped);
case clnpOutNoRoutes:
return o_integer (oi, v, cns -> cns_cantforward);
case clnpReasmTimeout:
return o_integer (oi, v, CLNP_TTL);
case clnpReasmReqds:
return o_integer (oi, v, cns -> cns_fragments);
case clnpReasmOKs:
return o_integer (oi, v, cns -> cns_reassembled);
case clnpReasmFails:
return o_integer (oi, v, cns -> cns_fragdropped
+ cns -> cns_fragtimeout);
case clnpSegOKs:
return o_integer (oi, v, cns -> cns_fragmented);
case clnpSegFails:
return o_integer (oi, v, cns -> cns_cantfrag);
case clnpSegCreates:
return o_integer (oi, v, cns -> cns_ofragments);
case clnpInErrors:
j = 0;
for (ep = (dp = cns -> cns_er_inhist) + CLNP_ERRORS; dp <= ep; )
j += *dp++;
return o_integer (oi, v, j);
case clnpOutErrors:
j = 0;
for (ep = (dp = cns -> cns_er_outhist) + CLNP_ERRORS; dp <= ep; )
j += *dp++;
return o_integer (oi, v, j);
#define clnpInputError(r) cns -> cns_er_inhist[clnp_er_index (r)]
case clnpInErrUnspecs:
return o_integer (oi, v, clnpInputError (GEN_NOREAS));
case clnpInErrProcs:
return o_integer (oi, v, clnpInputError (GEN_PROTOERR));
case clnpInErrCksums:
return o_integer (oi, v, clnpInputError (GEN_BADCSUM));
case clnpInErrCongests:
return o_integer (oi, v, clnpInputError (GEN_CONGEST));
case clnpInErrHdrs:
return o_integer (oi, v, clnpInputError (GEN_HDRSYNTAX));
case clnpInErrSegs:
return o_integer (oi, v, clnpInputError (GEN_SEGNEEDED));
case clnpInErrIncomps:
return o_integer (oi, v, clnpInputError (GEN_INCOMPLETE));
case clnpInErrDups:
return o_integer (oi, v, clnpInputError (GEN_DUPOPT));
case clnpInErrUnreachDsts:
return o_integer (oi, v, clnpInputError (ADDR_DESTUNREACH));
case clnpInErrUnknownDsts:
return o_integer (oi, v, clnpInputError (ADDR_DESTUNKNOWN));
case clnpInErrSRUnspecs:
return o_integer (oi, v, clnpInputError (SRCRT_UNSPECERR));
case clnpInErrSRSyntaxes:
return o_integer (oi, v, clnpInputError (SRCRT_SYNTAX));
case clnpInErrSRUnkAddrs:
return o_integer (oi, v, clnpInputError (SRCRT_UNKNOWNADDR));
case clnpInErrSRBadPaths:
return o_integer (oi, v, clnpInputError (SRCRT_BADPATH));
case clnpInErrHops:
return o_integer (oi, v, clnpInputError (TTL_EXPTRANSIT));
case clnpInErrHopReassms:
return o_integer (oi, v, clnpInputError (TTL_EXPREASS));
case clnpInErrUnsOptions:
return o_integer (oi, v, clnpInputError (DISC_UNSUPPOPT));
case clnpInErrUnsVersions:
return o_integer (oi, v, clnpInputError (DISC_UNSUPPVERS));
case clnpInErrUnsSecurities:
return o_integer (oi, v, clnpInputError (DISC_UNSUPPSECURE));
case clnpInErrUnsSRs:
return o_integer (oi, v, clnpInputError (DISC_UNSUPPSRCRT));
case clnpInErrUnsRRs:
return o_integer (oi, v, clnpInputError (DISC_UNSUPPRECRT));
case clnpInErrInterferences:
return o_integer (oi, v, clnpInputError (REASS_INTERFERE));
#undef clnpInputError
#define clnpOutputError(r) cns -> cns_er_outhist[clnp_er_index (r)]
case clnpOutErrUnspecs:
return o_integer (oi, v, clnpOutputError (GEN_NOREAS));
case clnpOutErrProcs:
return o_integer (oi, v, clnpOutputError (GEN_PROTOERR));
case clnpOutErrCksums:
return o_integer (oi, v, clnpOutputError (GEN_BADCSUM));
case clnpOutErrCongests:
return o_integer (oi, v, clnpOutputError (GEN_CONGEST));
case clnpOutErrHdrs:
return o_integer (oi, v, clnpOutputError (GEN_HDRSYNTAX));
case clnpOutErrSegs:
return o_integer (oi, v, clnpOutputError (GEN_SEGNEEDED));
case clnpOutErrIncomps:
return o_integer (oi, v, clnpOutputError (GEN_INCOMPLETE));
case clnpOutErrDups:
return o_integer (oi, v, clnpOutputError (GEN_DUPOPT));
case clnpOutErrUnreachDsts:
return o_integer (oi, v, clnpOutputError (ADDR_DESTUNREACH));
case clnpOutErrUnknownDsts:
return o_integer (oi, v, clnpOutputError (ADDR_DESTUNKNOWN));
case clnpOutErrSRUnspecs:
return o_integer (oi, v, clnpOutputError (SRCRT_UNSPECERR));
case clnpOutErrSRSyntaxes:
return o_integer (oi, v, clnpOutputError (SRCRT_SYNTAX));
case clnpOutErrSRUnkAddrs:
return o_integer (oi, v, clnpOutputError (SRCRT_UNKNOWNADDR));
case clnpOutErrSRBadPaths:
return o_integer (oi, v, clnpOutputError (SRCRT_BADPATH));
case clnpOutErrHops:
return o_integer (oi, v, clnpOutputError (TTL_EXPTRANSIT));
case clnpOutErrHopReassms:
return o_integer (oi, v, clnpOutputError (TTL_EXPREASS));
case clnpOutErrUnsOptions:
return o_integer (oi, v, clnpOutputError (DISC_UNSUPPOPT));
case clnpOutErrUnsVersions:
return o_integer (oi, v, clnpOutputError (DISC_UNSUPPVERS));
case clnpOutErrUnsSecurities:
return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSECURE));
case clnpOutErrUnsSRs:
return o_integer (oi, v, clnpOutputError (DISC_UNSUPPSRCRT));
case clnpOutErrUnsRRs:
return o_integer (oi, v, clnpOutputError (DISC_UNSUPPRECRT));
case clnpOutErrInterferences:
return o_integer (oi, v, clnpOutputError (REASS_INTERFERE));
#undef clnpOutputError
default:
return int_SNMP_error__status_noSuchName;
}
}
/* \f
*/
static int clnp_er_index (p)
u_char p;
{
register u_char *cp = clnp_er_codes + CLNP_ERRORS;
while (cp-- > clnp_er_codes)
if (*cp == p)
return (cp - clnp_er_codes);
return (CLNP_ERRORS + 1);
}
/* \f
*/
#define CLNP_MAXPACKET 65535 /* clnpAdEntReasmMaxSize */
/* equivalent of IP_MAXPACKET */
#define clnpAdEntAddr 0
#define clnpAdEntIfIndex 1
#define clnpAdEntNetMask 2
#define clnpAdEntReasmMaxSize 3
static int o_clnp_addr (oi, v, offset)
OI oi;
register struct type_SNMP_VarBind *v;
int offset;
{
register int i;
int ifvar;
register unsigned int *ip,
*jp;
register struct address *as;
register OID oid = oi -> oi_name;
register OT ot = oi -> oi_type;
if (sort_interfaces () == NOTOK)
return int_SNMP_error__status_genErr;
ifvar = (int) ot -> ot_info;
switch (offset) {
case type_SNMP_PDUs_get__request:
if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if ((as = get_addrent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
afs_iso, 0)) == NULL)
return int_SNMP_error__status_noSuchName;
break;
case type_SNMP_PDUs_get__next__request:
if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
OID new;
if ((as = afs_iso) == NULL)
return NOTOK;
if ((new = oid_extend (oid, as -> adr_insize)) == NULLOID)
return int_SNMP_error__status_genErr;
ip = new -> oid_elements + new -> oid_nelem - as -> adr_insize;
jp = as -> adr_instance;
for (i = as -> adr_insize; i > 0; i--)
*ip++ = *jp++;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
}
else {
int j;
if ((as = get_addrent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
j = oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
afs_iso, 1)) == NULL)
return NOTOK;
if ((i = j - as -> adr_insize) < 0) {
OID new;
if ((new = oid_extend (oid, -i)) == NULLOID)
return int_SNMP_error__status_genErr;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
oid = new;
}
else
if (i > 0)
oid -> oid_nelem -= i;
ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
jp = as -> adr_instance;
for (i = as -> adr_insize; i > 0; i--)
*ip++ = *jp++;
}
break;
default:
return int_SNMP_error__status_genErr;
}
switch (ifvar) {
case clnpAdEntAddr:
return o_clnpaddr (oi, v,
(struct sockaddr_iso *) &as -> adr_address);
case clnpAdEntIfIndex:
return o_integer (oi, v, ffs (as -> adr_indexmask));
case clnpAdEntNetMask:
return o_clnpaddr (oi, v,
(struct sockaddr_iso *) &as -> adr_netmask);
case clnpAdEntReasmMaxSize:
return o_integer (oi, v, CLNP_MAXPACKET);
default:
return int_SNMP_error__status_noSuchName;
}
}
/* \f
*/
#define clnpRouteDest 0
#define clnpRouteIfIndex 1
#define clnpRouteMetric1 2
#define clnpRouteMetric2 3
#define clnpRouteMetric3 4
#define clnpRouteMetric4 5
#define clnpRouteNextHop 6
#define clnpRouteType 7
#define clnpRouteProto 8
#define clnpRouteAge 9
static int o_clnp_route (oi, v, offset)
OI oi;
register struct type_SNMP_VarBind *v;
int offset;
{
int ifvar;
register int i;
register unsigned int *ip,
*jp;
register struct rtetab *rt;
register OID oid = oi -> oi_name;
register OT ot = oi -> oi_type;
if (get_routes () == NOTOK)
return int_SNMP_error__status_genErr;
ifvar = (int) ot -> ot_info;
switch (offset) {
case type_SNMP_PDUs_get__request:
if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if ((rt = get_rtent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
rts_iso, 0)) == NULL)
return int_SNMP_error__status_noSuchName;
break;
case type_SNMP_PDUs_get__next__request:
if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
OID new;
if ((rt = rts_iso) == NULL)
return NOTOK;
if ((new = oid_extend (oid, rt -> rt_insize)) == NULLOID)
return int_SNMP_error__status_genErr;
ip = new -> oid_elements + new -> oid_nelem - rt -> rt_insize;
jp = rt -> rt_instance;
for (i = rt -> rt_insize; i> 0; i--)
*ip++ = *jp++;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
}
else {
int j;
if ((rt = get_rtent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
j = oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
rts_iso, 1)) == NULL)
return NOTOK;
if ((i = j - rt -> rt_insize) < 0) {
OID new;
if ((new = oid_extend (oid, -i)) == NULLOID)
return int_SNMP_error__status_genErr;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
oid = new;
}
else
if (i > 0)
oid -> oid_nelem -= i;
ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
jp = rt -> rt_instance;
for (i = rt -> rt_insize; i > 0; i--)
*ip++ = *jp++;
}
break;
default:
return int_SNMP_error__status_genErr;
}
switch (ifvar) {
case clnpRouteDest:
return o_clnpaddr (oi, v,
(struct sockaddr_iso *) &rt -> rt_dst);
case clnpRouteIfIndex:
{
register struct interface *is;
for (is = ifs; is; is = is -> ifn_next)
if ((caddr_t) is -> ifn_offset
== (caddr_t) rt -> rt_rt.rt_ifp) {
if (is -> ifn_ready)
return o_integer (oi, v, is -> ifn_index);
break;
}
if (offset == type_SNMP_PDUs_get__next__request)
return NOTOK;
return int_SNMP_error__status_noSuchName;
}
case clnpRouteMetric1:
case clnpRouteMetric2:
case clnpRouteMetric3:
case clnpRouteMetric4:
return o_integer (oi, v, METRIC_NONE);
case clnpRouteNextHop:
return o_clnpaddr (oi, v,
(struct sockaddr_iso *) &rt -> rt_gateway);
case clnpRouteType:
switch (rt -> rt_rt.rt_flags & (RTF_GATEWAY | RTF_HOST)) {
case RTF_GATEWAY:
case RTF_HOST:
return o_integer (oi, v, TYPE_REMOTE);
case 0:
return o_integer (oi, v, TYPE_DIRECT);
default:
return o_integer (oi, v, TYPE_OTHER);
}
case clnpRouteProto:
if (rt -> rt_rt.rt_flags & (RTF_DYNAMIC | RTF_MODIFIED))
return o_integer (oi, v, PROTO_ESIS);
else
return o_integer (oi, v, PROTO_OTHER);
case clnpRouteAge:
return o_integer (oi, v, 0);
default:
return int_SNMP_error__status_noSuchName;
}
}
/* \f
*/
struct adrtab {
#define ADN_SIZE ADR_SIZE /* ClnpAddress instance */
unsigned int adn_instance[ADN_SIZE];
int adn_insize;
struct iso_addr adn_address; /* ClnpAddress */
#define ADM_SIZE ADR_SIZE /* PhysAddress instance */
unsigned int adm_instance[ADM_SIZE];
int adm_insize;
u_char adm_address[ADM_SIZE]; /* PhysAddress */
u_char adm_addrlen; /* .. */
int adr_index; /* ifIndex */
int adr_type; /* clnpNetToMediaType */
/* clnpMediaToNetType */
#define DYNAMIC_MAPPING 3
#define STATIC_MAPPING 4
struct adrtab *adn_next; /* next ClnpAddress */
struct adrtab *adm_next; /* next PhysAddress */
};
static struct adrtab *adn = NULL;
static struct adrtab *adm = NULL;
static struct adrtab *get_arpent ();
/* \f
*/
#define clnpNetToMediaIfIndex 0
#define clnpNetToMediaPhysAddress 1
#define clnpNetToMediaNetAddress 2
#define clnpNetToMediaType 3
#define clnpMediaToNetIfIndex 4
#define clnpMediaToNetNetAddress 5
#define clnpMediaToNetPhysAddress 6
#define clnpMediaToNetType 7
static int o_address (oi, v, offset)
OI oi;
register struct type_SNMP_VarBind *v;
int offset;
{
register int i;
int ifvar,
isnpa;
register unsigned int *ip,
*jp;
register struct adrtab *at;
struct sockaddr_iso netaddr;
register OID oid = oi -> oi_name;
register OT ot = oi -> oi_type;
if (get_arptab () == NOTOK)
return int_SNMP_error__status_genErr;
switch (ifvar = (int) ot -> ot_info) {
case clnpNetToMediaIfIndex:
case clnpNetToMediaPhysAddress:
case clnpNetToMediaNetAddress:
case clnpNetToMediaType:
isnpa = 0;
break;
case clnpMediaToNetIfIndex:
case clnpMediaToNetNetAddress:
case clnpMediaToNetPhysAddress:
case clnpMediaToNetType:
isnpa = 1;
break;
}
switch (offset) {
case type_SNMP_PDUs_get__request:
if (oid -> oid_nelem <= ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if ((at = get_arpent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
isnpa, 0)) == NULL)
return int_SNMP_error__status_noSuchName;
break;
case type_SNMP_PDUs_get__next__request:
if (oid -> oid_nelem < ot -> ot_name -> oid_nelem)
return int_SNMP_error__status_noSuchName;
if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) {
OID new;
if ((at = isnpa ? adm : adn) == NULL)
return NOTOK;
if (isnpa)
jp = at -> adm_instance, i = at -> adm_insize;
else
jp = at -> adn_instance, i = at -> adn_insize;
if ((new = oid_extend (oid, i)) == NULLOID)
return int_SNMP_error__status_genErr;
ip = new -> oid_elements + new -> oid_nelem - i;
for (; i > 0; i--)
*ip++ = *jp++;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
}
else {
int j;
if ((at = get_arpent (oid -> oid_elements
+ ot -> ot_name -> oid_nelem,
j = oid -> oid_nelem
- ot -> ot_name -> oid_nelem,
isnpa, 1)) == NULL)
return NOTOK;
i = isnpa ? at -> adm_insize : at -> adn_insize;
if ((i = j - i) < 0) {
OID new;
if ((new = oid_extend (oid, -i)) == NULLOID)
return int_SNMP_error__status_genErr;
if (v -> name)
free_SNMP_ObjectName (v -> name);
v -> name = new;
oid = new;
}
else
if (i > 0)
oid -> oid_nelem -= i;
ip = oid -> oid_elements + ot -> ot_name -> oid_nelem;
if (isnpa)
jp = at -> adm_instance, i = at -> adm_insize;
else
jp = at -> adn_instance, i = at -> adn_insize;
for (; i > 0; i--)
*ip++ = *jp++;
}
break;
default:
return int_SNMP_error__status_genErr;
}
switch (ifvar) {
case clnpNetToMediaIfIndex:
case clnpMediaToNetIfIndex:
return o_integer (oi, v, at -> adr_index);
case clnpNetToMediaPhysAddress:
case clnpMediaToNetPhysAddress:
return o_string (oi, v, (char *) at -> adm_address,
(int) at -> adm_addrlen);
case clnpNetToMediaNetAddress:
case clnpMediaToNetNetAddress:
netaddr.siso_addr = at -> adn_address; /* struct copy */
return o_clnpaddr (oi, v, &netaddr);
case clnpNetToMediaType:
case clnpMediaToNetType:
return o_integer (oi, v, at -> adr_type);
default:
return int_SNMP_error__status_noSuchName;
}
}
/* \f
*/
static int adn_compar (a, b)
register struct adrtab **a,
**b;
{
return elem_cmp ((*a) -> adn_instance, (*a) -> adn_insize,
(*b) -> adn_instance, (*b) -> adn_insize);
}
static int adm_compar (a, b)
register struct adrtab **a,
**b;
{
return elem_cmp ((*a) -> adm_instance, (*a) -> adm_insize,
(*b) -> adm_instance, (*b) -> adm_insize);
}
static int get_arptab () {
int adrNumber = 0,
iso_snpac_size,
tblsize;
register struct snpa_cache *sc,
*se;
struct snpa_cache *iso_snpac;
register struct adrtab *at,
*ap,
**base,
**afe,
**afp;
register struct interface *is;
static int first_time = 1;
static int lastq = -1;
if (quantum == lastq)
return OK;
lastq = quantum;
for (at = adn; at; at = ap) {
ap = at -> adn_next;
free ((char *) at);
}
adn = adm = NULL;
if (getkmem (nl + N_ISO_SNPAC_SIZE, (caddr_t) &iso_snpac_size,
sizeof iso_snpac_size) == NOTOK)
return NOTOK;
tblsize = iso_snpac_size * sizeof *iso_snpac;
if ((iso_snpac = (struct snpa_cache *) malloc ((unsigned) (tblsize)))
== NULL)
adios (NULLCP, "out of memory");
if (getkmem (nl + N_ISO_SNPAC, (caddr_t) iso_snpac, tblsize) == NOTOK) {
free ((char *) iso_snpac);
return NOTOK;
}
afp = &adn;
for (se = (sc = iso_snpac) + iso_snpac_size; sc < se; sc++) {
if (!(sc -> sc_flags & SNPA_VALID))
continue;
for (is = ifs; is; is = is -> ifn_next)
if ((caddr_t) is -> ifn_offset == (caddr_t) sc -> sc_ifp)
break;
if (!is) {
if (first_time)
advise (LLOG_EXCEPTIONS, NULLCP,
"unable to find interface for SNPA in cache");
free ((char *) at);
continue;
}
if ((at = (struct adrtab *) calloc (1, sizeof *at)) == NULL)
adios (NULLCP, "out of memory");
*afp = at, afp = &at -> adn_next, adrNumber++;
at -> adr_index = is -> ifn_index;
at -> adr_type = sc -> sc_flags & SNPA_PERM ? STATIC_MAPPING
: DYNAMIC_MAPPING;
at -> adn_address = sc -> sc_nsap; /* struct copy */
at -> adn_instance[0] = at -> adr_index, at -> adn_insize = 1;
at -> adn_insize += clnpaddr2oid (at -> adn_instance + 1,
&at -> adn_address);
bcopy ((char *) sc -> sc_sr.sr_snpa,
(char *) at -> adm_address,
(int) (at -> adm_addrlen = sc -> sc_sr.sr_len));
at -> adm_instance[0] = at -> adr_index, at -> adm_insize = 1;
at -> adm_insize += mediaddr2oid (at -> adm_instance + 1,
at -> adm_address,
(int) at -> adm_addrlen, 0);
if (debug && first_time) {
char buffer[BUFSIZ];
OIDentifier oids;
oids.oid_elements = at -> adn_instance;
oids.oid_nelem = at -> adn_insize;
(void) strcpy (buffer, sprintoid (&oids));
oids.oid_elements = at -> adm_instance;
oids.oid_nelem = at -> adm_insize;
advise (LLOG_DEBUG, NULLCP,
"add mapping: %s -> %s", buffer, sprintoid (&oids));
}
}
first_time = 0;
free ((char *) iso_snpac);
if (adrNumber <= 1) {
adm = adn;
return OK;
}
if ((base = (struct adrtab **)
malloc ((unsigned) (adrNumber * sizeof *base))) == NULL)
adios (NULLCP, "out of memory");
afe = base;
for (at = adn; at; at = at -> adn_next)
*afe++ = at;
qsort ((char *) base, adrNumber, sizeof *base, adn_compar);
afp = base;
at = adn = *afp++;
while (afp < afe) {
at -> adn_next = *afp;
at = *afp++;
}
at -> adn_next = NULL;
qsort ((char *) base, adrNumber, sizeof *base, adm_compar);
afp = base;
at = adm = *afp++;
while (afp < afe) {
at -> adm_next = *afp;
at = *afp++;
}
at -> adm_next = NULL;
free ((char *) base);
return OK;
}
/* \f
*/
static struct adrtab *get_arpent (ip, len, isnpa, isnext)
register unsigned int *ip;
int len;
int isnpa,
isnext;
{
register struct adrtab *at;
if (isnpa)
for (at = adm; at; at = at -> adm_next)
switch (elem_cmp (at -> adm_instance, at -> adm_insize, ip, len)) {
case 0:
return (isnext ? at -> adm_next : at);
case 1:
return (isnext ? at : NULL);
}
else
for (at = adn; at; at = at -> adn_next)
switch (elem_cmp (at -> adn_instance, at -> adn_insize, ip, len)) {
case 0:
return (isnext ? at -> adn_next : at);
case 1:
return (isnext ? at : NULL);
}
return NULL;
}
/* \f
*/
static struct esis_stat esis_stat;
/* \f
*/
#define esisESHins 0
#define esisESHouts 1
#define esisISHins 2
#define esisISHouts 3
#define esisRDUins 4
#define esisRDUouts 5
static int o_esis (oi, v, offset)
OI oi;
register struct type_SNMP_VarBind *v;
int offset;
{
int ifvar;
register struct esis_stat *es = &esis_stat;
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_ESIS_STAT, (caddr_t) &esis_stat, sizeof esis_stat)
== NOTOK)
return int_SNMP_error__status_genErr;
}
switch (ifvar) {
case esisESHins:
return o_integer (oi, v, es -> es_eshrcvd);
case esisESHouts:
return o_integer (oi, v, es -> es_eshsent);
case esisISHins:
return o_integer (oi, v, es -> es_ishrcvd);
case esisISHouts:
return o_integer (oi, v, es -> es_ishsent);
case esisRDUins:
return o_integer (oi, v, es -> es_rdrcvd);
case esisRDUouts:
return o_integer (oi, v, es -> es_rdsent);
default:
return int_SNMP_error__status_noSuchName;
}
}
/* \f
*/
init_clnp () {
register OT ot;
if (nl[N_ISO_SYSTYPE].n_value == 0)
return;
if (ot = text2obj ("clnpForwarding"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpForwarding;
if (ot = text2obj ("clnpDefaultLifeTime"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpDefaultLifeTime;
if (ot = text2obj ("clnpInReceives"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInReceives;
if (ot = text2obj ("clnpInHdrErrors"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInHdrErrors;
if (ot = text2obj ("clnpInAddrErrors"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInAddrErrors;
if (ot = text2obj ("clnpForwPDUs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpForwPDUs;
#ifdef clnpInUnknownNLPs
if (ot = text2obj ("clnpInUnknownNLPs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInUnknownNLPs;
#endif
if (ot = text2obj ("clnpInUnknownULPs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInUnknownULPs;
#ifdef clnpInDiscards
if (ot = text2obj ("clnpInDiscards"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInDiscards;
#endif
if (ot = text2obj ("clnpInDelivers"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInDelivers;
if (ot = text2obj ("clnpOutRequests"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutRequests;
if (ot = text2obj ("clnpOutDiscards"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutDiscards;
if (ot = text2obj ("clnpOutNoRoutes"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutNoRoutes;
if (ot = text2obj ("clnpReasmTimeout"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpReasmTimeout;
if (ot = text2obj ("clnpReasmReqds"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpReasmReqds;
if (ot = text2obj ("clnpReasmOKs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpReasmOKs;
if (ot = text2obj ("clnpReasmFails"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpReasmFails;
if (ot = text2obj ("clnpSegOKs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpSegOKs;
if (ot = text2obj ("clnpSegFails"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpSegFails;
if (ot = text2obj ("clnpSegCreates"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpSegCreates;
if (ot = text2obj ("clnpAdEntAddr"))
ot -> ot_getfnx = o_clnp_addr,
ot -> ot_info = (caddr_t) clnpAdEntAddr;
if (ot = text2obj ("clnpAdEntIfIndex"))
ot -> ot_getfnx = o_clnp_addr,
ot -> ot_info = (caddr_t) clnpAdEntIfIndex;
if (ot = text2obj ("clnpAdEntNetMask"))
ot -> ot_getfnx = o_clnp_addr,
ot -> ot_info = (caddr_t) clnpAdEntNetMask;
if (ot = text2obj ("clnpAdEntReasmMaxSize"))
ot -> ot_getfnx = o_clnp_addr,
ot -> ot_info = (caddr_t) clnpAdEntReasmMaxSize;
if (ot = text2obj ("clnpRouteDest"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteDest;
if (ot = text2obj ("clnpRouteIfIndex"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteIfIndex;
if (ot = text2obj ("clnpRouteMetric1"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteMetric1;
if (ot = text2obj ("clnpRouteMetric2"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteMetric2;
if (ot = text2obj ("clnpRouteMetric3"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteMetric3;
if (ot = text2obj ("clnpRouteMetric4"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteMetric4;
if (ot = text2obj ("clnpRouteNextHop"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteNextHop;
if (ot = text2obj ("clnpRouteType"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteType;
if (ot = text2obj ("clnpRouteProto"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteProto;
if (ot = text2obj ("clnpRouteAge"))
ot -> ot_getfnx = o_clnp_route,
ot -> ot_info = (caddr_t) clnpRouteAge;
if (ot = text2obj ("clnpNetToMediaIfIndex"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpNetToMediaIfIndex;
if (ot = text2obj ("clnpNetToMediaPhysAddress"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpNetToMediaPhysAddress;
if (ot = text2obj ("clnpNetToMediaNetAddress"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpNetToMediaNetAddress;
if (ot = text2obj ("clnpNetToMediaType"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpNetToMediaType;
if (ot = text2obj ("clnpMediaToNetIfIndex"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpMediaToNetIfIndex;
if (ot = text2obj ("clnpMediaToNetNetAddress"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpMediaToNetNetAddress;
if (ot = text2obj ("clnpMediaToNetPhysAddress"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpMediaToNetPhysAddress;
if (ot = text2obj ("clnpMediaToNetType"))
ot -> ot_getfnx = o_address,
ot -> ot_info = (caddr_t) clnpMediaToNetType;
if (ot = text2obj ("clnpInErrors"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrors;
if (ot = text2obj ("clnpOutErrors"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrors;
if (ot = text2obj ("clnpInErrUnspecs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnspecs;
if (ot = text2obj ("clnpInErrProcs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrProcs;
if (ot = text2obj ("clnpInErrCksums"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrCksums;
if (ot = text2obj ("clnpInErrCongests"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrCongests;
if (ot = text2obj ("clnpInErrHdrs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrHdrs;
if (ot = text2obj ("clnpInErrSegs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrSegs;
if (ot = text2obj ("clnpInErrIncomps"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrIncomps;
if (ot = text2obj ("clnpInErrDups"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrDups;
if (ot = text2obj ("clnpInErrUnreachDsts"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnreachDsts;
if (ot = text2obj ("clnpInErrUnknownDsts"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnknownDsts;
if (ot = text2obj ("clnpInErrSRUnspecs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrSRUnspecs;
if (ot = text2obj ("clnpInErrSRSyntaxes"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrSRSyntaxes;
if (ot = text2obj ("clnpInErrSRUnkAddrs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrSRUnkAddrs;
if (ot = text2obj ("clnpInErrSRBadPaths"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrSRBadPaths;
if (ot = text2obj ("clnpInErrHops"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrHops;
if (ot = text2obj ("clnpInErrHopReassms"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrHopReassms;
if (ot = text2obj ("clnpInErrUnsOptions"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnsOptions;
if (ot = text2obj ("clnpInErrUnsVersions"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnsVersions;
if (ot = text2obj ("clnpInErrUnsSecurities"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnsSecurities;
if (ot = text2obj ("clnpInErrUnsSRs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnsSRs;
if (ot = text2obj ("clnpInErrUnsRRs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrUnsRRs;
if (ot = text2obj ("clnpInErrInterferences"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpInErrInterferences;
if (ot = text2obj ("clnpOutErrUnspecs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnspecs;
if (ot = text2obj ("clnpOutErrProcs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrProcs;
if (ot = text2obj ("clnpOutErrCksums"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrCksums;
if (ot = text2obj ("clnpOutErrCongests"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrCongests;
if (ot = text2obj ("clnpOutErrHdrs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrHdrs;
if (ot = text2obj ("clnpOutErrSegs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrSegs;
if (ot = text2obj ("clnpOutErrIncomps"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrIncomps;
if (ot = text2obj ("clnpOutErrDups"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrDups;
if (ot = text2obj ("clnpOutErrUnreachDsts"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnreachDsts;
if (ot = text2obj ("clnpOutErrUnknownDsts"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnknownDsts;
if (ot = text2obj ("clnpOutErrSRUnspecs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrSRUnspecs;
if (ot = text2obj ("clnpOutErrSRSyntaxes"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrSRSyntaxes;
if (ot = text2obj ("clnpOutErrSRUnkAddrs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrSRUnkAddrs;
if (ot = text2obj ("clnpOutErrSRBadPaths"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrSRBadPaths;
if (ot = text2obj ("clnpOutErrHops"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrHops;
if (ot = text2obj ("clnpOutErrHopReassms"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrHopReassms;
if (ot = text2obj ("clnpOutErrUnsOptions"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnsOptions;
if (ot = text2obj ("clnpOutErrUnsVersions"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnsVersions;
if (ot = text2obj ("clnpOutErrUnsSecurities"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnsSecurities;
if (ot = text2obj ("clnpOutErrUnsSRs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnsSRs;
if (ot = text2obj ("clnpOutErrUnsRRs"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrUnsRRs;
if (ot = text2obj ("clnpOutErrInterferences"))
ot -> ot_getfnx = o_clnp,
ot -> ot_info = (caddr_t) clnpOutErrInterferences;
if (ot = text2obj ("esisESHins"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisESHins;
if (ot = text2obj ("esisESHouts"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisESHouts;
if (ot = text2obj ("esisISHins"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisISHins;
if (ot = text2obj ("esisISHouts"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisISHouts;
if (ot = text2obj ("esisRDUins"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisRDUins;
if (ot = text2obj ("esisRDUouts"))
ot -> ot_getfnx = o_esis,
ot -> ot_info = (caddr_t) esisRDUouts;
}
#else
init_clnp () {}
#endif