Files
Simon PolackandClaude Opus 5.5 40d387f979 olsrd: ubus: forget an interface that is already gone
del_interface looked for the active interface (if_ifwithname) and
answered "Permission denied" when there was none. That is the normal
case when it is called from a hotplug "remove" event: the device is
gone, olsrd has seen the link go away and has taken the active
interface down by itself. The configured entry stayed in
olsr_cnf->interfaces for good.

olsrd looks at every configured interface that is not up every
NicChgsPollInt seconds (2.5 by default) with ioctl(SIOCGIFFLAGS). For a
name that does not exist, the kernel tries to load a module for it
(dev_load), twice: "netdev-<name>" and "<name>". On OpenWrt each of
these is a run of kmodloader over all modules.

A gateway with wireguard tunnels that come and go collects one such
entry per tunnel. On an EdgeRouter 4 after 24 days there were 12 of
them: 16 to 19 process starts per second, 38 million since boot, about
half of one of its four cores.

Look for the configured entry instead, take it out of the list, and
only take the interface down if it is up. An unknown name is now "Not
found".

Tested on OpenWrt 25.12 (x86_64, in a container): removing an interface
that vanished before, one that is up, an unknown one, two vanished ones
in the other order, and adding one again. The same change has been
running on an EdgeRouter 4 (mips64) gateway.

Signed-off-by: Simon Polack <spolack+git@mailbox.org>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:56:40 +02:00

