func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error { if err := validateID(nid, eid); err != nil { return err } n := d.network(nid) if n == nil { return fmt.Errorf("network id %q not found", nid) } ep := &endpoint{ id: eid, addr: ifInfo.Address(), mac: ifInfo.MacAddress(), } if ep.addr == nil { return fmt.Errorf("create endpoint was not passed interface IP address") } if ep.mac == nil { ep.mac = netutils.GenerateMACFromIP(ep.addr.IP) if err := ifInfo.SetMacAddress(ep.mac); err != nil { return err } } n.addEndpoint(ep) return nil }
// CreateEndpoint assigns the mac, ip and endpoint id for the new container func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error { defer osl.InitOSContext()() if err := validateID(nid, eid); err != nil { return err } n, err := d.getNetwork(nid) if err != nil { return fmt.Errorf("network id %q not found", nid) } ep := &endpoint{ id: eid, nid: nid, addr: ifInfo.Address(), addrv6: ifInfo.AddressIPv6(), mac: ifInfo.MacAddress(), } if ep.addr == nil { return fmt.Errorf("create endpoint was not passed an IP address") } if ep.mac == nil { ep.mac = netutils.GenerateMACFromIP(ep.addr.IP) if err := ifInfo.SetMacAddress(ep.mac); err != nil { return err } } // disallow portmapping -p if opt, ok := epOptions[netlabel.PortMap]; ok { if _, ok := opt.([]types.PortBinding); ok { if len(opt.([]types.PortBinding)) > 0 { logrus.Warnf("%s driver does not support port mappings", macvlanType) } } } // disallow port exposure --expose if opt, ok := epOptions[netlabel.ExposedPorts]; ok { if _, ok := opt.([]types.TransportPort); ok { if len(opt.([]types.TransportPort)) > 0 { logrus.Warnf("%s driver does not support port exposures", macvlanType) } } } if err := d.storeUpdate(ep); err != nil { return fmt.Errorf("failed to save macvlan endpoint %s to store: %v", ep.id[0:7], err) } n.addEndpoint(ep) return nil }
func (d *driver) CreateEndpoint(nid, eid string, ifInfo driverapi.InterfaceInfo, epOptions map[string]interface{}) error { var err error if err = validateID(nid, eid); err != nil { return err } // Since we perform lazy configuration make sure we try // configuring the driver when we enter CreateEndpoint since // CreateNetwork may not be called in every node. if err := d.configure(); err != nil { return err } n := d.network(nid) if n == nil { return fmt.Errorf("network id %q not found", nid) } ep := &endpoint{ id: eid, nid: n.id, addr: ifInfo.Address(), mac: ifInfo.MacAddress(), } if ep.addr == nil { return fmt.Errorf("create endpoint was not passed interface IP address") } if s := n.getSubnetforIP(ep.addr); s == nil { return fmt.Errorf("no matching subnet for IP %q in network %q", ep.addr, nid) } if ep.mac == nil { ep.mac = netutils.GenerateMACFromIP(ep.addr.IP) if err := ifInfo.SetMacAddress(ep.mac); err != nil { return err } } n.addEndpoint(ep) if err := d.writeEndpointToStore(ep); err != nil { return fmt.Errorf("failed to update overlay endpoint %s to local store: %v", ep.id[0:7], err) } return nil }
func (d *driver) CreateEndpoint(nid, eid types.UUID, epInfo driverapi.EndpointInfo, epOptions map[string]interface{}) error { if err := validateID(nid, eid); err != nil { return err } n := d.network(nid) if n == nil { return fmt.Errorf("network id %q not found", nid) } ep := &endpoint{ id: eid, } if epInfo != nil && (len(epInfo.Interfaces()) > 0) { addr := epInfo.Interfaces()[0].Address() ep.addr = &addr ep.mac = epInfo.Interfaces()[0].MacAddress() n.addEndpoint(ep) return nil } ipID, err := d.ipAllocator.GetID() if err != nil { return fmt.Errorf("could not allocate ip from subnet %s: %v", bridgeSubnet.String(), err) } ep.addr = &net.IPNet{ Mask: bridgeSubnet.Mask, } ep.addr.IP = make([]byte, 4) binary.BigEndian.PutUint32(ep.addr.IP, bridgeSubnetInt+ipID) ep.mac = netutils.GenerateMACFromIP(ep.addr.IP) err = epInfo.AddInterface(1, ep.mac, *ep.addr, net.IPNet{}) if err != nil { return fmt.Errorf("could not add interface to endpoint info: %v", err) } n.addEndpoint(ep) return nil }
func electMacAddress(epConfig *endpointConfiguration, ip net.IP) net.HardwareAddr { if epConfig != nil && epConfig.MacAddress != nil { return epConfig.MacAddress } return netutils.GenerateMACFromIP(ip) }