mirror of
				https://git.proxmox.com/git/frr
				synced 2025-10-31 19:52:29 +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
	 Alexandre Derumier
						Alexandre Derumier