3 * Copyright (C) 1999, 2000 Toshiaki Takada
5 * This file is part of GNU Zebra.
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
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.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; see the file COPYING; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
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"
45 /* Configuration debug option variables. */
46 unsigned long conf_debug_ospf_packet
[5] = {0, 0, 0, 0, 0};
47 unsigned long conf_debug_ospf_event
= 0;
48 unsigned long conf_debug_ospf_ism
= 0;
49 unsigned long conf_debug_ospf_nsm
= 0;
50 unsigned long conf_debug_ospf_lsa
= 0;
51 unsigned long conf_debug_ospf_zebra
= 0;
52 unsigned long conf_debug_ospf_nssa
= 0;
53 unsigned long conf_debug_ospf_te
= 0;
54 unsigned long conf_debug_ospf_ext
= 0;
55 unsigned long conf_debug_ospf_sr
= 0;
57 /* Enable debug option variables -- valid only session. */
58 unsigned long term_debug_ospf_packet
[5] = {0, 0, 0, 0, 0};
59 unsigned long term_debug_ospf_event
= 0;
60 unsigned long term_debug_ospf_ism
= 0;
61 unsigned long term_debug_ospf_nsm
= 0;
62 unsigned long term_debug_ospf_lsa
= 0;
63 unsigned long term_debug_ospf_zebra
= 0;
64 unsigned long term_debug_ospf_nssa
= 0;
65 unsigned long term_debug_ospf_te
= 0;
66 unsigned long term_debug_ospf_ext
= 0;
67 unsigned long term_debug_ospf_sr
= 0;
69 const char *ospf_redist_string(unsigned int route_type
)
71 return (route_type
== ZEBRA_ROUTE_MAX
) ? "Default"
72 : zebra_route_string(route_type
);
75 #define OSPF_AREA_STRING_MAXLEN 16
76 const char *ospf_area_name_string(struct ospf_area
*area
)
78 static char buf
[OSPF_AREA_STRING_MAXLEN
] = "";
84 area_id
= ntohl(area
->area_id
.s_addr
);
85 snprintf(buf
, OSPF_AREA_STRING_MAXLEN
, "%d.%d.%d.%d",
86 (area_id
>> 24) & 0xff, (area_id
>> 16) & 0xff,
87 (area_id
>> 8) & 0xff, area_id
& 0xff);
91 #define OSPF_AREA_DESC_STRING_MAXLEN 23
92 const char *ospf_area_desc_string(struct ospf_area
*area
)
94 static char buf
[OSPF_AREA_DESC_STRING_MAXLEN
] = "";
98 return "(incomplete)";
100 type
= area
->external_routing
;
103 snprintf(buf
, OSPF_AREA_DESC_STRING_MAXLEN
, "%s [NSSA]",
104 ospf_area_name_string(area
));
107 snprintf(buf
, OSPF_AREA_DESC_STRING_MAXLEN
, "%s [Stub]",
108 ospf_area_name_string(area
));
111 return ospf_area_name_string(area
);
117 #define OSPF_IF_STRING_MAXLEN 40
118 const char *ospf_if_name_string(struct ospf_interface
*oi
)
120 static char buf
[OSPF_IF_STRING_MAXLEN
] = "";
123 if (!oi
|| !oi
->address
)
126 if (oi
->type
== OSPF_IFTYPE_VIRTUALLINK
)
127 return oi
->ifp
->name
;
129 ifaddr
= ntohl(oi
->address
->u
.prefix4
.s_addr
);
130 snprintf(buf
, OSPF_IF_STRING_MAXLEN
, "%s:%d.%d.%d.%d", oi
->ifp
->name
,
131 (ifaddr
>> 24) & 0xff, (ifaddr
>> 16) & 0xff,
132 (ifaddr
>> 8) & 0xff, ifaddr
& 0xff);
137 void ospf_nbr_state_message(struct ospf_neighbor
*nbr
, char *buf
, size_t size
)
140 struct ospf_interface
*oi
= nbr
->oi
;
142 if (IPV4_ADDR_SAME(&DR(oi
), &nbr
->address
.u
.prefix4
))
144 else if (IPV4_ADDR_SAME(&BDR(oi
), &nbr
->address
.u
.prefix4
))
149 snprintf(buf
, size
, "%s/%s",
150 lookup_msg(ospf_nsm_state_msg
, nbr
->state
, NULL
),
151 lookup_msg(ospf_ism_state_msg
, state
, NULL
));
154 const char *ospf_timeval_dump(struct timeval
*t
, char *buf
, size_t size
)
156 /* Making formatted timer strings. */
157 #define MINUTE_IN_SECONDS 60
158 #define HOUR_IN_SECONDS (60*MINUTE_IN_SECONDS)
159 #define DAY_IN_SECONDS (24*HOUR_IN_SECONDS)
160 #define WEEK_IN_SECONDS (7*DAY_IN_SECONDS)
161 unsigned long w
, d
, h
, m
, s
, ms
, us
;
166 w
= d
= h
= m
= s
= ms
= us
= 0;
167 memset(buf
, 0, size
);
173 (void)us
; /* unused */
177 t
->tv_sec
+= ms
/ 1000;
181 if (t
->tv_sec
> WEEK_IN_SECONDS
) {
182 w
= t
->tv_sec
/ WEEK_IN_SECONDS
;
183 t
->tv_sec
-= w
* WEEK_IN_SECONDS
;
186 if (t
->tv_sec
> DAY_IN_SECONDS
) {
187 d
= t
->tv_sec
/ DAY_IN_SECONDS
;
188 t
->tv_sec
-= d
* DAY_IN_SECONDS
;
191 if (t
->tv_sec
>= HOUR_IN_SECONDS
) {
192 h
= t
->tv_sec
/ HOUR_IN_SECONDS
;
193 t
->tv_sec
-= h
* HOUR_IN_SECONDS
;
196 if (t
->tv_sec
>= MINUTE_IN_SECONDS
) {
197 m
= t
->tv_sec
/ MINUTE_IN_SECONDS
;
198 t
->tv_sec
-= m
* MINUTE_IN_SECONDS
;
202 snprintf(buf
, size
, "%luw%1lud", w
, d
);
204 snprintf(buf
, size
, "%luw%1lud%02luh", w
, d
, h
);
206 snprintf(buf
, size
, "%1lud%02luh%02lum", d
, h
, m
);
208 snprintf(buf
, size
, "%luh%02lum%02lds", h
, m
, (long)t
->tv_sec
);
210 snprintf(buf
, size
, "%lum%02lds", m
, (long)t
->tv_sec
);
212 snprintf(buf
, size
, "%ld.%03lus", (long)t
->tv_sec
, ms
);
214 snprintf(buf
, size
, "%ld usecs", (long)t
->tv_usec
);
219 const char *ospf_timer_dump(struct thread
*t
, char *buf
, size_t size
)
221 struct timeval result
;
225 monotime_until(&t
->u
.sands
, &result
);
226 return ospf_timeval_dump(&result
, buf
, size
);
229 static void ospf_packet_hello_dump(struct stream
*s
, uint16_t length
)
231 struct ospf_hello
*hello
;
234 hello
= (struct ospf_hello
*)stream_pnt(s
);
237 zlog_debug(" NetworkMask %s", inet_ntoa(hello
->network_mask
));
238 zlog_debug(" HelloInterval %d", ntohs(hello
->hello_interval
));
239 zlog_debug(" Options %d (%s)", hello
->options
,
240 ospf_options_dump(hello
->options
));
241 zlog_debug(" RtrPriority %d", hello
->priority
);
242 zlog_debug(" RtrDeadInterval %ld",
243 (unsigned long)ntohl(hello
->dead_interval
));
244 zlog_debug(" DRouter %s", inet_ntoa(hello
->d_router
));
245 zlog_debug(" BDRouter %s", inet_ntoa(hello
->bd_router
));
247 length
-= OSPF_HEADER_SIZE
+ OSPF_HELLO_MIN_SIZE
;
248 zlog_debug(" # Neighbors %d", length
/ 4);
249 for (i
= 0; length
> 0; i
++, length
-= sizeof(struct in_addr
))
250 zlog_debug(" Neighbor %s", inet_ntoa(hello
->neighbors
[i
]));
253 static char *ospf_dd_flags_dump(uint8_t flags
, char *buf
, size_t size
)
255 snprintf(buf
, size
, "%s|%s|%s", (flags
& OSPF_DD_FLAG_I
) ? "I" : "-",
256 (flags
& OSPF_DD_FLAG_M
) ? "M" : "-",
257 (flags
& OSPF_DD_FLAG_MS
) ? "MS" : "-");
262 static char *ospf_router_lsa_flags_dump(uint8_t flags
, char *buf
, size_t size
)
264 snprintf(buf
, size
, "%s|%s|%s",
265 (flags
& ROUTER_LSA_VIRTUAL
) ? "V" : "-",
266 (flags
& ROUTER_LSA_EXTERNAL
) ? "E" : "-",
267 (flags
& ROUTER_LSA_BORDER
) ? "B" : "-");
272 static void ospf_router_lsa_dump(struct stream
*s
, uint16_t length
)
275 struct router_lsa
*rl
;
278 rl
= (struct router_lsa
*)stream_pnt(s
);
280 zlog_debug(" Router-LSA");
281 zlog_debug(" flags %s",
282 ospf_router_lsa_flags_dump(rl
->flags
, buf
, BUFSIZ
));
283 zlog_debug(" # links %d", ntohs(rl
->links
));
285 len
= ntohs(rl
->header
.length
) - OSPF_LSA_HEADER_SIZE
- 4;
286 for (i
= 0; len
> 0; i
++) {
287 zlog_debug(" Link ID %s", inet_ntoa(rl
->link
[i
].link_id
));
288 zlog_debug(" Link Data %s",
289 inet_ntoa(rl
->link
[i
].link_data
));
290 zlog_debug(" Type %d", (uint8_t)rl
->link
[i
].type
);
291 zlog_debug(" TOS %d", (uint8_t)rl
->link
[i
].tos
);
292 zlog_debug(" metric %d", ntohs(rl
->link
[i
].metric
));
298 static void ospf_network_lsa_dump(struct stream
*s
, uint16_t length
)
300 struct network_lsa
*nl
;
303 nl
= (struct network_lsa
*)stream_pnt(s
);
304 cnt
= (ntohs(nl
->header
.length
) - (OSPF_LSA_HEADER_SIZE
+ 4)) / 4;
306 zlog_debug(" Network-LSA");
308 zlog_debug ("LSA total size %d", ntohs (nl->header.length));
309 zlog_debug ("Network-LSA size %d",
310 ntohs (nl->header.length) - OSPF_LSA_HEADER_SIZE);
312 zlog_debug(" Network Mask %s", inet_ntoa(nl
->mask
));
313 zlog_debug(" # Attached Routers %d", cnt
);
314 for (i
= 0; i
< cnt
; i
++)
315 zlog_debug(" Attached Router %s",
316 inet_ntoa(nl
->routers
[i
]));
319 static void ospf_summary_lsa_dump(struct stream
*s
, uint16_t length
)
321 struct summary_lsa
*sl
;
325 sl
= (struct summary_lsa
*)stream_pnt(s
);
327 zlog_debug(" Summary-LSA");
328 zlog_debug(" Network Mask %s", inet_ntoa(sl
->mask
));
330 size
= ntohs(sl
->header
.length
) - OSPF_LSA_HEADER_SIZE
- 4;
331 for (i
= 0; size
> 0; size
-= 4, i
++)
332 zlog_debug(" TOS=%d metric %d", sl
->tos
,
333 GET_METRIC(sl
->metric
));
336 static void ospf_as_external_lsa_dump(struct stream
*s
, uint16_t length
)
338 struct as_external_lsa
*al
;
342 al
= (struct as_external_lsa
*)stream_pnt(s
);
343 zlog_debug(" %s", ospf_lsa_type_msg
[al
->header
.type
].str
);
344 zlog_debug(" Network Mask %s", inet_ntoa(al
->mask
));
346 size
= ntohs(al
->header
.length
) - OSPF_LSA_HEADER_SIZE
- 4;
347 for (i
= 0; size
> 0; size
-= 12, i
++) {
348 zlog_debug(" bit %s TOS=%d metric %d",
349 IS_EXTERNAL_METRIC(al
->e
[i
].tos
) ? "E" : "-",
350 al
->e
[i
].tos
& 0x7f, GET_METRIC(al
->e
[i
].metric
));
351 zlog_debug(" Forwarding address %s",
352 inet_ntoa(al
->e
[i
].fwd_addr
));
353 zlog_debug(" External Route Tag %" ROUTE_TAG_PRI
,
358 static void ospf_lsa_header_list_dump(struct stream
*s
, uint16_t length
)
360 struct lsa_header
*lsa
;
362 zlog_debug(" # LSA Headers %d", length
/ OSPF_LSA_HEADER_SIZE
);
366 lsa
= (struct lsa_header
*)stream_pnt(s
);
367 ospf_lsa_header_dump(lsa
);
369 stream_forward_getp(s
, OSPF_LSA_HEADER_SIZE
);
370 length
-= OSPF_LSA_HEADER_SIZE
;
374 static void ospf_packet_db_desc_dump(struct stream
*s
, uint16_t length
)
376 struct ospf_db_desc
*dd
;
381 gp
= stream_get_getp(s
);
382 dd
= (struct ospf_db_desc
*)stream_pnt(s
);
384 zlog_debug("Database Description");
385 zlog_debug(" Interface MTU %d", ntohs(dd
->mtu
));
386 zlog_debug(" Options %d (%s)", dd
->options
,
387 ospf_options_dump(dd
->options
));
388 zlog_debug(" Flags %d (%s)", dd
->flags
,
389 ospf_dd_flags_dump(dd
->flags
, dd_flags
, sizeof dd_flags
));
390 zlog_debug(" Sequence Number 0x%08lx",
391 (unsigned long)ntohl(dd
->dd_seqnum
));
393 length
-= OSPF_HEADER_SIZE
+ OSPF_DB_DESC_MIN_SIZE
;
395 stream_forward_getp(s
, OSPF_DB_DESC_MIN_SIZE
);
397 ospf_lsa_header_list_dump(s
, length
);
399 stream_set_getp(s
, gp
);
402 static void ospf_packet_ls_req_dump(struct stream
*s
, uint16_t length
)
406 struct in_addr ls_id
;
407 struct in_addr adv_router
;
409 sp
= stream_get_getp(s
);
411 length
-= OSPF_HEADER_SIZE
;
413 zlog_debug("Link State Request");
414 zlog_debug(" # Requests %d", length
/ 12);
416 for (; length
> 0; length
-= 12) {
417 ls_type
= stream_getl(s
);
418 ls_id
.s_addr
= stream_get_ipv4(s
);
419 adv_router
.s_addr
= stream_get_ipv4(s
);
421 zlog_debug(" LS type %d", ls_type
);
422 zlog_debug(" Link State ID %s", inet_ntoa(ls_id
));
423 zlog_debug(" Advertising Router %s", inet_ntoa(adv_router
));
426 stream_set_getp(s
, sp
);
429 static void ospf_packet_ls_upd_dump(struct stream
*s
, uint16_t length
)
432 struct lsa_header
*lsa
;
436 length
-= OSPF_HEADER_SIZE
;
438 sp
= stream_get_getp(s
);
440 count
= stream_getl(s
);
443 zlog_debug("Link State Update");
444 zlog_debug(" # LSAs %d", count
);
446 while (length
> 0 && count
> 0) {
447 if (length
< OSPF_HEADER_SIZE
|| length
% 4 != 0) {
448 zlog_debug(" Remaining %d bytes; Incorrect length.",
453 lsa
= (struct lsa_header
*)stream_pnt(s
);
454 lsa_len
= ntohs(lsa
->length
);
455 ospf_lsa_header_dump(lsa
);
458 case OSPF_ROUTER_LSA
:
459 ospf_router_lsa_dump(s
, length
);
461 case OSPF_NETWORK_LSA
:
462 ospf_network_lsa_dump(s
, length
);
464 case OSPF_SUMMARY_LSA
:
465 case OSPF_ASBR_SUMMARY_LSA
:
466 ospf_summary_lsa_dump(s
, length
);
468 case OSPF_AS_EXTERNAL_LSA
:
469 ospf_as_external_lsa_dump(s
, length
);
471 case OSPF_AS_NSSA_LSA
:
472 ospf_as_external_lsa_dump(s
, length
);
474 case OSPF_OPAQUE_LINK_LSA
:
475 case OSPF_OPAQUE_AREA_LSA
:
476 case OSPF_OPAQUE_AS_LSA
:
477 ospf_opaque_lsa_dump(s
, length
);
483 stream_forward_getp(s
, lsa_len
);
488 stream_set_getp(s
, sp
);
491 static void ospf_packet_ls_ack_dump(struct stream
*s
, uint16_t length
)
495 length
-= OSPF_HEADER_SIZE
;
496 sp
= stream_get_getp(s
);
498 zlog_debug("Link State Acknowledgment");
499 ospf_lsa_header_list_dump(s
, length
);
501 stream_set_getp(s
, sp
);
504 /* Expects header to be in host order */
505 void ospf_ip_header_dump(struct ip
*iph
)
507 /* IP Header dump. */
508 zlog_debug("ip_v %d", iph
->ip_v
);
509 zlog_debug("ip_hl %d", iph
->ip_hl
);
510 zlog_debug("ip_tos %d", iph
->ip_tos
);
511 zlog_debug("ip_len %d", iph
->ip_len
);
512 zlog_debug("ip_id %u", (uint32_t)iph
->ip_id
);
513 zlog_debug("ip_off %u", (uint32_t)iph
->ip_off
);
514 zlog_debug("ip_ttl %d", iph
->ip_ttl
);
515 zlog_debug("ip_p %d", iph
->ip_p
);
516 zlog_debug("ip_sum 0x%x", (uint32_t)iph
->ip_sum
);
517 zlog_debug("ip_src %s", inet_ntoa(iph
->ip_src
));
518 zlog_debug("ip_dst %s", inet_ntoa(iph
->ip_dst
));
521 static void ospf_header_dump(struct ospf_header
*ospfh
)
524 uint16_t auth_type
= ntohs(ospfh
->auth_type
);
526 zlog_debug("Header");
527 zlog_debug(" Version %d", ospfh
->version
);
528 zlog_debug(" Type %d (%s)", ospfh
->type
,
529 lookup_msg(ospf_packet_type_str
, ospfh
->type
, NULL
));
530 zlog_debug(" Packet Len %d", ntohs(ospfh
->length
));
531 zlog_debug(" Router ID %s", inet_ntoa(ospfh
->router_id
));
532 zlog_debug(" Area ID %s", inet_ntoa(ospfh
->area_id
));
533 zlog_debug(" Checksum 0x%x", ntohs(ospfh
->checksum
));
534 zlog_debug(" AuType %s",
535 lookup_msg(ospf_auth_type_str
, auth_type
, NULL
));
540 case OSPF_AUTH_SIMPLE
:
542 strncpy(buf
, (char *)ospfh
->u
.auth_data
, 8);
543 zlog_debug(" Simple Password %s", buf
);
545 case OSPF_AUTH_CRYPTOGRAPHIC
:
546 zlog_debug(" Cryptographic Authentication");
547 zlog_debug(" Key ID %d", ospfh
->u
.crypt
.key_id
);
548 zlog_debug(" Auth Data Len %d", ospfh
->u
.crypt
.auth_data_len
);
549 zlog_debug(" Sequence number %ld",
550 (unsigned long)ntohl(ospfh
->u
.crypt
.crypt_seqnum
));
553 zlog_debug("* This is not supported authentication type");
558 void ospf_packet_dump(struct stream
*s
)
560 struct ospf_header
*ospfh
;
563 /* Preserve pointer. */
564 gp
= stream_get_getp(s
);
566 /* OSPF Header dump. */
567 ospfh
= (struct ospf_header
*)stream_pnt(s
);
569 /* Until detail flag is set, return. */
570 if (!(term_debug_ospf_packet
[ospfh
->type
- 1] & OSPF_DEBUG_DETAIL
))
573 /* Show OSPF header detail. */
574 ospf_header_dump(ospfh
);
575 stream_forward_getp(s
, OSPF_HEADER_SIZE
);
577 switch (ospfh
->type
) {
579 ospf_packet_hello_dump(s
, ntohs(ospfh
->length
));
581 case OSPF_MSG_DB_DESC
:
582 ospf_packet_db_desc_dump(s
, ntohs(ospfh
->length
));
584 case OSPF_MSG_LS_REQ
:
585 ospf_packet_ls_req_dump(s
, ntohs(ospfh
->length
));
587 case OSPF_MSG_LS_UPD
:
588 ospf_packet_ls_upd_dump(s
, ntohs(ospfh
->length
));
590 case OSPF_MSG_LS_ACK
:
591 ospf_packet_ls_ack_dump(s
, ntohs(ospfh
->length
));
597 stream_set_getp(s
, gp
);
600 DEFUN (debug_ospf_packet
,
601 debug_ospf_packet_cmd
,
602 "debug ospf [(1-65535)] packet <hello|dd|ls-request|ls-update|ls-ack|all> [<send [detail]|recv [detail]|detail>]",
608 "OSPF Database Description\n"
609 "OSPF Link State Request\n"
610 "OSPF Link State Update\n"
611 "OSPF Link State Acknowledgment\n"
614 "Detail Information\n"
616 "Detail Information\n"
617 "Detail Information\n")
619 int inst
= (argv
[2]->type
== RANGE_TKN
) ? 1 : 0;
620 int detail
= strmatch(argv
[argc
- 1]->text
, "detail");
621 int send
= strmatch(argv
[argc
- (1 + detail
)]->text
, "send");
622 int recv
= strmatch(argv
[argc
- (1 + detail
)]->text
, "recv");
623 char *packet
= argv
[3 + inst
]->text
;
625 if (inst
) // user passed instance ID
627 if (!ospf_lookup_instance(strtoul(argv
[2]->arg
, NULL
, 10)))
628 return CMD_NOT_MY_INSTANCE
;
635 /* Check packet type. */
636 if (strmatch(packet
, "hello"))
637 type
= OSPF_DEBUG_HELLO
;
638 else if (strmatch(packet
, "dd"))
639 type
= OSPF_DEBUG_DB_DESC
;
640 else if (strmatch(packet
, "ls-request"))
641 type
= OSPF_DEBUG_LS_REQ
;
642 else if (strmatch(packet
, "ls-update"))
643 type
= OSPF_DEBUG_LS_UPD
;
644 else if (strmatch(packet
, "ls-ack"))
645 type
= OSPF_DEBUG_LS_ACK
;
646 else if (strmatch(packet
, "all"))
647 type
= OSPF_DEBUG_ALL
;
650 * (none) = send + recv
651 * detail = send + recv + detail
654 * recv detail = recv + detail
655 * send detail = send + detail
660 flag
|= (send
) ? OSPF_DEBUG_SEND
: 0;
661 flag
|= (recv
) ? OSPF_DEBUG_RECV
: 0;
662 flag
|= (detail
) ? OSPF_DEBUG_DETAIL
: 0;
664 for (i
= 0; i
< 5; i
++)
665 if (type
& (0x01 << i
)) {
666 if (vty
->node
== CONFIG_NODE
)
667 DEBUG_PACKET_ON(i
, flag
);
669 TERM_DEBUG_PACKET_ON(i
, flag
);
675 DEFUN (no_debug_ospf_packet
,
676 no_debug_ospf_packet_cmd
,
677 "no debug ospf [(1-65535)] packet <hello|dd|ls-request|ls-update|ls-ack|all> [<send [detail]|recv [detail]|detail>]",
684 "OSPF Database Description\n"
685 "OSPF Link State Request\n"
686 "OSPF Link State Update\n"
687 "OSPF Link State Acknowledgment\n"
690 "Detail Information\n"
692 "Detail Information\n"
693 "Detail Information\n")
695 int inst
= (argv
[3]->type
== RANGE_TKN
) ? 1 : 0;
696 int detail
= strmatch(argv
[argc
- 1]->text
, "detail");
697 int send
= strmatch(argv
[argc
- (1 + detail
)]->text
, "send");
698 int recv
= strmatch(argv
[argc
- (1 + detail
)]->text
, "recv");
699 char *packet
= argv
[4 + inst
]->text
;
701 if (inst
) // user passed instance ID
703 if (!ospf_lookup_instance(strtoul(argv
[3]->arg
, NULL
, 10)))
704 return CMD_NOT_MY_INSTANCE
;
711 /* Check packet type. */
712 if (strmatch(packet
, "hello"))
713 type
= OSPF_DEBUG_HELLO
;
714 else if (strmatch(packet
, "dd"))
715 type
= OSPF_DEBUG_DB_DESC
;
716 else if (strmatch(packet
, "ls-request"))
717 type
= OSPF_DEBUG_LS_REQ
;
718 else if (strmatch(packet
, "ls-update"))
719 type
= OSPF_DEBUG_LS_UPD
;
720 else if (strmatch(packet
, "ls-ack"))
721 type
= OSPF_DEBUG_LS_ACK
;
722 else if (strmatch(packet
, "all"))
723 type
= OSPF_DEBUG_ALL
;
726 * (none) = send + recv
727 * detail = send + recv + detail
730 * recv detail = recv + detail
731 * send detail = send + detail
736 flag
|= (send
) ? OSPF_DEBUG_SEND
: 0;
737 flag
|= (recv
) ? OSPF_DEBUG_RECV
: 0;
738 flag
|= (detail
) ? OSPF_DEBUG_DETAIL
: 0;
740 for (i
= 0; i
< 5; i
++)
741 if (type
& (0x01 << i
)) {
742 if (vty
->node
== CONFIG_NODE
)
743 DEBUG_PACKET_OFF(i
, flag
);
745 TERM_DEBUG_PACKET_OFF(i
, flag
);
750 for (i = 0; i < 5; i++)
751 zlog_debug ("flag[%d] = %d", i, ospf_debug_packet[i]);
758 DEFUN (debug_ospf_ism
,
760 "debug ospf [(1-65535)] ism [<status|events|timers>]",
764 "OSPF Interface State Machine\n"
765 "ISM Status Information\n"
766 "ISM Event Information\n"
767 "ISM TImer Information\n")
769 int inst
= (argv
[2]->type
== RANGE_TKN
);
770 char *dbgparam
= (argc
== 4 + inst
) ? argv
[argc
- 1]->text
: NULL
;
772 if (inst
) // user passed instance ID
774 if (!ospf_lookup_instance(strtoul(argv
[2]->arg
, NULL
, 10)))
775 return CMD_NOT_MY_INSTANCE
;
778 if (vty
->node
== CONFIG_NODE
) {
782 if (strmatch(dbgparam
, "status"))
783 DEBUG_ON(ism
, ISM_STATUS
);
784 else if (strmatch(dbgparam
, "events"))
785 DEBUG_ON(ism
, ISM_EVENTS
);
786 else if (strmatch(dbgparam
, "timers"))
787 DEBUG_ON(ism
, ISM_TIMERS
);
795 TERM_DEBUG_ON(ism
, ISM
);
797 if (strmatch(dbgparam
, "status"))
798 TERM_DEBUG_ON(ism
, ISM_STATUS
);
799 else if (strmatch(dbgparam
, "events"))
800 TERM_DEBUG_ON(ism
, ISM_EVENTS
);
801 else if (strmatch(dbgparam
, "timers"))
802 TERM_DEBUG_ON(ism
, ISM_TIMERS
);
808 DEFUN (no_debug_ospf_ism
,
809 no_debug_ospf_ism_cmd
,
810 "no debug ospf [(1-65535)] ism [<status|events|timers>]",
815 "OSPF Interface State Machine\n"
816 "ISM Status Information\n"
817 "ISM Event Information\n"
818 "ISM TImer Information\n")
820 int inst
= (argv
[3]->type
== RANGE_TKN
);
821 char *dbgparam
= (argc
== 5 + inst
) ? argv
[argc
- 1]->text
: NULL
;
823 if (inst
) // user passed instance ID
825 if (!ospf_lookup_instance(strtoul(argv
[3]->arg
, NULL
, 10)))
826 return CMD_NOT_MY_INSTANCE
;
829 if (vty
->node
== CONFIG_NODE
) {
833 if (strmatch(dbgparam
, "status"))
834 DEBUG_OFF(ism
, ISM_STATUS
);
835 else if (strmatch(dbgparam
, "events"))
836 DEBUG_OFF(ism
, ISM_EVENTS
);
837 else if (strmatch(dbgparam
, "timers"))
838 DEBUG_OFF(ism
, ISM_TIMERS
);
846 TERM_DEBUG_OFF(ism
, ISM
);
848 if (strmatch(dbgparam
, "status"))
849 TERM_DEBUG_OFF(ism
, ISM_STATUS
);
850 else if (strmatch(dbgparam
, "events"))
851 TERM_DEBUG_OFF(ism
, ISM_EVENTS
);
852 else if (strmatch(dbgparam
, "timers"))
853 TERM_DEBUG_OFF(ism
, ISM_TIMERS
);
859 static int debug_ospf_nsm_common(struct vty
*vty
, int arg_base
, int argc
,
860 struct cmd_token
**argv
)
862 if (vty
->node
== CONFIG_NODE
) {
863 if (argc
== arg_base
+ 0)
865 else if (argc
== arg_base
+ 1) {
866 if (strmatch(argv
[arg_base
]->text
, "status"))
867 DEBUG_ON(nsm
, NSM_STATUS
);
868 else if (strmatch(argv
[arg_base
]->text
, "events"))
869 DEBUG_ON(nsm
, NSM_EVENTS
);
870 else if (strmatch(argv
[arg_base
]->text
, "timers"))
871 DEBUG_ON(nsm
, NSM_TIMERS
);
878 if (argc
== arg_base
+ 0)
879 TERM_DEBUG_ON(nsm
, NSM
);
880 else if (argc
== arg_base
+ 1) {
881 if (strmatch(argv
[arg_base
]->text
, "status"))
882 TERM_DEBUG_ON(nsm
, NSM_STATUS
);
883 else if (strmatch(argv
[arg_base
]->text
, "events"))
884 TERM_DEBUG_ON(nsm
, NSM_EVENTS
);
885 else if (strmatch(argv
[arg_base
]->text
, "timers"))
886 TERM_DEBUG_ON(nsm
, NSM_TIMERS
);
892 DEFUN (debug_ospf_nsm
,
894 "debug ospf nsm [<status|events|timers>]",
897 "OSPF Neighbor State Machine\n"
898 "NSM Status Information\n"
899 "NSM Event Information\n"
900 "NSM Timer Information\n")
902 return debug_ospf_nsm_common(vty
, 3, argc
, argv
);
905 DEFUN (debug_ospf_instance_nsm
,
906 debug_ospf_instance_nsm_cmd
,
907 "debug ospf (1-65535) nsm [<status|events|timers>]",
911 "OSPF Neighbor State Machine\n"
912 "NSM Status Information\n"
913 "NSM Event Information\n"
914 "NSM Timer Information\n")
917 unsigned short instance
= 0;
919 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
920 if (!ospf_lookup_instance(instance
))
923 return debug_ospf_nsm_common(vty
, 4, argc
, argv
);
927 static int no_debug_ospf_nsm_common(struct vty
*vty
, int arg_base
, int argc
,
928 struct cmd_token
**argv
)
931 if (vty
->node
== CONFIG_NODE
) {
932 if (argc
== arg_base
+ 0)
934 else if (argc
== arg_base
+ 1) {
935 if (strmatch(argv
[arg_base
]->text
, "status"))
936 DEBUG_OFF(nsm
, NSM_STATUS
);
937 else if (strmatch(argv
[arg_base
]->text
, "events"))
938 DEBUG_OFF(nsm
, NSM_EVENTS
);
939 else if (strmatch(argv
[arg_base
]->text
, "timers"))
940 DEBUG_OFF(nsm
, NSM_TIMERS
);
947 if (argc
== arg_base
+ 0)
948 TERM_DEBUG_OFF(nsm
, NSM
);
949 else if (argc
== arg_base
+ 1) {
950 if (strmatch(argv
[arg_base
]->text
, "status"))
951 TERM_DEBUG_OFF(nsm
, NSM_STATUS
);
952 else if (strmatch(argv
[arg_base
]->text
, "events"))
953 TERM_DEBUG_OFF(nsm
, NSM_EVENTS
);
954 else if (strmatch(argv
[arg_base
]->text
, "timers"))
955 TERM_DEBUG_OFF(nsm
, NSM_TIMERS
);
961 DEFUN (no_debug_ospf_nsm
,
962 no_debug_ospf_nsm_cmd
,
963 "no debug ospf nsm [<status|events|timers>]",
967 "OSPF Neighbor State Machine\n"
968 "NSM Status Information\n"
969 "NSM Event Information\n"
970 "NSM Timer Information\n")
972 return no_debug_ospf_nsm_common(vty
, 4, argc
, argv
);
976 DEFUN (no_debug_ospf_instance_nsm
,
977 no_debug_ospf_instance_nsm_cmd
,
978 "no debug ospf (1-65535) nsm [<status|events|timers>]",
983 "OSPF Neighbor State Machine\n"
984 "NSM Status Information\n"
985 "NSM Event Information\n"
986 "NSM Timer Information\n")
989 unsigned short instance
= 0;
991 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
992 if (!ospf_lookup_instance(instance
))
993 return CMD_NOT_MY_INSTANCE
;
995 return no_debug_ospf_nsm_common(vty
, 5, argc
, argv
);
999 static int debug_ospf_lsa_common(struct vty
*vty
, int arg_base
, int argc
,
1000 struct cmd_token
**argv
)
1002 if (vty
->node
== CONFIG_NODE
) {
1003 if (argc
== arg_base
+ 0)
1005 else if (argc
== arg_base
+ 1) {
1006 if (strmatch(argv
[arg_base
]->text
, "generate"))
1007 DEBUG_ON(lsa
, LSA_GENERATE
);
1008 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1009 DEBUG_ON(lsa
, LSA_FLOODING
);
1010 else if (strmatch(argv
[arg_base
]->text
, "install"))
1011 DEBUG_ON(lsa
, LSA_INSTALL
);
1012 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1013 DEBUG_ON(lsa
, LSA_REFRESH
);
1020 if (argc
== arg_base
+ 0)
1021 TERM_DEBUG_ON(lsa
, LSA
);
1022 else if (argc
== arg_base
+ 1) {
1023 if (strmatch(argv
[arg_base
]->text
, "generate"))
1024 TERM_DEBUG_ON(lsa
, LSA_GENERATE
);
1025 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1026 TERM_DEBUG_ON(lsa
, LSA_FLOODING
);
1027 else if (strmatch(argv
[arg_base
]->text
, "install"))
1028 TERM_DEBUG_ON(lsa
, LSA_INSTALL
);
1029 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1030 TERM_DEBUG_ON(lsa
, LSA_REFRESH
);
1036 DEFUN (debug_ospf_lsa
,
1038 "debug ospf lsa [<generate|flooding|install|refresh>]",
1041 "OSPF Link State Advertisement\n"
1044 "LSA Install/Delete\n"
1047 return debug_ospf_lsa_common(vty
, 3, argc
, argv
);
1050 DEFUN (debug_ospf_instance_lsa
,
1051 debug_ospf_instance_lsa_cmd
,
1052 "debug ospf (1-65535) lsa [<generate|flooding|install|refresh>]",
1056 "OSPF Link State Advertisement\n"
1059 "LSA Install/Delete\n"
1063 unsigned short instance
= 0;
1065 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1066 if (!ospf_lookup_instance(instance
))
1067 return CMD_NOT_MY_INSTANCE
;
1069 return debug_ospf_lsa_common(vty
, 4, argc
, argv
);
1073 static int no_debug_ospf_lsa_common(struct vty
*vty
, int arg_base
, int argc
,
1074 struct cmd_token
**argv
)
1076 if (vty
->node
== CONFIG_NODE
) {
1077 if (argc
== arg_base
+ 0)
1078 DEBUG_OFF(lsa
, LSA
);
1079 else if (argc
== arg_base
+ 1) {
1080 if (strmatch(argv
[arg_base
]->text
, "generate"))
1081 DEBUG_OFF(lsa
, LSA_GENERATE
);
1082 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1083 DEBUG_OFF(lsa
, LSA_FLOODING
);
1084 else if (strmatch(argv
[arg_base
]->text
, "install"))
1085 DEBUG_OFF(lsa
, LSA_INSTALL
);
1086 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1087 DEBUG_OFF(lsa
, LSA_REFRESH
);
1094 if (argc
== arg_base
+ 0)
1095 TERM_DEBUG_OFF(lsa
, LSA
);
1096 else if (argc
== arg_base
+ 1) {
1097 if (strmatch(argv
[arg_base
]->text
, "generate"))
1098 TERM_DEBUG_OFF(lsa
, LSA_GENERATE
);
1099 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1100 TERM_DEBUG_OFF(lsa
, LSA_FLOODING
);
1101 else if (strmatch(argv
[arg_base
]->text
, "install"))
1102 TERM_DEBUG_OFF(lsa
, LSA_INSTALL
);
1103 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1104 TERM_DEBUG_OFF(lsa
, LSA_REFRESH
);
1110 DEFUN (no_debug_ospf_lsa
,
1111 no_debug_ospf_lsa_cmd
,
1112 "no debug ospf lsa [<generate|flooding|install|refresh>]",
1116 "OSPF Link State Advertisement\n"
1119 "LSA Install/Delete\n"
1122 return no_debug_ospf_lsa_common(vty
, 4, argc
, argv
);
1125 DEFUN (no_debug_ospf_instance_lsa
,
1126 no_debug_ospf_instance_lsa_cmd
,
1127 "no debug ospf (1-65535) lsa [<generate|flooding|install|refresh>]",
1132 "OSPF Link State Advertisement\n"
1135 "LSA Install/Delete\n"
1139 unsigned short instance
= 0;
1141 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1142 if (!ospf_lookup_instance(instance
))
1143 return CMD_NOT_MY_INSTANCE
;
1145 return no_debug_ospf_lsa_common(vty
, 5, argc
, argv
);
1149 static int debug_ospf_zebra_common(struct vty
*vty
, int arg_base
, int argc
,
1150 struct cmd_token
**argv
)
1152 if (vty
->node
== CONFIG_NODE
) {
1153 if (argc
== arg_base
+ 0)
1154 DEBUG_ON(zebra
, ZEBRA
);
1155 else if (argc
== arg_base
+ 1) {
1156 if (strmatch(argv
[arg_base
]->text
, "interface"))
1157 DEBUG_ON(zebra
, ZEBRA_INTERFACE
);
1158 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1159 DEBUG_ON(zebra
, ZEBRA_REDISTRIBUTE
);
1166 if (argc
== arg_base
+ 0)
1167 TERM_DEBUG_ON(zebra
, ZEBRA
);
1168 else if (argc
== arg_base
+ 1) {
1169 if (strmatch(argv
[arg_base
]->text
, "interface"))
1170 TERM_DEBUG_ON(zebra
, ZEBRA_INTERFACE
);
1171 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1172 TERM_DEBUG_ON(zebra
, ZEBRA_REDISTRIBUTE
);
1178 DEFUN (debug_ospf_zebra
,
1179 debug_ospf_zebra_cmd
,
1180 "debug ospf zebra [<interface|redistribute>]",
1185 "Zebra redistribute\n")
1187 return debug_ospf_zebra_common(vty
, 3, argc
, argv
);
1190 DEFUN (debug_ospf_instance_zebra
,
1191 debug_ospf_instance_zebra_cmd
,
1192 "debug ospf (1-65535) zebra [<interface|redistribute>]",
1198 "Zebra redistribute\n")
1201 unsigned short instance
= 0;
1203 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1204 if (!ospf_lookup_instance(instance
))
1205 return CMD_NOT_MY_INSTANCE
;
1207 return debug_ospf_zebra_common(vty
, 4, argc
, argv
);
1211 static int no_debug_ospf_zebra_common(struct vty
*vty
, int arg_base
, int argc
,
1212 struct cmd_token
**argv
)
1214 if (vty
->node
== CONFIG_NODE
) {
1215 if (argc
== arg_base
+ 0)
1216 DEBUG_OFF(zebra
, ZEBRA
);
1217 else if (argc
== arg_base
+ 1) {
1218 if (strmatch(argv
[arg_base
]->text
, "interface"))
1219 DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1220 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1221 DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1228 if (argc
== arg_base
+ 0)
1229 TERM_DEBUG_OFF(zebra
, ZEBRA
);
1230 else if (argc
== arg_base
+ 1) {
1231 if (strmatch(argv
[arg_base
]->text
, "interface"))
1232 TERM_DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1233 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1234 TERM_DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1240 DEFUN (no_debug_ospf_zebra
,
1241 no_debug_ospf_zebra_cmd
,
1242 "no debug ospf zebra [<interface|redistribute>]",
1248 "Zebra redistribute\n")
1250 return no_debug_ospf_zebra_common(vty
, 4, argc
, argv
);
1253 DEFUN (no_debug_ospf_instance_zebra
,
1254 no_debug_ospf_instance_zebra_cmd
,
1255 "no debug ospf (1-65535) zebra [<interface|redistribute>]",
1262 "Zebra redistribute\n")
1265 unsigned short instance
= 0;
1267 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1268 if (!ospf_lookup_instance(instance
))
1271 return no_debug_ospf_zebra_common(vty
, 5, argc
, argv
);
1275 DEFUN (debug_ospf_event
,
1276 debug_ospf_event_cmd
,
1280 "OSPF event information\n")
1282 if (vty
->node
== CONFIG_NODE
)
1283 CONF_DEBUG_ON(event
, EVENT
);
1284 TERM_DEBUG_ON(event
, EVENT
);
1288 DEFUN (no_debug_ospf_event
,
1289 no_debug_ospf_event_cmd
,
1290 "no debug ospf event",
1294 "OSPF event information\n")
1296 if (vty
->node
== CONFIG_NODE
)
1297 CONF_DEBUG_OFF(event
, EVENT
);
1298 TERM_DEBUG_OFF(event
, EVENT
);
1302 DEFUN (debug_ospf_instance_event
,
1303 debug_ospf_instance_event_cmd
,
1304 "debug ospf (1-65535) event",
1308 "OSPF event information\n")
1311 unsigned short instance
= 0;
1313 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1314 if (!ospf_lookup_instance(instance
))
1317 if (vty
->node
== CONFIG_NODE
)
1318 CONF_DEBUG_ON(event
, EVENT
);
1319 TERM_DEBUG_ON(event
, EVENT
);
1323 DEFUN (no_debug_ospf_instance_event
,
1324 no_debug_ospf_instance_event_cmd
,
1325 "no debug ospf (1-65535) event",
1330 "OSPF event information\n")
1333 unsigned short instance
= 0;
1335 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1336 if (!ospf_lookup_instance(instance
))
1339 if (vty
->node
== CONFIG_NODE
)
1340 CONF_DEBUG_OFF(event
, EVENT
);
1341 TERM_DEBUG_OFF(event
, EVENT
);
1345 DEFUN (debug_ospf_nssa
,
1346 debug_ospf_nssa_cmd
,
1350 "OSPF nssa information\n")
1352 if (vty
->node
== CONFIG_NODE
)
1353 CONF_DEBUG_ON(nssa
, NSSA
);
1354 TERM_DEBUG_ON(nssa
, NSSA
);
1358 DEFUN (no_debug_ospf_nssa
,
1359 no_debug_ospf_nssa_cmd
,
1360 "no debug ospf nssa",
1364 "OSPF nssa information\n")
1366 if (vty
->node
== CONFIG_NODE
)
1367 CONF_DEBUG_OFF(nssa
, NSSA
);
1368 TERM_DEBUG_OFF(nssa
, NSSA
);
1372 DEFUN (debug_ospf_instance_nssa
,
1373 debug_ospf_instance_nssa_cmd
,
1374 "debug ospf (1-65535) nssa",
1378 "OSPF nssa information\n")
1381 unsigned short instance
= 0;
1383 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1384 if (!ospf_lookup_instance(instance
))
1387 if (vty
->node
== CONFIG_NODE
)
1388 CONF_DEBUG_ON(nssa
, NSSA
);
1389 TERM_DEBUG_ON(nssa
, NSSA
);
1393 DEFUN (no_debug_ospf_instance_nssa
,
1394 no_debug_ospf_instance_nssa_cmd
,
1395 "no debug ospf (1-65535) nssa",
1400 "OSPF nssa information\n")
1403 unsigned short instance
= 0;
1405 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1406 if (!ospf_lookup_instance(instance
))
1409 if (vty
->node
== CONFIG_NODE
)
1410 CONF_DEBUG_OFF(nssa
, NSSA
);
1411 TERM_DEBUG_OFF(nssa
, NSSA
);
1415 DEFUN (debug_ospf_te
,
1420 "OSPF-TE information\n")
1422 if (vty
->node
== CONFIG_NODE
)
1423 CONF_DEBUG_ON(te
, TE
);
1424 TERM_DEBUG_ON(te
, TE
);
1428 DEFUN (no_debug_ospf_te
,
1429 no_debug_ospf_te_cmd
,
1434 "OSPF-TE information\n")
1436 if (vty
->node
== CONFIG_NODE
)
1437 CONF_DEBUG_OFF(te
, TE
);
1438 TERM_DEBUG_OFF(te
, TE
);
1442 DEFUN (debug_ospf_sr
,
1447 "OSPF-SR information\n")
1449 if (vty
->node
== CONFIG_NODE
)
1450 CONF_DEBUG_ON(sr
, SR
);
1451 TERM_DEBUG_ON(sr
, SR
);
1455 DEFUN (no_debug_ospf_sr
,
1456 no_debug_ospf_sr_cmd
,
1461 "OSPF-SR information\n")
1463 if (vty
->node
== CONFIG_NODE
)
1464 CONF_DEBUG_OFF(sr
, SR
);
1465 TERM_DEBUG_OFF(sr
, SR
);
1469 DEFUN (no_debug_ospf
,
1476 int flag
= OSPF_DEBUG_SEND
| OSPF_DEBUG_RECV
| OSPF_DEBUG_DETAIL
;
1479 if (vty
->node
== CONFIG_NODE
) {
1480 CONF_DEBUG_OFF(event
, EVENT
);
1481 CONF_DEBUG_OFF(nssa
, NSSA
);
1482 DEBUG_OFF(ism
, ISM_EVENTS
);
1483 DEBUG_OFF(ism
, ISM_STATUS
);
1484 DEBUG_OFF(ism
, ISM_TIMERS
);
1485 DEBUG_OFF(lsa
, LSA
);
1486 DEBUG_OFF(lsa
, LSA_FLOODING
);
1487 DEBUG_OFF(lsa
, LSA_GENERATE
);
1488 DEBUG_OFF(lsa
, LSA_INSTALL
);
1489 DEBUG_OFF(lsa
, LSA_REFRESH
);
1490 DEBUG_OFF(nsm
, NSM
);
1491 DEBUG_OFF(nsm
, NSM_EVENTS
);
1492 DEBUG_OFF(nsm
, NSM_STATUS
);
1493 DEBUG_OFF(nsm
, NSM_TIMERS
);
1494 DEBUG_OFF(zebra
, ZEBRA
);
1495 DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1496 DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1498 for (i
= 0; i
< 5; i
++)
1499 DEBUG_PACKET_OFF(i
, flag
);
1502 for (i
= 0; i
< 5; i
++)
1503 TERM_DEBUG_PACKET_OFF(i
, flag
);
1505 TERM_DEBUG_OFF(event
, EVENT
);
1506 TERM_DEBUG_OFF(ism
, ISM
);
1507 TERM_DEBUG_OFF(ism
, ISM_EVENTS
);
1508 TERM_DEBUG_OFF(ism
, ISM_STATUS
);
1509 TERM_DEBUG_OFF(ism
, ISM_TIMERS
);
1510 TERM_DEBUG_OFF(lsa
, LSA
);
1511 TERM_DEBUG_OFF(lsa
, LSA_FLOODING
);
1512 TERM_DEBUG_OFF(lsa
, LSA_GENERATE
);
1513 TERM_DEBUG_OFF(lsa
, LSA_INSTALL
);
1514 TERM_DEBUG_OFF(lsa
, LSA_REFRESH
);
1515 TERM_DEBUG_OFF(nsm
, NSM
);
1516 TERM_DEBUG_OFF(nsm
, NSM_EVENTS
);
1517 TERM_DEBUG_OFF(nsm
, NSM_STATUS
);
1518 TERM_DEBUG_OFF(nsm
, NSM_TIMERS
);
1519 TERM_DEBUG_OFF(nssa
, NSSA
);
1520 TERM_DEBUG_OFF(zebra
, ZEBRA
);
1521 TERM_DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1522 TERM_DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1527 static int show_debugging_ospf_common(struct vty
*vty
, struct ospf
*ospf
)
1532 vty_out(vty
, "\nOSPF Instance: %d\n\n", ospf
->instance
);
1534 vty_out(vty
, "OSPF debugging status:\n");
1536 /* Show debug status for events. */
1537 if (IS_DEBUG_OSPF(event
, EVENT
))
1538 vty_out(vty
, " OSPF event debugging is on\n");
1540 /* Show debug status for ISM. */
1541 if (IS_DEBUG_OSPF(ism
, ISM
) == OSPF_DEBUG_ISM
)
1542 vty_out(vty
, " OSPF ISM debugging is on\n");
1544 if (IS_DEBUG_OSPF(ism
, ISM_STATUS
))
1545 vty_out(vty
, " OSPF ISM status debugging is on\n");
1546 if (IS_DEBUG_OSPF(ism
, ISM_EVENTS
))
1547 vty_out(vty
, " OSPF ISM event debugging is on\n");
1548 if (IS_DEBUG_OSPF(ism
, ISM_TIMERS
))
1549 vty_out(vty
, " OSPF ISM timer debugging is on\n");
1552 /* Show debug status for NSM. */
1553 if (IS_DEBUG_OSPF(nsm
, NSM
) == OSPF_DEBUG_NSM
)
1554 vty_out(vty
, " OSPF NSM debugging is on\n");
1556 if (IS_DEBUG_OSPF(nsm
, NSM_STATUS
))
1557 vty_out(vty
, " OSPF NSM status debugging is on\n");
1558 if (IS_DEBUG_OSPF(nsm
, NSM_EVENTS
))
1559 vty_out(vty
, " OSPF NSM event debugging is on\n");
1560 if (IS_DEBUG_OSPF(nsm
, NSM_TIMERS
))
1561 vty_out(vty
, " OSPF NSM timer debugging is on\n");
1564 /* Show debug status for OSPF Packets. */
1565 for (i
= 0; i
< 5; i
++)
1566 if (IS_DEBUG_OSPF_PACKET(i
, SEND
)
1567 && IS_DEBUG_OSPF_PACKET(i
, RECV
)) {
1568 vty_out(vty
, " OSPF packet %s%s debugging is on\n",
1569 lookup_msg(ospf_packet_type_str
, i
+ 1, NULL
),
1570 IS_DEBUG_OSPF_PACKET(i
, DETAIL
) ? " detail"
1573 if (IS_DEBUG_OSPF_PACKET(i
, SEND
))
1575 " OSPF packet %s send%s debugging is on\n",
1576 lookup_msg(ospf_packet_type_str
, i
+ 1,
1578 IS_DEBUG_OSPF_PACKET(i
, DETAIL
)
1581 if (IS_DEBUG_OSPF_PACKET(i
, RECV
))
1583 " OSPF packet %s receive%s debugging is on\n",
1584 lookup_msg(ospf_packet_type_str
, i
+ 1,
1586 IS_DEBUG_OSPF_PACKET(i
, DETAIL
)
1591 /* Show debug status for OSPF LSAs. */
1592 if (IS_DEBUG_OSPF(lsa
, LSA
) == OSPF_DEBUG_LSA
)
1593 vty_out(vty
, " OSPF LSA debugging is on\n");
1595 if (IS_DEBUG_OSPF(lsa
, LSA_GENERATE
))
1596 vty_out(vty
, " OSPF LSA generation debugging is on\n");
1597 if (IS_DEBUG_OSPF(lsa
, LSA_FLOODING
))
1598 vty_out(vty
, " OSPF LSA flooding debugging is on\n");
1599 if (IS_DEBUG_OSPF(lsa
, LSA_INSTALL
))
1600 vty_out(vty
, " OSPF LSA install debugging is on\n");
1601 if (IS_DEBUG_OSPF(lsa
, LSA_REFRESH
))
1602 vty_out(vty
, " OSPF LSA refresh debugging is on\n");
1605 /* Show debug status for Zebra. */
1606 if (IS_DEBUG_OSPF(zebra
, ZEBRA
) == OSPF_DEBUG_ZEBRA
)
1607 vty_out(vty
, " OSPF Zebra debugging is on\n");
1609 if (IS_DEBUG_OSPF(zebra
, ZEBRA_INTERFACE
))
1611 " OSPF Zebra interface debugging is on\n");
1612 if (IS_DEBUG_OSPF(zebra
, ZEBRA_REDISTRIBUTE
))
1614 " OSPF Zebra redistribute debugging is on\n");
1617 /* Show debug status for NSSA. */
1618 if (IS_DEBUG_OSPF(nssa
, NSSA
) == OSPF_DEBUG_NSSA
)
1619 vty_out(vty
, " OSPF NSSA debugging is on\n");
1626 DEFUN_NOSH (show_debugging_ospf
,
1627 show_debugging_ospf_cmd
,
1628 "show debugging [ospf]",
1633 struct ospf
*ospf
= NULL
;
1635 ospf
= ospf_lookup_by_vrf_id(VRF_DEFAULT
);
1639 return show_debugging_ospf_common(vty
, ospf
);
1642 DEFUN_NOSH (show_debugging_ospf_instance
,
1643 show_debugging_ospf_instance_cmd
,
1644 "show debugging ospf (1-65535)",
1652 unsigned short instance
= 0;
1654 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1655 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
)
1658 return show_debugging_ospf_common(vty
, ospf
);
1662 static struct cmd_node debug_node
= {
1663 DEBUG_NODE
, "", 1 /* VTYSH */
1666 static int config_write_debug(struct vty
*vty
)
1671 const char *type_str
[] = {"hello", "dd", "ls-request", "ls-update",
1673 const char *detail_str
[] = {
1674 "", " send", " recv", "",
1675 " detail", " send detail", " recv detail", " detail"};
1681 ospf
= ospf_lookup_by_vrf_id(VRF_DEFAULT
);
1686 sprintf(str
, " %u", ospf
->instance
);
1688 /* debug ospf ism (status|events|timers). */
1689 if (IS_CONF_DEBUG_OSPF(ism
, ISM
) == OSPF_DEBUG_ISM
)
1690 vty_out(vty
, "debug ospf%s ism\n", str
);
1692 if (IS_CONF_DEBUG_OSPF(ism
, ISM_STATUS
))
1693 vty_out(vty
, "debug ospf%s ism status\n", str
);
1694 if (IS_CONF_DEBUG_OSPF(ism
, ISM_EVENTS
))
1695 vty_out(vty
, "debug ospf%s ism event\n", str
);
1696 if (IS_CONF_DEBUG_OSPF(ism
, ISM_TIMERS
))
1697 vty_out(vty
, "debug ospf%s ism timer\n", str
);
1700 /* debug ospf nsm (status|events|timers). */
1701 if (IS_CONF_DEBUG_OSPF(nsm
, NSM
) == OSPF_DEBUG_NSM
)
1702 vty_out(vty
, "debug ospf%s nsm\n", str
);
1704 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_STATUS
))
1705 vty_out(vty
, "debug ospf%s nsm status\n", str
);
1706 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_EVENTS
))
1707 vty_out(vty
, "debug ospf%s nsm event\n", str
);
1708 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_TIMERS
))
1709 vty_out(vty
, "debug ospf%s nsm timer\n", str
);
1712 /* debug ospf lsa (generate|flooding|install|refresh). */
1713 if (IS_CONF_DEBUG_OSPF(lsa
, LSA
) == OSPF_DEBUG_LSA
)
1714 vty_out(vty
, "debug ospf%s lsa\n", str
);
1716 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_GENERATE
))
1717 vty_out(vty
, "debug ospf%s lsa generate\n", str
);
1718 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_FLOODING
))
1719 vty_out(vty
, "debug ospf%s lsa flooding\n", str
);
1720 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_INSTALL
))
1721 vty_out(vty
, "debug ospf%s lsa install\n", str
);
1722 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_REFRESH
))
1723 vty_out(vty
, "debug ospf%s lsa refresh\n", str
);
1728 /* debug ospf zebra (interface|redistribute). */
1729 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA
) == OSPF_DEBUG_ZEBRA
)
1730 vty_out(vty
, "debug ospf%s zebra\n", str
);
1732 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA_INTERFACE
))
1733 vty_out(vty
, "debug ospf%s zebra interface\n", str
);
1734 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA_REDISTRIBUTE
))
1735 vty_out(vty
, "debug ospf%s zebra redistribute\n", str
);
1740 /* debug ospf event. */
1741 if (IS_CONF_DEBUG_OSPF(event
, EVENT
) == OSPF_DEBUG_EVENT
) {
1742 vty_out(vty
, "debug ospf%s event\n", str
);
1746 /* debug ospf nssa. */
1747 if (IS_CONF_DEBUG_OSPF(nssa
, NSSA
) == OSPF_DEBUG_NSSA
) {
1748 vty_out(vty
, "debug ospf%s nssa\n", str
);
1752 /* debug ospf packet all detail. */
1753 r
= OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
;
1754 for (i
= 0; i
< 5; i
++)
1755 r
&= conf_debug_ospf_packet
[i
]
1756 & (OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
);
1757 if (r
== (OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
)) {
1758 vty_out(vty
, "debug ospf%s packet all detail\n", str
);
1762 /* debug ospf packet all. */
1763 r
= OSPF_DEBUG_SEND_RECV
;
1764 for (i
= 0; i
< 5; i
++)
1765 r
&= conf_debug_ospf_packet
[i
] & OSPF_DEBUG_SEND_RECV
;
1766 if (r
== OSPF_DEBUG_SEND_RECV
) {
1767 vty_out(vty
, "debug ospf%s packet all\n", str
);
1768 for (i
= 0; i
< 5; i
++)
1769 if (conf_debug_ospf_packet
[i
] & OSPF_DEBUG_DETAIL
)
1770 vty_out(vty
, "debug ospf%s packet %s detail\n",
1775 /* debug ospf packet (hello|dd|ls-request|ls-update|ls-ack)
1776 (send|recv) (detail). */
1777 for (i
= 0; i
< 5; i
++) {
1778 if (conf_debug_ospf_packet
[i
] == 0)
1781 vty_out(vty
, "debug ospf%s packet %s%s\n", str
, type_str
[i
],
1782 detail_str
[conf_debug_ospf_packet
[i
]]);
1787 if (IS_CONF_DEBUG_OSPF(te
, TE
) == OSPF_DEBUG_TE
) {
1788 vty_out(vty
, "debug ospf%s te\n", str
);
1793 if (IS_CONF_DEBUG_OSPF(sr
, SR
) == OSPF_DEBUG_SR
) {
1794 vty_out(vty
, "debug ospf%s sr\n", str
);
1801 /* Initialize debug commands. */
1802 void ospf_debug_init(void)
1804 install_node(&debug_node
, config_write_debug
);
1806 install_element(ENABLE_NODE
, &show_debugging_ospf_cmd
);
1807 install_element(ENABLE_NODE
, &debug_ospf_ism_cmd
);
1808 install_element(ENABLE_NODE
, &debug_ospf_nsm_cmd
);
1809 install_element(ENABLE_NODE
, &debug_ospf_lsa_cmd
);
1810 install_element(ENABLE_NODE
, &debug_ospf_zebra_cmd
);
1811 install_element(ENABLE_NODE
, &debug_ospf_event_cmd
);
1812 install_element(ENABLE_NODE
, &debug_ospf_nssa_cmd
);
1813 install_element(ENABLE_NODE
, &debug_ospf_te_cmd
);
1814 install_element(ENABLE_NODE
, &debug_ospf_sr_cmd
);
1815 install_element(ENABLE_NODE
, &no_debug_ospf_ism_cmd
);
1816 install_element(ENABLE_NODE
, &no_debug_ospf_nsm_cmd
);
1817 install_element(ENABLE_NODE
, &no_debug_ospf_lsa_cmd
);
1818 install_element(ENABLE_NODE
, &no_debug_ospf_zebra_cmd
);
1819 install_element(ENABLE_NODE
, &no_debug_ospf_event_cmd
);
1820 install_element(ENABLE_NODE
, &no_debug_ospf_nssa_cmd
);
1821 install_element(ENABLE_NODE
, &no_debug_ospf_te_cmd
);
1822 install_element(ENABLE_NODE
, &no_debug_ospf_sr_cmd
);
1824 install_element(ENABLE_NODE
, &show_debugging_ospf_instance_cmd
);
1825 install_element(ENABLE_NODE
, &debug_ospf_packet_cmd
);
1826 install_element(ENABLE_NODE
, &no_debug_ospf_packet_cmd
);
1828 install_element(ENABLE_NODE
, &debug_ospf_instance_nsm_cmd
);
1829 install_element(ENABLE_NODE
, &debug_ospf_instance_lsa_cmd
);
1830 install_element(ENABLE_NODE
, &debug_ospf_instance_zebra_cmd
);
1831 install_element(ENABLE_NODE
, &debug_ospf_instance_event_cmd
);
1832 install_element(ENABLE_NODE
, &debug_ospf_instance_nssa_cmd
);
1833 install_element(ENABLE_NODE
, &no_debug_ospf_instance_nsm_cmd
);
1834 install_element(ENABLE_NODE
, &no_debug_ospf_instance_lsa_cmd
);
1835 install_element(ENABLE_NODE
, &no_debug_ospf_instance_zebra_cmd
);
1836 install_element(ENABLE_NODE
, &no_debug_ospf_instance_event_cmd
);
1837 install_element(ENABLE_NODE
, &no_debug_ospf_instance_nssa_cmd
);
1838 install_element(ENABLE_NODE
, &no_debug_ospf_cmd
);
1840 install_element(CONFIG_NODE
, &debug_ospf_packet_cmd
);
1841 install_element(CONFIG_NODE
, &no_debug_ospf_packet_cmd
);
1842 install_element(CONFIG_NODE
, &debug_ospf_ism_cmd
);
1843 install_element(CONFIG_NODE
, &no_debug_ospf_ism_cmd
);
1845 install_element(CONFIG_NODE
, &debug_ospf_nsm_cmd
);
1846 install_element(CONFIG_NODE
, &debug_ospf_lsa_cmd
);
1847 install_element(CONFIG_NODE
, &debug_ospf_zebra_cmd
);
1848 install_element(CONFIG_NODE
, &debug_ospf_event_cmd
);
1849 install_element(CONFIG_NODE
, &debug_ospf_nssa_cmd
);
1850 install_element(CONFIG_NODE
, &debug_ospf_te_cmd
);
1851 install_element(CONFIG_NODE
, &debug_ospf_sr_cmd
);
1852 install_element(CONFIG_NODE
, &no_debug_ospf_nsm_cmd
);
1853 install_element(CONFIG_NODE
, &no_debug_ospf_lsa_cmd
);
1854 install_element(CONFIG_NODE
, &no_debug_ospf_zebra_cmd
);
1855 install_element(CONFIG_NODE
, &no_debug_ospf_event_cmd
);
1856 install_element(CONFIG_NODE
, &no_debug_ospf_nssa_cmd
);
1857 install_element(CONFIG_NODE
, &no_debug_ospf_te_cmd
);
1858 install_element(CONFIG_NODE
, &no_debug_ospf_sr_cmd
);
1860 install_element(CONFIG_NODE
, &debug_ospf_instance_nsm_cmd
);
1861 install_element(CONFIG_NODE
, &debug_ospf_instance_lsa_cmd
);
1862 install_element(CONFIG_NODE
, &debug_ospf_instance_zebra_cmd
);
1863 install_element(CONFIG_NODE
, &debug_ospf_instance_event_cmd
);
1864 install_element(CONFIG_NODE
, &debug_ospf_instance_nssa_cmd
);
1865 install_element(CONFIG_NODE
, &no_debug_ospf_instance_nsm_cmd
);
1866 install_element(CONFIG_NODE
, &no_debug_ospf_instance_lsa_cmd
);
1867 install_element(CONFIG_NODE
, &no_debug_ospf_instance_zebra_cmd
);
1868 install_element(CONFIG_NODE
, &no_debug_ospf_instance_event_cmd
);
1869 install_element(CONFIG_NODE
, &no_debug_ospf_instance_nssa_cmd
);
1870 install_element(CONFIG_NODE
, &no_debug_ospf_cmd
);