aboutsummaryrefslogtreecommitdiffstats
path: root/package/base-files/files/lib/functions
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2014-08-18 13:09:17 +0000
committerJohn Crispin <john@openwrt.org>2014-08-18 13:09:17 +0000
commit562d9f958290acd4323b24fbecfec43514b392e9 (patch)
treec1f25b964ce0560d7aa4842fa4de4f560ad374f5 /package/base-files/files/lib/functions
parent2c6768219221954c731b14f43f57840a96002a03 (diff)
downloadupstream-562d9f958290acd4323b24fbecfec43514b392e9.tar.gz
upstream-562d9f958290acd4323b24fbecfec43514b392e9.tar.bz2
upstream-562d9f958290acd4323b24fbecfec43514b392e9.zip
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
Diffstat (limited to 'package/base-files/files/lib/functions')
-rwxr-xr-xpackage/base-files/files/lib/functions/uci-defaults-new.sh302
1 files changed, 302 insertions, 0 deletions
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}
+}