From b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d Mon Sep 17 00:00:00 2001 From: Denis Ovsienko Date: Wed, 8 Dec 2010 18:51:37 +0300 Subject: bgpd: fix community-list error message spelling * bgp_vty.c: (community_list_perror, show_ip_community_list_arg, show_ip_extcommunity_list_arg) fix spelling --- bgpd/bgp_vty.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 88be52e2..ec0106a8 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -9952,7 +9952,7 @@ community_list_perror (struct vty *vty, int ret) switch (ret) { case COMMUNITY_LIST_ERR_CANT_FIND_LIST: - vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE); + vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE); break; case COMMUNITY_LIST_ERR_MALFORMED_VAL: vty_out (vty, "%% Malformed community-list value%s", VTY_NEWLINE); @@ -10313,7 +10313,7 @@ DEFUN (show_ip_community_list_arg, list = community_list_lookup (bgp_clist, argv[0], COMMUNITY_LIST_MASTER); if (! list) { - vty_out (vty, "%% Can't find communit-list%s", VTY_NEWLINE); + vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE); return CMD_WARNING; } @@ -10663,7 +10663,7 @@ DEFUN (show_ip_extcommunity_list_arg, list = community_list_lookup (bgp_clist, argv[0], EXTCOMMUNITY_LIST_MASTER); if (! list) { - vty_out (vty, "%% Can't find extcommunit-list%s", VTY_NEWLINE); + vty_out (vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE); return CMD_WARNING; } -- cgit v1.2.1 From 403138e189c24f6867824c4eeb668d11564e1ca0 Mon Sep 17 00:00:00 2001 From: Dmitrij Tejblum Date: Thu, 13 Jan 2011 18:25:40 +0300 Subject: ospf6d: fix crash in SPF calculation * ospf6_spf.c: Don't replace a node with another node with a lower number of hops, instead get them from the queue in the correct order. (Actually, the replacement crashed the ospf6d daemon rather than worked.) --- ospf6d/ospf6_spf.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c index bfb6df2e..04367f08 100644 --- a/ospf6d/ospf6_spf.c +++ b/ospf6d/ospf6_spf.c @@ -50,7 +50,9 @@ ospf6_vertex_cmp (void *a, void *b) struct ospf6_vertex *vb = (struct ospf6_vertex *) b; /* ascending order */ - return (va->cost - vb->cost); + if (va->cost != vb->cost) + return (va->cost - vb->cost); + return (va->hops - vb->hops); } static int @@ -320,22 +322,8 @@ ospf6_spf_install (struct ospf6_vertex *v, } prev = (struct ospf6_vertex *) route->route_option; - if (prev->hops > v->hops) - { - for (ALL_LIST_ELEMENTS (prev->child_list, node, nnode, w)) - { - assert (w->parent == prev); - w->parent = v; - listnode_add_sort (v->child_list, w); - } - listnode_delete (prev->parent->child_list, prev); - listnode_add_sort (v->parent->child_list, v); - - ospf6_vertex_delete (prev); - route->route_option = v; - } - else - ospf6_vertex_delete (v); + assert (prev->hops <= v->hops); + ospf6_vertex_delete (v); return -1; } -- cgit v1.2.1 From c7aa8abd8788c3607ad0131f02e892cf92221e40 Mon Sep 17 00:00:00 2001 From: Dmitrij Tejblum Date: Fri, 14 Jan 2011 18:27:05 +0300 Subject: bgpd: fix handling of "Unsupported Capability" * bgp_packet.c: (bgp_notify_receive) justify the difference between BGP_NOTIFY_OPEN_UNSUP_PARAM and BGP_NOTIFY_OPEN_UNSUP_CAPBL cases, as it is explained in RFC5492, page 3, paragraph 1. "Unsupported Capability" error does not mean, that the peer doesn't support capabilities advertisement -- quite the opposite (if the peer would not support capabilities advertisement, the code would be "Unsupported Optional Parameter"). Thus there is no reason to mark the peer as one non-supporting capabilities advertisement. Example: suppose the peer is in fact IPv6-only, but we didn't configure anything address-family specific for it. Then, the peer would refuse the session with "Unsupported Capability" code. If we internally set the peer as non-supporting capabilities advertisement after that, we will not be able to establish the session with it ever, even with a fixed configuration -- IPv6-only BGP session cannot be established without capabilities. In practice an edge case would be seen as the same IPv6 peer working with its "neighbor" block read from bgpd.conf, but not working, when slowly input in "conf t" mode. --- bgpd/bgp_packet.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index a5f9552c..9102add7 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1885,12 +1885,6 @@ bgp_notify_receive (struct peer *peer, bgp_size_t size) bgp_notify.subcode == BGP_NOTIFY_OPEN_UNSUP_PARAM ) UNSET_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN); - /* Also apply to Unsupported Capability until remote router support - capability. */ - if (bgp_notify.code == BGP_NOTIFY_OPEN_ERR && - bgp_notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL) - UNSET_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN); - BGP_EVENT_ADD (peer, Receive_NOTIFICATION_message); } -- cgit v1.2.1 From 6e22b9017e1ae2ce61c383b1b2b63973207704ac Mon Sep 17 00:00:00 2001 From: David Ward Date: Mon, 17 Jan 2011 10:58:52 +0300 Subject: bgpd: VTY string fixes for debug commands * bgpd/bgp_debug.c: fix VTY strings for BGP debug commands to match correct syntax --- bgpd/bgp_debug.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index c2077a59..26b35dfc 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -331,7 +331,6 @@ ALIAS (no_debug_bgp_as4, undebug_bgp_as4_cmd, "undebug bgp as4", UNDEBUG_STR - DEBUG_STR BGP_STR "BGP AS4 actions\n") @@ -340,6 +339,7 @@ DEFUN (debug_bgp_as4_segment, "debug bgp as4 segment", DEBUG_STR BGP_STR + "BGP AS4 actions\n" "BGP AS4 aspath segment handling\n") { if (vty->node == CONFIG_NODE) @@ -358,6 +358,7 @@ DEFUN (no_debug_bgp_as4_segment, NO_STR DEBUG_STR BGP_STR + "BGP AS4 actions\n" "BGP AS4 aspath segment handling\n") { if (vty->node == CONFIG_NODE) @@ -374,8 +375,8 @@ ALIAS (no_debug_bgp_as4_segment, undebug_bgp_as4_segment_cmd, "undebug bgp as4 segment", UNDEBUG_STR - DEBUG_STR BGP_STR + "BGP AS4 actions\n" "BGP AS4 aspath segment handling\n") DEFUN (debug_bgp_fsm, @@ -417,7 +418,6 @@ ALIAS (no_debug_bgp_fsm, undebug_bgp_fsm_cmd, "undebug bgp fsm", UNDEBUG_STR - DEBUG_STR BGP_STR "Finite State Machine\n") @@ -715,7 +715,6 @@ ALIAS (no_debug_bgp_zebra, undebug_bgp_zebra_cmd, "undebug bgp zebra", UNDEBUG_STR - DEBUG_STR BGP_STR "BGP Zebra messages\n") -- cgit v1.2.1 From 0fa0335316ce14a79ea4bbb0c40e1322c9941dd3 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 24 Feb 2011 13:52:14 +0300 Subject: ripd: resolve debug statements issue (bug 442) ...A nasty bug, if you forgot to disable debugging, stored the config and reboot your machine - if you really depend on ripd, then the machine will not fully come back on the network, because ripd fails. --- ripd/rip_debug.c | 24 +++++++++--------------- ripd/rip_debug.h | 1 - 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/ripd/rip_debug.c b/ripd/rip_debug.c index 64dc27c0..662e5843 100644 --- a/ripd/rip_debug.c +++ b/ripd/rip_debug.c @@ -44,19 +44,16 @@ DEFUN (show_debugging_rip, { if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV) { - vty_out (vty, " RIP packet%s debugging is on%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIP packet debugging is on%s", VTY_NEWLINE); } else { if (IS_RIP_DEBUG_SEND) - vty_out (vty, " RIP packet send%s debugging is on%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIP packet send debugging is on%s", VTY_NEWLINE); else - vty_out (vty, " RIP packet receive%s debugging is on%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIP packet receive debugging is on%s", VTY_NEWLINE); } } @@ -105,11 +102,12 @@ DEFUN (debug_rip_packet_direct, rip_debug_packet |= RIP_DEBUG_SEND; if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) rip_debug_packet |= RIP_DEBUG_RECV; - rip_debug_packet &= ~RIP_DEBUG_DETAIL; return CMD_SUCCESS; } -DEFUN (debug_rip_packet_detail, +/* N.B. the "detail" modifier is a no-op. we leave this command + for legacy compatibility. */ +DEFUN_DEPRECATED (debug_rip_packet_detail, debug_rip_packet_detail_cmd, "debug rip packet (recv|send) detail", DEBUG_STR @@ -124,7 +122,6 @@ DEFUN (debug_rip_packet_detail, rip_debug_packet |= RIP_DEBUG_SEND; if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) rip_debug_packet |= RIP_DEBUG_RECV; - rip_debug_packet |= RIP_DEBUG_DETAIL; return CMD_SUCCESS; } @@ -224,20 +221,17 @@ config_write_debug (struct vty *vty) { if (IS_RIP_DEBUG_SEND && IS_RIP_DEBUG_RECV) { - vty_out (vty, "debug rip packet%s%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug rip packet%s", VTY_NEWLINE); write++; } else { if (IS_RIP_DEBUG_SEND) - vty_out (vty, "debug rip packet send%s%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug rip packet send%s", VTY_NEWLINE); else - vty_out (vty, "debug rip packet recv%s%s", - IS_RIP_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug rip packet recv%s", VTY_NEWLINE); write++; } diff --git a/ripd/rip_debug.h b/ripd/rip_debug.h index f3a07eea..990ec908 100644 --- a/ripd/rip_debug.h +++ b/ripd/rip_debug.h @@ -40,7 +40,6 @@ #define IS_RIP_DEBUG_PACKET (rip_debug_packet & RIP_DEBUG_PACKET) #define IS_RIP_DEBUG_SEND (rip_debug_packet & RIP_DEBUG_SEND) #define IS_RIP_DEBUG_RECV (rip_debug_packet & RIP_DEBUG_RECV) -#define IS_RIP_DEBUG_DETAIL (rip_debug_packet & RIP_DEBUG_DETAIL) #define IS_RIP_DEBUG_ZEBRA (rip_debug_zebra & RIP_DEBUG_ZEBRA) -- cgit v1.2.1 From b016e9def4255a7406f5633c6edb820e13c9088e Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Sun, 13 Mar 2011 01:14:08 +0300 Subject: ripngd: copy debug statements fix from ripd Doesn't ripng needs same fix as ripd. --- ripngd/ripng_debug.c | 26 +++++++++++--------------- ripngd/ripng_debug.h | 2 -- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/ripngd/ripng_debug.c b/ripngd/ripng_debug.c index 78f13a71..33a7cf69 100644 --- a/ripngd/ripng_debug.c +++ b/ripngd/ripng_debug.c @@ -45,19 +45,16 @@ DEFUN (show_debugging_ripng, { if (IS_RIPNG_DEBUG_SEND && IS_RIPNG_DEBUG_RECV) { - vty_out (vty, " RIPng packet%s debugging is on%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIPng packet debugging is on%s", VTY_NEWLINE); } else { if (IS_RIPNG_DEBUG_SEND) - vty_out (vty, " RIPng packet send%s debugging is on%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIPng packet send debugging is on%s", VTY_NEWLINE); else - vty_out (vty, " RIPng packet receive%s debugging is on%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, " RIPng packet receive debugging is on%s", VTY_NEWLINE); } } @@ -106,11 +103,13 @@ DEFUN (debug_ripng_packet_direct, ripng_debug_packet |= RIPNG_DEBUG_SEND; if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) ripng_debug_packet |= RIPNG_DEBUG_RECV; - ripng_debug_packet &= ~RIPNG_DEBUG_DETAIL; + return CMD_SUCCESS; } -DEFUN (debug_ripng_packet_detail, +/* N.B. the "detail" modifier is a no-op. we leave this command + for legacy compatibility. */ +DEFUN_DEPRECATED (debug_ripng_packet_detail, debug_ripng_packet_detail_cmd, "debug ripng packet (recv|send) detail", DEBUG_STR @@ -125,7 +124,7 @@ DEFUN (debug_ripng_packet_detail, ripng_debug_packet |= RIPNG_DEBUG_SEND; if (strncmp ("recv", argv[0], strlen (argv[0])) == 0) ripng_debug_packet |= RIPNG_DEBUG_RECV; - ripng_debug_packet |= RIPNG_DEBUG_DETAIL; + return CMD_SUCCESS; } @@ -225,20 +224,17 @@ config_write_debug (struct vty *vty) { if (IS_RIPNG_DEBUG_SEND && IS_RIPNG_DEBUG_RECV) { - vty_out (vty, "debug ripng packet%s%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug ripng packet%s", VTY_NEWLINE); write++; } else { if (IS_RIPNG_DEBUG_SEND) - vty_out (vty, "debug ripng packet send%s%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug ripng packet send%s", VTY_NEWLINE); else - vty_out (vty, "debug ripng packet recv%s%s", - IS_RIPNG_DEBUG_DETAIL ? " detail" : "", + vty_out (vty, "debug ripng packet recv%s", VTY_NEWLINE); write++; } diff --git a/ripngd/ripng_debug.h b/ripngd/ripng_debug.h index f5ed6eab..674345c0 100644 --- a/ripngd/ripng_debug.h +++ b/ripngd/ripng_debug.h @@ -29,7 +29,6 @@ #define RIPNG_DEBUG_PACKET 0x01 #define RIPNG_DEBUG_SEND 0x20 #define RIPNG_DEBUG_RECV 0x40 -#define RIPNG_DEBUG_DETAIL 0x80 #define RIPNG_DEBUG_ZEBRA 0x01 @@ -39,7 +38,6 @@ #define IS_RIPNG_DEBUG_PACKET (ripng_debug_packet & RIPNG_DEBUG_PACKET) #define IS_RIPNG_DEBUG_SEND (ripng_debug_packet & RIPNG_DEBUG_SEND) #define IS_RIPNG_DEBUG_RECV (ripng_debug_packet & RIPNG_DEBUG_RECV) -#define IS_RIPNG_DEBUG_DETAIL (ripng_debug_packet & RIPNG_DEBUG_DETAIL) #define IS_RIPNG_DEBUG_ZEBRA (ripng_debug_zebra & RIPNG_DEBUG_ZEBRA) -- cgit v1.2.1 From 30b0017696dfe300b6ea630a6b6c91ea440d7828 Mon Sep 17 00:00:00 2001 From: John Kemp Date: Fri, 18 Mar 2011 17:52:18 +0300 Subject: bgpd: improve "monotonic" uptime correction Older versions of Quagga/Zebra would output a value in MRT table dump files for "uptime" aka "ORIGINATED" that was a WALL clock value. Given that uptime is now internally a bgp_clock MONOTONIC value, the output in the MRT files is showing up as monotonic. Note: time of MRT dump is still recorded correctly as a time() based value, so we haven't lost that value. Proposal is to correct the uptime output on the vty and in the MRT files to again display something more akin to WALL time. * bgp_dump.c: (bgp_dump_routes_func) add conditional correction * bgp_route.c: (route_vty_out_detail) make correction conditional, move variable declaration to beginning of the function --- bgpd/bgp_dump.c | 4 ++++ bgpd/bgp_route.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c index 8087a403..edb725a9 100644 --- a/bgpd/bgp_dump.c +++ b/bgpd/bgp_dump.c @@ -356,7 +356,11 @@ bgp_dump_routes_func (int afi, int first_run, unsigned int seq) stream_putw(obuf, info->peer->table_dump_index); /* Originated */ +#ifdef HAVE_CLOCK_MONOTONIC + stream_putl (obuf, time(NULL) - (bgp_clock() - info->uptime)); +#else stream_putl (obuf, info->uptime); +#endif /* HAVE_CLOCK_MONOTONIC */ /* Dump attribute. */ /* Skip prefix & AFI/SAFI for MP_NLRI */ diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 1cfc4511..05c8efc8 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -5979,6 +5979,9 @@ route_vty_out_detail (struct vty *vty, struct bgp *bgp, struct prefix *p, char buf1[BUFSIZ]; struct attr *attr; int sockunion_vty_out (struct vty *, union sockunion *); +#ifdef HAVE_CLOCK_MONOTONIC + time_t tbuf; +#endif attr = binfo->attr; @@ -6145,8 +6148,12 @@ route_vty_out_detail (struct vty *vty, struct bgp *bgp, struct prefix *p, bgp_damp_info_vty (vty, binfo); /* Line 7 display Uptime */ - time_t tbuf = time(NULL) - (bgp_clock() - binfo->uptime); +#ifdef HAVE_CLOCK_MONOTONIC + tbuf = time(NULL) - (bgp_clock() - binfo->uptime); vty_out (vty, " Last update: %s", ctime(&tbuf)); +#else + vty_out (vty, " Last update: %s", ctime(&binfo->uptime)); +#endif /* HAVE_CLOCK_MONOTONIC */ } vty_out (vty, "%s", VTY_NEWLINE); } -- cgit v1.2.1 From e6844aa5d23cf56dd1f31afc96e8145ab188953f Mon Sep 17 00:00:00 2001 From: Denis Ovsienko Date: Fri, 18 Mar 2011 20:20:53 +0300 Subject: doc: fix "ipv6 address" interface command syntax (#608) --- doc/main.texi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/main.texi b/doc/main.texi index 9966b356..a5759137 100644 --- a/doc/main.texi +++ b/doc/main.texi @@ -49,9 +49,9 @@ Up or down the current interface. @end deffn @deffn {Interface Command} {ip address @var{address/prefix}} {} -@deffnx {Interface Command} {ip6 address @var{address/prefix}} {} +@deffnx {Interface Command} {ipv6 address @var{address/prefix}} {} @deffnx {Interface Command} {no ip address @var{address/prefix}} {} -@deffnx {Interface Command} {no ip6 address @var{address/prefix}} {} +@deffnx {Interface Command} {no ipv6 address @var{address/prefix}} {} Set the IPv4 or IPv6 address/prefix for the interface. @end deffn -- cgit v1.2.1