func (epj *endpointJoinInfo) CopyTo(dstEpj *endpointJoinInfo) error { dstEpj.disableGatewayService = epj.disableGatewayService dstEpj.StaticRoutes = make([]*types.StaticRoute, len(epj.StaticRoutes)) copy(dstEpj.StaticRoutes, epj.StaticRoutes) dstEpj.gw = types.GetIPCopy(epj.gw) dstEpj.gw = types.GetIPCopy(epj.gw6) return nil }
// GetCopy returns a copy of this SandboxInfo structure func (s *Info) GetCopy() *Info { list := make([]*Interface, len(s.Interfaces)) for i, iface := range s.Interfaces { list[i] = iface.GetCopy() } gw := types.GetIPCopy(s.Gateway) gw6 := types.GetIPCopy(s.GatewayIPv6) return &Info{Interfaces: list, Gateway: gw, GatewayIPv6: gw6} }
func (ep *endpoint) SetGatewayIPv6(gw6 net.IP) error { ep.Lock() defer ep.Unlock() ep.joinInfo.gw6 = types.GetIPCopy(gw6) return nil }
func TestSetDefaultGw(t *testing.T) { defer testutils.SetupTestOSContext(t)() d := newDriver() if err := d.configure(nil); err != nil { t.Fatalf("Failed to setup driver config: %v", err) } _, subnetv6, _ := net.ParseCIDR("2001:db8:ea9:9abc:b0c4::/80") var nw *net.IPNet for _, n := range bridgeNetworks { if err := netutils.CheckRouteOverlaps(n); err == nil { nw = n break } } if nw == nil { t.Skipf("Skip as no more automatic networks available") } gw4 := types.GetIPCopy(nw.IP).To4() gw4[3] = 254 gw6 := net.ParseIP("2001:db8:ea9:9abc:b0c4::254") config := &networkConfiguration{ BridgeName: DefaultBridgeName, EnableIPv6: true, FixedCIDRv6: subnetv6, DefaultGatewayIPv4: gw4, DefaultGatewayIPv6: gw6, } genericOption := make(map[string]interface{}) genericOption[netlabel.GenericData] = config err := d.CreateNetwork("dummy", genericOption) if err != nil { t.Fatalf("Failed to create bridge: %v", err) } te := &testEndpoint{} err = d.CreateEndpoint("dummy", "ep", te, nil) if err != nil { t.Fatalf("Failed to create endpoint: %v", err) } err = d.Join("dummy", "ep", "sbox", te, nil) if err != nil { t.Fatalf("Failed to join endpoint: %v", err) } if !gw4.Equal(te.gw) { t.Fatalf("Failed to configure default gateway. Expected %v. Found %v", gw4, te.gw) } if !gw6.Equal(te.gw6) { t.Fatalf("Failed to configure default gateway. Expected %v. Found %v", gw6, te.gw6) } }
func (ep *endpoint) GatewayIPv6() net.IP { ep.Lock() defer ep.Unlock() if ep.joinInfo == nil { return net.IP{} } return types.GetIPCopy(ep.joinInfo.gw6) }
func TestSetDefaultGw(t *testing.T) { if !testutils.IsRunningInContainer() { defer testutils.SetupTestOSContext(t)() } d := newDriver() if err := d.configure(nil); err != nil { t.Fatalf("Failed to setup driver config: %v", err) } _, subnetv6, _ := net.ParseCIDR("2001:db8:ea9:9abc:b0c4::/80") ipdList := getIPv4Data(t, "") gw4 := types.GetIPCopy(ipdList[0].Pool.IP).To4() gw4[3] = 254 gw6 := net.ParseIP("2001:db8:ea9:9abc:b0c4::254") config := &networkConfiguration{ BridgeName: DefaultBridgeName, AddressIPv6: subnetv6, DefaultGatewayIPv4: gw4, DefaultGatewayIPv6: gw6, } genericOption := make(map[string]interface{}) genericOption[netlabel.EnableIPv6] = true genericOption[netlabel.GenericData] = config err := d.CreateNetwork("dummy", genericOption, nil, ipdList, nil) if err != nil { t.Fatalf("Failed to create bridge: %v", err) } te := newTestEndpoint(ipdList[0].Pool, 10) err = d.CreateEndpoint("dummy", "ep", te.Interface(), nil) if err != nil { t.Fatalf("Failed to create endpoint: %v", err) } err = d.Join("dummy", "ep", "sbox", te, nil) if err != nil { t.Fatalf("Failed to join endpoint: %v", err) } if !gw4.Equal(te.gw) { t.Fatalf("Failed to configure default gateway. Expected %v. Found %v", gw4, te.gw) } if !gw6.Equal(te.gw6) { t.Fatalf("Failed to configure default gateway. Expected %v. Found %v", gw6, te.gw6) } }
// NetworkRange calculates the first and last IP addresses in an IPNet func NetworkRange(network *net.IPNet) (net.IP, net.IP) { if network == nil { return nil, nil } firstIP := network.IP.Mask(network.Mask) lastIP := types.GetIPCopy(firstIP) for i := 0; i < len(firstIP); i++ { lastIP[i] = firstIP[i] | ^network.Mask[i] } if network.IP.To4() != nil { firstIP = firstIP.To4() lastIP = lastIP.To4() } return firstIP, lastIP }