github.com/rootless-containers/rootlesskit/v2@v2.3.4/pkg/network/iputils/iputils.go (about) 1 package iputils 2 3 import ( 4 "encoding/binary" 5 "fmt" 6 "math" 7 "net" 8 ) 9 10 func AddIPInt(ip net.IP, i int) (net.IP, error) { 11 ip = ip.To4() 12 if ip == nil { 13 return nil, fmt.Errorf("expected IPv4 address, got %s", ip.String()) 14 } 15 ui32 := binary.BigEndian.Uint32(ip) 16 resInt64 := int64(ui32) + int64(i) 17 if resInt64 > int64(math.MaxUint32) { 18 return nil, fmt.Errorf("%s + %d overflows", ip.String(), i) 19 } 20 res := make(net.IP, 4) 21 binary.BigEndian.PutUint32(res, uint32(resInt64)) 22 return res, nil 23 }