1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
10 "golang.org/x/net/route"
13 func interfaceMessages(ifindex
int) ([]route
.Message
, error
) {
14 typ
:= route
.RIBType(syscall
.NET_RT_IFLISTL
)
15 rib
, err
:= route
.FetchRIB(syscall
.AF_UNSPEC
, typ
, ifindex
)
17 typ
= route
.RIBType(syscall
.NET_RT_IFLIST
)
18 rib
, err
= route
.FetchRIB(syscall
.AF_UNSPEC
, typ
, ifindex
)
23 return route
.ParseRIB(typ
, rib
)
26 // interfaceMulticastAddrTable returns addresses for a specific
28 func interfaceMulticastAddrTable(ifi
*Interface
) ([]Addr
, error
) {
29 rib
, err
:= route
.FetchRIB(syscall
.AF_UNSPEC
, syscall
.NET_RT_IFMALIST
, ifi
.Index
)
33 msgs
, err
:= route
.ParseRIB(syscall
.NET_RT_IFMALIST
, rib
)
37 ifmat
:= make([]Addr
, 0, len(msgs
))
38 for _
, m
:= range msgs
{
39 switch m
:= m
.(type) {
40 case *route
.InterfaceMulticastAddrMessage
:
41 if ifi
.Index
!= m
.Index
{
45 switch sa
:= m
.Addrs
[syscall
.RTAX_IFA
].(type) {
46 case *route
.Inet4Addr
:
47 ip
= IPv4(sa
.IP
[0], sa
.IP
[1], sa
.IP
[2], sa
.IP
[3])
48 case *route
.Inet6Addr
:
49 ip
= make(IP
, IPv6len
)
53 ifmat
= append(ifmat
, &IPAddr
{IP
: ip
})