Example #1
0
func ExamplePrefix_subnettingAndSupernetting() {
	_, n, err := net.ParseCIDR("203.0.113.0/24")
	if err != nil {
		log.Fatal(err)
	}
	p := ipaddr.NewPrefix(n)
	fmt.Println(p.IP, p.Last(), p.Len(), p.Mask, p.Hostmask())
	fmt.Println()
	ps := p.Subnets(3)
	for _, p := range ps {
		fmt.Println(p)
	}
	fmt.Println()
	fmt.Println(ipaddr.Supernet(ps))
	fmt.Println(ipaddr.Supernet(ps[1:7]))
	fmt.Println(ipaddr.Supernet(ps[:4]))
	fmt.Println(ipaddr.Supernet(ps[4:8]))
	// Output:
	// 203.0.113.0 203.0.113.255 24 ffffff00 000000ff
	//
	// 203.0.113.0/27
	// 203.0.113.32/27
	// 203.0.113.64/27
	// 203.0.113.96/27
	// 203.0.113.128/27
	// 203.0.113.160/27
	// 203.0.113.192/27
	// 203.0.113.224/27
	//
	// 203.0.113.0/24
	// 203.0.113.0/24
	// 203.0.113.0/25
	// 203.0.113.128/25
}
Example #2
0
func TestSupernet(t *testing.T) {
	for i, tt := range supernetTests {
		in, orig := toPrefixes(tt.in), toPrefixes(tt.in)
		want := toPrefix(tt.want)
		out := ipaddr.Supernet(in)
		if !reflect.DeepEqual(out, want) {
			t.Errorf("#%d: got %v; want %v", i, out, want)
		}
		if !reflect.DeepEqual(in, orig) {
			t.Errorf("#%d: %v is corrupted; want %v", i, in, orig)
		}
	}

	ipaddr.Supernet(nil)
}
Example #3
0
func BenchmarkSupernetIPv6(b *testing.B) {
	in := toPrefixes([]string{"2001:db8::/64", "2001:db8:0:1::/64", "2001:db8:0:2::/64", "2001:db8:0:3::/64", "2001:db8:0:4::/64", "2001:db8::/64", "2001:db8::1/64"})

	for i := 0; i < b.N; i++ {
		ipaddr.Supernet(in)
	}
}
Example #4
0
func BenchmarkSupernetIPv4(b *testing.B) {
	in := toPrefixes([]string{"192.168.0.0/24", "192.168.1.0/24", "192.168.2.0/24", "192.168.3.0/24", "192.168.4.0/25", "192.168.101.0/26", "192.168.102.1/27"})

	for i := 0; i < b.N; i++ {
		ipaddr.Supernet(in)
	}
}
Example #5
0
func TestPrefixOverlaps(t *testing.T) {
	for i, tt := range prefixOverlapsTests {
		p1 := toPrefix(tt.in)
		others := toPrefixes(tt.others)
		p2 := ipaddr.Supernet(others)
		if out := p1.Overlaps(p2); out != tt.want {
			t.Errorf("#%d: got %v; want %v", i, out, tt.want)
		}
		if out := p2.Overlaps(p1); out != tt.want {
			t.Errorf("#%d: got %v; want %v", i, out, tt.want)
		}
	}
}
Example #6
0
func TestPrefixSubnets(t *testing.T) {
	for i, tt := range prefixSubnetsTests {
		p := toPrefix(tt.in)
		ps := p.Subnets(tt.n)
		if len(ps) != 1<<uint(tt.n) {
			t.Errorf("#%d: got %v; want %v", i, len(ps), 1<<uint(tt.n))
		}
		for _, p := range ps {
			if p.Len() != tt.l+tt.n {
				t.Errorf("#%d: got %v; want %v", i, p.Len(), tt.l+tt.n)
			}
		}
		if super := ipaddr.Supernet(ps); super == nil {
			for _, p := range ps {
				t.Logf("subnet: %v", p)
			}
			t.Errorf("#%d: got %v; want %v", i, super, p)
		}
	}
}
Example #7
0
func ExamplePrefix_subnettingAndSupernetting() {
	_, n, err := net.ParseCIDR("172.16.0.0/16")
	if err != nil {
		log.Fatal(err)
	}
	p := ipaddr.NewPrefix(n)
	fmt.Println(p.IP, p.Last(), p.Len(), p.Mask, p.Hostmask())
	ps := p.Subnets(3)
	for _, p := range ps {
		fmt.Println(p)
	}
	fmt.Println(ipaddr.Supernet(ps[4:6]))
	// Output:
	// 172.16.0.0 172.16.255.255 16 ffff0000 0000ffff
	// 172.16.0.0/19
	// 172.16.32.0/19
	// 172.16.64.0/19
	// 172.16.96.0/19
	// 172.16.128.0/19
	// 172.16.160.0/19
	// 172.16.192.0/19
	// 172.16.224.0/19
	// 172.16.128.0/18
}
Example #8
0
func BenchmarkSupernetIPv6(b *testing.B) {
	for i := 0; i < b.N; i++ {
		ipaddr.Supernet(aggregatablePrefixesIPv6)
	}
}