Skip to content

Commit

Permalink
[frr]: ADD L3 VNI EVPN Support for SONiC, Send RMAC and VLAN along wi…
Browse files Browse the repository at this point in the history
…th prefix to fpmsyncd. (sonic-net#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
kishorekunal01 authored Jan 20, 2021
1 parent 3c16f80 commit cad2025
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 1 deletion.
162 changes: 162 additions & 0 deletions src/sonic-frr/patch/0008-Add-support-of-bgp-l3vni-evpn.patch
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 <[email protected]>
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(&copy->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

2 changes: 1 addition & 1 deletion src/sonic-frr/patch/series
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit cad2025

Please sign in to comment.