package manet
import (
"net"
ma "github.com/multiformats/go-multiaddr"
)
var (
IP4Loopback = ma .StringCast ("/ip4/127.0.0.1" )
IP6Loopback = ma .StringCast ("/ip6/::1" )
IP4MappedIP6Loopback = ma .StringCast ("/ip6/::ffff:127.0.0.1" )
)
var (
IP4Unspecified = ma .StringCast ("/ip4/0.0.0.0" )
IP6Unspecified = ma .StringCast ("/ip6/::" )
)
func IsThinWaist (m ma .Multiaddr ) bool {
m = zoneless (m )
if m == nil {
return false
}
p := m .Protocols ()
if len (p ) == 0 {
return false
}
if p [0 ].Code != ma .P_IP4 && p [0 ].Code != ma .P_IP6 {
return false
}
if len (p ) == 1 {
return true
}
switch p [1 ].Code {
case ma .P_TCP , ma .P_UDP , ma .P_IP4 , ma .P_IP6 :
return true
default :
return false
}
}
func IsIPLoopback (m ma .Multiaddr ) bool {
m = zoneless (m )
if m == nil {
return false
}
c , _ := ma .SplitFirst (m )
if c == nil {
return false
}
switch c .Protocol ().Code {
case ma .P_IP4 , ma .P_IP6 :
return net .IP (c .RawValue ()).IsLoopback ()
}
return false
}
func IsIP6LinkLocal (m ma .Multiaddr ) bool {
m = zoneless (m )
if m == nil {
return false
}
c , _ := ma .SplitFirst (m )
if c == nil || c .Protocol ().Code != ma .P_IP6 {
return false
}
ip := net .IP (c .RawValue ())
return ip .IsLinkLocalMulticast () || ip .IsLinkLocalUnicast ()
}
func IsIPUnspecified (m ma .Multiaddr ) bool {
m = zoneless (m )
if m == nil {
return false
}
c , _ := ma .SplitFirst (m )
return net .IP (c .RawValue ()).IsUnspecified ()
}
func zoneless(m ma .Multiaddr ) ma .Multiaddr {
head , tail := ma .SplitFirst (m )
if head == nil {
return nil
}
if head .Protocol ().Code == ma .P_IP6ZONE {
if tail == nil {
return nil
}
tailhead , _ := ma .SplitFirst (tail )
if tailhead .Protocol ().Code != ma .P_IP6 {
return nil
}
return tail
} else {
return m
}
}
func IsNAT64IPv4ConvertedIPv6Addr (addr ma .Multiaddr ) bool {
c , _ := ma .SplitFirst (addr )
return c != nil && c .Protocol ().Code == ma .P_IP6 &&
inAddrRange (c .RawValue (), nat64 )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .