upgrade go-cidr to v1.1.0
This commit is contained in:
parent
3877f20e6d
commit
642e3590a2
2
go.mod
2
go.mod
|
@ -12,7 +12,7 @@ require (
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190329064014-6e358769c32a
|
github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190329064014-6e358769c32a
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190103054945-8205d1f41e70
|
github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190103054945-8205d1f41e70
|
||||||
github.com/aliyun/aliyun-tablestore-go-sdk v4.1.2+incompatible
|
github.com/aliyun/aliyun-tablestore-go-sdk v4.1.2+incompatible
|
||||||
github.com/apparentlymart/go-cidr v1.0.1
|
github.com/apparentlymart/go-cidr v1.1.0
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0
|
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0
|
||||||
github.com/apparentlymart/go-userdirs v0.0.0-20190512014041-4a23807e62b9
|
github.com/apparentlymart/go-userdirs v0.0.0-20190512014041-4a23807e62b9
|
||||||
github.com/apparentlymart/go-versions v1.0.0
|
github.com/apparentlymart/go-versions v1.0.0
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -76,6 +76,8 @@ github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0 h1:JaCC8jz0zdMLk2m+
|
||||||
github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0/go.mod h1:LzD22aAzDP8/dyiCKFp31He4m2GPjl0AFyzDtZzUu9M=
|
github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0/go.mod h1:LzD22aAzDP8/dyiCKFp31He4m2GPjl0AFyzDtZzUu9M=
|
||||||
github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U=
|
github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U=
|
||||||
github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
|
github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
|
||||||
|
github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU=
|
||||||
|
github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I=
|
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I=
|
||||||
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
||||||
|
|
|
@ -28,6 +28,16 @@ import (
|
||||||
// For example, 10.3.0.0/16, extended by 8 bits, with a network number
|
// For example, 10.3.0.0/16, extended by 8 bits, with a network number
|
||||||
// of 5, becomes 10.3.5.0/24 .
|
// of 5, becomes 10.3.5.0/24 .
|
||||||
func Subnet(base *net.IPNet, newBits int, num int) (*net.IPNet, error) {
|
func Subnet(base *net.IPNet, newBits int, num int) (*net.IPNet, error) {
|
||||||
|
return SubnetBig(base, newBits, big.NewInt(int64(num)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubnetBig takes a parent CIDR range and creates a subnet within it with the
|
||||||
|
// given number of additional prefix bits and the given network number. It
|
||||||
|
// differs from Subnet in that it takes a *big.Int for the num, instead of an int.
|
||||||
|
//
|
||||||
|
// For example, 10.3.0.0/16, extended by 8 bits, with a network number of 5,
|
||||||
|
// becomes 10.3.5.0/24 .
|
||||||
|
func SubnetBig(base *net.IPNet, newBits int, num *big.Int) (*net.IPNet, error) {
|
||||||
ip := base.IP
|
ip := base.IP
|
||||||
mask := base.Mask
|
mask := base.Mask
|
||||||
|
|
||||||
|
@ -39,24 +49,32 @@ func Subnet(base *net.IPNet, newBits int, num int) (*net.IPNet, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
maxNetNum := uint64(1<<uint64(newBits)) - 1
|
maxNetNum := uint64(1<<uint64(newBits)) - 1
|
||||||
if uint64(num) > maxNetNum {
|
if num.Uint64() > maxNetNum {
|
||||||
return nil, fmt.Errorf("prefix extension of %d does not accommodate a subnet numbered %d", newBits, num)
|
return nil, fmt.Errorf("prefix extension of %d does not accommodate a subnet numbered %d", newBits, num)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &net.IPNet{
|
return &net.IPNet{
|
||||||
IP: insertNumIntoIP(ip, big.NewInt(int64(num)), newPrefixLen),
|
IP: insertNumIntoIP(ip, num, newPrefixLen),
|
||||||
Mask: net.CIDRMask(newPrefixLen, addrLen),
|
Mask: net.CIDRMask(newPrefixLen, addrLen),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Host takes a parent CIDR range and turns it into a host IP address with
|
// Host takes a parent CIDR range and turns it into a host IP address with the
|
||||||
// the given host number.
|
// given host number.
|
||||||
//
|
//
|
||||||
// For example, 10.3.0.0/16 with a host number of 2 gives 10.3.0.2.
|
// For example, 10.3.0.0/16 with a host number of 2 gives 10.3.0.2.
|
||||||
func Host(base *net.IPNet, num int) (net.IP, error) {
|
func Host(base *net.IPNet, num int) (net.IP, error) {
|
||||||
|
return HostBig(base, big.NewInt(int64(num)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// HostBig takes a parent CIDR range and turns it into a host IP address with
|
||||||
|
// the given host number. It differs from Host in that it takes a *big.Int for
|
||||||
|
// the num, instead of an int.
|
||||||
|
//
|
||||||
|
// For example, 10.3.0.0/16 with a host number of 2 gives 10.3.0.2.
|
||||||
|
func HostBig(base *net.IPNet, num *big.Int) (net.IP, error) {
|
||||||
ip := base.IP
|
ip := base.IP
|
||||||
mask := base.Mask
|
mask := base.Mask
|
||||||
bigNum := big.NewInt(int64(num))
|
|
||||||
|
|
||||||
parentLen, addrLen := mask.Size()
|
parentLen, addrLen := mask.Size()
|
||||||
hostLen := addrLen - parentLen
|
hostLen := addrLen - parentLen
|
||||||
|
@ -65,11 +83,11 @@ func Host(base *net.IPNet, num int) (net.IP, error) {
|
||||||
maxHostNum.Lsh(maxHostNum, uint(hostLen))
|
maxHostNum.Lsh(maxHostNum, uint(hostLen))
|
||||||
maxHostNum.Sub(maxHostNum, big.NewInt(1))
|
maxHostNum.Sub(maxHostNum, big.NewInt(1))
|
||||||
|
|
||||||
numUint64 := big.NewInt(int64(bigNum.Uint64()))
|
numUint64 := big.NewInt(int64(num.Uint64()))
|
||||||
if bigNum.Cmp(big.NewInt(0)) == -1 {
|
if num.Cmp(big.NewInt(0)) == -1 {
|
||||||
numUint64.Neg(bigNum)
|
numUint64.Neg(num)
|
||||||
numUint64.Sub(numUint64, big.NewInt(int64(1)))
|
numUint64.Sub(numUint64, big.NewInt(int64(1)))
|
||||||
bigNum.Sub(maxHostNum, numUint64)
|
num.Sub(maxHostNum, numUint64)
|
||||||
}
|
}
|
||||||
|
|
||||||
if numUint64.Cmp(maxHostNum) == 1 {
|
if numUint64.Cmp(maxHostNum) == 1 {
|
||||||
|
@ -81,7 +99,7 @@ func Host(base *net.IPNet, num int) (net.IP, error) {
|
||||||
} else {
|
} else {
|
||||||
bitlength = 128
|
bitlength = 128
|
||||||
}
|
}
|
||||||
return insertNumIntoIP(ip, bigNum, bitlength), nil
|
return insertNumIntoIP(ip, num, bitlength), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddressRange returns the first and last addresses in the given CIDR range.
|
// AddressRange returns the first and last addresses in the given CIDR range.
|
||||||
|
|
|
@ -87,7 +87,7 @@ github.com/aliyun/aliyun-tablestore-go-sdk/tablestore/search
|
||||||
github.com/antchfx/xpath
|
github.com/antchfx/xpath
|
||||||
# github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0
|
# github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0
|
||||||
github.com/antchfx/xquery/xml
|
github.com/antchfx/xquery/xml
|
||||||
# github.com/apparentlymart/go-cidr v1.0.1
|
# github.com/apparentlymart/go-cidr v1.1.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/apparentlymart/go-cidr/cidr
|
github.com/apparentlymart/go-cidr/cidr
|
||||||
# github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0
|
# github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0
|
||||||
|
|
Loading…
Reference in New Issue