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