Annotation of embedaddon/quagga/ospfd/ospf_dump.c, revision 1.1.1.3
1.1 misho 1: /*
2: * OSPFd dump routine.
3: * Copyright (C) 1999, 2000 Toshiaki Takada
4: *
5: * This file is part of GNU Zebra.
6: *
7: * GNU Zebra is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2, or (at your option) any
10: * later version.
11: *
12: * GNU Zebra is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public License
18: * along with GNU Zebra; see the file COPYING. If not, write to the
19: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20: * Boston, MA 02111-1307, USA.
21: */
22:
23: #include <zebra.h>
24:
25: #include "linklist.h"
26: #include "thread.h"
27: #include "prefix.h"
28: #include "command.h"
29: #include "stream.h"
30: #include "log.h"
31: #include "sockopt.h"
32:
33: #include "ospfd/ospfd.h"
34: #include "ospfd/ospf_interface.h"
35: #include "ospfd/ospf_ism.h"
36: #include "ospfd/ospf_asbr.h"
37: #include "ospfd/ospf_lsa.h"
38: #include "ospfd/ospf_lsdb.h"
39: #include "ospfd/ospf_neighbor.h"
40: #include "ospfd/ospf_nsm.h"
41: #include "ospfd/ospf_dump.h"
42: #include "ospfd/ospf_packet.h"
43: #include "ospfd/ospf_network.h"
44:
45: const struct message ospf_ism_state_msg[] =
46: {
47: { ISM_DependUpon, "DependUpon" },
48: { ISM_Down, "Down" },
49: { ISM_Loopback, "Loopback" },
50: { ISM_Waiting, "Waiting" },
51: { ISM_PointToPoint, "Point-To-Point" },
52: { ISM_DROther, "DROther" },
53: { ISM_Backup, "Backup" },
54: { ISM_DR, "DR" },
55: };
56: const int ospf_ism_state_msg_max = OSPF_ISM_STATE_MAX;
57:
58: const struct message ospf_nsm_state_msg[] =
59: {
60: { NSM_DependUpon, "DependUpon" },
61: { NSM_Deleted, "Deleted" },
62: { NSM_Down, "Down" },
63: { NSM_Attempt, "Attempt" },
64: { NSM_Init, "Init" },
65: { NSM_TwoWay, "2-Way" },
66: { NSM_ExStart, "ExStart" },
67: { NSM_Exchange, "Exchange" },
68: { NSM_Loading, "Loading" },
69: { NSM_Full, "Full" },
70: };
71: const int ospf_nsm_state_msg_max = OSPF_NSM_STATE_MAX;
72:
73: const struct message ospf_lsa_type_msg[] =
74: {
75: { OSPF_UNKNOWN_LSA, "unknown" },
76: { OSPF_ROUTER_LSA, "router-LSA" },
77: { OSPF_NETWORK_LSA, "network-LSA" },
78: { OSPF_SUMMARY_LSA, "summary-LSA" },
79: { OSPF_ASBR_SUMMARY_LSA, "summary-LSA" },
80: { OSPF_AS_EXTERNAL_LSA, "AS-external-LSA" },
81: { OSPF_GROUP_MEMBER_LSA, "GROUP MEMBER LSA" },
82: { OSPF_AS_NSSA_LSA, "NSSA-LSA" },
83: { 8, "Type-8 LSA" },
84: { OSPF_OPAQUE_LINK_LSA, "Link-Local Opaque-LSA" },
85: { OSPF_OPAQUE_AREA_LSA, "Area-Local Opaque-LSA" },
86: { OSPF_OPAQUE_AS_LSA, "AS-external Opaque-LSA" },
87: };
88: const int ospf_lsa_type_msg_max = OSPF_MAX_LSA;
89:
90: const struct message ospf_link_state_id_type_msg[] =
91: {
92: { OSPF_UNKNOWN_LSA, "(unknown)" },
93: { OSPF_ROUTER_LSA, "" },
94: { OSPF_NETWORK_LSA, "(address of Designated Router)" },
95: { OSPF_SUMMARY_LSA, "(summary Network Number)" },
96: { OSPF_ASBR_SUMMARY_LSA, "(AS Boundary Router address)" },
97: { OSPF_AS_EXTERNAL_LSA, "(External Network Number)" },
98: { OSPF_GROUP_MEMBER_LSA, "(Group membership information)" },
99: { OSPF_AS_NSSA_LSA, "(External Network Number for NSSA)" },
100: { 8, "(Type-8 LSID)" },
101: { OSPF_OPAQUE_LINK_LSA, "(Link-Local Opaque-Type/ID)" },
102: { OSPF_OPAQUE_AREA_LSA, "(Area-Local Opaque-Type/ID)" },
103: { OSPF_OPAQUE_AS_LSA, "(AS-external Opaque-Type/ID)" },
104: };
105: const int ospf_link_state_id_type_msg_max = OSPF_MAX_LSA;
106:
107: const struct message ospf_network_type_msg[] =
108: {
109: { OSPF_IFTYPE_NONE, "NONE" },
110: { OSPF_IFTYPE_POINTOPOINT, "Point-to-Point" },
111: { OSPF_IFTYPE_BROADCAST, "Broadcast" },
112: { OSPF_IFTYPE_NBMA, "NBMA" },
113: { OSPF_IFTYPE_POINTOMULTIPOINT, "Point-to-MultiPoint" },
114: { OSPF_IFTYPE_VIRTUALLINK, "Virtual-Link" },
115: };
116: const int ospf_network_type_msg_max = OSPF_IFTYPE_MAX;
117:
1.1.1.2 misho 118: /* AuType */
119: const struct message ospf_auth_type_str[] =
120: {
121: { OSPF_AUTH_NULL, "Null" },
122: { OSPF_AUTH_SIMPLE, "Simple" },
123: { OSPF_AUTH_CRYPTOGRAPHIC, "Cryptographic" },
124: };
125: const size_t ospf_auth_type_str_max = sizeof (ospf_auth_type_str) /
126: sizeof (ospf_auth_type_str[0]);
127:
1.1 misho 128: /* Configuration debug option variables. */
129: unsigned long conf_debug_ospf_packet[5] = {0, 0, 0, 0, 0};
130: unsigned long conf_debug_ospf_event = 0;
131: unsigned long conf_debug_ospf_ism = 0;
132: unsigned long conf_debug_ospf_nsm = 0;
133: unsigned long conf_debug_ospf_lsa = 0;
134: unsigned long conf_debug_ospf_zebra = 0;
135: unsigned long conf_debug_ospf_nssa = 0;
136:
137: /* Enable debug option variables -- valid only session. */
138: unsigned long term_debug_ospf_packet[5] = {0, 0, 0, 0, 0};
139: unsigned long term_debug_ospf_event = 0;
140: unsigned long term_debug_ospf_ism = 0;
141: unsigned long term_debug_ospf_nsm = 0;
142: unsigned long term_debug_ospf_lsa = 0;
143: unsigned long term_debug_ospf_zebra = 0;
144: unsigned long term_debug_ospf_nssa = 0;
145:
1.1.1.3 ! misho 146:
1.1 misho 147:
148: const char *
149: ospf_redist_string(u_int route_type)
150: {
151: return (route_type == ZEBRA_ROUTE_MAX) ?
152: "Default" : zebra_route_string(route_type);
153: }
154:
155: #define OSPF_AREA_STRING_MAXLEN 16
156: const char *
157: ospf_area_name_string (struct ospf_area *area)
158: {
159: static char buf[OSPF_AREA_STRING_MAXLEN] = "";
160: u_int32_t area_id;
161:
162: if (!area)
163: return "-";
164:
165: area_id = ntohl (area->area_id.s_addr);
166: snprintf (buf, OSPF_AREA_STRING_MAXLEN, "%d.%d.%d.%d",
167: (area_id >> 24) & 0xff, (area_id >> 16) & 0xff,
168: (area_id >> 8) & 0xff, area_id & 0xff);
169: return buf;
170: }
171:
172: #define OSPF_AREA_DESC_STRING_MAXLEN 23
173: const char *
174: ospf_area_desc_string (struct ospf_area *area)
175: {
176: static char buf[OSPF_AREA_DESC_STRING_MAXLEN] = "";
177: u_char type;
178:
179: if (!area)
180: return "(incomplete)";
181:
182: type = area->external_routing;
183: switch (type)
184: {
185: case OSPF_AREA_NSSA:
186: snprintf (buf, OSPF_AREA_DESC_STRING_MAXLEN, "%s [NSSA]",
187: ospf_area_name_string (area));
188: break;
189: case OSPF_AREA_STUB:
190: snprintf (buf, OSPF_AREA_DESC_STRING_MAXLEN, "%s [Stub]",
191: ospf_area_name_string (area));
192: break;
193: default:
194: return ospf_area_name_string (area);
195: }
196:
197: return buf;
198: }
199:
200: #define OSPF_IF_STRING_MAXLEN 40
201: const char *
202: ospf_if_name_string (struct ospf_interface *oi)
203: {
204: static char buf[OSPF_IF_STRING_MAXLEN] = "";
205: u_int32_t ifaddr;
206:
207: if (!oi)
208: return "inactive";
209:
210: if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
211: return oi->ifp->name;
212:
213: ifaddr = ntohl (oi->address->u.prefix4.s_addr);
214: snprintf (buf, OSPF_IF_STRING_MAXLEN,
215: "%s:%d.%d.%d.%d", oi->ifp->name,
216: (ifaddr >> 24) & 0xff, (ifaddr >> 16) & 0xff,
217: (ifaddr >> 8) & 0xff, ifaddr & 0xff);
218: return buf;
219: }
220:
1.1.1.3 ! misho 221:
1.1 misho 222: void
223: ospf_nbr_state_message (struct ospf_neighbor *nbr, char *buf, size_t size)
224: {
225: int state;
226: struct ospf_interface *oi = nbr->oi;
227:
228: if (IPV4_ADDR_SAME (&DR (oi), &nbr->address.u.prefix4))
229: state = ISM_DR;
230: else if (IPV4_ADDR_SAME (&BDR (oi), &nbr->address.u.prefix4))
231: state = ISM_Backup;
232: else
233: state = ISM_DROther;
234:
235: memset (buf, 0, size);
236:
237: snprintf (buf, size, "%s/%s",
238: LOOKUP (ospf_nsm_state_msg, nbr->state),
239: LOOKUP (ospf_ism_state_msg, state));
240: }
241:
242: const char *
243: ospf_timeval_dump (struct timeval *t, char *buf, size_t size)
244: {
245: /* Making formatted timer strings. */
246: #define MINUTE_IN_SECONDS 60
247: #define HOUR_IN_SECONDS (60*MINUTE_IN_SECONDS)
248: #define DAY_IN_SECONDS (24*HOUR_IN_SECONDS)
249: #define WEEK_IN_SECONDS (7*DAY_IN_SECONDS)
1.1.1.3 ! misho 250: unsigned long w, d, h, m, s, ms, us;
1.1 misho 251:
252: if (!t)
253: return "inactive";
254:
1.1.1.3 ! misho 255: w = d = h = m = s = ms = us = 0;
1.1 misho 256: memset (buf, 0, size);
1.1.1.3 ! misho 257:
! 258: us = t->tv_usec;
! 259: if (us >= 1000)
! 260: {
! 261: ms = us / 1000;
! 262: us %= 1000;
! 263: }
! 264:
1.1 misho 265: if (ms >= 1000)
266: {
267: t->tv_sec += ms / 1000;
268: ms %= 1000;
269: }
270:
271: if (t->tv_sec > WEEK_IN_SECONDS)
272: {
273: w = t->tv_sec / WEEK_IN_SECONDS;
274: t->tv_sec -= w * WEEK_IN_SECONDS;
275: }
276:
277: if (t->tv_sec > DAY_IN_SECONDS)
278: {
279: d = t->tv_sec / DAY_IN_SECONDS;
280: t->tv_sec -= d * DAY_IN_SECONDS;
281: }
282:
283: if (t->tv_sec >= HOUR_IN_SECONDS)
284: {
285: h = t->tv_sec / HOUR_IN_SECONDS;
286: t->tv_sec -= h * HOUR_IN_SECONDS;
287: }
288:
289: if (t->tv_sec >= MINUTE_IN_SECONDS)
290: {
291: m = t->tv_sec / MINUTE_IN_SECONDS;
292: t->tv_sec -= m * MINUTE_IN_SECONDS;
293: }
294:
295: if (w > 99)
296: snprintf (buf, size, "%ldw%1ldd", w, d);
297: else if (w)
298: snprintf (buf, size, "%ldw%1ldd%02ldh", w, d, h);
299: else if (d)
300: snprintf (buf, size, "%1ldd%02ldh%02ldm", d, h, m);
301: else if (h)
1.1.1.3 ! misho 302: snprintf (buf, size, "%ldh%02ldm%02lds", h, m, (long)t->tv_sec);
1.1 misho 303: else if (m)
1.1.1.3 ! misho 304: snprintf (buf, size, "%ldm%02lds", m, (long)t->tv_sec);
! 305: else if (ms)
! 306: snprintf (buf, size, "%ld.%03lds", (long)t->tv_sec, ms);
1.1 misho 307: else
1.1.1.3 ! misho 308: snprintf (buf, size, "%ld usecs", (long)t->tv_usec);
! 309:
1.1 misho 310: return buf;
311: }
312:
313: const char *
314: ospf_timer_dump (struct thread *t, char *buf, size_t size)
315: {
316: struct timeval result;
317: if (!t)
318: return "inactive";
319:
320: result = tv_sub (t->u.sands, recent_relative_time());
321: return ospf_timeval_dump (&result, buf, size);
322: }
323:
324: #define OSPF_OPTION_STR_MAXLEN 24
325:
326: char *
327: ospf_options_dump (u_char options)
328: {
329: static char buf[OSPF_OPTION_STR_MAXLEN];
330:
331: snprintf (buf, OSPF_OPTION_STR_MAXLEN, "*|%s|%s|%s|%s|%s|%s|*",
332: (options & OSPF_OPTION_O) ? "O" : "-",
333: (options & OSPF_OPTION_DC) ? "DC" : "-",
334: (options & OSPF_OPTION_EA) ? "EA" : "-",
335: (options & OSPF_OPTION_NP) ? "N/P" : "-",
336: (options & OSPF_OPTION_MC) ? "MC" : "-",
337: (options & OSPF_OPTION_E) ? "E" : "-");
338:
339: return buf;
340: }
341:
342: static void
343: ospf_packet_hello_dump (struct stream *s, u_int16_t length)
344: {
345: struct ospf_hello *hello;
346: int i;
347:
348: hello = (struct ospf_hello *) STREAM_PNT (s);
349:
350: zlog_debug ("Hello");
351: zlog_debug (" NetworkMask %s", inet_ntoa (hello->network_mask));
352: zlog_debug (" HelloInterval %d", ntohs (hello->hello_interval));
353: zlog_debug (" Options %d (%s)", hello->options,
354: ospf_options_dump (hello->options));
355: zlog_debug (" RtrPriority %d", hello->priority);
356: zlog_debug (" RtrDeadInterval %ld", (u_long)ntohl (hello->dead_interval));
357: zlog_debug (" DRouter %s", inet_ntoa (hello->d_router));
358: zlog_debug (" BDRouter %s", inet_ntoa (hello->bd_router));
359:
360: length -= OSPF_HEADER_SIZE + OSPF_HELLO_MIN_SIZE;
361: zlog_debug (" # Neighbors %d", length / 4);
362: for (i = 0; length > 0; i++, length -= sizeof (struct in_addr))
363: zlog_debug (" Neighbor %s", inet_ntoa (hello->neighbors[i]));
364: }
365:
366: static char *
367: ospf_dd_flags_dump (u_char flags, char *buf, size_t size)
368: {
369: memset (buf, 0, size);
370:
371: snprintf (buf, size, "%s|%s|%s",
372: (flags & OSPF_DD_FLAG_I) ? "I" : "-",
373: (flags & OSPF_DD_FLAG_M) ? "M" : "-",
374: (flags & OSPF_DD_FLAG_MS) ? "MS" : "-");
375:
376: return buf;
377: }
378:
379: void
380: ospf_lsa_header_dump (struct lsa_header *lsah)
381: {
382: const char *lsah_type = LOOKUP (ospf_lsa_type_msg, lsah->type);
383:
384: zlog_debug (" LSA Header");
385: zlog_debug (" LS age %d", ntohs (lsah->ls_age));
386: zlog_debug (" Options %d (%s)", lsah->options,
387: ospf_options_dump (lsah->options));
388: zlog_debug (" LS type %d (%s)", lsah->type,
389: (lsah->type ? lsah_type : "unknown type"));
390: zlog_debug (" Link State ID %s", inet_ntoa (lsah->id));
391: zlog_debug (" Advertising Router %s", inet_ntoa (lsah->adv_router));
392: zlog_debug (" LS sequence number 0x%lx", (u_long)ntohl (lsah->ls_seqnum));
393: zlog_debug (" LS checksum 0x%x", ntohs (lsah->checksum));
394: zlog_debug (" length %d", ntohs (lsah->length));
395: }
396:
397: static char *
398: ospf_router_lsa_flags_dump (u_char flags, char *buf, size_t size)
399: {
400: memset (buf, 0, size);
401:
402: snprintf (buf, size, "%s|%s|%s",
403: (flags & ROUTER_LSA_VIRTUAL) ? "V" : "-",
404: (flags & ROUTER_LSA_EXTERNAL) ? "E" : "-",
405: (flags & ROUTER_LSA_BORDER) ? "B" : "-");
406:
407: return buf;
408: }
409:
410: static void
411: ospf_router_lsa_dump (struct stream *s, u_int16_t length)
412: {
413: char buf[BUFSIZ];
414: struct router_lsa *rl;
415: int i, len;
416:
417: rl = (struct router_lsa *) STREAM_PNT (s);
418:
419: zlog_debug (" Router-LSA");
420: zlog_debug (" flags %s",
421: ospf_router_lsa_flags_dump (rl->flags, buf, BUFSIZ));
422: zlog_debug (" # links %d", ntohs (rl->links));
423:
424: len = ntohs (rl->header.length) - OSPF_LSA_HEADER_SIZE - 4;
425: for (i = 0; len > 0; i++)
426: {
427: zlog_debug (" Link ID %s", inet_ntoa (rl->link[i].link_id));
428: zlog_debug (" Link Data %s", inet_ntoa (rl->link[i].link_data));
429: zlog_debug (" Type %d", (u_char) rl->link[i].type);
430: zlog_debug (" TOS %d", (u_char) rl->link[i].tos);
431: zlog_debug (" metric %d", ntohs (rl->link[i].metric));
432:
433: len -= 12;
434: }
435: }
436:
437: static void
438: ospf_network_lsa_dump (struct stream *s, u_int16_t length)
439: {
440: struct network_lsa *nl;
441: int i, cnt;
442:
443: nl = (struct network_lsa *) STREAM_PNT (s);
444: cnt = (ntohs (nl->header.length) - (OSPF_LSA_HEADER_SIZE + 4)) / 4;
445:
446: zlog_debug (" Network-LSA");
447: /*
448: zlog_debug ("LSA total size %d", ntohs (nl->header.length));
449: zlog_debug ("Network-LSA size %d",
450: ntohs (nl->header.length) - OSPF_LSA_HEADER_SIZE);
451: */
452: zlog_debug (" Network Mask %s", inet_ntoa (nl->mask));
453: zlog_debug (" # Attached Routers %d", cnt);
454: for (i = 0; i < cnt; i++)
455: zlog_debug (" Attached Router %s", inet_ntoa (nl->routers[i]));
456: }
457:
458: static void
459: ospf_summary_lsa_dump (struct stream *s, u_int16_t length)
460: {
461: struct summary_lsa *sl;
462: int size;
463: int i;
464:
465: sl = (struct summary_lsa *) STREAM_PNT (s);
466:
467: zlog_debug (" Summary-LSA");
468: zlog_debug (" Network Mask %s", inet_ntoa (sl->mask));
469:
470: size = ntohs (sl->header.length) - OSPF_LSA_HEADER_SIZE - 4;
471: for (i = 0; size > 0; size -= 4, i++)
472: zlog_debug (" TOS=%d metric %d", sl->tos,
473: GET_METRIC (sl->metric));
474: }
475:
476: static void
477: ospf_as_external_lsa_dump (struct stream *s, u_int16_t length)
478: {
479: struct as_external_lsa *al;
480: int size;
481: int i;
482:
483: al = (struct as_external_lsa *) STREAM_PNT (s);
484: zlog_debug (" %s", ospf_lsa_type_msg[al->header.type].str);
485: zlog_debug (" Network Mask %s", inet_ntoa (al->mask));
486:
487: size = ntohs (al->header.length) - OSPF_LSA_HEADER_SIZE -4;
488: for (i = 0; size > 0; size -= 12, i++)
489: {
490: zlog_debug (" bit %s TOS=%d metric %d",
491: IS_EXTERNAL_METRIC (al->e[i].tos) ? "E" : "-",
492: al->e[i].tos & 0x7f, GET_METRIC (al->e[i].metric));
493: zlog_debug (" Forwarding address %s", inet_ntoa (al->e[i].fwd_addr));
494: zlog_debug (" External Route Tag %d", al->e[i].route_tag);
495: }
496: }
497:
498: static void
499: ospf_lsa_header_list_dump (struct stream *s, u_int16_t length)
500: {
501: struct lsa_header *lsa;
502:
503: zlog_debug (" # LSA Headers %d", length / OSPF_LSA_HEADER_SIZE);
504:
505: /* LSA Headers. */
506: while (length > 0)
507: {
508: lsa = (struct lsa_header *) STREAM_PNT (s);
509: ospf_lsa_header_dump (lsa);
510:
511: stream_forward_getp (s, OSPF_LSA_HEADER_SIZE);
512: length -= OSPF_LSA_HEADER_SIZE;
513: }
514: }
515:
516: static void
517: ospf_packet_db_desc_dump (struct stream *s, u_int16_t length)
518: {
519: struct ospf_db_desc *dd;
520: char dd_flags[8];
521:
522: u_int32_t gp;
523:
524: gp = stream_get_getp (s);
525: dd = (struct ospf_db_desc *) STREAM_PNT (s);
526:
527: zlog_debug ("Database Description");
528: zlog_debug (" Interface MTU %d", ntohs (dd->mtu));
529: zlog_debug (" Options %d (%s)", dd->options,
530: ospf_options_dump (dd->options));
531: zlog_debug (" Flags %d (%s)", dd->flags,
532: ospf_dd_flags_dump (dd->flags, dd_flags, sizeof dd_flags));
533: zlog_debug (" Sequence Number 0x%08lx", (u_long)ntohl (dd->dd_seqnum));
534:
535: length -= OSPF_HEADER_SIZE + OSPF_DB_DESC_MIN_SIZE;
536:
537: stream_forward_getp (s, OSPF_DB_DESC_MIN_SIZE);
538:
539: ospf_lsa_header_list_dump (s, length);
540:
541: stream_set_getp (s, gp);
542: }
543:
544: static void
545: ospf_packet_ls_req_dump (struct stream *s, u_int16_t length)
546: {
547: u_int32_t sp;
548: u_int32_t ls_type;
549: struct in_addr ls_id;
550: struct in_addr adv_router;
551:
552: sp = stream_get_getp (s);
553:
554: length -= OSPF_HEADER_SIZE;
555:
556: zlog_debug ("Link State Request");
557: zlog_debug (" # Requests %d", length / 12);
558:
559: for (; length > 0; length -= 12)
560: {
561: ls_type = stream_getl (s);
562: ls_id.s_addr = stream_get_ipv4 (s);
563: adv_router.s_addr = stream_get_ipv4 (s);
564:
565: zlog_debug (" LS type %d", ls_type);
566: zlog_debug (" Link State ID %s", inet_ntoa (ls_id));
567: zlog_debug (" Advertising Router %s",
568: inet_ntoa (adv_router));
569: }
570:
571: stream_set_getp (s, sp);
572: }
573:
574: static void
575: ospf_packet_ls_upd_dump (struct stream *s, u_int16_t length)
576: {
577: u_int32_t sp;
578: struct lsa_header *lsa;
579: int lsa_len;
580: u_int32_t count;
581:
582: length -= OSPF_HEADER_SIZE;
583:
584: sp = stream_get_getp (s);
585:
586: count = stream_getl (s);
587: length -= 4;
588:
589: zlog_debug ("Link State Update");
590: zlog_debug (" # LSAs %d", count);
591:
592: while (length > 0 && count > 0)
593: {
594: if (length < OSPF_HEADER_SIZE || length % 4 != 0)
595: {
596: zlog_debug (" Remaining %d bytes; Incorrect length.", length);
597: break;
598: }
599:
600: lsa = (struct lsa_header *) STREAM_PNT (s);
601: lsa_len = ntohs (lsa->length);
602: ospf_lsa_header_dump (lsa);
603:
604: switch (lsa->type)
605: {
606: case OSPF_ROUTER_LSA:
607: ospf_router_lsa_dump (s, length);
608: break;
609: case OSPF_NETWORK_LSA:
610: ospf_network_lsa_dump (s, length);
611: break;
612: case OSPF_SUMMARY_LSA:
613: case OSPF_ASBR_SUMMARY_LSA:
614: ospf_summary_lsa_dump (s, length);
615: break;
616: case OSPF_AS_EXTERNAL_LSA:
617: ospf_as_external_lsa_dump (s, length);
618: break;
619: case OSPF_AS_NSSA_LSA:
620: ospf_as_external_lsa_dump (s, length);
621: break;
622: case OSPF_OPAQUE_LINK_LSA:
623: case OSPF_OPAQUE_AREA_LSA:
624: case OSPF_OPAQUE_AS_LSA:
625: ospf_opaque_lsa_dump (s, length);
626: break;
627: default:
628: break;
629: }
630:
631: stream_forward_getp (s, lsa_len);
632: length -= lsa_len;
633: count--;
634: }
635:
636: stream_set_getp (s, sp);
637: }
638:
639: static void
640: ospf_packet_ls_ack_dump (struct stream *s, u_int16_t length)
641: {
642: u_int32_t sp;
643:
644: length -= OSPF_HEADER_SIZE;
645: sp = stream_get_getp (s);
646:
647: zlog_debug ("Link State Acknowledgment");
648: ospf_lsa_header_list_dump (s, length);
649:
650: stream_set_getp (s, sp);
651: }
652:
653: /* Expects header to be in host order */
654: void
655: ospf_ip_header_dump (struct ip *iph)
656: {
657: /* IP Header dump. */
658: zlog_debug ("ip_v %d", iph->ip_v);
659: zlog_debug ("ip_hl %d", iph->ip_hl);
660: zlog_debug ("ip_tos %d", iph->ip_tos);
661: zlog_debug ("ip_len %d", iph->ip_len);
662: zlog_debug ("ip_id %u", (u_int32_t) iph->ip_id);
663: zlog_debug ("ip_off %u", (u_int32_t) iph->ip_off);
664: zlog_debug ("ip_ttl %d", iph->ip_ttl);
665: zlog_debug ("ip_p %d", iph->ip_p);
666: zlog_debug ("ip_sum 0x%x", (u_int32_t) iph->ip_sum);
667: zlog_debug ("ip_src %s", inet_ntoa (iph->ip_src));
668: zlog_debug ("ip_dst %s", inet_ntoa (iph->ip_dst));
669: }
670:
671: static void
672: ospf_header_dump (struct ospf_header *ospfh)
673: {
674: char buf[9];
1.1.1.2 misho 675: u_int16_t auth_type = ntohs (ospfh->auth_type);
1.1 misho 676:
677: zlog_debug ("Header");
678: zlog_debug (" Version %d", ospfh->version);
679: zlog_debug (" Type %d (%s)", ospfh->type,
1.1.1.2 misho 680: LOOKUP (ospf_packet_type_str, ospfh->type));
1.1 misho 681: zlog_debug (" Packet Len %d", ntohs (ospfh->length));
682: zlog_debug (" Router ID %s", inet_ntoa (ospfh->router_id));
683: zlog_debug (" Area ID %s", inet_ntoa (ospfh->area_id));
684: zlog_debug (" Checksum 0x%x", ntohs (ospfh->checksum));
1.1.1.2 misho 685: zlog_debug (" AuType %s", LOOKUP (ospf_auth_type_str, auth_type));
1.1 misho 686:
1.1.1.2 misho 687: switch (auth_type)
1.1 misho 688: {
689: case OSPF_AUTH_NULL:
690: break;
691: case OSPF_AUTH_SIMPLE:
692: memset (buf, 0, 9);
693: strncpy (buf, (char *) ospfh->u.auth_data, 8);
694: zlog_debug (" Simple Password %s", buf);
695: break;
696: case OSPF_AUTH_CRYPTOGRAPHIC:
697: zlog_debug (" Cryptographic Authentication");
698: zlog_debug (" Key ID %d", ospfh->u.crypt.key_id);
699: zlog_debug (" Auth Data Len %d", ospfh->u.crypt.auth_data_len);
700: zlog_debug (" Sequence number %ld",
701: (u_long)ntohl (ospfh->u.crypt.crypt_seqnum));
702: break;
703: default:
704: zlog_debug ("* This is not supported authentication type");
705: break;
706: }
707:
708: }
709:
710: void
711: ospf_packet_dump (struct stream *s)
712: {
713: struct ospf_header *ospfh;
714: unsigned long gp;
715:
716: /* Preserve pointer. */
717: gp = stream_get_getp (s);
718:
719: /* OSPF Header dump. */
720: ospfh = (struct ospf_header *) STREAM_PNT (s);
721:
722: /* Until detail flag is set, return. */
723: if (!(term_debug_ospf_packet[ospfh->type - 1] & OSPF_DEBUG_DETAIL))
724: return;
725:
726: /* Show OSPF header detail. */
727: ospf_header_dump (ospfh);
728: stream_forward_getp (s, OSPF_HEADER_SIZE);
729:
730: switch (ospfh->type)
731: {
732: case OSPF_MSG_HELLO:
733: ospf_packet_hello_dump (s, ntohs (ospfh->length));
734: break;
735: case OSPF_MSG_DB_DESC:
736: ospf_packet_db_desc_dump (s, ntohs (ospfh->length));
737: break;
738: case OSPF_MSG_LS_REQ:
739: ospf_packet_ls_req_dump (s, ntohs (ospfh->length));
740: break;
741: case OSPF_MSG_LS_UPD:
742: ospf_packet_ls_upd_dump (s, ntohs (ospfh->length));
743: break;
744: case OSPF_MSG_LS_ACK:
745: ospf_packet_ls_ack_dump (s, ntohs (ospfh->length));
746: break;
747: default:
748: break;
749: }
750:
751: stream_set_getp (s, gp);
752: }
753:
1.1.1.3 ! misho 754:
1.1 misho 755: /*
756: [no] debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)
757: [send|recv [detail]]
758: */
759: DEFUN (debug_ospf_packet,
760: debug_ospf_packet_all_cmd,
761: "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)",
762: DEBUG_STR
763: OSPF_STR
764: "OSPF packets\n"
765: "OSPF Hello\n"
766: "OSPF Database Description\n"
767: "OSPF Link State Request\n"
768: "OSPF Link State Update\n"
769: "OSPF Link State Acknowledgment\n"
770: "OSPF all packets\n")
771: {
772: int type = 0;
773: int flag = 0;
774: int i;
775:
776: assert (argc > 0);
777:
778: /* Check packet type. */
779: if (strncmp (argv[0], "h", 1) == 0)
780: type = OSPF_DEBUG_HELLO;
781: else if (strncmp (argv[0], "d", 1) == 0)
782: type = OSPF_DEBUG_DB_DESC;
783: else if (strncmp (argv[0], "ls-r", 4) == 0)
784: type = OSPF_DEBUG_LS_REQ;
785: else if (strncmp (argv[0], "ls-u", 4) == 0)
786: type = OSPF_DEBUG_LS_UPD;
787: else if (strncmp (argv[0], "ls-a", 4) == 0)
788: type = OSPF_DEBUG_LS_ACK;
789: else if (strncmp (argv[0], "a", 1) == 0)
790: type = OSPF_DEBUG_ALL;
791:
792: /* Default, both send and recv. */
793: if (argc == 1)
794: flag = OSPF_DEBUG_SEND | OSPF_DEBUG_RECV;
795:
796: /* send or recv. */
797: if (argc >= 2)
798: {
799: if (strncmp (argv[1], "s", 1) == 0)
800: flag = OSPF_DEBUG_SEND;
801: else if (strncmp (argv[1], "r", 1) == 0)
802: flag = OSPF_DEBUG_RECV;
803: else if (strncmp (argv[1], "d", 1) == 0)
804: flag = OSPF_DEBUG_SEND | OSPF_DEBUG_RECV | OSPF_DEBUG_DETAIL;
805: }
806:
807: /* detail. */
808: if (argc == 3)
809: if (strncmp (argv[2], "d", 1) == 0)
810: flag |= OSPF_DEBUG_DETAIL;
811:
812: for (i = 0; i < 5; i++)
813: if (type & (0x01 << i))
814: {
815: if (vty->node == CONFIG_NODE)
816: DEBUG_PACKET_ON (i, flag);
817: else
818: TERM_DEBUG_PACKET_ON (i, flag);
819: }
820:
821: return CMD_SUCCESS;
822: }
823:
824: ALIAS (debug_ospf_packet,
825: debug_ospf_packet_send_recv_cmd,
826: "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail)",
827: "Debugging functions\n"
828: "OSPF information\n"
829: "OSPF packets\n"
830: "OSPF Hello\n"
831: "OSPF Database Description\n"
832: "OSPF Link State Request\n"
833: "OSPF Link State Update\n"
834: "OSPF Link State Acknowledgment\n"
835: "OSPF all packets\n"
836: "Packet sent\n"
837: "Packet received\n"
838: "Detail information\n")
839:
840: ALIAS (debug_ospf_packet,
841: debug_ospf_packet_send_recv_detail_cmd,
842: "debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|)",
843: "Debugging functions\n"
844: "OSPF information\n"
845: "OSPF packets\n"
846: "OSPF Hello\n"
847: "OSPF Database Description\n"
848: "OSPF Link State Request\n"
849: "OSPF Link State Update\n"
850: "OSPF Link State Acknowledgment\n"
851: "OSPF all packets\n"
852: "Packet sent\n"
853: "Packet received\n"
854: "Detail Information\n")
855:
856:
857: DEFUN (no_debug_ospf_packet,
858: no_debug_ospf_packet_all_cmd,
859: "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all)",
860: NO_STR
861: DEBUG_STR
862: OSPF_STR
863: "OSPF packets\n"
864: "OSPF Hello\n"
865: "OSPF Database Description\n"
866: "OSPF Link State Request\n"
867: "OSPF Link State Update\n"
868: "OSPF Link State Acknowledgment\n"
869: "OSPF all packets\n")
870: {
871: int type = 0;
872: int flag = 0;
873: int i;
874:
875: assert (argc > 0);
876:
877: /* Check packet type. */
878: if (strncmp (argv[0], "h", 1) == 0)
879: type = OSPF_DEBUG_HELLO;
880: else if (strncmp (argv[0], "d", 1) == 0)
881: type = OSPF_DEBUG_DB_DESC;
882: else if (strncmp (argv[0], "ls-r", 4) == 0)
883: type = OSPF_DEBUG_LS_REQ;
884: else if (strncmp (argv[0], "ls-u", 4) == 0)
885: type = OSPF_DEBUG_LS_UPD;
886: else if (strncmp (argv[0], "ls-a", 4) == 0)
887: type = OSPF_DEBUG_LS_ACK;
888: else if (strncmp (argv[0], "a", 1) == 0)
889: type = OSPF_DEBUG_ALL;
890:
891: /* Default, both send and recv. */
892: if (argc == 1)
893: flag = OSPF_DEBUG_SEND | OSPF_DEBUG_RECV | OSPF_DEBUG_DETAIL ;
894:
895: /* send or recv. */
896: if (argc == 2)
897: {
898: if (strncmp (argv[1], "s", 1) == 0)
899: flag = OSPF_DEBUG_SEND | OSPF_DEBUG_DETAIL;
900: else if (strncmp (argv[1], "r", 1) == 0)
901: flag = OSPF_DEBUG_RECV | OSPF_DEBUG_DETAIL;
902: else if (strncmp (argv[1], "d", 1) == 0)
1.1.1.3 ! misho 903: flag = OSPF_DEBUG_SEND | OSPF_DEBUG_RECV | OSPF_DEBUG_DETAIL;
1.1 misho 904: }
905:
906: /* detail. */
907: if (argc == 3)
908: if (strncmp (argv[2], "d", 1) == 0)
909: flag = OSPF_DEBUG_DETAIL;
910:
911: for (i = 0; i < 5; i++)
912: if (type & (0x01 << i))
913: {
914: if (vty->node == CONFIG_NODE)
915: DEBUG_PACKET_OFF (i, flag);
916: else
917: TERM_DEBUG_PACKET_OFF (i, flag);
918: }
919:
920: #ifdef DEBUG
921: /*
922: for (i = 0; i < 5; i++)
923: zlog_debug ("flag[%d] = %d", i, ospf_debug_packet[i]);
924: */
925: #endif /* DEBUG */
926:
927: return CMD_SUCCESS;
928: }
929:
930: ALIAS (no_debug_ospf_packet,
931: no_debug_ospf_packet_send_recv_cmd,
932: "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv|detail)",
933: NO_STR
934: "Debugging functions\n"
935: "OSPF information\n"
936: "OSPF packets\n"
937: "OSPF Hello\n"
938: "OSPF Database Description\n"
939: "OSPF Link State Request\n"
940: "OSPF Link State Update\n"
941: "OSPF Link State Acknowledgment\n"
942: "OSPF all packets\n"
943: "Packet sent\n"
944: "Packet received\n"
945: "Detail Information\n")
946:
947: ALIAS (no_debug_ospf_packet,
948: no_debug_ospf_packet_send_recv_detail_cmd,
949: "no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) (detail|)",
950: NO_STR
951: "Debugging functions\n"
952: "OSPF information\n"
953: "OSPF packets\n"
954: "OSPF Hello\n"
955: "OSPF Database Description\n"
956: "OSPF Link State Request\n"
957: "OSPF Link State Update\n"
958: "OSPF Link State Acknowledgment\n"
959: "OSPF all packets\n"
960: "Packet sent\n"
961: "Packet received\n"
962: "Detail Information\n")
963:
1.1.1.3 ! misho 964:
1.1 misho 965: DEFUN (debug_ospf_ism,
966: debug_ospf_ism_cmd,
967: "debug ospf ism",
968: DEBUG_STR
969: OSPF_STR
970: "OSPF Interface State Machine\n")
971: {
972: if (vty->node == CONFIG_NODE)
973: {
974: if (argc == 0)
975: DEBUG_ON (ism, ISM);
976: else if (argc == 1)
977: {
978: if (strncmp (argv[0], "s", 1) == 0)
979: DEBUG_ON (ism, ISM_STATUS);
980: else if (strncmp (argv[0], "e", 1) == 0)
981: DEBUG_ON (ism, ISM_EVENTS);
982: else if (strncmp (argv[0], "t", 1) == 0)
983: DEBUG_ON (ism, ISM_TIMERS);
984: }
985:
986: return CMD_SUCCESS;
987: }
988:
989: /* ENABLE_NODE. */
990: if (argc == 0)
991: TERM_DEBUG_ON (ism, ISM);
992: else if (argc == 1)
993: {
994: if (strncmp (argv[0], "s", 1) == 0)
995: TERM_DEBUG_ON (ism, ISM_STATUS);
996: else if (strncmp (argv[0], "e", 1) == 0)
997: TERM_DEBUG_ON (ism, ISM_EVENTS);
998: else if (strncmp (argv[0], "t", 1) == 0)
999: TERM_DEBUG_ON (ism, ISM_TIMERS);
1000: }
1001:
1002: return CMD_SUCCESS;
1003: }
1004:
1005: ALIAS (debug_ospf_ism,
1006: debug_ospf_ism_sub_cmd,
1007: "debug ospf ism (status|events|timers)",
1008: DEBUG_STR
1009: OSPF_STR
1010: "OSPF Interface State Machine\n"
1011: "ISM Status Information\n"
1012: "ISM Event Information\n"
1013: "ISM TImer Information\n")
1014:
1015: DEFUN (no_debug_ospf_ism,
1016: no_debug_ospf_ism_cmd,
1017: "no debug ospf ism",
1018: NO_STR
1019: DEBUG_STR
1020: OSPF_STR
1021: "OSPF Interface State Machine")
1022: {
1023: if (vty->node == CONFIG_NODE)
1024: {
1025: if (argc == 0)
1026: DEBUG_OFF (ism, ISM);
1027: else if (argc == 1)
1028: {
1029: if (strncmp (argv[0], "s", 1) == 0)
1030: DEBUG_OFF (ism, ISM_STATUS);
1031: else if (strncmp (argv[0], "e", 1) == 0)
1032: DEBUG_OFF (ism, ISM_EVENTS);
1033: else if (strncmp (argv[0], "t", 1) == 0)
1034: DEBUG_OFF (ism, ISM_TIMERS);
1035: }
1036: return CMD_SUCCESS;
1037: }
1038:
1039: /* ENABLE_NODE. */
1040: if (argc == 0)
1041: TERM_DEBUG_OFF (ism, ISM);
1042: else if (argc == 1)
1043: {
1044: if (strncmp (argv[0], "s", 1) == 0)
1045: TERM_DEBUG_OFF (ism, ISM_STATUS);
1046: else if (strncmp (argv[0], "e", 1) == 0)
1047: TERM_DEBUG_OFF (ism, ISM_EVENTS);
1048: else if (strncmp (argv[0], "t", 1) == 0)
1049: TERM_DEBUG_OFF (ism, ISM_TIMERS);
1050: }
1051:
1052: return CMD_SUCCESS;
1053: }
1054:
1055: ALIAS (no_debug_ospf_ism,
1056: no_debug_ospf_ism_sub_cmd,
1057: "no debug ospf ism (status|events|timers)",
1058: NO_STR
1059: "Debugging functions\n"
1060: "OSPF information\n"
1061: "OSPF Interface State Machine\n"
1062: "ISM Status Information\n"
1063: "ISM Event Information\n"
1064: "ISM Timer Information\n")
1065:
1.1.1.3 ! misho 1066:
1.1 misho 1067: DEFUN (debug_ospf_nsm,
1068: debug_ospf_nsm_cmd,
1069: "debug ospf nsm",
1070: DEBUG_STR
1071: OSPF_STR
1072: "OSPF Neighbor State Machine\n")
1073: {
1074: if (vty->node == CONFIG_NODE)
1075: {
1076: if (argc == 0)
1077: DEBUG_ON (nsm, NSM);
1078: else if (argc == 1)
1079: {
1080: if (strncmp (argv[0], "s", 1) == 0)
1081: DEBUG_ON (nsm, NSM_STATUS);
1082: else if (strncmp (argv[0], "e", 1) == 0)
1083: DEBUG_ON (nsm, NSM_EVENTS);
1084: else if (strncmp (argv[0], "t", 1) == 0)
1085: DEBUG_ON (nsm, NSM_TIMERS);
1086: }
1087:
1088: return CMD_SUCCESS;
1089: }
1090:
1091: /* ENABLE_NODE. */
1092: if (argc == 0)
1093: TERM_DEBUG_ON (nsm, NSM);
1094: else if (argc == 1)
1095: {
1096: if (strncmp (argv[0], "s", 1) == 0)
1097: TERM_DEBUG_ON (nsm, NSM_STATUS);
1098: else if (strncmp (argv[0], "e", 1) == 0)
1099: TERM_DEBUG_ON (nsm, NSM_EVENTS);
1100: else if (strncmp (argv[0], "t", 1) == 0)
1101: TERM_DEBUG_ON (nsm, NSM_TIMERS);
1102: }
1103:
1104: return CMD_SUCCESS;
1105: }
1106:
1107: ALIAS (debug_ospf_nsm,
1108: debug_ospf_nsm_sub_cmd,
1109: "debug ospf nsm (status|events|timers)",
1110: DEBUG_STR
1111: OSPF_STR
1112: "OSPF Neighbor State Machine\n"
1113: "NSM Status Information\n"
1114: "NSM Event Information\n"
1115: "NSM Timer Information\n")
1116:
1117: DEFUN (no_debug_ospf_nsm,
1118: no_debug_ospf_nsm_cmd,
1119: "no debug ospf nsm",
1120: NO_STR
1121: DEBUG_STR
1122: OSPF_STR
1123: "OSPF Neighbor State Machine")
1124: {
1125: if (vty->node == CONFIG_NODE)
1126: {
1127: if (argc == 0)
1128: DEBUG_OFF (nsm, NSM);
1129: else if (argc == 1)
1130: {
1131: if (strncmp (argv[0], "s", 1) == 0)
1132: DEBUG_OFF (nsm, NSM_STATUS);
1133: else if (strncmp (argv[0], "e", 1) == 0)
1134: DEBUG_OFF (nsm, NSM_EVENTS);
1135: else if (strncmp (argv[0], "t", 1) == 0)
1136: DEBUG_OFF (nsm, NSM_TIMERS);
1137: }
1138:
1139: return CMD_SUCCESS;
1140: }
1141:
1142: /* ENABLE_NODE. */
1143: if (argc == 0)
1144: TERM_DEBUG_OFF (nsm, NSM);
1145: else if (argc == 1)
1146: {
1147: if (strncmp (argv[0], "s", 1) == 0)
1148: TERM_DEBUG_OFF (nsm, NSM_STATUS);
1149: else if (strncmp (argv[0], "e", 1) == 0)
1150: TERM_DEBUG_OFF (nsm, NSM_EVENTS);
1151: else if (strncmp (argv[0], "t", 1) == 0)
1152: TERM_DEBUG_OFF (nsm, NSM_TIMERS);
1153: }
1154:
1155: return CMD_SUCCESS;
1156: }
1157:
1158: ALIAS (no_debug_ospf_nsm,
1159: no_debug_ospf_nsm_sub_cmd,
1160: "no debug ospf nsm (status|events|timers)",
1161: NO_STR
1162: "Debugging functions\n"
1163: "OSPF information\n"
1164: "OSPF Interface State Machine\n"
1165: "NSM Status Information\n"
1166: "NSM Event Information\n"
1167: "NSM Timer Information\n")
1168:
1.1.1.3 ! misho 1169:
1.1 misho 1170: DEFUN (debug_ospf_lsa,
1171: debug_ospf_lsa_cmd,
1172: "debug ospf lsa",
1173: DEBUG_STR
1174: OSPF_STR
1175: "OSPF Link State Advertisement\n")
1176: {
1177: if (vty->node == CONFIG_NODE)
1178: {
1179: if (argc == 0)
1180: DEBUG_ON (lsa, LSA);
1181: else if (argc == 1)
1182: {
1183: if (strncmp (argv[0], "g", 1) == 0)
1184: DEBUG_ON (lsa, LSA_GENERATE);
1185: else if (strncmp (argv[0], "f", 1) == 0)
1186: DEBUG_ON (lsa, LSA_FLOODING);
1187: else if (strncmp (argv[0], "i", 1) == 0)
1188: DEBUG_ON (lsa, LSA_INSTALL);
1189: else if (strncmp (argv[0], "r", 1) == 0)
1190: DEBUG_ON (lsa, LSA_REFRESH);
1191: }
1192:
1193: return CMD_SUCCESS;
1194: }
1195:
1196: /* ENABLE_NODE. */
1197: if (argc == 0)
1198: TERM_DEBUG_ON (lsa, LSA);
1199: else if (argc == 1)
1200: {
1201: if (strncmp (argv[0], "g", 1) == 0)
1202: TERM_DEBUG_ON (lsa, LSA_GENERATE);
1203: else if (strncmp (argv[0], "f", 1) == 0)
1204: TERM_DEBUG_ON (lsa, LSA_FLOODING);
1205: else if (strncmp (argv[0], "i", 1) == 0)
1206: TERM_DEBUG_ON (lsa, LSA_INSTALL);
1207: else if (strncmp (argv[0], "r", 1) == 0)
1208: TERM_DEBUG_ON (lsa, LSA_REFRESH);
1209: }
1210:
1211: return CMD_SUCCESS;
1212: }
1213:
1214: ALIAS (debug_ospf_lsa,
1215: debug_ospf_lsa_sub_cmd,
1216: "debug ospf lsa (generate|flooding|install|refresh)",
1217: DEBUG_STR
1218: OSPF_STR
1219: "OSPF Link State Advertisement\n"
1220: "LSA Generation\n"
1221: "LSA Flooding\n"
1222: "LSA Install/Delete\n"
1223: "LSA Refresh\n")
1224:
1225: DEFUN (no_debug_ospf_lsa,
1226: no_debug_ospf_lsa_cmd,
1227: "no debug ospf lsa",
1228: NO_STR
1229: DEBUG_STR
1230: OSPF_STR
1231: "OSPF Link State Advertisement\n")
1232: {
1233: if (vty->node == CONFIG_NODE)
1234: {
1235: if (argc == 0)
1236: DEBUG_OFF (lsa, LSA);
1237: else if (argc == 1)
1238: {
1239: if (strncmp (argv[0], "g", 1) == 0)
1240: DEBUG_OFF (lsa, LSA_GENERATE);
1241: else if (strncmp (argv[0], "f", 1) == 0)
1242: DEBUG_OFF (lsa, LSA_FLOODING);
1243: else if (strncmp (argv[0], "i", 1) == 0)
1244: DEBUG_OFF (lsa, LSA_INSTALL);
1245: else if (strncmp (argv[0], "r", 1) == 0)
1246: DEBUG_OFF (lsa, LSA_REFRESH);
1247: }
1248:
1249: return CMD_SUCCESS;
1250: }
1251:
1252: /* ENABLE_NODE. */
1253: if (argc == 0)
1254: TERM_DEBUG_OFF (lsa, LSA);
1255: else if (argc == 1)
1256: {
1257: if (strncmp (argv[0], "g", 1) == 0)
1258: TERM_DEBUG_OFF (lsa, LSA_GENERATE);
1259: else if (strncmp (argv[0], "f", 1) == 0)
1260: TERM_DEBUG_OFF (lsa, LSA_FLOODING);
1261: else if (strncmp (argv[0], "i", 1) == 0)
1262: TERM_DEBUG_OFF (lsa, LSA_INSTALL);
1263: else if (strncmp (argv[0], "r", 1) == 0)
1264: TERM_DEBUG_OFF (lsa, LSA_REFRESH);
1265: }
1266:
1267: return CMD_SUCCESS;
1268: }
1269:
1270: ALIAS (no_debug_ospf_lsa,
1271: no_debug_ospf_lsa_sub_cmd,
1272: "no debug ospf lsa (generate|flooding|install|refresh)",
1273: NO_STR
1274: DEBUG_STR
1275: OSPF_STR
1276: "OSPF Link State Advertisement\n"
1277: "LSA Generation\n"
1278: "LSA Flooding\n"
1279: "LSA Install/Delete\n"
1280: "LSA Refres\n")
1281:
1.1.1.3 ! misho 1282:
1.1 misho 1283: DEFUN (debug_ospf_zebra,
1284: debug_ospf_zebra_cmd,
1285: "debug ospf zebra",
1286: DEBUG_STR
1287: OSPF_STR
1288: "OSPF Zebra information\n")
1289: {
1290: if (vty->node == CONFIG_NODE)
1291: {
1292: if (argc == 0)
1293: DEBUG_ON (zebra, ZEBRA);
1294: else if (argc == 1)
1295: {
1296: if (strncmp (argv[0], "i", 1) == 0)
1297: DEBUG_ON (zebra, ZEBRA_INTERFACE);
1298: else if (strncmp (argv[0], "r", 1) == 0)
1299: DEBUG_ON (zebra, ZEBRA_REDISTRIBUTE);
1300: }
1301:
1302: return CMD_SUCCESS;
1303: }
1304:
1305: /* ENABLE_NODE. */
1306: if (argc == 0)
1307: TERM_DEBUG_ON (zebra, ZEBRA);
1308: else if (argc == 1)
1309: {
1310: if (strncmp (argv[0], "i", 1) == 0)
1311: TERM_DEBUG_ON (zebra, ZEBRA_INTERFACE);
1312: else if (strncmp (argv[0], "r", 1) == 0)
1313: TERM_DEBUG_ON (zebra, ZEBRA_REDISTRIBUTE);
1314: }
1315:
1316: return CMD_SUCCESS;
1317: }
1318:
1319: ALIAS (debug_ospf_zebra,
1320: debug_ospf_zebra_sub_cmd,
1321: "debug ospf zebra (interface|redistribute)",
1322: DEBUG_STR
1323: OSPF_STR
1324: "OSPF Zebra information\n"
1325: "Zebra interface\n"
1326: "Zebra redistribute\n")
1327:
1328: DEFUN (no_debug_ospf_zebra,
1329: no_debug_ospf_zebra_cmd,
1330: "no debug ospf zebra",
1331: NO_STR
1332: DEBUG_STR
1333: OSPF_STR
1334: "OSPF Zebra information\n")
1335: {
1336: if (vty->node == CONFIG_NODE)
1337: {
1338: if (argc == 0)
1339: DEBUG_OFF (zebra, ZEBRA);
1340: else if (argc == 1)
1341: {
1342: if (strncmp (argv[0], "i", 1) == 0)
1343: DEBUG_OFF (zebra, ZEBRA_INTERFACE);
1344: else if (strncmp (argv[0], "r", 1) == 0)
1345: DEBUG_OFF (zebra, ZEBRA_REDISTRIBUTE);
1346: }
1347:
1348: return CMD_SUCCESS;
1349: }
1350:
1351: /* ENABLE_NODE. */
1352: if (argc == 0)
1353: TERM_DEBUG_OFF (zebra, ZEBRA);
1354: else if (argc == 1)
1355: {
1356: if (strncmp (argv[0], "i", 1) == 0)
1357: TERM_DEBUG_OFF (zebra, ZEBRA_INTERFACE);
1358: else if (strncmp (argv[0], "r", 1) == 0)
1359: TERM_DEBUG_OFF (zebra, ZEBRA_REDISTRIBUTE);
1360: }
1361:
1362: return CMD_SUCCESS;
1363: }
1364:
1365: ALIAS (no_debug_ospf_zebra,
1366: no_debug_ospf_zebra_sub_cmd,
1367: "no debug ospf zebra (interface|redistribute)",
1368: NO_STR
1369: DEBUG_STR
1370: OSPF_STR
1371: "OSPF Zebra information\n"
1372: "Zebra interface\n"
1373: "Zebra redistribute\n")
1.1.1.3 ! misho 1374:
1.1 misho 1375: DEFUN (debug_ospf_event,
1376: debug_ospf_event_cmd,
1377: "debug ospf event",
1378: DEBUG_STR
1379: OSPF_STR
1380: "OSPF event information\n")
1381: {
1382: if (vty->node == CONFIG_NODE)
1383: CONF_DEBUG_ON (event, EVENT);
1384: TERM_DEBUG_ON (event, EVENT);
1385: return CMD_SUCCESS;
1386: }
1387:
1388: DEFUN (no_debug_ospf_event,
1389: no_debug_ospf_event_cmd,
1390: "no debug ospf event",
1391: NO_STR
1392: DEBUG_STR
1393: OSPF_STR
1394: "OSPF event information\n")
1395: {
1396: if (vty->node == CONFIG_NODE)
1397: CONF_DEBUG_OFF (event, EVENT);
1398: TERM_DEBUG_OFF (event, EVENT);
1399: return CMD_SUCCESS;
1400: }
1401:
1402: DEFUN (debug_ospf_nssa,
1403: debug_ospf_nssa_cmd,
1404: "debug ospf nssa",
1405: DEBUG_STR
1406: OSPF_STR
1407: "OSPF nssa information\n")
1408: {
1409: if (vty->node == CONFIG_NODE)
1410: CONF_DEBUG_ON (nssa, NSSA);
1411: TERM_DEBUG_ON (nssa, NSSA);
1412: return CMD_SUCCESS;
1413: }
1414:
1415: DEFUN (no_debug_ospf_nssa,
1416: no_debug_ospf_nssa_cmd,
1417: "no debug ospf nssa",
1418: NO_STR
1419: DEBUG_STR
1420: OSPF_STR
1421: "OSPF nssa information\n")
1422: {
1423: if (vty->node == CONFIG_NODE)
1424: CONF_DEBUG_OFF (nssa, NSSA);
1425: TERM_DEBUG_OFF (nssa, NSSA);
1426: return CMD_SUCCESS;
1427: }
1428:
1.1.1.3 ! misho 1429:
1.1 misho 1430: DEFUN (show_debugging_ospf,
1431: show_debugging_ospf_cmd,
1432: "show debugging ospf",
1433: SHOW_STR
1434: DEBUG_STR
1435: OSPF_STR)
1436: {
1437: int i;
1438:
1439: vty_out (vty, "OSPF debugging status:%s", VTY_NEWLINE);
1440:
1441: /* Show debug status for events. */
1442: if (IS_DEBUG_OSPF(event,EVENT))
1443: vty_out (vty, " OSPF event debugging is on%s", VTY_NEWLINE);
1444:
1445: /* Show debug status for ISM. */
1446: if (IS_DEBUG_OSPF (ism, ISM) == OSPF_DEBUG_ISM)
1447: vty_out (vty, " OSPF ISM debugging is on%s", VTY_NEWLINE);
1448: else
1449: {
1450: if (IS_DEBUG_OSPF (ism, ISM_STATUS))
1451: vty_out (vty, " OSPF ISM status debugging is on%s", VTY_NEWLINE);
1452: if (IS_DEBUG_OSPF (ism, ISM_EVENTS))
1453: vty_out (vty, " OSPF ISM event debugging is on%s", VTY_NEWLINE);
1454: if (IS_DEBUG_OSPF (ism, ISM_TIMERS))
1455: vty_out (vty, " OSPF ISM timer debugging is on%s", VTY_NEWLINE);
1456: }
1457:
1458: /* Show debug status for NSM. */
1459: if (IS_DEBUG_OSPF (nsm, NSM) == OSPF_DEBUG_NSM)
1460: vty_out (vty, " OSPF NSM debugging is on%s", VTY_NEWLINE);
1461: else
1462: {
1463: if (IS_DEBUG_OSPF (nsm, NSM_STATUS))
1464: vty_out (vty, " OSPF NSM status debugging is on%s", VTY_NEWLINE);
1465: if (IS_DEBUG_OSPF (nsm, NSM_EVENTS))
1466: vty_out (vty, " OSPF NSM event debugging is on%s", VTY_NEWLINE);
1467: if (IS_DEBUG_OSPF (nsm, NSM_TIMERS))
1468: vty_out (vty, " OSPF NSM timer debugging is on%s", VTY_NEWLINE);
1469: }
1470:
1471: /* Show debug status for OSPF Packets. */
1472: for (i = 0; i < 5; i++)
1473: if (IS_DEBUG_OSPF_PACKET (i, SEND) && IS_DEBUG_OSPF_PACKET (i, RECV))
1474: {
1475: vty_out (vty, " OSPF packet %s%s debugging is on%s",
1.1.1.2 misho 1476: LOOKUP (ospf_packet_type_str, i + 1),
1.1 misho 1477: IS_DEBUG_OSPF_PACKET (i, DETAIL) ? " detail" : "",
1478: VTY_NEWLINE);
1479: }
1480: else
1481: {
1482: if (IS_DEBUG_OSPF_PACKET (i, SEND))
1483: vty_out (vty, " OSPF packet %s send%s debugging is on%s",
1.1.1.2 misho 1484: LOOKUP (ospf_packet_type_str, i + 1),
1.1 misho 1485: IS_DEBUG_OSPF_PACKET (i, DETAIL) ? " detail" : "",
1486: VTY_NEWLINE);
1487: if (IS_DEBUG_OSPF_PACKET (i, RECV))
1488: vty_out (vty, " OSPF packet %s receive%s debugging is on%s",
1.1.1.2 misho 1489: LOOKUP (ospf_packet_type_str, i + 1),
1.1 misho 1490: IS_DEBUG_OSPF_PACKET (i, DETAIL) ? " detail" : "",
1491: VTY_NEWLINE);
1492: }
1493:
1494: /* Show debug status for OSPF LSAs. */
1495: if (IS_DEBUG_OSPF (lsa, LSA) == OSPF_DEBUG_LSA)
1496: vty_out (vty, " OSPF LSA debugging is on%s", VTY_NEWLINE);
1497: else
1498: {
1499: if (IS_DEBUG_OSPF (lsa, LSA_GENERATE))
1500: vty_out (vty, " OSPF LSA generation debugging is on%s", VTY_NEWLINE);
1501: if (IS_DEBUG_OSPF (lsa, LSA_FLOODING))
1502: vty_out (vty, " OSPF LSA flooding debugging is on%s", VTY_NEWLINE);
1503: if (IS_DEBUG_OSPF (lsa, LSA_INSTALL))
1504: vty_out (vty, " OSPF LSA install debugging is on%s", VTY_NEWLINE);
1505: if (IS_DEBUG_OSPF (lsa, LSA_REFRESH))
1506: vty_out (vty, " OSPF LSA refresh debugging is on%s", VTY_NEWLINE);
1507: }
1508:
1509: /* Show debug status for Zebra. */
1510: if (IS_DEBUG_OSPF (zebra, ZEBRA) == OSPF_DEBUG_ZEBRA)
1511: vty_out (vty, " OSPF Zebra debugging is on%s", VTY_NEWLINE);
1512: else
1513: {
1514: if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
1515: vty_out (vty, " OSPF Zebra interface debugging is on%s", VTY_NEWLINE);
1516: if (IS_DEBUG_OSPF (zebra, ZEBRA_REDISTRIBUTE))
1517: vty_out (vty, " OSPF Zebra redistribute debugging is on%s", VTY_NEWLINE);
1518: }
1519:
1520: /* Show debug status for NSSA. */
1521: if (IS_DEBUG_OSPF (nssa, NSSA) == OSPF_DEBUG_NSSA)
1522: vty_out (vty, " OSPF NSSA debugging is on%s", VTY_NEWLINE);
1523:
1524: return CMD_SUCCESS;
1525: }
1526:
1527: /* Debug node. */
1528: static struct cmd_node debug_node =
1529: {
1530: DEBUG_NODE,
1531: "",
1532: 1 /* VTYSH */
1533: };
1534:
1535: static int
1536: config_write_debug (struct vty *vty)
1537: {
1538: int write = 0;
1539: int i, r;
1540:
1541: const char *type_str[] = {"hello", "dd", "ls-request", "ls-update", "ls-ack"};
1542: const char *detail_str[] = {"", " send", " recv", "", " detail",
1543: " send detail", " recv detail", " detail"};
1544:
1545: /* debug ospf ism (status|events|timers). */
1546: if (IS_CONF_DEBUG_OSPF (ism, ISM) == OSPF_DEBUG_ISM)
1547: vty_out (vty, "debug ospf ism%s", VTY_NEWLINE);
1548: else
1549: {
1550: if (IS_CONF_DEBUG_OSPF (ism, ISM_STATUS))
1551: vty_out (vty, "debug ospf ism status%s", VTY_NEWLINE);
1552: if (IS_CONF_DEBUG_OSPF (ism, ISM_EVENTS))
1553: vty_out (vty, "debug ospf ism event%s", VTY_NEWLINE);
1554: if (IS_CONF_DEBUG_OSPF (ism, ISM_TIMERS))
1555: vty_out (vty, "debug ospf ism timer%s", VTY_NEWLINE);
1556: }
1557:
1558: /* debug ospf nsm (status|events|timers). */
1559: if (IS_CONF_DEBUG_OSPF (nsm, NSM) == OSPF_DEBUG_NSM)
1560: vty_out (vty, "debug ospf nsm%s", VTY_NEWLINE);
1561: else
1562: {
1563: if (IS_CONF_DEBUG_OSPF (nsm, NSM_STATUS))
1564: vty_out (vty, "debug ospf nsm status%s", VTY_NEWLINE);
1565: if (IS_CONF_DEBUG_OSPF (nsm, NSM_EVENTS))
1566: vty_out (vty, "debug ospf nsm event%s", VTY_NEWLINE);
1567: if (IS_CONF_DEBUG_OSPF (nsm, NSM_TIMERS))
1568: vty_out (vty, "debug ospf nsm timer%s", VTY_NEWLINE);
1569: }
1570:
1571: /* debug ospf lsa (generate|flooding|install|refresh). */
1572: if (IS_CONF_DEBUG_OSPF (lsa, LSA) == OSPF_DEBUG_LSA)
1573: vty_out (vty, "debug ospf lsa%s", VTY_NEWLINE);
1574: else
1575: {
1576: if (IS_CONF_DEBUG_OSPF (lsa, LSA_GENERATE))
1577: vty_out (vty, "debug ospf lsa generate%s", VTY_NEWLINE);
1578: if (IS_CONF_DEBUG_OSPF (lsa, LSA_FLOODING))
1579: vty_out (vty, "debug ospf lsa flooding%s", VTY_NEWLINE);
1580: if (IS_CONF_DEBUG_OSPF (lsa, LSA_INSTALL))
1581: vty_out (vty, "debug ospf lsa install%s", VTY_NEWLINE);
1582: if (IS_CONF_DEBUG_OSPF (lsa, LSA_REFRESH))
1583: vty_out (vty, "debug ospf lsa refresh%s", VTY_NEWLINE);
1584:
1585: write = 1;
1586: }
1587:
1588: /* debug ospf zebra (interface|redistribute). */
1589: if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA) == OSPF_DEBUG_ZEBRA)
1590: vty_out (vty, "debug ospf zebra%s", VTY_NEWLINE);
1591: else
1592: {
1593: if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
1594: vty_out (vty, "debug ospf zebra interface%s", VTY_NEWLINE);
1595: if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA_REDISTRIBUTE))
1596: vty_out (vty, "debug ospf zebra redistribute%s", VTY_NEWLINE);
1597:
1598: write = 1;
1599: }
1600:
1601: /* debug ospf event. */
1602: if (IS_CONF_DEBUG_OSPF (event, EVENT) == OSPF_DEBUG_EVENT)
1603: {
1604: vty_out (vty, "debug ospf event%s", VTY_NEWLINE);
1605: write = 1;
1606: }
1607:
1608: /* debug ospf nssa. */
1609: if (IS_CONF_DEBUG_OSPF (nssa, NSSA) == OSPF_DEBUG_NSSA)
1610: {
1611: vty_out (vty, "debug ospf nssa%s", VTY_NEWLINE);
1612: write = 1;
1613: }
1614:
1615: /* debug ospf packet all detail. */
1616: r = OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL;
1617: for (i = 0; i < 5; i++)
1618: r &= conf_debug_ospf_packet[i] & (OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL);
1619: if (r == (OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL))
1620: {
1621: vty_out (vty, "debug ospf packet all detail%s", VTY_NEWLINE);
1622: return 1;
1623: }
1624:
1625: /* debug ospf packet all. */
1626: r = OSPF_DEBUG_SEND_RECV;
1627: for (i = 0; i < 5; i++)
1628: r &= conf_debug_ospf_packet[i] & OSPF_DEBUG_SEND_RECV;
1629: if (r == OSPF_DEBUG_SEND_RECV)
1630: {
1631: vty_out (vty, "debug ospf packet all%s", VTY_NEWLINE);
1632: for (i = 0; i < 5; i++)
1633: if (conf_debug_ospf_packet[i] & OSPF_DEBUG_DETAIL)
1634: vty_out (vty, "debug ospf packet %s detail%s",
1635: type_str[i],
1636: VTY_NEWLINE);
1637: return 1;
1638: }
1639:
1640: /* debug ospf packet (hello|dd|ls-request|ls-update|ls-ack)
1641: (send|recv) (detail). */
1642: for (i = 0; i < 5; i++)
1643: {
1644: if (conf_debug_ospf_packet[i] == 0)
1645: continue;
1646:
1647: vty_out (vty, "debug ospf packet %s%s%s",
1648: type_str[i], detail_str[conf_debug_ospf_packet[i]],
1649: VTY_NEWLINE);
1650: write = 1;
1651: }
1652:
1653: return write;
1654: }
1655:
1656: /* Initialize debug commands. */
1657: void
1658: debug_init ()
1659: {
1660: install_node (&debug_node, config_write_debug);
1661:
1662: install_element (ENABLE_NODE, &show_debugging_ospf_cmd);
1663: install_element (ENABLE_NODE, &debug_ospf_packet_send_recv_detail_cmd);
1664: install_element (ENABLE_NODE, &debug_ospf_packet_send_recv_cmd);
1665: install_element (ENABLE_NODE, &debug_ospf_packet_all_cmd);
1666: install_element (ENABLE_NODE, &debug_ospf_ism_sub_cmd);
1667: install_element (ENABLE_NODE, &debug_ospf_ism_cmd);
1668: install_element (ENABLE_NODE, &debug_ospf_nsm_sub_cmd);
1669: install_element (ENABLE_NODE, &debug_ospf_nsm_cmd);
1670: install_element (ENABLE_NODE, &debug_ospf_lsa_sub_cmd);
1671: install_element (ENABLE_NODE, &debug_ospf_lsa_cmd);
1672: install_element (ENABLE_NODE, &debug_ospf_zebra_sub_cmd);
1673: install_element (ENABLE_NODE, &debug_ospf_zebra_cmd);
1674: install_element (ENABLE_NODE, &debug_ospf_event_cmd);
1675: install_element (ENABLE_NODE, &debug_ospf_nssa_cmd);
1676: install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_detail_cmd);
1677: install_element (ENABLE_NODE, &no_debug_ospf_packet_send_recv_cmd);
1678: install_element (ENABLE_NODE, &no_debug_ospf_packet_all_cmd);
1679: install_element (ENABLE_NODE, &no_debug_ospf_ism_sub_cmd);
1680: install_element (ENABLE_NODE, &no_debug_ospf_ism_cmd);
1681: install_element (ENABLE_NODE, &no_debug_ospf_nsm_sub_cmd);
1682: install_element (ENABLE_NODE, &no_debug_ospf_nsm_cmd);
1683: install_element (ENABLE_NODE, &no_debug_ospf_lsa_sub_cmd);
1684: install_element (ENABLE_NODE, &no_debug_ospf_lsa_cmd);
1685: install_element (ENABLE_NODE, &no_debug_ospf_zebra_sub_cmd);
1686: install_element (ENABLE_NODE, &no_debug_ospf_zebra_cmd);
1687: install_element (ENABLE_NODE, &no_debug_ospf_event_cmd);
1688: install_element (ENABLE_NODE, &no_debug_ospf_nssa_cmd);
1689:
1690: install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_detail_cmd);
1691: install_element (CONFIG_NODE, &debug_ospf_packet_send_recv_cmd);
1692: install_element (CONFIG_NODE, &debug_ospf_packet_all_cmd);
1693: install_element (CONFIG_NODE, &debug_ospf_ism_sub_cmd);
1694: install_element (CONFIG_NODE, &debug_ospf_ism_cmd);
1695: install_element (CONFIG_NODE, &debug_ospf_nsm_sub_cmd);
1696: install_element (CONFIG_NODE, &debug_ospf_nsm_cmd);
1697: install_element (CONFIG_NODE, &debug_ospf_lsa_sub_cmd);
1698: install_element (CONFIG_NODE, &debug_ospf_lsa_cmd);
1699: install_element (CONFIG_NODE, &debug_ospf_zebra_sub_cmd);
1700: install_element (CONFIG_NODE, &debug_ospf_zebra_cmd);
1701: install_element (CONFIG_NODE, &debug_ospf_event_cmd);
1702: install_element (CONFIG_NODE, &debug_ospf_nssa_cmd);
1703: install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_detail_cmd);
1704: install_element (CONFIG_NODE, &no_debug_ospf_packet_send_recv_cmd);
1705: install_element (CONFIG_NODE, &no_debug_ospf_packet_all_cmd);
1706: install_element (CONFIG_NODE, &no_debug_ospf_ism_sub_cmd);
1707: install_element (CONFIG_NODE, &no_debug_ospf_ism_cmd);
1708: install_element (CONFIG_NODE, &no_debug_ospf_nsm_sub_cmd);
1709: install_element (CONFIG_NODE, &no_debug_ospf_nsm_cmd);
1710: install_element (CONFIG_NODE, &no_debug_ospf_lsa_sub_cmd);
1711: install_element (CONFIG_NODE, &no_debug_ospf_lsa_cmd);
1712: install_element (CONFIG_NODE, &no_debug_ospf_zebra_sub_cmd);
1713: install_element (CONFIG_NODE, &no_debug_ospf_zebra_cmd);
1714: install_element (CONFIG_NODE, &no_debug_ospf_event_cmd);
1715: install_element (CONFIG_NODE, &no_debug_ospf_nssa_cmd);
1716: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>