ipaddress.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * ipaddress data access header
  3. *
  4. * $Id$
  5. */
  6. #ifndef NETSNMP_ACCESS_IPADDRESS_H
  7. #define NETSNMP_ACCESS_IPADDRESS_H
  8. # ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /**---------------------------------------------------------------------*/
  12. /*
  13. * structure definitions
  14. */
  15. #if defined( NETSNMP_ENABLE_IPV6 )
  16. # define NETSNMP_ACCESS_IPADDRESS_BUF_SIZE 16 /* xxx-rks: 20, for ip6z? */
  17. #else
  18. # define NETSNMP_ACCESS_IPADDRESS_BUF_SIZE 4
  19. #endif
  20. /*
  21. * netsnmp_ipaddress_entry
  22. * - primary ipaddress structure for both ipv4 & ipv6
  23. */
  24. typedef struct netsnmp_ipaddress_s {
  25. netsnmp_index oid_index; /* MUST BE FIRST!! for container use */
  26. oid ns_ia_index; /* arbitrary index */
  27. int flags; /* for net-snmp use */
  28. /*
  29. * mib related data (considered for
  30. * netsnmp_access_ipaddress_entry_update)
  31. */
  32. u_char ia_address[NETSNMP_ACCESS_IPADDRESS_BUF_SIZE];
  33. oid if_index;
  34. u_char ia_address_len;/* address len, 4 | 16 */
  35. u_char ia_prefix_len; /* 1-128 bits */
  36. u_char ia_type; /* 1-3 */
  37. u_char ia_status; /* IpAddressStatus (1-7) */
  38. u_char ia_origin; /* IpAddressOrigin (1-6) */
  39. u_char ia_storagetype; /* IpAddressStorageType (1-5) */
  40. u_char ia_onlink_flag; /* IpOnlinkFlag */
  41. u_char ia_autonomous_flag; /*IpAutonomousFlag */
  42. u_long ia_prefered_lifetime;/*IpPreferedLifeTime*/
  43. u_long ia_valid_lifetime;/*IpValidLifeTime*/
  44. netsnmp_data_list *arch_data; /* arch specific data */
  45. } netsnmp_ipaddress_entry;
  46. /**---------------------------------------------------------------------*/
  47. /*
  48. * ACCESS function prototypes
  49. */
  50. /*
  51. * ifcontainer init
  52. */
  53. netsnmp_container * netsnmp_access_ipaddress_container_init(u_int init_flags);
  54. #define NETSNMP_ACCESS_IPADDRESS_INIT_NOFLAGS 0x0000
  55. #define NETSNMP_ACCESS_IPADDRESS_INIT_ADDL_IDX_BY_ADDR 0x0001
  56. /*
  57. * ifcontainer load and free
  58. */
  59. netsnmp_container*
  60. netsnmp_access_ipaddress_container_load(netsnmp_container* container,
  61. u_int load_flags);
  62. #define NETSNMP_ACCESS_IPADDRESS_LOAD_NOFLAGS 0x0000
  63. #define NETSNMP_ACCESS_IPADDRESS_LOAD_IPV4_ONLY 0x0001
  64. #define NETSNMP_ACCESS_IPADDRESS_LOAD_IPV6_ONLY 0x0002
  65. #define NETSNMP_ACCESS_IPADDRESS_LOAD_ADDL_IDX_BY_ADDR 0x0004
  66. void netsnmp_access_ipaddress_container_free(netsnmp_container *container,
  67. u_int free_flags);
  68. #define NETSNMP_ACCESS_IPADDRESS_FREE_NOFLAGS 0x0000
  69. #define NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR 0x0001
  70. #define NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER 0x0002
  71. /*
  72. * create/free a ipaddress+entry
  73. */
  74. netsnmp_ipaddress_entry *
  75. netsnmp_access_ipaddress_entry_create(void);
  76. void netsnmp_access_ipaddress_entry_free(netsnmp_ipaddress_entry * entry);
  77. /*
  78. * copy
  79. */
  80. int
  81. netsnmp_access_ipaddress_entry_copy(netsnmp_ipaddress_entry *old,
  82. netsnmp_ipaddress_entry *new_val);
  83. /*
  84. * update/compare
  85. */
  86. int
  87. netsnmp_access_ipaddress_entry_update(netsnmp_ipaddress_entry *old,
  88. netsnmp_ipaddress_entry *new_val);
  89. /*
  90. * find entry in container
  91. */
  92. /** not yet */
  93. /*
  94. * create/change/delete
  95. */
  96. int
  97. netsnmp_access_ipaddress_entry_set(netsnmp_ipaddress_entry * entry);
  98. /*
  99. * ipaddress flags
  100. * upper bits for internal use
  101. * lower bits indicate changed fields. see FLAG_IPADDRESS* definitions in
  102. * ipAddressTable_constants.h
  103. */
  104. #define NETSNMP_ACCESS_IPADDRESS_CREATE 0x80000000
  105. #define NETSNMP_ACCESS_IPADDRESS_DELETE 0x40000000
  106. #define NETSNMP_ACCESS_IPADDRESS_CHANGE 0x20000000
  107. #define NETSNMP_ACCESS_IPADDRESS_ISALIAS 0x10000000
  108. /*
  109. * mask for change flag bits
  110. */
  111. #define NETSNMP_ACCESS_IPADDRESS_RESERVED_BITS 0x0000001f
  112. /*
  113. * utility routines
  114. */
  115. int netsnmp_ipaddress_prefix_copy(u_char *dst, u_char *src,
  116. int addr_len, int pfx_len);
  117. int netsnmp_ipaddress_ipv4_prefix_len(in_addr_t mask);
  118. in_addr_t netsnmp_ipaddress_ipv4_mask(int len);
  119. int netsnmp_ipaddress_ipv6_prefix_len(struct in6_addr mask);
  120. int netsnmp_ipaddress_flags_copy(u_long *ipAddressPrefixAdvPreferredLifetime,
  121. u_long *ipAddressPrefixAdvValidLifetime,
  122. u_long *ipAddressPrefixOnLinkFlag,
  123. u_long *ipAddressPrefixAutonomousFlag,
  124. u_long *ia_prefered_lifetime,
  125. u_long *ia_valid_lifetime,
  126. u_char *ia_onlink_flag,
  127. u_char *ia_autonomous_flag);
  128. int netsnmp_ipaddress_prefix_origin_copy(u_long *ipAddressPrefixOrigin,
  129. u_char ia_origin,
  130. int flags,
  131. u_long ipAddressAddrType);
  132. /**---------------------------------------------------------------------*/
  133. # ifdef __cplusplus
  134. }
  135. #endif
  136. #endif /* NETSNMP_ACCESS_IPADDRESS_H */