/* * ipaddress data access header * * $Id$ */ #ifndef NETSNMP_ACCESS_IPADDRESS_H #define NETSNMP_ACCESS_IPADDRESS_H # ifdef __cplusplus extern "C" { #endif /**---------------------------------------------------------------------*/ /* * structure definitions */ #if defined( NETSNMP_ENABLE_IPV6 ) # define NETSNMP_ACCESS_IPADDRESS_BUF_SIZE 16 /* xxx-rks: 20, for ip6z? */ #else # define NETSNMP_ACCESS_IPADDRESS_BUF_SIZE 4 #endif /* * netsnmp_ipaddress_entry * - primary ipaddress structure for both ipv4 & ipv6 */ typedef struct netsnmp_ipaddress_s { netsnmp_index oid_index; /* MUST BE FIRST!! for container use */ oid ns_ia_index; /* arbitrary index */ int flags; /* for net-snmp use */ /* * mib related data (considered for * netsnmp_access_ipaddress_entry_update) */ u_char ia_address[NETSNMP_ACCESS_IPADDRESS_BUF_SIZE]; oid if_index; u_char ia_address_len;/* address len, 4 | 16 */ u_char ia_prefix_len; /* 1-128 bits */ u_char ia_type; /* 1-3 */ u_char ia_status; /* IpAddressStatus (1-7) */ u_char ia_origin; /* IpAddressOrigin (1-6) */ u_char ia_storagetype; /* IpAddressStorageType (1-5) */ u_char ia_onlink_flag; /* IpOnlinkFlag */ u_char ia_autonomous_flag; /*IpAutonomousFlag */ u_long ia_prefered_lifetime;/*IpPreferedLifeTime*/ u_long ia_valid_lifetime;/*IpValidLifeTime*/ netsnmp_data_list *arch_data; /* arch specific data */ } netsnmp_ipaddress_entry; /**---------------------------------------------------------------------*/ /* * ACCESS function prototypes */ /* * ifcontainer init */ netsnmp_container * netsnmp_access_ipaddress_container_init(u_int init_flags); #define NETSNMP_ACCESS_IPADDRESS_INIT_NOFLAGS 0x0000 #define NETSNMP_ACCESS_IPADDRESS_INIT_ADDL_IDX_BY_ADDR 0x0001 /* * ifcontainer load and free */ netsnmp_container* netsnmp_access_ipaddress_container_load(netsnmp_container* container, u_int load_flags); #define NETSNMP_ACCESS_IPADDRESS_LOAD_NOFLAGS 0x0000 #define NETSNMP_ACCESS_IPADDRESS_LOAD_IPV4_ONLY 0x0001 #define NETSNMP_ACCESS_IPADDRESS_LOAD_IPV6_ONLY 0x0002 #define NETSNMP_ACCESS_IPADDRESS_LOAD_ADDL_IDX_BY_ADDR 0x0004 void netsnmp_access_ipaddress_container_free(netsnmp_container *container, u_int free_flags); #define NETSNMP_ACCESS_IPADDRESS_FREE_NOFLAGS 0x0000 #define NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR 0x0001 #define NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER 0x0002 /* * create/free a ipaddress+entry */ netsnmp_ipaddress_entry * netsnmp_access_ipaddress_entry_create(void); void netsnmp_access_ipaddress_entry_free(netsnmp_ipaddress_entry * entry); /* * copy */ int netsnmp_access_ipaddress_entry_copy(netsnmp_ipaddress_entry *old, netsnmp_ipaddress_entry *new_val); /* * update/compare */ int netsnmp_access_ipaddress_entry_update(netsnmp_ipaddress_entry *old, netsnmp_ipaddress_entry *new_val); /* * find entry in container */ /** not yet */ /* * create/change/delete */ int netsnmp_access_ipaddress_entry_set(netsnmp_ipaddress_entry * entry); /* * ipaddress flags * upper bits for internal use * lower bits indicate changed fields. see FLAG_IPADDRESS* definitions in * ipAddressTable_constants.h */ #define NETSNMP_ACCESS_IPADDRESS_CREATE 0x80000000 #define NETSNMP_ACCESS_IPADDRESS_DELETE 0x40000000 #define NETSNMP_ACCESS_IPADDRESS_CHANGE 0x20000000 #define NETSNMP_ACCESS_IPADDRESS_ISALIAS 0x10000000 /* * mask for change flag bits */ #define NETSNMP_ACCESS_IPADDRESS_RESERVED_BITS 0x0000001f /* * utility routines */ int netsnmp_ipaddress_prefix_copy(u_char *dst, u_char *src, int addr_len, int pfx_len); int netsnmp_ipaddress_ipv4_prefix_len(in_addr_t mask); in_addr_t netsnmp_ipaddress_ipv4_mask(int len); int netsnmp_ipaddress_ipv6_prefix_len(struct in6_addr mask); int netsnmp_ipaddress_flags_copy(u_long *ipAddressPrefixAdvPreferredLifetime, u_long *ipAddressPrefixAdvValidLifetime, u_long *ipAddressPrefixOnLinkFlag, u_long *ipAddressPrefixAutonomousFlag, u_long *ia_prefered_lifetime, u_long *ia_valid_lifetime, u_char *ia_onlink_flag, u_char *ia_autonomous_flag); int netsnmp_ipaddress_prefix_origin_copy(u_long *ipAddressPrefixOrigin, u_char ia_origin, int flags, u_long ipAddressAddrType); /**---------------------------------------------------------------------*/ # ifdef __cplusplus } #endif #endif /* NETSNMP_ACCESS_IPADDRESS_H */