Просмотр исходного кода

Fix broadcast addrs for nets smaller than /8

Jakob Borg 11 лет назад
Родитель
Сommit
73f5c47fe2
2 измененных файлов с 31 добавлено и 1 удалено
  1. 1 1
      beacon/beacon.go
  2. 30 0
      beacon/beacon_test.go

+ 1 - 1
beacon/beacon.go

@@ -124,7 +124,7 @@ func bcast(ip *net.IPNet) *net.IPNet {
 
 	offset := len(bc.IP) - len(bc.Mask)
 	for i := range bc.IP {
-		if i-offset > 0 {
+		if i-offset >= 0 {
 			bc.IP[i] = ip.IP[i] | ^ip.Mask[i-offset]
 		}
 	}

+ 30 - 0
beacon/beacon_test.go

@@ -0,0 +1,30 @@
+package beacon
+
+import (
+	"net"
+	"testing"
+)
+
+var addrToBcast = []struct {
+	addr, bcast string
+}{
+	{"172.16.32.33/25", "172.16.32.127/25"},
+	{"172.16.32.129/25", "172.16.32.255/25"},
+	{"172.16.32.33/24", "172.16.32.255/24"},
+	{"172.16.32.33/22", "172.16.35.255/22"},
+	{"172.16.32.33/0", "255.255.255.255/0"},
+	{"172.16.32.33/32", "172.16.32.33/32"},
+}
+
+func TestBroadcastAddr(t *testing.T) {
+	for _, tc := range addrToBcast {
+		_, net, err := net.ParseCIDR(tc.addr)
+		if err != nil {
+			t.Fatal(err)
+		}
+		bc := bcast(net).String()
+		if bc != tc.bcast {
+			t.Errorf("%q != %q", bc, tc.bcast)
+		}
+	}
+}