fixed consts + test

This commit is contained in:
Juan Batiz-Benet 2015-01-12 11:33:06 -08:00
parent b2e2374680
commit 8359bd0b54
2 changed files with 22 additions and 5 deletions

12
ip.go
View File

@ -57,7 +57,7 @@ func IsIPLoopback(m ma.Multiaddr) bool {
b := m.Bytes()
// /ip4/127 prefix (_entire_ /8 is loopback...)
if bytes.HasPrefix(b, []byte{4, 127}) {
if bytes.HasPrefix(b, []byte{ma.P_IP4, 127}) {
return true
}
@ -69,10 +69,12 @@ func IsIPLoopback(m ma.Multiaddr) bool {
return false
}
// IPV6 Link Local addresses are non routable.
func IsIPV6LinkLocal(m ma.Multiaddr) bool {
b := m.Bytes()
return bytes.HasPrefix(b, []byte{41, 254, 128})
// IP6 Link Local addresses are non routable. The prefix is technically
// fe80::/10, but we test fe80::/12 for simplicity (no need to mask).
// So far, no hardware interfaces exist long enough to use those 2 bits.
// Send a PR if there is.
func IsIP6LinkLocal(m ma.Multiaddr) bool {
return bytes.HasPrefix(m.Bytes(), []byte{ma.P_IP6, 0xfe, 0x80, 0})
}
// IsIPUnspecified returns whether a Multiaddr is am Unspecified IP address

View File

@ -2,6 +2,7 @@ package manet
import (
"bytes"
"fmt"
"net"
"sync"
"testing"
@ -334,3 +335,17 @@ func TestIPUnspecified(t *testing.T) {
t.Error("IsIPUnspecified failed (IP6Unspecified)")
}
}
func TestIP6LinkLocal(t *testing.T) {
if !IsIP6LinkLocal(IP6LinkLocalLoopback) {
t.Error("IsIP6LinkLocal failed (IP6LinkLocalLoopback)")
}
for a := 0; a < 65536; a++ {
isLinkLocal := (a == 0xfe80)
m := newMultiaddr(t, fmt.Sprintf("/ip6/%x::1", a))
if IsIP6LinkLocal(m) != isLinkLocal {
t.Error("IsIP6LinkLocal failed (%s != %v)", m, isLinkLocal)
}
}
}