diff --git a/daemon/libnetwork/drivers/bridge/bridge_linux_test.go b/daemon/libnetwork/drivers/bridge/bridge_linux_test.go index 7d9390603c..e223bbd241 100644 --- a/daemon/libnetwork/drivers/bridge/bridge_linux_test.go +++ b/daemon/libnetwork/drivers/bridge/bridge_linux_test.go @@ -1181,10 +1181,10 @@ func TestSetDefaultGw(t *testing.T) { } ipam4 := getIPv4Data(t) - gw4 := types.GetIPCopy(ipam4[0].Pool.IP).To4() + gw4 := slices.Clone(ipam4[0].Pool.IP).To4() gw4[3] = 254 ipam6 := getIPv6Data(t) - gw6 := types.GetIPCopy(ipam6[0].Pool.IP) + gw6 := slices.Clone(ipam6[0].Pool.IP) gw6[15] = 0x42 option := map[string]any{ diff --git a/daemon/libnetwork/endpoint_info.go b/daemon/libnetwork/endpoint_info.go index 4e73e2f334..63cfb46cb4 100644 --- a/daemon/libnetwork/endpoint_info.go +++ b/daemon/libnetwork/endpoint_info.go @@ -372,7 +372,7 @@ func (ep *Endpoint) Gateway() net.IP { return net.IP{} } - return types.GetIPCopy(ep.joinInfo.gw) + return slices.Clone(ep.joinInfo.gw) } // GatewayIPv6 returns the IPv6 gateway assigned by the driver. @@ -385,7 +385,7 @@ func (ep *Endpoint) GatewayIPv6() net.IP { return net.IP{} } - return types.GetIPCopy(ep.joinInfo.gw6) + return slices.Clone(ep.joinInfo.gw6) } // SetGateway sets the default IPv4 gateway when a container joins the endpoint. @@ -393,7 +393,7 @@ func (ep *Endpoint) SetGateway(gw net.IP) error { ep.mu.Lock() defer ep.mu.Unlock() - ep.joinInfo.gw = types.GetIPCopy(gw) + ep.joinInfo.gw = slices.Clone(gw) return nil } @@ -402,7 +402,7 @@ func (ep *Endpoint) SetGatewayIPv6(gw6 net.IP) error { ep.mu.Lock() defer ep.mu.Unlock() - ep.joinInfo.gw6 = types.GetIPCopy(gw6) + ep.joinInfo.gw6 = slices.Clone(gw6) return nil } @@ -510,7 +510,7 @@ func (epj *endpointJoinInfo) CopyTo(dstEpj *endpointJoinInfo) error { copy(dstEpj.StaticRoutes, epj.StaticRoutes) dstEpj.driverTableEntries = make([]*tableEntry, len(epj.driverTableEntries)) copy(dstEpj.driverTableEntries, epj.driverTableEntries) - dstEpj.gw = types.GetIPCopy(epj.gw) - dstEpj.gw6 = types.GetIPCopy(epj.gw6) + dstEpj.gw = slices.Clone(epj.gw) + dstEpj.gw6 = slices.Clone(epj.gw6) return nil } diff --git a/daemon/libnetwork/types/types.go b/daemon/libnetwork/types/types.go index 2387862b45..ef3c799ce0 100644 --- a/daemon/libnetwork/types/types.go +++ b/daemon/libnetwork/types/types.go @@ -5,6 +5,7 @@ import ( "bytes" "fmt" "net" + "slices" "strconv" "strings" "syscall" @@ -111,9 +112,9 @@ func (p PortBinding) ContainerAddr() (net.Addr, error) { func (p *PortBinding) GetCopy() PortBinding { return PortBinding{ Proto: p.Proto, - IP: GetIPCopy(p.IP), + IP: slices.Clone(p.IP), Port: p.Port, - HostIP: GetIPCopy(p.HostIP), + HostIP: slices.Clone(p.HostIP), HostPort: p.HostPort, HostPortEnd: p.HostPortEnd, } @@ -214,16 +215,6 @@ func ParseProtocol(s string) Protocol { } } -// GetIPCopy returns a copy of the passed IP address -func GetIPCopy(from net.IP) net.IP { - if from == nil { - return nil - } - to := make(net.IP, len(from)) - copy(to, from) - return to -} - // GetIPNetCopy returns a copy of the passed IP Network func GetIPNetCopy(from *net.IPNet) *net.IPNet { if from == nil { @@ -231,7 +222,7 @@ func GetIPNetCopy(from *net.IPNet) *net.IPNet { } bm := make(net.IPMask, len(from.Mask)) copy(bm, from.Mask) - return &net.IPNet{IP: GetIPCopy(from.IP), Mask: bm} + return &net.IPNet{IP: slices.Clone(from.IP), Mask: bm} } // GetIPNetCanonical returns the canonical form for the passed network @@ -292,7 +283,7 @@ func GetHostPartIP(ip net.IP, mask net.IPMask) (net.IP, error) { } // Compute host portion - out := GetIPCopy(ip) + out := slices.Clone(ip) for i := 0; i < len(mask[ms:]); i++ { out[is+i] &= ^mask[ms+i] } @@ -311,7 +302,7 @@ func GetBroadcastIP(ip net.IP, mask net.IPMask) (net.IP, error) { } // Compute broadcast address - out := GetIPCopy(ip) + out := slices.Clone(ip) for i := 0; i < len(mask[ms:]); i++ { out[is+i] |= ^mask[ms+i] } @@ -348,7 +339,7 @@ func (r *StaticRoute) GetCopy() *StaticRoute { return &StaticRoute{ Destination: GetIPNetCopy(r.Destination), RouteType: r.RouteType, - NextHop: GetIPCopy(r.NextHop), + NextHop: slices.Clone(r.NextHop), } }