MCPcopy
hub / github.com/moby/moby / buildCreateEndpointOptions

Function buildCreateEndpointOptions

daemon/network.go:934–1032  ·  view source on GitHub ↗

buildCreateEndpointOptions builds endpoint options from a given network.

(c *container.Container, n *libnetwork.Network, epConfig *network.EndpointSettings, sb *libnetwork.Sandbox, daemonDNS []netip.Addr)

Source from the content-addressed store, hash-verified

932
933// buildCreateEndpointOptions builds endpoint options from a given network.
934func buildCreateEndpointOptions(c *container.Container, n *libnetwork.Network, epConfig *network.EndpointSettings, sb *libnetwork.Sandbox, daemonDNS []netip.Addr) ([]libnetwork.EndpointOption, error) {
935 var createOptions []libnetwork.EndpointOption
936 genericOptions := make(options.Generic)
937
938 nwName := n.Name()
939
940 if epConfig != nil {
941 if ipam := epConfig.IPAMConfig; ipam != nil {
942 var ipList []net.IP
943 for _, linkIP := range ipam.LinkLocalIPs {
944 if !linkIP.IsValid() {
945 return nil, fmt.Errorf("invalid link-local IP address: %s", ipam.LinkLocalIPs)
946 }
947 ipList = append(ipList, linkIP.AsSlice())
948 }
949
950 if ipam.IPv4Address.IsValid() && !ipam.IPv4Address.Is4() && !ipam.IPv4Address.Is4In6() {
951 return nil, fmt.Errorf("invalid IPv4 address: %s", ipam.IPv4Address)
952 }
953
954 if ipam.IPv6Address.IsValid() && !ipam.IPv6Address.Is6() {
955 return nil, fmt.Errorf("invalid IPv6 address: %s", ipam.IPv6Address)
956 }
957
958 createOptions = append(createOptions, libnetwork.CreateOptionIPAM(ipam.IPv4Address.AsSlice(), ipam.IPv6Address.AsSlice(), ipList))
959 }
960
961 createOptions = append(createOptions, libnetwork.CreateOptionDNSNames(epConfig.DNSNames))
962
963 for k, v := range epConfig.DriverOpts {
964 createOptions = append(createOptions, libnetwork.EndpointOptionGeneric(options.Generic{k: v}))
965 }
966
967 if len(epConfig.DesiredMacAddress) != 0 {
968 genericOptions[netlabel.MacAddress] = net.HardwareAddr(epConfig.DesiredMacAddress)
969 }
970 }
971
972 if svcCfg := c.NetworkSettings.Service; svcCfg != nil {
973 nwID := n.ID()
974
975 var vip net.IP
976 if virtualAddress := svcCfg.VirtualAddresses[nwID]; virtualAddress != nil {
977 vip = net.ParseIP(virtualAddress.IPv4)
978 }
979
980 var portConfigs []*libnetwork.PortConfig
981 for _, portConfig := range svcCfg.ExposedPorts {
982 portConfigs = append(portConfigs, &libnetwork.PortConfig{
983 Name: portConfig.Name,
984 Protocol: libnetwork.PortConfig_Protocol(portConfig.Protocol),
985 TargetPort: portConfig.TargetPort,
986 PublishedPort: portConfig.PublishedPort,
987 })
988 }
989
990 createOptions = append(createOptions, libnetwork.CreateOptionService(svcCfg.Name, svcCfg.ID, vip, portConfigs, svcCfg.Aliases[nwID]))
991 }

Callers 1

connectToNetworkMethod · 0.85

Calls 15

CreateOptionIPAMFunction · 0.92
CreateOptionDNSNamesFunction · 0.92
EndpointOptionGenericFunction · 0.92
PortConfig_ProtocolTypeAlias · 0.92
CreateOptionServiceFunction · 0.92
CreateOptionDNSFunction · 0.92
MapFunction · 0.92
CreateOptionDisableIPv6Function · 0.92
WithNetnsPathFunction · 0.92
ErrorfMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…