From d5a9dd2b5811488f3c71dc69d4a4a84f46b62dc3 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 18 Aug 2014 13:09:17 +0000 Subject: 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 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@42185 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../files/lib/functions/uci-defaults-new.sh | 302 +++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100755 package/base-files/files/lib/functions/uci-defaults-new.sh (limited to 'package/base-files/files/lib') diff --git a/package/base-files/files/lib/functions/uci-defaults-new.sh b/package/base-files/files/lib/functions/uci-defaults-new.sh new file mode 100755 index 0000000000..528835bb7f --- /dev/null +++ b/package/base-files/files/lib/functions/uci-defaults-new.sh @@ -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} +} -- cgit v1.2.3