-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[frr]: ADD L3 VNI EVPN Support for SONiC, Send RMAC and VLAN along wi…
…th 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.
- Loading branch information
1 parent
3c16f80
commit cad2025
Showing
2 changed files
with
163 additions
and
1 deletion.
There are no files selected for viewing
162 changes: 162 additions & 0 deletions
162
src/sonic-frr/patch/0008-Add-support-of-bgp-l3vni-evpn.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters