summaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go')
-rw-r--r--vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go63
1 files changed, 29 insertions, 34 deletions
diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
index 2800df4bc..62cded610 100644
--- a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
@@ -7,22 +7,20 @@
package ipv6
import (
- "syscall"
+ "net"
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
func marshalTrafficClass(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_TCLASS
- m.SetLen(syscall.CmsgLen(4))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_TCLASS, 4)
if cm != nil {
- data := b[syscall.CmsgLen(0):]
- nativeEndian.PutUint32(data[:4], uint32(cm.TrafficClass))
+ nativeEndian.PutUint32(m.Data(4), uint32(cm.TrafficClass))
}
- return b[syscall.CmsgSpace(4):]
+ return m.Next(4)
}
func parseTrafficClass(cm *ControlMessage, b []byte) {
@@ -30,15 +28,12 @@ func parseTrafficClass(cm *ControlMessage, b []byte) {
}
func marshalHopLimit(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_HOPLIMIT
- m.SetLen(syscall.CmsgLen(4))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_HOPLIMIT, 4)
if cm != nil {
- data := b[syscall.CmsgLen(0):]
- nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit))
+ nativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit))
}
- return b[syscall.CmsgSpace(4):]
+ return m.Next(4)
}
func parseHopLimit(cm *ControlMessage, b []byte) {
@@ -46,12 +41,10 @@ func parseHopLimit(cm *ControlMessage, b []byte) {
}
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_PKTINFO
- m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PKTINFO, sizeofInet6Pktinfo)
if cm != nil {
- pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0]))
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
copy(pi.Addr[:], ip)
}
@@ -59,41 +52,43 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sizeofInet6Pktinfo):]
+ return m.Next(sizeofInet6Pktinfo)
}
func parsePacketInfo(cm *ControlMessage, b []byte) {
pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0]))
- cm.Dst = pi.Addr[:]
+ if len(cm.Dst) < net.IPv6len {
+ cm.Dst = make(net.IP, net.IPv6len)
+ }
+ copy(cm.Dst, pi.Addr[:])
cm.IfIndex = int(pi.Ifindex)
}
func marshalNextHop(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_NEXTHOP
- m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_NEXTHOP, sizeofSockaddrInet6)
if cm != nil {
- sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0]))
sa.setSockaddr(cm.NextHop, cm.IfIndex)
}
- return b[syscall.CmsgSpace(sizeofSockaddrInet6):]
+ return m.Next(sizeofSockaddrInet6)
}
func parseNextHop(cm *ControlMessage, b []byte) {
}
func marshalPathMTU(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_PATHMTU
- m.SetLen(syscall.CmsgLen(sizeofIPv6Mtuinfo))
- return b[syscall.CmsgSpace(sizeofIPv6Mtuinfo):]
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PATHMTU, sizeofIPv6Mtuinfo)
+ return m.Next(sizeofIPv6Mtuinfo)
}
func parsePathMTU(cm *ControlMessage, b []byte) {
mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0]))
- cm.Dst = mi.Addr.Addr[:]
+ if len(cm.Dst) < net.IPv6len {
+ cm.Dst = make(net.IP, net.IPv6len)
+ }
+ copy(cm.Dst, mi.Addr.Addr[:])
cm.IfIndex = int(mi.Addr.Scope_id)
cm.MTU = int(mi.Mtu)
}