Commit 8359bd0b authored by Juan Batiz-Benet's avatar Juan Batiz-Benet

fixed consts + test

parent b2e23746
......@@ -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
......
......@@ -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)
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment