| // 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" |
| ) |
| |
| // RFC 2292 options |
| const ( |
| // See /usr/include/netinet6/in6.h. |
| sysSockopt2292HopLimit = syscall.IPV6_2292HOPLIMIT |
| sysSockopt2292PacketInfo = syscall.IPV6_2292PKTINFO |
| sysSockopt2292NextHop = syscall.IPV6_2292NEXTHOP |
| ) |
| |
| // RFC 3542 options |
| const ( |
| // See /usr/include/netinet6/in6.h. |
| sysSockoptReceiveTrafficClass = 0x23 // IPV6_RECVTCLASS |
| sysSockoptTrafficClass = 0x24 // IPV6_TCLASS |
| sysSockoptReceiveHopLimit = 0x25 // IPV6_RECVHOPLIMIT |
| sysSockoptHopLimit = 0x2f // IPV6_HOPLIMIT |
| sysSockoptReceivePacketInfo = 0x3d // IPV6_RECVPKTINFO |
| sysSockoptPacketInfo = 0x2e // IPV6_PKTINFO |
| sysSockoptReceivePathMTU = 0x2b // IPV6_RECVPATHMTU |
| sysSockoptPathMTU = 0x2c // IPV6_PATHMTU |
| sysSockoptNextHop = 0x30 // IPV6_NEXTHOP |
| sysSockoptChecksum = 0x1a // IPV6_CHECKSUM |
| |
| // See /usr/include/netinet6/in6.h. |
| sysSockoptICMPFilter = 0x12 // ICMP6_FILTER |
| ) |
| |
| func setSockaddr(sa *syscall.RawSockaddrInet6, ip net.IP, ifindex int) { |
| sa.Len = syscall.SizeofSockaddrInet6 |
| sa.Family = syscall.AF_INET6 |
| copy(sa.Addr[:], ip) |
| sa.Scope_id = uint32(ifindex) |
| } |