base-files: config_generate: split macaddr with multiple ifaces
authorSungbo Eo <mans0n@gorani.run>
Mon, 11 Nov 2019 16:20:45 +0000 (01:20 +0900)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 26 Nov 2019 16:04:17 +0000 (17:04 +0100)
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 instead. 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 'lan_eth0_dev'
        option name 'eth0'
        option macaddr 'yy:yy:yy:yy:yy:01'

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

ref: https://github.com/openwrt/openwrt/pull/2542

Signed-off-by: Sungbo Eo <mans0n@gorani.run>
[always use new scheme, extend description, change commit title]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
(cherry picked from commit 298814e6be7640d89328de9e7c90d4349e30683f)

package/base-files/Makefile
package/base-files/files/bin/config_generate

index 904f4af073bbf406442d0227455b32d498dfddc3..bf7d8b0a05cc6987c134bffe6e596bcc8483a711 100644 (file)
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=194.2
+PKG_RELEASE:=194.3
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
index c8b253da5bd2ccd06c0f3f6047b196394f918e03..4bb872df2b1a9cc4183fbbb2a4407f2d37f8f25a 100755 (executable)
@@ -85,12 +85,16 @@ 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
+       if [ -n "$macaddr" ]; then
+               for name in $ifname; do
+                       uci -q batch <<-EOF
+                               delete network.$1_${name/./_}_dev
+                               set network.$1_${name/./_}_dev='device'
+                               set network.$1_${name/./_}_dev.name='$name'
+                               set network.$1_${name/./_}_dev.macaddr='$macaddr'
+                       EOF
+               done
+       fi
 
        case "$protocol" in
                static)