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  }