Signed-off-by: Aidan Hobson Sayers <aidanhs@cantab.net>
| ... | ... |
@@ -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)
|