[lxc-devel] [lxd/master] Implement bridge.hwaddr
stgraber on Github
lxc-bot at linuxcontainers.org
Wed Jul 25 16:25:01 UTC 2018
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180725/84d14a82/attachment.bin>
-------------- next part --------------
From ee7a35d09e6f21bc39ee3930d0f4464da0027381 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 25 Jul 2018 12:20:11 -0400
Subject: [PATCH 1/2] tests: Fix race in network test
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
test/suites/network.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/suites/network.sh b/test/suites/network.sh
index 76a293248..d242d9560 100644
--- a/test/suites/network.sh
+++ b/test/suites/network.sh
@@ -30,9 +30,9 @@ test_network() {
# rename network
lxc network create lxdt$$
- lxc network rename lxdt$$ newnet
+ lxc network rename lxdt$$ newnet$$
lxc network list | grep -qv lxdt$$ # the old name is gone
- lxc network delete newnet
+ lxc network delete newnet$$
# Unconfigured bridge
lxc network create lxdt$$ ipv4.address=none ipv6.address=none
From 30f1e3e8470f3d2987b96fb72b1ac2f870c6ca22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 25 Jul 2018 12:24:01 -0400
Subject: [PATCH 2/2] lxd/network: Add bridge.hwaddr config key
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #4828
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
doc/api-extensions.md | 3 +++
doc/networks.md | 1 +
lxd/networks.go | 8 ++++++++
lxd/networks_config.go | 3 ++-
scripts/bash/lxd-client | 2 +-
shared/version/api.go | 1 +
test/suites/network.sh | 2 ++
7 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 5ea7aa802..244606c29 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -554,3 +554,6 @@ cpu-profile, memory-profile and print-goroutines debug options.
## proxy\_haproxy\_protocol
Adds a proxy\_protocol key to the proxy device which controls the use of the HAProxy PROXY protocol header.
+
+## network\_hwaddr
+Adds a bridge.hwaddr key to control the MAC address of the bridge.
diff --git a/doc/networks.md b/doc/networks.md
index 2b29b7a0c..91ad0845e 100644
--- a/doc/networks.md
+++ b/doc/networks.md
@@ -23,6 +23,7 @@ Key | Type | Condition | Default
:-- | :-- | :-- | :-- | :--
bridge.driver | string | - | native | Bridge driver ("native" or "openvswitch")
bridge.external\_interfaces | string | - | - | Comma separate list of unconfigured network interfaces to include in the bridge
+bridge.hwaddr | string | - | - | MAC address for the bridge
bridge.mode | string | - | standard | Bridge operation mode ("standard" or "fan")
bridge.mtu | integer | - | 1500 | Bridge MTU (default varies if tunnel or fan setup)
dns.domain | string | - | lxd | Domain to advertise to DHCP clients and use for DNS resolution
diff --git a/lxd/networks.go b/lxd/networks.go
index 26d3e4442..3dcce09b6 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -1046,6 +1046,14 @@ func (n *network) Start() error {
return err
}
+ // Set the MAC address
+ if n.config["bridge.hwaddr"] != "" {
+ _, err = shared.RunCommand("ip", "link", "set", "dev", n.name, "address", n.config["bridge.hwaddr"])
+ if err != nil {
+ return err
+ }
+ }
+
// Bring it up
_, err = shared.RunCommand("ip", "link", "set", "dev", n.name, "up")
if err != nil {
diff --git a/lxd/networks_config.go b/lxd/networks_config.go
index 5c79a9d86..5209b526f 100644
--- a/lxd/networks_config.go
+++ b/lxd/networks_config.go
@@ -26,7 +26,8 @@ var networkConfigKeys = map[string]func(value string) error{
return nil
},
- "bridge.mtu": shared.IsInt64,
+ "bridge.hwaddr": shared.IsAny,
+ "bridge.mtu": shared.IsInt64,
"bridge.mode": func(value string) error {
return shared.IsOneOf(value, []string{"standard", "fan"})
},
diff --git a/scripts/bash/lxd-client b/scripts/bash/lxd-client
index ceed02fa2..19eb19ef9 100644
--- a/scripts/bash/lxd-client
+++ b/scripts/bash/lxd-client
@@ -93,7 +93,7 @@ _have lxc && {
user.network_mode user.user-data user.vendor-data"
networks_keys="bridge.driver bridge.external_interfaces bridge.mode \
- bridge.mtu dns.domain dns.mode fan.overlay_subnet fan.type \
+ bridge.mtu bridge.hwaddr dns.domain dns.mode fan.overlay_subnet fan.type \
fan.underlay_subnet ipv4.address ipv4.dhcp ipv4.dhcp.expiry ipv4.dhcp.gateway \
ipv4.dhcp.ranges ipv4.firewall ipv4.nat ipv4.routes ipv4.routing \
ipv6.address ipv6.dhcp ipv6.dhcp.expiry ipv6.dhcp.ranges \
diff --git a/shared/version/api.go b/shared/version/api.go
index e843cb29a..374869945 100644
--- a/shared/version/api.go
+++ b/shared/version/api.go
@@ -116,6 +116,7 @@ var APIExtensions = []string{
"unix_priv_drop",
"pprof_http",
"proxy_haproxy_protocol",
+ "network_hwaddr",
}
// APIExtensionsCount returns the number of available API extensions.
diff --git a/test/suites/network.sh b/test/suites/network.sh
index d242d9560..fe1152ab7 100644
--- a/test/suites/network.sh
+++ b/test/suites/network.sh
@@ -11,6 +11,8 @@ test_network() {
lxc network set lxdt$$ ipv4.routing false
lxc network set lxdt$$ ipv6.routing false
lxc network set lxdt$$ ipv6.dhcp.stateful true
+ lxc network set lxdt$$ bridge.hwaddr 00:11:22:33:44:55
+ [ "$(cat /sys/class/net/lxdt$$/address)" = "00:11:22:33:44:55" ]
# validate unset and patch
[ "$(lxc network get lxdt$$ ipv6.dhcp.stateful)" = "true" ]
More information about the lxc-devel
mailing list