/* ip.c - MIB realization of the IP (and Address Translation) group */
static char *rcsid
= "$Header: /f/osi/snmp/RCS/ip.c,v 7.20 91/02/22 09:43:27 mrose Interim $";
* $Header: /f/osi/snmp/RCS/ip.c,v 7.20 91/02/22 09:43:27 mrose Interim $
* 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
* Revision 7.20 91/02/22 09:43:27 mrose
* Revision 7.19 91/01/11 15:34:23 mrose
* Revision 7.18 90/12/18 10:13:36 mrose
* Revision 7.17 90/10/15 18:21:00 mrose
* Revision 7.16 90/10/02 09:54:59 mrose
* Revision 7.15 90/09/03 12:57:25 mrose
* Revision 7.14 90/08/16 16:50:32 mrose
* Revision 7.13 90/08/08 14:00:58 mrose
* Revision 7.12 90/07/09 14:48:44 mrose
* Revision 7.11 90/05/22 20:30:26 mrose
* Revision 7.10 90/05/12 17:02:02 mrose
* Revision 7.9 90/04/18 08:51:47 mrose
* Revision 7.8 90/03/24 10:54:09 mrose
* Revision 7.7 90/03/06 13:50:55 mrose
* Revision 7.6 90/02/27 18:52:11 mrose
* Revision 7.5 90/02/27 18:49:40 mrose
* Revision 7.4 90/02/23 17:47:43 mrose
* Revision 7.3 90/02/17 10:38:14 mrose
* Revision 7.2 90/01/27 08:21:52 mrose
* Revision 7.1 90/01/11 18:34:10 mrose
* Revision 7.0 89/11/23 22:23:06 mrose
* 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
#include <netinet/in_systm.h>
#include <netinet/ip_var.h>
#define FORW_GATEWAY 1 /* ipForwarding */
static struct ipstat ipstat
;
#undef ipInAddrErrors 4 /* NOT IMPLEMENTED */
#define ipForwDatagrams 5
#define ipInUnknownProtos 6
#undef ipInDiscards 7 /* NOT IMPLEMENTED */
#define ipReasmTimeout 12
static int o_ip (oi
, v
, offset
)
register struct type_SNMP_VarBind
*v
;
register struct ipstat
*ips
= &ipstat
;
register OID oid
= oi
-> oi_name
;
register OT ot
= oi
-> oi_type
;
ifvar
= (int) ot
-> ot_info
;
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
;
case type_SNMP_PDUs_get__next__request
:
if (oid
-> oid_nelem
== ot
-> ot_name
-> oid_nelem
) {
if ((new = oid_extend (oid
, 1)) == NULLOID
)
new -> oid_elements
[new -> oid_nelem
- 1] = 0;
free_SNMP_ObjectName (v
-> name
);
return int_SNMP_error__status_genErr
;
if (getkmem (nl
+ N_IPFORWARDING
, (caddr_t
) &ipforwarding
,
sizeof ipforwarding
) == NOTOK
|| getkmem (nl
+ N_IPSTAT
, (caddr_t
) ips
, sizeof *ips
)
return o_integer (oi
, v
, ipforwarding
? FORW_GATEWAY
: FORW_HOST
);
return o_integer (oi
, v
, MAXTTL
);
return o_integer (oi
, v
, ips
-> ips_total
);
return o_integer (oi
, v
, ips
-> ips_badsum
return o_integer (oi
, v
, ips
-> ips_forward
);
return o_integer (oi
, v
, ips
-> ips_noproto
);
return o_integer (oi
, v
, ips
-> ips_delivered
);
return o_integer (oi
, v
, ips
-> ips_localout
);
return o_integer (oi
, v
, ips
-> ips_odropped
);
return o_integer (oi
, v
, ips
-> ips_cantforward
);
return o_integer (oi
, v
, IPFRAGTTL
);
return o_integer (oi
, v
, ips
-> ips_fragments
);
return o_integer (oi
, v
, ips
-> ips_reassembled
);
return o_integer (oi
, v
, ips
-> ips_fragdropped
+ ips
-> ips_fragtimeout
);
return o_integer (oi
, v
, ips
-> ips_fragmented
);
return o_integer (oi
, v
, ips
-> ips_cantfrag
);
return o_integer (oi
, v
, ips
-> ips_ofragments
);
return int_SNMP_error__status_noSuchName
;
#define IP_MAXPACKET 65535 /* ipAdEntReasmMaxSize */
#define ipAdEntBcastAddr 3
#define ipAdEntReasmMaxSize 4
static int o_ip_addr (oi
, v
, offset
)
register struct type_SNMP_VarBind
*v
;
register unsigned int *ip
,
register struct address
*as
;
register OID oid
= oi
-> oi_name
;
register OT ot
= oi
-> oi_type
;
if (get_interfaces (offset
) == NOTOK
)
ifvar
= (int) ot
-> ot_info
;
case type_SNMP_PDUs_get__request
:
if (oid
-> oid_nelem
!= ot
-> ot_name
-> oid_nelem
+ IFN_SIZE
)
return int_SNMP_error__status_noSuchName
;
if ((as
= get_addrent (oid
-> oid_elements
+ oid
-> oid_nelem
- IFN_SIZE
, IFN_SIZE
, afs_inet
, 0)) == NULL
)
return int_SNMP_error__status_noSuchName
;
case type_SNMP_PDUs_get__next__request
:
if ((i
= oid
-> oid_nelem
- ot
-> ot_name
-> oid_nelem
) != 0
for (jp
= (ip
= oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
- 1) + i
;
oid
-> oid_nelem
= ot
-> ot_name
-> oid_nelem
;
if ((new = oid_normalize (oid
, IFN_SIZE
- i
, 256))
free_SNMP_ObjectName (v
-> name
);
oid
-> oid_nelem
= ot
-> ot_name
-> oid_nelem
+ IFN_SIZE
;
if (oid
-> oid_nelem
== ot
-> ot_name
-> oid_nelem
) {
if ((as
= afs_inet
) == NULL
)
if ((new = oid_extend (oid
, IFN_SIZE
)) == NULLOID
)
ip
= new -> oid_elements
+ new -> oid_nelem
- IFN_SIZE
;
for (i
= IFN_SIZE
; i
> 0; i
--)
free_SNMP_ObjectName (v
-> name
);
if ((as
= get_addrent (ip
= oid
-> oid_elements
+ oid
-> oid_nelem
- IFN_SIZE
,
IFN_SIZE
, afs_inet
, 1)) == NULL
)
for (i
= IFN_SIZE
; i
> 0; i
--)
return int_SNMP_error__status_genErr
;
return o_ipaddr (oi
, v
, (struct sockaddr_in
*) &as
-> adr_address
);
return o_integer (oi
, v
, ffs (as
-> adr_indexmask
));
return o_ipaddr (oi
, v
, (struct sockaddr_in
*) &as
-> adr_netmask
);
case ipAdEntBcastAddr
: /* beyond belief! */
u_long a
= (((struct sockaddr_in
*) &as
-> adr_netmask
)
& ~(((struct sockaddr_in
*) &as
-> adr_broadaddr
) -> sin_addr
.s_addr
);
return o_integer (oi
, v
, a
? 1 : 0);
case ipAdEntReasmMaxSize
:
return o_integer (oi
, v
, IP_MAXPACKET
);
return int_SNMP_error__status_noSuchName
;
#undef ipRouteAge 9 /* NOT IMPLEMENTED */
#define ipRouteMetric5 11
#define unixIpRouteFlags 13
#define unixIpRouteRefCnt 14
#define unixIpRouteUses 15
static int o_ip_route (oi
, v
, offset
)
register struct type_SNMP_VarBind
*v
;
register unsigned int *ip
,
register struct rtetab
*rt
;
register OID oid
= oi
-> oi_name
;
register OT ot
= oi
-> oi_type
;
if (get_routes (offset
) == NOTOK
)
ifvar
= (int) ot
-> ot_info
;
case type_SNMP_PDUs_get__request
:
if (oid
-> oid_nelem
< ot
-> ot_name
-> oid_nelem
+ IFN_SIZE
)
return int_SNMP_error__status_noSuchName
;
if ((rt
= get_rtent (oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
,
- ot
-> ot_name
-> oid_nelem
,
return int_SNMP_error__status_noSuchName
;
case type_SNMP_PDUs_get__next__request
:
if ((i
= oid
-> oid_nelem
- ot
-> ot_name
-> oid_nelem
) != 0
for (jp
= (ip
= oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
- 1) + i
;
oid
-> oid_nelem
= ot
-> ot_name
-> oid_nelem
;
if ((new = oid_normalize (oid
, IFN_SIZE
- i
, 256))
free_SNMP_ObjectName (v
-> name
);
if (oid
-> oid_nelem
== ot
-> ot_name
-> oid_nelem
) {
if ((rt
= rts_inet
) == NULL
)
if ((new = oid_extend (oid
, rt
-> rt_insize
)) == NULLOID
)
ip
= new -> oid_elements
+ new -> oid_nelem
- rt
-> rt_insize
;
for (i
= rt
-> rt_insize
; i
> 0; i
--)
free_SNMP_ObjectName (v
-> name
);
if ((rt
= get_rtent (ip
= oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
,
- ot
-> ot_name
-> oid_nelem
,
if ((i
= j
- rt
-> rt_insize
) < 0) {
if ((new = oid_extend (oid
, -i
)) == NULLOID
)
free_SNMP_ObjectName (v
-> name
);
ip
= oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
;
for (i
= rt
-> rt_insize
; i
> 0; i
--)
return int_SNMP_error__status_genErr
;
return o_ipaddr (oi
, v
, (struct sockaddr_in
*) &rt
-> rt_dst
);
register struct interface
*is
;
if (get_interfaces (type_SNMP_PDUs_get__request
) == NOTOK
)
for (is
= ifs
; is
; is
= is
-> ifn_next
)
if ((caddr_t
) is
-> ifn_offset
== (caddr_t
) rt
-> rt_rt
.rt_ifp
) {
return o_integer (oi
, v
, is
-> ifn_index
);
if (offset
== type_SNMP_PDUs_get__next__request
)
return int_SNMP_error__status_noSuchName
;
return o_integer (oi
, v
, METRIC_NONE
);
return o_ipaddr (oi
, v
, (struct sockaddr_in
*) &rt
-> rt_gateway
);
switch (rt
-> rt_rt
.rt_flags
& (RTF_GATEWAY
| RTF_HOST
)) {
return o_integer (oi
, v
, TYPE_REMOTE
);
return o_integer (oi
, v
, TYPE_DIRECT
);
return o_integer (oi
, v
, TYPE_OTHER
);
if (rt
-> rt_rt
.rt_flags
& RTF_DYNAMIC
)
if (rt
-> rt_rt
.rt_flags
& (RTF_DYNAMIC
| RTF_MODIFIED
))
return o_integer (oi
, v
, PROTO_ICMP
);
return o_integer (oi
, v
, PROTO_OTHER
);
struct sockaddr_in
*sin
= (struct sockaddr_in
*) &rt
-> rt_dst
;
register struct interface
*is
;
register struct address
*as
;
bzero ((char *) &mask
, sizeof mask
);
if (rt
->rt_rt
.rt_flags
& RTF_HOST
)
mask
.sin_addr
.s_addr
= (u_long
) 0xffffffff;
if (sin
-> sin_addr
.s_addr
!= 0L) {
/* XXX - BSD44 shouldn't use this code, it has a */
/* mask associated with each route, but I don't */
/* know how to locate it at the moment (jch) */
if (get_interfaces (type_SNMP_PDUs_get__request
)
for (is
= ifs
; is
; is
= is
-> ifn_next
)
if ((caddr_t
) is
-> ifn_offset
== (caddr_t
) rt
-> rt_rt
.rt_ifp
)
if (!is
|| !is
-> ifn_ready
)
return int_SNMP_error__status_noSuchName
;
for (as
= afs_inet
; as
; as
= as
-> adr_next
)
if (is
-> ifn_indexmask
& as
-> adr_indexmask
)
return int_SNMP_error__status_noSuchName
;
mask
.sin_addr
.s_addr
= as
-> adr_netmask
.un_in
.sin_addr
.s_addr
;
if (IN_CLASSA (sin
-> sin_addr
.s_addr
))
mask
.sin_addr
.s_addr
= IN_CLASSA_NET
;
if (IN_CLASSB (sin
-> sin_addr
.s_addr
))
mask
.sin_addr
.s_addr
= IN_CLASSB_NET
;
mask
.sin_addr
.s_addr
= IN_CLASSC_NET
;
return o_ipaddr (oi
, v
, &mask
);
return o_specific (oi
, v
, (caddr_t
) nullSpecific
);
return o_integer (oi
, v
, rt
-> rt_rt
.rt_flags
& 0xffff);
return o_integer (oi
, v
, rt
-> rt_rt
.rt_refcnt
& 0xffff);
return o_integer (oi
, v
, rt
-> rt_rt
.rt_use
);
return int_SNMP_error__status_noSuchName
;
static struct rtstat rtstat
;
#define unixRouteBadRedirects 0
#define unixRouteCreatedByRedirects 1
#define unixRouteModifiedByRedirects 2
#define unixRouteLookupFails 3
#define unixRouteWildcardUses 4
static int o_ip_routing_stats (oi
, v
, offset
)
register struct type_SNMP_VarBind
*v
;
register struct rtstat
*rts
= &rtstat
;
register OID oid
= oi
-> oi_name
;
register OT ot
= oi
-> oi_type
;
ifvar
= (int) ot
-> ot_info
;
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
;
case type_SNMP_PDUs_get__next__request
:
if (oid
-> oid_nelem
== ot
-> ot_name
-> oid_nelem
) {
if ((new = oid_extend (oid
, 1)) == NULLOID
)
new -> oid_elements
[new -> oid_nelem
- 1] = 0;
free_SNMP_ObjectName (v
-> name
);
return int_SNMP_error__status_genErr
;
if (getkmem (nl
+ N_RTSTAT
, (caddr_t
) rts
, sizeof *rts
) == NOTOK
)
case unixRouteBadRedirects
:
return o_integer (oi
, v
, rts
-> rts_badredirect
& 0xffff);
case unixRouteCreatedByRedirects
:
return o_integer (oi
, v
, rts
-> rts_dynamic
& 0xffff);
case unixRouteModifiedByRedirects
:
return o_integer (oi
, v
, rts
-> rts_newgateway
& 0xffff);
case unixRouteLookupFails
:
return o_integer (oi
, v
, rts
-> rts_unreach
& 0xffff);
case unixRouteWildcardUses
:
return o_integer (oi
, v
, rts
-> rts_wildcard
& 0xffff);
return int_SNMP_error__status_noSuchName
;
#define ADN_SIZE (IFN_SIZE + 1) /* IpAddress instance */
unsigned int adn_instance
[ADN_SIZE
];
struct in_addr adn_address
; /* IpAddress */
#define ADM_SIZE ADR_SIZE /* PhysAddress instance */
unsigned int adm_instance
[ADM_SIZE
];
u_char adm_address
[ADM_SIZE
]; /* PhysAddress */
u_char adm_addrlen
; /* .. */
#define ADA_SIZE (IFN_SIZE + 2) /* AtEntry instance */
unsigned int ada_instance
[ADA_SIZE
];
int adr_index
; /* ifIndex */
int adr_type
; /* ipNetToMediaType */
#define DYNAMIC_MAPPING 3
struct adrtab
*adn_next
; /* next IpAddress */
struct adrtab
*adm_next
; /* next PhysAddress */
struct adrtab
*ada_next
; /* next AtEntry */
static struct adrtab
*ada
= NULL
;
static struct adrtab
*adn
= NULL
;
static struct adrtab
*adm
= NULL
;
static int flush_arp_cache
= 0;
static struct adrtab
*get_arpent ();
#define ipNetToMediaIfIndex 3
#define ipNetToMediaPhysAddress 4
#define ipNetToMediaNetAddress 5
#define ipNetToMediaType 6
static int o_address (oi
, v
, offset
)
register struct type_SNMP_VarBind
*v
;
register unsigned int *ip
,
register struct adrtab
*at
;
struct sockaddr_in netaddr
;
register OID oid
= oi
-> oi_name
;
register OT ot
= oi
-> oi_type
;
if (get_arptab (offset
) == NOTOK
)
switch (ifvar
= (int) ot
-> ot_info
) {
case ipNetToMediaIfIndex
:
case ipNetToMediaPhysAddress
:
case ipNetToMediaNetAddress
:
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
,
- ot
-> ot_name
-> oid_nelem
,
return int_SNMP_error__status_noSuchName
;
case type_SNMP_PDUs_get__next__request
:
if (oid
-> oid_nelem
== ot
-> ot_name
-> oid_nelem
) {
jp
= at
-> adn_instance
, i
= at
-> adn_insize
;
jp
= at
-> adm_instance
, i
= at
-> adm_insize
;
jp
= at
-> ada_instance
, i
= at
-> ada_insize
;
if ((new = oid_extend (oid
, i
)) == NULLOID
)
ip
= new -> oid_elements
+ new -> oid_nelem
- i
;
free_SNMP_ObjectName (v
-> name
);
if ((at
= get_arpent (oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
,
- ot
-> ot_name
-> oid_nelem
,
i
= isnpa
> 0 ? at
-> adm_insize
: isnpa
== 0 ? at
-> adn_insize
if ((new = oid_extend (oid
, -i
)) == NULLOID
)
free_SNMP_ObjectName (v
-> name
);
ip
= oid
-> oid_elements
+ ot
-> ot_name
-> oid_nelem
;
jp
= at
-> adn_instance
, i
= at
-> adn_insize
;
jp
= at
-> adm_instance
, i
= at
-> adm_insize
;
jp
= at
-> ada_instance
, i
= at
-> ada_insize
;
return int_SNMP_error__status_genErr
;
case ipNetToMediaIfIndex
:
return o_integer (oi
, v
, at
-> adr_index
);
case ipNetToMediaPhysAddress
:
return o_string (oi
, v
, (char *) at
-> adm_address
,
(int) at
-> adm_addrlen
);
case ipNetToMediaNetAddress
:
netaddr
.sin_addr
= at
-> adn_address
; /* struct copy */
return o_ipaddr (oi
, v
, &netaddr
);
return o_integer (oi
, v
, at
-> adr_type
);
return int_SNMP_error__status_noSuchName
;
static int adn_compar (a
, b
)
register struct adrtab
**a
,
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
,
return elem_cmp ((*a
) -> adm_instance
, (*a
) -> adm_insize
,
(*b
) -> adm_instance
, (*b
) -> adm_insize
);
static int ada_compar (a
, b
)
register struct adrtab
**a
,
return elem_cmp ((*a
) -> ada_instance
, (*a
) -> ada_insize
,
(*b
) -> ada_instance
, (*b
) -> ada_insize
);
static int get_arptab (offset
)
register struct arptab
*ac
,
register struct adrtab
*at
,
register struct interface
*is
;
static int first_time
= 1;
&& offset
== type_SNMP_PDUs_get__next__request
&& quantum
== lastq
+ 1) { /* XXX: caching! */
lastq
= quantum
, flush_arp_cache
= 0;
for (at
= adn
; at
; at
= ap
) {
if (getkmem (nl
+ N_ARPTAB_SIZE
, (caddr_t
) &arptab_size
,
sizeof arptab_size
) == NOTOK
)
tblsize
= arptab_size
* sizeof *arptab
;
if ((arptab
= (struct arptab
*) malloc ((unsigned) (tblsize
))) == NULL
)
adios (NULLCP
, "out of memory");
if (getkmem (nl
+ N_ARPTAB
, (caddr_t
) arptab
, tblsize
) == NOTOK
) {
for (ae
= (ac
= arptab
) + arptab_size
; ac
< ae
; ac
++) {
if (!(ac
-> at_iaddr
.s_addr
) || !(ac
-> at_flags
& ATF_COM
))
type
= ac
-> at_flags
& ATF_PERM
? OTHER_MAPPING
: ac
-> at_flags
& ATF_PUBL
? STATIC_MAPPING
/* there appears to be no way to gather per-interface address translation
tables, so we simply duplicate the arptable for each interface... */
for (is
= ifs
; is
; is
= is
-> ifn_next
) {
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
-> adn_address
= ac
-> at_iaddr
; /* struct copy */
at
-> adn_instance
[0] = at
-> adr_index
, at
-> adn_insize
= 1;
at
-> adn_insize
+= ipaddr2oid (at
-> adn_instance
+ 1,
bcopy ((char *) ac
-> at_enaddr
,
(char *) at
-> adm_address
,
(int) (at
-> adm_addrlen
= sizeof ac
-> at_enaddr
));
bcopy ((char *) ac
-> at_enaddr
.ether_addr_octet
,
(char *) at
-> adm_address
,
(int) (at
-> adm_addrlen
=
sizeof ac
-> at_enaddr
.ether_addr_octet
));
at
-> adm_instance
[0] = at
-> adr_index
, at
-> adm_insize
= 1;
at
-> adm_insize
+= mediaddr2oid (at
-> adm_instance
+ 1,
(int) at
-> adm_addrlen
, 0);
at
-> ada_instance
[0] = at
-> adr_index
;
at
-> ada_instance
[1] = 1;
at
-> ada_insize
+= ipaddr2oid (at
-> ada_instance
+ 2,
if (debug
&& first_time
) {
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 on %d: %s -> %s",
at
-> adr_index
, buffer
, sprintoid (&oids
));
if ((base
= (struct adrtab
**)
malloc ((unsigned) (adrNumber
* sizeof *base
))) == NULL
)
adios (NULLCP
, "out of memory");
for (at
= adn
; at
; at
= at
-> adn_next
)
qsort ((char *) base
, adrNumber
, sizeof *base
, adn_compar
);
qsort ((char *) base
, adrNumber
, sizeof *base
, adm_compar
);
qsort ((char *) base
, adrNumber
, sizeof *base
, ada_compar
);
static struct adrtab
*get_arpent (ip
, len
, isnpa
, isnext
)
register unsigned int *ip
;
register struct adrtab
*at
;
for (at
= adn
; at
; at
= at
-> adn_next
)
switch (elem_cmp (at
-> adn_instance
, at
-> adn_insize
,
if ((at
= at
-> adn_next
) == NULL
)
return (isnext
? at
: NULL
);
for (at
= adm
; at
; at
= at
-> adm_next
)
switch (elem_cmp (at
-> adm_instance
, at
-> adm_insize
,
if ((at
= at
-> adm_next
) == NULL
)
return (isnext
? at
: NULL
);
for (at
= ada
; at
; at
= at
-> ada_next
)
switch (elem_cmp (at
-> ada_instance
, at
-> ada_insize
,
if ((at
= at
-> ada_next
) == NULL
)
return (isnext
? at
: NULL
);
if (ot
= text2obj ("ipForwarding"))
ot
-> ot_info
= (caddr_t
) ipForwarding
;
if (ot
= text2obj ("ipDefaultTTL"))
ot
-> ot_info
= (caddr_t
) ipDefaultTTL
;
if (ot
= text2obj ("ipInReceives"))
ot
-> ot_info
= (caddr_t
) ipInReceives
;
if (ot
= text2obj ("ipInHdrErrors"))
ot
-> ot_info
= (caddr_t
) ipInHdrErrors
;
if (ot
= text2obj ("ipInAddrErrors"))
ot
-> ot_info
= (caddr_t
) ipInAddrErrors
;
if (ot
= text2obj ("ipForwDatagrams"))
ot
-> ot_info
= (caddr_t
) ipForwDatagrams
;
if (ot
= text2obj ("ipInUnknownProtos"))
ot
-> ot_info
= (caddr_t
) ipInUnknownProtos
;
if (ot
= text2obj ("ipInDiscards"))
ot
-> ot_info
= (caddr_t
) ipInDiscards
;
if (ot
= text2obj ("ipInDelivers"))
ot
-> ot_info
= (caddr_t
) ipInDelivers
;
if (ot
= text2obj ("ipOutRequests"))
ot
-> ot_info
= (caddr_t
) ipOutRequests
;
if (ot
= text2obj ("ipOutDiscards"))
ot
-> ot_info
= (caddr_t
) ipOutDiscards
;
if (ot
= text2obj ("ipOutNoRoutes"))
ot
-> ot_info
= (caddr_t
) ipOutNoRoutes
;
if (ot
= text2obj ("ipReasmTimeout"))
ot
-> ot_info
= (caddr_t
) ipReasmTimeout
;
if (ot
= text2obj ("ipReasmReqds"))
ot
-> ot_info
= (caddr_t
) ipReasmReqds
;
if (ot
= text2obj ("ipReasmOKs"))
ot
-> ot_info
= (caddr_t
) ipReasmOKs
;
if (ot
= text2obj ("ipReasmFails"))
ot
-> ot_info
= (caddr_t
) ipReasmFails
;
if (ot
= text2obj ("ipFragOKs"))
ot
-> ot_info
= (caddr_t
) ipFragOKs
;
if (ot
= text2obj ("ipFragFails"))
ot
-> ot_info
= (caddr_t
) ipFragFails
;
if (ot
= text2obj ("ipFragCreates"))
ot
-> ot_info
= (caddr_t
) ipFragCreates
;
if (ot
= text2obj ("ipAdEntAddr"))
ot
-> ot_getfnx
= o_ip_addr
,
ot
-> ot_info
= (caddr_t
) ipAdEntAddr
;
if (ot
= text2obj ("ipAdEntIfIndex"))
ot
-> ot_getfnx
= o_ip_addr
,
ot
-> ot_info
= (caddr_t
) ipAdEntIfIndex
;
if (ot
= text2obj ("ipAdEntNetMask"))
ot
-> ot_getfnx
= o_ip_addr
,
ot
-> ot_info
= (caddr_t
) ipAdEntNetMask
;
if (ot
= text2obj ("ipAdEntBcastAddr"))
ot
-> ot_getfnx
= o_ip_addr
,
ot
-> ot_info
= (caddr_t
) ipAdEntBcastAddr
;
if (ot
= text2obj ("ipAdEntReasmMaxSize"))
ot
-> ot_getfnx
= o_ip_addr
,
ot
-> ot_info
= (caddr_t
) ipAdEntReasmMaxSize
;
if (ot
= text2obj ("ipRouteDest"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteDest
;
if (ot
= text2obj ("ipRouteIfIndex"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteIfIndex
;
if (ot
= text2obj ("ipRouteMetric1"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMetric1
;
if (ot
= text2obj ("ipRouteMetric2"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMetric2
;
if (ot
= text2obj ("ipRouteMetric3"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMetric3
;
if (ot
= text2obj ("ipRouteMetric4"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMetric4
;
if (ot
= text2obj ("ipRouteNextHop"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteNextHop
;
if (ot
= text2obj ("ipRouteType"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteType
;
if (ot
= text2obj ("ipRouteProto"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteProto
;
if (ot
= text2obj ("ipRouteAge"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteAge
;
if (ot
= text2obj ("ipRouteMask"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMask
;
if (ot
= text2obj ("ipRouteMetric5"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteMetric5
;
if (ot
= text2obj ("ipRouteInfo"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) ipRouteInfo
;
if (ot
= text2obj ("unixIpRouteFlags"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) unixIpRouteFlags
;
if (ot
= text2obj ("unixIpRouteRefCnt"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) unixIpRouteRefCnt
;
if (ot
= text2obj ("unixIpRouteUses"))
ot
-> ot_getfnx
= o_ip_route
,
ot
-> ot_info
= (caddr_t
) unixIpRouteUses
;
if (ot
= text2obj ("unixRouteBadRedirects"))
ot
-> ot_getfnx
= o_ip_routing_stats
,
ot
-> ot_info
= (caddr_t
) unixRouteBadRedirects
;
if (ot
= text2obj ("unixRouteCreatedByRedirects"))
ot
-> ot_getfnx
= o_ip_routing_stats
,
ot
-> ot_info
= (caddr_t
) unixRouteCreatedByRedirects
;
if (ot
= text2obj ("unixRouteModifiedByRedirects"))
ot
-> ot_getfnx
= o_ip_routing_stats
,
ot
-> ot_info
= (caddr_t
) unixRouteModifiedByRedirects
;
if (ot
= text2obj ("unixRouteLookupFails"))
ot
-> ot_getfnx
= o_ip_routing_stats
,
ot
-> ot_info
= (caddr_t
) unixRouteLookupFails
;
if (ot
= text2obj ("unixRouteWildcardUses"))
ot
-> ot_getfnx
= o_ip_routing_stats
,
ot
-> ot_info
= (caddr_t
) unixRouteWildcardUses
;
if (ot
= text2obj ("atIfIndex"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) atIfIndex
;
if (ot
= text2obj ("atPhysAddress"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) atPhysAddress
;
if (ot
= text2obj ("atNetAddress"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) atNetAddress
;
if (ot
= text2obj ("ipNetToMediaIfIndex"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) ipNetToMediaIfIndex
;
if (ot
= text2obj ("ipNetToMediaPhysAddress"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) ipNetToMediaPhysAddress
;
if (ot
= text2obj ("ipNetToMediaNetAddress"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) ipNetToMediaNetAddress
;
if (ot
= text2obj ("ipNetToMediaType"))
ot
-> ot_getfnx
= o_address
,
ot
-> ot_info
= (caddr_t
) ipNetToMediaType
;