+ 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 ..