From: Sungbo Eo <man...@gorani.run>

netifd does not handle network.@device[x].name properly if it
contains multiple ifaces separated by spaces. Due to this, board.d
lan_mac setup does not work if multiple ifaces are set to LAN by
ucidef_set_interface_lan.

To fix this, create a device node for each member iface when
running config_generate. Those are named based on the member
ifname:

  ucidef_set_interface_lan "eth0 eth1.1"
  ucidef_set_interface_macaddr "lan" "yy:yy:yy:yy:yy:01"

will return

  config device 'eth0_dev'
        option name 'eth0'
        option macaddr 'yy:yy:yy:yy:yy:01'

  config device 'eth1_1_dev'
        option name 'eth1.1'
        option macaddr 'yy:yy:yy:yy:yy:01'

The updated node names are only used for cases where more than
one member iface is specified. The typical single-ifname case
won't be altered (lan_dev, wan_dev).

Signed-off-by: Sungbo Eo <man...@gorani.run>
[extended description, changed commit title]
Signed-off-by: Adrian Schmutzler <freif...@adrianschmutzler.de>

---

I plan to also backport this to at least 19.07 and 18.06, as it's
essentially a fix.

Note that it actually would be easier to use the new naming scheme
consistently also for single-member lan/wan. I have not done that
here as it would mean a (cosmetic) change affecting many users,
while the changes shown here would limit the new node names to those
users actually having multiple members in lan.

>From the perspective of tidyness however, it would actually be
preferable to switch to the new syntax entirely:
- It will only change for new installations/sysupgrade -n anyway
- It is more logical to extend when the user adds a member to lan
  manually later
- No duplicate setup code
- Uniform names for device nodes

Please share your views on this aspect.
---
 package/base-files/files/bin/config_generate | 27 +++++++++++++++-----
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/package/base-files/files/bin/config_generate 
b/package/base-files/files/bin/config_generate
index 3ca035ca8b..874ce289cf 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -85,12 +85,27 @@ generate_network() {
                set network.$1.proto='none'
        EOF
 
-       [ -n "$macaddr" ] && uci -q batch <<-EOF
-               delete network.$1_dev
-               set network.$1_dev='device'
-               set network.$1_dev.name='$ifname'
-               set network.$1_dev.macaddr='$macaddr'
-       EOF
+       [ -n "$macaddr" ] && case "$ifname" in
+       *\ *)
+               uci -q delete network.$1_dev
+               for name in $ifname; do
+                       uci -q batch <<-EOF
+                               delete network.${name/./_}_dev
+                               set network.${name/./_}_dev='device'
+                               set network.${name/./_}_dev.name='$name'
+                               set network.${name/./_}_dev.macaddr='$macaddr'
+                       EOF
+               done
+               ;;
+       *)
+               uci -q batch <<-EOF
+                       delete network.$1_dev
+                       set network.$1_dev='device'
+                       set network.$1_dev.name='$ifname'
+                       set network.$1_dev.macaddr='$macaddr'
+               EOF
+               ;;
+       esac
 
        case "$protocol" in
                static)
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to