base-files: fix ucidef_set_interface() protocol selection
[openwrt/staging/stintel.git] / package / base-files / files / lib / functions / uci-defaults.sh
index 8065af24a520cd55cb72f1750a12098f5c3a5c10..7fa328ac20aaf82fb92a9fde131c6c70c681e92c 100755 (executable)
@@ -28,24 +28,30 @@ json_select_object() {
 }
 
 ucidef_set_interface() {
-       local network=$1
+       local network=$1; shift
 
        [ -z "$network" ] && return
 
        json_select_object network
        json_select_object "$network"
-       shift
 
        while [ -n "$1" ]; do
-               local opt="$1"
-               local val="$2"
-               shift; shift;
+               local opt=$1; shift
+               local val=$1; shift
 
                [ -n "$opt" -a -n "$val" ] || break
 
                json_add_string "$opt" "$val"
        done
 
+       if ! json_is_a protocol string; then
+               case "$network" in
+                       lan) json_add_string protocol static ;;
+                       wan) json_add_string protocol dhcp ;;
+                       *) json_add_string protocol none ;;
+               esac
+       fi
+
        json_select ..
        json_select ..
 }