base-files: allow exceptions when removing devicename from LEDs

Without the model-based devicename for LEDs, there are still cases
where a third component is required, typically when it refers to
internal "devices" like phys etc. An example are the following two
found on ramips:

  - rt2800soc-phy0::radio
  - rt2800pci-phy0::radio

So far, the rt2800*-phy: prefixes would be removed by the devicename
removal ("migration") script, and the configuration for these LEDs
would be broken.

To address this, this patch allows to add arguments to a call of
remove_devicename_leds, which will be compared against the first
part of the LED names/labels, and then be ignored by the routine,
and thus not removed:

  remove_devicename_leds "rt2800soc-phy0" "rt2800pci-phy0"

This mechanism is supposed to be used when a "devicename" applies
to several devices. If only a single device is affected, it might
be more effective to use a case statement and exclude the device
from migration by that entirely.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
master
Adrian Schmutzler 2020-10-02 14:23:59 +02:00
parent 257110c08a
commit 9b4eab023c
2 changed files with 10 additions and 3 deletions

View File

@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files PKG_NAME:=base-files
PKG_RELEASE:=231 PKG_RELEASE:=232
PKG_FLAGS:=nonshared PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/

View File

@ -29,7 +29,8 @@ migrate_led_sysfs() {
} }
remove_devicename_led_sysfs() { remove_devicename_led_sysfs() {
local cfg="$1" local cfg="$1"; shift
local exceptions="$@"
local sysfs local sysfs
local name local name
local new_sysfs local new_sysfs
@ -37,8 +38,14 @@ remove_devicename_led_sysfs() {
config_get sysfs ${cfg} sysfs config_get sysfs ${cfg} sysfs
config_get name ${cfg} name config_get name ${cfg} name
# only continue if two or more colons are present
echo "${sysfs}" | grep -q ":.*:" || return echo "${sysfs}" | grep -q ":.*:" || return
for exception in ${exceptions}; do
# no change if exceptions provided as argument are found for devicename
echo "${sysfs}" | grep -q "^${exception}:" && return
done
new_sysfs=$(echo ${sysfs} | sed "s/^[^:]*://") new_sysfs=$(echo ${sysfs} | sed "s/^[^:]*://")
uci set system.${cfg}.sysfs="${new_sysfs}" uci set system.${cfg}.sysfs="${new_sysfs}"
@ -53,7 +60,7 @@ migrate_leds() {
remove_devicename_leds() { remove_devicename_leds() {
config_load system config_load system
config_foreach remove_devicename_led_sysfs led config_foreach remove_devicename_led_sysfs led "$@"
} }
migrations_apply() { migrations_apply() {