Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
Aidan Hobson Sayers authored on 2015/12/10 23:02:50... | ... |
@@ -50,6 +50,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error { |
50 | 50 |
cmd.Var(flIpamOpt, []string{"-ipam-opt"}, "set IPAM driver specific options") |
51 | 51 |
|
52 | 52 |
flInternal := cmd.Bool([]string{"-internal"}, false, "restricts external access to the network") |
53 |
+ flIPv6 := cmd.Bool([]string{"-ipv6"}, false, "enables IPv6 on the network") |
|
53 | 54 |
|
54 | 55 |
cmd.Require(flag.Exact, 1) |
55 | 56 |
err := cmd.ParseFlags(args, true) |
... | ... |
@@ -77,6 +78,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error { |
77 | 77 |
Options: flOpts.GetAll(), |
78 | 78 |
CheckDuplicate: true, |
79 | 79 |
Internal: *flInternal, |
80 |
+ EnableIPv6: *flIPv6, |
|
80 | 81 |
} |
81 | 82 |
|
82 | 83 |
resp, err := cli.client.NetworkCreate(nc) |
... | ... |
@@ -14,7 +14,7 @@ type Backend interface { |
14 | 14 |
GetNetworkByName(idName string) (libnetwork.Network, error) |
15 | 15 |
GetNetworksByID(partialID string) []libnetwork.Network |
16 | 16 |
GetAllNetworks() []libnetwork.Network |
17 |
- CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error) |
|
17 |
+ CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error) |
|
18 | 18 |
ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error |
19 | 19 |
DisconnectContainerFromNetwork(containerName string, network libnetwork.Network, force bool) error |
20 | 20 |
DeleteNetwork(name string) error |
... | ... |
@@ -91,7 +91,7 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr |
91 | 91 |
warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID()) |
92 | 92 |
} |
93 | 93 |
|
94 |
- nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal) |
|
94 |
+ nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options, create.Internal, create.EnableIPv6) |
|
95 | 95 |
if err != nil { |
96 | 96 |
return err |
97 | 97 |
} |
... | ... |
@@ -160,6 +160,8 @@ func buildNetworkResource(nw libnetwork.Network) *types.NetworkResource { |
160 | 160 |
r.ID = nw.ID() |
161 | 161 |
r.Scope = nw.Info().Scope() |
162 | 162 |
r.Driver = nw.Type() |
163 |
+ r.EnableIPv6 = nw.Info().IPv6Enabled() |
|
164 |
+ r.Internal = nw.Info().Internal() |
|
163 | 165 |
r.Options = nw.Info().DriverOptions() |
164 | 166 |
r.Containers = make(map[string]types.EndpointResource) |
165 | 167 |
buildIpamResources(r, nw) |
... | ... |
@@ -694,10 +694,8 @@ func initBridgeDriver(controller libnetwork.NetworkController, config *Config) e |
694 | 694 |
} |
695 | 695 |
// Initialize default network on "bridge" with the same name |
696 | 696 |
_, err = controller.NewNetwork("bridge", "bridge", |
697 |
- libnetwork.NetworkOptionGeneric(options.Generic{ |
|
698 |
- netlabel.GenericData: netOption, |
|
699 |
- netlabel.EnableIPv6: config.bridgeConfig.EnableIPv6, |
|
700 |
- }), |
|
697 |
+ libnetwork.NetworkOptionEnableIPv6(config.bridgeConfig.EnableIPv6), |
|
698 |
+ libnetwork.NetworkOptionDriverOpts(netOption), |
|
701 | 699 |
libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil), |
702 | 700 |
libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc)) |
703 | 701 |
if err != nil { |
... | ... |
@@ -90,7 +90,7 @@ func (daemon *Daemon) GetAllNetworks() []libnetwork.Network { |
90 | 90 |
} |
91 | 91 |
|
92 | 92 |
// CreateNetwork creates a network with the given name, driver and other optional parameters |
93 |
-func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, options map[string]string, internal bool) (libnetwork.Network, error) { |
|
93 |
+func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, netOption map[string]string, internal bool, enableIPv6 bool) (libnetwork.Network, error) { |
|
94 | 94 |
c := daemon.netController |
95 | 95 |
if driver == "" { |
96 | 96 |
driver = c.Config().Daemon.DefaultDriver |
... | ... |
@@ -104,7 +104,8 @@ func (daemon *Daemon) CreateNetwork(name, driver string, ipam network.IPAM, opti |
104 | 104 |
} |
105 | 105 |
|
106 | 106 |
nwOptions = append(nwOptions, libnetwork.NetworkOptionIpam(ipam.Driver, "", v4Conf, v6Conf, ipam.Options)) |
107 |
- nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(options)) |
|
107 |
+ nwOptions = append(nwOptions, libnetwork.NetworkOptionEnableIPv6(enableIPv6)) |
|
108 |
+ nwOptions = append(nwOptions, libnetwork.NetworkOptionDriverOpts(netOption)) |
|
108 | 109 |
if internal { |
109 | 110 |
nwOptions = append(nwOptions, libnetwork.NetworkOptionInternalNetwork()) |
110 | 111 |
} |
... | ... |
@@ -84,6 +84,8 @@ func (s *DockerSuite) TestApiNetworkInspect(c *check.C) { |
84 | 84 |
nr = getNetworkResource(c, nr.ID) |
85 | 85 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
86 | 86 |
c.Assert(nr.Scope, checker.Equals, "local") |
87 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
88 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
87 | 89 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
88 | 90 |
c.Assert(len(nr.Containers), checker.Equals, 1) |
89 | 91 |
c.Assert(nr.Containers[containerID], checker.NotNil) |
... | ... |
@@ -574,18 +574,24 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectDefault(c *check.C) { |
574 | 574 |
nr := getNetworkResource(c, "none") |
575 | 575 |
c.Assert(nr.Driver, checker.Equals, "null") |
576 | 576 |
c.Assert(nr.Scope, checker.Equals, "local") |
577 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
578 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
577 | 579 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
578 | 580 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 0) |
579 | 581 |
|
580 | 582 |
nr = getNetworkResource(c, "host") |
581 | 583 |
c.Assert(nr.Driver, checker.Equals, "host") |
582 | 584 |
c.Assert(nr.Scope, checker.Equals, "local") |
585 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
586 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
583 | 587 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
584 | 588 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 0) |
585 | 589 |
|
586 | 590 |
nr = getNetworkResource(c, "bridge") |
587 | 591 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
588 | 592 |
c.Assert(nr.Scope, checker.Equals, "local") |
593 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
594 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
589 | 595 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
590 | 596 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
591 | 597 |
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil) |
... | ... |
@@ -600,6 +606,8 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check. |
600 | 600 |
nr := getNetworkResource(c, "test01") |
601 | 601 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
602 | 602 |
c.Assert(nr.Scope, checker.Equals, "local") |
603 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
604 |
+ c.Assert(nr.EnableIPv6, checker.Equals, false) |
|
603 | 605 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
604 | 606 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
605 | 607 |
c.Assert(nr.IPAM.Config[0].Subnet, checker.NotNil) |
... | ... |
@@ -610,12 +618,14 @@ func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomUnspecified(c *check. |
610 | 610 |
} |
611 | 611 |
|
612 | 612 |
func (s *DockerNetworkSuite) TestDockerNetworkInspectCustomSpecified(c *check.C) { |
613 |
- dockerCmd(c, "network", "create", "--driver=bridge", "--subnet=172.28.0.0/16", "--ip-range=172.28.5.0/24", "--gateway=172.28.5.254", "br0") |
|
613 |
+ dockerCmd(c, "network", "create", "--driver=bridge", "--ipv6", "--subnet=172.28.0.0/16", "--ip-range=172.28.5.0/24", "--gateway=172.28.5.254", "br0") |
|
614 | 614 |
assertNwIsAvailable(c, "br0") |
615 | 615 |
|
616 | 616 |
nr := getNetworkResource(c, "br0") |
617 | 617 |
c.Assert(nr.Driver, checker.Equals, "bridge") |
618 | 618 |
c.Assert(nr.Scope, checker.Equals, "local") |
619 |
+ c.Assert(nr.Internal, checker.Equals, false) |
|
620 |
+ c.Assert(nr.EnableIPv6, checker.Equals, true) |
|
619 | 621 |
c.Assert(nr.IPAM.Driver, checker.Equals, "default") |
620 | 622 |
c.Assert(len(nr.IPAM.Config), checker.Equals, 1) |
621 | 623 |
c.Assert(nr.IPAM.Config[0].Subnet, checker.Equals, "172.28.0.0/16") |
... | ... |
@@ -297,6 +297,9 @@ func (s *DockerSuite) TestPortExposeHostBinding(c *check.C) { |
297 | 297 |
func (s *DockerSuite) TestPortBindingOnSandbox(c *check.C) { |
298 | 298 |
testRequires(c, DaemonIsLinux, NotUserNamespace) |
299 | 299 |
dockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net") |
300 |
+ nr := getNetworkResource(c, "internal-net") |
|
301 |
+ c.Assert(nr.Internal, checker.Equals, true) |
|
302 |
+ |
|
300 | 303 |
dockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1", |
301 | 304 |
"-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080") |
302 | 305 |
c.Assert(waitRun("c1"), check.IsNil) |