interface_multicast.mx raw
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.
4
5 //go:build darwin || dragonfly || freebsd
6
7 package routebsd
8
9 func (w *wireFormat) parseInterfaceMulticastAddrMessage(b []byte) (Message, error) {
10 if len(b) < w.bodyOff {
11 return nil, errMessageTooShort
12 }
13 l := int(nativeEndian.Uint16(b[:2]))
14 if len(b) < l {
15 return nil, errInvalidMessage
16 }
17 m := &InterfaceMulticastAddrMessage{
18 Version: int(b[2]),
19 Type: int(b[3]),
20 Flags: int(nativeEndian.Uint32(b[8:12])),
21 Index: int(nativeEndian.Uint16(b[12:14])),
22 raw: b[:l],
23 }
24 var err error
25 m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[4:8])), b[w.bodyOff:])
26 if err != nil {
27 return nil, err
28 }
29 return m, nil
30 }
31