[202311] Revert bgp suppress fib pending (#17660)
* [FRR] Bring back patches required for FPM plugin Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> * [zebra] use fpm plugin instead of dplane_fpm_nl Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> * Revert BGP suppress FIB pending Signed-off-by: Stepan Blyschak <stepanb@nvidia.com> --------- Signed-off-by: Stepan Blyschak <stepanb@nvidia.com>
This commit is contained in:
parent
87caed6f62
commit
b527372642
@ -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
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user