Johannes Schlatow
2010-08-09 19:36:45 UTC
This patch adds support for macvlan interfaces to uci.
* ifname pattern is ethXvY, where ethX is the physical interface, Y is arbitrary
* you can specify a mac address
* dependencies: kmod-macvlan, ip
e.g.:
$ uci show network.dmz
network.dmz=interface
network.dmz.proto=dhcp
network.dmz.ifname=eth0v2
network.dmz.macaddr=01:23:45:67:89:ab
Signed-off-by: Johannes Schlatow <***@googlemail.com>
---
Index: package/base-files/files/lib/network/config.sh
===================================================================
--- package/base-files/files/lib/network/config.sh (revision 22530)
+++ package/base-files/files/lib/network/config.sh (working copy)
@@ -66,6 +66,22 @@
return 1
}
+add_macvlan() {
+ local vif="${1%v*}"
+ local config=$2
+ + [ "$1" = "$vif" ] || ifconfig "$1" >/dev/null 2>/dev/null || [ ! -x /usr/sbin/ip ] || {
+ ifconfig "$vif" up 2>/dev/null >/dev/null || add_macvlan "$vif" "$config"
+ config_get macaddr $config macaddr
+ [ -z "$macaddr" ] || {
+ macaddr="address $macaddr "
+ }
+ $DEBUG ip link add link "$vif" name "$1" "$macaddr"type macvlan
+ return 0
+ }
+ return 1
+}
+
# add dns entries if they are not in resolv.conf yet
add_dns() {
local cfg="$1"; shift
@@ -154,6 +170,7 @@
# Setup VLAN interfaces
add_vlan "$iface" && return 1
+ add_macvlan "$iface" "$config" && return 1
ifconfig "$iface" 2>/dev/null >/dev/null || return 0
# Setup bridging
* ifname pattern is ethXvY, where ethX is the physical interface, Y is arbitrary
* you can specify a mac address
* dependencies: kmod-macvlan, ip
e.g.:
$ uci show network.dmz
network.dmz=interface
network.dmz.proto=dhcp
network.dmz.ifname=eth0v2
network.dmz.macaddr=01:23:45:67:89:ab
Signed-off-by: Johannes Schlatow <***@googlemail.com>
---
Index: package/base-files/files/lib/network/config.sh
===================================================================
--- package/base-files/files/lib/network/config.sh (revision 22530)
+++ package/base-files/files/lib/network/config.sh (working copy)
@@ -66,6 +66,22 @@
return 1
}
+add_macvlan() {
+ local vif="${1%v*}"
+ local config=$2
+ + [ "$1" = "$vif" ] || ifconfig "$1" >/dev/null 2>/dev/null || [ ! -x /usr/sbin/ip ] || {
+ ifconfig "$vif" up 2>/dev/null >/dev/null || add_macvlan "$vif" "$config"
+ config_get macaddr $config macaddr
+ [ -z "$macaddr" ] || {
+ macaddr="address $macaddr "
+ }
+ $DEBUG ip link add link "$vif" name "$1" "$macaddr"type macvlan
+ return 0
+ }
+ return 1
+}
+
# add dns entries if they are not in resolv.conf yet
add_dns() {
local cfg="$1"; shift
@@ -154,6 +170,7 @@
# Setup VLAN interfaces
add_vlan "$iface" && return 1
+ add_macvlan "$iface" "$config" && return 1
ifconfig "$iface" 2>/dev/null >/dev/null || return 0
# Setup bridging