+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
+ want_untag=0
+ [ "${num%t}" != "$num" ] && {
+ num="${num%t}"
+ need_tag=1
+ }
+ [ "${num%u}" != "$num" ] && {
+ num="${num%u}"
+ want_untag=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 want_untag
+ 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 tone="$2"
+ local xfer_mode="$3"
+
+ json_select_object dsl
+ json_select_object modem
+ json_add_string type "vdsl"
+ json_add_string annex "$annex"
+ json_add_string tone "$tone"
+ json_add_string xfer_mode "$xfer_mode"
+ json_select ..
+ json_select ..
+}
+
+ucidef_set_led_netdev() {