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

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 #4202

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From 1248c68210ac614f1845e50657a9ba37258a3bff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 8 Feb 2018 20:42:57 -0500
Subject: [PATCH] network: Add ipv4.dhcp.gateway
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4202

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 config/bash/lxd-client |  2 +-
 doc/api-extensions.md  |  3 +++
 doc/networks.md        |  1 +
 lxd/networks.go        |  4 ++++
 lxd/networks_config.go | 15 ++++++++-------
 shared/version/api.go  |  1 +
 6 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/config/bash/lxd-client b/config/bash/lxd-client
index fbbefbcd7..43e058383 100644
--- a/config/bash/lxd-client
+++ b/config/bash/lxd-client
@@ -92,7 +92,7 @@ _have lxc && {
 
     networks_keys="bridge.driver bridge.external_interfaces bridge.mode \
       bridge.mtu dns.domain dns.mode fan.overlay_subnet fan.type \
-      fan.underlay_subnet ipv4.address ipv4.dhcp ipv4.dhcp.expiry \
+      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 \
       ipv6.dhcp.stateful ipv6.firewall ipv6.nat ipv6.routes ipv6.routing \
diff --git a/doc/api-extensions.md b/doc/api-extensions.md
index 1ba3db34d..ca278d160 100644
--- a/doc/api-extensions.md
+++ b/doc/api-extensions.md
@@ -395,3 +395,6 @@ getting a stream of events over websocket.
 ## proxy
 This adds a new `proxy` device type to containers, allowing forwarding
 of connections between the host and container.
+
+## network\_dhcp\_gateway
+Introduces a new ipv4.dhcp.gateway network config key to set an alternate 
gateway.
diff --git a/doc/networks.md b/doc/networks.md
index 54b01ae4f..2b29b7a0c 100644
--- a/doc/networks.md
+++ b/doc/networks.md
@@ -33,6 +33,7 @@ fan.underlay\_subnet            | string    | fan mode        
      | default ga
 ipv4.address                    | string    | standard mode         | random 
unused subnet      | IPv4 address for the bridge (CIDR notation). Use "none" to 
turn off IPv4 or "auto" to generate a new one
 ipv4.dhcp                       | boolean   | ipv4 address          | true     
                 | Whether to allocate addresses using DHCP
 ipv4.dhcp.expiry                | string    | ipv4 dhcp             | 1h       
                 | When to expire DHCP leases
+ipv4.dhcp.gateway               | string    | ipv4 dhcp             | 
ipv4.address              | Address of the gateway for the subnet
 ipv4.dhcp.ranges                | string    | ipv4 dhcp             | all 
addresses             | Comma separated list of IP ranges to use for DHCP 
(FIRST-LAST format)
 ipv4.firewall                   | boolean   | ipv4 address          | true     
                 | Whether to generate filtering firewall rules for this network
 ipv4.nat                        | boolean   | ipv4 address          | false    
                 | Whether to NAT (will default to true if unset and a random 
ipv4.address is generated)
diff --git a/lxd/networks.go b/lxd/networks.go
index 9bab7a1fe..50dcb12c8 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -811,6 +811,10 @@ func (n *network) Start() error {
                                dnsmasqCmd = append(dnsmasqCmd, 
[]string{"--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"))}...)
                        }
 
+                       if n.config["ipv4.dhcp.gateway"] != "" {
+                               dnsmasqCmd = append(dnsmasqCmd, 
fmt.Sprintf("--dhcp-option=3,%s", n.config["ipv4.dhcp.gateway"]))
+                       }
+
                        expiry := "1h"
                        if n.config["ipv4.dhcp.expiry"] != "" {
                                expiry = n.config["ipv4.dhcp.expiry"]
diff --git a/lxd/networks_config.go b/lxd/networks_config.go
index 91e15d795..5c79a9d86 100644
--- a/lxd/networks_config.go
+++ b/lxd/networks_config.go
@@ -60,13 +60,14 @@ var networkConfigKeys = map[string]func(value string) error{
 
                return networkValidAddressCIDRV4(value)
        },
-       "ipv4.firewall":    shared.IsBool,
-       "ipv4.nat":         shared.IsBool,
-       "ipv4.dhcp":        shared.IsBool,
-       "ipv4.dhcp.expiry": shared.IsAny,
-       "ipv4.dhcp.ranges": shared.IsAny,
-       "ipv4.routes":      shared.IsAny,
-       "ipv4.routing":     shared.IsBool,
+       "ipv4.firewall":     shared.IsBool,
+       "ipv4.nat":          shared.IsBool,
+       "ipv4.dhcp":         shared.IsBool,
+       "ipv4.dhcp.gateway": networkValidAddressV4,
+       "ipv4.dhcp.expiry":  shared.IsAny,
+       "ipv4.dhcp.ranges":  shared.IsAny,
+       "ipv4.routes":       shared.IsAny,
+       "ipv4.routing":      shared.IsBool,
 
        "ipv6.address": func(value string) error {
                if shared.IsOneOf(value, []string{"none", "auto"}) == nil {
diff --git a/shared/version/api.go b/shared/version/api.go
index feb31aab8..e75ed6056 100644
--- a/shared/version/api.go
+++ b/shared/version/api.go
@@ -87,4 +87,5 @@ var APIExtensions = []string{
        "maas_network",
        "devlxd_events",
        "proxy",
+       "network_dhcp_gateway",
 }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to