sys_windows.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. const (
  6. // See ws2tcpip.h.
  7. sysIP_OPTIONS = 0x1
  8. sysIP_HDRINCL = 0x2
  9. sysIP_TOS = 0x3
  10. sysIP_TTL = 0x4
  11. sysIP_MULTICAST_IF = 0x9
  12. sysIP_MULTICAST_TTL = 0xa
  13. sysIP_MULTICAST_LOOP = 0xb
  14. sysIP_ADD_MEMBERSHIP = 0xc
  15. sysIP_DROP_MEMBERSHIP = 0xd
  16. sysIP_DONTFRAGMENT = 0xe
  17. sysIP_ADD_SOURCE_MEMBERSHIP = 0xf
  18. sysIP_DROP_SOURCE_MEMBERSHIP = 0x10
  19. sysIP_PKTINFO = 0x13
  20. sysSizeofInetPktinfo = 0x8
  21. sysSizeofIPMreq = 0x8
  22. sysSizeofIPMreqSource = 0xc
  23. )
  24. type sysInetPktinfo struct {
  25. Addr [4]byte
  26. Ifindex int32
  27. }
  28. type sysIPMreq struct {
  29. Multiaddr [4]byte
  30. Interface [4]byte
  31. }
  32. type sysIPMreqSource struct {
  33. Multiaddr [4]byte
  34. Sourceaddr [4]byte
  35. Interface [4]byte
  36. }
  37. // See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx
  38. var (
  39. sockOpts = [ssoMax]sockOpt{
  40. ssoTOS: {sysIP_TOS, ssoTypeInt},
  41. ssoTTL: {sysIP_TTL, ssoTypeInt},
  42. ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
  43. ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
  44. ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
  45. ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
  46. ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
  47. }
  48. )
  49. func (pi *sysInetPktinfo) setIfindex(i int) {
  50. pi.Ifindex = int32(i)
  51. }