diff --git a/libnetwork/cmd/ovrouter/ovrouter.go b/libnetwork/cmd/ovrouter/ovrouter.go index bca34d504f6c6..faad115a4ba58 100644 --- a/libnetwork/cmd/ovrouter/ovrouter.go +++ b/libnetwork/cmd/ovrouter/ovrouter.go @@ -13,7 +13,6 @@ import ( "github.com/docker/docker/libnetwork/drivers/overlay" "github.com/docker/docker/libnetwork/netlabel" "github.com/docker/docker/libnetwork/types" - "github.com/docker/docker/pkg/plugingetter" "github.com/docker/docker/pkg/reexec" "github.com/vishvananda/netlink" ) @@ -28,10 +27,6 @@ type endpoint struct { name string } -func (r *router) GetPluginGetter() plugingetter.PluginGetter { - return nil -} - func (r *router) RegisterDriver(name string, driver driverapi.Driver, c driverapi.Capability) error { r.d = driver return nil @@ -126,7 +121,7 @@ func main() { } r := &router{} - if err := overlay.Init(r, opt); err != nil { + if err := overlay.Register(r, opt); err != nil { fmt.Printf("Failed to initialize overlay driver: %v\n", err) os.Exit(1) } diff --git a/libnetwork/controller.go b/libnetwork/controller.go index fdc62d8ffc06d..aebc86a5f9c67 100644 --- a/libnetwork/controller.go +++ b/libnetwork/controller.go @@ -58,6 +58,7 @@ import ( "github.com/docker/docker/libnetwork/diagnostic" "github.com/docker/docker/libnetwork/discoverapi" "github.com/docker/docker/libnetwork/driverapi" + remotedriver "github.com/docker/docker/libnetwork/drivers/remote" "github.com/docker/docker/libnetwork/drvregistry" "github.com/docker/docker/libnetwork/ipamapi" "github.com/docker/docker/libnetwork/netlabel" @@ -85,7 +86,8 @@ type sandboxTable map[string]*Sandbox // Controller manages networks. type Controller struct { id string - drvRegistry *drvregistry.DrvRegistry + drvRegistry drvregistry.Networks + ipamRegistry drvregistry.IPAMs sandboxes sandboxTable cfg *config.Config store datastore.DataStore @@ -108,7 +110,7 @@ type Controller struct { } type initializer struct { - fn drvregistry.InitFunc + fn func(driverapi.Registerer, map[string]interface{}) error ntype string } @@ -130,31 +132,24 @@ func New(cfgOptions ...config.Option) (*Controller, error) { return nil, err } - drvRegistry, err := drvregistry.New(nil, nil, c.RegisterDriver, nil, c.cfg.PluginGetter) - if err != nil { + c.drvRegistry.Notify = c.RegisterDriver + + // External plugins don't need config passed through daemon. They can + // bootstrap themselves. + if err := remotedriver.Register(&c.drvRegistry, c.cfg.PluginGetter); err != nil { return nil, err } for _, i := range getInitializers() { - var dcfg map[string]interface{} - - // External plugins don't need config passed through daemon. They can - // bootstrap themselves - if i.ntype != "remote" { - dcfg = c.makeDriverConfig(i.ntype) - } - - if err := drvRegistry.AddDriver(i.ntype, i.fn, dcfg); err != nil { + if err := i.fn(&c.drvRegistry, c.makeDriverConfig(i.ntype)); err != nil { return nil, err } } - if err = initIPAMDrivers(drvRegistry, c.cfg.PluginGetter, c.cfg.DefaultAddressPool); err != nil { + if err := initIPAMDrivers(&c.ipamRegistry, c.cfg.PluginGetter, c.cfg.DefaultAddressPool); err != nil { return nil, err } - c.drvRegistry = drvRegistry - c.WalkNetworks(populateSpecial) // Reserve pools first before doing cleanup. Otherwise the @@ -387,7 +382,7 @@ func (c *Controller) BuiltinDrivers() []string { // BuiltinIPAMDrivers returns the list of builtin ipam drivers. func (c *Controller) BuiltinIPAMDrivers() []string { drivers := []string{} - c.drvRegistry.WalkIPAMs(func(name string, driver ipamapi.Ipam, cap *ipamapi.Capability) bool { + c.ipamRegistry.WalkIPAMs(func(name string, driver ipamapi.Ipam, cap *ipamapi.Capability) bool { if driver.IsBuiltIn() { drivers = append(drivers, name) } @@ -461,7 +456,7 @@ func (c *Controller) isDistributedControl() bool { } func (c *Controller) GetPluginGetter() plugingetter.PluginGetter { - return c.drvRegistry.GetPluginGetter() + return c.cfg.PluginGetter } func (c *Controller) RegisterDriver(networkType string, driver driverapi.Driver, capability driverapi.Capability) error { @@ -476,7 +471,7 @@ const overlayDSROptionString = "dsr" // are network specific and modeled in a generic way. func (c *Controller) NewNetwork(networkType, name string, id string, options ...NetworkOption) (Network, error) { var ( - caps *driverapi.Capability + caps driverapi.Capability err error t *network skipCfgEpCount bool @@ -1101,7 +1096,7 @@ func (c *Controller) loadIPAMDriver(name string) error { } func (c *Controller) getIPAMDriver(name string) (ipamapi.Ipam, *ipamapi.Capability, error) { - id, cap := c.drvRegistry.IPAM(name) + id, cap := c.ipamRegistry.IPAM(name) if id == nil { // Might be a plugin name. Try loading it if err := c.loadIPAMDriver(name); err != nil { @@ -1109,7 +1104,7 @@ func (c *Controller) getIPAMDriver(name string) (ipamapi.Ipam, *ipamapi.Capabili } // Now that we resolved the plugin, try again looking up the registry - id, cap = c.drvRegistry.IPAM(name) + id, cap = c.ipamRegistry.IPAM(name) if id == nil { return nil, nil, types.BadRequestErrorf("invalid ipam driver: %q", name) } diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index 2ef2040dc14c6..3dafb1e0fe23c 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -166,8 +166,8 @@ func newDriver() *driver { } } -// Init registers a new instance of bridge driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register registers a new instance of bridge driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { d := newDriver() if err := d.configure(config); err != nil { return err @@ -177,7 +177,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { DataScope: datastore.LocalScope, ConnectivityScope: datastore.LocalScope, } - return dc.RegisterDriver(networkType, d, c) + return r.RegisterDriver(networkType, d, c) } // Validate performs a static validation on the network configuration parameters. diff --git a/libnetwork/drivers/bridge/brmanager/brmanager.go b/libnetwork/drivers/bridge/brmanager/brmanager.go index 1bcddee85f580..ce11b3b946490 100644 --- a/libnetwork/drivers/bridge/brmanager/brmanager.go +++ b/libnetwork/drivers/bridge/brmanager/brmanager.go @@ -11,13 +11,20 @@ const networkType = "bridge" type driver struct{} -// Init registers a new instance of bridge manager driver +// Init registers a new instance of bridge manager driver. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, config) +} + +// Register registers a new instance of the bridge manager driver with r. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.LocalScope, } - return dc.RegisterDriver(networkType, &driver{}, c) + return r.RegisterDriver(networkType, &driver{}, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/host/host.go b/libnetwork/drivers/host/host.go index b99049ff374d5..a2126474a7e0a 100644 --- a/libnetwork/drivers/host/host.go +++ b/libnetwork/drivers/host/host.go @@ -16,13 +16,19 @@ type driver struct { sync.Mutex } -// Init registers a new instance of host driver +// Init registers a new instance of host driver. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, config) +} + +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.LocalScope, } - return dc.RegisterDriver(networkType, &driver{}, c) + return r.RegisterDriver(networkType, &driver{}, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/ipvlan/ipvlan.go b/libnetwork/drivers/ipvlan/ipvlan.go index 89091b9cbaba5..8e04154053874 100644 --- a/libnetwork/drivers/ipvlan/ipvlan.go +++ b/libnetwork/drivers/ipvlan/ipvlan.go @@ -62,8 +62,8 @@ type network struct { sync.Mutex } -// Init initializes and registers the libnetwork ipvlan driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register initializes and registers the libnetwork ipvlan driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.GlobalScope, @@ -75,7 +75,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { return err } - return dc.RegisterDriver(driverName, d, c) + return r.RegisterDriver(driverName, d, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/ipvlan/ipvlan_test.go b/libnetwork/drivers/ipvlan/ipvlan_test.go index b0f4de9cd7504..c218089f14a7c 100644 --- a/libnetwork/drivers/ipvlan/ipvlan_test.go +++ b/libnetwork/drivers/ipvlan/ipvlan_test.go @@ -7,7 +7,6 @@ import ( "testing" "github.com/docker/docker/libnetwork/driverapi" - "github.com/docker/docker/pkg/plugingetter" ) const testNetworkType = "ipvlan" @@ -17,10 +16,6 @@ type driverTester struct { d *driver } -func (dt *driverTester) GetPluginGetter() plugingetter.PluginGetter { - return nil -} - func (dt *driverTester) RegisterDriver(name string, drv driverapi.Driver, cap driverapi.Capability) error { if name != testNetworkType { @@ -37,15 +32,15 @@ func (dt *driverTester) RegisterDriver(name string, drv driverapi.Driver, return nil } -func TestIpvlanInit(t *testing.T) { - if err := Init(&driverTester{t: t}, nil); err != nil { +func TestIpvlanRegister(t *testing.T) { + if err := Register(&driverTester{t: t}, nil); err != nil { t.Fatal(err) } } func TestIpvlanNilConfig(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } @@ -56,7 +51,7 @@ func TestIpvlanNilConfig(t *testing.T) { func TestIpvlanType(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } diff --git a/libnetwork/drivers/ipvlan/ivmanager/ivmanager.go b/libnetwork/drivers/ipvlan/ivmanager/ivmanager.go index 2c8f71c639f9e..1729d7ac1d08c 100644 --- a/libnetwork/drivers/ipvlan/ivmanager/ivmanager.go +++ b/libnetwork/drivers/ipvlan/ivmanager/ivmanager.go @@ -11,13 +11,20 @@ const networkType = "ipvlan" type driver struct{} -// Init registers a new instance of ipvlan manager driver +// Init registers a new instance of the ipvlan manager driver. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, config) +} + +// Register registers a new instance of the ipvlan manager driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.GlobalScope, } - return dc.RegisterDriver(networkType, &driver{}, c) + return r.RegisterDriver(networkType, &driver{}, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/macvlan/macvlan.go b/libnetwork/drivers/macvlan/macvlan.go index eae5bb8176051..12505eff939a0 100644 --- a/libnetwork/drivers/macvlan/macvlan.go +++ b/libnetwork/drivers/macvlan/macvlan.go @@ -56,8 +56,8 @@ type network struct { sync.Mutex } -// Init initializes and registers the libnetwork macvlan driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register initializes and registers the libnetwork macvlan driver +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.GlobalScope, @@ -69,7 +69,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { return err } - return dc.RegisterDriver(driverName, d, c) + return r.RegisterDriver(driverName, d, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/macvlan/macvlan_test.go b/libnetwork/drivers/macvlan/macvlan_test.go index 0439ffdc0d230..334f6e369fe19 100644 --- a/libnetwork/drivers/macvlan/macvlan_test.go +++ b/libnetwork/drivers/macvlan/macvlan_test.go @@ -7,7 +7,6 @@ import ( "testing" "github.com/docker/docker/libnetwork/driverapi" - "github.com/docker/docker/pkg/plugingetter" ) const testNetworkType = "macvlan" @@ -17,10 +16,6 @@ type driverTester struct { d *driver } -func (dt *driverTester) GetPluginGetter() plugingetter.PluginGetter { - return nil -} - func (dt *driverTester) RegisterDriver(name string, drv driverapi.Driver, cap driverapi.Capability) error { if name != testNetworkType { @@ -37,15 +32,15 @@ func (dt *driverTester) RegisterDriver(name string, drv driverapi.Driver, return nil } -func TestMacvlanInit(t *testing.T) { - if err := Init(&driverTester{t: t}, nil); err != nil { +func TestMacvlanRegister(t *testing.T) { + if err := Register(&driverTester{t: t}, nil); err != nil { t.Fatal(err) } } func TestMacvlanNilConfig(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } @@ -56,7 +51,7 @@ func TestMacvlanNilConfig(t *testing.T) { func TestMacvlanType(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } diff --git a/libnetwork/drivers/macvlan/mvmanager/mvmanager.go b/libnetwork/drivers/macvlan/mvmanager/mvmanager.go index 1e3d3473d43ef..a3bde257a3f1f 100644 --- a/libnetwork/drivers/macvlan/mvmanager/mvmanager.go +++ b/libnetwork/drivers/macvlan/mvmanager/mvmanager.go @@ -11,13 +11,20 @@ const networkType = "macvlan" type driver struct{} -// Init registers a new instance of macvlan manager driver +// Init registers a new instance of the macvlan manager driver. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, config) +} + +// Register registers a new instance of the macvlan manager driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, ConnectivityScope: datastore.GlobalScope, } - return dc.RegisterDriver(networkType, &driver{}, c) + return r.RegisterDriver(networkType, &driver{}, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/null/null.go b/libnetwork/drivers/null/null.go index c54db37513ec5..f899c1ffcd71b 100644 --- a/libnetwork/drivers/null/null.go +++ b/libnetwork/drivers/null/null.go @@ -16,12 +16,12 @@ type driver struct { sync.Mutex } -// Init registers a new instance of null driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register registers a new instance of the null driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.LocalScope, } - return dc.RegisterDriver(networkType, &driver{}, c) + return r.RegisterDriver(networkType, &driver{}, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go index 5daf05e0b3022..412d7f51be537 100644 --- a/libnetwork/drivers/overlay/overlay.go +++ b/libnetwork/drivers/overlay/overlay.go @@ -58,8 +58,8 @@ type driver struct { sync.Mutex } -// Init registers a new instance of overlay driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register registers a new instance of the overlay driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.GlobalScope, ConnectivityScope: datastore.GlobalScope, @@ -107,7 +107,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { logrus.Warnf("Failure during overlay endpoints restore: %v", err) } - return dc.RegisterDriver(networkType, d, c) + return r.RegisterDriver(networkType, d, c) } // Endpoints are stored in the local store. Restore them and reconstruct the overlay sandbox diff --git a/libnetwork/drivers/overlay/overlay_test.go b/libnetwork/drivers/overlay/overlay_test.go index 8dcb721842eb0..27c0475fbb617 100644 --- a/libnetwork/drivers/overlay/overlay_test.go +++ b/libnetwork/drivers/overlay/overlay_test.go @@ -59,7 +59,7 @@ func setupDriver(t *testing.T) *driverTester { }, } - if err := Init(dt, config); err != nil { + if err := Register(dt, config); err != nil { t.Fatal(err) } @@ -114,14 +114,14 @@ func (dt *driverTester) RegisterDriver(name string, drv driverapi.Driver, } func TestOverlayInit(t *testing.T) { - if err := Init(&driverTester{t: t}, nil); err != nil { + if err := Register(&driverTester{t: t}, nil); err != nil { t.Fatal(err) } } func TestOverlayFiniWithoutConfig(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } @@ -151,7 +151,7 @@ func TestOverlayConfig(t *testing.T) { func TestOverlayType(t *testing.T) { dt := &driverTester{t: t} - if err := Init(dt, nil); err != nil { + if err := Register(dt, nil); err != nil { t.Fatal(err) } diff --git a/libnetwork/drivers/overlay/ovmanager/ovmanager.go b/libnetwork/drivers/overlay/ovmanager/ovmanager.go index effd53005f93b..dc5c621847231 100644 --- a/libnetwork/drivers/overlay/ovmanager/ovmanager.go +++ b/libnetwork/drivers/overlay/ovmanager/ovmanager.go @@ -44,8 +44,15 @@ type network struct { sync.Mutex } -// Init registers a new instance of overlay driver +// Init registers a new instance of the overlay driver. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, config) +} + +// Register registers a new instance of the overlay driver. +func Register(r driverapi.DriverCallback, config map[string]interface{}) error { var err error c := driverapi.Capability{ DataScope: datastore.GlobalScope, @@ -62,7 +69,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { return fmt.Errorf("failed to initialize vxlan id manager: %v", err) } - return dc.RegisterDriver(networkType, d, c) + return r.RegisterDriver(networkType, d, c) } func (d *driver) NetworkAllocate(id string, option map[string]string, ipV4Data, ipV6Data []driverapi.IPAMData) (map[string]string, error) { diff --git a/libnetwork/drivers/remote/driver.go b/libnetwork/drivers/remote/driver.go index a21a34e6b7f25..99cdb0cf6754b 100644 --- a/libnetwork/drivers/remote/driver.go +++ b/libnetwork/drivers/remote/driver.go @@ -30,7 +30,15 @@ func newDriver(name string, client *plugins.Client) driverapi.Driver { // Init makes sure a remote driver is registered when a network driver // plugin is activated. +// +// Deprecated: use [Register]. func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { + return Register(dc, dc.GetPluginGetter()) +} + +// Register makes sure a remote driver is registered with r when a network +// driver plugin is activated. +func Register(r driverapi.Registerer, pg plugingetter.PluginGetter) error { newPluginHandler := func(name string, client *plugins.Client) { // negotiate driver capability with client d := newDriver(name, client) @@ -39,14 +47,14 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { logrus.Errorf("error getting capability for %s due to %v", name, err) return } - if err = dc.RegisterDriver(name, d, *c); err != nil { + if err = r.RegisterDriver(name, d, *c); err != nil { logrus.Errorf("error registering driver for %s due to %v", name, err) } } // Unit test code is unaware of a true PluginStore. So we fall back to v1 plugins. handleFunc := plugins.Handle - if pg := dc.GetPluginGetter(); pg != nil { + if pg != nil { handleFunc = pg.Handle activePlugins := pg.GetAllManagedPluginsByCap(driverapi.NetworkPluginEndpointType) for _, ap := range activePlugins { diff --git a/libnetwork/drivers/windows/overlay/overlay_windows.go b/libnetwork/drivers/windows/overlay/overlay_windows.go index 727a3f1db68ee..c406a5a25140c 100644 --- a/libnetwork/drivers/windows/overlay/overlay_windows.go +++ b/libnetwork/drivers/windows/overlay/overlay_windows.go @@ -30,8 +30,8 @@ type driver struct { sync.Mutex } -// Init registers a new instance of overlay driver -func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { +// Register registers a new instance of the overlay driver. +func Register(r driverapi.Registerer, config map[string]interface{}) error { c := driverapi.Capability{ DataScope: datastore.GlobalScope, ConnectivityScope: datastore.GlobalScope, @@ -68,7 +68,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { d.restoreHNSNetworks() - return dc.RegisterDriver(networkType, d, c) + return r.RegisterDriver(networkType, d, c) } func (d *driver) restoreHNSNetworks() error { diff --git a/libnetwork/drivers/windows/windows.go b/libnetwork/drivers/windows/windows.go index 7695dbc9e571a..fcb5aff841e41 100644 --- a/libnetwork/drivers/windows/windows.go +++ b/libnetwork/drivers/windows/windows.go @@ -127,8 +127,8 @@ func newDriver(networkType string) *driver { } // GetInit returns an initializer for the given network type -func GetInit(networkType string) func(dc driverapi.DriverCallback, config map[string]interface{}) error { - return func(dc driverapi.DriverCallback, config map[string]interface{}) error { +func GetInit(networkType string) func(dc driverapi.Registerer, config map[string]interface{}) error { + return func(dc driverapi.Registerer, config map[string]interface{}) error { if !IsBuiltinLocalDriver(networkType) { return types.BadRequestErrorf("Network type not supported: %s", networkType) } diff --git a/libnetwork/drivers_freebsd.go b/libnetwork/drivers_freebsd.go index 05023a2f67d1a..f1a06f698c694 100644 --- a/libnetwork/drivers_freebsd.go +++ b/libnetwork/drivers_freebsd.go @@ -2,12 +2,10 @@ package libnetwork import ( "github.com/docker/docker/libnetwork/drivers/null" - "github.com/docker/docker/libnetwork/drivers/remote" ) func getInitializers() []initializer { return []initializer{ - {null.Init, "null"}, - {remote.Init, "remote"}, + {null.Register, "null"}, } } diff --git a/libnetwork/drivers_linux.go b/libnetwork/drivers_linux.go index 022e5c76a9a3f..553b0d9e2d664 100644 --- a/libnetwork/drivers_linux.go +++ b/libnetwork/drivers_linux.go @@ -7,18 +7,16 @@ import ( "github.com/docker/docker/libnetwork/drivers/macvlan" "github.com/docker/docker/libnetwork/drivers/null" "github.com/docker/docker/libnetwork/drivers/overlay" - "github.com/docker/docker/libnetwork/drivers/remote" ) func getInitializers() []initializer { in := []initializer{ - {bridge.Init, "bridge"}, - {host.Init, "host"}, - {ipvlan.Init, "ipvlan"}, - {macvlan.Init, "macvlan"}, - {null.Init, "null"}, - {overlay.Init, "overlay"}, - {remote.Init, "remote"}, + {bridge.Register, "bridge"}, + {host.Register, "host"}, + {ipvlan.Register, "ipvlan"}, + {macvlan.Register, "macvlan"}, + {null.Register, "null"}, + {overlay.Register, "overlay"}, } return in } diff --git a/libnetwork/drivers_windows.go b/libnetwork/drivers_windows.go index 28db05759de42..e5ec3880912b7 100644 --- a/libnetwork/drivers_windows.go +++ b/libnetwork/drivers_windows.go @@ -2,16 +2,14 @@ package libnetwork import ( "github.com/docker/docker/libnetwork/drivers/null" - "github.com/docker/docker/libnetwork/drivers/remote" "github.com/docker/docker/libnetwork/drivers/windows" "github.com/docker/docker/libnetwork/drivers/windows/overlay" ) func getInitializers() []initializer { return []initializer{ - {null.Init, "null"}, - {overlay.Init, "overlay"}, - {remote.Init, "remote"}, + {null.Register, "null"}, + {overlay.Register, "overlay"}, {windows.GetInit("transparent"), "transparent"}, {windows.GetInit("l2bridge"), "l2bridge"}, {windows.GetInit("l2tunnel"), "l2tunnel"}, diff --git a/libnetwork/libnetwork_internal_test.go b/libnetwork/libnetwork_internal_test.go index 59481f6c59639..5d6f92d1d7088 100644 --- a/libnetwork/libnetwork_internal_test.go +++ b/libnetwork/libnetwork_internal_test.go @@ -576,7 +576,7 @@ func TestIpamReleaseOnNetDriverFailures(t *testing.T) { } defer c.Stop() - if err := c.drvRegistry.AddDriver(badDriverName, badDriverInit, nil); err != nil { + if err := badDriverRegister(&c.drvRegistry); err != nil { t.Fatal(err) } @@ -643,7 +643,7 @@ type badDriver struct { var bd = badDriver{failNetworkCreation: true} -func badDriverInit(reg driverapi.DriverCallback, opt map[string]interface{}) error { +func badDriverRegister(reg driverapi.Registerer) error { return reg.RegisterDriver(badDriverName, &bd, driverapi.Capability{DataScope: datastore.LocalScope}) } diff --git a/libnetwork/network.go b/libnetwork/network.go index ed42cb0e956a0..417caeff468e3 100644 --- a/libnetwork/network.go +++ b/libnetwork/network.go @@ -916,7 +916,7 @@ func NetworkDeleteOptionRemoveLB(p *networkDeleteParams) { p.rmLBEndpoint = true } -func (n *network) resolveDriver(name string, load bool) (driverapi.Driver, *driverapi.Capability, error) { +func (n *network) resolveDriver(name string, load bool) (driverapi.Driver, driverapi.Capability, error) { c := n.getController() // Check if a driver for the specified network type is available @@ -925,16 +925,16 @@ func (n *network) resolveDriver(name string, load bool) (driverapi.Driver, *driv if load { err := c.loadDriver(name) if err != nil { - return nil, nil, err + return nil, driverapi.Capability{}, err } d, cap = c.drvRegistry.Driver(name) if d == nil { - return nil, nil, fmt.Errorf("could not resolve driver %s in registry", name) + return nil, driverapi.Capability{}, fmt.Errorf("could not resolve driver %s in registry", name) } } else { // don't fail if driver loading is not required - return nil, nil, nil + return nil, driverapi.Capability{}, nil } } @@ -957,7 +957,7 @@ func (n *network) driver(load bool) (driverapi.Driver, error) { n.mu.Lock() // If load is not required, driver, cap and err may all be nil - if n.scope == "" && cap != nil { + if n.scope == "" { n.scope = cap.DataScope } if n.dynamic { @@ -1772,7 +1772,11 @@ func (n *network) getIPData(ipVer int) []driverapi.IPAMData { } func (n *network) deriveAddressSpace() (string, error) { - local, global, err := n.getController().drvRegistry.IPAMDefaultAddressSpaces(n.ipamType) + ipam, _ := n.getController().ipamRegistry.IPAM(n.ipamType) + if ipam == nil { + return "", types.NotFoundErrorf("failed to get default address space: unknown ipam type %q", n.ipamType) + } + local, global, err := ipam.GetDefaultAddressSpaces() if err != nil { return "", types.NotFoundErrorf("failed to get default address space: %v", err) }