sys_linux.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Copyright 2013 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 ipv6
  5. import (
  6. "net"
  7. "syscall"
  8. )
  9. type sysSockoptLen int32
  10. var (
  11. sockOpts = [ssoMax]sockOpt{
  12. ssoTrafficClass: {ianaProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
  13. ssoHopLimit: {ianaProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
  14. ssoMulticastInterface: {ianaProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
  15. ssoMulticastHopLimit: {ianaProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
  16. ssoMulticastLoopback: {ianaProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
  17. ssoReceiveTrafficClass: {ianaProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
  18. ssoReceiveHopLimit: {ianaProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
  19. ssoReceivePacketInfo: {ianaProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
  20. ssoReceivePathMTU: {ianaProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
  21. ssoPathMTU: {ianaProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
  22. ssoChecksum: {ianaProtocolReserved, sysIPV6_CHECKSUM, ssoTypeInt},
  23. ssoICMPFilter: {ianaProtocolIPv6ICMP, sysICMPV6_FILTER, ssoTypeICMPFilter},
  24. ssoJoinGroup: {ianaProtocolIPv6, sysIPV6_ADD_MEMBERSHIP, ssoTypeIPMreq},
  25. ssoLeaveGroup: {ianaProtocolIPv6, sysIPV6_DROP_MEMBERSHIP, ssoTypeIPMreq},
  26. }
  27. )
  28. func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
  29. sa.Family = syscall.AF_INET6
  30. copy(sa.Addr[:], ip)
  31. sa.Scope_id = uint32(i)
  32. }
  33. func (pi *sysInet6Pktinfo) setIfindex(i int) {
  34. pi.Ifindex = int32(i)
  35. }
  36. func (mreq *sysIPv6Mreq) setIfindex(i int) {
  37. mreq.Ifindex = int32(i)
  38. }