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