frr: update to 10.2.1
authorLucian CRISTIAN <[email protected]>
Fri, 24 Jan 2025 22:41:35 +0000 (00:41 +0200)
committerTianling Shen <[email protected]>
Sun, 26 Jan 2025 09:12:32 +0000 (17:12 +0800)
Signed-off-by: Lucian CRISTIAN <[email protected]>
net/frr/Makefile
net/frr/files/frrcommon.sh
net/frr/patches/098-fix_mips_libyang.patch
net/frr/patches/996-qpb_header_fix.patch [new file with mode: 0644]
net/frr/patches/997-reverse_python_test.patch
net/frr/patches/999-thread_reverse.patch [deleted file]

index e0e5e1ee85987bf54c850f3a31809e7b12a7489f..de69a07b690e79d536e62e31431a81d39dc52bf2 100644 (file)
@@ -7,15 +7,15 @@
 
 include $(TOPDIR)/rules.mk
 PKG_NAME:=frr
-PKG_VERSION:=8.5.1
+PKG_VERSION:=10.2.1
 PKG_RELEASE:=1
-PKG_SOURCE_DATE:=2023-05-12
+PKG_SOURCE_DATE:=2025-01-21
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz
-PKG_SOURCE_VERSION:=05469ab2b553302c2a7032f4c89e4510dc3fa6d9
+PKG_SOURCE_VERSION:=989328c7e47c7bbcf3364d5424ac17f49fd05c57
 PKG_SOURCE_URL:=https://codeload.github.com/FRRouting/frr/tar.gz/$(PKG_SOURCE_VERSION)?
 
-PKG_HASH:=caf3fcf1998ecd9a08e67373921a2d4bf49dbfc707008d20a1d38fd1606ef298
+PKG_HASH:=d8ea2bad243cfcfd96b9b4a5dd524fe1deeb577cd535529babe24a02cae26f06
 PKG_MAINTAINER:=Lucian Cristian <[email protected]>
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
@@ -49,8 +49,7 @@ PKG_CONFIG_DEPENDS:= \
        CONFIG_FRR_INTERNAL \
        CONFIG_FRR_SNMP \
        CONFIG_FRR_NO_SNMP \
-       CONFIG_PACKAGE_frr-libfrr \
-       CONFIG_PACKAGE_frr-vtysh \
+       CONFIG_PACKAGE_frr \
        CONFIG_PACKAGE_frr-watchfrr \
        CONFIG_PACKAGE_frr-zebra \
        $(patsubst %,CONFIG_PACKAGE_frr-%,$(PKG_DAEMON_AVAILABLE)) \
@@ -60,13 +59,13 @@ PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
 PKG_BUILD_FLAGS:=lto
 
-PKG_BUILD_DEPENDS:=frr/host
+PKG_BUILD_DEPENDS:=frr/host protobuf-c/host
 HOST_BUILD_DEPENDS:=python3/host
 
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/host-build.mk
 
-define Package/frr-libfrr/config
+define Package/frr/config
   source "$(SOURCE)/Config.in"
 endef
 
@@ -80,7 +79,8 @@ endef
 
 define Package/frr
   $(call Package/frr/Default)
-  DEPENDS:=+librt
+  DEPENDS:=+librt +libatomic +libcap +libncurses +libjson-c +libreadline \
+    +libyang +libprotobuf-c +FRR_OPENSSL:libopenssl +FRR_SNMP:libnetsnmp +more
   TITLE:=The FRRouting (FRR) Software Routing Suite
   MENU:=1
 endef
@@ -94,31 +94,15 @@ define Package/frr/description
   NHRP.
 endef
 
-define Package/frr-libfrr
-  $(call Package/frr/Default)
-  TITLE:=zebra library
-  DEPENDS+=+librt +libatomic +libcap +libjson-c +libyang +FRR_OPENSSL:libopenssl +FRR_SNMP:libnetsnmp
-  CONFLICTS:=quagga-libzebra
-endef
-
-define Package/frr-vtysh
-  $(call Package/frr/Default)
-  DEPENDS+=+frr-libfrr +libreadline +libncurses +more
-  TITLE:=integrated shell for frr routing software
-  CONFLICTS:=quagga-vtysh
-endef
-
 define Package/frr-watchfrr
   $(call Package/frr/Default)
   TITLE:=frr watchdog
