summaryrefslogtreecommitdiff
path: root/include/net-snmp/data_access/interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/data_access/interface.h')
-rw-r--r--include/net-snmp/data_access/interface.h306
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 */