[202305] Revert bgp suppress fib pending (#17578)
DEPENDS ON: sonic-net/sonic-swss#2997 sonic-net/sonic-utilities#3093 What I did Revert the feature. Why I did it Revert bgp suppress FIB functionality due to found FRR memory consumption issues and bugs. How I verified it Basic sanity check on t1-lag, regression in progress.
This commit is contained in:
parent
64ed3d5b78
commit
3cb6343311
@ -66,7 +66,6 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
|
||||
!
|
||||
{% block bgp_init %}
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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') %}
|
||||
|
@ -30,7 +30,7 @@ stderr_logfile=syslog
|
||||
dependent_startup=true
|
||||
|
||||
[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
|
||||
autostart=false
|
||||
autorestart=false
|
||||
|
@ -164,7 +164,7 @@ environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log{{ asan_extra_
|
||||
{% endif %}
|
||||
|
||||
[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
|
||||
autostart=false
|
||||
autorestart=false
|
||||
|
@ -304,11 +304,10 @@ class BGPPeerMgrBase(Manager):
|
||||
: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"]
|
||||
enable_bgp_suppress_fib_pending_cmd = 'bgp suppress-fib-pending'
|
||||
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:
|
||||
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)
|
||||
return True
|
||||
|
||||
|
@ -55,7 +55,6 @@ route-map HIDE_INTERNAL permit 20
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -12,7 +12,6 @@ ip prefix-list PL_LoopbackV4 permit 55.55.55.55/32
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -14,7 +14,6 @@ ipv6 prefix-list PL_LoopbackV6 permit fc00::1/128
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -71,7 +71,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 55555
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -607,7 +607,7 @@ def parse_dpg(dpg, hname):
|
||||
else:
|
||||
prefix = prefix + "/32"
|
||||
static_routes[prefix] = {'nexthop': ",".join(nexthop), 'ifname': ",".join(ifname), 'advertise': advertise}
|
||||
|
||||
|
||||
if port_nhipv4_map and port_nhipv6_map:
|
||||
subnet_check_ip = list(port_nhipv4_map.values())[0]
|
||||
for subnet_range in ip_intfs_map:
|
||||
@ -2077,10 +2077,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:
|
||||
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
|
||||
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 65100
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
coalesce-time 10000
|
||||
|
@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 65100
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32
|
||||
router bgp 4000
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 65100
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
coalesce-time 10000
|
||||
|
@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10
|
||||
router bgp 65100
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
no bgp ebgp-requires-policy
|
||||
!
|
||||
|
@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32
|
||||
router bgp 4000
|
||||
!
|
||||
bgp log-neighbor-changes
|
||||
bgp suppress-fib-pending
|
||||
no bgp default ipv4-unicast
|
||||
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>
|
||||
Date: Wed, 26 Apr 2023 23:25:27 -0400
|
||||
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
|
||||
|
||||
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
|
||||
index 81347b550a..4599121261 100644
|
||||
index cd200d821d7a..cea47b4c30af 100644
|
||||
--- a/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)) {
|
||||
vrf_id_t exist_id;
|
||||
|
||||
@ -25,10 +32,10 @@ index 81347b550a..4599121261 100644
|
||||
vrf = vrf_lookup_by_id(exist_id);
|
||||
|
||||
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
|
||||
+++ 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;
|
||||
}
|
||||
|
||||
@ -59,19 +66,19 @@ index 587045eac2..6b9b047858 100644
|
||||
- return VRF_DEFAULT;
|
||||
-}
|
||||
-
|
||||
static uint32_t table_lookup_by_vrf(vrf_id_t vrf_id, ns_id_t ns_id)
|
||||
{
|
||||
struct vrf *vrf;
|
||||
@@ -814,7 +787,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h,
|
||||
table = rtm->rtm_table;
|
||||
/**
|
||||
* @parse_encap_mpls() - Parses encapsulated mpls attributes
|
||||
* @tb: Pointer to rtattr to look for nested items in.
|
||||
@@ -790,7 +763,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h,
|
||||
table = rtm->rtm_table;
|
||||
|
||||
/* Map to VRF */
|
||||
- vrf_id = vrf_lookup_by_table(table, ns_id);
|
||||
+ vrf_id = zebra_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])
|
||||
@@ -1114,7 +1087,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h,
|
||||
/* Map to VRF */
|
||||
- vrf_id = vrf_lookup_by_table(table, ns_id);
|
||||
+ vrf_id = zebra_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))
|
||||
@@ -1079,7 +1052,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h,
|
||||
else
|
||||
table = rtm->rtm_table;
|
||||
|
||||
@ -81,10 +88,10 @@ index 587045eac2..6b9b047858 100644
|
||||
if (tb[RTA_IIF])
|
||||
iif = *(int *)RTA_DATA(tb[RTA_IIF]);
|
||||
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
|
||||
+++ 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);
|
||||
extern int netlink_neigh_read_specific_ip(const struct ipaddr *ip,
|
||||
struct interface *vlan_if);
|
||||
@ -93,10 +100,10 @@ index 8506367ae4..364aac0f6b 100644
|
||||
struct nl_batch;
|
||||
extern enum netlink_msg_status
|
||||
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
|
||||
+++ 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;
|
||||
}
|
||||
|
||||
@ -131,10 +138,10 @@ index be5e91495f..c59cb7c0a7 100644
|
||||
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
|
||||
index 02e3c197c9..937e7fb144 100644
|
||||
index b23b7282610b..aef83cd8f172 100644
|
||||
--- a/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 struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id);
|
||||
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 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
|
||||
0003-nexthops-compare-vrf-only-if-ip-type.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
|
||||
Disable-ipv6-src-address-test-in-pceplib.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
|
||||
0010-bgpd-Change-log-level-for-graceful-restart-events.patch
|
||||
0011-zebra-Static-routes-async-notification-do-not-need-t.patch
|
||||
@ -33,3 +30,6 @@ cross-compile-changes.patch
|
||||
0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch
|
||||
0032-zebra-Fix-fpm-multipath-encap-addition.patch
|
||||
0033-zebra-The-dplane_fpm_nl-return-path-leaks-memory.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": {
|
||||
"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": {
|
||||
"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": {
|
||||
"sonic-device_metadata:sonic-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";
|
||||
}
|
||||
|
||||
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 {
|
||||
type string {
|
||||
length 0..128 {
|
||||
|
Loading…
Reference in New Issue
Block a user