MCPcopy Create free account
hub / github.com/encodeous/nylon / tcp6PacketMutateIPFields

Function tcp6PacketMutateIPFields

polyamide/tun/offload_linux_test.go:133–163  ·  view source on GitHub ↗
(srcIPPort, dstIPPort netip.AddrPort, flags header.TCPFlags, segmentSize, seq uint32, ipFn func(*header.IPv6Fields))

Source from the content-addressed store, hash-verified

131}
132
133func tcp6PacketMutateIPFields(srcIPPort, dstIPPort netip.AddrPort, flags header.TCPFlags, segmentSize, seq uint32, ipFn func(*header.IPv6Fields)) []byte {
134 totalLen := 60 + segmentSize
135 b := make([]byte, offset+int(totalLen), 65535)
136 ipv6H := header.IPv6(b[offset:])
137 srcAs16 := srcIPPort.Addr().As16()
138 dstAs16 := dstIPPort.Addr().As16()
139 ipFields := &header.IPv6Fields{
140 SrcAddr: tcpip.AddrFromSlice(srcAs16[:]),
141 DstAddr: tcpip.AddrFromSlice(dstAs16[:]),
142 TransportProtocol: unix.IPPROTO_TCP,
143 HopLimit: 64,
144 PayloadLength: uint16(segmentSize + 20),
145 }
146 if ipFn != nil {
147 ipFn(ipFields)
148 }
149 ipv6H.Encode(ipFields)
150 tcpH := header.TCP(b[offset+40:])
151 tcpH.Encode(&header.TCPFields{
152 SrcPort: srcIPPort.Port(),
153 DstPort: dstIPPort.Port(),
154 SeqNum: seq,
155 AckNum: 1,
156 DataOffset: 20,
157 Flags: flags,
158 WindowSize: 3000,
159 })
160 pseudoCsum := header.PseudoHeaderChecksum(unix.IPPROTO_TCP, ipv6H.SourceAddress(), ipv6H.DestinationAddress(), uint16(20+segmentSize))
161 tcpH.SetChecksum(^tcpH.CalculateChecksum(pseudoCsum))
162 return b
163}
164
165func tcp6Packet(srcIPPort, dstIPPort netip.AddrPort, flags header.TCPFlags, segmentSize, seq uint32) []byte {
166 return tcp6PacketMutateIPFields(srcIPPort, dstIPPort, flags, segmentSize, seq, nil)

Callers 2

tcp6PacketFunction · 0.85
Test_handleGROFunction · 0.85

Calls 1

AddrMethod · 0.45

Tested by

no test coverage detected