package ipv6
import (
"net"
"syscall"
"unsafe"
"golang.org/x/net/internal/iana"
"golang.org/x/net/internal/socket"
"golang.org/x/sys/unix"
)
var (
ctlOpts = [ctlMax ]ctlOpt {
ctlTrafficClass : {unix .IPV6_TCLASS , 4 , marshalTrafficClass , parseTrafficClass },
ctlHopLimit : {unix .IPV6_HOPLIMIT , 4 , marshalHopLimit , parseHopLimit },
ctlPacketInfo : {unix .IPV6_PKTINFO , sizeofInet6Pktinfo , marshalPacketInfo , parsePacketInfo },
ctlPathMTU : {unix .IPV6_PATHMTU , sizeofIPv6Mtuinfo , marshalPathMTU , parsePathMTU },
}
sockOpts = map [int ]*sockOpt {
ssoTrafficClass : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_TCLASS , Len : 4 }},
ssoHopLimit : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_UNICAST_HOPS , Len : 4 }},
ssoMulticastInterface : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_MULTICAST_IF , Len : 4 }},
ssoMulticastHopLimit : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_MULTICAST_HOPS , Len : 4 }},
ssoMulticastLoopback : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_MULTICAST_LOOP , Len : 4 }},
ssoReceiveTrafficClass : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_RECVTCLASS , Len : 4 }},
ssoReceiveHopLimit : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_RECVHOPLIMIT , Len : 4 }},
ssoReceivePacketInfo : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_RECVPKTINFO , Len : 4 }},
ssoReceivePathMTU : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_RECVPATHMTU , Len : 4 }},
ssoPathMTU : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .IPV6_PATHMTU , Len : sizeofIPv6Mtuinfo }},
ssoChecksum : {Option : socket .Option {Level : iana .ProtocolReserved , Name : unix .IPV6_CHECKSUM , Len : 4 }},
ssoICMPFilter : {Option : socket .Option {Level : iana .ProtocolIPv6ICMP , Name : unix .ICMPV6_FILTER , Len : sizeofICMPv6Filter }},
ssoJoinGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_JOIN_GROUP , Len : sizeofGroupReq }, typ : ssoTypeGroupReq },
ssoLeaveGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_LEAVE_GROUP , Len : sizeofGroupReq }, typ : ssoTypeGroupReq },
ssoJoinSourceGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_JOIN_SOURCE_GROUP , Len : sizeofGroupSourceReq }, typ : ssoTypeGroupSourceReq },
ssoLeaveSourceGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_LEAVE_SOURCE_GROUP , Len : sizeofGroupSourceReq }, typ : ssoTypeGroupSourceReq },
ssoBlockSourceGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_BLOCK_SOURCE , Len : sizeofGroupSourceReq }, typ : ssoTypeGroupSourceReq },
ssoUnblockSourceGroup : {Option : socket .Option {Level : iana .ProtocolIPv6 , Name : unix .MCAST_UNBLOCK_SOURCE , Len : sizeofGroupSourceReq }, typ : ssoTypeGroupSourceReq },
ssoAttachFilter : {Option : socket .Option {Level : unix .SOL_SOCKET , Name : unix .SO_ATTACH_FILTER , Len : unix .SizeofSockFprog }},
}
)
func (sa *sockaddrInet6 ) setSockaddr (ip net .IP , i int ) {
sa .Family = syscall .AF_INET6
copy (sa .Addr [:], ip )
sa .Scope_id = uint32 (i )
}
func (pi *inet6Pktinfo ) setIfindex (i int ) {
pi .Ifindex = int32 (i )
}
func (mreq *ipv6Mreq ) setIfindex (i int ) {
mreq .Ifindex = int32 (i )
}
func (gr *groupReq ) setGroup (grp net .IP ) {
sa := (*sockaddrInet6 )(unsafe .Pointer (&gr .Group ))
sa .Family = syscall .AF_INET6
copy (sa .Addr [:], grp )
}
func (gsr *groupSourceReq ) setSourceGroup (grp , src net .IP ) {
sa := (*sockaddrInet6 )(unsafe .Pointer (&gsr .Group ))
sa .Family = syscall .AF_INET6
copy (sa .Addr [:], grp )
sa = (*sockaddrInet6 )(unsafe .Pointer (&gsr .Source ))
sa .Family = syscall .AF_INET6
copy (sa .Addr [:], src )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .