MCPcopy
hub / github.com/moby/moby / createNetwork

Method createNetwork

daemon/network.go:300–431  ·  view source on GitHub ↗
(ctx context.Context, cfg *config.Config, create networktypes.CreateRequest, id string, agent bool)

Source from the content-addressed store, hash-verified

298}
299
300func (daemon *Daemon) createNetwork(ctx context.Context, cfg *config.Config, create networktypes.CreateRequest, id string, agent bool) (*networktypes.CreateResponse, error) {
301 if network.IsPredefined(create.Name) {
302 return nil, PredefinedNetworkError(create.Name)
303 }
304
305 c := daemon.netController
306 driver := create.Driver
307 if driver == "" {
308 driver = c.Config().DefaultDriver
309 }
310
311 if driver == "overlay" && !daemon.cluster.IsManager() && !agent {
312 return nil, errdefs.Forbidden(errors.New(`This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.`))
313 }
314
315 networkOptions := make(map[string]string)
316 maps.Copy(networkOptions, create.Options)
317 if defaultOpts, ok := cfg.DefaultNetworkOpts[driver]; create.ConfigFrom == nil && ok {
318 for k, v := range defaultOpts {
319 if _, ok := networkOptions[k]; !ok {
320 log.G(ctx).WithFields(log.Fields{"driver": driver, "network": id, k: v}).Debug("Applying network default option")
321 networkOptions[k] = v
322 }
323 }
324 }
325
326 enableIPv4 := true
327 if create.EnableIPv4 != nil {
328 enableIPv4 = *create.EnableIPv4
329 // Make sure there's no conflicting DefaultNetworkOpts value (it'd be ignored but
330 // would look wrong in inspect output).
331 delete(networkOptions, netlabel.EnableIPv4)
332 } else if v, ok := networkOptions[netlabel.EnableIPv4]; ok {
333 var err error
334 if enableIPv4, err = strconv.ParseBool(v); err != nil {
335 return nil, errdefs.InvalidParameter(fmt.Errorf("driver-opt %q is not a valid bool", netlabel.EnableIPv4))
336 }
337 }
338
339 var enableIPv6 bool
340 if create.EnableIPv6 != nil {
341 enableIPv6 = *create.EnableIPv6
342 // Make sure there's no conflicting DefaultNetworkOpts value (it'd be ignored but
343 // would look wrong in inspect output).
344 delete(networkOptions, netlabel.EnableIPv6)
345 } else if v, ok := networkOptions[netlabel.EnableIPv6]; ok {
346 var err error
347 if enableIPv6, err = strconv.ParseBool(v); err != nil {
348 return nil, errdefs.InvalidParameter(fmt.Errorf("driver-opt %q is not a valid bool", netlabel.EnableIPv6))
349 }
350 }
351
352 nwOptions := []libnetwork.NetworkOption{
353 libnetwork.NetworkOptionEnableIPv4(enableIPv4),
354 libnetwork.NetworkOptionEnableIPv6(enableIPv6),
355 libnetwork.NetworkOptionDriverOpts(networkOptions),
356 libnetwork.NetworkOptionLabels(create.Labels),
357 libnetwork.NetworkOptionAttachable(create.Attachable),

Callers 3

setupIngressMethod · 0.95
CreateManagedNetworkMethod · 0.95
CreateNetworkMethod · 0.95

Calls 15

GetAttachmentStoreMethod · 0.95
pluginRefCountMethod · 0.95
LogNetworkEventMethod · 0.95
IDMethod · 0.95
IsPredefinedFunction · 0.92
ForbiddenFunction · 0.92
InvalidParameterFunction · 0.92
NetworkOptionEnableIPv4Function · 0.92
NetworkOptionEnableIPv6Function · 0.92
NetworkOptionDriverOptsFunction · 0.92
NetworkOptionLabelsFunction · 0.92
NetworkOptionAttachableFunction · 0.92

Tested by

no test coverage detected