| package drvregistry | |
| import ( | |
| "fmt" | |
| "github.com/docker/docker/libnetwork/driverapi" | |
| "github.com/docker/docker/libnetwork/ipamapi" | |
| "github.com/docker/docker/pkg/plugingetter" | |
| ) | |
| // DrvRegistry holds the registry of all network drivers and IPAM drivers that it knows about. | |
| type DrvRegistry struct { | |
| Networks | |
| IPAMs | |
| pluginGetter plugingetter.PluginGetter | |
| } | |
| var _ driverapi.DriverCallback = (*DrvRegistry)(nil) | |
| var _ ipamapi.Callback = (*DrvRegistry)(nil) | |
| // InitFunc defines the driver initialization function signature. | |
| type InitFunc func(driverapi.DriverCallback, map[string]interface{}) error | |
| // Placeholder is a type for function arguments which need to be present for Swarmkit | |
| // to compile, but for which the only acceptable value is nil. | |
| type Placeholder *struct{} | |
| // New returns a new legacy driver registry. | |
| // | |
| // Deprecated: use the separate [Networks] and [IPAMs] registries. | |
| func New(lDs, gDs Placeholder, dfn DriverNotifyFunc, ifn Placeholder, pg plugingetter.PluginGetter) (*DrvRegistry, error) { | |
| return &DrvRegistry{ | |
| Networks: Networks{Notify: dfn}, | |
| pluginGetter: pg, | |
| }, nil | |
| } | |
| // AddDriver adds a network driver to the registry. | |
| // | |
| // Deprecated: call fn(r, config) directly. | |
| func (r *DrvRegistry) AddDriver(_ string, fn InitFunc, config map[string]interface{}) error { | |
| return fn(r, config) | |
| } | |
| // IPAMDefaultAddressSpaces returns the default address space strings for the passed IPAM driver name. | |
| // | |
| // Deprecated: call GetDefaultAddressSpaces() on the IPAM driver. | |
| func (r *DrvRegistry) IPAMDefaultAddressSpaces(name string) (string, string, error) { | |
| d, _ := r.IPAM(name) | |
| if d == nil { | |
| return "", "", fmt.Errorf("ipam %s not found", name) | |
| } | |
| return d.GetDefaultAddressSpaces() | |
| } | |
| // GetPluginGetter returns the plugingetter | |
| func (r *DrvRegistry) GetPluginGetter() plugingetter.PluginGetter { | |
| return r.pluginGetter | |
| } | |
| // Driver returns the network driver instance registered under name, and its capability. | |
| func (r *DrvRegistry) Driver(name string) (driverapi.Driver, *driverapi.Capability) { | |
| d, c := r.Networks.Driver(name) | |
| if c == (driverapi.Capability{}) { | |
| return d, nil | |
| } | |
| return d, &c | |
| } |