sys_freebsd.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright 2014 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. package ipv4
  5. import "syscall"
  6. type sysSockoptLen int32
  7. const (
  8. sysIP_PKTINFO = 0
  9. sysSizeofInetPktinfo = 0xc
  10. )
  11. type sysInetPktinfo struct {
  12. Ifindex uint32
  13. Spec_dst [4]byte /* in_addr */
  14. Addr [4]byte /* in_addr */
  15. }
  16. var (
  17. sockOpts = [ssoMax]sockOpt{
  18. ssoTOS: {sysIP_TOS, ssoTypeInt},
  19. ssoTTL: {sysIP_TTL, ssoTypeInt},
  20. ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
  21. ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
  22. ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
  23. ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
  24. ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
  25. ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
  26. ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
  27. ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
  28. ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
  29. }
  30. )
  31. func init() {
  32. freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate")
  33. if freebsdVersion >= 1000000 {
  34. sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
  35. }
  36. }