github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/daemon/network/settings.go (about)

     1  package network // import "github.com/docker/docker/daemon/network"
     2  
     3  import (
     4  	"net"
     5  	"sync"
     6  
     7  	networktypes "github.com/docker/docker/api/types/network"
     8  	clustertypes "github.com/docker/docker/daemon/cluster/provider"
     9  	"github.com/docker/go-connections/nat"
    10  	"github.com/pkg/errors"
    11  )
    12  
    13  // Settings stores configuration details about the daemon network config
    14  // TODO Windows. Many of these fields can be factored out.,
    15  type Settings struct {
    16  	Bridge                 string
    17  	SandboxID              string
    18  	HairpinMode            bool
    19  	LinkLocalIPv6Address   string
    20  	LinkLocalIPv6PrefixLen int
    21  	Networks               map[string]*EndpointSettings
    22  	Service                *clustertypes.ServiceConfig
    23  	Ports                  nat.PortMap
    24  	SandboxKey             string
    25  	SecondaryIPAddresses   []networktypes.Address
    26  	SecondaryIPv6Addresses []networktypes.Address
    27  	IsAnonymousEndpoint    bool
    28  	HasSwarmEndpoint       bool
    29  }
    30  
    31  // EndpointSettings is a package local wrapper for
    32  // networktypes.EndpointSettings which stores Endpoint state that
    33  // needs to be persisted to disk but not exposed in the api.
    34  type EndpointSettings struct {
    35  	*networktypes.EndpointSettings
    36  	IPAMOperational bool
    37  }
    38  
    39  // AttachmentStore stores the load balancer IP address for a network id.
    40  type AttachmentStore struct {
    41  	sync.Mutex
    42  	// key: networkd id
    43  	// value: load balancer ip address
    44  	networkToNodeLBIP map[string]net.IP
    45  }
    46  
    47  // ResetAttachments clears any existing load balancer IP to network mapping and
    48  // sets the mapping to the given attachments.
    49  func (store *AttachmentStore) ResetAttachments(attachments map[string]string) error {
    50  	store.Lock()
    51  	defer store.Unlock()
    52  	store.clearAttachments()
    53  	for nid, nodeIP := range attachments {
    54  		ip, _, err := net.ParseCIDR(nodeIP)
    55  		if err != nil {
    56  			store.networkToNodeLBIP = make(map[string]net.IP)
    57  			return errors.Wrapf(err, "Failed to parse load balancer address %s", nodeIP)
    58  		}
    59  		store.networkToNodeLBIP[nid] = ip
    60  	}
    61  	return nil
    62  }
    63  
    64  // ClearAttachments clears all the mappings of network to load balancer IP Address.
    65  func (store *AttachmentStore) ClearAttachments() {
    66  	store.Lock()
    67  	defer store.Unlock()
    68  	store.clearAttachments()
    69  }
    70  
    71  func (store *AttachmentStore) clearAttachments() {
    72  	store.networkToNodeLBIP = make(map[string]net.IP)
    73  }
    74  
    75  // GetIPForNetwork return the load balancer IP address for the given network.
    76  func (store *AttachmentStore) GetIPForNetwork(networkID string) (net.IP, bool) {
    77  	store.Lock()
    78  	defer store.Unlock()
    79  	ip, exists := store.networkToNodeLBIP[networkID]
    80  	return ip, exists
    81  }