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 || netbsd || openbsd
6
7package route
8
9import (
10	"syscall"
11	"unsafe"
12)
13
14var (
15	nativeEndian binaryByteOrder
16	kernelAlign  int
17	rtmVersion   byte
18	wireFormats  map[int]*wireFormat
19)
20
21func init() {
22	i := uint32(1)
23	b := (*[4]byte)(unsafe.Pointer(&i))
24	if b[0] == 1 {
25		nativeEndian = littleEndian
26	} else {
27		nativeEndian = bigEndian
28	}
29	// might get overridden in probeRoutingStack
30	rtmVersion = syscall.RTM_VERSION
31	kernelAlign, wireFormats = probeRoutingStack()
32}
33
34func roundup(l int) int {
35	if l == 0 {
36		return kernelAlign
37	}
38	return (l + kernelAlign - 1) &^ (kernelAlign - 1)
39}
40
41type wireFormat struct {
42	extOff  int // offset of header extension
43	bodyOff int // offset of message body
44	parse   func(RIBType, []byte) (Message, error)
45}
46