mirror of
https://git.proxmox.com/git/frr
synced 2025-05-29 16:50:48 +00:00
patch : add autort as derivation
pending upstream https://github.com/FRRouting/frr/pull/7535/ This is for ebgp, to avoid to reload frr each time when we define new vxlan. Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
This commit is contained in:
parent
b5e73281e2
commit
40feb448e4
151
debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
vendored
Normal file
151
debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
vendored
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
From c3e66b067564281a58fcf3b99559d289a75090e9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexandre Derumier <aderumier@odiso.com>
|
||||||
|
Date: Tue, 17 Nov 2020 06:01:26 +0100
|
||||||
|
Subject: [PATCH 1/3] bgpd : add an option for RT auto-derivation to force AS
|
||||||
|
|
||||||
|
Allow to define a custom AS for autort AS:VNI
|
||||||
|
|
||||||
|
Usefull for evpn with ebgp, where we can't auto-derivated from the router AS,
|
||||||
|
as route-target AS:VNI need to be the same on the each peer
|
||||||
|
|
||||||
|
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
|
||||||
|
---
|
||||||
|
bgpd/bgp_evpn.c | 12 +++++++++--
|
||||||
|
bgpd/bgp_evpn_vty.c | 49 +++++++++++++++++++++++++++++++--------------
|
||||||
|
bgpd/bgpd.h | 3 +++
|
||||||
|
3 files changed, 47 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
|
||||||
|
index 84e8960ee..73acc5d7b 100644
|
||||||
|
--- a/bgpd/bgp_evpn.c
|
||||||
|
+++ b/bgpd/bgp_evpn.c
|
||||||
|
@@ -512,7 +512,11 @@ static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl)
|
||||||
|
|
||||||
|
if (bgp->advertise_autort_rfc8365)
|
||||||
|
vni |= EVPN_AUTORT_VXLAN;
|
||||||
|
- encode_route_target_as((bgp->as & 0xFFFF), vni, &eval);
|
||||||
|
+ if (bgp->autort_as) {
|
||||||
|
+ encode_route_target_as((bgp->autort_as & 0xFFFF), vni, &eval);
|
||||||
|
+ } else {
|
||||||
|
+ encode_route_target_as((bgp->as & 0xFFFF), vni, &eval);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
ecomadd = ecommunity_new();
|
||||||
|
ecommunity_add_val(ecomadd, &eval, false, false);
|
||||||
|
@@ -4238,7 +4242,11 @@ void evpn_rt_delete_auto(struct bgp *bgp, vni_t vni, struct list *rtl)
|
||||||
|
|
||||||
|
if (bgp->advertise_autort_rfc8365)
|
||||||
|
vni |= EVPN_AUTORT_VXLAN;
|
||||||
|
- encode_route_target_as((bgp->as & 0xFFFF), vni, &eval);
|
||||||
|
+ if (bgp->autort_as) {
|
||||||
|
+ encode_route_target_as((bgp->autort_as & 0xFFFF), vni, &eval);
|
||||||
|
+ } else {
|
||||||
|
+ encode_route_target_as((bgp->as & 0xFFFF), vni, &eval);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
ecom_auto = ecommunity_new();
|
||||||
|
ecommunity_add_val(ecom_auto, &eval, false, false);
|
||||||
|
diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c
|
||||||
|
index e9e2aafeb..6cc6bba33 100644
|
||||||
|
--- a/bgpd/bgp_evpn_vty.c
|
||||||
|
+++ b/bgpd/bgp_evpn_vty.c
|
||||||
|
@@ -3226,32 +3226,48 @@ DEFUN (no_bgp_evpn_advertise_all_vni,
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
-DEFUN (bgp_evpn_advertise_autort_rfc8365,
|
||||||
|
- bgp_evpn_advertise_autort_rfc8365_cmd,
|
||||||
|
- "autort rfc8365-compatible",
|
||||||
|
- "Auto-derivation of RT\n"
|
||||||
|
- "Auto-derivation of RT using RFC8365\n")
|
||||||
|
+DEFPY(bgp_evpn_advertise_autort, bgp_evpn_advertise_autort_cmd,
|
||||||
|
+ "autort [rfc8365-compatible]$rfc8365 [as (1-65536)$as]",
|
||||||
|
+ "Auto-derivation of RT\n"
|
||||||
|
+ "Auto-derivation of RT using RFC8365\n"
|
||||||
|
+ "Auto-derivation AS\n")
|
||||||
|
{
|
||||||
|
struct bgp *bgp = VTY_GET_CONTEXT(bgp);
|
||||||
|
|
||||||
|
if (!bgp)
|
||||||
|
return CMD_WARNING;
|
||||||
|
- evpn_set_advertise_autort_rfc8365(bgp);
|
||||||
|
+
|
||||||
|
+ if (as) {
|
||||||
|
+ bgp->autort_as = as;
|
||||||
|
+ bgp_evpn_handle_autort_change(bgp);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (rfc8365)
|
||||||
|
+ evpn_set_advertise_autort_rfc8365(bgp);
|
||||||
|
+
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
-DEFUN (no_bgp_evpn_advertise_autort_rfc8365,
|
||||||
|
- no_bgp_evpn_advertise_autort_rfc8365_cmd,
|
||||||
|
- "no autort rfc8365-compatible",
|
||||||
|
- NO_STR
|
||||||
|
- "Auto-derivation of RT\n"
|
||||||
|
- "Auto-derivation of RT using RFC8365\n")
|
||||||
|
+DEFPY(no_bgp_evpn_advertise_autort, no_bgp_evpn_advertise_autort_cmd,
|
||||||
|
+ "no autort [rfc8365-compatible]$rfc8365 [as (1-65536)$as]",
|
||||||
|
+ NO_STR
|
||||||
|
+ "Auto-derivation of RT\n"
|
||||||
|
+ "Auto-derivation of RT using RFC8365\n"
|
||||||
|
+ "Auto-derivation AS\n")
|
||||||
|
{
|
||||||
|
struct bgp *bgp = VTY_GET_CONTEXT(bgp);
|
||||||
|
|
||||||
|
if (!bgp)
|
||||||
|
return CMD_WARNING;
|
||||||
|
- evpn_unset_advertise_autort_rfc8365(bgp);
|
||||||
|
+
|
||||||
|
+ if (as) {
|
||||||
|
+ bgp->autort_as = 0;
|
||||||
|
+ bgp_evpn_handle_autort_change(bgp);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (rfc8365)
|
||||||
|
+ evpn_unset_advertise_autort_rfc8365(bgp);
|
||||||
|
+
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -5596,6 +5612,9 @@ void bgp_config_write_evpn_info(struct vty *vty, struct bgp *bgp, afi_t afi,
|
||||||
|
if (bgp->advertise_autort_rfc8365)
|
||||||
|
vty_out(vty, " autort rfc8365-compatible\n");
|
||||||
|
|
||||||
|
+ if (bgp->autort_as)
|
||||||
|
+ vty_out(vty, " autort as %u\n", bgp->autort_as);
|
||||||
|
+
|
||||||
|
if (bgp->advertise_gw_macip)
|
||||||
|
vty_out(vty, " advertise-default-gw\n");
|
||||||
|
|
||||||
|
@@ -5732,8 +5751,8 @@ void bgp_ethernetvpn_init(void)
|
||||||
|
install_element(BGP_EVPN_NODE, &evpnrt5_network_cmd);
|
||||||
|
install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_all_vni_cmd);
|
||||||
|
install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_all_vni_cmd);
|
||||||
|
- install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_autort_rfc8365_cmd);
|
||||||
|
- install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_autort_rfc8365_cmd);
|
||||||
|
+ install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_autort_cmd);
|
||||||
|
+ install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_autort_cmd);
|
||||||
|
install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_default_gw_cmd);
|
||||||
|
install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_default_gw_cmd);
|
||||||
|
install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_svi_ip_cmd);
|
||||||
|
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
|
||||||
|
index d22fd008d..941066e2e 100644
|
||||||
|
--- a/bgpd/bgpd.h
|
||||||
|
+++ b/bgpd/bgpd.h
|
||||||
|
@@ -614,6 +614,9 @@ struct bgp {
|
||||||
|
/* EVPN - use RFC 8365 to auto-derive RT */
|
||||||
|
int advertise_autort_rfc8365;
|
||||||
|
|
||||||
|
+ /* EVPN - auto-derive RT AS */
|
||||||
|
+ uint16_t autort_as;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Flooding mechanism for BUM packets for VxLAN-EVPN.
|
||||||
|
*/
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
@ -1 +1,2 @@
|
|||||||
pve/0001-enable-bgp-daemon.patch
|
pve/0001-enable-bgp-daemon.patch
|
||||||
|
pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user