Commits
Vincent Bernat authored 0f0ab518087
37 37 | |
38 38 | |
39 39 | |
40 40 | |
41 41 | |
42 42 | |
43 43 | |
44 44 | |
45 45 | |
46 46 | /* OSPFv3-MIB */ |
47 - | |
47 + | |
48 48 | |
49 49 | /* OSPFv3 MIB General Group values. */ |
50 50 | |
51 51 | |
52 52 | |
53 53 | |
54 54 | |
55 55 | |
56 56 | |
57 57 | |
58 58 | |
59 59 | |
60 60 | |
61 - | |
62 - | |
63 - | |
64 - | |
65 - | |
66 - | |
67 - | |
68 - | |
69 - | |
70 - | |
71 - | |
72 - | /* OSPFv3 MIB Area Table values. */ |
73 - | |
61 + | |
62 + | |
63 + | |
64 + | |
65 + | |
66 + | |
67 + | |
68 + | |
69 + | |
70 + | |
71 + | |
72 + | |
73 + | |
74 + | |
75 + | |
76 + | /* OSPFv3 MIB Area Table values: ospfv3AreaTable */ |
74 77 | |
75 78 | |
76 79 | |
77 80 | |
78 81 | |
79 82 | |
80 83 | |
81 - | |
82 - | |
84 + | |
85 + | |
83 86 | |
84 87 | |
85 - | |
88 + | |
86 89 | |
87 90 | |
91 + | |
88 92 | |
89 - | /* OSPFv3 MIB Area Lsdb Table values. */ |
90 - | |
91 - | |
92 - | |
93 - | |
93 + | /* OSPFv3 MIB AS Lsdb Table values: ospfv3AsLsdbTable */ |
94 + | |
95 + | |
96 + | |
97 + | |
98 + | |
99 + | |
100 + | /* OSPFv3 MIB Area Lsdb Table values: ospfv3AreaLsdbTable */ |
94 101 | |
95 102 | |
96 103 | |
97 104 | |
98 105 | |
99 106 | |
107 + | /* OSPFv3 MIB Link Lsdb Table values: ospfv3LinkLsdbTable */ |
108 + | |
109 + | |
110 + | |
111 + | |
112 + | |
113 + | |
114 + | /* OSPFv3 MIB Host Table values: ospfv3HostTable */ |
115 + | |
116 + | |
117 + | |
118 + | |
119 + | /* OSPFv3 MIB Interface Table values: ospfv3IfTable */ |
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 + | /* OSPFv3 MIB Virtual Interface Table values: ospfv3VirtIfTable */ |
145 + | |
146 + | |
147 + | |
148 + | |
149 + | |
150 + | |
151 + | |
152 + | |
153 + | |
154 + | |
155 + | |
156 + | |
157 + | /* OSPFv3 MIB Neighbors Table values: ospfv3NbrTable */ |
158 + | |
159 + | |
160 + | |
161 + | |
162 + | |
163 + | |
164 + | |
165 + | |
166 + | |
167 + | |
168 + | |
169 + | |
170 + | |
171 + | /* OSPFv3 MIB Configured Neighbors Table values: ospfv3CfgNbrTable */ |
172 + | |
173 + | |
174 + | |
175 + | /* OSPFv3 MIB Virtual Neighbors Table values: ospfv3VirtNbrTable */ |
176 + | |
177 + | |
178 + | |
179 + | |
180 + | |
181 + | |
182 + | |
183 + | |
184 + | |
185 + | |
186 + | |
187 + | |
188 + | |
189 + | |
190 + | /* OSPFv3 MIB Area Aggregate Table values: ospfv3AreaAggregateTable */ |
191 + | |
192 + | |
193 + | |
194 + | |
195 + | /* OSPFv3 MIB Virtual Link Lsdb Table values: ospfv3VirtLinkLsdbTable */ |
196 + | |
197 + | |
198 + | |
199 + | |
200 + | |
201 + | |
100 202 | /* SYNTAX Status from OSPF-MIB. */ |
101 203 | |
102 204 | |
103 205 | |
104 206 | /* SNMP value hack. */ |
105 207 | |
106 208 | |
107 209 | |
210 + | |
108 211 | |
109 212 | |
110 213 | |
111 214 | |
112 215 | /* For return values e.g. SNMP_INTEGER macro */ |
113 216 | SNMP_LOCAL_VARIABLES |
114 217 | |
115 - | static struct in_addr tmp; |
116 - | |
117 - | |
118 - | |
119 218 | /* OSPFv3-MIB instances. */ |
120 219 | oid ospfv3_oid [] = { OSPFv3MIB }; |
121 220 | |
122 - | /* empty ID 0.0.0.0 e.g. empty router-id */ |
123 - | static struct in_addr ospf6_empty_id = {0}; |
124 - | |
125 221 | /* Hook functions. */ |
126 222 | static u_char *ospfv3GeneralGroup (struct variable *, oid *, size_t *, |
127 223 | int, size_t *, WriteMethod **); |
128 224 | static u_char *ospfv3AreaEntry (struct variable *, oid *, size_t *, |
129 225 | int, size_t *, WriteMethod **); |
130 226 | static u_char *ospfv3AreaLsdbEntry (struct variable *, oid *, size_t *, |
131 227 | int, size_t *, WriteMethod **); |
132 228 | |
133 229 | struct variable ospfv3_variables[] = |
134 230 | { |
135 231 | /* OSPF general variables */ |
136 - | {OSPFv3ROUTERID, IPADDRESS, RWRITE, ospfv3GeneralGroup, |
232 + | {OSPFv3ROUTERID, UNSIGNED, RWRITE, ospfv3GeneralGroup, |
137 233 | 3, {1, 1, 1}}, |
138 234 | {OSPFv3ADMINSTAT, INTEGER, RWRITE, ospfv3GeneralGroup, |
139 235 | 3, {1, 1, 2}}, |
140 236 | {OSPFv3VERSIONNUMBER, INTEGER, RONLY, ospfv3GeneralGroup, |
141 237 | 3, {1, 1, 3}}, |
142 238 | {OSPFv3AREABDRRTRSTATUS, INTEGER, RONLY, ospfv3GeneralGroup, |
143 239 | 3, {1, 1, 4}}, |
144 240 | {OSPFv3ASBDRRTRSTATUS, INTEGER, RWRITE, ospfv3GeneralGroup, |
145 241 | 3, {1, 1, 5}}, |
146 242 | {OSPFv3ASSCOPELSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup, |
147 243 | 3, {1, 1, 6}}, |
148 - | {OSPFv3ASSCOPELSACHECKSUMSUM, INTEGER, RONLY, ospfv3GeneralGroup, |
244 + | {OSPFv3ASSCOPELSACHECKSUMSUM,UNSIGNED, RONLY, ospfv3GeneralGroup, |
149 245 | 3, {1, 1, 7}}, |
150 246 | {OSPFv3ORIGINATENEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup, |
151 247 | 3, {1, 1, 8}}, |
152 248 | {OSPFv3RXNEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup, |
153 249 | 3, {1, 1, 9}}, |
154 250 | {OSPFv3EXTLSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup, |
155 251 | 3, {1, 1, 10}}, |
156 252 | {OSPFv3EXTAREALSDBLIMIT, INTEGER, RWRITE, ospfv3GeneralGroup, |
157 253 | 3, {1, 1, 11}}, |
158 - | {OSPFv3MULTICASTEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup, |
254 + | {OSPFv3EXITOVERFLOWINTERVAL, UNSIGNED, RWRITE, ospfv3GeneralGroup, |
159 255 | 3, {1, 1, 12}}, |
160 - | {OSPFv3EXITOVERFLOWINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup, |
161 - | 3, {1, 1, 13}}, |
162 256 | {OSPFv3DEMANDEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup, |
257 + | 3, {1, 1, 13}}, |
258 + | {OSPFv3REFERENCEBANDWIDTH, UNSIGNED, RWRITE, ospfv3GeneralGroup, |
163 259 | 3, {1, 1, 14}}, |
164 - | {OSPFv3TRAFFICENGINEERINGSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup, |
260 + | {OSPFv3RESTARTSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup, |
165 261 | 3, {1, 1, 15}}, |
166 - | {OSPFv3REFERENCEBANDWIDTH, INTEGER, RWRITE, ospfv3GeneralGroup, |
262 + | {OSPFv3RESTARTINTERVAL, UNSIGNED, RWRITE, ospfv3GeneralGroup, |
167 263 | 3, {1, 1, 16}}, |
168 - | {OSPFv3RESTARTSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup, |
264 + | {OSPFv3RESTARTSTRICTLSACHECKING, INTEGER, RWRITE, ospfv3GeneralGroup, |
169 265 | 3, {1, 1, 17}}, |
170 - | {OSPFv3RESTARTINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup, |
171 - | 3, {1, 1, 18}}, |
172 266 | {OSPFv3RESTARTSTATUS, INTEGER, RONLY, ospfv3GeneralGroup, |
267 + | 3, {1, 1, 18}}, |
268 + | {OSPFv3RESTARTAGE, UNSIGNED, RONLY, ospfv3GeneralGroup, |
173 269 | 3, {1, 1, 19}}, |
174 - | {OSPFv3RESTARTAGE, INTEGER, RONLY, ospfv3GeneralGroup, |
175 - | 3, {1, 1, 20}}, |
176 270 | {OSPFv3RESTARTEXITREASON, INTEGER, RONLY, ospfv3GeneralGroup, |
271 + | 3, {1, 1, 20}}, |
272 + | {OSPFv3NOTIFICATIONENABLE, INTEGER, RWRITE, ospfv3GeneralGroup, |
177 273 | 3, {1, 1, 21}}, |
274 + | {OSPFv3STUBROUTERSUPPORT, INTEGER, RONLY, ospfv3GeneralGroup, |
275 + | 3, {1, 1, 22}}, |
276 + | {OSPFv3STUBROUTERADVERTISEMENT, INTEGER, RWRITE, ospfv3GeneralGroup, |
277 + | 3, {1, 1, 23}}, |
278 + | {OSPFv3DISCONTINUITYTIME, TIMETICKS, RONLY, ospfv3GeneralGroup, |
279 + | 3, {1, 1, 24}}, |
280 + | {OSPFv3RESTARTTIME, TIMETICKS, RONLY, ospfv3GeneralGroup, |
281 + | 3, {1, 1, 25}}, |
178 282 | |
179 283 | /* OSPFv3 Area Data Structure */ |
180 - | {OSPFv3AREAID, IPADDRESS, RONLY, ospfv3AreaEntry, |
181 - | 4, {1, 2, 1, 1}}, |
182 284 | {OSPFv3IMPORTASEXTERN, INTEGER, RWRITE, ospfv3AreaEntry, |
183 285 | 4, {1, 2, 1, 2}}, |
184 286 | {OSPFv3AREASPFRUNS, COUNTER, RONLY, ospfv3AreaEntry, |
185 287 | 4, {1, 2, 1, 3}}, |
186 288 | {OSPFv3AREABDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry, |
187 289 | 4, {1, 2, 1, 4}}, |
188 290 | {OSPFv3AREAASBDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry, |
189 291 | 4, {1, 2, 1, 5}}, |
190 292 | {OSPFv3AREASCOPELSACOUNT, GAUGE, RONLY, ospfv3AreaEntry, |
191 293 | 4, {1, 2, 1, 6}}, |
192 - | {OSPFv3AREASCOPELSACKSUMSUM, INTEGER, RONLY, ospfv3AreaEntry, |
294 + | {OSPFv3AREASCOPELSACKSUMSUM, UNSIGNED, RONLY, ospfv3AreaEntry, |
193 295 | 4, {1, 2, 1, 7}}, |
194 296 | {OSPFv3AREASUMMARY, INTEGER, RWRITE, ospfv3AreaEntry, |
195 297 | 4, {1, 2, 1, 8}}, |
196 - | {OSPFv3AREASTATUS, INTEGER, RWRITE, ospfv3AreaEntry, |
298 + | {OSPFv3AREAROWSTATUS, INTEGER, RWRITE, ospfv3AreaEntry, |
197 299 | 4, {1, 2, 1, 9}}, |
198 - | {OSPFv3STUBMETRIC, INTEGER, RWRITE, ospfv3AreaEntry, |
300 + | {OSPFv3AREASTUBMETRIC, INTEGER, RWRITE, ospfv3AreaEntry, |
199 301 | 4, {1, 2, 1, 10}}, |
200 302 | {OSPFv3AREANSSATRANSLATORROLE, INTEGER, RWRITE, ospfv3AreaEntry, |
201 303 | 4, {1, 2, 1, 11}}, |
202 304 | {OSPFv3AREANSSATRANSLATORSTATE, INTEGER, RONLY, ospfv3AreaEntry, |
203 305 | 4, {1, 2, 1, 12}}, |
204 - | {OSPFv3AREANSSATRANSLATORSTABILITYINTERVAL, INTEGER, RWRITE, ospfv3AreaEntry, |
306 + | {OSPFv3AREANSSATRANSLATORSTABINTERVAL, UNSIGNED, RWRITE, ospfv3AreaEntry, |
205 307 | 4, {1, 2, 1, 13}}, |
206 308 | {OSPFv3AREANSSATRANSLATOREVENTS, COUNTER, RONLY, ospfv3AreaEntry, |
207 309 | 4, {1, 2, 1, 14}}, |
208 310 | {OSPFv3AREASTUBMETRICTYPE, INTEGER, RWRITE, ospfv3AreaEntry, |
209 311 | 4, {1, 2, 1, 15}}, |
312 + | {OSPFv3AREATEENABLED, INTEGER, RWRITE, ospfv3AreaEntry, |
313 + | 4, {1, 2, 1, 16}}, |
210 314 | |
211 - | {OSPFv3AREALSDBAREAID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry, |
212 - | 4, {1, 4, 1, 1}}, |
213 - | {OSPFv3AREALSDBTYPE, GAUGE, RONLY, ospfv3AreaLsdbEntry, |
214 - | 4, {1, 4, 1, 2}}, |
215 - | {OSPFv3AREALSDBROUTERID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry, |
216 - | 4, {1, 4, 1, 3}}, |
217 - | {OSPFv3AREALSDBLSID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry, |
218 - | 4, {1, 4, 1, 4}}, |
315 + | /* OSPFv3 Area LSDB */ |
219 316 | {OSPFv3AREALSDBSEQUENCE, INTEGER, RONLY, ospfv3AreaLsdbEntry, |
220 317 | 4, {1, 4, 1, 5}}, |
221 - | {OSPFv3AREALSDBAGE, INTEGER, RONLY, ospfv3AreaLsdbEntry, |
318 + | {OSPFv3AREALSDBAGE, UNSIGNED, RONLY, ospfv3AreaLsdbEntry, |
222 319 | 4, {1, 4, 1, 6}}, |
223 320 | {OSPFv3AREALSDBCHECKSUM, INTEGER, RONLY, ospfv3AreaLsdbEntry, |
224 321 | 4, {1, 4, 1, 7}}, |
225 322 | {OSPFv3AREALSDBADVERTISEMENT, STRING, RONLY, ospfv3AreaLsdbEntry, |
226 323 | 4, {1, 4, 1, 8}}, |
227 324 | {OSPFv3AREALSDBTYPEKNOWN, INTEGER, RONLY, ospfv3AreaLsdbEntry, |
228 325 | 4, {1, 4, 1, 9}}, |
229 326 | |
230 327 | }; |
231 328 | |
234 331 | int exact, size_t *var_len, WriteMethod **write_method) |
235 332 | { |
236 333 | /* Check whether the instance identifier is valid */ |
237 334 | if (smux_header_generic (v, name, length, exact, var_len, write_method) |
238 335 | == MATCH_FAILED) |
239 336 | return NULL; |
240 337 | |
241 338 | /* Return the current value of the variable */ |
242 339 | switch (v->magic) |
243 340 | { |
244 - | case OSPFv3ROUTERID: /* 1*/ |
341 + | case OSPFv3ROUTERID: |
245 342 | /* Router-ID of this OSPF instance. */ |
246 343 | if (ospf6) |
247 - | return SNMP_IPADDRESS (INT32_INADDR (ospf6->router_id)); |
248 - | else |
249 - | return SNMP_IPADDRESS (ospf6_empty_id); |
250 - | break; |
251 - | case OSPFv3ADMINSTAT: /* 2*/ |
252 - | break; |
253 - | case OSPFv3VERSIONNUMBER: /* 3*/ |
254 - | break; |
255 - | case OSPFv3AREABDRRTRSTATUS: /* 4*/ |
256 - | break; |
257 - | case OSPFv3ASBDRRTRSTATUS: /* 5*/ |
258 - | break; |
259 - | case OSPFv3ASSCOPELSACOUNT: /* 6*/ |
260 - | break; |
261 - | case OSPFv3ASSCOPELSACHECKSUMSUM: /* 7*/ |
262 - | break; |
263 - | case OSPFv3ORIGINATENEWLSAS: /* 8*/ |
264 - | break; |
265 - | case OSPFv3RXNEWLSAS: /* 9*/ |
266 - | break; |
267 - | case OSPFv3EXTLSACOUNT: /*10*/ |
268 - | break; |
269 - | case OSPFv3EXTAREALSDBLIMIT: /*11*/ |
270 - | break; |
271 - | case OSPFv3MULTICASTEXTENSIONS: /*12*/ |
272 - | break; |
273 - | case OSPFv3EXITOVERFLOWINTERVAL: /*13*/ |
274 - | break; |
275 - | case OSPFv3DEMANDEXTENSIONS: /*14*/ |
276 - | break; |
277 - | case OSPFv3TRAFFICENGINEERINGSUPPORT: /*15*/ |
278 - | break; |
279 - | case OSPFv3REFERENCEBANDWIDTH: /*16*/ |
280 - | break; |
281 - | case OSPFv3RESTARTSUPPORT: /*17*/ |
282 - | break; |
283 - | case OSPFv3RESTARTINTERVAL: /*18*/ |
284 - | break; |
285 - | case OSPFv3RESTARTSTATUS: /*19*/ |
286 - | break; |
287 - | case OSPFv3RESTARTAGE: /*20*/ |
288 - | break; |
289 - | case OSPFv3RESTARTEXITREASON: /*21*/ |
290 - | break; |
291 - | default: |
344 + | return SNMP_INTEGER (ntohl (ospf6->router_id)); |
345 + | return SNMP_INTEGER (0); |
346 + | case OSPFv3ADMINSTAT: |
347 + | case OSPFv3VERSIONNUMBER: |
348 + | case OSPFv3AREABDRRTRSTATUS: |
349 + | case OSPFv3ASBDRRTRSTATUS: |
350 + | case OSPFv3ASSCOPELSACOUNT: |
351 + | case OSPFv3ASSCOPELSACHECKSUMSUM: |
352 + | case OSPFv3ORIGINATENEWLSAS: |
353 + | case OSPFv3RXNEWLSAS: |
354 + | case OSPFv3EXTLSACOUNT: |
355 + | case OSPFv3EXTAREALSDBLIMIT: |
356 + | case OSPFv3EXITOVERFLOWINTERVAL: |
357 + | case OSPFv3DEMANDEXTENSIONS: |
358 + | case OSPFv3REFERENCEBANDWIDTH: |
359 + | case OSPFv3RESTARTSUPPORT: |
360 + | case OSPFv3RESTARTINTERVAL: |
361 + | case OSPFv3RESTARTSTRICTLSACHECKING: |
362 + | case OSPFv3RESTARTSTATUS: |
363 + | case OSPFv3RESTARTAGE: |
364 + | case OSPFv3RESTARTEXITREASON: |
365 + | case OSPFv3NOTIFICATIONENABLE: |
366 + | case OSPFv3STUBROUTERSUPPORT: |
367 + | case OSPFv3STUBROUTERADVERTISEMENT: |
368 + | case OSPFv3DISCONTINUITYTIME: |
369 + | case OSPFv3RESTARTTIME: |
370 + | /* TODO: Not implemented */ |
292 371 | return NULL; |
293 372 | } |
294 373 | return NULL; |
295 374 | } |
296 375 | |
297 376 | static u_char * |
298 377 | ospfv3AreaEntry (struct variable *v, oid *name, size_t *length, |
299 378 | int exact, size_t *var_len, WriteMethod **write_method) |
300 379 | { |
301 380 | struct ospf6_area *oa, *area = NULL; |
302 381 | u_int32_t area_id = 0; |
303 382 | struct listnode *node; |
304 383 | unsigned int len; |
384 + | char a[16]; |
305 385 | |
306 386 | if (ospf6 == NULL) |
307 387 | return NULL; |
308 388 | |
309 389 | if (smux_header_table(v, name, length, exact, var_len, write_method) |
310 390 | == MATCH_FAILED) |
311 391 | return NULL; |
312 392 | |
313 393 | len = *length - v->namelen; |
314 - | len = (len >= sizeof (u_int32_t) ? sizeof (u_int32_t) : 0); |
315 - | if (exact && len != sizeof (u_int32_t)) |
394 + | len = (len >= 1 ? sizeof 1 : 0); |
395 + | if (exact && len != 1) |
316 396 | return NULL; |
317 397 | if (len) |
318 - | oid2in_addr (name + v->namelen, len, (struct in_addr *) &area_id); |
398 + | area_id = htonl (name[v->namelen]); |
319 399 | |
400 + | inet_ntop (AF_INET, &area_id, a, sizeof (a)); |
320 401 | zlog_debug ("SNMP access by area: %s, exact=%d len=%d length=%lu", |
321 - | inet_ntoa (* (struct in_addr *) &area_id), |
322 - | exact, len, (u_long)*length); |
402 + | a, exact, len, (u_long)*length); |
323 403 | |
324 404 | for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) |
325 405 | { |
326 406 | if (area == NULL) |
327 407 | { |
328 408 | if (len == 0) /* return first area entry */ |
329 409 | area = oa; |
330 410 | else if (exact && ntohl (oa->area_id) == ntohl (area_id)) |
331 411 | area = oa; |
332 412 | else if (ntohl (oa->area_id) > ntohl (area_id)) |
333 413 | area = oa; |
334 414 | } |
335 415 | } |
336 416 | |
337 417 | if (area == NULL) |
338 418 | return NULL; |
339 419 | |
340 - | *length = v->namelen + sizeof (u_int32_t); |
341 - | oid_copy_addr (name + v->namelen, (struct in_addr *) &area->area_id, |
342 - | sizeof (u_int32_t)); |
420 + | *length = v->namelen + 1; |
421 + | name[v->namelen] = ntohl (area->area_id); |
343 422 | |
423 + | inet_ntop (AF_INET, &area->area_id, a, sizeof (a)); |
344 424 | zlog_debug ("SNMP found area: %s, exact=%d len=%d length=%lu", |
345 - | inet_ntoa (* (struct in_addr *) &area->area_id), |
346 - | exact, len, (u_long)*length); |
425 + | a, exact, len, (u_long)*length); |
347 426 | |
348 427 | switch (v->magic) |
349 428 | { |
350 - | case OSPFv3AREAID: /* 1*/ |
351 - | return SNMP_IPADDRESS (INT32_INADDR (area->area_id)); |
352 - | break; |
353 - | case OSPFv3IMPORTASEXTERN: /* 2*/ |
429 + | case OSPFv3IMPORTASEXTERN: |
354 430 | return SNMP_INTEGER (ospf6->external_table->count); |
355 431 | break; |
356 - | default: |
432 + | case OSPFv3AREASPFRUNS: |
433 + | case OSPFv3AREABDRRTRCOUNT: |
434 + | case OSPFv3AREAASBDRRTRCOUNT: |
435 + | case OSPFv3AREASCOPELSACOUNT: |
436 + | case OSPFv3AREASCOPELSACKSUMSUM: |
437 + | case OSPFv3AREASUMMARY: |
438 + | case OSPFv3AREAROWSTATUS: |
439 + | case OSPFv3AREASTUBMETRIC: |
440 + | case OSPFv3AREANSSATRANSLATORROLE: |
441 + | case OSPFv3AREANSSATRANSLATORSTATE: |
442 + | case OSPFv3AREANSSATRANSLATORSTABINTERVAL: |
443 + | case OSPFv3AREANSSATRANSLATOREVENTS: |
444 + | case OSPFv3AREASTUBMETRICTYPE: |
445 + | case OSPFv3AREATEENABLED: |
446 + | /* Not implemented. */ |
357 447 | return NULL; |
358 - | break; |
359 448 | } |
360 449 | return NULL; |
361 450 | } |
362 451 | |
363 452 | static u_char * |
364 453 | ospfv3AreaLsdbEntry (struct variable *v, oid *name, size_t *length, |
365 454 | int exact, size_t *var_len, WriteMethod **write_method) |
366 455 | { |
367 456 | struct ospf6_lsa *lsa = NULL; |
368 - | struct in_addr area_id; |
457 + | u_int32_t area_id, id, adv_router; |
369 458 | u_int16_t type; |
370 - | struct in_addr id; |
371 - | struct in_addr adv_router; |
372 459 | int len; |
373 460 | oid *offset; |
374 461 | int offsetlen; |
375 462 | char a[16], b[16], c[16]; |
376 463 | struct ospf6_area *oa; |
377 464 | struct listnode *node; |
378 465 | |
379 466 | if (smux_header_table(v, name, length, exact, var_len, write_method) |
380 467 | == MATCH_FAILED) |
381 468 | return NULL; |
382 469 | |
383 - | memset (&area_id, 0, sizeof (struct in_addr)); |
384 - | type = 0; |
385 - | memset (&id, 0, sizeof (struct in_addr)); |
386 - | memset (&adv_router, 0, sizeof (struct in_addr)); |
470 + | area_id = type = id = adv_router = 0; |
387 471 | |
388 472 | /* Check OSPFv3 instance. */ |
389 473 | if (ospf6 == NULL) |
390 474 | return NULL; |
391 475 | |
392 476 | /* Get variable length. */ |
393 477 | offset = name + v->namelen; |
394 478 | offsetlen = *length - v->namelen; |
395 479 | |
396 - | |
397 - | |
480 + | |
398 481 | |
399 482 | if (exact && offsetlen != OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET) |
400 483 | return NULL; |
401 484 | |
402 485 | /* Parse area-id */ |
403 - | len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE); |
486 + | len = (offsetlen < 1 ? 0 : 1); |
404 487 | if (len) |
405 - | oid2in_addr (offset, len, &area_id); |
488 + | area_id = htonl (*offset); |
406 489 | offset += len; |
407 490 | offsetlen -= len; |
408 491 | |
409 492 | /* Parse type */ |
410 - | len = (offsetlen < 1 ? offsetlen : 1); |
493 + | len = (offsetlen < 1 ? 0 : 1); |
411 494 | if (len) |
412 495 | type = htons (*offset); |
413 496 | offset += len; |
414 497 | offsetlen -= len; |
415 498 | |
416 499 | /* Parse Router-ID */ |
417 - | len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE); |
500 + | len = (offsetlen < 1 ? 0 : 1); |
418 501 | if (len) |
419 - | oid2in_addr (offset, len, &adv_router); |
502 + | adv_router = htonl (*offset); |
420 503 | offset += len; |
421 504 | offsetlen -= len; |
422 505 | |
423 506 | /* Parse LS-ID */ |
424 - | len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE); |
507 + | len = (offsetlen < 1 ? 0 : 1); |
425 508 | if (len) |
426 - | oid2in_addr (offset, len, &id); |
509 + | id = htonl (*offset); |
427 510 | offset += len; |
428 511 | offsetlen -= len; |
429 512 | |
430 513 | inet_ntop (AF_INET, &area_id, a, sizeof (a)); |
431 514 | inet_ntop (AF_INET, &adv_router, b, sizeof (b)); |
432 515 | inet_ntop (AF_INET, &id, c, sizeof (c)); |
433 516 | zlog_debug ("SNMP access by lsdb: area=%s exact=%d length=%lu magic=%d" |
434 517 | " type=%#x adv_router=%s id=%s", |
435 518 | a, exact, (u_long)*length, v->magic, ntohs (type), b, c); |
436 519 | |
437 520 | if (exact) |
438 521 | { |
439 - | oa = ospf6_area_lookup (area_id.s_addr, ospf6); |
440 - | lsa = ospf6_lsdb_lookup (type, id.s_addr, adv_router.s_addr, oa->lsdb); |
522 + | oa = ospf6_area_lookup (area_id, ospf6); |
523 + | lsa = ospf6_lsdb_lookup (type, id, adv_router, oa->lsdb); |
441 524 | } |
442 525 | else |
443 526 | { |
444 527 | for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa)) |
445 528 | { |
446 529 | if (lsa) |
447 530 | continue; |
448 - | if (ntohl (oa->area_id) < ntohl (area_id.s_addr)) |
531 + | if (oa->area_id < area_id) |
449 532 | continue; |
450 533 | |
451 - | lsa = ospf6_lsdb_lookup_next (type, id.s_addr, adv_router.s_addr, |
534 + | lsa = ospf6_lsdb_lookup_next (type, id, adv_router, |
452 535 | oa->lsdb); |
453 536 | if (! lsa) |
454 537 | { |
455 538 | type = 0; |
456 - | memset (&id, 0, sizeof (struct in_addr)); |
457 - | memset (&adv_router, 0, sizeof (struct in_addr)); |
539 + | id = 0; |
540 + | adv_router = 0; |
458 541 | } |
459 542 | } |
460 543 | } |
461 544 | |
462 545 | if (! lsa) |
463 546 | { |
464 547 | zlog_debug ("SNMP respond: No LSA to return"); |
465 548 | return NULL; |
466 549 | } |
467 550 | oa = OSPF6_AREA (lsa->lsdb->data); |
468 551 | |
469 552 | zlog_debug ("SNMP respond: area: %s lsa: %s", oa->name, lsa->name); |
470 553 | |
471 554 | /* Add Index (AreaId, Type, RouterId, Lsid) */ |
472 555 | *length = v->namelen + OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET; |
473 556 | offset = name + v->namelen; |
474 - | oid_copy_addr (offset, (struct in_addr *) &oa->area_id, IN_ADDR_SIZE); |
475 - | offset += IN_ADDR_SIZE; |
557 + | *offset = ntohl (oa->area_id); |
558 + | offset++; |
476 559 | *offset = ntohs (lsa->header->type); |
477 560 | offset++; |
478 - | oid_copy_addr (offset, (struct in_addr *) &lsa->header->adv_router, |
479 - | IN_ADDR_SIZE); |
480 - | offset += IN_ADDR_SIZE; |
481 - | oid_copy_addr (offset, (struct in_addr *) &lsa->header->id, IN_ADDR_SIZE); |
482 - | offset += IN_ADDR_SIZE; |
561 + | *offset = ntohl (lsa->header->adv_router); |
562 + | offset++; |
563 + | *offset = ntohl (lsa->header->id); |
564 + | offset++; |
483 565 | |
484 566 | /* Return the current value of the variable */ |
485 567 | switch (v->magic) |
486 568 | { |
487 - | case OSPFv3AREALSDBAREAID: /* 1 */ |
488 - | area_id.s_addr = OSPF6_AREA (lsa->lsdb->data)->area_id; |
489 - | return SNMP_IPADDRESS (area_id); |
490 - | break; |
491 - | case OSPFv3AREALSDBTYPE: /* 2 */ |
492 - | return SNMP_INTEGER (ntohs (lsa->header->type)); |
569 + | case OSPFv3AREALSDBSEQUENCE: |
570 + | return SNMP_INTEGER (ntohl (lsa->header->seqnum)); |
493 571 | break; |
494 - | case OSPFv3AREALSDBROUTERID: /* 3 */ |
495 - | adv_router.s_addr = lsa->header->adv_router; |
496 - | return SNMP_IPADDRESS (adv_router); |
497 - | break; |
498 - | case OSPFv3AREALSDBLSID: /* 4 */ |
499 - | id.s_addr = lsa->header->id; |
500 - | return SNMP_IPADDRESS (id); |
501 - | break; |
502 - | case OSPFv3AREALSDBSEQUENCE: /* 5 */ |
503 - | return SNMP_INTEGER (lsa->header->seqnum); |
504 - | break; |
505 - | case OSPFv3AREALSDBAGE: /* 6 */ |
572 + | case OSPFv3AREALSDBAGE: |
506 573 | ospf6_lsa_age_current (lsa); |
507 - | return SNMP_INTEGER (lsa->header->age); |
574 + | return SNMP_INTEGER (ntohs (lsa->header->age)); |
508 575 | break; |
509 - | case OSPFv3AREALSDBCHECKSUM: /* 7 */ |
510 - | return SNMP_INTEGER (lsa->header->checksum); |
576 + | case OSPFv3AREALSDBCHECKSUM: |
577 + | return SNMP_INTEGER (ntohs (lsa->header->checksum)); |
511 578 | break; |
512 - | case OSPFv3AREALSDBADVERTISEMENT: /* 8 */ |
579 + | case OSPFv3AREALSDBADVERTISEMENT: |
513 580 | *var_len = ntohs (lsa->header->length); |
514 581 | return (u_char *) lsa->header; |
515 582 | break; |
516 - | case OSPFv3AREALSDBTYPEKNOWN: /* 9 */ |
583 + | case OSPFv3AREALSDBTYPEKNOWN: |
517 584 | return SNMP_INTEGER (OSPF6_LSA_IS_KNOWN (lsa->header->type) ? |
518 585 | SNMP_TRUE : SNMP_FALSE); |
519 586 | break; |
520 - | default: |
521 - | return NULL; |
522 - | break; |
523 587 | } |
524 588 | return NULL; |
525 589 | } |
526 590 | |
527 591 | |
528 592 | /* Register OSPFv3-MIB. */ |
529 593 | void |
530 594 | ospf6_snmp_init (struct thread_master *master) |
531 595 | { |
532 596 | smux_init (master); |