sys_windows.go 1.6 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 (
  6. "golang.org/x/net/internal/iana"
  7. "golang.org/x/net/internal/socket"
  8. "golang.org/x/sys/windows"
  9. )
  10. const (
  11. sizeofIPMreq = 0x8
  12. sizeofIPMreqSource = 0xc
  13. )
  14. type ipMreq struct {
  15. Multiaddr [4]byte
  16. Interface [4]byte
  17. }
  18. type ipMreqSource struct {
  19. Multiaddr [4]byte
  20. Sourceaddr [4]byte
  21. Interface [4]byte
  22. }
  23. // See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx
  24. var (
  25. ctlOpts = [ctlMax]ctlOpt{}
  26. sockOpts = map[int]*sockOpt{
  27. ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_TOS, Len: 4}},
  28. ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_TTL, Len: 4}},
  29. ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_TTL, Len: 4}},
  30. ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_IF, Len: 4}},
  31. ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_MULTICAST_LOOP, Len: 4}},
  32. ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_HDRINCL, Len: 4}},
  33. ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
  34. ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: windows.IP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
  35. }
  36. )