334 lines
9.1 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2009-2016 OpenWrt.org
#
include $(TOPDIR)/rules.mk
PKG_NAME:=olsrd
PKG_SOURCE_DATE:=2024-06-09
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/OLSR/olsrd.git
PKG_SOURCE_VERSION:=d72be9ad60f65dda28a0543b4ffff8cd9a5da2d7
PKG_MIRROR_HASH:=e05d2724e6c76233148ce460b9611bafccff2114904542fa3b5caf75dc1c4e04
PKG_MAINTAINER:=Nick Hainke <vincent@systemli.org>
PKG_BUILD_PARALLEL:=0
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=license.txt
include $(INCLUDE_DIR)/package.mk
TARGET_CFLAGS += $(FPIC)
define Package/olsrd/template
SECTION:=net
CATEGORY:=Network
SUBMENU:=Routing and Redirection
TITLE:=OLSR (Optimized Link State Routing) daemon
URL:=https://www.olsr.org/
endef
define Package/olsrd
$(call Package/olsrd/template)
MENU:=1
DEPENDS:=+libpthread +libubus +iptables +IPV6:ip6tables
endef
define Package/olsrd/conffiles
/etc/config/olsrd
/etc/config/olsrd6
endef
define Package/olsrd-mod-arprefresh
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Kernel ARP cache refresh plugin
endef
define Package/olsrd-mod-dot-draw
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Dot topology information plugin
endef
define Package/olsrd-mod-filtergw
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Filter Gateway plugin
endef
define Package/olsrd-mod-bmf
$(call Package/olsrd/template)
DEPENDS:=olsrd +kmod-tun
TITLE:=Basic multicast forwarding plugin
endef
define Package/olsrd-mod-dyn-gw
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Dynamic internet gateway plugin
endef
define Package/olsrd-mod-dyn-gw-plain
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Dynamic internet gateway plain plugin
endef
define Package/olsrd-mod-httpinfo
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Small informative web server plugin
endef
define Package/olsrd-mod-jsoninfo
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Small informative plugin with JSON output
endef
define Package/olsrd-mod-netjson
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=netjson plugin with JSON output
endef
define Package/olsrd-mod-mdns
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=MDNS/Zeroconf/Bonjour packet distribution
endef
define Package/olsrd-mod-nameservice
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Lightweight hostname resolver plugin
endef
define Package/olsrd-mod-p2pd
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Peer to Peer Discovery plugin
endef
define Package/olsrd-mod-pgraph
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=output network topology for pgraph
endef
define Package/olsrd-mod-pud
$(call Package/olsrd/template)
DEPENDS:=olsrd +libgps
TITLE:=Position Update Distribution plugin
endef
define Package/olsrd-mod-quagga
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Quagga plugin
endef
define Package/olsrd-mod-secure
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Message signing plugin to secure routing domain
endef
define Package/olsrd-mod-sgwdynspeed
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Smart Gateway dynamic speed plugin
endef
define Package/olsrd-mod-txtinfo
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Small informative web server plugin
endef
define Package/olsrd-mod-watchdog
$(call Package/olsrd/template)
DEPENDS:=olsrd
TITLE:=Watchdog plugin
endef
define Package/olsrd-utils
$(call Package/olsrd/template)
DEPENDS:=olsrd +jshn
TITLE:=Utils for OLSRD
endef
define Package/olsrd-mod-pud/conffiles
/etc/olsrd.d/olsrd.pud.position.conf
endef
define Package/olsrd-mod-secure/conffiles
/etc/olsrd.d/olsrd_secure_key
endef
define Package/olsrd-mod-sgwdynspeed/conffiles
/etc/olsrd.d/olsrd.sgw.speed.conf
endef
MAKE_FLAGS+= \
NO_DEBUG_MESSAGES=1 \
VERS="$(PKG_VERSION)" \
OS="linux" \
DESTDIR="$(PKG_INSTALL_DIR)" \
STRIP="true" \
INSTALL_LIB="true" \
SUBDIRS="arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo filtergw jsoninfo netjson mdns nameservice p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog"
define Build/Compile
$(call Build/Compile/Default,all)
$(call Build/Compile/Default,libs)
endef
define Package/olsrd/install
$(INSTALL_DIR) $(1)/lib/functions
$(INSTALL_DATA) ./files/olsrd.sh $(1)/lib/functions/olsrd.sh
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/olsrd.config $(1)/etc/config/olsrd
$(INSTALL_CONF) ./files/olsrd6.config $(1)/etc/config/olsrd6
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/olsrd $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/olsrd4.init $(1)/etc/init.d/olsrd
$(INSTALL_BIN) ./files/olsrd6.init $(1)/etc/init.d/olsrd6
endef
define Package/olsrd-mod-arprefresh/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/arprefresh/olsrd_arprefresh.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-filtergw/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/filtergw/olsrd_filtergw.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-dot-draw/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dot_draw/olsrd_dot_draw.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-bmf/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmf/olsrd_bmf.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-dyn-gw/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dyn_gw/olsrd_dyn_gw.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-dyn-gw-plain/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/dyn_gw_plain/olsrd_dyn_gw_plain.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-httpinfo/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/httpinfo/olsrd_httpinfo.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-jsoninfo/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/jsoninfo/olsrd_jsoninfo.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-netjson/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/netjson/olsrd_netjson.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-mdns/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/mdns/olsrd_mdns.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-nameservice/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/nameservice/olsrd_nameservice.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-p2pd/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/p2pd/olsrd_p2pd.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-pgraph/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pgraph/olsrd_pgraph.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-pud/install
$(INSTALL_DIR) $(1)/etc/olsrd.d
$(CP) ./files/olsrd.pud.position.conf $(1)/etc/olsrd.d/
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/nmealib/lib/libnmea.so $(1)/usr/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/wireformat/lib/libOlsrdPudWireFormat.so $(1)/usr/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/pud/olsrd_pud.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-quagga/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/quagga/olsrd_quagga.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-secure/install
$(INSTALL_DIR) $(1)/etc/olsrd.d
$(CP) ./files/olsrd_secure_key $(1)/etc/olsrd.d/
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/secure/olsrd_secure.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-sgwdynspeed/install
$(INSTALL_DIR) $(1)/etc/olsrd.d
$(CP) ./files/olsrd.sgw.speed.conf $(1)/etc/olsrd.d/
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/sgwdynspeed/olsrd_sgwdynspeed.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-txtinfo/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/txtinfo/olsrd_txtinfo.so.* $(1)/usr/lib/
endef
define Package/olsrd-mod-watchdog/install
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/watchdog/olsrd_watchdog.so.* $(1)/usr/lib/
endef
define Package/olsrd-utils/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/olsrd-neigh.sh $(1)/usr/bin/olsrd-neigh
endef
$(eval $(call BuildPackage,olsrd))
$(eval $(call BuildPackage,olsrd-mod-arprefresh))
$(eval $(call BuildPackage,olsrd-mod-dot-draw))
$(eval $(call BuildPackage,olsrd-mod-filtergw))
$(eval $(call BuildPackage,olsrd-mod-bmf))
$(eval $(call BuildPackage,olsrd-mod-dyn-gw))
$(eval $(call BuildPackage,olsrd-mod-dyn-gw-plain))
$(eval $(call BuildPackage,olsrd-mod-httpinfo))
$(eval $(call BuildPackage,olsrd-mod-jsoninfo))
$(eval $(call BuildPackage,olsrd-mod-netjson))
$(eval $(call BuildPackage,olsrd-mod-mdns))
$(eval $(call BuildPackage,olsrd-mod-nameservice))
$(eval $(call BuildPackage,olsrd-mod-p2pd))
$(eval $(call BuildPackage,olsrd-mod-pgraph))
$(eval $(call BuildPackage,olsrd-mod-pud))
$(eval $(call BuildPackage,olsrd-mod-quagga))
$(eval $(call BuildPackage,olsrd-mod-secure))
$(eval $(call BuildPackage,olsrd-mod-sgwdynspeed))
$(eval $(call BuildPackage,olsrd-mod-txtinfo))
$(eval $(call BuildPackage,olsrd-mod-watchdog))
$(eval $(call BuildPackage,olsrd-utils))