-  DEPENDS+=+frr-libfrr
   DEFAULT:=y if PACKAGE_frr
 endef
 
 define Package/frr-zebra
   $(call Package/frr/Default)
   TITLE:=Zebra daemon
-  DEPENDS+=+frr-libfrr
   DEFAULT:=y if PACKAGE_frr
   CONFLICTS:=quagga-zebra
 endef
@@ -126,7 +110,7 @@ endef
 define Package/frr-pythontools
   $(call Package/frr/Default)
   TITLE:=Python reload tool
-  DEPENDS+=+frr-libfrr +python3-base +python3-light +python3-logging
+  DEPENDS+=+python3-base +python3-light +python3-logging
 endef
 
 ##Migrate from quagga
@@ -144,7 +128,10 @@ define BuildDaemon
     define Package/frr-$(1)
        $$(call Package/frr/Default)
        TITLE:= $(1) routing engine
-       DEPENDS+=frr-libfrr $(2)
+ifeq ($(1),bgpd)
+       KCONFIG:=CONFIG_TCP_MD5SIG=y
+endif
+       DEPENDS+=$(2)
     endef
 #      if [ "$(1)" == "bfdd" ]; then \
 #      export HAVE_BFDD == 1 ; fi
@@ -160,7 +147,7 @@ define BuildDaemon
     $$(eval $$(call BuildPackage,frr-$(1)))
 endef
 
-define Package/frr-libfrr/conffiles
+define Package/frr/conffiles
 /etc/frr/daemons
 /etc/frr/frr.conf
 /etc/frr/vtysh.conf
@@ -177,6 +164,9 @@ HOST_CPPFLAGS += -I$(STAGING_DIR_HOST)/include/libelf
 HOST_CONFIGURE_ARGS+= \
        --enable-clippy-only
 
+HOST_MAKE_FLAGS = \
+        LIBS+='-lz'
+
 define Host/Install
        $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin
        $(INSTALL_BIN) $(HOST_BUILD_DIR)/lib/clippy $(STAGING_DIR_HOSTPKG)/bin/
@@ -185,6 +175,8 @@ endef
 CONFIGURE_ARGS+= \
        --with-clippy=$(STAGING_DIR_HOSTPKG)/bin/clippy \
        --prefix=/usr \
+       --enable-vtysh \
+       --enable-zebra \
        --enable-shared \
        --disable-static \
        --enable-user=network \
@@ -197,15 +189,20 @@ CONFIGURE_ARGS+= \
        $(if $(CONFIG_FRR_OPENSSL),--with-crypto=openssl,) \
        $(if $(CONFIG_FRR_SNMP),--enable-snmp,) \
        $(foreach m,$(PKG_DAEMON_AVAILABLE), \
-       $(call autoconf_bool,CONFIG_PACKAGE_frr-$(m),$(m)) ) \
-       $(call autoconf_bool,CONFIG_PACKAGE_frr-vtysh,vtysh) \
-       $(call autoconf_bool,CONFIG_PACKAGE_frr-libfrr,zebra)
+       $(call autoconf_bool,CONFIG_PACKAGE_frr-$(m),$(m)) )
 
 
 define Package/frr/install
        $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d
        $(INSTALL_BIN) ./files/frrcommon.sh $(1)/usr/sbin/
        $(INSTALL_BIN) ./files/frr $(1)/etc/init.d/
+       $(INSTALL_DIR) $(1)/usr/bin $(1)/etc/frr
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/
+       $(INSTALL_CONF) ./files/vtysh.conf $(1)/etc/frr/
+       $(INSTALL_DIR) $(1)/usr/lib $(1)/etc/frr
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfrr.so* $(1)/usr/lib/
+       $(if $(CONFIG_FRR_SNMP),$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfrrsnmp.so* $(1)/usr/lib/,)
+       $(INSTALL_CONF) ./files/{frr.conf,daemons} $(1)/etc/frr/
 endef
 
 define Package/frr-watchfrr/install
@@ -219,14 +216,6 @@ define Package/frr-zebra/install
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/zebra $(1)/usr/sbin/
 endef
 
