From a8975c9042ed6d7649ecfebeb5b761efe7964910 Mon Sep 17 00:00:00 2001 From: Albin Kerouanton Date: Sun, 10 Sep 2023 13:33:21 +0200 Subject: [PATCH] api: Add consts for predefined networks Constants for both platform-specific and platform-independent networks are added to the api/network package. Signed-off-by: Albin Kerouanton --- api/types/container/hostconfig.go | 5 +++-- api/types/container/hostconfig_unix.go | 14 +++++++----- api/types/container/hostconfig_windows.go | 10 +++++---- api/types/network/network.go | 14 ++++++++++++ daemon/daemon_unix.go | 27 ++++++++++++----------- daemon/daemon_windows.go | 3 ++- daemon/inspect.go | 2 +- runconfig/hostconfig.go | 3 ++- runconfig/hostconfig_unix.go | 3 ++- runconfig/hostconfig_windows.go | 3 ++- testutil/environment/clean.go | 5 +++-- 11 files changed, 57 insertions(+), 32 deletions(-) diff --git a/api/types/container/hostconfig.go b/api/types/container/hostconfig.go index c49b64716ad62..efb96266e8c86 100644 --- a/api/types/container/hostconfig.go +++ b/api/types/container/hostconfig.go @@ -6,6 +6,7 @@ import ( "github.com/docker/docker/api/types/blkiodev" "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/strslice" "github.com/docker/go-connections/nat" units "github.com/docker/go-units" @@ -133,12 +134,12 @@ type NetworkMode string // IsNone indicates whether container isn't using a network stack. func (n NetworkMode) IsNone() bool { - return n == "none" + return n == network.NetworkNone } // IsDefault indicates whether container uses the default network stack. func (n NetworkMode) IsDefault() bool { - return n == "default" + return n == network.NetworkDefault } // IsPrivate indicates whether container uses its private network stack. diff --git a/api/types/container/hostconfig_unix.go b/api/types/container/hostconfig_unix.go index a14fe8d1aff9e..4213292378384 100644 --- a/api/types/container/hostconfig_unix.go +++ b/api/types/container/hostconfig_unix.go @@ -2,6 +2,8 @@ package container // import "github.com/docker/docker/api/types/container" +import "github.com/docker/docker/api/types/network" + // IsValid indicates if an isolation technology is valid func (i Isolation) IsValid() bool { return i.IsDefault() @@ -10,15 +12,15 @@ func (i Isolation) IsValid() bool { // NetworkName returns the name of the network stack. func (n NetworkMode) NetworkName() string { if n.IsBridge() { - return "bridge" + return network.NetworkBridge } else if n.IsHost() { - return "host" + return network.NetworkHost } else if n.IsContainer() { return "container" } else if n.IsNone() { - return "none" + return network.NetworkNone } else if n.IsDefault() { - return "default" + return network.NetworkDefault } else if n.IsUserDefined() { return n.UserDefined() } @@ -27,12 +29,12 @@ func (n NetworkMode) NetworkName() string { // IsBridge indicates whether container uses the bridge network stack func (n NetworkMode) IsBridge() bool { - return n == "bridge" + return n == network.NetworkBridge } // IsHost indicates whether container uses the host network stack. func (n NetworkMode) IsHost() bool { - return n == "host" + return n == network.NetworkHost } // IsUserDefined indicates user-created network diff --git a/api/types/container/hostconfig_windows.go b/api/types/container/hostconfig_windows.go index 99f803a5bb170..154667f4f0f7c 100644 --- a/api/types/container/hostconfig_windows.go +++ b/api/types/container/hostconfig_windows.go @@ -1,9 +1,11 @@ package container // import "github.com/docker/docker/api/types/container" +import "github.com/docker/docker/api/types/network" + // IsBridge indicates whether container uses the bridge network stack // in windows it is given the name NAT func (n NetworkMode) IsBridge() bool { - return n == "nat" + return n == network.NetworkNat } // IsHost indicates whether container uses the host network stack. @@ -25,11 +27,11 @@ func (i Isolation) IsValid() bool { // NetworkName returns the name of the network stack. func (n NetworkMode) NetworkName() string { if n.IsDefault() { - return "default" + return network.NetworkDefault } else if n.IsBridge() { - return "nat" + return network.NetworkNat } else if n.IsNone() { - return "none" + return network.NetworkNone } else if n.IsContainer() { return "container" } else if n.IsUserDefined() { diff --git a/api/types/network/network.go b/api/types/network/network.go index 6c5ef9ca4019e..4721f1f36cd6f 100644 --- a/api/types/network/network.go +++ b/api/types/network/network.go @@ -1,8 +1,22 @@ package network // import "github.com/docker/docker/api/types/network" + import ( "github.com/docker/docker/api/types/filters" ) +const ( + // NetworkDefault is a platform-independent alias to choose the platform-specific default network stack. + NetworkDefault = "default" + // NetworkHost is the name of the predefined network used when the NetworkMode host is selected (only available on Linux) + NetworkHost = "host" + // NetworkNone is the name of the predefined network used when the NetworkMode none is selected (available on both Linux and Windows) + NetworkNone = "none" + // NetworkBridge is the name of the default network on Linux + NetworkBridge = "bridge" + // NetworkNat is the name of the default network on Windows + NetworkNat = "nat" +) + // Address represents an IP address type Address struct { Addr string diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go index f4637039f7a63..fa106e431e197 100644 --- a/daemon/daemon_unix.go +++ b/daemon/daemon_unix.go @@ -23,6 +23,7 @@ import ( "github.com/docker/docker/api/types/blkiodev" pblkiodev "github.com/docker/docker/api/types/blkiodev" containertypes "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/daemon/config" "github.com/docker/docker/daemon/initlayer" @@ -857,24 +858,24 @@ func (daemon *Daemon) initNetworkController(cfg *config.Config, activeSandboxes } func configureNetworking(controller *libnetwork.Controller, conf *config.Config) error { - // Initialize default network on "null" - if n, _ := controller.NetworkByName("none"); n == nil { - if _, err := controller.NewNetwork("null", "none", "", libnetwork.NetworkOptionPersist(true)); err != nil { - return errors.Wrap(err, `error creating default "null" network`) + // Create predefined network "none" + if n, _ := controller.NetworkByName(network.NetworkNone); n == nil { + if _, err := controller.NewNetwork("null", network.NetworkNone, "", libnetwork.NetworkOptionPersist(true)); err != nil { + return errors.Wrapf(err, `error creating default %q network`, network.NetworkNone) } } - // Initialize default network on "host" - if n, _ := controller.NetworkByName("host"); n == nil { - if _, err := controller.NewNetwork("host", "host", "", libnetwork.NetworkOptionPersist(true)); err != nil { - return errors.Wrap(err, `error creating default "host" network`) + // Create predefined network "host" + if n, _ := controller.NetworkByName(network.NetworkHost); n == nil { + if _, err := controller.NewNetwork("host", network.NetworkHost, "", libnetwork.NetworkOptionPersist(true)); err != nil { + return errors.Wrapf(err, `error creating default %q network`, network.NetworkHost) } } // Clear stale bridge network - if n, err := controller.NetworkByName("bridge"); err == nil { + if n, err := controller.NetworkByName(network.NetworkBridge); err == nil { if err = n.Delete(); err != nil { - return errors.Wrap(err, `could not delete the default "bridge"" network`) + return errors.Wrapf(err, `could not delete the default %q network`, network.NetworkBridge) } if len(conf.NetworkConfig.DefaultAddressPools.Value()) > 0 && !conf.LiveRestoreEnabled { removeDefaultBridgeInterface() @@ -898,7 +899,7 @@ func setHostGatewayIP(controller *libnetwork.Controller, config *config.Config) if config.HostGatewayIP != nil { return } - if n, err := controller.NetworkByName("bridge"); err == nil { + if n, err := controller.NetworkByName(network.NetworkBridge); err == nil { v4Info, v6Info := n.IpamInfo() if len(v4Info) > 0 { config.HostGatewayIP = v4Info[0].Gateway.IP @@ -1051,13 +1052,13 @@ func initBridgeDriver(controller *libnetwork.Controller, cfg config.BridgeConfig v6Conf = append(v6Conf, ipamV6Conf) } // Initialize default network on "bridge" with the same name - _, err = controller.NewNetwork("bridge", "bridge", "", + _, err = controller.NewNetwork("bridge", network.NetworkBridge, "", libnetwork.NetworkOptionEnableIPv6(cfg.EnableIPv6), libnetwork.NetworkOptionDriverOpts(netOption), libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil), libnetwork.NetworkOptionDeferIPv6Alloc(deferIPv6Alloc)) if err != nil { - return fmt.Errorf(`error creating default "bridge" network: %v`, err) + return fmt.Errorf(`error creating default %q network: %v`, network.NetworkBridge, err) } return nil } diff --git a/daemon/daemon_windows.go b/daemon/daemon_windows.go index 0f4e8fffed760..298f4aa0245f4 100644 --- a/daemon/daemon_windows.go +++ b/daemon/daemon_windows.go @@ -12,6 +12,7 @@ import ( "github.com/Microsoft/hcsshim/osversion" "github.com/containerd/containerd/log" containertypes "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/daemon/config" "github.com/docker/docker/libcontainerd/local" @@ -261,7 +262,7 @@ func (daemon *Daemon) initNetworkController(daemonCfg *config.Config, activeSand if !found { // non-default nat networks should be re-created if missing from HNS - if v.Type() == "nat" && v.Name() != "nat" { + if v.Type() == "nat" && v.Name() != networktypes.NetworkNat { _, _, v4Conf, v6Conf := v.IpamConfig() netOption := map[string]string{} for k, v := range v.DriverOptions() { diff --git a/daemon/inspect.go b/daemon/inspect.go index a60b61d67b9e0..67958fc43416d 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -270,7 +270,7 @@ func (daemon *Daemon) getBackwardsCompatibleNetworkSettings(settings *network.Se func (daemon *Daemon) getDefaultNetworkSettings(networks map[string]*network.EndpointSettings) types.DefaultNetworkSettings { var settings types.DefaultNetworkSettings - if defaultNetwork, ok := networks["bridge"]; ok && defaultNetwork.EndpointSettings != nil { + if defaultNetwork, ok := networks[networktypes.NetworkBridge]; ok && defaultNetwork.EndpointSettings != nil { settings.EndpointID = defaultNetwork.EndpointID settings.Gateway = defaultNetwork.Gateway settings.GlobalIPv6Address = defaultNetwork.GlobalIPv6Address diff --git a/runconfig/hostconfig.go b/runconfig/hostconfig.go index 9603a94ecade5..215e4dd14f2a3 100644 --- a/runconfig/hostconfig.go +++ b/runconfig/hostconfig.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" ) // DecodeHostConfig creates a HostConfig based on the specified Reader. @@ -23,7 +24,7 @@ func decodeHostConfig(src io.Reader) (*container.HostConfig, error) { // docker daemon. func SetDefaultNetModeIfBlank(hc *container.HostConfig) { if hc != nil && hc.NetworkMode == "" { - hc.NetworkMode = "default" + hc.NetworkMode = network.NetworkDefault } } diff --git a/runconfig/hostconfig_unix.go b/runconfig/hostconfig_unix.go index 6ae9b53a5aa3d..0a60c9b805170 100644 --- a/runconfig/hostconfig_unix.go +++ b/runconfig/hostconfig_unix.go @@ -7,13 +7,14 @@ import ( "runtime" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/pkg/sysinfo" ) // DefaultDaemonNetworkMode returns the default network stack the daemon should // use. func DefaultDaemonNetworkMode() container.NetworkMode { - return "bridge" + return network.NetworkBridge } // IsPreDefinedNetwork indicates if a network is predefined by the daemon diff --git a/runconfig/hostconfig_windows.go b/runconfig/hostconfig_windows.go index 91e27eac5e39e..579b9787d6682 100644 --- a/runconfig/hostconfig_windows.go +++ b/runconfig/hostconfig_windows.go @@ -4,13 +4,14 @@ import ( "fmt" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/pkg/sysinfo" ) // DefaultDaemonNetworkMode returns the default network stack the daemon should // use. func DefaultDaemonNetworkMode() container.NetworkMode { - return "nat" + return network.NetworkNat } // IsPreDefinedNetwork indicates if a network is predefined by the daemon diff --git a/testutil/environment/clean.go b/testutil/environment/clean.go index 8e591ba05e743..df02e83b73947 100644 --- a/testutil/environment/clean.go +++ b/testutil/environment/clean.go @@ -8,6 +8,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" "github.com/docker/docker/errdefs" @@ -150,13 +151,13 @@ func deleteAllNetworks(ctx context.Context, t testing.TB, c client.NetworkAPICli assert.Check(t, err, "failed to list networks") for _, n := range networks { - if n.Name == "bridge" || n.Name == "none" || n.Name == "host" { + if n.Name == network.NetworkBridge || n.Name == network.NetworkNone || n.Name == network.NetworkHost { continue } if _, ok := protectedNetworks[n.ID]; ok { continue } - if daemonPlatform == "windows" && strings.ToLower(n.Name) == "nat" { + if daemonPlatform == "windows" && strings.ToLower(n.Name) == network.NetworkNat { // nat is a pre-defined network on Windows and cannot be removed continue }