daemon/libnetwork: replace IpamInfo.CopyTo with IpamInfo.Copy()

The IpamInfo.CopyTo function expected the caller to construct an
IpamInfo to copy to, but all callsites created an empty struct.
In addition, `CopyTo` would never return an error, so the error
return was redundant.

Replace it with a `Copy()` function, which makes it easier to
consume.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn
2025-08-10 14:31:14 +02:00
parent 2f74f245b6
commit cfad3ed6b9

View File

@@ -330,28 +330,31 @@ func (c *IpamConf) Copy() *IpamConf {
}
}
// CopyTo deep copies to the destination IpamInfo
func (i *IpamInfo) CopyTo(dstI *IpamInfo) error {
dstI.PoolID = i.PoolID
if i.Meta != nil {
dstI.Meta = make(map[string]string)
for k, v := range i.Meta {
dstI.Meta[k] = v
}
// Copy returns a deep copy of [IpamInfo]. If the receiver is nil,
// Copy returns nil.
func (i *IpamInfo) Copy() *IpamInfo {
if i == nil {
return nil
}
dstI.AddressSpace = i.AddressSpace
dstI.Pool = types.GetIPNetCopy(i.Pool)
dstI.Gateway = types.GetIPNetCopy(i.Gateway)
if i.AuxAddresses != nil {
dstI.AuxAddresses = make(map[string]*net.IPNet)
var aux map[string]*net.IPNet
if i.IPAMData.AuxAddresses != nil {
aux = make(map[string]*net.IPNet, len(i.IPAMData.AuxAddresses))
for k, v := range i.AuxAddresses {
dstI.AuxAddresses[k] = types.GetIPNetCopy(v)
aux[k] = types.GetIPNetCopy(v)
}
}
return nil
return &IpamInfo{
PoolID: i.PoolID,
Meta: maps.Clone(i.Meta),
IPAMData: driverapi.IPAMData{
AddressSpace: i.AddressSpace,
Pool: types.GetIPNetCopy(i.IPAMData.Pool),
Gateway: types.GetIPNetCopy(i.IPAMData.Gateway),
AuxAddresses: aux,
},
}
}
func (n *Network) validateConfiguration() error {
@@ -505,24 +508,16 @@ func (n *Network) CopyTo(o datastore.KVObject) error {
dstN.ipamV4Config = append(dstN.ipamV4Config, c.Copy())
}
for _, v4info := range n.ipamV4Info {
dstV4Info := &IpamInfo{}
if err := v4info.CopyTo(dstV4Info); err != nil {
return err
}
dstN.ipamV4Info = append(dstN.ipamV4Info, dstV4Info)
for _, inf := range n.ipamV4Info {
dstN.ipamV4Info = append(dstN.ipamV4Info, inf.Copy())
}
for _, c := range n.ipamV6Config {
dstN.ipamV6Config = append(dstN.ipamV6Config, c.Copy())
}
for _, v6info := range n.ipamV6Info {
dstV6Info := &IpamInfo{}
if err := v6info.CopyTo(dstV6Info); err != nil {
return err
}
dstN.ipamV6Info = append(dstN.ipamV6Info, dstV6Info)
for _, inf := range n.ipamV6Info {
dstN.ipamV6Info = append(dstN.ipamV6Info, inf.Copy())
}
dstN.generic = options.Generic{}
@@ -1786,20 +1781,12 @@ func (n *Network) IpamInfo() (ipamV4Info []*IpamInfo, ipamV6Info []*IpamInfo) {
ipamV4Info = make([]*IpamInfo, len(n.ipamV4Info))
for i, info := range n.ipamV4Info {
ic := &IpamInfo{}
if err := info.CopyTo(ic); err != nil {
log.G(context.TODO()).WithError(err).Error("Error copying IPv4 IPAM config")
}
ipamV4Info[i] = ic
ipamV4Info[i] = info.Copy()
}
ipamV6Info = make([]*IpamInfo, len(n.ipamV6Info))
for i, info := range n.ipamV6Info {
ic := &IpamInfo{}
if err := info.CopyTo(ic); err != nil {
log.G(context.TODO()).WithError(err).Error("Error copying IPv6 IPAM config")
}
ipamV6Info[i] = ic
ipamV6Info[i] = info.Copy()
}
return ipamV4Info, ipamV6Info