all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH frr 0/4] update to 8.5.1
@ 2023-05-23  6:08 Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 1/4] patches: remove old upstreamed patches Alexandre Derumier
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Alexandre Derumier @ 2023-05-23  6:08 UTC (permalink / raw)
  To: pve-devel

Hi,

This patch serie update frr to 8.5.1.
(mirror need to be update to 8.5.1 tag https://github.com/FRRouting/frr/tree/frr-8.5.1)

I have removed old upstreamed patches, and added 2 importants evpn
patches released just after 8.5.1.



Alexandre Derumier (4):
  patches: remove old upstreamed patches
  patches : update autort patch
  patches : add evpn mac mobility fixes from stable/8.0
  bump version to 8.5.1

 debian/changelog                              |   6 +
 debian/patches/frr/0001-zebra-buffering.patch |  92 ----
 .../0001-zebra-fix-evpn-dup-detected.patch    |  46 ++
 debian/patches/frr/0002-zebra-buffering.patch | 420 ------------------
 .../0002-zebra-evpn-handle-del-event.patch    |  71 +++
 debian/patches/frr/0003-zebra-buffering.patch | 283 ------------
 .../frr/ospf6d-fix-infinite-loop.patch        |  76 ----
 ...on-for-RT-auto-derivation-to-force-A.patch |  24 +-
 debian/patches/series                         |   8 +-
 9 files changed, 138 insertions(+), 888 deletions(-)
 delete mode 100644 debian/patches/frr/0001-zebra-buffering.patch
 create mode 100644 debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch
 delete mode 100644 debian/patches/frr/0002-zebra-buffering.patch
 create mode 100644 debian/patches/frr/0002-zebra-evpn-handle-del-event.patch
 delete mode 100644 debian/patches/frr/0003-zebra-buffering.patch
 delete mode 100644 debian/patches/frr/ospf6d-fix-infinite-loop.patch

-- 
2.30.2




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH frr 1/4] patches: remove old upstreamed patches
  2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
