summaryrefslogtreecommitdiff
path: root/include/net-snmp/data_access/route.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/data_access/route.h')
-rw-r--r--include/net-snmp/data_access/route.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/include/net-snmp/data_access/route.h b/include/net-snmp/data_access/route.h
new file mode 100644
index 0000000..d944d10
--- /dev/null
+++ b/include/net-snmp/data_access/route.h
@@ -0,0 +1,158 @@
+/*
+ * route data access header
+ *
+ * $Id$
+ */
+#ifndef NETSNMP_ACCESS_ROUTE_H
+#define NETSNMP_ACCESS_ROUTE_H
+
+# ifdef __cplusplus
+extern "C" {
+#endif
+
+/**---------------------------------------------------------------------*/
+/*
+ * structure definitions
+ */
+#if defined( NETSNMP_ENABLE_IPV6 )
+# define NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE 16
+#else
+# define NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE 4
+#endif
+
+
+/*
+ * netsnmp_route_entry
+ * - primary route structure for both ipv4 & ipv6
+ */
+typedef struct netsnmp_route_s {
+
+ netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
+ oid ns_rt_index; /* arbitrary index */
+
+ int flags; /* for net-snmp use */
+
+ oid if_index;
+
+ /*
+ * addresses, in network byte order
+ */
+ u_char rt_dest[NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE];
+ u_char rt_nexthop[NETSNMP_ACCESS_ROUTE_ADDR_BUF_SIZE];
+
+#ifdef USING_IP_FORWARD_MIB_INETCIDRROUTETABLE_INETCIDRROUTETABLE_MODULE
+ /*
+ * define the maximum oid length for a policy, for use by the
+ * inetCidrRouteTable. Must be at least 2, for default nullOid case.
+ */
+#define NETSNMP_POLICY_OID_MAX_LEN 3
+ oid *rt_policy; /* NULL should be interpreted as { 0, 0 } */
+ u_char rt_policy_len; /* 0-128 oids */
+#endif
+
+ u_char rt_dest_len; /* 4 | 16 since we only do ipv4|ipv6 */
+ u_char rt_dest_type; /* InetAddressType 0-16 */
+ u_char rt_nexthop_len; /* 4 | 16 since we only do ipv4|ipv6*/
+ u_char rt_nexthop_type;/* InetAddressType 0-16 */
+ u_char rt_pfx_len; /* 0-128 bits */
+ u_char rt_type; /* ip(1-4) != inet(1-5) */
+ u_char rt_proto; /* ip(enum 1-16) ?= inet(IANAipRouteProtocol 1-17) */
+
+#ifdef USING_IP_FORWARD_MIB_IPCIDRROUTETABLE_IPCIDRROUTETABLE_MODULE
+ /** rt_info != inet_policy, because that would have made sense */
+ uint8_t rt_info_len; /* 0-128 oids */
+ oid *rt_info; /* NULL should be interpreted as { 0, 0 } */
+
+ uint32_t rt_mask; /* ipv4 only */
+ uint32_t rt_tos; /* Integer32 (0..2147483647) */
+#endif
+
+ uint32_t rt_age; /* seconds (ip == inet) */
+ int32_t rt_nexthop_as; /* ip(int32) == inet(InetAutonomousSystemNumber) */
+
+ int32_t rt_metric1;
+ int32_t rt_metric2;
+ int32_t rt_metric3;
+ int32_t rt_metric4;
+ int32_t rt_metric5;
+
+} netsnmp_route_entry;
+
+
+
+/**---------------------------------------------------------------------*/
+/*
+ * ACCESS function prototypes
+ */
+/*
+ * ifcontainer init
+ */
+netsnmp_container * netsnmp_access_route_container_init(u_int init_flags);
+#define NETSNMP_ACCESS_ROUTE_INIT_NOFLAGS 0x0000
+#define NETSNMP_ACCESS_ROUTE_INIT_ADDL_IDX_BY_NAME 0x0001
+
+/*
+ * ifcontainer load and free
+ */
+netsnmp_container*
+netsnmp_access_route_container_load(netsnmp_container* container,
+ u_int load_flags);
+#define NETSNMP_ACCESS_ROUTE_LOAD_NOFLAGS 0x0000
+#define NETSNMP_ACCESS_ROUTE_LOAD_IPV4_ONLY 0x0001
+
+void netsnmp_access_route_container_free(netsnmp_container *container,
+ u_int free_flags);
+#define NETSNMP_ACCESS_ROUTE_FREE_NOFLAGS 0x0000
+#define NETSNMP_ACCESS_ROUTE_FREE_DONT_CLEAR 0x0001
+#define NETSNMP_ACCESS_ROUTE_FREE_KEEP_CONTAINER 0x0002
+
+
+/*
+ * create/copy/free a route entry
+ */
+netsnmp_route_entry *
+netsnmp_access_route_entry_create(void);
+
+void netsnmp_access_route_entry_free(netsnmp_route_entry * entry);
+
+int
+netsnmp_access_route_entry_copy(netsnmp_route_entry *lhs,
+ netsnmp_route_entry *rhs);
+
+/*
+ * find entry in container
+ */
+/** not yet */
+
+/*
+ * create/change/delete
+ */
+int
+netsnmp_access_route_entry_set(netsnmp_route_entry * entry);
+
+/*
+ * route flags
+ * upper bits for internal use
+ * lower bits indicate changed fields. see FLAG_INETCIDRROUTE* definitions in
+ * inetCidrRouteTable_constants.h
+ */
+#define NETSNMP_ACCESS_ROUTE_CREATE 0x80000000
+#define NETSNMP_ACCESS_ROUTE_DELETE 0x40000000
+#define NETSNMP_ACCESS_ROUTE_CHANGE 0x20000000
+#define NETSNMP_ACCESS_ROUTE_POLICY_STATIC 0x10000000
+#define NETSNMP_ACCESS_ROUTE_POLICY_DEEP_COPY 0x08000000
+
+/*
+ * mask for change flag bits
+ */
+#define NETSNMP_ACCESS_ROUTE_RESERVED_BITS 0x000001ff
+
+
+
+/**---------------------------------------------------------------------*/
+
+# ifdef __cplusplus
+}
+#endif
+
+#endif /* NETSNMP_ACCESS_ROUTE_H */