From 41a261bdcd87b308fcbaae29c6be6b8da0cb937b Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Sun, 16 Apr 2017 14:04:42 +0000 Subject: [PATCH] Add conversion from CIDR to IPNet --- net/address/address.go | 5 +++++ net/address/address_test.go | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/net/address/address.go b/net/address/address.go index d5fb8e00..89ddf415 100644 --- a/net/address/address.go +++ b/net/address/address.go @@ -160,6 +160,11 @@ func (cidr CIDR) String() string { return fmt.Sprintf("%s/%d", cidr.Addr.String(), cidr.PrefixLen) } +func (cidr CIDR) IPNet() (r *net.IPNet) { + mask := net.CIDRMask(cidr.PrefixLen, 8*net.IPv4len) + return &net.IPNet{IP: cidr.Addr.IP4(), Mask: mask} +} + // FromIP4 converts an ipv4 address to our integer address type func FromIP4(ip4 net.IP) (r Address) { for _, b := range ip4.To4() { diff --git a/net/address/address_test.go b/net/address/address_test.go index 8718fdb6..6b7b3033 100644 --- a/net/address/address_test.go +++ b/net/address/address_test.go @@ -1,6 +1,7 @@ package address import ( + "net" "testing" "testing/quick" @@ -67,3 +68,15 @@ func TestCIDRStartAndEnd(t *testing.T) { require.Equal(t, ip("10.0.0.0"), cidr.Start(), "") require.Equal(t, ip("10.0.1.0"), cidr.End(), "") } + +func TestConversions(t *testing.T) { + addrStr := "10.2.3.0" + cidrStr := addrStr + "/24" + addr := ip(addrStr) + require.Equal(t, addr.String(), addrStr) + require.Equal(t, addr.IP4(), net.ParseIP(addrStr).To4()) + cidr, _ := ParseCIDR(cidrStr) + require.Equal(t, cidr.String(), cidrStr) + _, ipnet, _ := net.ParseCIDR(cidrStr) + require.Equal(t, cidr.IPNet(), ipnet) +}