frr: 10.2.1 fixes

add mgmtd and pim6d

Signed-off-by: Lucian CRISTIAN <lucian.cristian@gmail.com>
This commit is contained in:
Lucian CRISTIAN 2025-02-02 13:32:24 +02:00 committed by Tianling Shen
parent 91b9dd598d
commit 928799f853
3 changed files with 61 additions and 18 deletions

View File

@ -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 <lucian.cristian@gmail.com>
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,))

View File

@ -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"

View File

@ -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 "$@";;