[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