mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-30 17:48:09 +00:00 
			
		
		
		
	[202311][sonic-utilities] Revert bgp suppress fib pending (#17915)
Revert "Revert "[202311] Revert bgp suppress fib pending" (#17882)"
This reverts commit 1ccee478e2.
sonic-utilities:
* be294f39 2024-01-25 | [202311] Revert bgp suppress fib pending (#3003) (HEAD -> 202311, github/202311) [Stepan Blyshchak]
Signed-off-by: Ying Xie <ying.xie@microsoft.com>
			
			
This commit is contained in:
		| @@ -66,7 +66,6 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }} | |||||||
| ! | ! | ||||||
| {% block bgp_init %} | {% block bgp_init %} | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| {% if (DEVICE_METADATA is defined) and ('localhost' in DEVICE_METADATA) and ('subtype' in DEVICE_METADATA['localhost']) and (DEVICE_METADATA['localhost']['subtype'].lower() == 'dualtor') %} | {% if (DEVICE_METADATA is defined) and ('localhost' in DEVICE_METADATA) and ('subtype' in DEVICE_METADATA['localhost']) and (DEVICE_METADATA['localhost']['subtype'].lower() == 'dualtor') %} | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ stderr_logfile=syslog | |||||||
| dependent_startup=true | dependent_startup=true | ||||||
|  |  | ||||||
| [program:zebra] | [program:zebra] | ||||||
| command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl -M snmp --asic-offload=notify_on_offload | command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M fpm -M snmp | ||||||
| priority=4 | priority=4 | ||||||
| autostart=false | autostart=false | ||||||
| autorestart=false | autorestart=false | ||||||
|   | |||||||
| @@ -164,7 +164,7 @@ environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log{{ asan_extra_ | |||||||
| {% endif %} | {% endif %} | ||||||
|  |  | ||||||
| [program:zebra] | [program:zebra] | ||||||
| command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl --asic-offload=notify_on_offload | command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M fpm | ||||||
| priority=13 | priority=13 | ||||||
| autostart=false | autostart=false | ||||||
| autorestart=false | autorestart=false | ||||||
|   | |||||||
| @@ -304,11 +304,10 @@ class BGPPeerMgrBase(Manager): | |||||||
|         :return: True if no errors, False if there are errors |         :return: True if no errors, False if there are errors | ||||||
|         """ |         """ | ||||||
|         bgp_asn = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME)["localhost"]["bgp_asn"] |         bgp_asn = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME)["localhost"]["bgp_asn"] | ||||||
|         enable_bgp_suppress_fib_pending_cmd = 'bgp suppress-fib-pending' |  | ||||||
|         if vrf == 'default': |         if vrf == 'default': | ||||||
|             cmd = ('router bgp %s\n %s\n' % (bgp_asn, enable_bgp_suppress_fib_pending_cmd)) + cmd |             cmd = ('router bgp %s\n' % bgp_asn) + cmd | ||||||
|         else: |         else: | ||||||
|             cmd = ('router bgp %s vrf %s\n %s\n' % (bgp_asn, vrf, enable_bgp_suppress_fib_pending_cmd)) + cmd |             cmd = ('router bgp %s vrf %s\n' % (bgp_asn, vrf)) + cmd | ||||||
|         self.cfg_mgr.push(cmd) |         self.cfg_mgr.push(cmd) | ||||||
|         return True |         return True | ||||||
|  |  | ||||||
|   | |||||||
| @@ -55,7 +55,6 @@ route-map HIDE_INTERNAL permit 20 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ ip prefix-list PL_LoopbackV4 permit 55.55.55.55/32 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ ipv6 prefix-list PL_LoopbackV6 permit fc00::1/128 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -71,7 +71,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 55555 | router bgp 55555 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -2131,10 +2131,6 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw | |||||||
|     if current_device and current_device['type'] in mgmt_device_types: |     if current_device and current_device['type'] in mgmt_device_types: | ||||||
|         results["FLEX_COUNTER_TABLE"] = {counter: {"FLEX_COUNTER_STATUS": "disable"} for counter in mgmt_disabled_counters} |         results["FLEX_COUNTER_TABLE"] = {counter: {"FLEX_COUNTER_STATUS": "disable"} for counter in mgmt_disabled_counters} | ||||||
|  |  | ||||||
|     # Enable bgp-suppress-fib by default for leafrouter |  | ||||||
|     if current_device and current_device['type'] in leafrouter_device_types: |  | ||||||
|         results['DEVICE_METADATA']['localhost']['suppress-fib-pending'] = 'enabled' |  | ||||||
|  |  | ||||||
|     return results |     return results | ||||||
|  |  | ||||||
| def get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, tunnel_qos_remap, mux_tunnel_name, peer_switch_ip): | def get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, tunnel_qos_remap, mux_tunnel_name, peer_switch_ip): | ||||||
|   | |||||||
| @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
|   coalesce-time 10000 |   coalesce-time 10000 | ||||||
|   | |||||||
| @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -62,7 +62,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32 | |||||||
| router bgp 4000 | router bgp 4000 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
|   coalesce-time 10000 |   coalesce-time 10000 | ||||||
|   | |||||||
| @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -62,7 +62,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 | |||||||
| router bgp 65100 | router bgp 65100 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32 | |||||||
| router bgp 4000 | router bgp 4000 | ||||||
| ! | ! | ||||||
|   bgp log-neighbor-changes |   bgp log-neighbor-changes | ||||||
|   bgp suppress-fib-pending |  | ||||||
|   no bgp default ipv4-unicast |   no bgp default ipv4-unicast | ||||||
|   no bgp ebgp-requires-policy |   no bgp ebgp-requires-policy | ||||||
| ! | ! | ||||||
|   | |||||||
| @@ -1,121 +0,0 @@ | |||||||
| From f5f0018266c98ad96cdbe69ae60d501de21e5600 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
| Date: Thu, 20 Oct 2022 13:19:31 +0000 |  | ||||||
| Subject: [PATCH] From 369bbb4d62aa47d5a6d5157ca6ea819c4cb80f15 Mon Sep 17 |  | ||||||
|  00:00:00 2001 Subject: [PATCH 07/13] Added support of L3VNI EVPN |  | ||||||
|  |  | ||||||
| This is temp patch till Prefix to ARP indirection is add in neighorch |  | ||||||
|  |  | ||||||
| Signed-off-by: Kishore Kunal <kishore.kunal@broadcom.com> |  | ||||||
| Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
|  |  | ||||||
| diff --git a/lib/nexthop.c b/lib/nexthop.c |  | ||||||
| index 7ebc4fefb..2f7bb0e7b 100644 |  | ||||||
| --- a/lib/nexthop.c |  | ||||||
| +++ b/lib/nexthop.c |  | ||||||
| @@ -813,6 +813,7 @@ void nexthop_copy_no_recurse(struct nexthop *copy, |  | ||||||
|  	memcpy(©->src, &nexthop->src, sizeof(nexthop->src)); |  | ||||||
|  	memcpy(©->rmap_src, &nexthop->rmap_src, sizeof(nexthop->rmap_src)); |  | ||||||
|  	copy->rparent = rparent; |  | ||||||
| +	memcpy(©->nh_encap.encap_data.rmac, &nexthop->nh_encap.encap_data.rmac, ETH_ALEN); |  | ||||||
|  	if (nexthop->nh_label) |  | ||||||
|  		nexthop_add_labels(copy, nexthop->nh_label_type, |  | ||||||
|  				   nexthop->nh_label->num_labels, |  | ||||||
| diff --git a/lib/nexthop.h b/lib/nexthop.h |  | ||||||
| index f1309aa52..7b4bbbafd 100644 |  | ||||||
| --- a/lib/nexthop.h |  | ||||||
| +++ b/lib/nexthop.h |  | ||||||
| @@ -66,6 +66,11 @@ enum nh_encap_type { |  | ||||||
|  /* Backup index value is limited */ |  | ||||||
|  #define NEXTHOP_BACKUP_IDX_MAX 255 |  | ||||||
|   |  | ||||||
| +struct vxlan_nh_encap { |  | ||||||
| +	vni_t vni; |  | ||||||
| +	struct ethaddr rmac; |  | ||||||
| +}; |  | ||||||
| + |  | ||||||
|  /* Nexthop structure. */ |  | ||||||
|  struct nexthop { |  | ||||||
|  	struct nexthop *next; |  | ||||||
| @@ -137,7 +142,7 @@ struct nexthop { |  | ||||||
|  	/* Encapsulation information. */ |  | ||||||
|  	enum nh_encap_type nh_encap_type; |  | ||||||
|  	union { |  | ||||||
| -		vni_t vni; |  | ||||||
| +		struct vxlan_nh_encap encap_data; |  | ||||||
|  	} nh_encap; |  | ||||||
|   |  | ||||||
|  	/* SR-TE color used for matching SR-TE policies */ |  | ||||||
| diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c |  | ||||||
| index 79d79d74b..325199eff 100644 |  | ||||||
| --- a/zebra/rt_netlink.c |  | ||||||
| +++ b/zebra/rt_netlink.c |  | ||||||
| @@ -1969,6 +1969,7 @@ static int netlink_route_nexthop_encap(struct nlmsghdr *n, size_t nlen, |  | ||||||
|  				       struct nexthop *nh) |  | ||||||
|  { |  | ||||||
|  	struct rtattr *nest; |  | ||||||
| +	struct vxlan_nh_encap* encap_data; |  | ||||||
|   |  | ||||||
|  	switch (nh->nh_encap_type) { |  | ||||||
|  	case NET_VXLAN: |  | ||||||
| @@ -1979,9 +1980,21 @@ static int netlink_route_nexthop_encap(struct nlmsghdr *n, size_t nlen, |  | ||||||
|  		if (!nest) |  | ||||||
|  			return false; |  | ||||||
|   |  | ||||||
| +		encap_data = &nh->nh_encap.encap_data; |  | ||||||
| + |  | ||||||
|  		if (!nl_attr_put32(n, nlen, 0 /* VXLAN_VNI */, |  | ||||||
| -				   nh->nh_encap.vni)) |  | ||||||
| +				   encap_data->vni)) |  | ||||||
| +			return false; |  | ||||||
| + |  | ||||||
| +		if (ZEBRA_DEBUG_KERNEL) |  | ||||||
| +			zlog_debug( |  | ||||||
| +				"%s: VNI:%d RMAC:%pEA", __func__, encap_data->vni, |  | ||||||
| +				&encap_data->rmac); |  | ||||||
| + |  | ||||||
| +		if (!nl_attr_put(n, nlen, 1 /* VXLAN_RMAC */, |  | ||||||
| +					&encap_data->rmac, sizeof(encap_data->rmac))) |  | ||||||
|  			return false; |  | ||||||
| + |  | ||||||
|  		nl_attr_nest_end(n, nest); |  | ||||||
|  		break; |  | ||||||
|  	} |  | ||||||
| diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c |  | ||||||
| index c0945eae2..157c33ced 100644 |  | ||||||
| --- a/zebra/zapi_msg.c |  | ||||||
| +++ b/zebra/zapi_msg.c |  | ||||||
| @@ -1605,6 +1605,8 @@ static struct nexthop *nexthop_from_zapi(const struct zapi_nexthop *api_nh, |  | ||||||
|  			vtep_ip.ipa_type = IPADDR_V4; |  | ||||||
|  			memcpy(&(vtep_ip.ipaddr_v4), &(api_nh->gate.ipv4), |  | ||||||
|  			       sizeof(struct in_addr)); |  | ||||||
| +			memcpy(&(nexthop->nh_encap.encap_data.rmac), |  | ||||||
| +				   &api_nh->rmac, ETH_ALEN); |  | ||||||
|  			zebra_rib_queue_evpn_route_add( |  | ||||||
|  				api_nh->vrf_id, &api_nh->rmac, &vtep_ip, p); |  | ||||||
|  			SET_FLAG(nexthop->flags, NEXTHOP_FLAG_EVPN); |  | ||||||
| @@ -1639,6 +1641,8 @@ static struct nexthop *nexthop_from_zapi(const struct zapi_nexthop *api_nh, |  | ||||||
|  			vtep_ip.ipa_type = IPADDR_V6; |  | ||||||
|  			memcpy(&vtep_ip.ipaddr_v6, &(api_nh->gate.ipv6), |  | ||||||
|  			       sizeof(struct in6_addr)); |  | ||||||
| +			memcpy(&(nexthop->nh_encap.encap_data.rmac), |  | ||||||
| +				   &api_nh->rmac, ETH_ALEN); |  | ||||||
|  			zebra_rib_queue_evpn_route_add( |  | ||||||
|  				api_nh->vrf_id, &api_nh->rmac, &vtep_ip, p); |  | ||||||
|  			SET_FLAG(nexthop->flags, NEXTHOP_FLAG_EVPN); |  | ||||||
| diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c |  | ||||||
| index f6f436f39..c8511bd28 100644 |  | ||||||
| --- a/zebra/zebra_dplane.c |  | ||||||
| +++ b/zebra/zebra_dplane.c |  | ||||||
| @@ -2917,7 +2917,7 @@ int dplane_ctx_route_init(struct zebra_dplane_ctx *ctx, enum dplane_op_e op, |  | ||||||
|  		zl3vni = zl3vni_from_vrf(nexthop->vrf_id); |  | ||||||
|  		if (zl3vni && is_l3vni_oper_up(zl3vni)) { |  | ||||||
|  			nexthop->nh_encap_type = NET_VXLAN; |  | ||||||
| -			nexthop->nh_encap.vni = zl3vni->vni; |  | ||||||
| +			nexthop->nh_encap.encap_data.vni = zl3vni->vni; |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| From 1a639f2dcd400997345dab424a2adbc091752661 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
| Date: Thu, 20 Oct 2022 13:07:18 +0000 |  | ||||||
| Subject: [PATCH] From ca66350aecf7db3354019480d11754fabae3a97c Mon Sep 17 |  | ||||||
|  00:00:00 2001 Subject: [PATCH 09/13] ignore route from default table |  | ||||||
|  |  | ||||||
| Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
|  |  | ||||||
| diff --git a/zebra/dplane_fpm_nl.c b/zebra/dplane_fpm_nl.c |  | ||||||
| index 0a9fecc9d..b18a96353 100644 |  | ||||||
| --- a/zebra/dplane_fpm_nl.c |  | ||||||
| +++ b/zebra/dplane_fpm_nl.c |  | ||||||
| @@ -814,6 +814,15 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) |  | ||||||
|  		|| op == DPLANE_OP_NH_UPDATE)) |  | ||||||
|  		return 0; |  | ||||||
|   |  | ||||||
| +	/* |  | ||||||
| +	 * Ignore route from default table, because when mgmt port goes down, |  | ||||||
| +	 * zebra will remove the default route and causing ASIC to blackhole IO. |  | ||||||
| +	 */ |  | ||||||
| +	if (dplane_ctx_get_table(ctx) == RT_TABLE_DEFAULT) { |  | ||||||
| +		zlog_debug("%s: discard default table route", __func__); |  | ||||||
| +		return 0; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
|  	nl_buf_len = 0; |  | ||||||
|   |  | ||||||
|  	frr_mutex_lock_autounlock(&fnc->obuf_mutex); |  | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
| @@ -1,111 +0,0 @@ | |||||||
| From 44f3736ee601e06e43e978fa075402c3da4823bd Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
| Date: Mon, 16 Jan 2023 11:45:19 +0000 |  | ||||||
| Subject: [PATCH] From 349e3f758860be0077b69919c39764d3486ec44a Mon Sep 17 |  | ||||||
|  00:00:00 2001 Subject: [PATCH] use vrf id instead of table id |  | ||||||
|  |  | ||||||
| Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> |  | ||||||
|  |  | ||||||
| diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c |  | ||||||
| index 325199eff..587045eac 100644 |  | ||||||
| --- a/zebra/rt_netlink.c |  | ||||||
| +++ b/zebra/rt_netlink.c |  | ||||||
| @@ -406,6 +406,30 @@ vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) |  | ||||||
|  	return VRF_DEFAULT; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +static uint32_t table_lookup_by_vrf(vrf_id_t vrf_id, ns_id_t ns_id) |  | ||||||
| +{ |  | ||||||
| +	struct vrf *vrf; |  | ||||||
| +	struct zebra_vrf *zvrf; |  | ||||||
| + |  | ||||||
| +	RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { |  | ||||||
| +		zvrf = vrf->info; |  | ||||||
| +		if (zvrf == NULL) |  | ||||||
| +			continue; |  | ||||||
| +		/* case vrf with netns : match the netnsid */ |  | ||||||
| +		if (vrf_is_backend_netns()) { |  | ||||||
| +			if (ns_id == zvrf_id(zvrf)) |  | ||||||
| +                return zvrf->table_id; |  | ||||||
| +		} else { |  | ||||||
| +			/* VRF is VRF_BACKEND_VRF_LITE */ |  | ||||||
| +			if (zvrf_id(zvrf) != vrf_id) |  | ||||||
| +				continue; |  | ||||||
| +            return zvrf->table_id; |  | ||||||
| +		} |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	return RT_TABLE_UNSPEC; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  /** |  | ||||||
|   * @parse_encap_mpls() - Parses encapsulated mpls attributes |  | ||||||
|   * @tb:         Pointer to rtattr to look for nested items in. |  | ||||||
| @@ -782,14 +806,26 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, |  | ||||||
|  	if (rtm->rtm_family == AF_MPLS) |  | ||||||
|  		return 0; |  | ||||||
|   |  | ||||||
| -	/* Table corresponding to route. */ |  | ||||||
| -	if (tb[RTA_TABLE]) |  | ||||||
| -		table = *(int *)RTA_DATA(tb[RTA_TABLE]); |  | ||||||
| -	else |  | ||||||
| -		table = rtm->rtm_table; |  | ||||||
| +	if (!ctx) { |  | ||||||
| +		/* Table corresponding to route. */ |  | ||||||
| +		if (tb[RTA_TABLE]) |  | ||||||
| +			table = *(int *)RTA_DATA(tb[RTA_TABLE]); |  | ||||||
| +		else |  | ||||||
| +			table = rtm->rtm_table; |  | ||||||
| + |  | ||||||
| +		/* Map to VRF */ |  | ||||||
| +		vrf_id = vrf_lookup_by_table(table, ns_id); |  | ||||||
| +	} else { |  | ||||||
| +		/* With FPM, rtm_table contains vrf id, see netlink_route_multipath_msg_encode */ |  | ||||||
| +		if (tb[RTA_TABLE]) |  | ||||||
| +			vrf_id = *(int *)RTA_DATA(tb[RTA_TABLE]); |  | ||||||
| +		else |  | ||||||
| +			vrf_id = rtm->rtm_table; |  | ||||||
| + |  | ||||||
| +		/* Map to table */ |  | ||||||
| +		table = table_lookup_by_vrf(vrf_id, ns_id); |  | ||||||
| +	} |  | ||||||
|   |  | ||||||
| -	/* Map to VRF */ |  | ||||||
| -	vrf_id = vrf_lookup_by_table(table, ns_id); |  | ||||||
|  	if (vrf_id == VRF_DEFAULT) { |  | ||||||
|  		if (!is_zebra_valid_kernel_table(table) |  | ||||||
|  		    && !is_zebra_main_routing_table(table)) |  | ||||||
| @@ -2102,12 +2138,24 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, |  | ||||||
|   |  | ||||||
|  	/* Table corresponding to this route. */ |  | ||||||
|  	table_id = dplane_ctx_get_table(ctx); |  | ||||||
| -	if (table_id < 256) |  | ||||||
| -		req->r.rtm_table = table_id; |  | ||||||
| -	else { |  | ||||||
| -		req->r.rtm_table = RT_TABLE_UNSPEC; |  | ||||||
| -		if (!nl_attr_put32(&req->n, datalen, RTA_TABLE, table_id)) |  | ||||||
| -			return 0; |  | ||||||
| +	if (!fpm) { |  | ||||||
| +		if (table_id < 256) |  | ||||||
| +			req->r.rtm_table = table_id; |  | ||||||
| +		else { |  | ||||||
| +			req->r.rtm_table = RT_TABLE_UNSPEC; |  | ||||||
| +			if (!nl_attr_put32(&req->n, datalen, RTA_TABLE, table_id)) |  | ||||||
| +				return 0; |  | ||||||
| +		} |  | ||||||
| +	} else { |  | ||||||
| +		/* Put vrf if_index instead of table id */ |  | ||||||
| +		vrf_id_t vrf = dplane_ctx_get_vrf(ctx); |  | ||||||
| +		if (vrf < 256) |  | ||||||
| +			req->r.rtm_table = vrf; |  | ||||||
| +		else { |  | ||||||
| +			req->r.rtm_table = RT_TABLE_UNSPEC; |  | ||||||
| +			if (!nl_attr_put32(&req->n, datalen, RTA_TABLE, vrf)) |  | ||||||
| +				return 0; |  | ||||||
| +		} |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	if (IS_ZEBRA_DEBUG_KERNEL) |  | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| From 2b9c7592a9857ddccc77b9d3f178e0c5bd5f19ed Mon Sep 17 00:00:00 2001 | From 6a3ae11c9b1480966b22d4f9b67a40b76d96aa15 Mon Sep 17 00:00:00 2001 | ||||||
| From: Donald Sharp <sharpd@nvidia.com> | From: Donald Sharp <sharpd@nvidia.com> | ||||||
| Date: Wed, 26 Apr 2023 23:25:27 -0400 | Date: Wed, 26 Apr 2023 23:25:27 -0400 | ||||||
| Subject: [PATCH] zebra: Rename vrf_lookup_by_tableid to zebra_vrf_lookup.. | Subject: [PATCH] zebra: Rename vrf_lookup_by_tableid to zebra_vrf_lookup.. | ||||||
| @@ -9,12 +9,19 @@ we need zebra specific data to find this vrf_id and as such | |||||||
| it does not belong in vrf.c | it does not belong in vrf.c | ||||||
|  |  | ||||||
| Signed-off-by: Donald Sharp <sharpd@nvidia.com> | Signed-off-by: Donald Sharp <sharpd@nvidia.com> | ||||||
|  | --- | ||||||
|  |  zebra/if_netlink.c |  3 ++- | ||||||
|  |  zebra/rt_netlink.c | 31 ++----------------------------- | ||||||
|  |  zebra/rt_netlink.h |  1 - | ||||||
|  |  zebra/zebra_vrf.c  | 27 +++++++++++++++++++++++++++ | ||||||
|  |  zebra/zebra_vrf.h  |  1 + | ||||||
|  |  5 files changed, 32 insertions(+), 31 deletions(-) | ||||||
|  |  | ||||||
| diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c | diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c | ||||||
| index 81347b550a..4599121261 100644 | index cd200d821d7a..cea47b4c30af 100644 | ||||||
| --- a/zebra/if_netlink.c | --- a/zebra/if_netlink.c | ||||||
| +++ b/zebra/if_netlink.c | +++ b/zebra/if_netlink.c | ||||||
| @@ -342,7 +342,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, | @@ -325,7 +325,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, | ||||||
|  		if (!vrf_lookup_by_id((vrf_id_t)ifi->ifi_index)) { |  		if (!vrf_lookup_by_id((vrf_id_t)ifi->ifi_index)) { | ||||||
|  			vrf_id_t exist_id; |  			vrf_id_t exist_id; | ||||||
|   |   | ||||||
| @@ -25,10 +32,10 @@ index 81347b550a..4599121261 100644 | |||||||
|  				vrf = vrf_lookup_by_id(exist_id); |  				vrf = vrf_lookup_by_id(exist_id); | ||||||
|   |   | ||||||
| diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c | diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c | ||||||
| index 587045eac2..6b9b047858 100644 | index de01ced411ef..0f542ab80756 100644 | ||||||
| --- a/zebra/rt_netlink.c | --- a/zebra/rt_netlink.c | ||||||
| +++ b/zebra/rt_netlink.c | +++ b/zebra/rt_netlink.c | ||||||
| @@ -379,33 +379,6 @@ static inline int proto2zebra(int proto, int family, bool is_nexthop) | @@ -380,33 +380,6 @@ static inline int proto2zebra(int proto, int family, bool is_nexthop) | ||||||
|  	return proto; |  	return proto; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -59,19 +66,19 @@ index 587045eac2..6b9b047858 100644 | |||||||
| -	return VRF_DEFAULT; | -	return VRF_DEFAULT; | ||||||
| -} | -} | ||||||
| - | - | ||||||
|  static uint32_t table_lookup_by_vrf(vrf_id_t vrf_id, ns_id_t ns_id) |  /** | ||||||
|  { |   * @parse_encap_mpls() - Parses encapsulated mpls attributes | ||||||
|  	struct vrf *vrf; |   * @tb:         Pointer to rtattr to look for nested items in. | ||||||
| @@ -814,7 +787,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, | @@ -790,7 +763,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, | ||||||
|  			table = rtm->rtm_table; |  		table = rtm->rtm_table; | ||||||
|   |   | ||||||
|  		/* Map to VRF */ |  	/* Map to VRF */ | ||||||
| -		vrf_id = vrf_lookup_by_table(table, ns_id); | -	vrf_id = vrf_lookup_by_table(table, ns_id); | ||||||
| +		vrf_id = zebra_vrf_lookup_by_table(table, ns_id); | +	vrf_id = zebra_vrf_lookup_by_table(table, ns_id); | ||||||
|  	} else { |  	if (vrf_id == VRF_DEFAULT) { | ||||||
|  		/* With FPM, rtm_table contains vrf id, see netlink_route_multipath_msg_encode */ |  		if (!is_zebra_valid_kernel_table(table) | ||||||
|  		if (tb[RTA_TABLE]) |  		    && !is_zebra_main_routing_table(table)) | ||||||
| @@ -1114,7 +1087,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, | @@ -1079,7 +1052,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, | ||||||
|  	else |  	else | ||||||
|  		table = rtm->rtm_table; |  		table = rtm->rtm_table; | ||||||
|   |   | ||||||
| @@ -81,10 +88,10 @@ index 587045eac2..6b9b047858 100644 | |||||||
|  	if (tb[RTA_IIF]) |  	if (tb[RTA_IIF]) | ||||||
|  		iif = *(int *)RTA_DATA(tb[RTA_IIF]); |  		iif = *(int *)RTA_DATA(tb[RTA_IIF]); | ||||||
| diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h | diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h | ||||||
| index 8506367ae4..364aac0f6b 100644 | index 3ca59ce676f3..d9d0ee76249a 100644 | ||||||
| --- a/zebra/rt_netlink.h | --- a/zebra/rt_netlink.h | ||||||
| +++ b/zebra/rt_netlink.h | +++ b/zebra/rt_netlink.h | ||||||
| @@ -102,7 +102,6 @@ extern int netlink_macfdb_read_specific_mac(struct zebra_ns *zns, | @@ -90,7 +90,6 @@ extern int netlink_macfdb_read_specific_mac(struct zebra_ns *zns, | ||||||
|  					    uint16_t vid); |  					    uint16_t vid); | ||||||
|  extern int netlink_neigh_read_specific_ip(const struct ipaddr *ip, |  extern int netlink_neigh_read_specific_ip(const struct ipaddr *ip, | ||||||
|  					  struct interface *vlan_if); |  					  struct interface *vlan_if); | ||||||
| @@ -93,10 +100,10 @@ index 8506367ae4..364aac0f6b 100644 | |||||||
|  struct nl_batch; |  struct nl_batch; | ||||||
|  extern enum netlink_msg_status |  extern enum netlink_msg_status | ||||||
| diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c | diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c | ||||||
| index be5e91495f..c59cb7c0a7 100644 | index 3365cdcdbaa8..74b9d106cdc3 100644 | ||||||
| --- a/zebra/zebra_vrf.c | --- a/zebra/zebra_vrf.c | ||||||
| +++ b/zebra/zebra_vrf.c | +++ b/zebra/zebra_vrf.c | ||||||
| @@ -389,6 +389,33 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf) | @@ -376,6 +376,33 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf) | ||||||
|  	return zvrf; |  	return zvrf; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -131,10 +138,10 @@ index be5e91495f..c59cb7c0a7 100644 | |||||||
|  struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id) |  struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id) | ||||||
|  { |  { | ||||||
| diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h | diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h | ||||||
| index 02e3c197c9..937e7fb144 100644 | index b23b7282610b..aef83cd8f172 100644 | ||||||
| --- a/zebra/zebra_vrf.h | --- a/zebra/zebra_vrf.h | ||||||
| +++ b/zebra/zebra_vrf.h | +++ b/zebra/zebra_vrf.h | ||||||
| @@ -252,6 +252,7 @@ extern struct route_table *zebra_vrf_get_table_with_table_id(afi_t afi, | @@ -237,6 +237,7 @@ extern struct route_table *zebra_vrf_get_table_with_table_id(afi_t afi, | ||||||
|  extern void zebra_vrf_update_all(struct zserv *client); |  extern void zebra_vrf_update_all(struct zserv *client); | ||||||
|  extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id); |  extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id); | ||||||
|  extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *); |  extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *); | ||||||
| @@ -142,6 +149,3 @@ index 02e3c197c9..937e7fb144 100644 | |||||||
|  extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf); |  extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf); | ||||||
|  extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t); |  extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t); | ||||||
|   |   | ||||||
| --  |  | ||||||
| 2.17.1 |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,25 @@ | |||||||
|  | From 39bb40dc4bad4462e4ae9c98580d75fa2c92e032 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Pavel Shirshov <pavelsh@microsoft.com> | ||||||
|  | Date: Mon, 16 Nov 2020 18:29:46 -0800 | ||||||
|  | Subject: [PATCH 3/8] Use vrf_id for vrf, not tabled_id | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  zebra/zebra_fpm_netlink.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c | ||||||
|  | index ec22c5dd4..aad0156b3 100644 | ||||||
|  | --- a/zebra/zebra_fpm_netlink.c | ||||||
|  | +++ b/zebra/zebra_fpm_netlink.c | ||||||
|  | @@ -287,7 +287,7 @@ static int netlink_route_info_fill(struct netlink_route_info *ri, int cmd, | ||||||
|  |  		ri->nlmsg_pid = zvrf->zns->netlink_dplane_out.snl.nl_pid; | ||||||
|  |   | ||||||
|  |  	ri->nlmsg_type = cmd; | ||||||
|  | -	ri->rtm_table = table_info->table_id; | ||||||
|  | +	ri->rtm_table = zvrf_id(rib_dest_vrf(dest)); | ||||||
|  |  	ri->rtm_protocol = RTPROT_UNSPEC; | ||||||
|  |   | ||||||
|  |  	/* | ||||||
|  | --  | ||||||
|  | 2.12.2 | ||||||
|  |  | ||||||
| @@ -0,0 +1,29 @@ | |||||||
|  | From bb3b003840959adf5b5be52e91bc798007c9857a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Ying Xie <ying.xie@microsoft.com> | ||||||
|  | Date: Thu, 8 Sep 2022 04:20:36 +0000 | ||||||
|  | Subject: [PATCH] From 776a29e8ab32c1364ee601a8730aabb773b0c86b Mon Sep 17 | ||||||
|  |  00:00:00 2001 Subject: [PATCH] ignore route from default table | ||||||
|  |  | ||||||
|  | Signed-off-by: Ying Xie <ying.xie@microsoft.com> | ||||||
|  | --- | ||||||
|  |  zebra/zebra_fpm_netlink.c | 5 +++++ | ||||||
|  |  1 file changed, 5 insertions(+) | ||||||
|  |  | ||||||
|  | diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c | ||||||
|  | index 34be9fb39..d6c875a7e 100644 | ||||||
|  | --- a/zebra/zebra_fpm_netlink.c | ||||||
|  | +++ b/zebra/zebra_fpm_netlink.c | ||||||
|  | @@ -283,6 +283,11 @@ static int netlink_route_info_fill(struct netlink_route_info *ri, int cmd, | ||||||
|  |  		rib_table_info(rib_dest_table(dest)); | ||||||
|  |  	struct zebra_vrf *zvrf = table_info->zvrf; | ||||||
|  |   | ||||||
|  | +    if (table_info->table_id == RT_TABLE_DEFAULT) { | ||||||
|  | +        zfpm_debug("%s: Discard default table route", __func__); | ||||||
|  | +        return 0; | ||||||
|  | +    } | ||||||
|  | + | ||||||
|  |  	memset(ri, 0, sizeof(*ri)); | ||||||
|  |   | ||||||
|  |  	ri->prefix = rib_dest_prefix(dest); | ||||||
|  | --  | ||||||
|  | 2.17.1 | ||||||
							
								
								
									
										164
									
								
								src/sonic-frr/patch/0036-Add-support-of-bgp-l3vni-evpn.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/sonic-frr/patch/0036-Add-support-of-bgp-l3vni-evpn.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | |||||||
|  | From b1b2e40cf43a9d206e2d867bdec4f0f7b740c8b9 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: stepanb <stepanb@contoso.com> | ||||||
|  | Date: Tue, 19 Dec 2023 11:27:37 +0000 | ||||||
|  | Subject: [PATCH] Add support of bgp l3vni evpn | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  lib/nexthop.c             |  2 ++ | ||||||
|  |  lib/nexthop.h             |  6 ++++++ | ||||||
|  |  zebra/rt_netlink.c        |  2 +- | ||||||
|  |  zebra/zapi_msg.c          |  4 ++++ | ||||||
|  |  zebra/zebra_dplane.c      |  1 + | ||||||
|  |  zebra/zebra_fpm_netlink.c | 20 ++++++++++++++++++++ | ||||||
|  |  6 files changed, 34 insertions(+), 1 deletion(-) | ||||||
|  |  | ||||||
|  | diff --git a/lib/nexthop.c b/lib/nexthop.c | ||||||
|  | index 7ebc4fefb..fe42b9f86 100644 | ||||||
|  | --- a/lib/nexthop.c | ||||||
|  | +++ b/lib/nexthop.c | ||||||
|  | @@ -813,6 +813,8 @@ void nexthop_copy_no_recurse(struct nexthop *copy, | ||||||
|  |  	memcpy(©->src, &nexthop->src, sizeof(nexthop->src)); | ||||||
|  |  	memcpy(©->rmap_src, &nexthop->rmap_src, sizeof(nexthop->rmap_src)); | ||||||
|  |  	copy->rparent = rparent; | ||||||
|  | +	memcpy(©->nh_encap.encap_data.rmac, &nexthop->nh_encap.encap_data.rmac, ETH_ALEN); | ||||||
|  | + | ||||||
|  |  	if (nexthop->nh_label) | ||||||
|  |  		nexthop_add_labels(copy, nexthop->nh_label_type, | ||||||
|  |  				   nexthop->nh_label->num_labels, | ||||||
|  | diff --git a/lib/nexthop.h b/lib/nexthop.h | ||||||
|  | index f1309aa52..7026ce1c2 100644 | ||||||
|  | --- a/lib/nexthop.h | ||||||
|  | +++ b/lib/nexthop.h | ||||||
|  | @@ -66,6 +66,11 @@ enum nh_encap_type { | ||||||
|  |  /* Backup index value is limited */ | ||||||
|  |  #define NEXTHOP_BACKUP_IDX_MAX 255 | ||||||
|  |   | ||||||
|  | +struct vxlan_nh_encap { | ||||||
|  | +	vni_t vni; | ||||||
|  | +	struct ethaddr rmac; | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  /* Nexthop structure. */ | ||||||
|  |  struct nexthop { | ||||||
|  |  	struct nexthop *next; | ||||||
|  | @@ -138,6 +143,7 @@ struct nexthop { | ||||||
|  |  	enum nh_encap_type nh_encap_type; | ||||||
|  |  	union { | ||||||
|  |  		vni_t vni; | ||||||
|  | +		struct vxlan_nh_encap encap_data; | ||||||
|  |  	} nh_encap; | ||||||
|  |   | ||||||
|  |  	/* SR-TE color used for matching SR-TE policies */ | ||||||
|  | diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c | ||||||
|  | index d31732a55..581255158 100644 | ||||||
|  | --- a/zebra/rt_netlink.c | ||||||
|  | +++ b/zebra/rt_netlink.c | ||||||
|  | @@ -1991,7 +1991,7 @@ static int netlink_route_nexthop_encap(struct nlmsghdr *n, size_t nlen, | ||||||
|  |  			return false; | ||||||
|  |   | ||||||
|  |  		if (!nl_attr_put32(n, nlen, 0 /* VXLAN_VNI */, | ||||||
|  | -				   nh->nh_encap.vni)) | ||||||
|  | +				   nh->nh_encap.encap_data.vni)) | ||||||
|  |  			return false; | ||||||
|  |  		nl_attr_nest_end(n, nest); | ||||||
|  |  		break; | ||||||
|  | diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c | ||||||
|  | index c0945eae2..157c33ced 100644 | ||||||
|  | --- a/zebra/zapi_msg.c | ||||||
|  | +++ b/zebra/zapi_msg.c | ||||||
|  | @@ -1605,6 +1605,8 @@ static struct nexthop *nexthop_from_zapi(const struct zapi_nexthop *api_nh, | ||||||
|  |  			vtep_ip.ipa_type = IPADDR_V4; | ||||||
|  |  			memcpy(&(vtep_ip.ipaddr_v4), &(api_nh->gate.ipv4), | ||||||
|  |  			       sizeof(struct in_addr)); | ||||||
|  | +			memcpy(&(nexthop->nh_encap.encap_data.rmac), | ||||||
|  | +				   &api_nh->rmac, ETH_ALEN); | ||||||
|  |  			zebra_rib_queue_evpn_route_add( | ||||||
|  |  				api_nh->vrf_id, &api_nh->rmac, &vtep_ip, p); | ||||||
|  |  			SET_FLAG(nexthop->flags, NEXTHOP_FLAG_EVPN); | ||||||
|  | @@ -1639,6 +1641,8 @@ static struct nexthop *nexthop_from_zapi(const struct zapi_nexthop *api_nh, | ||||||
|  |  			vtep_ip.ipa_type = IPADDR_V6; | ||||||
|  |  			memcpy(&vtep_ip.ipaddr_v6, &(api_nh->gate.ipv6), | ||||||
|  |  			       sizeof(struct in6_addr)); | ||||||
|  | +			memcpy(&(nexthop->nh_encap.encap_data.rmac), | ||||||
|  | +				   &api_nh->rmac, ETH_ALEN); | ||||||
|  |  			zebra_rib_queue_evpn_route_add( | ||||||
|  |  				api_nh->vrf_id, &api_nh->rmac, &vtep_ip, p); | ||||||
|  |  			SET_FLAG(nexthop->flags, NEXTHOP_FLAG_EVPN); | ||||||
|  | diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c | ||||||
|  | index 34d30484a..260a7b497 100644 | ||||||
|  | --- a/zebra/zebra_dplane.c | ||||||
|  | +++ b/zebra/zebra_dplane.c | ||||||
|  | @@ -3394,6 +3394,7 @@ int dplane_ctx_route_init(struct zebra_dplane_ctx *ctx, enum dplane_op_e op, | ||||||
|  |  		if (zl3vni && is_l3vni_oper_up(zl3vni)) { | ||||||
|  |  			nexthop->nh_encap_type = NET_VXLAN; | ||||||
|  |  			nexthop->nh_encap.vni = zl3vni->vni; | ||||||
|  | +			nexthop->nh_encap.encap_data.vni = zl3vni->vni; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c | ||||||
|  | index ec6090da9..22650eedc 100644 | ||||||
|  | --- a/zebra/zebra_fpm_netlink.c | ||||||
|  | +++ b/zebra/zebra_fpm_netlink.c | ||||||
|  | @@ -95,10 +95,12 @@ static const char *fpm_nh_encap_type_to_str(enum fpm_nh_encap_type_t encap_type) | ||||||
|  |   | ||||||
|  |  struct vxlan_encap_info_t { | ||||||
|  |  	vni_t vni; | ||||||
|  | +	struct ethaddr rmac; | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  enum vxlan_encap_info_type_t { | ||||||
|  |  	VXLAN_VNI = 0, | ||||||
|  | +	VXLAN_RMAC = 1, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  struct fpm_nh_encap_info_t { | ||||||
|  | @@ -234,6 +236,9 @@ static int netlink_route_info_add_nh(struct netlink_route_info *ri, | ||||||
|  |  		} | ||||||
|  |   | ||||||
|  |  		nhi.encap_info.vxlan_encap.vni = vni; | ||||||
|  | +		memcpy(&nhi.encap_info.vxlan_encap.rmac, | ||||||
|  | +				&(nexthop->nh_encap.encap_data.rmac), | ||||||
|  | +				ETH_ALEN); | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	/* | ||||||
|  | @@ -456,9 +461,16 @@ static int netlink_route_info_encode(struct netlink_route_info *ri, | ||||||
|  |  			nl_attr_put16(&req->n, in_buf_len, RTA_ENCAP_TYPE, | ||||||
|  |  				      encap); | ||||||
|  |  			vxlan = &nhi->encap_info.vxlan_encap; | ||||||
|  | +			char buf[ETHER_ADDR_STRLEN]; | ||||||
|  | + | ||||||
|  | +			zfpm_debug( | ||||||
|  | +				"%s: VNI:%d RMAC:%s", __func__, vxlan->vni, | ||||||
|  | +				prefix_mac2str(&vxlan->rmac, buf, sizeof(buf))); | ||||||
|  |  			nest = nl_attr_nest(&req->n, in_buf_len, RTA_ENCAP); | ||||||
|  |  			nl_attr_put32(&req->n, in_buf_len, VXLAN_VNI, | ||||||
|  |  				      vxlan->vni); | ||||||
|  | +			nl_attr_put(&req->n, in_buf_len, VXLAN_RMAC, | ||||||
|  | +				    &vxlan->rmac, sizeof(vxlan->rmac)); | ||||||
|  |  			nl_attr_nest_end(&req->n, nest); | ||||||
|  |  			break; | ||||||
|  |  		} | ||||||
|  | @@ -494,10 +506,18 @@ static int netlink_route_info_encode(struct netlink_route_info *ri, | ||||||
|  |  			nl_attr_put16(&req->n, in_buf_len, RTA_ENCAP_TYPE, | ||||||
|  |  				      encap); | ||||||
|  |  			vxlan = &nhi->encap_info.vxlan_encap; | ||||||
|  | +			char rmac_buf[ETHER_ADDR_STRLEN]; | ||||||
|  | + | ||||||
|  | +			zfpm_debug("%s: Multi VNI:%d RMAC:%s", __func__, | ||||||
|  | +				   vxlan->vni, | ||||||
|  | +				   prefix_mac2str(&vxlan->rmac, rmac_buf, | ||||||
|  | +						  sizeof(rmac_buf))); | ||||||
|  |  			inner_nest = | ||||||
|  |  				nl_attr_nest(&req->n, in_buf_len, RTA_ENCAP); | ||||||
|  |  			nl_attr_put32(&req->n, in_buf_len, VXLAN_VNI, | ||||||
|  |  				      vxlan->vni); | ||||||
|  | +			nl_attr_put(&req->n, in_buf_len, VXLAN_RMAC, | ||||||
|  | +				    &vxlan->rmac, sizeof(vxlan->rmac)); | ||||||
|  |  			nl_attr_nest_end(&req->n, inner_nest); | ||||||
|  |  			break; | ||||||
|  |  		} | ||||||
|  | --  | ||||||
|  | 2.30.2 | ||||||
|  |  | ||||||
| @@ -2,12 +2,9 @@ | |||||||
| 0002-Allow-BGP-attr-NEXT_HOP-to-be-0.0.0.0-due-to-allevia.patch | 0002-Allow-BGP-attr-NEXT_HOP-to-be-0.0.0.0-due-to-allevia.patch | ||||||
| 0003-nexthops-compare-vrf-only-if-ip-type.patch | 0003-nexthops-compare-vrf-only-if-ip-type.patch | ||||||
| 0004-frr-remove-frr-log-outchannel-to-var-log-frr.log.patch | 0004-frr-remove-frr-log-outchannel-to-var-log-frr.log.patch | ||||||
| 0005-Add-support-of-bgp-l3vni-evpn.patch |  | ||||||
| 0006-Link-local-scope-was-not-set-while-binding-socket-for-bgp-ipv6-link-local-neighbors.patch | 0006-Link-local-scope-was-not-set-while-binding-socket-for-bgp-ipv6-link-local-neighbors.patch | ||||||
| Disable-ipv6-src-address-test-in-pceplib.patch | Disable-ipv6-src-address-test-in-pceplib.patch | ||||||
| cross-compile-changes.patch | cross-compile-changes.patch | ||||||
| 0007-ignore-route-from-default-table.patch |  | ||||||
| 0008-Use-vrf_id-for-vrf-not-tabled_id.patch |  | ||||||
| 0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch | 0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch | ||||||
| 0010-bgpd-Change-log-level-for-graceful-restart-events.patch | 0010-bgpd-Change-log-level-for-graceful-restart-events.patch | ||||||
| 0011-zebra-Static-routes-async-notification-do-not-need-t.patch | 0011-zebra-Static-routes-async-notification-do-not-need-t.patch | ||||||
| @@ -32,3 +29,6 @@ cross-compile-changes.patch | |||||||
| 0030-bgpd-Treat-EOR-as-withdrawn-to-avoid-unwanted-handli.patch | 0030-bgpd-Treat-EOR-as-withdrawn-to-avoid-unwanted-handli.patch | ||||||
| 0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch | 0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch | ||||||
| 0032-zebra-Fix-fpm-multipath-encap-addition.patch | 0032-zebra-Fix-fpm-multipath-encap-addition.patch | ||||||
|  | 0034-fpm-Use-vrf_id-for-vrf-not-tabled_id.patch | ||||||
|  | 0035-fpm-ignore-route-from-default-table.patch | ||||||
|  | 0036-Add-support-of-bgp-l3vni-evpn.patch | ||||||
|   | |||||||
 Submodule src/sonic-swss updated: b78a418162...be294f390c
									
								
							| @@ -126,16 +126,6 @@ | |||||||
|     "DEVICE_METADATA_ADVERTISE_LO_PREFIX_AS_128": { |     "DEVICE_METADATA_ADVERTISE_LO_PREFIX_AS_128": { | ||||||
|         "desc": "Verifying advertising lo prefix as /128." |         "desc": "Verifying advertising lo prefix as /128." | ||||||
|     }, |     }, | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED": { |  | ||||||
|         "desc": "Enable bgp-suppress-fib-pending" |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_DISABLED": { |  | ||||||
|         "desc": "Disable bgp-suppress-fib-pending" |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED_SYNCHRONOUS_MODE_DISABLED": { |  | ||||||
|         "desc": "Enable bgp-suppress-fib-pending when synchronous mode is disabled", |  | ||||||
|         "eStr": ["ASIC synchronous mode must be enabled in order to enable suppress FIB pending feature"] |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { |     "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { | ||||||
|         "desc": "Verifying rack_mgmt_map configuration." |         "desc": "Verifying rack_mgmt_map configuration." | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -333,36 +333,6 @@ | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED": { |  | ||||||
|         "sonic-device_metadata:sonic-device_metadata": { |  | ||||||
|             "sonic-device_metadata:DEVICE_METADATA": { |  | ||||||
|                 "sonic-device_metadata:localhost": { |  | ||||||
|                     "synchronous_mode": "enable", |  | ||||||
|                     "suppress-fib-pending": "enabled" |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_DISABLED": { |  | ||||||
|         "sonic-device_metadata:sonic-device_metadata": { |  | ||||||
|             "sonic-device_metadata:DEVICE_METADATA": { |  | ||||||
|                 "sonic-device_metadata:localhost": { |  | ||||||
|                     "synchronous_mode": "disable", |  | ||||||
|                     "suppress-fib-pending": "disabled" |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED_SYNCHRONOUS_MODE_DISABLED": { |  | ||||||
|         "sonic-device_metadata:sonic-device_metadata": { |  | ||||||
|             "sonic-device_metadata:DEVICE_METADATA": { |  | ||||||
|                 "sonic-device_metadata:localhost": { |  | ||||||
|                     "synchronous_mode": "disable", |  | ||||||
|                     "suppress-fib-pending": "enabled" |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, |  | ||||||
|     "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { |     "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { | ||||||
|         "sonic-device_metadata:sonic-device_metadata": { |         "sonic-device_metadata:sonic-device_metadata": { | ||||||
|             "sonic-device_metadata:DEVICE_METADATA": { |             "sonic-device_metadata:DEVICE_METADATA": { | ||||||
|   | |||||||
| @@ -205,18 +205,6 @@ module sonic-device_metadata { | |||||||
|                                  By default SONiC advertises /128 subnet prefix in Loopback0 as /64 subnet route"; |                                  By default SONiC advertises /128 subnet prefix in Loopback0 as /64 subnet route"; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 leaf suppress-fib-pending { |  | ||||||
|                     description "Enable BGP suppress FIB pending feature. BGP will wait for route FIB installation before announcing routes"; |  | ||||||
|                     type enumeration { |  | ||||||
|                         enum enabled; |  | ||||||
|                         enum disabled; |  | ||||||
|                     } |  | ||||||
|                     default disabled; |  | ||||||
|  |  | ||||||
|                     must "((current() = 'disabled') or (current() = 'enabled' and ../synchronous_mode = 'enable'))" { |  | ||||||
|                         error-message "ASIC synchronous mode must be enabled in order to enable suppress FIB pending feature"; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 leaf rack_mgmt_map { |                 leaf rack_mgmt_map { | ||||||
|                     type string { |                     type string { | ||||||
|                         length 0..128 { |                         length 0..128 { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ying Xie
					Ying Xie