sys.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 || netbsd || openbsd
6
7 package routebsd
8
9 import (
10 "syscall"
11 "unsafe"
12 )
13
14 var (
15 nativeEndian binaryByteOrder
16 kernelAlign int
17 rtmVersion byte
18 wireFormats map[int]*wireFormat
19 )
20
21 func 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
34 func roundup(l int) int {
35 if l == 0 {
36 return kernelAlign
37 }
38 return (l + kernelAlign - 1) &^ (kernelAlign - 1)
39 }
40
41 type wireFormat struct {
42 extOff int // offset of header extension
43 bodyOff int // offset of message body
44 parse func([]byte) (Message, error)
45 }
46