Copyright 2016 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+build darwin dragonfly freebsd netbsd

package route

import (
	
	
)

func ( *RouteMessage) () ([]byte, error) {
	,  := wireFormats[.Type]
	if ! {
		return nil, errUnsupportedMessage
	}
	 := .bodyOff + addrsSpace(.Addrs)
Fix stray pointer writes on macOS. See golang.org/issue/22456.
		 += 1024
	}
	 := make([]byte, )
	nativeEndian.PutUint16([:2], uint16())
	if .Version == 0 {
		[2] = rtmVersion
	} else {
		[2] = byte(.Version)
	}
	[3] = byte(.Type)
	nativeEndian.PutUint32([8:12], uint32(.Flags))
	nativeEndian.PutUint16([4:6], uint16(.Index))
	nativeEndian.PutUint32([16:20], uint32(.ID))
	nativeEndian.PutUint32([20:24], uint32(.Seq))
	,  := marshalAddrs([.bodyOff:], .Addrs)
	if  != nil {
		return nil, 
	}
	if  > 0 {
		nativeEndian.PutUint32([12:16], uint32())
	}
	return , nil
}

func ( *wireFormat) ( RIBType,  []byte) (Message, error) {
	if len() < .bodyOff {
		return nil, errMessageTooShort
	}
	 := int(nativeEndian.Uint16([:2]))
	if len() <  {
		return nil, errInvalidMessage
	}
	 := &RouteMessage{
		Version: int([2]),
		Type:    int([3]),
		Flags:   int(nativeEndian.Uint32([8:12])),
		Index:   int(nativeEndian.Uint16([4:6])),
		ID:      uintptr(nativeEndian.Uint32([16:20])),
		Seq:     int(nativeEndian.Uint32([20:24])),
		extOff:  .extOff,
		raw:     [:],
	}
	 := syscall.Errno(nativeEndian.Uint32([28:32]))
	if  != 0 {
		.Err = 
	}
	var  error
	.Addrs,  = parseAddrs(uint(nativeEndian.Uint32([12:16])), parseKernelInetAddr, [.bodyOff:])
	if  != nil {
		return nil, 
	}
	return , nil