Avoid is_constant calls in vectorizable_bswap
[official-gcc.git] / libgo / go / syscall / route_darwin.go
blobb0636ed07ceef054655924339f6328db24c90a09
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.
5 package syscall
7 import "unsafe"
9 func (any *anyMessage) toRoutingMessage(b []byte) RoutingMessage {
10 switch any.Type {
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]}
14 case RTM_IFINFO:
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]}
24 return nil
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 {
32 Header IfmaMsghdr2
33 Data []byte
36 func (m *InterfaceMulticastAddrMessage) sockaddr() ([]Sockaddr, error) {
37 var sas [RTAX_MAX]Sockaddr
38 b := m.Data[:]
39 for i := uint(0); i < RTAX_MAX && len(b) >= minRoutingSockaddrLen; i++ {
40 if m.Header.Addrs&(1<<i) == 0 {
41 continue
43 rsa := (*RawSockaddr)(unsafe.Pointer(&b[0]))
44 switch rsa.Family {
45 case AF_LINK:
46 sa, err := parseSockaddrLink(b)
47 if err != nil {
48 return nil, err
50 sas[i] = sa
51 b = b[rsaAlignOf(int(rsa.Len)):]
52 case AF_INET, AF_INET6:
53 sa, err := parseSockaddrInet(b, rsa.Family)
54 if err != nil {
55 return nil, err
57 sas[i] = sa
58 b = b[rsaAlignOf(int(rsa.Len)):]
59 default:
60 sa, l, err := parseLinkLayerAddr(b)
61 if err != nil {
62 return nil, err
64 sas[i] = sa
65 b = b[l:]
68 return sas[:], nil