base-files: add a hardware detection layer
this allows targets to use the new uci-default helper which will generate a file called /etc/board.json. a tool called /bin/config_generate can then be used to generate the default uci settings. Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 42185
This commit is contained in:
		
							
								
								
									
										302
									
								
								package/base-files/files/lib/functions/uci-defaults-new.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										302
									
								
								package/base-files/files/lib/functions/uci-defaults-new.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| #!/bin/ash | ||||
|  | ||||
| CFG=/etc/board.json | ||||
|  | ||||
| . /usr/share/libubox/jshn.sh | ||||
|  | ||||
| json_select_array() { | ||||
| 	local _json_no_warning=1 | ||||
|  | ||||
| 	json_select "$1" | ||||
| 	[ $? = 0 ] && return | ||||
|  | ||||
| 	json_add_array $1 | ||||
| 	json_close_array | ||||
|  | ||||
|         json_select "$1" | ||||
| } | ||||
|  | ||||
| json_select_object() { | ||||
| 	local _json_no_warning=1 | ||||
|  | ||||
| 	json_select "$1" | ||||
| 	[ $? = 0 ] && return | ||||
|  | ||||
| 	json_add_object $1 | ||||
| 	json_close_object | ||||
|  | ||||
|         json_select "$1" | ||||
| } | ||||
|  | ||||
| _ucidef_set_interface() { | ||||
| 	local name=$1 | ||||
| 	local iface=$2 | ||||
|  | ||||
| 	json_select_object $name | ||||
| 	json_add_string ifname "${iface%%.*}" | ||||
| 	[ "$iface" == "${iface%%.*}" ] || json_add_boolean create_vlan 1  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_interface_loopback() | ||||
| { | ||||
| 	# stub | ||||
| 	local a=$1 | ||||
| } | ||||
|  | ||||
| ucidef_set_interface_lan() { | ||||
| 	local lan_if=$1 | ||||
|  | ||||
| 	json_select_object network | ||||
| 	_ucidef_set_interface lan $lan_if | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_interfaces_lan_wan() { | ||||
| 	local lan_if=$1 | ||||
| 	local wan_if=$2 | ||||
|  | ||||
| 	json_select_object network | ||||
| 	_ucidef_set_interface lan $lan_if | ||||
| 	_ucidef_set_interface wan $wan_if | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_add_switch() { | ||||
| 	local name=$1 | ||||
| 	local reset=$2 | ||||
| 	local enable=$3 | ||||
|  | ||||
| 	json_select_object switch | ||||
|  | ||||
|         json_select_object $name | ||||
| 	[ "$enable" -eq 1 ] && json_add_boolean enable 1 | ||||
| 	[ "$reset" -eq 1 ] && json_add_boolean reset 1 | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_add_switch_attr() { | ||||
| 	local name=$1 | ||||
| 	local key=$2 | ||||
| 	local val=$3 | ||||
|  | ||||
| 	json_select_object switch | ||||
|  | ||||
|         json_select_object $name | ||||
| 	json_add_string $key $val | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_add_switch_vlan() { | ||||
| 	local name=$1 | ||||
| 	local vlan=$2 | ||||
| 	local ports=$3 | ||||
| 	local cpu_port='' | ||||
|  | ||||
| 	case $vlan in | ||||
| 	1)	vlan=lan;; | ||||
| 	2)	vlan=wan;; | ||||
| 	*)	vlan=vlan$vlan;; | ||||
| 	esac | ||||
|  | ||||
| 	json_select_object switch | ||||
| 	json_select_object $name | ||||
| 	json_select_object vlans | ||||
|  | ||||
| 	json_add_array $vlan | ||||
| 	for p in $ports; do | ||||
| 		if [ ${p%t} != $p ]; then | ||||
| 			cpu_port=$p | ||||
| 		else | ||||
| 			json_add_int "" $p | ||||
| 		fi | ||||
| 	done | ||||
| 	json_close_array | ||||
|  | ||||
| 	json_select .. | ||||
| 	[ -n "$cpu_port" ] && json_add_int cpu_port $cpu_port | ||||
| 	json_select .. | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_interface_macaddr() { | ||||
| 	local network=$1 | ||||
| 	local macaddr=$2 | ||||
|  | ||||
| 	json_select_object network | ||||
|  | ||||
| 	json_select $network | ||||
| 	[ $? -eq 0 ] || { | ||||
| 		json_select .. | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	json_add_string macaddr $macaddr | ||||
| 	json_select .. | ||||
| 	 | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_netdev() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local dev=$4 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string type netdev | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string device $dev | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_interface() { | ||||
| 	local name=$1 | ||||
| 	local sysfs=$2 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string type interface | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string interface $name | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_usbdev() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local dev=$4 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name	 | ||||
| 	json_add_string type usb | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string device $dev | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_wlan() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local trigger=$4 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string type trigger | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string trigger $trigger | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_switch() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local trigger=$4 | ||||
| 	local port_mask=$5 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string type switch | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string trigger $trigger | ||||
| 	json_add_string port_mask $port_mask | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_default() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local default=$4 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string default $default | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_led_rssi() { | ||||
| 	local cfg="led_$1" | ||||
| 	local name=$2 | ||||
| 	local sysfs=$3 | ||||
| 	local iface=$4 | ||||
| 	local minq=$5 | ||||
| 	local maxq=$6 | ||||
| 	local offset=$7 | ||||
| 	local factor=$8 | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object rssi | ||||
| 	json_select_object $1 | ||||
| 	json_add_string name $name | ||||
| 	json_add_string sysfs $sysfs | ||||
| 	json_add_string minq $minq | ||||
| 	json_add_string maxq $maxq | ||||
| 	json_add_string offset $offset | ||||
| 	json_add_string factor $factor | ||||
| 	json_select .. | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| } | ||||
|  | ||||
| ucidef_set_rssimon() { | ||||
| 	local dev="$1" | ||||
| 	local refresh="$2" | ||||
| 	local threshold="$3" | ||||
|  | ||||
| 	json_select_object led | ||||
| 	 | ||||
| 	json_select_object rssi | ||||
| 	json_add_string type rssi | ||||
| 	json_add_string dev $dev | ||||
| 	json_add_string threshold $threshold | ||||
| 	json_select .. | ||||
|  | ||||
| 	json_select .. | ||||
| 	 | ||||
| } | ||||
|  | ||||
| board_config_update() { | ||||
| 	json_init | ||||
| 	[ -f ${CFG} ] && json_load "$(cat ${CFG})" | ||||
| } | ||||
|  | ||||
| board_config_flush() { | ||||
| 	json_dump -i > /tmp/.board.json | ||||
| 	mv /tmp/.board.json ${CFG} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin