1 // Copyright 2016 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 // +build darwin dragonfly netbsd
11 func (w *wireFormat) parseInterfaceMessage(_ RIBType, b []byte) (Message, error) {
12 if len(b) < w.bodyOff {
13 return nil, errMessageTooShort
15 l := int(nativeEndian.Uint16(b[:2]))
17 return nil, errInvalidMessage
19 attrs := uint(nativeEndian.Uint32(b[4:8]))
20 if attrs&sysRTA_IFP == 0 {
23 m := &InterfaceMessage{
26 Addrs: make([]Addr, sysRTAX_MAX),
27 Flags: int(nativeEndian.Uint32(b[8:12])),
28 Index: int(nativeEndian.Uint16(b[12:14])),
32 a, err := parseLinkAddr(b[w.bodyOff:])
36 m.Addrs[sysRTAX_IFP] = a
37 m.Name = a.(*LinkAddr).Name
41 func (w *wireFormat) parseInterfaceAddrMessage(_ RIBType, b []byte) (Message, error) {
42 if len(b) < w.bodyOff {
43 return nil, errMessageTooShort
45 l := int(nativeEndian.Uint16(b[:2]))
47 return nil, errInvalidMessage
49 m := &InterfaceAddrMessage{
52 Flags: int(nativeEndian.Uint32(b[8:12])),
55 if runtime.GOOS == "netbsd" {
56 m.Index = int(nativeEndian.Uint16(b[16:18]))
58 m.Index = int(nativeEndian.Uint16(b[12:14]))
61 m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[4:8])), parseKernelInetAddr, b[w.bodyOff:])