NetBSD/usr.sbin/mrouted/snmp.h
1995-10-09 03:51:32 +00:00

506 lines
17 KiB
C

/* $NetBSD: snmp.h,v 1.2 1995/10/09 03:52:00 thorpej Exp $ */
/*
* This file contains excepts from ISODE include files, and is
* subject to the following notice:
*
* The ISODE is not proprietary, but it is not in the public domain. This was
* necessary to include a "hold harmless" clause in the release. The upshot
* of all this is that anyone can get a copy of the release and do anything
* they want with it, but no one takes any responsibility whatsoever for any
* (mis)use.
*/
typedef u_char PElementClass;
typedef u_char PElementForm;
typedef u_short PElementID; /* 0..16383 are meaningful (14 bits) */
typedef int PElementLen;
typedef u_char *PElementData;
typedef int (*IFP) ();
#define INTDEF long
typedef INTDEF integer;
#undef IP
typedef int *IP;
#define NULLIP ((IP) 0)
#define NULLIFP ((IFP) 0)
#define NULLFD ((fd_set *) 0)
#define NULLCP ((char *) 0)
#define NULLVP ((char **) 0)
#ifndef SFD
#if !defined(SVR3) && !defined(SUNOS4) && !defined(BSD44) && !defined(ultrix)
#define SFD int
#define SFP IFP
#else
#define SFD void
#define SFP VFP
#endif
#endif
typedef struct {
int pe_type; /* Type of entry */
integer pe_ucode; /* index to user's code if any */
int pe_tag; /* Tag of this entry if any */
int pe_flags; /* Flags */
} tpe;
typedef struct {
int pe_type; /* Type of entry */
integer pe_ucode; /* index to user's code if any */
int pe_tag; /* Tag of this entry if any */
int pe_flags; /* Flags */
char **pe_typename; /* User defined name of variable */
} ptpe;
typedef struct {
char *md_name; /* Name of this module */
int md_nentries; /* Number of entries */
tpe **md_etab; /* Pointer to encoding tables */
tpe **md_dtab; /* Pointer to decoding tables */
ptpe **md_ptab; /* Pointer to printing tables */
int (*md_eucode)(); /* User code for encoding */
int (*md_ducode)(); /* User code for decoding */
int (*md_pucode)(); /* User code for printing */
caddr_t *md_ptrtab; /* pointer table */
} modtyp;
#define type_SNMP_ObjectSyntax PElement
typedef struct PElement {
int pe_errno; /* Error codes */
int pe_context; /* indirect reference */
PElementClass pe_class;
#define PE_CLASS_UNIV 0x0 /* Universal */
PElementForm pe_form;
#define PE_FORM_PRIM 0x0 /* PRIMitive */
PElementID pe_id; /* should be extensible, 14 bits for now */
#define PE_PRIM_NULL 0x005 /* Null */
PElementLen pe_len;
PElementLen pe_ilen;
union {
PElementData un_pe_prim; /* PRIMitive value */
struct PElement *un_pe_cons; /* CONStructor head */
} pe_un1;
union {
int un_pe_cardinal; /* cardinality of list */
int un_pe_nbits; /* number of bits in string */
} pe_un2;
int pe_inline; /* for "ultra-efficient" PElements */
char *pe_realbase; /* .. */
int pe_offset; /* offset of element in sequence */
struct PElement *pe_next;
int pe_refcnt; /* hack for ANYs in pepy */
} *PE;
#define NULLPE ((PE) 0)
typedef struct OIDentifier {
int oid_nelem; /* number of sub-identifiers */
unsigned int *oid_elements; /* the (ordered) list of sub-identifiers */
} OIDentifier, *OID;
#define NULLOID ((OID) 0)
#define type_SNMP_ObjectName OIDentifier
typedef struct object_syntax {
char *os_name; /* syntax name */
IFP os_encode; /* data -> PE */
IFP os_decode; /* PE -> data */
IFP os_free; /* free data */
IFP os_parse; /* str -> data */
IFP os_print; /* data -> tty */
char **os_data1; /* for moresyntax() in snmpi... */
int os_data2; /* .. */
} *OS;
typedef struct object_type {
char *ot_text; /* OBJECT DESCRIPTOR */
char *ot_id; /* OBJECT IDENTIFIER */
OID ot_name; /* .. */
OS ot_syntax; /* SYNTAX */
int ot_access; /* ACCESS */
u_long ot_views; /* for views */
int ot_status; /* STATUS */
caddr_t ot_info; /* object information */
IFP ot_getfnx; /* get/get-next method */
IFP ot_setfnx; /* set method */
caddr_t ot_save; /* for set method */
caddr_t ot_smux; /* for SMUX */
struct object_type *ot_chain; /* hash-bucket for text2obj */
struct object_type *ot_sibling; /* linked-list for name2obj */
struct object_type *ot_children; /* .. */
struct object_type *ot_next; /* linked-list for get-next */
} *OT;
#define NULLOT ((OT) 0)
typedef struct object_instance {
OID oi_name; /* instance OID */
OT oi_type; /* prototype */
} object_instance, *OI;
#define NULLOI ((OI) 0)
struct type_SNMP_VarBind {
struct type_SNMP_ObjectName *name;
struct type_SNMP_ObjectSyntax *value;
};
struct type_SNMP_VarBindList {
struct type_SNMP_VarBind *VarBind;
struct type_SNMP_VarBindList *next;
};
#define type_SNMP_GetRequest__PDU type_SNMP_PDU
#define type_SNMP_GetResponse__PDU type_SNMP_PDU
struct type_SNMP_PDU {
integer request__id;
integer error__status;
#define int_SNMP_error__status_noError 0
#define int_SNMP_error__status_noSuchName 2
#define int_SNMP_error__status_genErr 5
integer error__index;
struct type_SNMP_VarBindList *variable__bindings;
};
struct type_SNMP_PDUs {
int offset;
#define type_SNMP_PDUs_get__request 1
#define type_SNMP_PDUs_get__next__request 2
#define type_SNMP_PDUs_get__response 3
#define type_SNMP_PDUs_set__request 4
union {
struct type_SNMP_GetRequest__PDU *get__request;
struct type_SNMP_GetNextRequest__PDU *get__next__request;
struct type_SNMP_GetResponse__PDU *get__response;
struct type_SNMP_SetRequest__PDU *set__request;
struct type_SNMP_Trap__PDU *trap;
} un;
};
struct type_SNMP_Message {
integer version;
#define int_SNMP_version_version__1 0
struct qbuf *community;
struct type_SNMP_PDUs *data;
};
struct type_SNMP_SMUX__PDUs {
int offset;
#define type_SNMP_SMUX__PDUs_close 2
#define type_SNMP_SMUX__PDUs_registerResponse 4
#define type_SNMP_SMUX__PDUs_get__request 5
#define type_SNMP_SMUX__PDUs_get__next__request 6
#define type_SNMP_SMUX__PDUs_set__request 8
#define type_SNMP_SMUX__PDUs_commitOrRollback 10
union {
struct type_SNMP_SimpleOpen *simple;
struct type_SNMP_ClosePDU *close;
struct type_SNMP_RReqPDU *registerRequest;
struct type_SNMP_RRspPDU *registerResponse;
struct type_SNMP_GetRequest__PDU *get__request;
struct type_SNMP_GetNextRequest__PDU *get__next__request;
struct type_SNMP_GetResponse__PDU *get__response;
struct type_SNMP_SetRequest__PDU *set__request;
struct type_SNMP_Trap__PDU *trap;
struct type_SNMP_SOutPDU *commitOrRollback;
} un;
};
struct type_SNMP_RReqPDU {
struct type_SNMP_ObjectName *subtree;
integer priority;
integer operation;
#define int_SNMP_operation_readWrite 2
};
struct type_SNMP_ClosePDU {
integer parm;
#define int_SNMP_ClosePDU_goingDown 0
#define int_SNMP_ClosePDU_protocolError 3
};
struct type_SNMP_RRspPDU {
integer parm;
#define int_SNMP_RRspPDU_failure -1
};
struct type_SNMP_SOutPDU {
integer parm;
#define int_SNMP_SOutPDU_commit 0
};
struct type_SNMP_Trap__PDU {
OID enterprise;
struct type_SNMP_NetworkAddress *agent__addr;
integer generic__trap;
#define int_SNMP_generic__trap_coldStart 0
integer specific__trap;
struct type_SNMP_TimeTicks *time__stamp;
struct type_SNMP_VarBindList *variable__bindings;
};
struct smuxEntry {
char *se_name;
OIDentifier se_identity;
char *se_password;
int se_priority;
};
typedef struct {
int ps_errno; /* Error codes */
#define PS_ERR_NONE 0 /* No error */
#define PS_ERR_OVERID 1 /* Overflow in ID */
#define PS_ERR_OVERLEN 2 /* Overflow in length */
#define PS_ERR_NMEM 3 /* Out of memory */
#define PS_ERR_EOF 4 /* End of file */
#define PS_ERR_EOFID 5 /* End of file reading extended ID */
#define PS_ERR_EOFLEN 6 /* End of file reading extended length */
#define PS_ERR_LEN 7 /* Length mismatch */
#define PS_ERR_TRNC 8 /* Truncated */
#define PS_ERR_INDF 9 /* Indefinite length in primitive form */
#define PS_ERR_IO 10 /* I/O error */
#define PS_ERR_EXTRA 11 /* Extraneous octets */
#define PS_ERR_XXX 12 /* XXX */
union {
caddr_t un_ps_addr;
struct {
char *st_ps_base;
int st_ps_cnt;
char *st_ps_ptr;
int st_ps_bufsiz;
} un_ps_st;
struct {
struct udvec *uv_ps_head;
struct udvec *uv_ps_cur;
struct udvec *uv_ps_end;
int uv_ps_elems;
int uv_ps_slop;
int uv_ps_cc;
} un_ps_uv;
} ps_un;
#define ps_addr ps_un.un_ps_addr
#define ps_base ps_un.un_ps_st.st_ps_base
#define ps_cnt ps_un.un_ps_st.st_ps_cnt
#define ps_ptr ps_un.un_ps_st.st_ps_ptr
#define ps_bufsiz ps_un.un_ps_st.st_ps_bufsiz
#define ps_head ps_un.un_ps_uv.uv_ps_head
#define ps_cur ps_un.un_ps_uv.uv_ps_cur
#define ps_end ps_un.un_ps_uv.uv_ps_end
#define ps_elems ps_un.un_ps_uv.uv_ps_elems
#define ps_slop ps_un.un_ps_uv.uv_ps_slop
#define ps_cc ps_un.un_ps_uv.uv_ps_cc
caddr_t ps_extra; /* for George's recursive PStreams */
int ps_inline; /* for "ultra-efficient" PStreams */
int ps_scratch; /* XXX */
int ps_byteno; /* byte position */
IFP ps_primeP;
IFP ps_readP;
IFP ps_writeP;
IFP ps_flushP;
IFP ps_closeP;
} PStream, *PS;
#define NULLPS ((PS) 0)
struct NSAPaddr { /* this structure shouldn't have holes in it */
long na_stack; /* TS-stack */
#define NA_TCP 1 /* RFC1006/TCP */
long na_community; /* internal community # */
union {
struct na_nsap { /* real network service */
#define NASIZE 64 /* 20 ought to do it */
char na_nsap_address[NASIZE];
char na_nsap_addrlen;
} un_na_nsap;
struct na_tcp { /* emulation via RFC1006 */
#define NSAP_DOMAINLEN 63
char na_tcp_domain[NSAP_DOMAINLEN + 1];
u_short na_tcp_port; /* non-standard TCP port */
u_short na_tcp_tset; /* transport set */
#define NA_TSET_TCP 0x0001 /* .. TCP */
#define NA_TSET_UDP 0x0002 /* .. UDP */
} un_na_tcp;
struct na_x25 { /* X.25 (assume single subnet) */
#define NSAP_DTELEN 36
char na_x25_dte[NSAP_DTELEN + 1]; /* Numeric DTE + Link */
char na_x25_dtelen; /* number of digits used */
/* Conventionally, the PID sits at the first head bytes of user data and so
* should probably not be mentioned specially. A macro might do it, if
* necessary.
*/
#define NPSIZE 4
char na_x25_pid[NPSIZE]; /* X.25 protocol id */
char na_x25_pidlen; /* .. */
#define CUDFSIZE 16
char na_x25_cudf[CUDFSIZE];/* call user data field */
char na_x25_cudflen; /* .. */
/*
* X25 Facilities field.
*/
#define FACSIZE 6
char na_x25_fac[FACSIZE]; /* X.25 facilities */
char na_x25_faclen; /* .. */
} un_na_x25;
} na_un;
#define na_address na_un.un_na_nsap.na_nsap_address
#define na_addrlen na_un.un_na_nsap.na_nsap_addrlen
#define na_domain na_un.un_na_tcp.na_tcp_domain
#define na_port na_un.un_na_tcp.na_tcp_port
#define na_tset na_un.un_na_tcp.na_tcp_tset
#define na_dte na_un.un_na_x25.na_x25_dte
#define na_dtelen na_un.un_na_x25.na_x25_dtelen
#define na_pid na_un.un_na_x25.na_x25_pid
#define na_pidlen na_un.un_na_x25.na_x25_pidlen
#define na_cudf na_un.un_na_x25.na_x25_cudf
#define na_cudflen na_un.un_na_x25.na_x25_cudflen
#define na_fac na_un.un_na_x25.na_x25_fac
#define na_faclen na_un.un_na_x25.na_x25_faclen
/* for backwards compatibility... these two will be removed after ISODE 7.0 */
#define na_type na_stack
#define na_subnet na_community
};
struct TSAPaddr {
#define NTADDR 8 /* according to NIST OIW */
struct NSAPaddr ta_addrs[NTADDR]; /* choice of network addresses */
int ta_naddr;
#define TSSIZE 64
int ta_selectlen;
union un_ta_type { /* TSAP selector */
char ta_un_selector[TSSIZE];
u_short ta_un_port;
} un_ta;
#define ta_selector un_ta.ta_un_selector
#define ta_port un_ta.ta_un_port
};
struct qbuf {
struct qbuf *qb_forw; /* doubly-linked list */
struct qbuf *qb_back; /* .. */
int qb_len; /* length of data */
char *qb_data; /* current pointer into data */
char qb_base[1]; /* extensible... */
};
#define start_udp_client start_udp_server
#define read_udp_socket read_dgram_socket
#define write_udp_socket write_dgram_socket
#define close_udp_socket close_dgram_socket
#define check_udp_socket check_dgram_socket
#define free_SNMP_ObjectName oid_free
#define o_ipaddr(oi,v,value) o_specific ((oi), (v), (caddr_t) (value))
#define o_integer(oi,v,value) o_longword ((oi), (v), (integer) (value))
#define oid2ode(i) oid2ode_aux ((i), 1)
#define ps2pe(ps) ps2pe_aux ((ps), 1, 1)
#define pe2ps(ps, pe) pe2ps_aux ((ps), (pe), 1)
#define str2vec(s,v) str2vecX ((s), (v), 0, NULLIP, NULL, 1)
#define free_SNMP_Message(parm)\
(void) fre_obj((char *) parm, _ZSNMP_mod.md_dtab[_ZMessageSNMP], &_ZSNMP_mod, 1)
#define encode_SNMP_Message(pe, top, len, buffer, parm) \
enc_f(_ZMessageSNMP, &_ZSNMP_mod, pe, top, len, buffer, (char *) parm)
#define print_SNMP_Message(pe, top, len, buffer, parm) \
prnt_f(_ZMessageSNMP, &_ZSNMP_mod, pe, top, len, buffer)
#define decode_SNMP_Message(pe, top, len, buffer, parm) \
dec_f(_ZMessageSNMP, &_ZSNMP_mod, pe, top, len, buffer, (char **) parm)
#define inaddr_copy(hp,sin) \
bcopy ((hp) -> h_addr, (char *) &((sin) -> sin_addr), (hp) -> h_length)
#define join_udp_server(fd,sock) \
join_dgram_aux ((fd), (struct sockaddr *) (sock), 0)
#define MAXDGRAM 8192
#define NOTOK (-1)
#define OK 0
#define NVEC 100
#define invalidOperation (-1)
#define parameterMissing (-2)
#define systemError (-3)
#define youLoseBig (-4)
#define congestion (-5)
#define inProgress (-6)
#define protocolError int_SNMP_ClosePDU_protocolError
#define goingDown int_SNMP_ClosePDU_goingDown
#define readWrite int_SNMP_operation_readWrite
OID oid_extend(), text2oid (), oid_cpy ();
OT text2obj ();
OI name2inst (), next2inst (), text2inst ();
OS text2syn ();
PS ps_alloc ();
PE pe_alloc (), ps2pe_aux ();
struct smuxEntry *getsmuxEntrybyname ();
struct hostent *gethostbystring ();
char *getlocalhost (), *oid2ode_aux ();
struct TSAPaddr *str2taddr (); /* string encoding to TSAPaddr */
int dg_open (), read_dgram_socket (), write_dgram_socket ();
int check_dgram_socket (), pe2ps_aux ();
struct qbuf *str2qb ();
integer request__id;
extern char PY_pepy[];
extern int quantum;
extern int ts_comm_tcp_default, ps_len_strategy;
extern modtyp _ZSNMP_mod;
#define _ZMessageSNMP 0
#define PS_LEN_LONG 2
/* Scalars */
#define ipMRouteEnable 0
/* IP Multicast Route Table */
#define ipMRouteUpstreamNeighbor 0
#define ipMRouteInIfIndex 1
#define ipMRouteUpTime 2
#define ipMRouteExpiryTime 3
#define ipMRoutePkts 4
#define ipMRouteDifferentInIfIndexes 5
#define ipMRouteOctets 6
#define ipMRouteProtocol 7
/* IP Multicast Routing Next Hop Table */
#define ipMRouteNextHopState 0
#define ipMRouteNextHopUpTime 1
#define ipMRouteNextHopExpiryTime 2
#define ipMRouteNextHopClosestMemberHops 3
#define ipMRouteNextHopProtocol 4
/* Multicast Routing Interface Table */
#define ipMRouteInterfaceTtl 0
/* Scalars (cont.) */
#define dvmrpVersion 1
#define dvmrpGenerationId 2
/* DVMRP Virtual Interface Table */
#define dvmrpVInterfaceType 1
#define dvmrpVInterfaceState 2
#define dvmrpVInterfaceLocalAddress 3
#define dvmrpVInterfaceRemoteAddress 4
#define dvmrpVInterfaceRemoteSubnetMask 5
#define dvmrpVInterfaceMetric 6
#define dvmrpVInterfaceRateLimit 7
#define dvmrpVInterfaceInPkts 8
#define dvmrpVInterfaceOutPkts 9
#define dvmrpVInterfaceInOctets 10
#define dvmrpVInterfaceOutOctets 11
/* DVMRP Neighbor Table */
#define dvmrpNeighborUpTime 0
#define dvmrpNeighborExpiryTime 1
#define dvmrpNeighborVersion 2
#define dvmrpNeighborGenerationId 3
/* DVMRP Route Table */
#define dvmrpRouteUpstreamNeighbor 0
#define dvmrpRouteInVifIndex 1
#define dvmrpRouteMetric 2
#define dvmrpRouteExpiryTime 3
/* DVMRP Routing Next Hop Table */
#define dvmrpRouteNextHopType 0
/* Boundary Table */
#define dvmrpBoundaryVifIndex 0
#define SNMPD_RETRY_INTERVAL 300 /* periodic snmpd probe interval */
extern int smux_fd;
extern int rock_and_roll;
extern int dont_bother_anymore;