| // Copyright 2013 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package ipv6 |
| |
| import ( |
| "net" |
| "syscall" |
| ) |
| |
| type sysSockoptLen int32 |
| |
| var ( |
| sockOpts = [ssoMax]sockOpt{ |
| ssoTrafficClass: {ianaProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}, |
| ssoHopLimit: {ianaProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt}, |
| ssoMulticastInterface: {ianaProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface}, |
| ssoMulticastHopLimit: {ianaProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt}, |
| ssoMulticastLoopback: {ianaProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt}, |
| ssoReceiveTrafficClass: {ianaProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}, |
| ssoReceiveHopLimit: {ianaProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}, |
| ssoReceivePacketInfo: {ianaProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}, |
| ssoReceivePathMTU: {ianaProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}, |
| ssoPathMTU: {ianaProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}, |
| ssoChecksum: {ianaProtocolReserved, sysIPV6_CHECKSUM, ssoTypeInt}, |
| ssoICMPFilter: {ianaProtocolIPv6ICMP, sysICMPV6_FILTER, ssoTypeICMPFilter}, |
| ssoJoinGroup: {ianaProtocolIPv6, sysIPV6_ADD_MEMBERSHIP, ssoTypeIPMreq}, |
| ssoLeaveGroup: {ianaProtocolIPv6, sysIPV6_DROP_MEMBERSHIP, ssoTypeIPMreq}, |
| } |
| ) |
| |
| func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) { |
| sa.Family = syscall.AF_INET6 |
| copy(sa.Addr[:], ip) |
| sa.Scope_id = uint32(i) |
| } |
| |
| func (pi *sysInet6Pktinfo) setIfindex(i int) { |
| pi.Ifindex = int32(i) |
| } |
| |
| func (mreq *sysIPv6Mreq) setIfindex(i int) { |
| mreq.Ifindex = int32(i) |
| } |