blob: a1d8d4c97cf8036a14c215a8ac4ac56f1524e477 [file] [log] [blame]
hassoef1bbf52004-10-08 12:04:21 +00001/* OSPFv3 SNMP support
2 * Copyright (C) 2004 Yasuhiro Ohara
3 *
4 * This file is part of GNU Zebra.
5 *
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
9 * later version.
10 *
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with GNU Zebra; see the file COPYING. If not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22#include <zebra.h>
23
24#ifdef HAVE_SNMP
25
26#ifdef HAVE_NETSNMP
27#include <net-snmp/net-snmp-config.h>
28#endif /*HAVE_NETSNMP*/
29
30#include <asn1.h>
31#include <snmp.h>
32#include <snmp_impl.h>
33
34#include "log.h"
35#include "vty.h"
36#include "linklist.h"
37#include "smux.h"
38
39#include "ospf6_proto.h"
40#include "ospf6_lsa.h"
41#include "ospf6_lsdb.h"
42#include "ospf6_route.h"
43#include "ospf6_top.h"
44#include "ospf6_area.h"
45#include "ospf6_interface.h"
46#include "ospf6_message.h"
47#include "ospf6_neighbor.h"
48#include "ospf6d.h"
49
50/* OSPFv3-MIB */
51#define OSPFv3MIB 1,3,6,1,3,102
52
hassoef1bbf52004-10-08 12:04:21 +000053/* OSPFv3 MIB General Group values. */
54#define OSPFv3ROUTERID 1
55#define OSPFv3ADMINSTAT 2
56#define OSPFv3VERSIONNUMBER 3
57#define OSPFv3AREABDRRTRSTATUS 4
58#define OSPFv3ASBDRRTRSTATUS 5
59#define OSPFv3ASSCOPELSACOUNT 6
60#define OSPFv3ASSCOPELSACHECKSUMSUM 7
61#define OSPFv3ORIGINATENEWLSAS 8
62#define OSPFv3RXNEWLSAS 9
63#define OSPFv3EXTLSACOUNT 10
64#define OSPFv3EXTAREALSDBLIMIT 11
65#define OSPFv3MULTICASTEXTENSIONS 12
66#define OSPFv3EXITOVERFLOWINTERVAL 13
67#define OSPFv3DEMANDEXTENSIONS 14
68#define OSPFv3TRAFFICENGINEERINGSUPPORT 15
69#define OSPFv3REFERENCEBANDWIDTH 16
70#define OSPFv3RESTARTSUPPORT 17
71#define OSPFv3RESTARTINTERVAL 18
72#define OSPFv3RESTARTSTATUS 19
73#define OSPFv3RESTARTAGE 20
74#define OSPFv3RESTARTEXITREASON 21
75
76/* OSPFv3 MIB Area Table values. */
77#define OSPFv3AREAID 1
78#define OSPFv3IMPORTASEXTERN 2
hasso2680aa22004-11-25 20:54:46 +000079#define OSPFv3AREASPFRUNS 3
80#define OSPFv3AREABDRRTRCOUNT 4
81#define OSPFv3AREAASBDRRTRCOUNT 5
82#define OSPFv3AREASCOPELSACOUNT 6
83#define OSPFv3AREASCOPELSACKSUMSUM 7
84#define OSPFv3AREASUMMARY 8
85#define OSPFv3AREASTATUS 9
86#define OSPFv3STUBMETRIC 10
87#define OSPFv3AREANSSATRANSLATORROLE 11
88#define OSPFv3AREANSSATRANSLATORSTATE 12
89#define OSPFv3AREANSSATRANSLATORSTABILITYINTERVAL 13
90#define OSPFv3AREANSSATRANSLATOREVENTS 14
91#define OSPFv3AREASTUBMETRICTYPE 15
92
93/* OSPFv3 MIB Area Lsdb Table values. */
94#define OSPFv3AREALSDBAREAID 1
95#define OSPFv3AREALSDBTYPE 2
96#define OSPFv3AREALSDBROUTERID 3
97#define OSPFv3AREALSDBLSID 4
98#define OSPFv3AREALSDBSEQUENCE 5
99#define OSPFv3AREALSDBAGE 6
100#define OSPFv3AREALSDBCHECKSUM 7
101#define OSPFv3AREALSDBADVERTISEMENT 8
102#define OSPFv3AREALSDBTYPEKNOWN 9
hassoef1bbf52004-10-08 12:04:21 +0000103
104/* SYNTAX Status from OSPF-MIB. */
105#define OSPF_STATUS_ENABLED 1
106#define OSPF_STATUS_DISABLED 2
107
108/* SNMP value hack. */
109#define COUNTER ASN_COUNTER
110#define INTEGER ASN_INTEGER
111#define GAUGE ASN_GAUGE
112#define TIMETICKS ASN_TIMETICKS
113#define IPADDRESS ASN_IPADDRESS
114#define STRING ASN_OCTET_STR
115
116/* For return values e.g. SNMP_INTEGER macro */
117SNMP_LOCAL_VARIABLES
118
119static struct in_addr tmp;
120#define INT32_INADDR(x) \
121 (tmp.s_addr = (x), tmp)
122
123/* OSPFv3-MIB instances. */
124oid ospfv3_oid [] = { OSPFv3MIB };
hassoef1bbf52004-10-08 12:04:21 +0000125
126/* empty ID 0.0.0.0 e.g. empty router-id */
127static struct in_addr ospf6_empty_id = {0};
128
129/* Hook functions. */
130static u_char *ospfv3GeneralGroup ();
131static u_char *ospfv3AreaEntry ();
hasso2680aa22004-11-25 20:54:46 +0000132static u_char *ospfv3AreaLsdbEntry ();
hassoef1bbf52004-10-08 12:04:21 +0000133
134struct variable ospfv3_variables[] =
135{
136 /* OSPF general variables */
137 {OSPFv3ROUTERID, IPADDRESS, RWRITE, ospfv3GeneralGroup,
138 3, {1, 1, 1}},
139 {OSPFv3ADMINSTAT, INTEGER, RWRITE, ospfv3GeneralGroup,
140 3, {1, 1, 2}},
141 {OSPFv3VERSIONNUMBER, INTEGER, RONLY, ospfv3GeneralGroup,
142 3, {1, 1, 3}},
143 {OSPFv3AREABDRRTRSTATUS, INTEGER, RONLY, ospfv3GeneralGroup,
144 3, {1, 1, 4}},
145 {OSPFv3ASBDRRTRSTATUS, INTEGER, RWRITE, ospfv3GeneralGroup,
146 3, {1, 1, 5}},
147 {OSPFv3ASSCOPELSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup,
148 3, {1, 1, 6}},
149 {OSPFv3ASSCOPELSACHECKSUMSUM, INTEGER, RONLY, ospfv3GeneralGroup,
150 3, {1, 1, 7}},
151 {OSPFv3ORIGINATENEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup,
152 3, {1, 1, 8}},
153 {OSPFv3RXNEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup,
154 3, {1, 1, 9}},
155 {OSPFv3EXTLSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup,
156 3, {1, 1, 10}},
157 {OSPFv3EXTAREALSDBLIMIT, INTEGER, RWRITE, ospfv3GeneralGroup,
158 3, {1, 1, 11}},
159 {OSPFv3MULTICASTEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup,
160 3, {1, 1, 12}},
161 {OSPFv3EXITOVERFLOWINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup,
162 3, {1, 1, 13}},
163 {OSPFv3DEMANDEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup,
164 3, {1, 1, 14}},
165 {OSPFv3TRAFFICENGINEERINGSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup,
166 3, {1, 1, 15}},
167 {OSPFv3REFERENCEBANDWIDTH, INTEGER, RWRITE, ospfv3GeneralGroup,
168 3, {1, 1, 16}},
169 {OSPFv3RESTARTSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup,
170 3, {1, 1, 17}},
171 {OSPFv3RESTARTINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup,
172 3, {1, 1, 18}},
173 {OSPFv3RESTARTSTATUS, INTEGER, RONLY, ospfv3GeneralGroup,
174 3, {1, 1, 19}},
175 {OSPFv3RESTARTAGE, INTEGER, RONLY, ospfv3GeneralGroup,
176 3, {1, 1, 20}},
177 {OSPFv3RESTARTEXITREASON, INTEGER, RONLY, ospfv3GeneralGroup,
178 3, {1, 1, 21}},
179
180 /* OSPFv3 Area Data Structure */
181 {OSPFv3AREAID, IPADDRESS, RONLY, ospfv3AreaEntry,
182 4, {1, 2, 1, 1}},
hasso2680aa22004-11-25 20:54:46 +0000183 {OSPFv3IMPORTASEXTERN, INTEGER, RWRITE, ospfv3AreaEntry,
hassoef1bbf52004-10-08 12:04:21 +0000184 4, {1, 2, 1, 2}},
hasso2680aa22004-11-25 20:54:46 +0000185 {OSPFv3AREASPFRUNS, COUNTER, RONLY, ospfv3AreaEntry,
186 4, {1, 2, 1, 3}},
187 {OSPFv3AREABDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry,
188 4, {1, 2, 1, 4}},
189 {OSPFv3AREAASBDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry,
190 4, {1, 2, 1, 5}},
191 {OSPFv3AREASCOPELSACOUNT, GAUGE, RONLY, ospfv3AreaEntry,
192 4, {1, 2, 1, 6}},
193 {OSPFv3AREASCOPELSACKSUMSUM, INTEGER, RONLY, ospfv3AreaEntry,
194 4, {1, 2, 1, 7}},
195 {OSPFv3AREASUMMARY, INTEGER, RWRITE, ospfv3AreaEntry,
196 4, {1, 2, 1, 8}},
197 {OSPFv3AREASTATUS, INTEGER, RWRITE, ospfv3AreaEntry,
198 4, {1, 2, 1, 9}},
199 {OSPFv3STUBMETRIC, INTEGER, RWRITE, ospfv3AreaEntry,
200 4, {1, 2, 1, 10}},
201 {OSPFv3AREANSSATRANSLATORROLE, INTEGER, RWRITE, ospfv3AreaEntry,
202 4, {1, 2, 1, 11}},
203 {OSPFv3AREANSSATRANSLATORSTATE, INTEGER, RONLY, ospfv3AreaEntry,
204 4, {1, 2, 1, 12}},
205 {OSPFv3AREANSSATRANSLATORSTABILITYINTERVAL, INTEGER, RWRITE, ospfv3AreaEntry,
206 4, {1, 2, 1, 13}},
207 {OSPFv3AREANSSATRANSLATOREVENTS, COUNTER, RONLY, ospfv3AreaEntry,
208 4, {1, 2, 1, 14}},
209 {OSPFv3AREASTUBMETRICTYPE, INTEGER, RWRITE, ospfv3AreaEntry,
210 4, {1, 2, 1, 15}},
211
212 {OSPFv3AREALSDBAREAID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
213 4, {1, 4, 1, 1}},
214 {OSPFv3AREALSDBTYPE, GAUGE, RONLY, ospfv3AreaLsdbEntry,
215 4, {1, 4, 1, 2}},
216 {OSPFv3AREALSDBROUTERID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
217 4, {1, 4, 1, 3}},
218 {OSPFv3AREALSDBLSID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
219 4, {1, 4, 1, 4}},
220 {OSPFv3AREALSDBSEQUENCE, INTEGER, RONLY, ospfv3AreaLsdbEntry,
221 4, {1, 4, 1, 5}},
222 {OSPFv3AREALSDBAGE, INTEGER, RONLY, ospfv3AreaLsdbEntry,
223 4, {1, 4, 1, 6}},
224 {OSPFv3AREALSDBCHECKSUM, INTEGER, RONLY, ospfv3AreaLsdbEntry,
225 4, {1, 4, 1, 7}},
226 {OSPFv3AREALSDBADVERTISEMENT, STRING, RONLY, ospfv3AreaLsdbEntry,
227 4, {1, 4, 1, 8}},
228 {OSPFv3AREALSDBTYPEKNOWN, INTEGER, RONLY, ospfv3AreaLsdbEntry,
229 4, {1, 4, 1, 9}},
230
hassoef1bbf52004-10-08 12:04:21 +0000231};
232
233static u_char *
234ospfv3GeneralGroup (struct variable *v, oid *name, size_t *length,
235 int exact, size_t *var_len, WriteMethod **write_method)
236{
237 /* Check whether the instance identifier is valid */
238 if (smux_header_generic (v, name, length, exact, var_len, write_method)
239 == MATCH_FAILED)
240 return NULL;
241
242 /* Return the current value of the variable */
243 switch (v->magic)
244 {
245 case OSPFv3ROUTERID: /* 1*/
246 /* Router-ID of this OSPF instance. */
247 if (ospf6)
248 return SNMP_IPADDRESS (INT32_INADDR (ospf6->router_id));
249 else
250 return SNMP_IPADDRESS (ospf6_empty_id);
251 break;
252 case OSPFv3ADMINSTAT: /* 2*/
253 break;
254 case OSPFv3VERSIONNUMBER: /* 3*/
255 break;
256 case OSPFv3AREABDRRTRSTATUS: /* 4*/
257 break;
258 case OSPFv3ASBDRRTRSTATUS: /* 5*/
259 break;
260 case OSPFv3ASSCOPELSACOUNT: /* 6*/
261 break;
262 case OSPFv3ASSCOPELSACHECKSUMSUM: /* 7*/
263 break;
264 case OSPFv3ORIGINATENEWLSAS: /* 8*/
265 break;
266 case OSPFv3RXNEWLSAS: /* 9*/
267 break;
268 case OSPFv3EXTLSACOUNT: /*10*/
269 break;
270 case OSPFv3EXTAREALSDBLIMIT: /*11*/
271 break;
272 case OSPFv3MULTICASTEXTENSIONS: /*12*/
273 break;
274 case OSPFv3EXITOVERFLOWINTERVAL: /*13*/
275 break;
276 case OSPFv3DEMANDEXTENSIONS: /*14*/
277 break;
278 case OSPFv3TRAFFICENGINEERINGSUPPORT: /*15*/
279 break;
280 case OSPFv3REFERENCEBANDWIDTH: /*16*/
281 break;
282 case OSPFv3RESTARTSUPPORT: /*17*/
283 break;
284 case OSPFv3RESTARTINTERVAL: /*18*/
285 break;
286 case OSPFv3RESTARTSTATUS: /*19*/
287 break;
288 case OSPFv3RESTARTAGE: /*20*/
289 break;
290 case OSPFv3RESTARTEXITREASON: /*21*/
291 break;
292 default:
293 return NULL;
294 }
295 return NULL;
296}
297
298static u_char *
299ospfv3AreaEntry (struct variable *v, oid *name, size_t *length,
300 int exact, size_t *var_len, WriteMethod **write_method)
301{
302 struct ospf6_area *oa, *area = NULL;
303 u_int32_t area_id = 0;
paul0c083ee2004-10-10 12:54:58 +0000304 struct listnode *node;
305 unsigned int len;
hassoef1bbf52004-10-08 12:04:21 +0000306
307 if (ospf6 == NULL)
308 return NULL;
309
310 len = *length - v->namelen;
311 len = (len >= sizeof (u_int32_t) ? sizeof (u_int32_t) : 0);
312 if (exact && len != sizeof (u_int32_t))
313 return NULL;
314 if (len)
315 oid2in_addr (name + v->namelen, len, (struct in_addr *) &area_id);
316
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000317 zlog_debug ("SNMP access by area: %s, exact=%d len=%d length=%lu",
hassoc6487d62004-12-24 06:00:11 +0000318 inet_ntoa (* (struct in_addr *) &area_id),
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000319 exact, len, (u_long)*length);
hassoef1bbf52004-10-08 12:04:21 +0000320
paul1eb8ef22005-04-07 07:30:20 +0000321 for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
hassoef1bbf52004-10-08 12:04:21 +0000322 {
hassoef1bbf52004-10-08 12:04:21 +0000323 if (area == NULL)
324 {
325 if (len == 0) /* return first area entry */
326 area = oa;
327 else if (exact && ntohl (oa->area_id) == ntohl (area_id))
328 area = oa;
329 else if (ntohl (oa->area_id) > ntohl (area_id))
330 area = oa;
331 }
332 }
333
334 if (area == NULL)
335 return NULL;
336
337 *length = v->namelen + sizeof (u_int32_t);
338 oid_copy_addr (name + v->namelen, (struct in_addr *) &area->area_id,
339 sizeof (u_int32_t));
340
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000341 zlog_debug ("SNMP found area: %s, exact=%d len=%d length=%lu",
hassoc6487d62004-12-24 06:00:11 +0000342 inet_ntoa (* (struct in_addr *) &area->area_id),
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000343 exact, len, (u_long)*length);
hassoef1bbf52004-10-08 12:04:21 +0000344
345 switch (v->magic)
346 {
347 case OSPFv3AREAID: /* 1*/
348 return SNMP_IPADDRESS (INT32_INADDR (area->area_id));
349 break;
350 case OSPFv3IMPORTASEXTERN: /* 2*/
351 return SNMP_INTEGER (ospf6->external_table->count);
352 break;
353 default:
354 return NULL;
355 break;
356 }
357 return NULL;
358}
359
hasso2680aa22004-11-25 20:54:46 +0000360static u_char *
361ospfv3AreaLsdbEntry (struct variable *v, oid *name, size_t *length,
362 int exact, size_t *var_len, WriteMethod **write_method)
363{
364 struct ospf6_lsa *lsa = NULL;
365 struct in_addr area_id;
366 u_int16_t type;
367 struct in_addr id;
368 struct in_addr adv_router;
369 int len;
370 oid *offset;
371 int offsetlen;
372 char a[16], b[16], c[16];
373 struct ospf6_area *oa;
hassob3c8c462004-11-26 12:55:51 +0000374 struct listnode *node;
hasso2680aa22004-11-25 20:54:46 +0000375
376 memset (&area_id, 0, sizeof (struct in_addr));
377 type = 0;
378 memset (&id, 0, sizeof (struct in_addr));
379 memset (&adv_router, 0, sizeof (struct in_addr));
380
381 /* Check OSPFv3 instance. */
382 if (ospf6 == NULL)
383 return NULL;
384
385 /* Get variable length. */
386 offset = name + v->namelen;
387 offsetlen = *length - v->namelen;
388
389#define OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET \
390 (IN_ADDR_SIZE + 1 + IN_ADDR_SIZE + IN_ADDR_SIZE)
391
392 if (exact && offsetlen != OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET)
393 return NULL;
394
395 /* Parse area-id */
396 len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
397 if (len)
398 oid2in_addr (offset, len, &area_id);
399 offset += len;
400 offsetlen -= len;
401
402 /* Parse type */
403 len = (offsetlen < 1 ? offsetlen : 1);
404 if (len)
405 type = htons (*offset);
406 offset += len;
407 offsetlen -= len;
408
409 /* Parse Router-ID */
410 len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
411 if (len)
412 oid2in_addr (offset, len, &adv_router);
413 offset += len;
414 offsetlen -= len;
415
416 /* Parse LS-ID */
417 len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
418 if (len)
419 oid2in_addr (offset, len, &id);
420 offset += len;
421 offsetlen -= len;
422
423 inet_ntop (AF_INET, &area_id, a, sizeof (a));
424 inet_ntop (AF_INET, &adv_router, b, sizeof (b));
425 inet_ntop (AF_INET, &id, c, sizeof (c));
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000426 zlog_debug ("SNMP access by lsdb: area=%s exact=%d length=%lu magic=%d"
hassoc6487d62004-12-24 06:00:11 +0000427 " type=%#x adv_router=%s id=%s",
Andrew J. Schorreda9ba72007-04-27 18:13:15 +0000428 a, exact, (u_long)*length, v->magic, ntohs (type), b, c);
hasso2680aa22004-11-25 20:54:46 +0000429
430 if (exact)
431 {
432 oa = ospf6_area_lookup (area_id.s_addr, ospf6);
433 lsa = ospf6_lsdb_lookup (type, id.s_addr, adv_router.s_addr, oa->lsdb);
434 }
435 else
436 {
paul1eb8ef22005-04-07 07:30:20 +0000437 for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
hasso2680aa22004-11-25 20:54:46 +0000438 {
hasso2680aa22004-11-25 20:54:46 +0000439 if (lsa)
440 continue;
441 if (ntohl (oa->area_id) < ntohl (area_id.s_addr))
442 continue;
443
444 lsa = ospf6_lsdb_lookup_next (type, id.s_addr, adv_router.s_addr,
445 oa->lsdb);
446 if (! lsa)
447 {
448 type = 0;
449 memset (&id, 0, sizeof (struct in_addr));
450 memset (&adv_router, 0, sizeof (struct in_addr));
451 }
452 }
453 }
454
455 if (! lsa)
456 {
hassoc6487d62004-12-24 06:00:11 +0000457 zlog_debug ("SNMP respond: No LSA to return");
hasso2680aa22004-11-25 20:54:46 +0000458 return NULL;
459 }
460 oa = OSPF6_AREA (lsa->lsdb->data);
461
hassoc6487d62004-12-24 06:00:11 +0000462 zlog_debug ("SNMP respond: area: %s lsa: %s", oa->name, lsa->name);
hasso2680aa22004-11-25 20:54:46 +0000463
464 /* Add Index (AreaId, Type, RouterId, Lsid) */
465 *length = v->namelen + OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET;
466 offset = name + v->namelen;
467 oid_copy_addr (offset, (struct in_addr *) &oa->area_id, IN_ADDR_SIZE);
468 offset += IN_ADDR_SIZE;
469 *offset = ntohs (lsa->header->type);
470 offset++;
471 oid_copy_addr (offset, (struct in_addr *) &lsa->header->adv_router,
472 IN_ADDR_SIZE);
473 offset += IN_ADDR_SIZE;
474 oid_copy_addr (offset, (struct in_addr *) &lsa->header->id, IN_ADDR_SIZE);
475 offset += IN_ADDR_SIZE;
476
477 /* Return the current value of the variable */
478 switch (v->magic)
479 {
480 case OSPFv3AREALSDBAREAID: /* 1 */
481 area_id.s_addr = OSPF6_AREA (lsa->lsdb->data)->area_id;
482 return SNMP_IPADDRESS (area_id);
483 break;
484 case OSPFv3AREALSDBTYPE: /* 2 */
485 return SNMP_INTEGER (ntohs (lsa->header->type));
486 break;
487 case OSPFv3AREALSDBROUTERID: /* 3 */
488 adv_router.s_addr = lsa->header->adv_router;
489 return SNMP_IPADDRESS (adv_router);
490 break;
491 case OSPFv3AREALSDBLSID: /* 4 */
492 id.s_addr = lsa->header->id;
493 return SNMP_IPADDRESS (id);
494 break;
495 case OSPFv3AREALSDBSEQUENCE: /* 5 */
496 return SNMP_INTEGER (lsa->header->seqnum);
497 break;
498 case OSPFv3AREALSDBAGE: /* 6 */
499 ospf6_lsa_age_current (lsa);
500 return SNMP_INTEGER (lsa->header->age);
501 break;
502 case OSPFv3AREALSDBCHECKSUM: /* 7 */
503 return SNMP_INTEGER (lsa->header->checksum);
504 break;
505 case OSPFv3AREALSDBADVERTISEMENT: /* 8 */
506 *var_len = ntohs (lsa->header->length);
507 return (u_char *) lsa->header;
508 break;
509 case OSPFv3AREALSDBTYPEKNOWN: /* 9 */
510 return SNMP_INTEGER (OSPF6_LSA_IS_KNOWN (lsa->header->type) ?
511 SNMP_TRUE : SNMP_FALSE);
512 break;
513 default:
514 return NULL;
515 break;
516 }
517 return NULL;
518}
519
520
hassoef1bbf52004-10-08 12:04:21 +0000521/* Register OSPFv3-MIB. */
522void
paul0c083ee2004-10-10 12:54:58 +0000523ospf6_snmp_init (struct thread_master *master)
hassoef1bbf52004-10-08 12:04:21 +0000524{
hassoc75105a2004-10-13 10:33:26 +0000525 smux_init (master);
hassoef1bbf52004-10-08 12:04:21 +0000526 REGISTER_MIB ("OSPFv3MIB", ospfv3_variables, variable, ospfv3_oid);
hassoef1bbf52004-10-08 12:04:21 +0000527}
528
529#endif /* HAVE_SNMP */
530