From 928799f8534d8bb4e65a2969c07dff8f7bb318f7 Mon Sep 17 00:00:00 2001 From: Lucian CRISTIAN Date: Sun, 2 Feb 2025 13:32:24 +0200 Subject: [PATCH] frr: 10.2.1 fixes add mgmtd and pim6d Signed-off-by: Lucian CRISTIAN --- net/frr/Makefile | 12 ++++--- net/frr/files/daemons | 1 + net/frr/files/frrcommon.sh | 66 ++++++++++++++++++++++++++++++-------- 3 files changed, 61 insertions(+), 18 deletions(-) diff --git a/net/frr/Makefile b/net/frr/Makefile index de69a07b69..79230dc700 100644 --- a/net/frr/Makefile +++ b/net/frr/Makefile @@ -8,14 +8,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=frr PKG_VERSION:=10.2.1 -PKG_RELEASE:=1 -PKG_SOURCE_DATE:=2025-01-21 +PKG_RELEASE:=2 +PKG_SOURCE_DATE:=2025-01-29 PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz -PKG_SOURCE_VERSION:=989328c7e47c7bbcf3364d5424ac17f49fd05c57 +PKG_SOURCE_VERSION:=05f9d44340755e5ca612e4852b710f4037254e7b PKG_SOURCE_URL:=https://codeload.github.com/FRRouting/frr/tar.gz/$(PKG_SOURCE_VERSION)? -PKG_HASH:=d8ea2bad243cfcfd96b9b4a5dd524fe1deeb577cd535529babe24a02cae26f06 +PKG_HASH:=8873e1f638fc4457a30227181e3fd26414795e63dbb11911c2e669876589f228 PKG_MAINTAINER:=Lucian Cristian PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION) @@ -38,6 +38,7 @@ PKG_DAEMON_AVAILABLE:= \ pathd \ pbrd \ pimd \ + pim6d \ ripd \ ripngd \ staticd \ @@ -198,9 +199,11 @@ define Package/frr/install $(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_BIN) $(PKG_INSTALL_DIR)/usr/sbin/mgmtd $(1)/usr/sbin/ $(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/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libmgmt_be_nb.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 @@ -241,6 +244,7 @@ $(eval $(call BuildDaemon,ospf6d,@IPV6)) $(eval $(call BuildDaemon,pathd,)) $(eval $(call BuildDaemon,pbrd,)) $(eval $(call BuildDaemon,pimd,)) +$(eval $(call BuildDaemon,pim6d,)) $(eval $(call BuildDaemon,ripd,)) $(eval $(call BuildDaemon,ripngd,@IPV6)) $(eval $(call BuildDaemon,staticd,)) diff --git a/net/frr/files/daemons b/net/frr/files/daemons index 0005da4e3d..04b74103dd 100644 --- a/net/frr/files/daemons +++ b/net/frr/files/daemons @@ -26,6 +26,7 @@ vrrpd=no # vtysh_enable=yes zebra_options=" -A 127.0.0.1 -s 90000000" +mgmtd_options=" -A 127.0.0.1" bgpd_options=" -A 127.0.0.1" ospfd_options=" -A 127.0.0.1" ospf6d_options=" -A ::1" diff --git a/net/frr/files/frrcommon.sh b/net/frr/files/frrcommon.sh index 9642677183..003a126927 100644 --- a/net/frr/files/frrcommon.sh +++ b/net/frr/files/frrcommon.sh @@ -35,12 +35,23 @@ FRR_DEFAULT_PROFILE="traditional" # traditional / datacenter # - keep zebra first # - watchfrr does NOT belong in this list -DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pathd pimd ldpd nhrpd eigrpd sharpd pbrd staticd bfdd fabricd vrrpd" +DAEMONS="zebra mgmtd bgpd ripd ripngd ospfd ospf6d isisd babeld pimd pim6d ldpd nhrpd eigrpd sharpd pbrd staticd bfdd fabricd vrrpd pathd" + RELOAD_SCRIPT="$D_PATH/frr-reload.py" # # general helpers # +is_user_root () { +# if [[ ! -z $FRR_NO_ROOT && "${FRR_NO_ROOT}" == "yes" ]]; then +# return 0 +# fi + + [ "${EUID:-$(id -u)}" -eq 0 ] || { + log_failure_msg "Only users having EUID=0 can start/stop daemons" + return 1 + } +} debug() { [ -n "$watchfrr_debug" ] || return 0 @@ -93,13 +104,12 @@ daemon_list() { for daemon in $DAEMONS; do eval cfg=\$$daemon eval inst=\$${daemon}_instances - [ "$daemon" = zebra -o "$daemon" = staticd ] && cfg=yes + [ "$daemon" = zebra -o "$daemon" = staticd -o "$daemon" = mgmtd ] && cfg=yes if [ -n "$cfg" -a "$cfg" != "no" -a "$cfg" != "0" ]; then if ! daemon_prep "$daemon" "$inst"; then continue fi debug "$daemon enabled" -# enabled="$enabled $daemon" if [ -n "$inst" ]; then debug "$daemon multi-instance $inst" @@ -185,9 +195,15 @@ daemon_prep() { daemon_start() { local dmninst daemon inst args instopt wrap bin + + is_user_root || exit 1 + + all=false + [ "$1" = "--all" ] && { all=true; shift; } + daemon_inst "$1" - ulimit -n $MAX_FDS > /dev/null 2> /dev/null + [ "$MAX_FDS" != "" ] && ulimit -n "$MAX_FDS" > /dev/null 2> /dev/null daemon_prep "$daemon" "$inst" || return 1 if test ! -d "$V_PATH"; then mkdir -p "$V_PATH" @@ -199,9 +215,15 @@ daemon_start() { instopt="${inst:+-n $inst}" eval args="\$${daemon}_options" - if eval "$all_wrap $wrap $bin $nsopt -d $frr_global_options $instopt $args"; then + cmd="$all_wrap $wrap $bin $nsopt -d $frr_global_options $instopt $args" + log_success_msg "Starting $daemon with command: '$cmd'" + if eval "$cmd"; then log_success_msg "Started $dmninst" - vtysh_b "$daemon" + if $all; then + debug "Skipping startup of vtysh until all have started" + else + vtysh_b "$daemon" + fi else log_failure_msg "Failed to start $dmninst!" fi @@ -211,16 +233,22 @@ daemon_stop() { local dmninst daemon inst pidfile vtyfile pid cnt fail daemon_inst "$1" + is_user_root || exit 1 + + all=false + [ "$2" = "--reallyall" ] && all=true + pidfile="$V_PATH/$daemon${inst:+-$inst}.pid" vtyfile="$V_PATH/$daemon${inst:+-$inst}.vty" [ -r "$pidfile" ] || fail="pid file not found" - [ -z "$fail" ] && pid="`cat \"$pidfile\"`" + $all && [ -n "$fail" ] && return 0 + [ -z "$fail" ] && pid="$(cat "$pidfile")" [ -z "$fail" -a -z "$pid" ] && fail="pid file is empty" [ -n "$fail" ] || kill -0 "$pid" 2>/dev/null || fail="pid $pid not running" if [ -n "$fail" ]; then - log_failure_msg "Cannot stop $dmninst: $fail" + [ "$2" = "--quiet" ] || log_failure_msg "Cannot stop $dmninst: $fail" return 1 fi @@ -228,15 +256,25 @@ daemon_stop() { kill -2 "$pid" cnt=1200 while kill -0 "$pid" 2>/dev/null; do - sleep 1 +# +# hack to have sub second delay and speed up the restart +# + start=$(cut -d ' ' -f 1 /proc/uptime | awk '{print int($1 * 1000)}') + while :; do + now=$(cut -d ' ' -f 1 /proc/uptime | awk '{print int($1 * 1000)}') + elapsed=$((now - start)) + if [ $elapsed -ge 100 ]; then # 100 milliseconds + break + fi + done [ $(( cnt -= 1 )) -gt 0 ] || break done if kill -0 "$pid" 2>/dev/null; then - log_failure_msg "Failed to stop $dmninst, pid $pid still running" + [ "$2" = "--quiet" ] || log_failure_msg "Failed to stop $dmninst, pid $pid still running" still_running=1 return 1 else - log_success_msg "Stopped $dmninst" + [ "$2" = "--quiet" ] || log_success_msg "Stopped $dmninst" rm -f "$pidfile" return 0 fi @@ -249,7 +287,7 @@ daemon_status() { pidfile="$V_PATH/$daemon${inst:+-$inst}.pid" [ -r "$pidfile" ] || return 3 - pid="`cat \"$pidfile\"`" + pid="$(cat "$pidfile")" [ -z "$pid" ] && return 1 kill -0 "$pid" 2>/dev/null || return 1 return 0 @@ -373,12 +411,12 @@ frrcommon_main() { cmd="$1" shift - if [ "$1" = "all" -o -z "$1" ]; then + if [ "$1" = "all" ] || [ -z "$1" ]; then case "$cmd" in start) all_start;; stop) all_stop;; restart) - all_stop + all_stop --quiet all_start ;; *) $cmd "$@";; -- 2.30.2