From: Mikio Hara Date: Tue, 22 Jan 2013 22:11:22 +0000 (+0900) Subject: net: don't return nil interface address on netbsd X-Git-Tag: go1.1rc2~1319 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=12e7397ebb4e8c5444f9b30b84a6b80059d073fb;p=gostls13.git net: don't return nil interface address on netbsd On NetBSD routing sockaddrs for interface address contain sockaddr_dl. R=dave, rsc CC=golang-dev https://golang.org/cl/7085064 --- diff --git a/src/pkg/net/interface_bsd.go b/src/pkg/net/interface_bsd.go index 7f090d8d40..df9b3a2f27 100644 --- a/src/pkg/net/interface_bsd.go +++ b/src/pkg/net/interface_bsd.go @@ -118,7 +118,9 @@ func interfaceAddrTable(ifindex int) ([]Addr, error) { if err != nil { return nil, err } - ifat = append(ifat, ifa) + if ifa != nil { + ifat = append(ifat, ifa) + } } } } @@ -157,6 +159,8 @@ func newAddr(m *syscall.InterfaceAddrMessage) (Addr, error) { ifa.IP[2], ifa.IP[3] = 0, 0 } } + default: // Sockaddrs contain syscall.SockaddrDatalink on NetBSD + return nil, nil } } return ifa, nil diff --git a/src/pkg/net/interface_test.go b/src/pkg/net/interface_test.go index 2fe0f60cae..803c1f4495 100644 --- a/src/pkg/net/interface_test.go +++ b/src/pkg/net/interface_test.go @@ -75,9 +75,13 @@ func testInterfaceMulticastAddrs(t *testing.T, ifi *Interface) { func testAddrs(t *testing.T, ifat []Addr) { for _, ifa := range ifat { - switch ifa.(type) { + switch v := ifa.(type) { case *IPAddr, *IPNet: - t.Logf("\tinterface address %q", ifa.String()) + if v == nil { + t.Errorf("\tunexpected value: %v", ifa) + } else { + t.Logf("\tinterface address %q", ifa.String()) + } default: t.Errorf("\tunexpected type: %T", ifa) } @@ -86,9 +90,13 @@ func testAddrs(t *testing.T, ifat []Addr) { func testMulticastAddrs(t *testing.T, ifmat []Addr) { for _, ifma := range ifmat { - switch ifma.(type) { + switch v := ifma.(type) { case *IPAddr: - t.Logf("\tjoined group address %q", ifma.String()) + if v == nil { + t.Errorf("\tunexpected value: %v", ifma) + } else { + t.Logf("\tjoined group address %q", ifma.String()) + } default: t.Errorf("\tunexpected type: %T", ifma) }