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
:
541 strlcpy(buf
, (char *)ospfh
->u
.auth_data
, sizeof(buf
));
542 zlog_debug(" Simple Password %s", buf
);
544 case OSPF_AUTH_CRYPTOGRAPHIC
:
545 zlog_debug(" Cryptographic Authentication");
546 zlog_debug(" Key ID %d", ospfh
->u
.crypt
.key_id
);
547 zlog_debug(" Auth Data Len %d", ospfh
->u
.crypt
.auth_data_len
);
548 zlog_debug(" Sequence number %ld",
549 (unsigned long)ntohl(ospfh
->u
.crypt
.crypt_seqnum
));
552 zlog_debug("* This is not supported authentication type");
557 void ospf_packet_dump(struct stream
*s
)
559 struct ospf_header
*ospfh
;
562 /* Preserve pointer. */
563 gp
= stream_get_getp(s
);
565 /* OSPF Header dump. */
566 ospfh
= (struct ospf_header
*)stream_pnt(s
);
568 /* Until detail flag is set, return. */
569 if (!(term_debug_ospf_packet
[ospfh
->type
- 1] & OSPF_DEBUG_DETAIL
))
572 /* Show OSPF header detail. */
573 ospf_header_dump(ospfh
);
574 stream_forward_getp(s
, OSPF_HEADER_SIZE
);
576 switch (ospfh
->type
) {
578 ospf_packet_hello_dump(s
, ntohs(ospfh
->length
));
580 case OSPF_MSG_DB_DESC
:
581 ospf_packet_db_desc_dump(s
, ntohs(ospfh
->length
));
583 case OSPF_MSG_LS_REQ
:
584 ospf_packet_ls_req_dump(s
, ntohs(ospfh
->length
));
586 case OSPF_MSG_LS_UPD
:
587 ospf_packet_ls_upd_dump(s
, ntohs(ospfh
->length
));
589 case OSPF_MSG_LS_ACK
:
590 ospf_packet_ls_ack_dump(s
, ntohs(ospfh
->length
));
596 stream_set_getp(s
, gp
);
599 DEFUN (debug_ospf_packet
,
600 debug_ospf_packet_cmd
,
601 "debug ospf [(1-65535)] packet <hello|dd|ls-request|ls-update|ls-ack|all> [<send [detail]|recv [detail]|detail>]",
607 "OSPF Database Description\n"
608 "OSPF Link State Request\n"
609 "OSPF Link State Update\n"
610 "OSPF Link State Acknowledgment\n"
613 "Detail Information\n"
615 "Detail Information\n"
616 "Detail Information\n")
618 int inst
= (argv
[2]->type
== RANGE_TKN
) ? 1 : 0;
619 int detail
= strmatch(argv
[argc
- 1]->text
, "detail");
620 int send
= strmatch(argv
[argc
- (1 + detail
)]->text
, "send");
621 int recv
= strmatch(argv
[argc
- (1 + detail
)]->text
, "recv");
622 char *packet
= argv
[3 + inst
]->text
;
624 if (inst
) // user passed instance ID
626 if (!ospf_lookup_instance(strtoul(argv
[2]->arg
, NULL
, 10)))
627 return CMD_NOT_MY_INSTANCE
;
634 /* Check packet type. */
635 if (strmatch(packet
, "hello"))
636 type
= OSPF_DEBUG_HELLO
;
637 else if (strmatch(packet
, "dd"))
638 type
= OSPF_DEBUG_DB_DESC
;
639 else if (strmatch(packet
, "ls-request"))
640 type
= OSPF_DEBUG_LS_REQ
;
641 else if (strmatch(packet
, "ls-update"))
642 type
= OSPF_DEBUG_LS_UPD
;
643 else if (strmatch(packet
, "ls-ack"))
644 type
= OSPF_DEBUG_LS_ACK
;
645 else if (strmatch(packet
, "all"))
646 type
= OSPF_DEBUG_ALL
;
649 * (none) = send + recv
650 * detail = send + recv + detail
653 * recv detail = recv + detail
654 * send detail = send + detail
659 flag
|= (send
) ? OSPF_DEBUG_SEND
: 0;
660 flag
|= (recv
) ? OSPF_DEBUG_RECV
: 0;
661 flag
|= (detail
) ? OSPF_DEBUG_DETAIL
: 0;
663 for (i
= 0; i
< 5; i
++)
664 if (type
& (0x01 << i
)) {
665 if (vty
->node
== CONFIG_NODE
)
666 DEBUG_PACKET_ON(i
, flag
);
668 TERM_DEBUG_PACKET_ON(i
, flag
);
674 DEFUN (no_debug_ospf_packet
,
675 no_debug_ospf_packet_cmd
,
676 "no debug ospf [(1-65535)] packet <hello|dd|ls-request|ls-update|ls-ack|all> [<send [detail]|recv [detail]|detail>]",
683 "OSPF Database Description\n"
684 "OSPF Link State Request\n"
685 "OSPF Link State Update\n"
686 "OSPF Link State Acknowledgment\n"
689 "Detail Information\n"
691 "Detail Information\n"
692 "Detail Information\n")
694 int inst
= (argv
[3]->type
== RANGE_TKN
) ? 1 : 0;
695 int detail
= strmatch(argv
[argc
- 1]->text
, "detail");
696 int send
= strmatch(argv
[argc
- (1 + detail
)]->text
, "send");
697 int recv
= strmatch(argv
[argc
- (1 + detail
)]->text
, "recv");
698 char *packet
= argv
[4 + inst
]->text
;
700 if (inst
) // user passed instance ID
702 if (!ospf_lookup_instance(strtoul(argv
[3]->arg
, NULL
, 10)))
703 return CMD_NOT_MY_INSTANCE
;
710 /* Check packet type. */
711 if (strmatch(packet
, "hello"))
712 type
= OSPF_DEBUG_HELLO
;
713 else if (strmatch(packet
, "dd"))
714 type
= OSPF_DEBUG_DB_DESC
;
715 else if (strmatch(packet
, "ls-request"))
716 type
= OSPF_DEBUG_LS_REQ
;
717 else if (strmatch(packet
, "ls-update"))
718 type
= OSPF_DEBUG_LS_UPD
;
719 else if (strmatch(packet
, "ls-ack"))
720 type
= OSPF_DEBUG_LS_ACK
;
721 else if (strmatch(packet
, "all"))
722 type
= OSPF_DEBUG_ALL
;
725 * (none) = send + recv
726 * detail = send + recv + detail
729 * recv detail = recv + detail
730 * send detail = send + detail
735 flag
|= (send
) ? OSPF_DEBUG_SEND
: 0;
736 flag
|= (recv
) ? OSPF_DEBUG_RECV
: 0;
737 flag
|= (detail
) ? OSPF_DEBUG_DETAIL
: 0;
739 for (i
= 0; i
< 5; i
++)
740 if (type
& (0x01 << i
)) {
741 if (vty
->node
== CONFIG_NODE
)
742 DEBUG_PACKET_OFF(i
, flag
);
744 TERM_DEBUG_PACKET_OFF(i
, flag
);
749 for (i = 0; i < 5; i++)
750 zlog_debug ("flag[%d] = %d", i, ospf_debug_packet[i]);
757 DEFUN (debug_ospf_ism
,
759 "debug ospf [(1-65535)] ism [<status|events|timers>]",
763 "OSPF Interface State Machine\n"
764 "ISM Status Information\n"
765 "ISM Event Information\n"
766 "ISM TImer Information\n")
768 int inst
= (argv
[2]->type
== RANGE_TKN
);
769 char *dbgparam
= (argc
== 4 + inst
) ? argv
[argc
- 1]->text
: NULL
;
771 if (inst
) // user passed instance ID
773 if (!ospf_lookup_instance(strtoul(argv
[2]->arg
, NULL
, 10)))
774 return CMD_NOT_MY_INSTANCE
;
777 if (vty
->node
== CONFIG_NODE
) {
781 if (strmatch(dbgparam
, "status"))
782 DEBUG_ON(ism
, ISM_STATUS
);
783 else if (strmatch(dbgparam
, "events"))
784 DEBUG_ON(ism
, ISM_EVENTS
);
785 else if (strmatch(dbgparam
, "timers"))
786 DEBUG_ON(ism
, ISM_TIMERS
);
794 TERM_DEBUG_ON(ism
, ISM
);
796 if (strmatch(dbgparam
, "status"))
797 TERM_DEBUG_ON(ism
, ISM_STATUS
);
798 else if (strmatch(dbgparam
, "events"))
799 TERM_DEBUG_ON(ism
, ISM_EVENTS
);
800 else if (strmatch(dbgparam
, "timers"))
801 TERM_DEBUG_ON(ism
, ISM_TIMERS
);
807 DEFUN (no_debug_ospf_ism
,
808 no_debug_ospf_ism_cmd
,
809 "no debug ospf [(1-65535)] ism [<status|events|timers>]",
814 "OSPF Interface State Machine\n"
815 "ISM Status Information\n"
816 "ISM Event Information\n"
817 "ISM TImer Information\n")
819 int inst
= (argv
[3]->type
== RANGE_TKN
);
820 char *dbgparam
= (argc
== 5 + inst
) ? argv
[argc
- 1]->text
: NULL
;
822 if (inst
) // user passed instance ID
824 if (!ospf_lookup_instance(strtoul(argv
[3]->arg
, NULL
, 10)))
825 return CMD_NOT_MY_INSTANCE
;
828 if (vty
->node
== CONFIG_NODE
) {
832 if (strmatch(dbgparam
, "status"))
833 DEBUG_OFF(ism
, ISM_STATUS
);
834 else if (strmatch(dbgparam
, "events"))
835 DEBUG_OFF(ism
, ISM_EVENTS
);
836 else if (strmatch(dbgparam
, "timers"))
837 DEBUG_OFF(ism
, ISM_TIMERS
);
845 TERM_DEBUG_OFF(ism
, ISM
);
847 if (strmatch(dbgparam
, "status"))
848 TERM_DEBUG_OFF(ism
, ISM_STATUS
);
849 else if (strmatch(dbgparam
, "events"))
850 TERM_DEBUG_OFF(ism
, ISM_EVENTS
);
851 else if (strmatch(dbgparam
, "timers"))
852 TERM_DEBUG_OFF(ism
, ISM_TIMERS
);
858 static int debug_ospf_nsm_common(struct vty
*vty
, int arg_base
, int argc
,
859 struct cmd_token
**argv
)
861 if (vty
->node
== CONFIG_NODE
) {
862 if (argc
== arg_base
+ 0)
864 else if (argc
== arg_base
+ 1) {
865 if (strmatch(argv
[arg_base
]->text
, "status"))
866 DEBUG_ON(nsm
, NSM_STATUS
);
867 else if (strmatch(argv
[arg_base
]->text
, "events"))
868 DEBUG_ON(nsm
, NSM_EVENTS
);
869 else if (strmatch(argv
[arg_base
]->text
, "timers"))
870 DEBUG_ON(nsm
, NSM_TIMERS
);
877 if (argc
== arg_base
+ 0)
878 TERM_DEBUG_ON(nsm
, NSM
);
879 else if (argc
== arg_base
+ 1) {
880 if (strmatch(argv
[arg_base
]->text
, "status"))
881 TERM_DEBUG_ON(nsm
, NSM_STATUS
);
882 else if (strmatch(argv
[arg_base
]->text
, "events"))
883 TERM_DEBUG_ON(nsm
, NSM_EVENTS
);
884 else if (strmatch(argv
[arg_base
]->text
, "timers"))
885 TERM_DEBUG_ON(nsm
, NSM_TIMERS
);
891 DEFUN (debug_ospf_nsm
,
893 "debug ospf nsm [<status|events|timers>]",
896 "OSPF Neighbor State Machine\n"
897 "NSM Status Information\n"
898 "NSM Event Information\n"
899 "NSM Timer Information\n")
901 return debug_ospf_nsm_common(vty
, 3, argc
, argv
);
904 DEFUN (debug_ospf_instance_nsm
,
905 debug_ospf_instance_nsm_cmd
,
906 "debug ospf (1-65535) nsm [<status|events|timers>]",
910 "OSPF Neighbor State Machine\n"
911 "NSM Status Information\n"
912 "NSM Event Information\n"
913 "NSM Timer Information\n")
916 unsigned short instance
= 0;
918 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
919 if (!ospf_lookup_instance(instance
))
922 return debug_ospf_nsm_common(vty
, 4, argc
, argv
);
926 static int no_debug_ospf_nsm_common(struct vty
*vty
, int arg_base
, int argc
,
927 struct cmd_token
**argv
)
930 if (vty
->node
== CONFIG_NODE
) {
931 if (argc
== arg_base
+ 0)
933 else if (argc
== arg_base
+ 1) {
934 if (strmatch(argv
[arg_base
]->text
, "status"))
935 DEBUG_OFF(nsm
, NSM_STATUS
);
936 else if (strmatch(argv
[arg_base
]->text
, "events"))
937 DEBUG_OFF(nsm
, NSM_EVENTS
);
938 else if (strmatch(argv
[arg_base
]->text
, "timers"))
939 DEBUG_OFF(nsm
, NSM_TIMERS
);
946 if (argc
== arg_base
+ 0)
947 TERM_DEBUG_OFF(nsm
, NSM
);
948 else if (argc
== arg_base
+ 1) {
949 if (strmatch(argv
[arg_base
]->text
, "status"))
950 TERM_DEBUG_OFF(nsm
, NSM_STATUS
);
951 else if (strmatch(argv
[arg_base
]->text
, "events"))
952 TERM_DEBUG_OFF(nsm
, NSM_EVENTS
);
953 else if (strmatch(argv
[arg_base
]->text
, "timers"))
954 TERM_DEBUG_OFF(nsm
, NSM_TIMERS
);
960 DEFUN (no_debug_ospf_nsm
,
961 no_debug_ospf_nsm_cmd
,
962 "no debug ospf nsm [<status|events|timers>]",
966 "OSPF Neighbor State Machine\n"
967 "NSM Status Information\n"
968 "NSM Event Information\n"
969 "NSM Timer Information\n")
971 return no_debug_ospf_nsm_common(vty
, 4, argc
, argv
);
975 DEFUN (no_debug_ospf_instance_nsm
,
976 no_debug_ospf_instance_nsm_cmd
,
977 "no debug ospf (1-65535) nsm [<status|events|timers>]",
982 "OSPF Neighbor State Machine\n"
983 "NSM Status Information\n"
984 "NSM Event Information\n"
985 "NSM Timer Information\n")
988 unsigned short instance
= 0;
990 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
991 if (!ospf_lookup_instance(instance
))
992 return CMD_NOT_MY_INSTANCE
;
994 return no_debug_ospf_nsm_common(vty
, 5, argc
, argv
);
998 static int debug_ospf_lsa_common(struct vty
*vty
, int arg_base
, int argc
,
999 struct cmd_token
**argv
)
1001 if (vty
->node
== CONFIG_NODE
) {
1002 if (argc
== arg_base
+ 0)
1004 else if (argc
== arg_base
+ 1) {
1005 if (strmatch(argv
[arg_base
]->text
, "generate"))
1006 DEBUG_ON(lsa
, LSA_GENERATE
);
1007 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1008 DEBUG_ON(lsa
, LSA_FLOODING
);
1009 else if (strmatch(argv
[arg_base
]->text
, "install"))
1010 DEBUG_ON(lsa
, LSA_INSTALL
);
1011 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1012 DEBUG_ON(lsa
, LSA_REFRESH
);
1019 if (argc
== arg_base
+ 0)
1020 TERM_DEBUG_ON(lsa
, LSA
);
1021 else if (argc
== arg_base
+ 1) {
1022 if (strmatch(argv
[arg_base
]->text
, "generate"))
1023 TERM_DEBUG_ON(lsa
, LSA_GENERATE
);
1024 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1025 TERM_DEBUG_ON(lsa
, LSA_FLOODING
);
1026 else if (strmatch(argv
[arg_base
]->text
, "install"))
1027 TERM_DEBUG_ON(lsa
, LSA_INSTALL
);
1028 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1029 TERM_DEBUG_ON(lsa
, LSA_REFRESH
);
1035 DEFUN (debug_ospf_lsa
,
1037 "debug ospf lsa [<generate|flooding|install|refresh>]",
1040 "OSPF Link State Advertisement\n"
1043 "LSA Install/Delete\n"
1046 return debug_ospf_lsa_common(vty
, 3, argc
, argv
);
1049 DEFUN (debug_ospf_instance_lsa
,
1050 debug_ospf_instance_lsa_cmd
,
1051 "debug ospf (1-65535) lsa [<generate|flooding|install|refresh>]",
1055 "OSPF Link State Advertisement\n"
1058 "LSA Install/Delete\n"
1062 unsigned short instance
= 0;
1064 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1065 if (!ospf_lookup_instance(instance
))
1066 return CMD_NOT_MY_INSTANCE
;
1068 return debug_ospf_lsa_common(vty
, 4, argc
, argv
);
1072 static int no_debug_ospf_lsa_common(struct vty
*vty
, int arg_base
, int argc
,
1073 struct cmd_token
**argv
)
1075 if (vty
->node
== CONFIG_NODE
) {
1076 if (argc
== arg_base
+ 0)
1077 DEBUG_OFF(lsa
, LSA
);
1078 else if (argc
== arg_base
+ 1) {
1079 if (strmatch(argv
[arg_base
]->text
, "generate"))
1080 DEBUG_OFF(lsa
, LSA_GENERATE
);
1081 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1082 DEBUG_OFF(lsa
, LSA_FLOODING
);
1083 else if (strmatch(argv
[arg_base
]->text
, "install"))
1084 DEBUG_OFF(lsa
, LSA_INSTALL
);
1085 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1086 DEBUG_OFF(lsa
, LSA_REFRESH
);
1093 if (argc
== arg_base
+ 0)
1094 TERM_DEBUG_OFF(lsa
, LSA
);
1095 else if (argc
== arg_base
+ 1) {
1096 if (strmatch(argv
[arg_base
]->text
, "generate"))
1097 TERM_DEBUG_OFF(lsa
, LSA_GENERATE
);
1098 else if (strmatch(argv
[arg_base
]->text
, "flooding"))
1099 TERM_DEBUG_OFF(lsa
, LSA_FLOODING
);
1100 else if (strmatch(argv
[arg_base
]->text
, "install"))
1101 TERM_DEBUG_OFF(lsa
, LSA_INSTALL
);
1102 else if (strmatch(argv
[arg_base
]->text
, "refresh"))
1103 TERM_DEBUG_OFF(lsa
, LSA_REFRESH
);
1109 DEFUN (no_debug_ospf_lsa
,
1110 no_debug_ospf_lsa_cmd
,
1111 "no debug ospf lsa [<generate|flooding|install|refresh>]",
1115 "OSPF Link State Advertisement\n"
1118 "LSA Install/Delete\n"
1121 return no_debug_ospf_lsa_common(vty
, 4, argc
, argv
);
1124 DEFUN (no_debug_ospf_instance_lsa
,
1125 no_debug_ospf_instance_lsa_cmd
,
1126 "no debug ospf (1-65535) lsa [<generate|flooding|install|refresh>]",
1131 "OSPF Link State Advertisement\n"
1134 "LSA Install/Delete\n"
1138 unsigned short instance
= 0;
1140 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1141 if (!ospf_lookup_instance(instance
))
1142 return CMD_NOT_MY_INSTANCE
;
1144 return no_debug_ospf_lsa_common(vty
, 5, argc
, argv
);
1148 static int debug_ospf_zebra_common(struct vty
*vty
, int arg_base
, int argc
,
1149 struct cmd_token
**argv
)
1151 if (vty
->node
== CONFIG_NODE
) {
1152 if (argc
== arg_base
+ 0)
1153 DEBUG_ON(zebra
, ZEBRA
);
1154 else if (argc
== arg_base
+ 1) {
1155 if (strmatch(argv
[arg_base
]->text
, "interface"))
1156 DEBUG_ON(zebra
, ZEBRA_INTERFACE
);
1157 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1158 DEBUG_ON(zebra
, ZEBRA_REDISTRIBUTE
);
1165 if (argc
== arg_base
+ 0)
1166 TERM_DEBUG_ON(zebra
, ZEBRA
);
1167 else if (argc
== arg_base
+ 1) {
1168 if (strmatch(argv
[arg_base
]->text
, "interface"))
1169 TERM_DEBUG_ON(zebra
, ZEBRA_INTERFACE
);
1170 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1171 TERM_DEBUG_ON(zebra
, ZEBRA_REDISTRIBUTE
);
1177 DEFUN (debug_ospf_zebra
,
1178 debug_ospf_zebra_cmd
,
1179 "debug ospf zebra [<interface|redistribute>]",
1184 "Zebra redistribute\n")
1186 return debug_ospf_zebra_common(vty
, 3, argc
, argv
);
1189 DEFUN (debug_ospf_instance_zebra
,
1190 debug_ospf_instance_zebra_cmd
,
1191 "debug ospf (1-65535) zebra [<interface|redistribute>]",
1197 "Zebra redistribute\n")
1200 unsigned short instance
= 0;
1202 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1203 if (!ospf_lookup_instance(instance
))
1204 return CMD_NOT_MY_INSTANCE
;
1206 return debug_ospf_zebra_common(vty
, 4, argc
, argv
);
1210 static int no_debug_ospf_zebra_common(struct vty
*vty
, int arg_base
, int argc
,
1211 struct cmd_token
**argv
)
1213 if (vty
->node
== CONFIG_NODE
) {
1214 if (argc
== arg_base
+ 0)
1215 DEBUG_OFF(zebra
, ZEBRA
);
1216 else if (argc
== arg_base
+ 1) {
1217 if (strmatch(argv
[arg_base
]->text
, "interface"))
1218 DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1219 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1220 DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1227 if (argc
== arg_base
+ 0)
1228 TERM_DEBUG_OFF(zebra
, ZEBRA
);
1229 else if (argc
== arg_base
+ 1) {
1230 if (strmatch(argv
[arg_base
]->text
, "interface"))
1231 TERM_DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1232 else if (strmatch(argv
[arg_base
]->text
, "redistribute"))
1233 TERM_DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1239 DEFUN (no_debug_ospf_zebra
,
1240 no_debug_ospf_zebra_cmd
,
1241 "no debug ospf zebra [<interface|redistribute>]",
1247 "Zebra redistribute\n")
1249 return no_debug_ospf_zebra_common(vty
, 4, argc
, argv
);
1252 DEFUN (no_debug_ospf_instance_zebra
,
1253 no_debug_ospf_instance_zebra_cmd
,
1254 "no debug ospf (1-65535) zebra [<interface|redistribute>]",
1261 "Zebra redistribute\n")
1264 unsigned short instance
= 0;
1266 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1267 if (!ospf_lookup_instance(instance
))
1270 return no_debug_ospf_zebra_common(vty
, 5, argc
, argv
);
1274 DEFUN (debug_ospf_event
,
1275 debug_ospf_event_cmd
,
1279 "OSPF event information\n")
1281 if (vty
->node
== CONFIG_NODE
)
1282 CONF_DEBUG_ON(event
, EVENT
);
1283 TERM_DEBUG_ON(event
, EVENT
);
1287 DEFUN (no_debug_ospf_event
,
1288 no_debug_ospf_event_cmd
,
1289 "no debug ospf event",
1293 "OSPF event information\n")
1295 if (vty
->node
== CONFIG_NODE
)
1296 CONF_DEBUG_OFF(event
, EVENT
);
1297 TERM_DEBUG_OFF(event
, EVENT
);
1301 DEFUN (debug_ospf_instance_event
,
1302 debug_ospf_instance_event_cmd
,
1303 "debug ospf (1-65535) event",
1307 "OSPF event information\n")
1310 unsigned short instance
= 0;
1312 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1313 if (!ospf_lookup_instance(instance
))
1316 if (vty
->node
== CONFIG_NODE
)
1317 CONF_DEBUG_ON(event
, EVENT
);
1318 TERM_DEBUG_ON(event
, EVENT
);
1322 DEFUN (no_debug_ospf_instance_event
,
1323 no_debug_ospf_instance_event_cmd
,
1324 "no debug ospf (1-65535) event",
1329 "OSPF event information\n")
1332 unsigned short instance
= 0;
1334 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1335 if (!ospf_lookup_instance(instance
))
1338 if (vty
->node
== CONFIG_NODE
)
1339 CONF_DEBUG_OFF(event
, EVENT
);
1340 TERM_DEBUG_OFF(event
, EVENT
);
1344 DEFUN (debug_ospf_nssa
,
1345 debug_ospf_nssa_cmd
,
1349 "OSPF nssa information\n")
1351 if (vty
->node
== CONFIG_NODE
)
1352 CONF_DEBUG_ON(nssa
, NSSA
);
1353 TERM_DEBUG_ON(nssa
, NSSA
);
1357 DEFUN (no_debug_ospf_nssa
,
1358 no_debug_ospf_nssa_cmd
,
1359 "no debug ospf nssa",
1363 "OSPF nssa information\n")
1365 if (vty
->node
== CONFIG_NODE
)
1366 CONF_DEBUG_OFF(nssa
, NSSA
);
1367 TERM_DEBUG_OFF(nssa
, NSSA
);
1371 DEFUN (debug_ospf_instance_nssa
,
1372 debug_ospf_instance_nssa_cmd
,
1373 "debug ospf (1-65535) nssa",
1377 "OSPF nssa information\n")
1380 unsigned short instance
= 0;
1382 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1383 if (!ospf_lookup_instance(instance
))
1386 if (vty
->node
== CONFIG_NODE
)
1387 CONF_DEBUG_ON(nssa
, NSSA
);
1388 TERM_DEBUG_ON(nssa
, NSSA
);
1392 DEFUN (no_debug_ospf_instance_nssa
,
1393 no_debug_ospf_instance_nssa_cmd
,
1394 "no debug ospf (1-65535) nssa",
1399 "OSPF nssa information\n")
1402 unsigned short instance
= 0;
1404 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1405 if (!ospf_lookup_instance(instance
))
1408 if (vty
->node
== CONFIG_NODE
)
1409 CONF_DEBUG_OFF(nssa
, NSSA
);
1410 TERM_DEBUG_OFF(nssa
, NSSA
);
1414 DEFUN (debug_ospf_te
,
1419 "OSPF-TE information\n")
1421 if (vty
->node
== CONFIG_NODE
)
1422 CONF_DEBUG_ON(te
, TE
);
1423 TERM_DEBUG_ON(te
, TE
);
1427 DEFUN (no_debug_ospf_te
,
1428 no_debug_ospf_te_cmd
,
1433 "OSPF-TE information\n")
1435 if (vty
->node
== CONFIG_NODE
)
1436 CONF_DEBUG_OFF(te
, TE
);
1437 TERM_DEBUG_OFF(te
, TE
);
1441 DEFUN (debug_ospf_sr
,
1446 "OSPF-SR information\n")
1448 if (vty
->node
== CONFIG_NODE
)
1449 CONF_DEBUG_ON(sr
, SR
);
1450 TERM_DEBUG_ON(sr
, SR
);
1454 DEFUN (no_debug_ospf_sr
,
1455 no_debug_ospf_sr_cmd
,
1460 "OSPF-SR information\n")
1462 if (vty
->node
== CONFIG_NODE
)
1463 CONF_DEBUG_OFF(sr
, SR
);
1464 TERM_DEBUG_OFF(sr
, SR
);
1468 DEFUN (no_debug_ospf
,
1475 int flag
= OSPF_DEBUG_SEND
| OSPF_DEBUG_RECV
| OSPF_DEBUG_DETAIL
;
1478 if (vty
->node
== CONFIG_NODE
) {
1479 CONF_DEBUG_OFF(event
, EVENT
);
1480 CONF_DEBUG_OFF(nssa
, NSSA
);
1481 DEBUG_OFF(ism
, ISM_EVENTS
);
1482 DEBUG_OFF(ism
, ISM_STATUS
);
1483 DEBUG_OFF(ism
, ISM_TIMERS
);
1484 DEBUG_OFF(lsa
, LSA
);
1485 DEBUG_OFF(lsa
, LSA_FLOODING
);
1486 DEBUG_OFF(lsa
, LSA_GENERATE
);
1487 DEBUG_OFF(lsa
, LSA_INSTALL
);
1488 DEBUG_OFF(lsa
, LSA_REFRESH
);
1489 DEBUG_OFF(nsm
, NSM
);
1490 DEBUG_OFF(nsm
, NSM_EVENTS
);
1491 DEBUG_OFF(nsm
, NSM_STATUS
);
1492 DEBUG_OFF(nsm
, NSM_TIMERS
);
1493 DEBUG_OFF(zebra
, ZEBRA
);
1494 DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1495 DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1497 for (i
= 0; i
< 5; i
++)
1498 DEBUG_PACKET_OFF(i
, flag
);
1501 for (i
= 0; i
< 5; i
++)
1502 TERM_DEBUG_PACKET_OFF(i
, flag
);
1504 TERM_DEBUG_OFF(event
, EVENT
);
1505 TERM_DEBUG_OFF(ism
, ISM
);
1506 TERM_DEBUG_OFF(ism
, ISM_EVENTS
);
1507 TERM_DEBUG_OFF(ism
, ISM_STATUS
);
1508 TERM_DEBUG_OFF(ism
, ISM_TIMERS
);
1509 TERM_DEBUG_OFF(lsa
, LSA
);
1510 TERM_DEBUG_OFF(lsa
, LSA_FLOODING
);
1511 TERM_DEBUG_OFF(lsa
, LSA_GENERATE
);
1512 TERM_DEBUG_OFF(lsa
, LSA_INSTALL
);
1513 TERM_DEBUG_OFF(lsa
, LSA_REFRESH
);
1514 TERM_DEBUG_OFF(nsm
, NSM
);
1515 TERM_DEBUG_OFF(nsm
, NSM_EVENTS
);
1516 TERM_DEBUG_OFF(nsm
, NSM_STATUS
);
1517 TERM_DEBUG_OFF(nsm
, NSM_TIMERS
);
1518 TERM_DEBUG_OFF(nssa
, NSSA
);
1519 TERM_DEBUG_OFF(zebra
, ZEBRA
);
1520 TERM_DEBUG_OFF(zebra
, ZEBRA_INTERFACE
);
1521 TERM_DEBUG_OFF(zebra
, ZEBRA_REDISTRIBUTE
);
1526 static int show_debugging_ospf_common(struct vty
*vty
, struct ospf
*ospf
)
1531 vty_out(vty
, "\nOSPF Instance: %d\n\n", ospf
->instance
);
1533 vty_out(vty
, "OSPF debugging status:\n");
1535 /* Show debug status for events. */
1536 if (IS_DEBUG_OSPF(event
, EVENT
))
1537 vty_out(vty
, " OSPF event debugging is on\n");
1539 /* Show debug status for ISM. */
1540 if (IS_DEBUG_OSPF(ism
, ISM
) == OSPF_DEBUG_ISM
)
1541 vty_out(vty
, " OSPF ISM debugging is on\n");
1543 if (IS_DEBUG_OSPF(ism
, ISM_STATUS
))
1544 vty_out(vty
, " OSPF ISM status debugging is on\n");
1545 if (IS_DEBUG_OSPF(ism
, ISM_EVENTS
))
1546 vty_out(vty
, " OSPF ISM event debugging is on\n");
1547 if (IS_DEBUG_OSPF(ism
, ISM_TIMERS
))
1548 vty_out(vty
, " OSPF ISM timer debugging is on\n");
1551 /* Show debug status for NSM. */
1552 if (IS_DEBUG_OSPF(nsm
, NSM
) == OSPF_DEBUG_NSM
)
1553 vty_out(vty
, " OSPF NSM debugging is on\n");
1555 if (IS_DEBUG_OSPF(nsm
, NSM_STATUS
))
1556 vty_out(vty
, " OSPF NSM status debugging is on\n");
1557 if (IS_DEBUG_OSPF(nsm
, NSM_EVENTS
))
1558 vty_out(vty
, " OSPF NSM event debugging is on\n");
1559 if (IS_DEBUG_OSPF(nsm
, NSM_TIMERS
))
1560 vty_out(vty
, " OSPF NSM timer debugging is on\n");
1563 /* Show debug status for OSPF Packets. */
1564 for (i
= 0; i
< 5; i
++)
1565 if (IS_DEBUG_OSPF_PACKET(i
, SEND
)
1566 && IS_DEBUG_OSPF_PACKET(i
, RECV
)) {
1567 vty_out(vty
, " OSPF packet %s%s debugging is on\n",
1568 lookup_msg(ospf_packet_type_str
, i
+ 1, NULL
),
1569 IS_DEBUG_OSPF_PACKET(i
, DETAIL
) ? " detail"
1572 if (IS_DEBUG_OSPF_PACKET(i
, SEND
))
1574 " OSPF packet %s send%s debugging is on\n",
1575 lookup_msg(ospf_packet_type_str
, i
+ 1,
1577 IS_DEBUG_OSPF_PACKET(i
, DETAIL
)
1580 if (IS_DEBUG_OSPF_PACKET(i
, RECV
))
1582 " OSPF packet %s receive%s debugging is on\n",
1583 lookup_msg(ospf_packet_type_str
, i
+ 1,
1585 IS_DEBUG_OSPF_PACKET(i
, DETAIL
)
1590 /* Show debug status for OSPF LSAs. */
1591 if (IS_DEBUG_OSPF(lsa
, LSA
) == OSPF_DEBUG_LSA
)
1592 vty_out(vty
, " OSPF LSA debugging is on\n");
1594 if (IS_DEBUG_OSPF(lsa
, LSA_GENERATE
))
1595 vty_out(vty
, " OSPF LSA generation debugging is on\n");
1596 if (IS_DEBUG_OSPF(lsa
, LSA_FLOODING
))
1597 vty_out(vty
, " OSPF LSA flooding debugging is on\n");
1598 if (IS_DEBUG_OSPF(lsa
, LSA_INSTALL
))
1599 vty_out(vty
, " OSPF LSA install debugging is on\n");
1600 if (IS_DEBUG_OSPF(lsa
, LSA_REFRESH
))
1601 vty_out(vty
, " OSPF LSA refresh debugging is on\n");
1604 /* Show debug status for Zebra. */
1605 if (IS_DEBUG_OSPF(zebra
, ZEBRA
) == OSPF_DEBUG_ZEBRA
)
1606 vty_out(vty
, " OSPF Zebra debugging is on\n");
1608 if (IS_DEBUG_OSPF(zebra
, ZEBRA_INTERFACE
))
1610 " OSPF Zebra interface debugging is on\n");
1611 if (IS_DEBUG_OSPF(zebra
, ZEBRA_REDISTRIBUTE
))
1613 " OSPF Zebra redistribute debugging is on\n");
1616 /* Show debug status for NSSA. */
1617 if (IS_DEBUG_OSPF(nssa
, NSSA
) == OSPF_DEBUG_NSSA
)
1618 vty_out(vty
, " OSPF NSSA debugging is on\n");
1625 DEFUN_NOSH (show_debugging_ospf
,
1626 show_debugging_ospf_cmd
,
1627 "show debugging [ospf]",
1632 struct ospf
*ospf
= NULL
;
1634 ospf
= ospf_lookup_by_vrf_id(VRF_DEFAULT
);
1638 return show_debugging_ospf_common(vty
, ospf
);
1641 DEFUN_NOSH (show_debugging_ospf_instance
,
1642 show_debugging_ospf_instance_cmd
,
1643 "show debugging ospf (1-65535)",
1651 unsigned short instance
= 0;
1653 instance
= strtoul(argv
[idx_number
]->arg
, NULL
, 10);
1654 if ((ospf
= ospf_lookup_instance(instance
)) == NULL
)
1657 return show_debugging_ospf_common(vty
, ospf
);
1661 static struct cmd_node debug_node
= {
1662 DEBUG_NODE
, "", 1 /* VTYSH */
1665 static int config_write_debug(struct vty
*vty
)
1670 const char *type_str
[] = {"hello", "dd", "ls-request", "ls-update",
1672 const char *detail_str
[] = {
1673 "", " send", " recv", "",
1674 " detail", " send detail", " recv detail", " detail"};
1680 ospf
= ospf_lookup_by_vrf_id(VRF_DEFAULT
);
1685 sprintf(str
, " %u", ospf
->instance
);
1687 /* debug ospf ism (status|events|timers). */
1688 if (IS_CONF_DEBUG_OSPF(ism
, ISM
) == OSPF_DEBUG_ISM
)
1689 vty_out(vty
, "debug ospf%s ism\n", str
);
1691 if (IS_CONF_DEBUG_OSPF(ism
, ISM_STATUS
))
1692 vty_out(vty
, "debug ospf%s ism status\n", str
);
1693 if (IS_CONF_DEBUG_OSPF(ism
, ISM_EVENTS
))
1694 vty_out(vty
, "debug ospf%s ism event\n", str
);
1695 if (IS_CONF_DEBUG_OSPF(ism
, ISM_TIMERS
))
1696 vty_out(vty
, "debug ospf%s ism timer\n", str
);
1699 /* debug ospf nsm (status|events|timers). */
1700 if (IS_CONF_DEBUG_OSPF(nsm
, NSM
) == OSPF_DEBUG_NSM
)
1701 vty_out(vty
, "debug ospf%s nsm\n", str
);
1703 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_STATUS
))
1704 vty_out(vty
, "debug ospf%s nsm status\n", str
);
1705 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_EVENTS
))
1706 vty_out(vty
, "debug ospf%s nsm event\n", str
);
1707 if (IS_CONF_DEBUG_OSPF(nsm
, NSM_TIMERS
))
1708 vty_out(vty
, "debug ospf%s nsm timer\n", str
);
1711 /* debug ospf lsa (generate|flooding|install|refresh). */
1712 if (IS_CONF_DEBUG_OSPF(lsa
, LSA
) == OSPF_DEBUG_LSA
)
1713 vty_out(vty
, "debug ospf%s lsa\n", str
);
1715 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_GENERATE
))
1716 vty_out(vty
, "debug ospf%s lsa generate\n", str
);
1717 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_FLOODING
))
1718 vty_out(vty
, "debug ospf%s lsa flooding\n", str
);
1719 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_INSTALL
))
1720 vty_out(vty
, "debug ospf%s lsa install\n", str
);
1721 if (IS_CONF_DEBUG_OSPF(lsa
, LSA_REFRESH
))
1722 vty_out(vty
, "debug ospf%s lsa refresh\n", str
);
1727 /* debug ospf zebra (interface|redistribute). */
1728 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA
) == OSPF_DEBUG_ZEBRA
)
1729 vty_out(vty
, "debug ospf%s zebra\n", str
);
1731 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA_INTERFACE
))
1732 vty_out(vty
, "debug ospf%s zebra interface\n", str
);
1733 if (IS_CONF_DEBUG_OSPF(zebra
, ZEBRA_REDISTRIBUTE
))
1734 vty_out(vty
, "debug ospf%s zebra redistribute\n", str
);
1739 /* debug ospf event. */
1740 if (IS_CONF_DEBUG_OSPF(event
, EVENT
) == OSPF_DEBUG_EVENT
) {
1741 vty_out(vty
, "debug ospf%s event\n", str
);
1745 /* debug ospf nssa. */
1746 if (IS_CONF_DEBUG_OSPF(nssa
, NSSA
) == OSPF_DEBUG_NSSA
) {
1747 vty_out(vty
, "debug ospf%s nssa\n", str
);
1751 /* debug ospf packet all detail. */
1752 r
= OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
;
1753 for (i
= 0; i
< 5; i
++)
1754 r
&= conf_debug_ospf_packet
[i
]
1755 & (OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
);
1756 if (r
== (OSPF_DEBUG_SEND_RECV
| OSPF_DEBUG_DETAIL
)) {
1757 vty_out(vty
, "debug ospf%s packet all detail\n", str
);
1761 /* debug ospf packet all. */
1762 r
= OSPF_DEBUG_SEND_RECV
;
1763 for (i
= 0; i
< 5; i
++)
1764 r
&= conf_debug_ospf_packet
[i
] & OSPF_DEBUG_SEND_RECV
;
1765 if (r
== OSPF_DEBUG_SEND_RECV
) {
1766 vty_out(vty
, "debug ospf%s packet all\n", str
);
1767 for (i
= 0; i
< 5; i
++)
1768 if (conf_debug_ospf_packet
[i
] & OSPF_DEBUG_DETAIL
)
1769 vty_out(vty
, "debug ospf%s packet %s detail\n",
1774 /* debug ospf packet (hello|dd|ls-request|ls-update|ls-ack)
1775 (send|recv) (detail). */
1776 for (i
= 0; i
< 5; i
++) {
1777 if (conf_debug_ospf_packet
[i
] == 0)
1780 vty_out(vty
, "debug ospf%s packet %s%s\n", str
, type_str
[i
],
1781 detail_str
[conf_debug_ospf_packet
[i
]]);
1786 if (IS_CONF_DEBUG_OSPF(te
, TE
) == OSPF_DEBUG_TE
) {
1787 vty_out(vty
, "debug ospf%s te\n", str
);
1792 if (IS_CONF_DEBUG_OSPF(sr
, SR
) == OSPF_DEBUG_SR
) {
1793 vty_out(vty
, "debug ospf%s sr\n", str
);
1800 /* Initialize debug commands. */
1801 void ospf_debug_init(void)
1803 install_node(&debug_node
, config_write_debug
);
1805 install_element(ENABLE_NODE
, &show_debugging_ospf_cmd
);
1806 install_element(ENABLE_NODE
, &debug_ospf_ism_cmd
);
1807 install_element(ENABLE_NODE
, &debug_ospf_nsm_cmd
);
1808 install_element(ENABLE_NODE
, &debug_ospf_lsa_cmd
);
1809 install_element(ENABLE_NODE
, &debug_ospf_zebra_cmd
);
1810 install_element(ENABLE_NODE
, &debug_ospf_event_cmd
);
1811 install_element(ENABLE_NODE
, &debug_ospf_nssa_cmd
);
1812 install_element(ENABLE_NODE
, &debug_ospf_te_cmd
);
1813 install_element(ENABLE_NODE
, &debug_ospf_sr_cmd
);
1814 install_element(ENABLE_NODE
, &no_debug_ospf_ism_cmd
);
1815 install_element(ENABLE_NODE
, &no_debug_ospf_nsm_cmd
);
1816 install_element(ENABLE_NODE
, &no_debug_ospf_lsa_cmd
);
1817 install_element(ENABLE_NODE
, &no_debug_ospf_zebra_cmd
);
1818 install_element(ENABLE_NODE
, &no_debug_ospf_event_cmd
);
1819 install_element(ENABLE_NODE
, &no_debug_ospf_nssa_cmd
);
1820 install_element(ENABLE_NODE
, &no_debug_ospf_te_cmd
);
1821 install_element(ENABLE_NODE
, &no_debug_ospf_sr_cmd
);
1823 install_element(ENABLE_NODE
, &show_debugging_ospf_instance_cmd
);
1824 install_element(ENABLE_NODE
, &debug_ospf_packet_cmd
);
1825 install_element(ENABLE_NODE
, &no_debug_ospf_packet_cmd
);
1827 install_element(ENABLE_NODE
, &debug_ospf_instance_nsm_cmd
);
1828 install_element(ENABLE_NODE
, &debug_ospf_instance_lsa_cmd
);
1829 install_element(ENABLE_NODE
, &debug_ospf_instance_zebra_cmd
);
1830 install_element(ENABLE_NODE
, &debug_ospf_instance_event_cmd
);
1831 install_element(ENABLE_NODE
, &debug_ospf_instance_nssa_cmd
);
1832 install_element(ENABLE_NODE
, &no_debug_ospf_instance_nsm_cmd
);
1833 install_element(ENABLE_NODE
, &no_debug_ospf_instance_lsa_cmd
);
1834 install_element(ENABLE_NODE
, &no_debug_ospf_instance_zebra_cmd
);
1835 install_element(ENABLE_NODE
, &no_debug_ospf_instance_event_cmd
);
1836 install_element(ENABLE_NODE
, &no_debug_ospf_instance_nssa_cmd
);
1837 install_element(ENABLE_NODE
, &no_debug_ospf_cmd
);
1839 install_element(CONFIG_NODE
, &debug_ospf_packet_cmd
);
1840 install_element(CONFIG_NODE
, &no_debug_ospf_packet_cmd
);
1841 install_element(CONFIG_NODE
, &debug_ospf_ism_cmd
);
1842 install_element(CONFIG_NODE
, &no_debug_ospf_ism_cmd
);
1844 install_element(CONFIG_NODE
, &debug_ospf_nsm_cmd
);
1845 install_element(CONFIG_NODE
, &debug_ospf_lsa_cmd
);
1846 install_element(CONFIG_NODE
, &debug_ospf_zebra_cmd
);
1847 install_element(CONFIG_NODE
, &debug_ospf_event_cmd
);
1848 install_element(CONFIG_NODE
, &debug_ospf_nssa_cmd
);
1849 install_element(CONFIG_NODE
, &debug_ospf_te_cmd
);
1850 install_element(CONFIG_NODE
, &debug_ospf_sr_cmd
);
1851 install_element(CONFIG_NODE
, &no_debug_ospf_nsm_cmd
);
1852 install_element(CONFIG_NODE
, &no_debug_ospf_lsa_cmd
);
1853 install_element(CONFIG_NODE
, &no_debug_ospf_zebra_cmd
);
1854 install_element(CONFIG_NODE
, &no_debug_ospf_event_cmd
);
1855 install_element(CONFIG_NODE
, &no_debug_ospf_nssa_cmd
);
1856 install_element(CONFIG_NODE
, &no_debug_ospf_te_cmd
);
1857 install_element(CONFIG_NODE
, &no_debug_ospf_sr_cmd
);
1859 install_element(CONFIG_NODE
, &debug_ospf_instance_nsm_cmd
);
1860 install_element(CONFIG_NODE
, &debug_ospf_instance_lsa_cmd
);
1861 install_element(CONFIG_NODE
, &debug_ospf_instance_zebra_cmd
);
1862 install_element(CONFIG_NODE
, &debug_ospf_instance_event_cmd
);
1863 install_element(CONFIG_NODE
, &debug_ospf_instance_nssa_cmd
);
1864 install_element(CONFIG_NODE
, &no_debug_ospf_instance_nsm_cmd
);
1865 install_element(CONFIG_NODE
, &no_debug_ospf_instance_lsa_cmd
);
1866 install_element(CONFIG_NODE
, &no_debug_ospf_instance_zebra_cmd
);
1867 install_element(CONFIG_NODE
, &no_debug_ospf_instance_event_cmd
);
1868 install_element(CONFIG_NODE
, &no_debug_ospf_instance_nssa_cmd
);
1869 install_element(CONFIG_NODE
, &no_debug_ospf_cmd
);