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.
9 func (any
*anyMessage
) toRoutingMessage(b
[]byte) RoutingMessage
{
11 case RTM_ADD
, RTM_DELETE
, RTM_CHANGE
, RTM_GET
, RTM_LOSING
, RTM_REDIRECT
, RTM_MISS
, RTM_LOCK
, RTM_RESOLVE
:
12 p
:= (*RouteMessage
)(unsafe
.Pointer(any
))
13 return &RouteMessage
{Header
: p
.Header
, Data
: b
[SizeofRtMsghdr
:any
.Msglen
]}
15 p
:= (*InterfaceMessage
)(unsafe
.Pointer(any
))
16 return &InterfaceMessage
{Header
: p
.Header
, Data
: b
[SizeofIfMsghdr
:any
.Msglen
]}
17 case RTM_NEWADDR
, RTM_DELADDR
:
18 p
:= (*InterfaceAddrMessage
)(unsafe
.Pointer(any
))
19 return &InterfaceAddrMessage
{Header
: p
.Header
, Data
: b
[SizeofIfaMsghdr
:any
.Msglen
]}
20 case RTM_NEWMADDR2
, RTM_DELMADDR
:
21 p
:= (*InterfaceMulticastAddrMessage
)(unsafe
.Pointer(any
))
22 return &InterfaceMulticastAddrMessage
{Header
: p
.Header
, Data
: b
[SizeofIfmaMsghdr2
:any
.Msglen
]}
27 // InterfaceMulticastAddrMessage represents a routing message
28 // containing network interface address entries.
30 // Deprecated: Use golang.org/x/net/route instead.
31 type InterfaceMulticastAddrMessage
struct {
36 func (m
*InterfaceMulticastAddrMessage
) sockaddr() ([]Sockaddr
, error
) {
37 var sas
[RTAX_MAX
]Sockaddr
39 for i
:= uint(0); i
< RTAX_MAX
&& len(b
) >= minRoutingSockaddrLen
; i
++ {
40 if m
.Header
.Addrs
&(1<<i
) == 0 {
43 rsa
:= (*RawSockaddr
)(unsafe
.Pointer(&b
[0]))
46 sa
, err
:= parseSockaddrLink(b
)
51 b
= b
[rsaAlignOf(int(rsa
.Len
)):]
52 case AF_INET
, AF_INET6
:
53 sa
, err
:= parseSockaddrInet(b
, rsa
.Family
)
58 b
= b
[rsaAlignOf(int(rsa
.Len
)):]
60 sa
, l
, err
:= parseLinkLayerAddr(b
)