From 8359bd0b5448ce5ad19d27379789d91594a971bd Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Mon, 12 Jan 2015 11:33:06 -0800 Subject: [PATCH] fixed consts + test --- ip.go | 12 +++++++----- net_test.go | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/ip.go b/ip.go index d0e2696..b715aed 100644 --- a/ip.go +++ b/ip.go @@ -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 diff --git a/net_test.go b/net_test.go index 8261a35..dba4efb 100644 --- a/net_test.go +++ b/net_test.go @@ -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) + } + } +}