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.
7 func (*wireFormat) parseInterfaceMessage(_ RIBType, b []byte) (Message, error) {
9 return nil, errMessageTooShort
11 l := int(nativeEndian.Uint16(b[:2]))
13 return nil, errInvalidMessage
15 attrs := uint(nativeEndian.Uint32(b[12:16]))
16 if attrs&sysRTA_IFP == 0 {
19 m := &InterfaceMessage{
22 Flags: int(nativeEndian.Uint32(b[16:20])),
23 Index: int(nativeEndian.Uint16(b[6:8])),
24 Addrs: make([]Addr, sysRTAX_MAX),
27 ll := int(nativeEndian.Uint16(b[4:6]))
29 return nil, errInvalidMessage
31 a, err := parseLinkAddr(b[ll:])
35 m.Addrs[sysRTAX_IFP] = a
36 m.Name = a.(*LinkAddr).Name
40 func (*wireFormat) parseInterfaceAddrMessage(_ RIBType, b []byte) (Message, error) {
42 return nil, errMessageTooShort
44 l := int(nativeEndian.Uint16(b[:2]))
46 return nil, errInvalidMessage
48 bodyOff := int(nativeEndian.Uint16(b[4:6]))
50 return nil, errInvalidMessage
52 m := &InterfaceAddrMessage{
55 Flags: int(nativeEndian.Uint32(b[12:16])),
56 Index: int(nativeEndian.Uint16(b[6:8])),
60 m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[bodyOff:])
67 func (*wireFormat) parseInterfaceAnnounceMessage(_ RIBType, b []byte) (Message, error) {
69 return nil, errMessageTooShort
71 l := int(nativeEndian.Uint16(b[:2]))
73 return nil, errInvalidMessage
75 m := &InterfaceAnnounceMessage{
78 Index: int(nativeEndian.Uint16(b[6:8])),
79 What: int(nativeEndian.Uint16(b[8:10])),
82 for i := 0; i < 16; i++ {
86 m.Name = string(b[10 : 10+i])