base-files: fix ucidef_set_interface() protocol selection
authorJo-Philipp Wich <jo@mein.io>
Fri, 25 May 2018 05:28:28 +0000 (07:28 +0200)
committerJo-Philipp Wich <jo@mein.io>
Fri, 25 May 2018 05:48:25 +0000 (07:48 +0200)
The previous refactoring of ucidef_set_interface() removed the protocol
selection heuristic which breaks the networking defaults for the majority
of boards.

Re-add the protocol selection and rename two bad "proto" references to
the expected "protocol" value.

Fixes: 85048a9c1f ("base-files: rework _ucidef_set_interface to be more generic")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
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 ..
 }