mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-15 01:10:29 +00:00
6c8daa6ba3
This adds support for specifying the dsl modem, atm bridge configs and setting the pppoe protocol for wan. These additions are required to port the Lantiq target to board.d. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 47750
552 lines
10 KiB
Bash
Executable File
552 lines
10 KiB
Bash
Executable File
#!/bin/ash
|
|
|
|
CFG=/etc/board.json
|
|
|
|
. /lib/functions.sh
|
|
. /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"
|
|
local proto="$3"
|
|
|
|
json_select_object "$name"
|
|
json_add_string ifname "$iface"
|
|
|
|
if ! json_is_a protocol string; then
|
|
case "$proto" in
|
|
static|dhcp|none|pppoe) : ;;
|
|
*)
|
|
case "$name" in
|
|
lan) proto="static" ;;
|
|
wan) proto="dhcp" ;;
|
|
*) proto="none" ;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
json_add_string protocol "$proto"
|
|
fi
|
|
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_board_id() {
|
|
json_select_object model
|
|
json_add_string id "$1"
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_model_name() {
|
|
json_select_object model
|
|
json_add_string name "$1"
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_interface_lan() {
|
|
json_select_object network
|
|
_ucidef_set_interface lan "$@"
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_interface_wan() {
|
|
json_select_object network
|
|
_ucidef_set_interface wan "$@"
|
|
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_port() {
|
|
# inherited: $num $device $need_tag $role $index $prev_role
|
|
# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
|
|
|
|
n_ports=$((n_ports + 1))
|
|
|
|
json_select_array ports
|
|
json_add_object
|
|
json_add_int num "$num"
|
|
[ -n "$device" ] && json_add_string device "$device"
|
|
[ -n "$need_tag" ] && json_add_boolean need_tag "$need_tag"
|
|
[ -n "$role" ] && json_add_string role "$role"
|
|
[ -n "$index" ] && json_add_int index "$index"
|
|
json_close_object
|
|
json_select ..
|
|
|
|
# record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
|
|
[ -n "$device" ] && {
|
|
export "cpu$n_cpu=$n_ports"
|
|
n_cpu=$((n_cpu + 1))
|
|
}
|
|
|
|
# create/append object to role list
|
|
[ -n "$role" ] && {
|
|
json_select_array roles
|
|
|
|
if [ "$role" != "$prev_role" ]; then
|
|
json_add_object
|
|
json_add_string role "$role"
|
|
json_add_string ports "$num"
|
|
json_close_object
|
|
|
|
prev_role="$role"
|
|
n_vlan=$((n_vlan + 1))
|
|
else
|
|
json_select_object "$n_vlan"
|
|
json_get_var port ports
|
|
json_add_string ports "$port $num"
|
|
json_select ..
|
|
fi
|
|
|
|
json_select ..
|
|
}
|
|
}
|
|
|
|
_ucidef_finish_switch_roles() {
|
|
# inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
|
|
local index role roles num device need_tag port ports
|
|
|
|
json_select switch
|
|
json_select "$name"
|
|
json_get_keys roles roles
|
|
json_select ..
|
|
json_select ..
|
|
|
|
for index in $roles; do
|
|
eval "port=\$cpu$(((index - 1) % n_cpu))"
|
|
|
|
json_select switch
|
|
json_select "$name"
|
|
json_select ports
|
|
json_select "$port"
|
|
json_get_vars num device need_tag
|
|
json_select ..
|
|
json_select ..
|
|
|
|
if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then
|
|
num="${num}t"
|
|
device="${device}.${index}"
|
|
fi
|
|
|
|
json_select roles
|
|
json_select "$index"
|
|
json_get_vars role ports
|
|
json_add_string ports "$ports $num"
|
|
json_add_string device "$device"
|
|
json_select ..
|
|
json_select ..
|
|
json_select ..
|
|
json_select ..
|
|
|
|
json_select_object network
|
|
local devices
|
|
|
|
json_select_object "$role"
|
|
# attach previous interfaces (for multi-switch devices)
|
|
json_get_var devices ifname
|
|
if ! list_contains devices "$device"; then
|
|
devices="${devices:+$devices }$device"
|
|
fi
|
|
json_select ..
|
|
|
|
_ucidef_set_interface "$role" "$devices"
|
|
json_select ..
|
|
done
|
|
}
|
|
|
|
ucidef_add_switch() {
|
|
local name="$1"; shift
|
|
local port num role device index need_tag prev_role
|
|
local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
|
|
local n_cpu=0 n_vlan=0 n_ports=0
|
|
|
|
json_select_object switch
|
|
json_select_object "$name"
|
|
json_add_boolean enable 1
|
|
json_add_boolean reset 1
|
|
|
|
for port in "$@"; do
|
|
case "$port" in
|
|
[0-9]*@*)
|
|
num="${port%%@*}"
|
|
device="${port##*@}"
|
|
need_tag=0
|
|
[ "${num%t}" != "$num" ] && {
|
|
num="${num%t}"
|
|
need_tag=1
|
|
}
|
|
;;
|
|
[0-9]*:*:[0-9]*)
|
|
num="${port%%:*}"
|
|
index="${port##*:}"
|
|
role="${port#[0-9]*:}"; role="${role%:*}"
|
|
;;
|
|
[0-9]*:*)
|
|
num="${port%%:*}"
|
|
role="${port##*:}"
|
|
;;
|
|
esac
|
|
|
|
if [ -n "$num" ] && [ -n "$device$role" ]; then
|
|
_ucidef_add_switch_port
|
|
fi
|
|
|
|
unset num device role index need_tag
|
|
done
|
|
json_select ..
|
|
json_select ..
|
|
|
|
_ucidef_finish_switch_roles
|
|
}
|
|
|
|
ucidef_add_switch_attr() {
|
|
local name="$1"
|
|
local key="$2"
|
|
local val="$3"
|
|
|
|
json_select_object switch
|
|
json_select_object "$name"
|
|
|
|
case "$val" in
|
|
true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
|
|
[0-9]) json_add_int "$key" "$val" ;;
|
|
*) json_add_string "$key" "$val" ;;
|
|
esac
|
|
|
|
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
|
|
true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
|
|
[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_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_add_atm_bridge() {
|
|
local vpi="$1"
|
|
local vci="$2"
|
|
local encaps="$3"
|
|
local payload="$4"
|
|
|
|
json_select_object dsl
|
|
json_select_object atmbridge
|
|
json_add_int vpi "$vpi"
|
|
json_add_int vci "$vci"
|
|
json_add_string encaps "$encaps"
|
|
json_add_string payload "$payload"
|
|
json_select ..
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_add_adsl_modem() {
|
|
local annex="$1"
|
|
local firmware="$2"
|
|
|
|
json_select_object dsl
|
|
json_select_object modem
|
|
json_add_string type "adsl"
|
|
json_add_string annex "$annex"
|
|
json_add_string firmware "$firmware"
|
|
json_select ..
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_add_vdsl_modem() {
|
|
local annex="$1"
|
|
local firmware="$2"
|
|
local tone="$3"
|
|
local xfer_mode="$4"
|
|
|
|
json_select_object dsl
|
|
json_select_object modem
|
|
json_add_string type "vdsl"
|
|
json_add_string annex "$annex"
|
|
json_add_string firmware "$firmware"
|
|
json_add_string tone "$tone"
|
|
json_add_string xfer_mode "$xfer_mode"
|
|
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_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_gpio() {
|
|
local cfg="led_$1"
|
|
local name="$2"
|
|
local sysfs="$3"
|
|
local gpio="$4"
|
|
local inverted="$5"
|
|
|
|
json_select_object led
|
|
|
|
json_select_object "$1"
|
|
json_add_string type gpio
|
|
json_add_string name "$name"
|
|
json_add_string sysfs "$sysfs"
|
|
json_add_string trigger "$trigger"
|
|
json_add_int gpio "$gpio"
|
|
json_add_boolean inverted "$inverted"
|
|
json_select ..
|
|
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_led_ide() {
|
|
local cfg="led_$1"
|
|
local name="$2"
|
|
local sysfs="$3"
|
|
|
|
json_select_object led
|
|
|
|
json_select_object "$1"
|
|
json_add_string name "$name"
|
|
json_add_string sysfs "$sysfs"
|
|
json_add_string trigger ide-disk
|
|
json_select ..
|
|
|
|
json_select ..
|
|
}
|
|
|
|
ucidef_set_led_timer() {
|
|
local cfg="led_$1"
|
|
local name="$2"
|
|
local sysfs="$3"
|
|
local delayon="$4"
|
|
local delayoff="$5"
|
|
|
|
json_select_object led
|
|
|
|
json_select_object "$1"
|
|
json_add_string type timer
|
|
json_add_string name "$name"
|
|
json_add_string sysfs "$sysfs"
|
|
json_add_int delayon "$delayon"
|
|
json_add_int delayoff "$delayoff"
|
|
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 "$1"
|
|
json_add_string type rssi
|
|
json_add_string name "$name"
|
|
json_add_string iface "$iface"
|
|
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 ..
|
|
}
|
|
|
|
ucidef_set_rssimon() {
|
|
local dev="$1"
|
|
local refresh="$2"
|
|
local threshold="$3"
|
|
|
|
json_select_object rssimon
|
|
|
|
json_select_object "$dev"
|
|
[ -n "$refresh" ] && json_add_int refresh "$refresh"
|
|
[ -n "$threshold" ] && json_add_int 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}
|
|
}
|