mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	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>
		
	
			
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
. /lib/functions.sh
 | 
						|
 | 
						|
migrate_led_sysfs() {
 | 
						|
	local cfg="$1"; shift
 | 
						|
	local tuples="$@"
 | 
						|
	local sysfs
 | 
						|
	local name
 | 
						|
 | 
						|
	config_get sysfs ${cfg} sysfs
 | 
						|
	config_get name ${cfg} name
 | 
						|
 | 
						|
	[ -z "${sysfs}" ] && return
 | 
						|
 | 
						|
	for tuple in ${tuples}; do
 | 
						|
		local old=${tuple%=*}
 | 
						|
		local new=${tuple#*=}
 | 
						|
		local new_sysfs
 | 
						|
 | 
						|
		new_sysfs=$(echo ${sysfs} | sed "s/${old}/${new}/")
 | 
						|
 | 
						|
		[ "${new_sysfs}" = "${sysfs}" ] && continue
 | 
						|
 | 
						|
		uci set system.${cfg}.sysfs="${new_sysfs}"
 | 
						|
 | 
						|
		logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}"
 | 
						|
	done;
 | 
						|
}
 | 
						|
 | 
						|
remove_devicename_led_sysfs() {
 | 
						|
	local cfg="$1"; shift
 | 
						|
	local exceptions="$@"
 | 
						|
	local sysfs
 | 
						|
	local name
 | 
						|
	local new_sysfs
 | 
						|
 | 
						|
	config_get sysfs ${cfg} sysfs
 | 
						|
	config_get name ${cfg} name
 | 
						|
 | 
						|
	# only continue if two or more colons are present
 | 
						|
	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/^[^:]*://")
 | 
						|
 | 
						|
	uci set system.${cfg}.sysfs="${new_sysfs}"
 | 
						|
 | 
						|
	logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}"
 | 
						|
}
 | 
						|
 | 
						|
migrate_leds() {
 | 
						|
	config_load system
 | 
						|
	config_foreach migrate_led_sysfs led "$@"
 | 
						|
}
 | 
						|
 | 
						|
remove_devicename_leds() {
 | 
						|
	config_load system
 | 
						|
	config_foreach remove_devicename_led_sysfs led "$@"
 | 
						|
}
 | 
						|
 | 
						|
migrations_apply() {
 | 
						|
	local realm="$1"
 | 
						|
	[ -n "$(uci changes ${realm})" ] && uci -q commit ${realm}
 | 
						|
}
 |