@ 2023-05-23  6:08 ` Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 2/4] patches : update autort patch Alexandre Derumier
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier @ 2023-05-23  6:08 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 debian/patches/frr/0001-zebra-buffering.patch |  92 ----
 debian/patches/frr/0002-zebra-buffering.patch | 420 ------------------
 debian/patches/frr/0003-zebra-buffering.patch | 283 ------------
 .../frr/ospf6d-fix-infinite-loop.patch        |  76 ----
 debian/patches/series                         |   6 +-
 5 files changed, 1 insertion(+), 876 deletions(-)
 delete mode 100644 debian/patches/frr/0001-zebra-buffering.patch
 delete mode 100644 debian/patches/frr/0002-zebra-buffering.patch
 delete mode 100644 debian/patches/frr/0003-zebra-buffering.patch
 delete mode 100644 debian/patches/frr/ospf6d-fix-infinite-loop.patch

diff --git a/debian/patches/frr/0001-zebra-buffering.patch b/debian/patches/frr/0001-zebra-buffering.patch
deleted file mode 100644
index 7f45eda..0000000
--- a/debian/patches/frr/0001-zebra-buffering.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From 3670f5047cb00865c15b2f3ebdfcfe634443db61 Mon Sep 17 00:00:00 2001
-From: Donald Sharp <sharpd@nvidia.com>
-Date: Tue, 8 Feb 2022 09:47:24 -0500
-Subject: [PATCH] zebra: Store the sequence number to use as part of the
- dp_info
-
-Store and use the sequence number instead of using what is in
-the `struct nlsock`.  Future commits are going away from storing
-the `struct nlsock` and the copy of the nlsock was guaranteeing
-unique sequence numbers per message.  So let's store the
-sequence number to use instead.
-
-Signed-off-by: Donald Sharp <sharpd@nvidia.com>
----
- zebra/kernel_netlink.c | 14 +++++++-------
- zebra/zebra_dplane.h   |  3 +++
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
-diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c
-index e3b2f9cb665..59911945481 100644
---- a/zebra/kernel_netlink.c
-+++ b/zebra/kernel_netlink.c
-@@ -1038,7 +1038,7 @@ netlink_talk_info(int (*filter)(struct nlmsghdr *, ns_id_t, int startup),
- 	const struct nlsock *nl;
- 
- 	nl = &(dp_info->nls);
--	n->nlmsg_seq = nl->seq;
-+	n->nlmsg_seq = dp_info->seq;
- 	n->nlmsg_pid = nl->snl.nl_pid;
- 
- 	if (IS_ZEBRA_DEBUG_KERNEL)
-@@ -1172,8 +1172,8 @@ static int nl_batch_read_resp(struct nl_batch *bth)
- 			 * 'update' context objects take two consecutive
- 			 * sequence numbers.
- 			 */
--			if (dplane_ctx_is_update(ctx)
--			    && dplane_ctx_get_ns(ctx)->nls.seq + 1 == seq) {
-+			if (dplane_ctx_is_update(ctx) &&
-+			    dplane_ctx_get_ns(ctx)->seq + 1 == seq) {
- 				/*
- 				 * This is the situation where we get a response
- 				 * to a message that should be ignored.
-@@ -1186,14 +1186,14 @@ static int nl_batch_read_resp(struct nl_batch *bth)
- 			dplane_ctx_enqueue_tail(bth->ctx_out_q, ctx);
- 
- 			/* We have found corresponding context object. */
--			if (dplane_ctx_get_ns(ctx)->nls.seq == seq)
-+			if (dplane_ctx_get_ns(ctx)->seq == seq)
- 				break;
- 
--			if (dplane_ctx_get_ns(ctx)->nls.seq > seq)
-+			if (dplane_ctx_get_ns(ctx)->seq > seq)
- 				zlog_warn(
- 					"%s:WARNING Recieved %u is less than any context on the queue ctx->seq %u",
- 					__func__, seq,
--					dplane_ctx_get_ns(ctx)->nls.seq);
-+					dplane_ctx_get_ns(ctx)->seq);
- 		}
- 
- 		if (ignore_msg) {
-@@ -1360,7 +1360,7 @@ enum netlink_msg_status netlink_batch_add_msg(
- 			return FRR_NETLINK_ERROR;
- 	}
- 
--	seq = dplane_ctx_get_ns(ctx)->nls.seq;
-+	seq = dplane_ctx_get_ns(ctx)->seq;
- 	if (ignore_res)
- 		seq++;
- 
-diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h
-index 1d55181388e..69ea9c7fd95 100644
---- a/zebra/zebra_dplane.h
-+++ b/zebra/zebra_dplane.h
-@@ -42,6 +42,7 @@ struct zebra_dplane_info {
- 
- #if defined(HAVE_NETLINK)
- 	struct nlsock nls;
-+	int seq;
- 	bool is_cmd;
- #endif
- };
-@@ -57,8 +58,10 @@ zebra_dplane_info_from_zns(struct zebra_dplane_info *zns_info,
- 	zns_info->is_cmd = is_cmd;
- 	if (is_cmd) {
- 		zns_info->nls = zns->netlink_cmd;
-+		zns_info->seq = zns->netlink_cmd.seq;
- 	} else {
- 		zns_info->nls = zns->netlink;
-+		zns_info->seq = zns->netlink.seq;
- 	}
- #endif /* NETLINK */
- }
diff --git a/debian/patches/frr/0002-zebra-buffering.patch b/debian/patches/frr/0002-zebra-buffering.patch
deleted file mode 100644
index 4f401b3..0000000
--- a/debian/patches/frr/0002-zebra-buffering.patch
+++ /dev/null
@@ -1,420 +0,0 @@
-From d4000d7ba3242c0e6adfa56544a34312b0f566a9 Mon Sep 17 00:00:00 2001
-From: Donald Sharp <sharpd@nvidia.com>
-Date: Wed, 2 Feb 2022 13:21:52 -0500
-Subject: [PATCH] zebra: Remove `struct nlsock` from dataplane information and
- use `int fd`
-
-Store the fd that corresponds to the appropriate `struct nlsock` and pass
-that around in the dplane context instead of the pointer to the nlsock.
-Modify the kernel_netlink.c code to store in a hash the `struct nlsock`
-with the socket fd as the key.
-
-Why do this?  The dataplane context is used to pass around the `struct nlsock`
-but the zebra code has a bug where the received buffer for kernel netlink
-messages from the kernel is not big enough.  So we need to dynamically
-grow the receive buffer per socket, instead of having a non-dynamic buffer
-that we read into.  By passing around the fd we can look up the `struct nlsock`
-that will soon have the associated buffer and not have to worry about `const`
-issues that will arise.
-
-Signed-off-by: Donald Sharp <sharpd@nvidia.com>
----
- zebra/kernel_netlink.c | 72 ++++++++++++++++++++++++++++++++++++------
- zebra/kernel_netlink.h |  1 +
- zebra/rt_netlink.c     | 13 ++++++--
- zebra/zebra_dplane.c   | 19 +++++++----
- zebra/zebra_dplane.h   |  9 +++---
- 5 files changed, 91 insertions(+), 23 deletions(-)
-
-diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c
-index 59911945481..3650d87e0fb 100644
---- a/zebra/kernel_netlink.c
-+++ b/zebra/kernel_netlink.c
-@@ -36,6 +36,7 @@
- #include "vrf.h"
- #include "mpls.h"
- #include "lib_errors.h"
-+#include "hash.h"
- 
- //#include "zebra/zserv.h"
- #include "zebra/zebra_router.h"
-@@ -160,6 +161,7 @@ extern struct zebra_privs_t zserv_privs;
- 
- DEFINE_MTYPE_STATIC(ZEBRA, NL_BUF, "Zebra Netlink buffers");
- 
-+struct hash *nlsock_hash;
- size_t nl_batch_tx_bufsize;
- char *nl_batch_tx_buf;
- 
-@@ -429,8 +431,10 @@ static int kernel_read(struct thread *thread)
-  */
- int kernel_dplane_read(struct zebra_dplane_info *info)
- {
--	netlink_parse_info(dplane_netlink_information_fetch, &info->nls, info,
--			   5, false);
-+	struct nlsock *nl = kernel_netlink_nlsock_lookup(info->sock);
-+
-+	netlink_parse_info(dplane_netlink_information_fetch, nl, info, 5,
-+			   false);
- 
- 	return 0;
- }
-@@ -1035,9 +1039,9 @@ netlink_talk_info(int (*filter)(struct nlmsghdr *, ns_id_t, int startup),
- 		  struct nlmsghdr *n, const struct zebra_dplane_info *dp_info,
- 		  bool startup)
- {
--	const struct nlsock *nl;
-+	struct nlsock *nl;
- 
--	nl = &(dp_info->nls);
-+	nl = kernel_netlink_nlsock_lookup(dp_info->sock);
- 	n->nlmsg_seq = dp_info->seq;
- 	n->nlmsg_pid = nl->snl.nl_pid;
- 
-@@ -1109,11 +1113,11 @@ static int nl_batch_read_resp(struct nl_batch *bth)
- 	struct sockaddr_nl snl;
- 	struct msghdr msg = {};
- 	int status, seq;
--	const struct nlsock *nl;
-+	struct nlsock *nl;
- 	struct zebra_dplane_ctx *ctx;
- 	bool ignore_msg;
- 
--	nl = &(bth->zns->nls);
-+	nl = kernel_netlink_nlsock_lookup(bth->zns->sock);
- 
- 	msg.msg_name = (void *)&snl;
- 	msg.msg_namelen = sizeof(snl);
-@@ -1295,13 +1299,15 @@ static void nl_batch_send(struct nl_batch *bth)
- 	bool err = false;
- 
- 	if (bth->curlen != 0 && bth->zns != NULL) {
-+		struct nlsock *nl =
-+			kernel_netlink_nlsock_lookup(bth->zns->sock);
-+
- 		if (IS_ZEBRA_DEBUG_KERNEL)
- 			zlog_debug("%s: %s, batch size=%zu, msg cnt=%zu",
--				   __func__, bth->zns->nls.name, bth->curlen,
-+				   __func__, nl->name, bth->curlen,
- 				   bth->msgcnt);
- 
--		if (netlink_send_msg(&(bth->zns->nls), bth->buf, bth->curlen)
--		    == -1)
-+		if (netlink_send_msg(nl, bth->buf, bth->curlen) == -1)
- 			err = true;
- 
- 		if (!err) {
-@@ -1334,6 +1340,7 @@ enum netlink_msg_status netlink_batch_add_msg(
- 	int seq;
- 	ssize_t size;
- 	struct nlmsghdr *msgh;
-+	struct nlsock *nl;
- 
- 	size = (*msg_encoder)(ctx, bth->buf_head, bth->bufsiz - bth->curlen);
- 
-@@ -1361,12 +1368,14 @@ enum netlink_msg_status netlink_batch_add_msg(
- 	}
- 
- 	seq = dplane_ctx_get_ns(ctx)->seq;
-+	nl = kernel_netlink_nlsock_lookup(dplane_ctx_get_ns_sock(ctx));
-+
- 	if (ignore_res)
- 		seq++;
- 
- 	msgh = (struct nlmsghdr *)bth->buf_head;
- 	msgh->nlmsg_seq = seq;
--	msgh->nlmsg_pid = dplane_ctx_get_ns(ctx)->nls.snl.nl_pid;
-+	msgh->nlmsg_pid = nl->snl.nl_pid;
- 
- 	bth->zns = dplane_ctx_get_ns(ctx);
- 	bth->buf_head = ((char *)bth->buf_head) + size;
-@@ -1496,6 +1505,33 @@ void kernel_update_multi(struct dplane_ctx_q *ctx_list)
- 	dplane_ctx_list_append(ctx_list, &handled_list);
- }
- 
-+struct nlsock *kernel_netlink_nlsock_lookup(int sock)
-+{
-+	struct nlsock lookup;
-+
-+	lookup.sock = sock;
-+
-+	return hash_lookup(nlsock_hash, &lookup);
-+}
-+
-+static uint32_t kernel_netlink_nlsock_key(const void *arg)
-+{
-+	const struct nlsock *nl = arg;
-+
-+	return nl->sock;
-+}
-+
-+static bool kernel_netlink_nlsock_hash_equal(const void *arg1, const void *arg2)
-+{
-+	const struct nlsock *nl1 = arg1;
-+	const struct nlsock *nl2 = arg2;
-+
-+	if (nl1->sock == nl2->sock)
-+		return true;
-+
-+	return false;
-+}
-+
- /* Exported interface function.  This function simply calls
-    netlink_socket (). */
- void kernel_init(struct zebra_ns *zns)
-@@ -1505,6 +1541,11 @@ void kernel_init(struct zebra_ns *zns)
- 	int one, ret;
- #endif
- 
-+	if (!nlsock_hash)
-+		nlsock_hash = hash_create_size(8, kernel_netlink_nlsock_key,
-+					       kernel_netlink_nlsock_hash_equal,
-+					       "Netlink Socket Hash");
-+
- 	/*
- 	 * Initialize netlink sockets
- 	 *
-@@ -1537,6 +1578,7 @@ void kernel_init(struct zebra_ns *zns)
- 			 zns->netlink.name);
- 		exit(-1);
- 	}
-+	(void)hash_get(nlsock_hash, &zns->netlink, hash_alloc_intern);
- 
- 	snprintf(zns->netlink_cmd.name, sizeof(zns->netlink_cmd.name),
- 		 "netlink-cmd (NS %u)", zns->ns_id);
-@@ -1546,6 +1588,7 @@ void kernel_init(struct zebra_ns *zns)
- 			 zns->netlink_cmd.name);
- 		exit(-1);
- 	}
-+	(void)hash_get(nlsock_hash, &zns->netlink_cmd, hash_alloc_intern);
- 
- 	/* Outbound socket for dplane programming of the host OS. */
- 	snprintf(zns->netlink_dplane_out.name,
-@@ -1557,6 +1600,8 @@ void kernel_init(struct zebra_ns *zns)
- 			 zns->netlink_dplane_out.name);
- 		exit(-1);
- 	}
-+	(void)hash_get(nlsock_hash, &zns->netlink_dplane_out,
-+		       hash_alloc_intern);
- 
- 	/* Inbound socket for OS events coming to the dplane. */
- 	snprintf(zns->netlink_dplane_in.name,
-@@ -1569,6 +1614,7 @@ void kernel_init(struct zebra_ns *zns)
- 			 zns->netlink_dplane_in.name);
- 		exit(-1);
- 	}
-+	(void)hash_get(nlsock_hash, &zns->netlink_dplane_in, hash_alloc_intern);
- 
- 	/*
- 	 * SOL_NETLINK is not available on all platforms yet
-@@ -1659,16 +1705,19 @@ void kernel_terminate(struct zebra_ns *zns, bool complete)
- 	thread_cancel(&zns->t_netlink);
- 
- 	if (zns->netlink.sock >= 0) {
-+		hash_release(nlsock_hash, &zns->netlink);
- 		close(zns->netlink.sock);
- 		zns->netlink.sock = -1;
- 	}
- 
- 	if (zns->netlink_cmd.sock >= 0) {
-+		hash_release(nlsock_hash, &zns->netlink_cmd);
- 		close(zns->netlink_cmd.sock);
- 		zns->netlink_cmd.sock = -1;
- 	}
- 
- 	if (zns->netlink_dplane_in.sock >= 0) {
-+		hash_release(nlsock_hash, &zns->netlink_dplane_in);
- 		close(zns->netlink_dplane_in.sock);
- 		zns->netlink_dplane_in.sock = -1;
- 	}
-@@ -1678,9 +1727,12 @@ void kernel_terminate(struct zebra_ns *zns, bool complete)
- 	 */
- 	if (complete) {
- 		if (zns->netlink_dplane_out.sock >= 0) {
-+			hash_release(nlsock_hash, &zns->netlink_dplane_out);
- 			close(zns->netlink_dplane_out.sock);
- 			zns->netlink_dplane_out.sock = -1;
- 		}
-+
-+		hash_free(nlsock_hash);
- 	}
- }
- #endif /* HAVE_NETLINK */
-diff --git a/zebra/kernel_netlink.h b/zebra/kernel_netlink.h
-index cf8b8c785e6..ae88f3372b1 100644
---- a/zebra/kernel_netlink.h
-+++ b/zebra/kernel_netlink.h
-@@ -146,6 +146,7 @@ extern int netlink_config_write_helper(struct vty *vty);
- extern void netlink_set_batch_buffer_size(uint32_t size, uint32_t threshold,
- 					  bool set);
- 
-+extern struct nlsock *kernel_netlink_nlsock_lookup(int sock);
- #endif /* HAVE_NETLINK */
- 
- #ifdef __cplusplus
-diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
-index 9ead1a768e7..c6423dce99c 100644
---- a/zebra/rt_netlink.c
-+++ b/zebra/rt_netlink.c
-@@ -1898,6 +1898,7 @@ ssize_t netlink_route_multipath_msg_encode(int cmd,
- 	union g_addr src;
- 	const struct prefix *p, *src_p;
- 	uint32_t table_id;
-+	struct nlsock *nl;
- 
- 	struct {
- 		struct nlmsghdr n;
-@@ -1911,6 +1912,8 @@ ssize_t netlink_route_multipath_msg_encode(int cmd,
- 	if (datalen < sizeof(*req))
- 		return 0;
- 
-+	nl = kernel_netlink_nlsock_lookup(dplane_ctx_get_ns_sock(ctx));
-+
- 	memset(req, 0, sizeof(*req));
- 
- 	bytelen = (p->family == AF_INET ? 4 : 16);
-@@ -1924,7 +1927,7 @@ ssize_t netlink_route_multipath_msg_encode(int cmd,
- 
- 	req->n.nlmsg_type = cmd;
- 
--	req->n.nlmsg_pid = dplane_ctx_get_ns(ctx)->nls.snl.nl_pid;
-+	req->n.nlmsg_pid = nl->snl.nl_pid;
- 
- 	req->r.rtm_family = p->family;
- 	req->r.rtm_dst_len = p->prefixlen;
-@@ -2360,6 +2363,8 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
- 	int type = dplane_ctx_get_nhe_type(ctx);
- 	struct rtattr *nest;
- 	uint16_t encap;
-+	struct nlsock *nl =
-+		kernel_netlink_nlsock_lookup(dplane_ctx_get_ns_sock(ctx));
- 
- 	if (!id) {
- 		flog_err(
-@@ -2402,7 +2407,7 @@ ssize_t netlink_nexthop_msg_encode(uint16_t cmd,
- 		req->n.nlmsg_flags |= NLM_F_REPLACE;
- 
- 	req->n.nlmsg_type = cmd;
--	req->n.nlmsg_pid = dplane_ctx_get_ns(ctx)->nls.snl.nl_pid;
-+	req->n.nlmsg_pid = nl->snl.nl_pid;
- 
- 	req->nhm.nh_family = AF_UNSPEC;
- 	/* TODO: Scope? */
-@@ -4283,6 +4288,8 @@ ssize_t netlink_mpls_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx,
- 	const char *routedesc;
- 	int route_type;
- 	struct prefix p = {0};
-+	struct nlsock *nl =
-+		kernel_netlink_nlsock_lookup(dplane_ctx_get_ns_sock(ctx));
- 
- 	struct {
- 		struct nlmsghdr n;
-@@ -4325,7 +4332,7 @@ ssize_t netlink_mpls_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx,
- 	req->n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
- 	req->n.nlmsg_flags = NLM_F_CREATE | NLM_F_REQUEST;
- 	req->n.nlmsg_type = cmd;
--	req->n.nlmsg_pid = dplane_ctx_get_ns(ctx)->nls.snl.nl_pid;
-+	req->n.nlmsg_pid = nl->snl.nl_pid;
- 
- 	req->r.rtm_family = AF_MPLS;
- 	req->r.rtm_table = RT_TABLE_MAIN;
-diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
-index 656ebcf3b7f..05297e143b5 100644
---- a/zebra/zebra_dplane.c
-+++ b/zebra/zebra_dplane.c
-@@ -1465,6 +1465,13 @@ const struct zebra_dplane_info *dplane_ctx_get_ns(
- 	return &(ctx->zd_ns_info);
- }
- 
-+int dplane_ctx_get_ns_sock(const struct zebra_dplane_ctx *ctx)
-+{
-+	DPLANE_CTX_VALID(ctx);
-+
-+	return ctx->zd_ns_info.sock;
-+}
-+
- /* Accessors for nexthop information */
- uint32_t dplane_ctx_get_nhe_id(const struct zebra_dplane_ctx *ctx)
- {
-@@ -4844,7 +4851,7 @@ static void dplane_info_from_zns(struct zebra_dplane_info *ns_info,
- 
- #if defined(HAVE_NETLINK)
- 	ns_info->is_cmd = true;
--	ns_info->nls = zns->netlink_dplane_out;
-+	ns_info->sock = zns->netlink_dplane_out.sock;
- #endif /* NETLINK */
- }
- 
-@@ -4861,7 +4868,7 @@ static int dplane_incoming_read(struct thread *event)
- 
- 	/* Re-start read task */
- 	thread_add_read(zdplane_info.dg_master, dplane_incoming_read, zi,
--			zi->info.nls.sock, &zi->t_read);
-+			zi->info.sock, &zi->t_read);
- 
- 	return 0;
- }
-@@ -4906,13 +4913,13 @@ void zebra_dplane_ns_enable(struct zebra_ns *zns, bool enabled)
- 		/* Make sure we're up-to-date with the zns object */
- #if defined(HAVE_NETLINK)
- 		zi->info.is_cmd = false;
--		zi->info.nls = zns->netlink_dplane_in;
-+		zi->info.sock = zns->netlink_dplane_in.sock;
- 
- 		/* Start read task for the dplane pthread. */
- 		if (zdplane_info.dg_master)
- 			thread_add_read(zdplane_info.dg_master,
--					dplane_incoming_read, zi,
--					zi->info.nls.sock, &zi->t_read);
-+					dplane_incoming_read, zi, zi->info.sock,
-+					&zi->t_read);
- #endif
- 	} else if (zi) {
- 		if (IS_ZEBRA_DEBUG_DPLANE)
-@@ -5935,7 +5942,7 @@ void zebra_dplane_start(void)
- 	frr_each (zns_info_list, &zdplane_info.dg_zns_list, zi) {
- #if defined(HAVE_NETLINK)
- 		thread_add_read(zdplane_info.dg_master, dplane_incoming_read,
--				zi, zi->info.nls.sock, &zi->t_read);
-+				zi, zi->info.sock, &zi->t_read);
- #endif
- 	}
- 
-diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h
-index 69ea9c7fd95..a7a5f99e451 100644
---- a/zebra/zebra_dplane.h
-+++ b/zebra/zebra_dplane.h
-@@ -41,7 +41,7 @@ struct zebra_dplane_info {
- 	ns_id_t ns_id;
- 
- #if defined(HAVE_NETLINK)
--	struct nlsock nls;
-+	int sock;
- 	int seq;
- 	bool is_cmd;
- #endif
-@@ -57,10 +57,10 @@ zebra_dplane_info_from_zns(struct zebra_dplane_info *zns_info,
- #if defined(HAVE_NETLINK)
- 	zns_info->is_cmd = is_cmd;
- 	if (is_cmd) {
--		zns_info->nls = zns->netlink_cmd;
-+		zns_info->sock = zns->netlink_cmd.sock;
- 		zns_info->seq = zns->netlink_cmd.seq;
- 	} else {
--		zns_info->nls = zns->netlink;
-+		zns_info->sock = zns->netlink.sock;
- 		zns_info->seq = zns->netlink.seq;
- 	}
- #endif /* NETLINK */
-@@ -564,9 +564,10 @@ dplane_ctx_gre_get_mtu(const struct zebra_dplane_ctx *ctx);
- const struct zebra_l2info_gre *
- dplane_ctx_gre_get_info(const struct zebra_dplane_ctx *ctx);
- 
--/* Namespace info - esp. for netlink communication */
-+/* Namespace fd info - esp. for netlink communication */
- const struct zebra_dplane_info *dplane_ctx_get_ns(
- 	const struct zebra_dplane_ctx *ctx);
-+int dplane_ctx_get_ns_sock(const struct zebra_dplane_ctx *ctx);
- 
- /* Indicates zebra shutdown/exit is in progress. Some operations may be
-  * simplified or skipped during shutdown processing.
diff --git a/debian/patches/frr/0003-zebra-buffering.patch b/debian/patches/frr/0003-zebra-buffering.patch
deleted file mode 100644
index 0a7c634..0000000
--- a/debian/patches/frr/0003-zebra-buffering.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-From 2cf7651f0b1b0123dc5568ebad00ac84a9b3c348 Mon Sep 17 00:00:00 2001
-From: Donald Sharp <sharpd@nvidia.com>
-Date: Wed, 2 Feb 2022 13:28:42 -0500
-Subject: [PATCH] zebra: Make netlink buffer reads resizeable when needed
-
-Currently when the kernel sends netlink messages to FRR
-the buffers to receive this data is of fixed length.
-The kernel, with certain configurations, will send
-netlink messages that are larger than this fixed length.
-This leads to situations where, on startup, zebra gets
-really confused about the state of the kernel.  Effectively
-the current algorithm is this:
-
-read up to buffer in size
-while (data to parse)
-     get netlink message header, look at size
-        parse if you can
-
-The problem is that there is a 32k buffer we read.
-We get the first message that is say 1k in size,
-subtract that 1k to 31k left to parse.  We then
-get the next header and notice that the length
-of the message is 33k.  Which is obviously larger
-than what we read in.  FRR has no recover mechanism
-nor is there a way to know, a priori, what the maximum
-size the kernel will send us.
-
-Modify FRR to look at the kernel message and see if the
-buffer is large enough, if not, make it large enough to
-read in the message.
-
-This code has to be per netlink socket because of the usage
-of pthreads.  So add to `struct nlsock` the buffer and current
-buffer length.  Growing it as necessary.
-
-Fixes: #10404
-Signed-off-by: Donald Sharp <sharpd@nvidia.com>
----
- zebra/kernel_netlink.c | 68 +++++++++++++++++++++++++-----------------
- zebra/kernel_netlink.h |  2 +-
- zebra/zebra_dplane.c   |  4 +++
- zebra/zebra_ns.h       |  3 ++
- 4 files changed, 49 insertions(+), 28 deletions(-)
-
-diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c
-index 3650d87e0fb..d0c86a6bb0e 100644
---- a/zebra/kernel_netlink.c
-+++ b/zebra/kernel_netlink.c
-@@ -90,8 +90,6 @@
-  */
- #define NL_DEFAULT_BATCH_SEND_THRESHOLD (15 * NL_PKT_BUF_SIZE)
- 
--#define NL_BATCH_RX_BUFSIZE NL_RCV_PKT_BUF_SIZE
--
- static const struct message nlmsg_str[] = {{RTM_NEWROUTE, "RTM_NEWROUTE"},
- 					   {RTM_DELROUTE, "RTM_DELROUTE"},
- 					   {RTM_GETROUTE, "RTM_GETROUTE"},
-@@ -165,8 +163,6 @@ struct hash *nlsock_hash;
- size_t nl_batch_tx_bufsize;
- char *nl_batch_tx_buf;
- 
--char nl_batch_rx_buf[NL_BATCH_RX_BUFSIZE];
--
- _Atomic uint32_t nl_batch_bufsize = NL_DEFAULT_BATCH_BUFSIZE;
- _Atomic uint32_t nl_batch_send_threshold = NL_DEFAULT_BATCH_SEND_THRESHOLD;
- 
-@@ -320,6 +316,9 @@ static int netlink_socket(struct nlsock *nl, unsigned long groups,
- 
- 	nl->snl = snl;
- 	nl->sock = sock;
-+	nl->buflen = NL_RCV_PKT_BUF_SIZE;
-+	nl->buf = XMALLOC(MTYPE_NL_BUF, nl->buflen);
-+
- 	return ret;
- }
- 
-@@ -785,19 +784,29 @@ static ssize_t netlink_send_msg(const struct nlsock *nl, void *buf,
-  *
-  * Returns -1 on error, 0 if read would block or the number of bytes received.
-  */
--static int netlink_recv_msg(const struct nlsock *nl, struct msghdr msg,
--			    void *buf, size_t buflen)
-+static int netlink_recv_msg(struct nlsock *nl, struct msghdr *msg)
- {
- 	struct iovec iov;
- 	int status;
- 
--	iov.iov_base = buf;
--	iov.iov_len = buflen;
--	msg.msg_iov = &iov;
--	msg.msg_iovlen = 1;
-+	iov.iov_base = nl->buf;
-+	iov.iov_len = nl->buflen;
-+	msg->msg_iov = &iov;
-+	msg->msg_iovlen = 1;
- 
- 	do {
--		status = recvmsg(nl->sock, &msg, 0);
-+		int bytes;
-+
-+		bytes = recv(nl->sock, NULL, 0, MSG_PEEK | MSG_TRUNC);
-+
-+		if (bytes >= 0 && (size_t)bytes > nl->buflen) {
-+			nl->buf = XREALLOC(MTYPE_NL_BUF, nl->buf, bytes);
-+			nl->buflen = bytes;
-+			iov.iov_base = nl->buf;
-+			iov.iov_len = nl->buflen;
-+		}
-+
-+		status = recvmsg(nl->sock, msg, 0);
- 	} while (status == -1 && errno == EINTR);
- 
- 	if (status == -1) {
-@@ -817,19 +826,19 @@ static int netlink_recv_msg(const struct nlsock *nl, struct msghdr msg,
- 		return -1;
- 	}
- 
--	if (msg.msg_namelen != sizeof(struct sockaddr_nl)) {
-+	if (msg->msg_namelen != sizeof(struct sockaddr_nl)) {
- 		flog_err(EC_ZEBRA_NETLINK_LENGTH_ERROR,
- 			 "%s sender address length error: length %d", nl->name,
--			 msg.msg_namelen);
-+			 msg->msg_namelen);
- 		return -1;
- 	}
- 
- 	if (IS_ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV) {
- 		zlog_debug("%s: << netlink message dump [recv]", __func__);
- #ifdef NETLINK_DEBUG
--		nl_dump(buf, status);
-+		nl_dump(nl->buf, status);
- #else
--		zlog_hexdump(buf, status);
-+		zlog_hexdump(nl->buf, status);
- #endif /* NETLINK_DEBUG */
- 	}
- 
-@@ -932,8 +941,7 @@ static int netlink_parse_error(const struct nlsock *nl, struct nlmsghdr *h,
-  *            the filter.
-  */
- int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int),
--		       const struct nlsock *nl,
--		       const struct zebra_dplane_info *zns,
-+		       struct nlsock *nl, const struct zebra_dplane_info *zns,
- 		       int count, bool startup)
- {
- 	int status;
-@@ -942,7 +950,6 @@ int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int),
- 	int read_in = 0;
- 
- 	while (1) {
--		char buf[NL_RCV_PKT_BUF_SIZE];
- 		struct sockaddr_nl snl;
- 		struct msghdr msg = {.msg_name = (void *)&snl,
- 				     .msg_namelen = sizeof(snl)};
-@@ -951,14 +958,14 @@ int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int),
- 		if (count && read_in >= count)
- 			return 0;
- 
--		status = netlink_recv_msg(nl, msg, buf, sizeof(buf));
-+		status = netlink_recv_msg(nl, &msg);
- 		if (status == -1)
- 			return -1;
- 		else if (status == 0)
- 			break;
- 
- 		read_in++;
--		for (h = (struct nlmsghdr *)buf;
-+		for (h = (struct nlmsghdr *)nl->buf;
- 		     (status >= 0 && NLMSG_OK(h, (unsigned int)status));
- 		     h = NLMSG_NEXT(h, status)) {
- 			/* Finish of reading. */
-@@ -1034,10 +1041,10 @@ int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int),
-  * startup  -> Are we reading in under startup conditions
-  *             This is passed through eventually to filter.
-  */
--static int
--netlink_talk_info(int (*filter)(struct nlmsghdr *, ns_id_t, int startup),
--		  struct nlmsghdr *n, const struct zebra_dplane_info *dp_info,
--		  bool startup)
-+static int netlink_talk_info(int (*filter)(struct nlmsghdr *, ns_id_t,
-+					   int startup),
-+			     struct nlmsghdr *n,
-+			     struct zebra_dplane_info *dp_info, bool startup)
- {
- 	struct nlsock *nl;
- 
-@@ -1127,8 +1134,7 @@ static int nl_batch_read_resp(struct nl_batch *bth)
- 	 * message at a time.
- 	 */
- 	while (true) {
--		status = netlink_recv_msg(nl, msg, nl_batch_rx_buf,
--					  sizeof(nl_batch_rx_buf));
-+		status = netlink_recv_msg(nl, &msg);
- 		/*
- 		 * status == -1 is a full on failure somewhere
- 		 * since we don't know where the problem happened
-@@ -1149,7 +1155,7 @@ static int nl_batch_read_resp(struct nl_batch *bth)
- 			return status;
- 		}
- 
--		h = (struct nlmsghdr *)nl_batch_rx_buf;
-+		h = (struct nlmsghdr *)nl->buf;
- 		ignore_msg = false;
- 		seq = h->nlmsg_seq;
- 		/*
-@@ -1708,18 +1714,24 @@ void kernel_terminate(struct zebra_ns *zns, bool complete)
- 		hash_release(nlsock_hash, &zns->netlink);
- 		close(zns->netlink.sock);
- 		zns->netlink.sock = -1;
-+		XFREE(MTYPE_NL_BUF, zns->netlink.buf);
-+		zns->netlink.buflen = 0;
- 	}
- 
- 	if (zns->netlink_cmd.sock >= 0) {
- 		hash_release(nlsock_hash, &zns->netlink_cmd);
- 		close(zns->netlink_cmd.sock);
- 		zns->netlink_cmd.sock = -1;
-+		XFREE(MTYPE_NL_BUF, zns->netlink_cmd.buf);
-+		zns->netlink_cmd.buflen = 0;
- 	}
- 
- 	if (zns->netlink_dplane_in.sock >= 0) {
- 		hash_release(nlsock_hash, &zns->netlink_dplane_in);
- 		close(zns->netlink_dplane_in.sock);
- 		zns->netlink_dplane_in.sock = -1;
-+		XFREE(MTYPE_NL_BUF, zns->netlink_dplane_in.buf);
-+		zns->netlink_dplane_in.buflen = 0;
- 	}
- 
- 	/* During zebra shutdown, we need to leave the dataplane socket
-@@ -1730,6 +1742,8 @@ void kernel_terminate(struct zebra_ns *zns, bool complete)
- 			hash_release(nlsock_hash, &zns->netlink_dplane_out);
- 			close(zns->netlink_dplane_out.sock);
- 			zns->netlink_dplane_out.sock = -1;
-+			XFREE(MTYPE_NL_BUF, zns->netlink_dplane_out.buf);
-+			zns->netlink_dplane_out.buflen = 0;
- 		}
- 
- 		hash_free(nlsock_hash);
-diff --git a/zebra/kernel_netlink.h b/zebra/kernel_netlink.h
-index ae88f3372b1..9421ea1c611 100644
---- a/zebra/kernel_netlink.h
-+++ b/zebra/kernel_netlink.h
-@@ -96,7 +96,7 @@ extern const char *nl_family_to_str(uint8_t family);
- extern const char *nl_rttype_to_str(uint8_t rttype);
- 
- extern int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int),
--			      const struct nlsock *nl,
-+			      struct nlsock *nl,
- 			      const struct zebra_dplane_info *dp_info,
- 			      int count, bool startup);
- extern int netlink_talk_filter(struct nlmsghdr *h, ns_id_t ns, int startup);
-diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
-index 05297e143b5..4d32e54d1fb 100644
---- a/zebra/zebra_dplane.c
-+++ b/zebra/zebra_dplane.c
-@@ -1469,7 +1469,11 @@ int dplane_ctx_get_ns_sock(const struct zebra_dplane_ctx *ctx)
- {
- 	DPLANE_CTX_VALID(ctx);
- 
-+#ifdef HAVE_NETLINK
- 	return ctx->zd_ns_info.sock;
-+#else
-+	return -1;
-+#endif
- }
- 
- /* Accessors for nexthop information */
-diff --git a/zebra/zebra_ns.h b/zebra/zebra_ns.h
-index 0519e1d5b33..7a0ffbc1ee6 100644
---- a/zebra/zebra_ns.h
-+++ b/zebra/zebra_ns.h
-@@ -39,6 +39,9 @@ struct nlsock {
- 	int seq;
- 	struct sockaddr_nl snl;
- 	char name[64];
-+
-+	uint8_t *buf;
-+	size_t buflen;
- };
- #endif
- 
diff --git a/debian/patches/frr/ospf6d-fix-infinite-loop.patch b/debian/patches/frr/ospf6d-fix-infinite-loop.patch
deleted file mode 100644
index 3af86cd..0000000
--- a/debian/patches/frr/ospf6d-fix-infinite-loop.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 4dfe15200ab1a84a8d77fcbc33085c373d556eae Mon Sep 17 00:00:00 2001
-From: Renato Westphal <renato@opensourcerouting.org>
-Date: Wed, 23 Nov 2022 22:14:51 -0300
-Subject: [PATCH] ospf6d: fix infinite loop when adding ASBR route
-
-Commit 8f359e1593c414322 removed a check that prevented the same route
-from being added twice. In certain topologies, that change resulted in
-the following infinite loop when adding an ASBR route:
-
-ospf6_route_add
- ospf6_top_brouter_hook_add
-  ospf6_abr_examin_brouter
-   ospf6_abr_examin_summary
-    ospf6_route_add
-     (repeat until stack overflow)
-
-Revert the offending commit and update `ospf6_route_is_identical()` to
-not do comparison using `memcmp()`.
-
-Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
----
- ospf6d/ospf6_route.c | 21 +++++++++++++++++++++
- ospf6d/ospf6_route.h |  8 ++++++++
- 2 files changed, 29 insertions(+)
-
-diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
-index db94b85b1b5..1cc1fcb47b3 100644
---- a/ospf6d/ospf6_route.c
-+++ b/ospf6d/ospf6_route.c
-@@ -702,6 +702,27 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route,
- 	}
- 
- 	if (old) {
-+		/* if route does not actually change, return unchanged */
-+		if (ospf6_route_is_identical(old, route)) {
-+			if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
-+				zlog_debug(
-+					"%s %p: route add %p: needless update of %p old cost %u",
-+					ospf6_route_table_name(table),
-+					(void *)table, (void *)route,
-+					(void *)old, old->path.cost);
-+			else if (IS_OSPF6_DEBUG_ROUTE(TABLE))
-+				zlog_debug("%s: route add: needless update",
-+					   ospf6_route_table_name(table));
-+
-+			ospf6_route_delete(route);
-+			SET_FLAG(old->flag, OSPF6_ROUTE_ADD);
-+			ospf6_route_table_assert(table);
-+
-+			/* to free the lookup lock */
-+			route_unlock_node(node);
-+			return old;
-+		}
-+
- 		if (IS_OSPF6_DEBUG_ROUTE(MEMORY))
- 			zlog_debug(
- 				"%s %p: route add %p cost %u paths %u nh %u: update of %p cost %u paths %u nh %u",
-diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
-index bb5827a1766..c8411c015f8 100644
---- a/ospf6d/ospf6_route.h
-+++ b/ospf6d/ospf6_route.h
-@@ -297,6 +297,14 @@ extern const char *const ospf6_path_type_substr[OSPF6_PATH_TYPE_MAX];
- 	 && (ra)->path.origin.type == (rb)->path.origin.type                   \
- 	 && (ra)->path.origin.id == (rb)->path.origin.id                       \
- 	 && (ra)->path.origin.adv_router == (rb)->path.origin.adv_router)
-+#define ospf6_route_is_identical(ra, rb)                                       \
-+	((ra)->type == (rb)->type &&                                           \
-+	 prefix_same(&(ra)->prefix, &(rb)->prefix) &&                          \
-+	 (ra)->path.type == (rb)->path.type &&                                 \
-+	 (ra)->path.cost == (rb)->path.cost &&                                 \
-+	 (ra)->path.u.cost_e2 == (rb)->path.u.cost_e2 &&                       \
-+	 listcount(ra->paths) == listcount(rb->paths) &&                       \
-+	 ospf6_route_cmp_nexthops(ra, rb) == 0)
- 
- #define ospf6_route_is_best(r) (CHECK_FLAG ((r)->flag, OSPF6_ROUTE_BEST))
- 
diff --git a/debian/patches/series b/debian/patches/series
index b24c177..9af7c71 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,6 +1,2 @@
 pve/0001-enable-bgp-daemon.patch
-pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
-frr/0001-zebra-buffering.patch
-frr/0002-zebra-buffering.patch
-frr/0003-zebra-buffering.patch
-frr/ospf6d-fix-infinite-loop.patch
\ No newline at end of file
+pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
\ No newline at end of file
-- 
2.30.2




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH frr 2/4] patches : update autort patch
  2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 1/4] patches: remove old upstreamed patches Alexandre Derumier
@ 2023-05-23  6:08 ` Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 3/4] patches : add evpn mac mobility fixes from stable/8.0 Alexandre Derumier
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier @ 2023-05-23  6:08 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 ...on-for-RT-auto-derivation-to-force-A.patch | 24 +++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch b/debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
index 8cc94af..8d1759c 100644
--- a/debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
+++ b/debian/patches/pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
@@ -1,6 +1,6 @@
-From c05ce62d655144e74bf432830130e83ec3617ec1 Mon Sep 17 00:00:00 2001
+From f5658ed4cecb3ad81cb838fb90467930943ab2ef Mon Sep 17 00:00:00 2001
 From: Alexandre Derumier <aderumier@odiso.com>
