* [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded
@ 2025-07-29 14:42 Michael Tremer
2025-07-29 14:42 ` [PATCH 2/6] network: Add support for bonds Michael Tremer
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/rootfiles/common/aarch64/linux | 1 +
config/rootfiles/common/riscv64/linux | 1 +
config/rootfiles/common/x86_64/linux | 1 +
lfs/linux | 3 +++
4 files changed, 6 insertions(+)
diff --git a/config/rootfiles/common/aarch64/linux b/config/rootfiles/common/aarch64/linux
index c2b85c31a..08d3b06fd 100644
--- a/config/rootfiles/common/aarch64/linux
+++ b/config/rootfiles/common/aarch64/linux
@@ -573,6 +573,7 @@ boot/dtb-KVER
#boot/dtb-KVER/synaptics/berlin4ct-stb.dtb
boot/vmlinuz-KVER
#etc/cpufreq-bench.conf
+etc/modprobe.d/bonding.conf
etc/modprobe.d/ipv6.conf
#lib/modules
#lib/modules/KVER
diff --git a/config/rootfiles/common/riscv64/linux b/config/rootfiles/common/riscv64/linux
index 67d1dd018..475fda152 100644
--- a/config/rootfiles/common/riscv64/linux
+++ b/config/rootfiles/common/riscv64/linux
@@ -13,6 +13,7 @@ boot/dtb-KVER
#boot/dtb-KVER/starfive/jh7110-starfive-visionfive-2-v1.3b.dtb
boot/vmlinuz-KVER
#etc/cpufreq-bench.conf
+etc/modprobe.d/bonding.conf
etc/modprobe.d/ipv6.conf
#lib/modules
#lib/modules/KVER
diff --git a/config/rootfiles/common/x86_64/linux b/config/rootfiles/common/x86_64/linux
index a33704270..bd39739f0 100644
--- a/config/rootfiles/common/x86_64/linux
+++ b/config/rootfiles/common/x86_64/linux
@@ -2,6 +2,7 @@ boot/System.map-KVER
boot/config-KVER
boot/vmlinuz-KVER
#etc/cpufreq-bench.conf
+etc/modprobe.d/bonding.conf
etc/modprobe.d/ipv6.conf
#lib/modules
#lib/modules/KVER
diff --git a/lfs/linux b/lfs/linux
index 122d3517e..a1e5a49dd 100644
--- a/lfs/linux
+++ b/lfs/linux
@@ -232,6 +232,9 @@ endif
# Disable ipv6 at runtime
echo "options ipv6 disable_ipv6=1" > /etc/modprobe.d/ipv6.conf
+ # Do not automatically create bond0 when bonding is being loaded
+ echo "options bonding max_bonds=0" > /etc/modprobe.d/bonding.conf
+
# build cpupower utility
cd $(DIR_APP)/tools/power/cpupower && make $(MAKETUNING)
cd $(DIR_APP)/tools/power/cpupower && make install
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/6] network: Add support for bonds
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
@ 2025-07-29 14:42 ` Michael Tremer
2025-07-29 14:42 ` [PATCH 3/6] network: Rename the bridge hotplug script Michael Tremer
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
This is a bare-minimum implementation to realise this. It changes the
bridge script because the two of them have quite a bit in common, so we
should avoid further code duplication.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/udev/network-hotplug-bridges | 97 +++++++++++++++++++++--------
config/udev/network-hotplug-rename | 2 +-
2 files changed, 71 insertions(+), 28 deletions(-)
diff --git a/config/udev/network-hotplug-bridges b/config/udev/network-hotplug-bridges
index 39faeb5a9..4fa1154c2 100644
--- a/config/udev/network-hotplug-bridges
+++ b/config/udev/network-hotplug-bridges
@@ -71,57 +71,86 @@ ZONE=$(detect_zone)
# Cannot proceed if we could not find a zone
if [ -z "${ZONE}" ]; then
- logger "Could not find a bridged zone for ${INTERFACE}"
+ logger "Could not find a master zone for ${INTERFACE}"
exit 0
fi
# Determine the mode of this zone
MODE="$(get_value "${ZONE}_MODE")"
-# The name of the virtual bridge
-BRIDGE="$(get_value "${ZONE}_DEV")"
+# Exit if there is no MODE
+if [ -z "${MODE}" ]; then
+ exit 0
+fi
+
+# The name of the virtual master interface
+MASTER="$(get_value "${ZONE}_DEV")"
+
+# Fetch the MTU
MTU="$(get_value "${ZONE}_MTU")"
-STP="$(get_value "${ZONE}_STP")"
-STP_PRIORITY="$(get_value "${ZONE}_STP_PRIORITY")"
+
+# Set default MTU if nothing is set
+if [ -z "${MTU}" ]; then
+ MTU=1500
+fi
+
+# Fetch the MAC address of the master interface
+ADDRESS="$(get_value "${ZONE}_MACADDR")"
+
+# If no address has been configured, generate a random one
+if [ -z "${ADDRESS}" ]; then
+ ADDRESS="$(random_mac_address)"
+fi
case "${MODE}" in
- bridge)
- # Set default MTU if nothing is set
- if [ -z "${MTU}" ]; then
- MTU=1500
+ # Bond
+ bond)
+ BOND_MODE="$(get_value "${ZONE}_BOND_MODE")"
+ if [ -z "${BOND_MODE}" ]; then
+ BOND_MODE="802.3ad"
+ fi
+
+ # Check for some valid BOND_MODE
+ case "${BOND_MODE}" in
+ balance-rr|active-backup|balance-xor|broadcast|802.3ad|balance-tlb|balance-alb)
+ ;;
+ *)
+ logger "Invalid bond mode ${BOND_MODE} for ${MASTER}. Falling back to 802.3ad"
+ BOND_MODE="802.3ad"
+ ;;
+ esac
+
+ # Create the master interface if it does not exist
+ if [ ! -d "/sys/class/net/${MASTER}" ]; then
+ if ! ip link add "${MASTER}" address "${ADDRESS}" mtu "${MTU}" \
+ type bond mode "${BOND_MODE}"; then
+ logger "Failed to create bonding interface ${MASTER}"
+ exit 1
+ fi
fi
+ ;;
+
+ # Bridge
+ bridge)
+ # Fetch spanning tree settings
+ STP="$(get_value "${ZONE}_STP")"
+ STP_PRIORITY="$(get_value "${ZONE}_STP_PRIORITY")"
# We need to check if $STP_PRIORITY has a valid value if not set it
if [ -z "${STP_PRIORITY}" ]; then
STP_PRIORITY=16384
fi
- ADDRESS="$(get_value "${ZONE}_MACADDR")"
- [ -n "${ADDRESS}" ] || ADDRESS="$(random_mac_address)"
-
# We need to create the bridge if it doesn't exist, yet
- if [ ! -d "/sys/class/net/${BRIDGE}" ]; then
- ip link add "${BRIDGE}" address "${ADDRESS}" mtu "${MTU}" type bridge \
+ if [ ! -d "/sys/class/net/${MASTER}" ]; then
+ ip link add "${MASTER}" address "${ADDRESS}" mtu "${MTU}" type bridge \
$([ "${STP}" = "on" ] && echo "stp_state 1 priority ${STP_PRIORITY}" )
- #ip link set "${BRIDGE}" up
fi
# Try setting wireless interfaces into master mode
if [ -d "/sys/class/net/${INTERFACE}/phy80211" ]; then
iw dev "${INTERFACE}" set type __ap
fi
-
- # Attempt to set the MTU
- ip link set dev "${INTERFACE}" mtu "${MTU}"
-
- # Attach the physical device
- logger "Attach ${INTERFACE} to ${BRIDGE}"
- ip link set dev "${INTERFACE}" master "${BRIDGE}"
- ip link set dev "${INTERFACE}" up
- ;;
-
- "")
- exit 0
;;
*)
@@ -129,3 +158,17 @@ case "${MODE}" in
exit 1
;;
esac
+
+# Attempt to set the MTU
+ip link set dev "${INTERFACE}" mtu "${MTU}"
+
+# Ensure the physical interface is down
+ip link set dev "${INTERFACE}" down
+
+# Attach the physical device
+logger "Attach ${INTERFACE} to ${MASTER}"
+ip link set dev "${INTERFACE}" master "${MASTER}"
+ip link set dev "${INTERFACE}" up
+
+# Done!
+exit 0
diff --git a/config/udev/network-hotplug-rename b/config/udev/network-hotplug-rename
index 7c81bdb78..f27eecae6 100644
--- a/config/udev/network-hotplug-rename
+++ b/config/udev/network-hotplug-rename
@@ -78,7 +78,7 @@ for zone in ${ZONES}; do
# If a matching interface has been found we will
# print the name to which udev will rename it.
case "${!mode}" in
- bridge)
+ bond|bridge)
counter=0
for slave in ${!slaves}; do
if [ "${slave,,}" = "${ADDRESS,,}" ]; then
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/6] network: Rename the bridge hotplug script
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
2025-07-29 14:42 ` [PATCH 2/6] network: Add support for bonds Michael Tremer
@ 2025-07-29 14:42 ` Michael Tremer
2025-07-29 14:42 ` [PATCH 4/6] network: Fail if no master device has been configured for slave zones Michael Tremer
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Since it is now creating more than just bridges, this had to have a new
name.
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/rootfiles/common/udev | 2 +-
config/udev/60-net.rules | 4 ++--
.../udev/{network-hotplug-bridges => network-hotplug-master} | 0
lfs/udev | 4 ++--
4 files changed, 5 insertions(+), 5 deletions(-)
rename config/udev/{network-hotplug-bridges => network-hotplug-master} (100%)
diff --git a/config/rootfiles/common/udev b/config/rootfiles/common/udev
index 3eea43718..94da6f772 100644
--- a/config/rootfiles/common/udev
+++ b/config/rootfiles/common/udev
@@ -49,7 +49,7 @@ lib/udev/hwdb.d
lib/udev/iocost
lib/udev/mtd_probe
lib/udev/network-aqm
-lib/udev/network-hotplug-bridges
+lib/udev/network-hotplug-master
lib/udev/network-hotplug-rename
lib/udev/network-hotplug-vlan
lib/udev/network-offloading
diff --git a/config/udev/60-net.rules b/config/udev/60-net.rules
index fff7513bc..f4850b9dd 100644
--- a/config/udev/60-net.rules
+++ b/config/udev/60-net.rules
@@ -6,5 +6,5 @@ ACTION=="add", SUBSYSTEM=="net", PROGRAM="/lib/udev/network-hotplug-rename", RES
# that has just come up.
ACTION=="add", SUBSYSTEM=="net", RUN+="/lib/udev/network-hotplug-vlan"
-# Call a script that will set up zones as bridges
-ACTION=="add", SUBSYSTEM=="net", RUN+="/lib/udev/network-hotplug-bridges"
+# Call a script that will set up interfaces that have a master interface (bridges, bonding, ..)
+ACTION=="add", SUBSYSTEM=="net", RUN+="/lib/udev/network-hotplug-master"
diff --git a/config/udev/network-hotplug-bridges b/config/udev/network-hotplug-master
similarity index 100%
rename from config/udev/network-hotplug-bridges
rename to config/udev/network-hotplug-master
diff --git a/lfs/udev b/lfs/udev
index 19e0557a3..2b1be02cd 100644
--- a/lfs/udev
+++ b/lfs/udev
@@ -148,8 +148,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
/lib/udev/network-hotplug-rename
install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-vlan \
/lib/udev/network-hotplug-vlan
- install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-bridges \
- /lib/udev/network-hotplug-bridges
+ install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-master \
+ /lib/udev/network-hotplug-master
install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
/lib/udev/rules.d
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 4/6] network: Fail if no master device has been configured for slave zones
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
2025-07-29 14:42 ` [PATCH 2/6] network: Add support for bonds Michael Tremer
2025-07-29 14:42 ` [PATCH 3/6] network: Rename the bridge hotplug script Michael Tremer
@ 2025-07-29 14:42 ` Michael Tremer
2025-07-29 14:42 ` [PATCH 5/6] network: Add support for some more auxiliary zones Michael Tremer
2025-07-29 14:42 ` [PATCH 6/6] network: Ensure that we only run once at a time Michael Tremer
4 siblings, 0 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/udev/network-hotplug-master | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/config/udev/network-hotplug-master b/config/udev/network-hotplug-master
index 4fa1154c2..b61b657bb 100644
--- a/config/udev/network-hotplug-master
+++ b/config/udev/network-hotplug-master
@@ -86,6 +86,12 @@ fi
# The name of the virtual master interface
MASTER="$(get_value "${ZONE}_DEV")"
+# Fail if no master device has been configured
+if [ -z "${MASTER}" ]; then
+ logger "No ${ZONE}_DEV configured"
+ exit 1
+fi
+
# Fetch the MTU
MTU="$(get_value "${ZONE}_MTU")"
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 5/6] network: Add support for some more auxiliary zones
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
` (2 preceding siblings ...)
2025-07-29 14:42 ` [PATCH 4/6] network: Fail if no master device has been configured for slave zones Michael Tremer
@ 2025-07-29 14:42 ` Michael Tremer
2025-07-29 14:42 ` [PATCH 6/6] network: Ensure that we only run once at a time Michael Tremer
4 siblings, 0 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/udev/network-hotplug-master | 2 +-
config/udev/network-hotplug-rename | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/udev/network-hotplug-master b/config/udev/network-hotplug-master
index b61b657bb..34cec46a6 100644
--- a/config/udev/network-hotplug-master
+++ b/config/udev/network-hotplug-master
@@ -31,7 +31,7 @@ detect_zone() {
intf="${intf^^}"
local zone
- for zone in GREEN BLUE ORANGE RED; do
+ for zone in GREEN BLUE ORANGE RED INTF0 INTF1 INTF2 INTF3; do
# Try to find if INTERFACE is the *phys version of a zone
if [ "${intf}" = "${zone}" ]; then
echo "${zone}"
diff --git a/config/udev/network-hotplug-rename b/config/udev/network-hotplug-rename
index f27eecae6..b4e694ed3 100644
--- a/config/udev/network-hotplug-rename
+++ b/config/udev/network-hotplug-rename
@@ -57,7 +57,7 @@ fi
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
# Standard zones
-ZONES="RED GREEN ORANGE BLUE"
+ZONES="RED GREEN ORANGE BLUE INTF0 INTF1 INTF2 INTF3"
# Determine the address of INTERFACE
ADDRESS="$(</sys/class/net/${INTERFACE}/address)"
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 6/6] network: Ensure that we only run once at a time
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
` (3 preceding siblings ...)
2025-07-29 14:42 ` [PATCH 5/6] network: Add support for some more auxiliary zones Michael Tremer
@ 2025-07-29 14:42 ` Michael Tremer
4 siblings, 0 replies; 6+ messages in thread
From: Michael Tremer @ 2025-07-29 14:42 UTC (permalink / raw)
To: development; +Cc: Michael Tremer
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
---
config/udev/network-hotplug-master | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/config/udev/network-hotplug-master b/config/udev/network-hotplug-master
index 34cec46a6..ed9cd58c3 100644
--- a/config/udev/network-hotplug-master
+++ b/config/udev/network-hotplug-master
@@ -25,6 +25,12 @@
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+# Only run this script once at a time
+if [ -z "${LOCKED}" ]; then
+ export LOCKED=1
+ exec flock "${0}" "${0}" "$@"
+fi
+
detect_zone() {
local intf="${INTERFACE%?}"
intf="${intf%phys}"
--
2.47.2
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-07-29 14:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-29 14:42 [PATCH 1/6] linux: Don't create bond0 when bonding is being loaded Michael Tremer
2025-07-29 14:42 ` [PATCH 2/6] network: Add support for bonds Michael Tremer
2025-07-29 14:42 ` [PATCH 3/6] network: Rename the bridge hotplug script Michael Tremer
2025-07-29 14:42 ` [PATCH 4/6] network: Fail if no master device has been configured for slave zones Michael Tremer
2025-07-29 14:42 ` [PATCH 5/6] network: Add support for some more auxiliary zones Michael Tremer
2025-07-29 14:42 ` [PATCH 6/6] network: Ensure that we only run once at a time Michael Tremer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox