You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/package/base-files/files/lib/functions/uci-defaults-new.sh

392 lines
6.2 KiB
Bash

#!/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_port_attr() {
local name=$1
local port=$2
local key=$3
local val=$4
local ports i num
json_select_object switch
json_select_object $name
json_get_keys ports ports
json_select_array ports
for i in $ports; do
json_select $i
json_get_var num num
if [ -n "$num" ] && [ $num -eq $port ]; then
json_select_object attr
case "$val" in
[0-9]) json_add_int "$key" "$val" ;;
*) json_add_string "$key" "$val" ;;
esac
json_select ..
fi
json_select ..
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}
}