Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions net/mesh11sd/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2022 - 2026 BlueWave Projects and Services <licence@blue-wave.net>
#

include $(TOPDIR)/rules.mk

PKG_NAME:=mesh11sd
PKG_VERSION:=6.2.1
PKG_RELEASE:=2

PKG_MAINTAINER:=Rob White <rob@blue-wave.net>
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=LICENSE

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/opennds/mesh11sd/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=8ee36f12873a4648edc0ba5ac991a93ae79c6cd48940d9b7e999bb845cf78471

include $(INCLUDE_DIR)/package.mk

define Package/mesh11sd
SUBMENU:=Mesh
SECTION:=net
CATEGORY:=Network
TITLE:=Dynamic 802.11s Mesh Management Daemon
PKGARCH:=all

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No DEPENDS at all, but the description below (line 35) advertises "Point to multi-point vxlan tunneling is provided by default". The daemon builds the tunnel with ip -6 link add ... type vxlan and gates the whole feature on two packages being installed:

package_list="ip-full vxlan"
check_package_list

if [ "$ip_full" -eq 0 ] && [ "$vxlan" -eq 0 ]; then # we have the required packages for vxlan and it is enabled

(src/mesh11sd:629, same check at lines 2745, 3797 and 6380)

Neither ip-full nor vxlan is in DEFAULT_PACKAGES, and nothing else pulls them in — so on a fresh install the advertised default feature is silently off, with only a syslog line to say so. vxlan already depends on kmod-vxlan, so two entries cover it:

Suggested change
PKGARCH:=all
DEPENDS:=+ip-full +vxlan
PKGARCH:=all

Alternatively, if the degraded mode is meant to be the supported default, dropping "by default" from the description would make that clear.

For the record, I checked iw too — the script uses it unconditionally (iw dev, mesh_param, mpath) and it is not in DEFAULT_PACKAGES either, but kmod-cfg80211 depends on +iw, so any board with a wifi driver already has it transitively. Adding +iw explicitly would be tidier but is not a functional gap.


Generated by Claude Code

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bluewavenet Since you are using this package and most likely, you have it installed on several routers, could you confirm it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, @bluewavenet respondented that there are optional dependencies here:
#30168 (comment)

URL:=https://github.com/opennds/mesh11sd
endef

define Package/mesh11sd/description
Mesh11sd autonomously manages all aspects of an 802.11s mesh network.
It acts as a service daemon.
Mesh parameters are dynamically set across all nodes.
Point to multi-point vxlan tunneling is provided by default.
Custom vlan trunking over the vxlan tunnel is fully supported.
Cabled sections of backhaul are fully supported.
Access Point usage data is collected in a central database.
A command line interface is provided for many functions.
An optional Customer/Client Premises Equipment (CPE) mode is provided
CPE mode greatly simplifies rollout of community WISP projects.
endef

define Package/mesh11sd/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mesh11sd $(1)/usr/sbin
$(INSTALL_CONF) $(PKG_BUILD_DIR)/linux_openwrt/mesh11sd/files/etc/config/mesh11sd $(1)/etc/config/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linux_openwrt/mesh11sd/files/etc/init.d/mesh11sd $(1)/etc/init.d/
endef

define Package/mesh11sd/conffiles
/etc/config/mesh11sd
endef

define Build/Compile
endef

$(eval $(call BuildPackage,mesh11sd))
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
From 443cdb4c9f0ca20466f6ae31a81047bfeb95825c Mon Sep 17 00:00:00 2001
From: Rob White <rob@blue-wave.net>
Date: Thu, 6 Aug 2026 21:57:14 +0000
Subject: [PATCH] Fix - do not run get_current_setup until after version
argument

get_current_setup() runs before any argument is parsed, so mesh11sd -v
and mesh11sd -h collect the whole runtime environment first. That
includes refresh_bridgemac(), which calls wait_for_interface() for
br-lan; when that interface is not up, the poll loop runs for the full
interface_timeout, ten seconds by default.

On a running router br-lan is up, the loop exits on its first iteration
and the delay is invisible. It shows up wherever the interface is absent
or still coming up, such as the OpenWrt package CI, which probes every
installed executable for its version with a ten second timeout.

Handle the informational options first and exit, then run the setup for
the options that need it.

Upstream-Status: Backport [https://github.com/openNDS/mesh11sd/commit/443cdb4c9f0ca20466f6ae31a81047bfeb95825c]
---
--- a/src/mesh11sd
+++ b/src/mesh11sd
@@ -5976,8 +5976,6 @@ else
mesh11sdpid=$(pgrep -f "/bin/sh /usr/sbin/mesh11sd")
fi

-get_current_setup 2> /dev/null
-
if [ -z "$1" ] || [ "$1" = "-h" ] || [ $1 = "--help" ] || [ $1 = "help" ]; then
echo "
Usage: mesh11sd [option] [argument...]]
@@ -6153,11 +6151,16 @@ if [ -z "$1" ] || [ "$1" = "-h" ] || [ $
For further documentation, see: https://github.com/openNDS/mesh11sd#readme

"
+ exit 0

elif [ "$1" = "-v" ] || [ $1 = "--version" ] || [ $1 = "version" ]; then
echo "mesh11sd version $version"
+ exit 0
+fi
+
+get_current_setup 2> /dev/null

-elif [ "$1" = "debuglevel" ]; then
+if [ "$1" = "debuglevel" ]; then

if [ -z "$2" ];then
echo "$debuglevel"
24 changes: 24 additions & 0 deletions net/mesh11sd/patches/101-fix-licence-discrepancy.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 9d18091f27e5fdd9406c6ac03267199a059fc8f5 Mon Sep 17 00:00:00 2001
From: Rob White <rob@blue-wave.net>
Date: Thu, 6 Aug 2026 21:46:37 +0000
Subject: [PATCH] Fix -licence discrepancy

The script header claimed GPL version 3 or later, while the LICENSE file
the project ships is GPL version 2. Make the header agree with it.

Upstream-Status: Backport [https://github.com/openNDS/mesh11sd/commit/9d18091f27e5fdd9406c6ac03267199a059fc8f5]
---
--- a/src/mesh11sd
+++ b/src/mesh11sd
@@ -1,9 +1,9 @@
#!/bin/sh
# Copyright (C) BlueWave Projects and Services 2015-2026
#
-# This software is released under the GNU General Public License version 3 or any later version.
+# This software is released under the GNU General Public License version 2 or any later version.
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation,
-# either version 3 of the License, or (at your option) any later version.
+# either version 2 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
From d0db5353ffc8574c30620fae1f54b13f7f873c6f Mon Sep 17 00:00:00 2001
From: Rob White <rob@blue-wave.net>
Date: Thu, 6 Aug 2026 22:05:02 +0000
Subject: [PATCH] Fix - typo in get_current_setup() getting apmond_cgi_dir

The length was taken from $apmon_cgi_dir, which is never set, so strlen
was always 0 and the trailing slash check read the wrong character.

Upstream-Status: Backport [https://github.com/openNDS/mesh11sd/commit/d0db5353ffc8574c30620fae1f54b13f7f873c6f]
---
--- a/src/mesh11sd
+++ b/src/mesh11sd
@@ -989,7 +989,7 @@ get_current_setup() {
apmond_cgi_dir="/www/cgi-bin"
fi

- strlen=$((${#apmon_cgi_dir}));
+ strlen=$((${#apmond_cgi_dir}));
lastchar=${apmond_cgi_dir:$strlen -1 :1}

if [ "$lastchar" != "/" ]; then