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