Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FRR] Added support for L3VNI for EVPN as described in the PR Azure/SONiC#437 #4806

Merged
merged 2 commits into from
Jan 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 <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(&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