diff options
Diffstat (limited to 'include/net-snmp/data_access/interface.h')
-rw-r--r-- | include/net-snmp/data_access/interface.h | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/include/net-snmp/data_access/interface.h b/include/net-snmp/data_access/interface.h new file mode 100644 index 0000000..20013ed --- /dev/null +++ b/include/net-snmp/data_access/interface.h @@ -0,0 +1,306 @@ +/* + * interface data access header + * + * $Id$ + */ +#ifndef NETSNMP_ACCESS_INTERFACE_H +#define NETSNMP_ACCESS_INTERFACE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * define flags to indicate the availability of certain data + */ +#define NETSNMP_INTERFACE_FLAGS_ACTIVE 0x00000001 +#define NETSNMP_INTERFACE_FLAGS_HAS_BYTES 0x00000002 +#define NETSNMP_INTERFACE_FLAGS_HAS_DROPS 0x00000004 +#define NETSNMP_INTERFACE_FLAGS_HAS_MCAST_PKTS 0x00000008 +#define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_BYTES 0x00000010 +#define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_PACKETS 0x00000020 +#define NETSNMP_INTERFACE_FLAGS_HAS_HIGH_SPEED 0x00000040 +#define NETSNMP_INTERFACE_FLAGS_DYNAMIC_SPEED 0x00000080 +#define NETSNMP_INTERFACE_FLAGS_HAS_LASTCHANGE 0x00000100 +#define NETSNMP_INTERFACE_FLAGS_HAS_DISCONTINUITY 0x00000200 +#define NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS 0x00000400 +#define NETSNMP_INTERFACE_FLAGS_CAN_DOWN_PROTOCOL 0x00000800 +#define NETSNMP_INTERFACE_FLAGS_HAS_IPV4 0x00001000 +#define NETSNMP_INTERFACE_FLAGS_HAS_IPV6 0x00002000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V4_RETRANSMIT 0x00004000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V4_REASMMAX 0x00008000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V6_RETRANSMIT 0x00010000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V6_REASMMAX 0x00020000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V6_REACHABLE 0x00040000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V6_IFID 0x00080000 +#define NETSNMP_INTERFACE_FLAGS_HAS_V6_FORWARDING 0x00100000 +/* Some platforms, e.g.Linux, do not provide standalone counter + * for incoming unicast packets - they provide counter of all packets + * + separate counter for the multicast ones. + * That means the counter of all packets must watched and checked + * for overflows to reconstruct its 64-bit value (i.e. as usual + * for counter of unicast packets), and after its expansion to 64-bits, + * nr.of multicast packets must be substracted to get nr. of unicast + * packets. + * This flag marks stats of such platforms. Nr. of all incoming packets, + * provided by the platform, must be stored in + * netsnmp_interface_stats.iall and netsnmp_interface_stats.iucast will + * be automatically calculated later. + */ +#define NETSNMP_INTERFACE_FLAGS_CALCULATE_UCAST 0x00200000 + +/************************************************************* + * constants for enums for the MIB node + * ifAdminStatus (INTEGER / ASN_INTEGER) + * + * since a Textual Convention may be referenced more than once in a + * MIB, protect againt redifinitions of the enum values. + */ +#ifndef ifAdminStatus_ENUMS +#define ifAdminStatus_ENUMS + +#define IFADMINSTATUS_UP 1 +#define IFADMINSTATUS_DOWN 2 +#define IFADMINSTATUS_TESTING 3 + +#endif /* ifAdminStatus_ENUMS */ + +/************************************************************* + * constants for enums for the MIB node + * ifOperStatus (INTEGER / ASN_INTEGER) + * + * since a Textual Convention may be referenced more than once in a + * MIB, protect againt redifinitions of the enum values. + */ +#ifndef ifOperStatus_ENUMS +#define ifOperStatus_ENUMS + +#define IFOPERSTATUS_UP 1 +#define IFOPERSTATUS_DOWN 2 +#define IFOPERSTATUS_TESTING 3 +#define IFOPERSTATUS_UNKNOWN 4 +#define IFOPERSTATUS_DORMANT 5 +#define IFOPERSTATUS_NOTPRESENT 6 +#define IFOPERSTATUS_LOWERLAYERDOWN 7 + +#endif /* ifOperStatus_ENUMS */ + +/* nominal speed of network interface - used when the real speed is unknown */ +#define NOMINAL_LINK_SPEED 10000000 + +/**---------------------------------------------------------------------*/ +/* + * structure definitions + * + * NOTE: if you add fields, update code dealing with + * stats in interface_common.c, particularly + * netsnmp_access_interface_entry_update_stats() + * + */ +typedef struct netsnmp_interface_stats_s { + /* + * "Dynamic" fields + * Cached versions of byte/packet counters, etc + * (saved as a 'struct counter64' even if the + * high order half isn't actually used) + * + */ + /** input */ + struct counter64 ibytes; + /* + * nr. of all packets (to calculate iucast, when underlying platform does + * not provide it) + */ + struct counter64 iall; + struct counter64 iucast; + struct counter64 imcast; + struct counter64 ibcast; + unsigned int ierrors; + unsigned int idiscards; + unsigned int iunknown_protos; + unsigned int inucast; + /** output */ + struct counter64 obytes; + struct counter64 oucast; + struct counter64 omcast; + struct counter64 obcast; + unsigned int oerrors; + unsigned int odiscards; + unsigned int oqlen; + unsigned int collisions; + unsigned int onucast; +} netsnmp_interface_stats; + +/* + * + * NOTE: if you add fields, update code dealing with + * them in interface_common.c, particularly + * netsnmp_access_interface_entry_copy(). + */ +typedef struct netsnmp_interface_entry_s { + netsnmp_index oid_index; + + u_int ns_flags; /* net-snmp flags */ + oid index; + + /* + * "Static" information + * Typically constant for a given interface + */ + char *name; + char *descr; + int type; + u_int speed; + u_int speed_high; + char *paddr; + u_int paddr_len; + u_int mtu; + + u_int retransmit_v4; /* milliseconds */ + u_int retransmit_v6; /* milliseconds */ + + u_int reachable_time; /* ipv6 / milliseconds */ + + u_long lastchange; + time_t discontinuity; + + uint16_t reasm_max_v4; /* 0..65535 */ + uint16_t reasm_max_v6; /* 1500..65535 */ + char admin_status; + char oper_status; + + /** booleans (not TruthValues!) */ + char promiscuous; + char connector_present; + char forwarding_v6; + + char v6_if_id_len; + u_char v6_if_id[8]; + + /*----------------------------------------------- + * platform/arch/access specific data + */ + u_int os_flags; /* iff NETSNMP_INTERFACE_FLAGS_HAS_IF_FLAGS */ + + /* + * statistics + */ + netsnmp_interface_stats stats; + + /** old_stats is used in netsnmp_access_interface_entry_update_stats */ + netsnmp_interface_stats *old_stats; + +} netsnmp_interface_entry; + +/* + * conf file overrides + */ +typedef struct _conf_if_list { + const char *name; + int type; + uint64_t speed; + struct _conf_if_list *next; +} netsnmp_conf_if_list; + + typedef netsnmp_conf_if_list conf_if_list; /* backwards compat */ + +/**---------------------------------------------------------------------*/ +/* + * ACCESS function prototypes + */ +void init_interface(void); +void netsnmp_access_interface_init(void); + +/* + * ifcontainer init + */ +netsnmp_container * netsnmp_access_interface_container_init(u_int init_flags); +#define NETSNMP_ACCESS_INTERFACE_INIT_NOFLAGS 0x0000 +#define NETSNMP_ACCESS_INTERFACE_INIT_ADDL_IDX_BY_NAME 0x0001 + +/* + * ifcontainer load and free + */ +netsnmp_container* +netsnmp_access_interface_container_load(netsnmp_container* container, + u_int load_flags); +#define NETSNMP_ACCESS_INTERFACE_LOAD_NOFLAGS 0x0000 +#define NETSNMP_ACCESS_INTERFACE_LOAD_NO_STATS 0x0001 +#define NETSNMP_ACCESS_INTERFACE_LOAD_IP4_ONLY 0x0002 +#define NETSNMP_ACCESS_INTERFACE_LOAD_IP6_ONLY 0x0004 + +void netsnmp_access_interface_container_free(netsnmp_container *container, + u_int free_flags); +#define NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS 0x0000 +#define NETSNMP_ACCESS_INTERFACE_FREE_DONT_CLEAR 0x0001 + + +/* + * create/free an ifentry + */ +netsnmp_interface_entry * +netsnmp_access_interface_entry_create(const char *name, oid if_index); + +void netsnmp_access_interface_entry_free(netsnmp_interface_entry * entry); + +int +netsnmp_access_interface_entry_set_admin_status(netsnmp_interface_entry * entry, + int ifAdminStatus); + +/* + * find entry in container + */ +netsnmp_interface_entry * +netsnmp_access_interface_entry_get_by_name(netsnmp_container *container, + const char *name); +netsnmp_interface_entry * +netsnmp_access_interface_entry_get_by_index(netsnmp_container *container, + oid index); + +/* + * find ifIndex for given interface. 0 == not found. + */ +oid netsnmp_access_interface_index_find(const char *name); + +/* + * find name for given index + */ +const char *netsnmp_access_interface_name_find(oid index); + +/* + * copy interface entry data + */ +int netsnmp_access_interface_entry_copy(netsnmp_interface_entry * lhs, + netsnmp_interface_entry * rhs); + +/* + * utility routines + */ +void netsnmp_access_interface_entry_guess_speed(netsnmp_interface_entry *); +void netsnmp_access_interface_entry_overrides(netsnmp_interface_entry *); + + +netsnmp_conf_if_list * +netsnmp_access_interface_entry_overrides_get(const char * name); + +/**---------------------------------------------------------------------*/ + +#if defined( USING_IF_MIB_IFTABLE_IFTABLE_DATA_ACCESS_MODULE ) && \ + ! defined( NETSNMP_NO_BACKWARDS_COMPATABILITY ) +void +Interface_Scan_Init(void); +int +Interface_Scan_Next(short *index, char *name, netsnmp_interface_entry **entry, + void *dc); +int +Interface_Scan_NextInt(int *index, char *name, netsnmp_interface_entry **entry, + void *dc); +#endif + +/**---------------------------------------------------------------------*/ + +#ifdef __cplusplus +} +#endif + +#endif /* NETSNMP_ACCESS_INTERFACE_H */ |