-Date: Tue, 17 Nov 2020 06:01:26 +0100
+Date: Mon, 22 May 2023 19:31:28 +0200
 Subject: [PATCH] bgpd : add an option for RT auto-derivation to force AS
 
 Allow to define a custom AS for autort AS:VNI
@@ -16,10 +16,10 @@ Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
  3 files changed, 48 insertions(+), 14 deletions(-)
 
 diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
-index 8d8e3ffd2..135c1a610 100644
+index 28ea443c6..d44c6bd5d 100644
 --- a/bgpd/bgp_evpn.c
 +++ b/bgpd/bgp_evpn.c
-@@ -491,7 +491,11 @@ static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl)
+@@ -591,7 +591,11 @@ static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl,
  
  	if (bgp->advertise_autort_rfc8365)
  		vni |= EVPN_AUTORT_VXLAN;
@@ -32,10 +32,10 @@ index 8d8e3ffd2..135c1a610 100644
  
  	ecomadd = ecommunity_new();
  	ecommunity_add_val(ecomadd, &eval, false, false);
-@@ -4367,7 +4371,11 @@ void evpn_rt_delete_auto(struct bgp *bgp, vni_t vni, struct list *rtl)
- 
+@@ -5174,7 +5178,11 @@ void evpn_rt_delete_auto(struct bgp *bgp, vni_t vni, struct list *rtl,
  	if (bgp->advertise_autort_rfc8365)
  		vni |= EVPN_AUTORT_VXLAN;
+ 
 -	encode_route_target_as((bgp->as & 0xFFFF), vni, &eval);
 +	if (bgp->autort_as) {
 +		encode_route_target_as((bgp->autort_as & 0xFFFF), vni, &eval);
@@ -46,10 +46,10 @@ index 8d8e3ffd2..135c1a610 100644
  	ecom_auto = ecommunity_new();
  	ecommunity_add_val(ecom_auto, &eval, false, false);
 diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c
-index 3fc1dc128..4c2bae1eb 100644
+index 6b63c6e3a..11012f3b8 100644
 --- a/bgpd/bgp_evpn_vty.c
 +++ b/bgpd/bgp_evpn_vty.c
-@@ -3517,32 +3517,52 @@ DEFUN (no_bgp_evpn_advertise_all_vni,
+@@ -3649,32 +3649,52 @@ DEFUN (no_bgp_evpn_advertise_all_vni,
  	return CMD_SUCCESS;
  }
  
@@ -112,7 +112,7 @@ index 3fc1dc128..4c2bae1eb 100644
  	return CMD_SUCCESS;
  }
  
-@@ -6055,6 +6075,9 @@ void bgp_config_write_evpn_info(struct vty *vty, struct bgp *bgp, afi_t afi,
+@@ -7121,6 +7141,9 @@ void bgp_config_write_evpn_info(struct vty *vty, struct bgp *bgp, afi_t afi,
  	if (bgp->advertise_autort_rfc8365)
  		vty_out(vty, "  autort rfc8365-compatible\n");
  
@@ -122,7 +122,7 @@ index 3fc1dc128..4c2bae1eb 100644
  	if (bgp->advertise_gw_macip)
  		vty_out(vty, "  advertise-default-gw\n");
  
-@@ -6213,8 +6236,8 @@ void bgp_ethernetvpn_init(void)
+@@ -7354,8 +7377,8 @@ void bgp_ethernetvpn_init(void)
  	install_element(BGP_EVPN_NODE, &evpnrt5_network_cmd);
  	install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_all_vni_cmd);
  	install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_all_vni_cmd);
@@ -134,10 +134,10 @@ index 3fc1dc128..4c2bae1eb 100644
  	install_element(BGP_EVPN_NODE, &no_bgp_evpn_advertise_default_gw_cmd);
  	install_element(BGP_EVPN_NODE, &bgp_evpn_advertise_svi_ip_cmd);
 diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
-index 4c69fbcdf..2c4d45bb2 100644
+index 72b5b50fb..452062e3d 100644
 --- a/bgpd/bgpd.h
 +++ b/bgpd/bgpd.h
-@@ -639,6 +639,9 @@ struct bgp {
+@@ -685,6 +685,9 @@ struct bgp {
  	/* EVPN - use RFC 8365 to auto-derive RT */
  	int advertise_autort_rfc8365;
  
-- 
2.30.2




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH frr 3/4] patches : add evpn mac mobility fixes from stable/8.0
  2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 1/4] patches: remove old upstreamed patches Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 2/4] patches : update autort patch Alexandre Derumier
@ 2023-05-23  6:08 ` Alexandre Derumier
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 4/4] bump version to 8.5.1 Alexandre Derumier
  2023-06-06  8:40 ` [pve-devel] applied: [PATCH frr 0/4] update " Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier @ 2023-05-23  6:08 UTC (permalink / raw)
  To: pve-devel

2 importants fixes for a very old bug, they have missed the
8.5.1 release

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 .../0001-zebra-fix-evpn-dup-detected.patch    | 46 ++++++++++++
 .../0002-zebra-evpn-handle-del-event.patch    | 71 +++++++++++++++++++
 debian/patches/series                         |  2 +
 3 files changed, 119 insertions(+)
 create mode 100644 debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch
 create mode 100644 debian/patches/frr/0002-zebra-evpn-handle-del-event.patch

diff --git a/debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch b/debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch
new file mode 100644
index 0000000..a41379d
--- /dev/null
+++ b/debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch
@@ -0,0 +1,46 @@
+From bd65a991901f43e14b557fd5057130b4bee81df2 Mon Sep 17 00:00:00 2001
+From: Chirag Shah <chirag@nvidia.com>
+Date: Sat, 22 Oct 2022 16:00:14 -0700
+Subject: [PATCH] zebra:fix evpn dup detected local mac del event
+
+The current local mac delete event send to flag with force
+always which breaks the duplicate detected MACs where
+it requires to be resynced from bgpd to earlier state.
+
+Ticket:#3233019
+Issue:3233019
+
+Signed-off-by: Chirag Shah <chirag@nvidia.com>
+(cherry picked from commit 89844a967858d34de99bad8dcb410b4ab4e1dece)
+---
+ zebra/zebra_evpn_mac.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/zebra/zebra_evpn_mac.c b/zebra/zebra_evpn_mac.c
+index cebdb978add..25bdc9a877c 100644
+--- a/zebra/zebra_evpn_mac.c
++++ b/zebra/zebra_evpn_mac.c
+@@ -1044,12 +1044,11 @@ int zebra_evpn_macip_send_msg_to_client(vni_t vni,
+ 		char flag_buf[MACIP_BUF_SIZE];
+ 
+ 		zlog_debug(
+-			"Send MACIP %s f %s MAC %pEA IP %pIA seq %u L2-VNI %u ESI %s to %s",
++			"Send MACIP %s f %s state %u MAC %pEA IP %pIA seq %u L2-VNI %u ESI %s to %s",
+ 			(cmd == ZEBRA_MACIP_ADD) ? "Add" : "Del",
+ 			zclient_evpn_dump_macip_flags(flags, flag_buf,
+ 						      sizeof(flag_buf)),
+-			macaddr, ip, seq, vni,
+-			es ? es->esi_str : "-",
++			state, macaddr, ip, seq, vni, es ? es->esi_str : "-",
+ 			zebra_route_string(client->proto));
+ 	}
+ 
+@@ -2451,7 +2450,7 @@ int zebra_evpn_del_local_mac(struct zebra_evpn *zevpn, struct zebra_mac *mac,
+ 
+ 	/* Remove MAC from BGP. */
+ 	zebra_evpn_mac_send_del_to_client(zevpn->vni, &mac->macaddr, mac->flags,
+-					  false /* force */);
++					  clear_static /* force */);
+ 
+ 	zebra_evpn_es_mac_deref_entry(mac);
+ 
diff --git a/debian/patches/frr/0002-zebra-evpn-handle-del-event.patch b/debian/patches/frr/0002-zebra-evpn-handle-del-event.patch
new file mode 100644
index 0000000..a0cf1f1
--- /dev/null
+++ b/debian/patches/frr/0002-zebra-evpn-handle-del-event.patch
@@ -0,0 +1,71 @@
+From b6e64012549d7e2a5cf1f8ad67544c75998aa5fb Mon Sep 17 00:00:00 2001
+From: Chirag Shah <chirag@nvidia.com>
+Date: Tue, 30 Nov 2021 20:42:01 -0800
+Subject: [PATCH] zebra: evpn handle del event for dup detected mac
+
+Upon receiving local mobility event for MAC + NEIGH,
+both are detected as duplicate upon hitting DAD threshold.
+
+Duplicated detected ( freezed) MAC + NEIGH are not known
+to bgpd.
+
+If locally learnt MAC + NEIGH are deleted in kernel,
+the MAC is marked as AUTO after sending delete event
+to bgpd.
+
+Bgpd only reinstalls best route for MAC_IP route (NEIGH)
+but not for MAC event.
+This puts a situation where MAC is AUTO state and
+associated neigh as remote.
+
+Fix:
+DUPLICATE + LOCAL MAC deletion, set MAC delete request
+as reinstall from bgpd.
+
+Ticket:#2873307
+Reviewed By:
+Testing Done:
+
+Freeze MAC + two NEIGHs in local mobility event.
+Delete MAC and NEIGH from kerenl.
+bgp rsync remote mac route which puts MAC to remote state.
+
+Signed-off-by: Chirag Shah <chirag@nvidia.com>
+(cherry picked from commit ad7685de2871996469d370192af7afafc234a3ca)
+---
+ zebra/zebra_evpn_mac.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/zebra/zebra_evpn_mac.c b/zebra/zebra_evpn_mac.c
+index a2fe9fd00ba..cebdb978add 100644
+--- a/zebra/zebra_evpn_mac.c
++++ b/zebra/zebra_evpn_mac.c
+@@ -1347,16 +1347,26 @@ int zebra_evpn_mac_send_add_to_client(vni_t vni, const struct ethaddr *macaddr,
+ int zebra_evpn_mac_send_del_to_client(vni_t vni, const struct ethaddr *macaddr,
+ 				      uint32_t flags, bool force)
+ {
++	int state = ZEBRA_NEIGH_ACTIVE;
++
+ 	if (!force) {
+ 		if (CHECK_FLAG(flags, ZEBRA_MAC_LOCAL_INACTIVE)
+ 		    && !CHECK_FLAG(flags, ZEBRA_MAC_ES_PEER_ACTIVE))
+ 			/* the host was not advertised - nothing  to delete */
+ 			return 0;
++
++		/* MAC is LOCAL and DUP_DETECTED, this local mobility event
++		 * is not known to bgpd. Upon receiving local delete
++		 * ask bgp to reinstall the best route (remote entry).
++		 */
++		if (CHECK_FLAG(flags, ZEBRA_MAC_LOCAL) &&
++		    CHECK_FLAG(flags, ZEBRA_MAC_DUPLICATE))
++			state = ZEBRA_NEIGH_INACTIVE;
+ 	}
+ 
+ 	return zebra_evpn_macip_send_msg_to_client(
+-		vni, macaddr, NULL, 0 /* flags */, 0 /* seq */,
+-		ZEBRA_NEIGH_ACTIVE, NULL, ZEBRA_MACIP_DEL);
++		vni, macaddr, NULL, 0 /* flags */, 0 /* seq */, state, NULL,
++		ZEBRA_MACIP_DEL);
+ }
+ 
+ /*
diff --git a/debian/patches/series b/debian/patches/series
index 9af7c71..a70a233 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,4 @@
+frr/0001-zebra-fix-evpn-dup-detected.patch
+frr/0002-zebra-evpn-handle-del-event.patch
 pve/0001-enable-bgp-daemon.patch
 pve/0002-bgpd-add-an-option-for-RT-auto-derivation-to-force-A.patch
\ No newline at end of file
-- 
2.30.2




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] [PATCH frr 4/4] bump version to 8.5.1
  2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
                   ` (2 preceding siblings ...)
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 3/4] patches : add evpn mac mobility fixes from stable/8.0 Alexandre Derumier
@ 2023-05-23  6:08 ` Alexandre Derumier
  2023-06-06  8:40 ` [pve-devel] applied: [PATCH frr 0/4] update " Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Alexandre Derumier @ 2023-05-23  6:08 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 debian/changelog | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 44b7d60..39f13ef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+frr (8.5.1-1+pve1) bullseye; urgency=medium
+
+  * update upstream sources to 8.5.1
+
+ -- Proxmox Support Team <support@proxmox.com>  Wed, 22 May 2023 19:12:21 +0200
+
 frr (8.2.2-1+pve1) bullseye; urgency=medium
 
   * update upstream sources to 8.2.2
-- 
2.30.2




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [pve-devel] applied:  [PATCH frr 0/4] update to 8.5.1
  2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
                   ` (3 preceding siblings ...)
  2023-05-23  6:08 ` [pve-devel] [PATCH frr 4/4] bump version to 8.5.1 Alexandre Derumier
@ 2023-06-06  8:40 ` Thomas Lamprecht
  4 siblings, 0 replies; 6+ messages in thread
From: Thomas Lamprecht @ 2023-06-06  8:40 UTC (permalink / raw)
  To: Proxmox VE development discussion, Alexandre Derumier

Am 23/05/2023 um 08:08 schrieb Alexandre Derumier:
> Hi,
> 
> This patch serie update frr to 8.5.1.
> (mirror need to be update to 8.5.1 tag https://github.com/FRRouting/frr/tree/frr-8.5.1)
> 
> I have removed old upstreamed patches, and added 2 importants evpn
> patches released just after 8.5.1.
> 
> 
> 
> Alexandre Derumier (4):
>   patches: remove old upstreamed patches
>   patches : update autort patch
>   patches : add evpn mac mobility fixes from stable/8.0
>   bump version to 8.5.1
> 
>  debian/changelog                              |   6 +
>  debian/patches/frr/0001-zebra-buffering.patch |  92 ----
>  .../0001-zebra-fix-evpn-dup-detected.patch    |  46 ++
>  debian/patches/frr/0002-zebra-buffering.patch | 420 ------------------
>  .../0002-zebra-evpn-handle-del-event.patch    |  71 +++
>  debian/patches/frr/0003-zebra-buffering.patch | 283 ------------
>  .../frr/ospf6d-fix-infinite-loop.patch        |  76 ----
>  ...on-for-RT-auto-derivation-to-force-A.patch |  24 +-
>  debian/patches/series                         |   8 +-
>  9 files changed, 138 insertions(+), 888 deletions(-)
>  delete mode 100644 debian/patches/frr/0001-zebra-buffering.patch
>  create mode 100644 debian/patches/frr/0001-zebra-fix-evpn-dup-detected.patch
>  delete mode 100644 debian/patches/frr/0002-zebra-buffering.patch
>  create mode 100644 debian/patches/frr/0002-zebra-evpn-handle-del-event.patch
>  delete mode 100644 debian/patches/frr/0003-zebra-buffering.patch
>  delete mode 100644 debian/patches/frr/ospf6d-fix-infinite-loop.patch
> 

applied, and some general packaging cleanup done in frr, thanks!




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-06-06  8:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-23  6:08 [pve-devel] [PATCH frr 0/4] update to 8.5.1 Alexandre Derumier
2023-05-23  6:08 ` [pve-devel] [PATCH frr 1/4] patches: remove old upstreamed patches Alexandre Derumier
2023-05-23  6:08 ` [pve-devel] [PATCH frr 2/4] patches : update autort patch Alexandre Derumier
2023-05-23  6:08 ` [pve-devel] [PATCH frr 3/4] patches : add evpn mac mobility fixes from stable/8.0 Alexandre Derumier
2023-05-23  6:08 ` [pve-devel] [PATCH frr 4/4] bump version to 8.5.1 Alexandre Derumier
2023-06-06  8:40 ` [pve-devel] applied: [PATCH frr 0/4] update " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal