sys.go 969 B

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