summaryrefslogtreecommitdiff
path: root/include/net-snmp/data_access/ipaddress.h
blob: b751b47d8385d4b3f4752e877a87a38f88e3f950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
 * ipaddress data access header
 *
 * $Id: ipaddress.h 15220 2006-09-15 00:48:50Z tanders $
 */
#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) */

   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);



/**---------------------------------------------------------------------*/

# ifdef __cplusplus
}
#endif

#endif /* NETSNMP_ACCESS_IPADDRESS_H */