func (container *Container) buildEndpointInfo(ep libnetwork.Endpoint, networkSettings *network.Settings) (*network.Settings, error) { if ep == nil { return nil, derr.ErrorCodeEmptyEndpoint } if networkSettings == nil { return nil, derr.ErrorCodeEmptyNetwork } epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return networkSettings, nil } iface := epInfo.Iface() if iface == nil { return networkSettings, nil } ones, _ := iface.Address().Mask.Size() networkSettings.IPAddress = iface.Address().IP.String() networkSettings.IPPrefixLen = ones if iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() networkSettings.GlobalIPv6Address = iface.AddressIPv6().IP.String() networkSettings.GlobalIPv6PrefixLen = onesv6 } return networkSettings, nil }
func buildEndpointResource(e libnetwork.Endpoint) types.EndpointResource { er := types.EndpointResource{} if e == nil { return er } er.EndpointID = e.ID() er.Name = e.Name() ei := e.Info() if ei == nil { return er } if iface := ei.Iface(); iface != nil { if mac := iface.MacAddress(); mac != nil { er.MacAddress = mac.String() } if ip := iface.Address(); ip != nil && len(ip.IP) > 0 { er.IPv4Address = ip.String() } if ipv6 := iface.AddressIPv6(); ipv6 != nil && len(ipv6.IP) > 0 { er.IPv6Address = ipv6.String() } } return er }
func (container *Container) buildEndpointInfo(ep libnetwork.Endpoint, networkSettings *network.Settings) (*network.Settings, error) { if ep == nil { return nil, fmt.Errorf("invalid endpoint while building port map info") } if networkSettings == nil { return nil, fmt.Errorf("invalid networksettings while building port map info") } epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return networkSettings, nil } iface := epInfo.Iface() if iface == nil { return networkSettings, nil } ones, _ := iface.Address().Mask.Size() networkSettings.IPAddress = iface.Address().IP.String() networkSettings.IPPrefixLen = ones if iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() networkSettings.GlobalIPv6Address = iface.AddressIPv6().IP.String() networkSettings.GlobalIPv6PrefixLen = onesv6 } return networkSettings, nil }
func (daemon *Daemon) getRunzAnet(ep libnetwork.Endpoint) (specs.Anet, error) { var ( linkName string lowerLink string defRouter string ) epInfo := ep.Info() if epInfo == nil { return specs.Anet{}, fmt.Errorf("invalid endpoint") } nw, err := daemon.GetNetworkByName(ep.Network()) if err != nil { return specs.Anet{}, fmt.Errorf("Failed to get network %s: %v", ep.Network(), err) } // Evaluate default router, linkname and lowerlink for interface endpoint switch nw.Type() { case "bridge": defRouter = epInfo.Gateway().String() linkName = "net0" // Should always be net0 for a container // TODO We construct lowerlink here exactly as done for solaris bridge // initialization. Need modular code to reuse. options := nw.Info().DriverOptions() nwName := options["com.docker.network.bridge.name"] lastChar := nwName[len(nwName)-1:] if _, err = strconv.Atoi(lastChar); err != nil { lowerLink = nwName + "_0" } else { lowerLink = nwName } case "overlay": defRouter = "" linkName = "net1" // TODO Follows generateVxlanName() in solaris overlay. id := nw.ID() if len(nw.ID()) > 12 { id = nw.ID()[:12] } lowerLink = "vx_" + id + "_0" } runzanet := specs.Anet{ Linkname: linkName, Lowerlink: lowerLink, Allowedaddr: epInfo.Iface().Address().String(), Configallowedaddr: "true", Defrouter: defRouter, Linkprotection: "mac-nospoof, ip-nospoof", Macaddress: epInfo.Iface().MacAddress().String(), } return runzanet, nil }
func (container *Container) buildEndpointInfo(ep libnetwork.Endpoint, networkSettings *network.Settings) (*network.Settings, error) { if ep == nil { return nil, fmt.Errorf("invalid endpoint while building port map info") } if networkSettings == nil { return nil, fmt.Errorf("invalid networksettings while building port map info") } epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return networkSettings, nil } ifaceList := epInfo.InterfaceList() if len(ifaceList) == 0 { return networkSettings, nil } iface := ifaceList[0] ones, _ := iface.Address().Mask.Size() networkSettings.IPAddress = iface.Address().IP.String() networkSettings.IPPrefixLen = ones if iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() networkSettings.GlobalIPv6Address = iface.AddressIPv6().IP.String() networkSettings.GlobalIPv6PrefixLen = onesv6 } if len(ifaceList) == 1 { return networkSettings, nil } networkSettings.SecondaryIPAddresses = make([]network.Address, 0, len(ifaceList)-1) networkSettings.SecondaryIPv6Addresses = make([]network.Address, 0, len(ifaceList)-1) for _, iface := range ifaceList[1:] { ones, _ := iface.Address().Mask.Size() addr := network.Address{Addr: iface.Address().IP.String(), PrefixLen: ones} networkSettings.SecondaryIPAddresses = append(networkSettings.SecondaryIPAddresses, addr) if iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() addrv6 := network.Address{Addr: iface.AddressIPv6().IP.String(), PrefixLen: onesv6} networkSettings.SecondaryIPv6Addresses = append(networkSettings.SecondaryIPv6Addresses, addrv6) } } return networkSettings, nil }
func (container *Container) buildEndpointInfo(n libnetwork.Network, ep libnetwork.Endpoint, networkSettings *network.Settings) (*network.Settings, error) { if ep == nil { return nil, derr.ErrorCodeEmptyEndpoint } if networkSettings == nil { return nil, derr.ErrorCodeEmptyNetwork } epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return networkSettings, nil } if _, ok := networkSettings.Networks[n.Name()]; !ok { networkSettings.Networks[n.Name()] = new(network.EndpointSettings) } networkSettings.Networks[n.Name()].EndpointID = ep.ID() iface := epInfo.Iface() if iface == nil { return networkSettings, nil } if iface.Address() != nil { ones, _ := iface.Address().Mask.Size() networkSettings.Networks[n.Name()].IPAddress = iface.Address().IP.String() networkSettings.Networks[n.Name()].IPPrefixLen = ones } if iface.AddressIPv6() != nil && iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() networkSettings.Networks[n.Name()].GlobalIPv6Address = iface.AddressIPv6().IP.String() networkSettings.Networks[n.Name()].GlobalIPv6PrefixLen = onesv6 } driverInfo, err := ep.DriverInfo() if err != nil { return nil, err } if driverInfo == nil { // It is not an error for epInfo to be nil return networkSettings, nil } if mac, ok := driverInfo[netlabel.MacAddress]; ok { networkSettings.Networks[n.Name()].MacAddress = mac.(net.HardwareAddr).String() } return networkSettings, nil }
func (container *Container) updateJoinInfo(n libnetwork.Network, ep libnetwork.Endpoint) error { epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return nil } container.NetworkSettings.Networks[n.Name()].Gateway = epInfo.Gateway().String() if epInfo.GatewayIPv6().To16() != nil { container.NetworkSettings.Networks[n.Name()].IPv6Gateway = epInfo.GatewayIPv6().String() } return nil }
func (container *Container) updateJoinInfo(ep libnetwork.Endpoint) error { epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return nil } container.NetworkSettings.Gateway = epInfo.Gateway().String() if epInfo.GatewayIPv6().To16() != nil { container.NetworkSettings.IPv6Gateway = epInfo.GatewayIPv6().String() } container.NetworkSettings.SandboxKey = epInfo.SandboxKey() return nil }
// BuildEndpointInfo sets endpoint-related fields on container.NetworkSettings based on the provided network and endpoint. func (container *Container) BuildEndpointInfo(n libnetwork.Network, ep libnetwork.Endpoint) error { if ep == nil { return errInvalidEndpoint } networkSettings := container.NetworkSettings if networkSettings == nil { return errInvalidNetwork } epInfo := ep.Info() if epInfo == nil { // It is not an error to get an empty endpoint info return nil } if _, ok := networkSettings.Networks[n.Name()]; !ok { networkSettings.Networks[n.Name()] = &network.EndpointSettings{ EndpointSettings: &networktypes.EndpointSettings{}, } } networkSettings.Networks[n.Name()].NetworkID = n.ID() networkSettings.Networks[n.Name()].EndpointID = ep.ID() iface := epInfo.Iface() if iface == nil { return nil } if iface.MacAddress() != nil { networkSettings.Networks[n.Name()].MacAddress = iface.MacAddress().String() } if iface.Address() != nil { ones, _ := iface.Address().Mask.Size() networkSettings.Networks[n.Name()].IPAddress = iface.Address().IP.String() networkSettings.Networks[n.Name()].IPPrefixLen = ones } if iface.AddressIPv6() != nil && iface.AddressIPv6().IP.To16() != nil { onesv6, _ := iface.AddressIPv6().Mask.Size() networkSettings.Networks[n.Name()].GlobalIPv6Address = iface.AddressIPv6().IP.String() networkSettings.Networks[n.Name()].GlobalIPv6PrefixLen = onesv6 } return nil }
func buildEndpointResource(ep libnetwork.Endpoint) *endpointResource { r := &endpointResource{} var iplist []string if ep != nil { r.Name = ep.Name() r.ID = ep.ID() r.Network = ep.Network() // Build a list of ip addrs on this endpoint. for _, iface := range ep.Info().InterfaceList() { if iface.Address().IP != nil && len(iface.Address().IP) > 0 { ip := iface.Address().IP.String() iplist = append(iplist, ip) } } r.InterfaceList = iplist } return r }