Brad Fitzpatrick | 5194744 | 2016-03-01 22:57:46 +0000 | [diff] [blame] | 1 | // Copyright 2011 The Go Authors. All rights reserved. |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 5 | package syscall |
| 6 | |
Mikio Hara | c5f5df4 | 2013-02-24 12:36:44 +0900 | [diff] [blame] | 7 | import "unsafe" |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 8 | |
Mikio Hara | c5f5df4 | 2013-02-24 12:36:44 +0900 | [diff] [blame] | 9 | func (any *anyMessage) toRoutingMessage(b []byte) RoutingMessage { |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 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)) |
Mikio Hara | 69275ee | 2015-02-10 12:24:11 +0900 | [diff] [blame] | 13 | // We don't support sockaddr_rtlabel for now. |
| 14 | p.Header.Addrs &= RTA_DST | RTA_GATEWAY | RTA_NETMASK | RTA_GENMASK | RTA_IFA | RTA_IFP | RTA_BRD | RTA_AUTHOR | RTA_SRC | RTA_SRCMASK |
Mikio Hara | 13e16b3 | 2014-12-22 12:30:16 +0900 | [diff] [blame] | 15 | return &RouteMessage{Header: p.Header, Data: b[p.Header.Hdrlen:any.Msglen]} |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 16 | case RTM_IFINFO: |
| 17 | p := (*InterfaceMessage)(unsafe.Pointer(any)) |
Mikio Hara | 13e16b3 | 2014-12-22 12:30:16 +0900 | [diff] [blame] | 18 | return &InterfaceMessage{Header: p.Header, Data: b[p.Header.Hdrlen:any.Msglen]} |
Mikio Hara | c5f5df4 | 2013-02-24 12:36:44 +0900 | [diff] [blame] | 19 | case RTM_IFANNOUNCE: |
| 20 | p := (*InterfaceAnnounceMessage)(unsafe.Pointer(any)) |
| 21 | return &InterfaceAnnounceMessage{Header: p.Header} |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 22 | case RTM_NEWADDR, RTM_DELADDR: |
| 23 | p := (*InterfaceAddrMessage)(unsafe.Pointer(any)) |
Mikio Hara | 13e16b3 | 2014-12-22 12:30:16 +0900 | [diff] [blame] | 24 | return &InterfaceAddrMessage{Header: p.Header, Data: b[p.Header.Hdrlen:any.Msglen]} |
Joel Sing | bf2d403 | 2011-08-22 23:24:32 -0400 | [diff] [blame] | 25 | } |
| 26 | return nil |
| 27 | } |
Mikio Hara | c5f5df4 | 2013-02-24 12:36:44 +0900 | [diff] [blame] | 28 | |
| 29 | // InterfaceAnnounceMessage represents a routing message containing |
Robert Griesemer | f391362 | 2014-05-02 13:17:55 -0700 | [diff] [blame] | 30 | // network interface arrival and departure information. |
Mikio Hara | 6d66819 | 2016-04-23 22:36:41 +0900 | [diff] [blame] | 31 | // |
| 32 | // Deprecated: Use golang.org/x/net/route instead. |
Mikio Hara | c5f5df4 | 2013-02-24 12:36:44 +0900 | [diff] [blame] | 33 | type InterfaceAnnounceMessage struct { |
| 34 | Header IfAnnounceMsghdr |
| 35 | } |
| 36 | |
Mikio Hara | 69275ee | 2015-02-10 12:24:11 +0900 | [diff] [blame] | 37 | func (m *InterfaceAnnounceMessage) sockaddr() ([]Sockaddr, error) { return nil, nil } |