[lxc-devel] [lxd/master] Network: Small miscellaneous networking tweaks
tomponline on Github
lxc-bot at linuxcontainers.org
Wed Aug 5 15:02:29 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 399 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200805/4a04430c/attachment.bin>
-------------- next part --------------
From 20f252e907a7efec64a87fd4276c7860c2d0be4c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Tue, 4 Aug 2020 12:26:06 +0100
Subject: [PATCH 1/6] doc/networks: Fixes typo in bridge docs
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
doc/networks.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/networks.md b/doc/networks.md
index 23d4ea2770..e33e7b5ab4 100644
--- a/doc/networks.md
+++ b/doc/networks.md
@@ -68,7 +68,7 @@ bridge.hwaddr | string | - | -
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
-dns.search | string | - | - | Full comma eparate domain search list, defaulting to dns.domain
+dns.search | string | - | - | Full comma separated domain search list, defaulting to dns.domain
dns.mode | string | - | managed | DNS registration mode ("none" for no DNS record, "managed" for LXD generated static records or "dynamic" for client generated records)
fan.overlay\_subnet | string | fan mode | 240.0.0.0/8 | Subnet to use as the overlay for the FAN (CIDR notation)
fan.type | string | fan mode | vxlan | The tunneling type for the FAN ("vxlan" or "ipip")
From 3263e271e165959f2fc359664d0c9308cc563128 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Tue, 4 Aug 2020 16:11:15 +0100
Subject: [PATCH 2/6] lxd/cluster/config: Fix import ordering of external
package
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/cluster/config.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/cluster/config.go b/lxd/cluster/config.go
index 479f28836e..05e7969e14 100644
--- a/lxd/cluster/config.go
+++ b/lxd/cluster/config.go
@@ -10,11 +10,11 @@ import (
"time"
"github.com/kballard/go-shellquote"
+ "github.com/pkg/errors"
"golang.org/x/crypto/scrypt"
"github.com/lxc/lxd/lxd/config"
"github.com/lxc/lxd/lxd/db"
- "github.com/pkg/errors"
)
// Config holds cluster-wide configuration values.
From 7a9c38d637434badaee4b986afbbeecc4e876f4c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Wed, 5 Aug 2020 15:53:13 +0100
Subject: [PATCH 3/6] lxd/network/openvswitch: Name functions consistently
using ObjectAction format
- Also add mayExist argument.
- Use more efficient detection of missing objects.
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/network/openvswitch/ovs.go | 50 ++++++++++++++++++++--------------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/lxd/network/openvswitch/ovs.go b/lxd/network/openvswitch/ovs.go
index cd385045b8..306629dad1 100644
--- a/lxd/network/openvswitch/ovs.go
+++ b/lxd/network/openvswitch/ovs.go
@@ -45,8 +45,16 @@ func (o *OVS) BridgeExists(bridgeName string) (bool, error) {
}
// BridgeAdd adds an OVS bridge.
-func (o *OVS) BridgeAdd(bridgeName string) error {
- _, err := shared.RunCommand("ovs-vsctl", "add-br", bridgeName)
+func (o *OVS) BridgeAdd(bridgeName string, mayExist bool) error {
+ args := []string{}
+
+ if mayExist {
+ args = append(args, "--may-exist")
+ }
+
+ args = append(args, "add-br", bridgeName)
+
+ _, err := shared.RunCommand("ovs-vsctl", args...)
if err != nil {
return err
}
@@ -64,36 +72,36 @@ func (o *OVS) BridgeDelete(bridgeName string) error {
return nil
}
-// BridgeAddPort adds a port to the bridge (if already attached does nothing).
-func (o *OVS) BridgeAddPort(bridgeName string, portName string) error {
- // Check if interface is already connected to a bridge, if not, connect it to the specified bridge.
- _, err := shared.RunCommand("ovs-vsctl", "port-to-br", portName)
+// BridgePortAdd adds a port to the bridge (if already attached does nothing).
+func (o *OVS) BridgePortAdd(bridgeName string, portName string, mayExist bool) error {
+ args := []string{}
+
+ if mayExist {
+ args = append(args, "--may-exist")
+ }
+
+ args = append(args, "add-port", bridgeName, portName)
+
+ _, err := shared.RunCommand("ovs-vsctl", args...)
if err != nil {
- _, err := shared.RunCommand("ovs-vsctl", "add-port", bridgeName, portName)
- if err != nil {
- return err
- }
+ return err
}
return nil
}
-// BridgeDeletePort deletes a port from the bridge (if already deteached does nothing).
-func (o *OVS) BridgeDeletePort(bridgeName string, portName string) error {
- // Check if interface is connected to a bridge, if so, then remove it from the bridge.
- _, err := shared.RunCommand("ovs-vsctl", "port-to-br", portName)
- if err == nil {
- _, err := shared.RunCommand("ovs-vsctl", "del-port", bridgeName, portName)
- if err != nil {
- return err
- }
+// BridgePortDelete deletes a port from the bridge (if already detached does nothing).
+func (o *OVS) BridgePortDelete(bridgeName string, portName string) error {
+ _, err := shared.RunCommand("ovs-vsctl", "--if-exists", "del-port", bridgeName, portName)
+ if err != nil {
+ return err
}
return nil
}
-// PortSet sets port options.
-func (o *OVS) PortSet(portName string, options ...string) error {
+// BridgePortSet sets port options.
+func (o *OVS) BridgePortSet(portName string, options ...string) error {
_, err := shared.RunCommand("ovs-vsctl", append([]string{"set", "port", portName}, options...)...)
if err != nil {
return err
From 4aef987962f04cad9429743f19c5a0bd2ce36a73 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Wed, 5 Aug 2020 15:54:57 +0100
Subject: [PATCH 4/6] lxd/network/driver/bridge: OVS function naming usage
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/network/driver_bridge.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/network/driver_bridge.go b/lxd/network/driver_bridge.go
index d705c4b3d4..82943e95f7 100644
--- a/lxd/network/driver_bridge.go
+++ b/lxd/network/driver_bridge.go
@@ -436,7 +436,7 @@ func (n *bridge) setup(oldConfig map[string]string) error {
return fmt.Errorf("Open vSwitch isn't installed on this system")
}
- err := ovs.BridgeAdd(n.name)
+ err := ovs.BridgeAdd(n.name, false)
if err != nil {
return err
}
From 7697eec7df583467ad1112b37cf577254e2544b6 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Wed, 5 Aug 2020 15:55:17 +0100
Subject: [PATCH 5/6] lxd/network/network/utils: OVS function naming usage
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/network/network_utils.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lxd/network/network_utils.go b/lxd/network/network_utils.go
index 65693a2345..cd221009f6 100644
--- a/lxd/network/network_utils.go
+++ b/lxd/network/network_utils.go
@@ -133,7 +133,7 @@ func AttachInterface(bridgeName string, devName string) error {
}
} else {
ovs := openvswitch.NewOVS()
- err := ovs.BridgeAddPort(bridgeName, devName)
+ err := ovs.BridgePortAdd(bridgeName, devName, true)
if err != nil {
return err
}
@@ -151,7 +151,7 @@ func DetachInterface(bridgeName string, devName string) error {
}
} else {
ovs := openvswitch.NewOVS()
- err := ovs.BridgeDeletePort(bridgeName, devName)
+ err := ovs.BridgePortDelete(bridgeName, devName)
if err != nil {
return err
}
From 596e8ad5a3dd75378cfb9ec76ad461eb4a06bcfe Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Wed, 5 Aug 2020 15:54:38 +0100
Subject: [PATCH 6/6] lxd/device/nic/bridged: OVS function naming usage
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/device/nic_bridged.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lxd/device/nic_bridged.go b/lxd/device/nic_bridged.go
index 2124c1202f..b30ba66d91 100644
--- a/lxd/device/nic_bridged.go
+++ b/lxd/device/nic_bridged.go
@@ -1045,7 +1045,7 @@ func (d *nicBridged) setupOVSBridgePortVLANs(hostName string) error {
// Order is important here, as vlan_mode is set to "access", assuming that vlan.tagged is not used.
// If vlan.tagged is specified, then we expect it to also change the vlan_mode as needed.
if d.config["vlan"] != "none" {
- err := ovs.PortSet(hostName, "vlan_mode=access", fmt.Sprintf("tag=%s", d.config["vlan"]))
+ err := ovs.BridgePortSet(hostName, "vlan_mode=access", fmt.Sprintf("tag=%s", d.config["vlan"]))
if err != nil {
return err
}
@@ -1071,7 +1071,7 @@ func (d *nicBridged) setupOVSBridgePortVLANs(hostName string) error {
// Also set the vlan_mode as needed from above.
// Must come after the PortSet command used for setting "vlan" mode above so that the correct
// vlan_mode is retained.
- err := ovs.PortSet(hostName, fmt.Sprintf("vlan_mode=%s", vlanMode), fmt.Sprintf("trunks=%s", strings.Join(vlanIDs, ",")))
+ err := ovs.BridgePortSet(hostName, fmt.Sprintf("vlan_mode=%s", vlanMode), fmt.Sprintf("trunks=%s", strings.Join(vlanIDs, ",")))
if err != nil {
return err
}
More information about the lxc-devel
mailing list