diff options
Diffstat (limited to 'main/quagga/1001-bgpd-implement-next-hop-self-all.patch')
-rw-r--r-- | main/quagga/1001-bgpd-implement-next-hop-self-all.patch | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/main/quagga/1001-bgpd-implement-next-hop-self-all.patch b/main/quagga/1001-bgpd-implement-next-hop-self-all.patch deleted file mode 100644 index dd5e3e1aa1..0000000000 --- a/main/quagga/1001-bgpd-implement-next-hop-self-all.patch +++ /dev/null @@ -1,151 +0,0 @@ -From 9e7a53c179f6897128b24435452b5d3d0f8c715a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi> -Date: Thu, 24 Apr 2014 10:22:37 +0300 -Subject: [PATCH] bgpd: implement "next-hop-self all" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -As specified in: -http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610 - -This allows overriding next-hop for ibgp learned routes on an -RR for reflected routes. - -Especially useful for using iBGP in DMVPN setups. See: -http://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html - -Signed-off-by: Timo Teräs <timo.teras@iki.fi> ---- - bgpd/bgp_route.c | 3 ++- - bgpd/bgp_vty.c | 30 +++++++++++++++++++++++------- - bgpd/bgpd.c | 5 ++++- - bgpd/bgpd.h | 1 + - doc/bgpd.texi | 8 +++++--- - 5 files changed, 35 insertions(+), 12 deletions(-) - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index f421ca5..232a6a1 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -976,7 +976,8 @@ bgp_announce_check (struct bgp_info *ri, struct peer *peer, struct prefix *p, - } - - /* next-hop-set */ -- if (transparent || reflect -+ if (transparent -+ || (reflect && ! CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF_ALL)) - || (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED) - && ((p->family == AF_INET && attr->nexthop.s_addr) - #ifdef HAVE_IPV6 -diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c -index 3c6973b..a818fe7 100644 ---- a/bgpd/bgp_vty.c -+++ b/bgpd/bgp_vty.c -@@ -2093,25 +2093,41 @@ DEFUN (no_neighbor_capability_orf_prefix, - /* neighbor next-hop-self. */ - DEFUN (neighbor_nexthop_self, - neighbor_nexthop_self_cmd, -- NEIGHBOR_CMD2 "next-hop-self", -+ NEIGHBOR_CMD2 "next-hop-self {all}", - NEIGHBOR_STR - NEIGHBOR_ADDR_STR2 -- "Disable the next hop calculation for this neighbor\n") -+ "Disable the next hop calculation for this neighbor\n" -+ "Apply also to ibgp-learned routes when acting as a route reflector\n") - { -- return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), -- bgp_node_safi (vty), PEER_FLAG_NEXTHOP_SELF); -+ u_int32_t flags = PEER_FLAG_NEXTHOP_SELF, unset = 0; -+ int rc; -+ -+ /* Check if "all" is specified */ -+ if (argv[1] != NULL) -+ flags |= PEER_FLAG_NEXTHOP_SELF_ALL; -+ else -+ unset |= PEER_FLAG_NEXTHOP_SELF_ALL; -+ -+ rc = peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), -+ bgp_node_safi (vty), flags); -+ if ( rc == CMD_SUCCESS && unset ) -+ rc = peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), -+ bgp_node_safi (vty), unset); -+ return rc; - } - - DEFUN (no_neighbor_nexthop_self, - no_neighbor_nexthop_self_cmd, -- NO_NEIGHBOR_CMD2 "next-hop-self", -+ NO_NEIGHBOR_CMD2 "next-hop-self {all}", - NO_STR - NEIGHBOR_STR - NEIGHBOR_ADDR_STR2 -- "Disable the next hop calculation for this neighbor\n") -+ "Disable the next hop calculation for this neighbor\n" -+ "Apply also to ibgp-learned routes when acting as a route reflector\n") - { - return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), -- bgp_node_safi (vty), PEER_FLAG_NEXTHOP_SELF); -+ bgp_node_safi (vty), -+ PEER_FLAG_NEXTHOP_SELF|PEER_FLAG_NEXTHOP_SELF_ALL); - } - - /* neighbor remove-private-AS. */ -diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 19b96fa..4d374cc 100644 ---- a/bgpd/bgpd.c -+++ b/bgpd/bgpd.c -@@ -2355,6 +2355,7 @@ static const struct peer_flag_action peer_af_flag_action_list[] = - { PEER_FLAG_ORF_PREFIX_SM, 1, peer_change_reset }, - { PEER_FLAG_ORF_PREFIX_RM, 1, peer_change_reset }, - { PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED, 0, peer_change_reset_out }, -+ { PEER_FLAG_NEXTHOP_SELF_ALL, 1, peer_change_reset_out }, - { 0, 0, 0 } - }; - -@@ -4990,7 +4991,9 @@ bgp_config_write_peer (struct vty *vty, struct bgp *bgp, - /* Nexthop self. */ - if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_SELF) - && ! peer->af_group[afi][safi]) -- vty_out (vty, " neighbor %s next-hop-self%s", addr, VTY_NEWLINE); -+ vty_out (vty, " neighbor %s next-hop-self%s%s", addr, -+ peer_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_SELF_ALL) ? -+ " all" : "", VTY_NEWLINE); - - /* Remove private AS. */ - if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS) -diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h -index a1b1273..eae803d 100644 ---- a/bgpd/bgpd.h -+++ b/bgpd/bgpd.h -@@ -412,6 +412,7 @@ struct peer - #define PEER_FLAG_MAX_PREFIX (1 << 14) /* maximum prefix */ - #define PEER_FLAG_MAX_PREFIX_WARNING (1 << 15) /* maximum prefix warning-only */ - #define PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED (1 << 16) /* leave link-local nexthop unchanged */ -+#define PEER_FLAG_NEXTHOP_SELF_ALL (1 << 17) /* next-hop-self all */ - - /* MD5 password */ - char *password; -diff --git a/doc/bgpd.texi b/doc/bgpd.texi -index cb9789b..de70970 100644 ---- a/doc/bgpd.texi -+++ b/doc/bgpd.texi -@@ -299,10 +299,12 @@ This command is deprecated and may be removed in a future release. Its - use should be avoided. - @end deffn - --@deffn {BGP} {neighbor @var{peer} next-hop-self} {} --@deffnx {BGP} {no neighbor @var{peer} next-hop-self} {} -+@deffn {BGP} {neighbor @var{peer} next-hop-self [all]} {} -+@deffnx {BGP} {no neighbor @var{peer} next-hop-self [all]} {} - This command specifies an announced route's nexthop as being equivalent --to the address of the bgp router. -+to the address of the bgp router if it is learned via eBGP. -+If the optional keyword @code{all} is specified the modifiation is done -+also for routes learned via iBGP. - @end deffn - - @deffn {BGP} {neighbor @var{peer} update-source @var{<ifname|address>}} {} --- -2.1.0 - |