func (rb *HostgwBackend) Init(extIface *net.Interface, extIP net.IP, httpPort string, ipMasq bool) (*backend.SubnetDef, error) { rb.extIface = extIface rb.extIP = extIP attrs := subnet.LeaseAttrs{ PublicIP: ip.FromIP(extIP), BackendType: "host-gw", HTTPPort: httpPort, } sn, err := rb.sm.AcquireLease(&attrs, rb.stop) if err != nil { if err == task.ErrCanceled { return nil, err } else { return nil, fmt.Errorf("Failed to acquire lease: %v", err) } } if ipMasq { if err := setupIpMasq(sn, rb.sm.GetConfig().Network); err != nil { return nil, fmt.Errorf("Failed to configure ip-masq: %v", err) } } /* NB: docker will create the local route to `sn` */ return &backend.SubnetDef{ Net: sn, MTU: extIface.MTU, }, nil }
/// Implementation func parseSubnetKey(s string) (ip.IP4Net, error) { if parts := subnetRegex.FindStringSubmatch(s); len(parts) == 3 { snIp := net.ParseIP(parts[1]).To4() prefixLen, err := strconv.ParseUint(parts[2], 10, 5) if snIp != nil && err == nil { return ip.IP4Net{IP: ip.FromIP(snIp), PrefixLen: uint(prefixLen)}, nil } } return ip.IP4Net{}, errors.New("Error parsing IP Subnet") }
func newSubnetAttrs(pubIP net.IP, httpPort string, mac net.HardwareAddr) (*subnet.LeaseAttrs, error) { data, err := json.Marshal(&vxlanLeaseAttrs{hardwareAddr(mac)}) if err != nil { return nil, err } return &subnet.LeaseAttrs{ PublicIP: ip.FromIP(pubIP), HTTPPort: httpPort, BackendType: "vxlan", BackendData: json.RawMessage(data), }, nil }
func (m *AllocBackend) Init(extIface *net.Interface, extIP net.IP, httpPort string, ipMasq bool) (*backend.SubnetDef, error) { attrs := subnet.LeaseAttrs{ PublicIP: ip.FromIP(extIP), HTTPPort: httpPort, } sn, err := m.sm.AcquireLease(&attrs, m.stop) if err != nil { if err == task.ErrCanceled { return nil, err } else { return nil, fmt.Errorf("failed to acquire lease: %v", err) } } return &backend.SubnetDef{ Net: sn, MTU: extIface.MTU, }, nil }