/* $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;