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