buildCreateEndpointOptions builds endpoint options from a given network.
(c *container.Container, n *libnetwork.Network, epConfig *network.EndpointSettings, sb *libnetwork.Sandbox, daemonDNS []netip.Addr)
| 932 | |
| 933 | // buildCreateEndpointOptions builds endpoint options from a given network. |
| 934 | func 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 | } |
no test coverage detected
searching dependent graphs…