[frr]: ADD L3 VNI EVPN Support for SONiC, Send RMAC and VLAN along with prefix to fpmsyncd. (#4806)
Currently FRR is send Prefix with VNI information to FPMSYNCD. This PR allows FRR to send RMAC with EVPN Type5 prefix to fpmsyncd. This is a temp fix. This patch will be removed once neighorch is ready to handle the Prefix and ARP (containing RMAC) separately.
This commit is contained in:
parent
3c16f80382
commit
cad2025ad0
162
src/sonic-frr/patch/0008-Add-support-of-bgp-l3vni-evpn.patch
Normal file
162
src/sonic-frr/patch/0008-Add-support-of-bgp-l3vni-evpn.patch
Normal file
@ -0,0 +1,162 @@
|
||||
From 2e9ed539d29f13d874c6a5ab3120bf4bb26ab2bb Mon Sep 17 00:00:00 2001
|
||||
From: Kishore Kunal <kishore.kunal@broadcom.com>
|
||||
Date: Fri, 15 Jan 2021 15:52:13 -0800
|
||||
Subject: [PATCH] This is temp patch till Prefix to ARP indirection is add in neighorch
|
||||
|
||||
---
|
||||
lib/nexthop.c | 1 +
|
||||
lib/nexthop.h | 7 ++++++-
|
||||
zebra/rt_netlink.c | 2 +-
|
||||
zebra/zapi_msg.c | 2 ++
|
||||
zebra/zebra_dplane.c | 2 +-
|
||||
zebra/zebra_fpm_netlink.c | 19 +++++++++++++++++++
|
||||
6 files changed, 30 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/nexthop.c b/lib/nexthop.c
|
||||
index 0ea72d03e..02e826048 100644
|
||||
--- a/lib/nexthop.c
|
||||
+++ b/lib/nexthop.c
|
||||
@@ -657,6 +657,7 @@ void nexthop_copy_no_recurse(struct nexthop *copy,
|
||||
nexthop_add_labels(copy, nexthop->nh_label_type,
|
||||
nexthop->nh_label->num_labels,
|
||||
&nexthop->nh_label->label[0]);
|
||||
+ memcpy(©->nh_encap.encap_data.rmac, &nexthop->nh_encap.encap_data.rmac, ETH_ALEN);
|
||||
}
|
||||
|
||||
void nexthop_copy(struct nexthop *copy, const struct nexthop *nexthop,
|
||||
diff --git a/lib/nexthop.h b/lib/nexthop.h
|
||||
index cadcea1f4..fd959eb9e 100644
|
||||
--- a/lib/nexthop.h
|
||||
+++ b/lib/nexthop.h
|
||||
@@ -71,6 +71,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;
|
||||
@@ -140,7 +145,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 50b1a62d8..d8249f8e0 100644
|
||||
--- a/zebra/rt_netlink.c
|
||||
+++ b/zebra/rt_netlink.c
|
||||
@@ -1590,7 +1590,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 e436e5a28..c10d50797 100644
|
||||
--- a/zebra/zapi_msg.c
|
||||
+++ b/zebra/zapi_msg.c
|
||||
@@ -1477,6 +1477,7 @@ static struct nexthop *nexthop_from_zapi(struct route_entry *re,
|
||||
zebra_vxlan_evpn_vrf_route_add(
|
||||
api_nh->vrf_id, &api_nh->rmac,
|
||||
&vtep_ip, &api->prefix);
|
||||
+ memcpy(&(nexthop->nh_encap.encap_data.rmac), &api_nh->rmac, ETH_ALEN);
|
||||
}
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV6:
|
||||
@@ -1511,6 +1512,7 @@ static struct nexthop *nexthop_from_zapi(struct route_entry *re,
|
||||
zebra_vxlan_evpn_vrf_route_add(
|
||||
api_nh->vrf_id, &api_nh->rmac,
|
||||
&vtep_ip, &api->prefix);
|
||||
+ memcpy(&(nexthop->nh_encap.encap_data.rmac), &api_nh->rmac, ETH_ALEN);
|
||||
}
|
||||
break;
|
||||
case NEXTHOP_TYPE_BLACKHOLE:
|
||||
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
|
||||
index abd0adb64..e66d7aae5 100644
|
||||
--- a/zebra/zebra_dplane.c
|
||||
+++ b/zebra/zebra_dplane.c
|
||||
@@ -1891,7 +1891,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;
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c
|
||||
index 2c0741363..2731f64fb 100644
|
||||
--- a/zebra/zebra_fpm_netlink.c
|
||||
+++ b/zebra/zebra_fpm_netlink.c
|
||||
@@ -129,10 +129,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 {
|
||||
@@ -238,6 +240,8 @@ static int netlink_route_info_add_nh(struct netlink_route_info *ri,
|
||||
|
||||
/* Add VNI to VxLAN encap info */
|
||||
nhi.encap_info.vxlan_encap.vni = zl3vni->vni;
|
||||
+ memcpy(&nhi.encap_info.vxlan_encap.rmac, &(nexthop->nh_encap.encap_data.rmac),
|
||||
+ ETH_ALEN);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -454,9 +458,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;
|
||||
}
|
||||
@@ -490,10 +501,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.18.0
|
||||
|
@ -4,4 +4,4 @@
|
||||
0004-Allow-BGP-attr-NEXT_HOP-to-be-0.0.0.0-due-to-allevia.patch
|
||||
0005-nexthops-compare-vrf-only-if-ip-type.patch
|
||||
0007-frr-remove-frr-log-outchannel-to-var-log-frr.log.patch
|
||||
|
||||
0008-Add-support-of-bgp-l3vni-evpn.patch
|
||||
|
Reference in New Issue
Block a user