diff --git a/convert.go b/convert.go index 435814b..d1dc7af 100644 --- a/convert.go +++ b/convert.go @@ -1,4 +1,4 @@ -package net +package manet import ( "fmt" @@ -70,6 +70,13 @@ func FromNetAddr(a net.Addr) (ma.Multiaddr, error) { } return FromIP(ac.IP) + case "ip+net": + ac, ok := a.(*net.IPNet) + if !ok { + return nil, errIncorrectNetAddr + } + return FromIP(ac.IP) + default: return nil, fmt.Errorf("unknown network %v", a.Network()) } diff --git a/convert_test.go b/convert_test.go index cdcdc6c..4064f96 100644 --- a/convert_test.go +++ b/convert_test.go @@ -1,4 +1,4 @@ -package net +package manet import ( "net" diff --git a/doc.go b/doc.go index d73b865..040ad3f 100644 --- a/doc.go +++ b/doc.go @@ -1,5 +1,5 @@ -// Package net provides Multiaddr specific versions of common +// Package manet provides Multiaddr specific versions of common // functions in stdlib's net package. This means wrappers of // standard net symbols like net.Dial and net.Listen, as well // as conversion to/from net.Addr. -package net +package manet diff --git a/net.go b/net.go index 07bb3c1..e577d0a 100644 --- a/net.go +++ b/net.go @@ -1,4 +1,4 @@ -package net +package manet import ( "fmt" @@ -216,3 +216,20 @@ func Listen(laddr ma.Multiaddr) (Listener, error) { laddr: laddr, }, nil } + +// InterfaceMultiaddrs will return the addresses matching net.InterfaceAddrs +func InterfaceMultiaddrs() ([]ma.Multiaddr, error) { + addrs, err := net.InterfaceAddrs() + if err != nil { + return nil, err + } + + maddrs := make([]ma.Multiaddr, len(addrs)) + for i, a := range addrs { + maddrs[i], err = FromNetAddr(a) + if err != nil { + return nil, err + } + } + return maddrs, nil +} diff --git a/net_test.go b/net_test.go index 8bdddc8..c212c7c 100644 --- a/net_test.go +++ b/net_test.go @@ -1,4 +1,4 @@ -package net +package manet import ( "bytes"