Source File
interface_bsd.go
Belonging Package
net
package net
import (
)
func ( int) ([]Interface, error) {
, := interfaceMessages()
if != nil {
return nil,
}
:= len()
if != 0 {
= 1
}
:= make([]Interface, )
= 0
for , := range {
switch m := .(type) {
case *route.InterfaceMessage:
if != 0 && != .Index {
continue
}
[].Index = .Index
[].Name = .Name
[].Flags = linkFlags(.Flags)
if , := .Addrs[syscall.RTAX_IFP].(*route.LinkAddr); && len(.Addr) > 0 {
[].HardwareAddr = make([]byte, len(.Addr))
copy([].HardwareAddr, .Addr)
}
for , := range .Sys() {
if , := .(*route.InterfaceMetrics); {
[].MTU = .MTU
break
}
}
++
if == .Index {
return [:], nil
}
}
}
return [:], nil
}
func ( int) Flags {
var Flags
if &syscall.IFF_UP != 0 {
|= FlagUp
}
if &syscall.IFF_BROADCAST != 0 {
|= FlagBroadcast
}
if &syscall.IFF_LOOPBACK != 0 {
|= FlagLoopback
}
if &syscall.IFF_POINTOPOINT != 0 {
|= FlagPointToPoint
}
if &syscall.IFF_MULTICAST != 0 {
|= FlagMulticast
}
return
}
func ( *Interface) ([]Addr, error) {
:= 0
if != nil {
= .Index
}
, := interfaceMessages()
if != nil {
return nil,
}
:= make([]Addr, 0, len())
for , := range {
switch m := .(type) {
case *route.InterfaceAddrMessage:
if != 0 && != .Index {
continue
}
var IPMask
switch sa := .Addrs[syscall.RTAX_NETMASK].(type) {
case *route.Inet4Addr:
= IPv4Mask(.IP[0], .IP[1], .IP[2], .IP[3])
case *route.Inet6Addr:
= make(IPMask, IPv6len)
copy(, .IP[:])
}
var IP
switch sa := .Addrs[syscall.RTAX_IFA].(type) {
case *route.Inet4Addr:
= IPv4(.IP[0], .IP[1], .IP[2], .IP[3])
case *route.Inet6Addr:
= make(IP, IPv6len)
copy(, .IP[:])
}
if != nil && != nil { // NetBSD may contain route.LinkAddr
= append(, &IPNet{IP: , Mask: })
}
}
}
return , nil
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin 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 @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |