The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6203

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Closes #6152

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From 56dfd0cd04039ed4d629bf52aaa478a07cdecf97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 14 Sep 2019 23:36:22 +0200
Subject: [PATCH] lxd/networks: Allows limited ipv4 config with fan
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #6152

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/networks.go        | 22 ++++++++++++++++++----
 lxd/networks_config.go |  2 +-
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/lxd/networks.go b/lxd/networks.go
index cad3d9d1c5..1e7607231d 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -1656,12 +1656,17 @@ func (n *network) Start() error {
                }
 
                // Update the dnsmasq config
+               expiry := "1h"
+               if n.config["ipv4.dhcp.expiry"] != "" {
+                       expiry = n.config["ipv4.dhcp.expiry"]
+               }
+
                dnsmasqCmd = append(dnsmasqCmd, []string{
                        fmt.Sprintf("--listen-address=%s", addr[0]),
                        "--dhcp-no-override", "--dhcp-authoritative",
                        fmt.Sprintf("--dhcp-leasefile=%s", 
shared.VarPath("networks", n.name, "dnsmasq.leases")),
                        fmt.Sprintf("--dhcp-hostsfile=%s", 
shared.VarPath("networks", n.name, "dnsmasq.hosts")),
-                       "--dhcp-range", fmt.Sprintf("%s,%s", 
networkGetIP(hostSubnet, 2).String(), networkGetIP(hostSubnet, 
-2).String())}...)
+                       "--dhcp-range", fmt.Sprintf("%s,%s,%s", 
networkGetIP(hostSubnet, 2).String(), networkGetIP(hostSubnet, -2).String(), 
expiry)}...)
 
                // Setup the tunnel
                if n.config["fan.type"] == "ipip" {
@@ -1707,9 +1712,18 @@ func (n *network) Start() error {
                }
 
                // Configure NAT
-               err = iptables.NetworkPrepend("ipv4", n.name, "nat", 
"POSTROUTING", "-s", overlaySubnet.String(), "!", "-d", overlaySubnet.String(), 
"-j", "MASQUERADE")
-               if err != nil {
-                       return err
+               if n.config["ipv4.nat"] == "" || 
shared.IsTrue(n.config["ipv4.nat"]) {
+                       if n.config["ipv4.nat.order"] == "after" {
+                               err = iptables.NetworkAppend("ipv4", n.name, 
"nat", "POSTROUTING", "-s", overlaySubnet.String(), "!", "-d", 
overlaySubnet.String(), "-j", "MASQUERADE")
+                               if err != nil {
+                                       return err
+                               }
+                       } else {
+                               err = iptables.NetworkPrepend("ipv4", n.name, 
"nat", "POSTROUTING", "-s", overlaySubnet.String(), "!", "-d", 
overlaySubnet.String(), "-j", "MASQUERADE")
+                               if err != nil {
+                                       return err
+                               }
+                       }
                }
 
                // Setup clustered DNS
diff --git a/lxd/networks_config.go b/lxd/networks_config.go
index 0babb960e9..a4c95dc135 100644
--- a/lxd/networks_config.go
+++ b/lxd/networks_config.go
@@ -145,7 +145,7 @@ func networkValidateConfig(name string, config 
map[string]string) error {
                }
 
                // Bridge mode checks
-               if bridgeMode == "fan" && strings.HasPrefix(key, "ipv4.") && v 
!= "" {
+               if bridgeMode == "fan" && strings.HasPrefix(key, "ipv4.") && 
!shared.StringInSlice(key, []string{"ipv4.dhcp.expiry", "ipv4.firewall", 
"ipv4.nat", "ipv4.nat.order"}) && v != "" {
                        return fmt.Errorf("IPv4 configuration may not be set 
when in 'fan' mode")
                }
 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to