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

Function udp6PacketMutateIPFields

polyamide/tun/offload_linux_test.go:64–90  ·  view source on GitHub ↗
(srcIPPort, dstIPPort netip.AddrPort, payloadLen int, ipFn func(*header.IPv6Fields))

Source from the content-addressed store, hash-verified

62}
63
64func udp6PacketMutateIPFields(srcIPPort, dstIPPort netip.AddrPort, payloadLen int, ipFn func(*header.IPv6Fields)) []byte {
65 totalLen := 48 + payloadLen
66 b := make([]byte, offset+int(totalLen), 65535)
67 ipv6H := header.IPv6(b[offset:])
68 srcAs16 := srcIPPort.Addr().As16()
69 dstAs16 := dstIPPort.Addr().As16()
70 ipFields := &header.IPv6Fields{
71 SrcAddr: tcpip.AddrFromSlice(srcAs16[:]),
72 DstAddr: tcpip.AddrFromSlice(dstAs16[:]),
73 TransportProtocol: unix.IPPROTO_UDP,
74 HopLimit: 64,
75 PayloadLength: uint16(payloadLen + udphLen),
76 }
77 if ipFn != nil {
78 ipFn(ipFields)
79 }
80 ipv6H.Encode(ipFields)
81 udpH := header.UDP(b[offset+40:])
82 udpH.Encode(&header.UDPFields{
83 SrcPort: srcIPPort.Port(),
84 DstPort: dstIPPort.Port(),
85 Length: uint16(payloadLen + udphLen),
86 })
87 pseudoCsum := header.PseudoHeaderChecksum(unix.IPPROTO_UDP, ipv6H.SourceAddress(), ipv6H.DestinationAddress(), uint16(udphLen+payloadLen))
88 udpH.SetChecksum(^udpH.CalculateChecksum(pseudoCsum))
89 return b
90}
91
92func udp4Packet(srcIPPort, dstIPPort netip.AddrPort, payloadLen int) []byte {
93 return udp4PacketMutateIPFields(srcIPPort, dstIPPort, payloadLen, nil)

Callers 2

udp6PacketFunction · 0.85
Test_handleGROFunction · 0.85

Calls 1

AddrMethod · 0.45

Tested by

no test coverage detected