package net
import (
"syscall"
"golang.org/x/net/route"
)
func interfaceMessages (ifindex int ) ([]route .Message , error ) {
rib , err := route .FetchRIB (syscall .AF_UNSPEC , syscall .NET_RT_IFLIST , ifindex )
if err != nil {
return nil , err
}
return route .ParseRIB (syscall .NET_RT_IFLIST , rib )
}
func interfaceMulticastAddrTable (ifi *Interface ) ([]Addr , error ) {
rib , err := route .FetchRIB (syscall .AF_UNSPEC , syscall .NET_RT_IFLIST2 , ifi .Index )
if err != nil {
return nil , err
}
msgs , err := route .ParseRIB (syscall .NET_RT_IFLIST2 , rib )
if err != nil {
return nil , err
}
ifmat := make ([]Addr , 0 , len (msgs ))
for _ , m := range msgs {
switch m := m .(type ) {
case *route .InterfaceMulticastAddrMessage :
if ifi .Index != m .Index {
continue
}
var ip IP
switch sa := m .Addrs [syscall .RTAX_IFA ].(type ) {
case *route .Inet4Addr :
ip = IPv4 (sa .IP [0 ], sa .IP [1 ], sa .IP [2 ], sa .IP [3 ])
case *route .Inet6Addr :
ip = make (IP , IPv6len )
copy (ip , sa .IP [:])
}
if ip != nil {
ifmat = append (ifmat , &IPAddr {IP : ip })
}
}
}
return ifmat , nil
}
The pages are generated with Golds v0.3.6 . (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 .