-define Package/frr-libfrr/install
-       $(INSTALL_DIR) $(1)/usr/lib $(1)/etc/frr
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfrr.so* $(1)/usr/lib/
-       $(if $(CONFIG_FRR_SNMP),$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfrrsnmp.so* $(1)/usr/lib/,)
-       $(INSTALL_CONF) ./files/{frr.conf,daemons} $(1)/etc/frr/
-endef
-
-
 define Package/frr-pythontools/install
        $(INSTALL_DIR) $(1)/usr/lib/frr $(1)/usr/sbin $(1)/etc/frr
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/*.py $(1)/usr/lib/frr/
@@ -234,19 +223,11 @@ define Package/frr-pythontools/install
        $(INSTALL_CONF) $(PKG_BUILD_DIR)/tools/etc/frr/support_bundle_commands.conf $(1)/etc/frr/
 endef
 
-define Package/frr-vtysh/install
-       $(INSTALL_DIR) $(1)/usr/bin $(1)/etc/frr
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/vtysh $(1)/usr/bin/
-       $(INSTALL_CONF) ./files/vtysh.conf $(1)/etc/frr/
-endef
-
 $(eval $(call HostBuild))
 $(eval $(call BuildPackage,frr))
-$(eval $(call BuildPackage,frr-libfrr))
 $(eval $(call BuildPackage,frr-pythontools))
 $(eval $(call BuildPackage,frr-watchfrr))
 $(eval $(call BuildPackage,frr-zebra))
-$(eval $(call BuildPackage,frr-vtysh))
 $(eval $(call BuildDaemon,babeld,))
 $(eval $(call BuildDaemon,bfdd,))
 $(eval $(call BuildDaemon,bgpd,))
index f59fce8730f51c861d22c55dab6eb2c0858bf6d3..9642677183a01b26e652f15d5ed2a40f70f66359 100644 (file)
@@ -341,7 +341,7 @@ if [ -z "$FRR_PATHSPACE" ]; then
        load_old_config "/etc/sysconfig/frr"
 fi
 
-if { declare -p watchfrr_options 2>/dev/null || true; } | grep -q '^declare \-a'; then
+if { declare -p watchfrr_options 2>/dev/null || true; } | grep -q '^declare -a'; then
        log_warning_msg "watchfrr_options contains a bash array value." \
                "The configured value is intentionally ignored since it is likely wrong." \
                "Please remove or fix the setting."
index 3cf24c9853df1ed5afc6ada3c46d454794a4df91..39a84a7647642d49f84e097f32a0ef01fa46d455 100644 (file)
@@ -1,6 +1,6 @@
 --- a/lib/northbound.h
 +++ b/lib/northbound.h
-@@ -593,11 +593,7 @@ struct frr_yang_module_info {
+@@ -665,11 +665,7 @@ struct frr_yang_module_info {
  
                /* Priority - lower priorities are processed first. */
                uint32_t priority;
diff --git a/net/frr/patches/996-qpb_header_fix.patch b/net/frr/patches/996-qpb_header_fix.patch
new file mode 100644 (file)
index 0000000..07b06fe
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/qpb/qpb_allocator.h
++++ b/qpb/qpb_allocator.h
+@@ -14,7 +14,7 @@
+ #ifndef _QPB_ALLOCATOR_H_
+ #define _QPB_ALLOCATOR_H_
+-#include <google/protobuf-c/protobuf-c.h>
++#include <protobuf-c/protobuf-c.h>
+ struct linear_allocator_t_;
index 8e454a45667363a593210be3fcda213fefe57dcf..16232c410a3839f003827b79932fceb2324498ae 100644 (file)
@@ -1,6 +1,6 @@
 --- a/configure.ac
 +++ b/configure.ac
-@@ -839,7 +839,6 @@ fi
+@@ -913,7 +913,6 @@ AC_DEFINE_UNQUOTED([DFLT_NAME], ["$DFLT_
  #
  
  AS_IF([test "$host" = "$build"], [
diff --git a/net/frr/patches/999-thread_reverse.patch b/net/frr/patches/999-thread_reverse.patch
deleted file mode 100644 (file)
index 0f5b24b..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
---- a/lib/thread.c
-+++ b/lib/thread.c
-@@ -868,13 +868,9 @@ static void thread_free(struct thread_ma
-       XFREE(MTYPE_THREAD, thread);
- }
--static int fd_poll(struct thread_master *m, const struct timeval *timer_wait,
--                 bool *eintr_p)
-+static int fd_poll(struct thread_master *m, struct pollfd *pfds, nfds_t pfdsize,
-+                 nfds_t count, const struct timeval *timer_wait)
- {
--      sigset_t origsigs;
--      unsigned char trash[64];
--      nfds_t count = m->handler.copycount;
--
-       /*
-        * If timer_wait is null here, that means poll() should block
-        * indefinitely, unless the thread_master has overridden it by setting
-@@ -905,58 +901,15 @@ static int fd_poll(struct thread_master
-       rcu_assert_read_unlocked();
-       /* add poll pipe poker */
--      assert(count + 1 < m->handler.pfdsize);
--      m->handler.copy[count].fd = m->io_pipe[0];
--      m->handler.copy[count].events = POLLIN;
--      m->handler.copy[count].revents = 0x00;
--
--      /* We need to deal with a signal-handling race here: we
--       * don't want to miss a crucial signal, such as SIGTERM or SIGINT,
--       * that may arrive just before we enter poll(). We will block the
--       * key signals, then check whether any have arrived - if so, we return
--       * before calling poll(). If not, we'll re-enable the signals
--       * in the ppoll() call.
--       */
--
--      sigemptyset(&origsigs);
--      if (m->handle_signals) {
--              /* Main pthread that handles the app signals */
--              if (frr_sigevent_check(&origsigs)) {
--                      /* Signal to process - restore signal mask and return */
--                      pthread_sigmask(SIG_SETMASK, &origsigs, NULL);
--                      num = -1;
--                      *eintr_p = true;
--                      goto done;
--              }
--      } else {
--              /* Don't make any changes for the non-main pthreads */
--              pthread_sigmask(SIG_SETMASK, NULL, &origsigs);
--      }
-+      assert(count + 1 < pfdsize);
-+      pfds[count].fd = m->io_pipe[0];
-+      pfds[count].events = POLLIN;
-+      pfds[count].revents = 0x00;
--#if defined(HAVE_PPOLL)
--      struct timespec ts, *tsp;
-+      num = poll(pfds, count + 1, timeout);
--      if (timeout >= 0) {
--              ts.tv_sec = timeout / 1000;
--              ts.tv_nsec = (timeout % 1000) * 1000000;
--              tsp = &ts;
--      } else
--              tsp = NULL;
--
--      num = ppoll(m->handler.copy, count + 1, tsp, &origsigs);
--      pthread_sigmask(SIG_SETMASK, &origsigs, NULL);
--#else
--      /* Not ideal - there is a race after we restore the signal mask */
--      pthread_sigmask(SIG_SETMASK, &origsigs, NULL);
--      num = poll(m->handler.copy, count + 1, timeout);
--#endif
--
--done:
--
--      if (num < 0 && errno == EINTR)
--              *eintr_p = true;
--
--      if (num > 0 && m->handler.copy[count].revents != 0 && num--)
-+      unsigned char trash[64];
-+      if (num > 0 && pfds[count].revents != 0 && num--)
-               while (read(m->io_pipe[0], &trash, sizeof(trash)) > 0)
-                       ;
-@@ -1766,7 +1719,7 @@ struct thread *thread_fetch(struct threa
-       struct timeval zerotime = {0, 0};
-       struct timeval tv;
-       struct timeval *tw = NULL;
--      bool eintr_p = false;
-+
-       int num = 0;
-       do {
-@@ -1842,14 +1795,14 @@ struct thread *thread_fetch(struct threa
-               pthread_mutex_unlock(&m->mtx);
-               {
--                      eintr_p = false;
--                      num = fd_poll(m, tw, &eintr_p);
-+                      num = fd_poll(m, m->handler.copy, m->handler.pfdsize,
-+                                    m->handler.copycount, tw);
-               }
-               pthread_mutex_lock(&m->mtx);
-               /* Handle any errors received in poll() */
-               if (num < 0) {
--                      if (eintr_p) {
-+                      if (errno == EINTR) {
-                               pthread_mutex_unlock(&m->mtx);
-                               /* loop around to signal handler */
-                               continue;