#!/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_interface_wan() { local wan_if=$1 json_select_object network _ucidef_set_interface wan $wan_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 json_add_boolean enable $enable json_add_boolean reset $reset 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 case "$val" in [0-9]) json_add_int "$key" "$val" ;; *) json_add_string "$key" "$val" ;; esac json_select .. json_select .. } ucidef_add_switch_ports() { local name="$1"; shift local port num role dev idx json_select_object switch json_select_object "$name" json_select_array ports for port in "$@"; do case "$port" in [0-9]*@*) num="${port%%@*}" dev="${port##*@}" ;; [0-9]*:*:[0-9]*) num="${port%%:*}" idx="${port##*:}" role="${port#[0-9]*:}"; role="${role%:*}" ;; [0-9]*:*) num="${port%%:*}" role="${port##*:}" ;; esac if [ -n "$num" ] && [ -n "$dev$role" ]; then json_add_object json_add_int num "$num" [ -n "$dev" ] && json_add_string device "$dev" [ -n "$role" ] && json_add_string role "$role" [ -n "$idx" ] && json_add_int index "$idx" json_close_object fi unset num dev role idx done json_select .. 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} }