diff --git a/luci-app-macvlan/files/root/etc/init.d/macvlan b/luci-app-macvlan/files/root/etc/init.d/macvlan index 8374aea89..4cebcaeef 100755 --- a/luci-app-macvlan/files/root/etc/init.d/macvlan +++ b/luci-app-macvlan/files/root/etc/init.d/macvlan @@ -34,16 +34,39 @@ _save_macaddr() { } } +_create_interface() { + local _masterifname + local _ifname=$1 + config_get _masterifname "$1" ifname + uci batch <<-EOF + set network.$_ifname=interface + set network.$_ifname.type=macvlan + set network.$_ifname.proto=static + set network.$_ifname.masterintf=$_masterifname + EOF +} + # Configuration by interface _setup_interface() { local _ifname config_get _ifname "$1" ifname - [ -z "$_ifname" ] && config_get _ifname "$1" ifname + #[ -z "$_ifname" ] && config_get _ifname "$1" ifname # do not create macvlan for vlan #case "$_ifname" in # eth*.*) return ;; #esac - + local _type + config_get _type "$1" type + + [ "$_type" = "macvlan" ] && [ "$(uci -q get macvlan.$1)" = "" ] && { + uci -q batch <<-EOF + delete network.$1 + delete network.$1_dev + commit network + EOF + return + } + [ "$(echo $1 | grep _dev)" != "" ] && { local _intfdev=$(sed 's/_dev//' $1) uci -q get "network.$_intfdev.ifname" >/dev/null || { @@ -57,9 +80,8 @@ _setup_interface() { } return } - - local _type - config_get _type "$1" type + + #_type="$(uci -q get network.$1.type) if [ "$(uci -q get macvlan.$1)" != "" ]; then _type="macvlan" fi @@ -82,7 +104,7 @@ _setup_interface() { [ -n "$_interface" ] && { logger -t "macvlan" "Remove network.$1_dev" uci -q batch <<-EOF - delete network.$1.interface + delete network.$1 set network.$1_dev.ifname=$_interface EOF } @@ -112,6 +134,8 @@ _setup_interface() { start_service() { . /lib/functions.sh + config_load macvlan + config_foreach _create_interface macvlan config_load network config_foreach _setup_interface interface config_foreach _save_macaddr interface @@ -123,5 +147,5 @@ reload_service() { } service_triggers() { - procd_add_reload_trigger network + procd_add_reload_trigger network macvlan }