TUN-8640: Add ICMP support for datagram V3

Closes TUN-8640
This commit is contained in:
Devin Carr
2024-12-09 07:23:11 -08:00
committed by Gonçalo Garcia
parent dfbccd917c
commit 588ab7ebaa
10 changed files with 491 additions and 27 deletions

52
quic/v3/icmp.go Normal file
View File

@@ -0,0 +1,52 @@
package v3
import (
"context"
"github.com/rs/zerolog"
"go.opentelemetry.io/otel/trace"
"github.com/cloudflare/cloudflared/ingress"
"github.com/cloudflare/cloudflared/packet"
"github.com/cloudflare/cloudflared/tracing"
)
// packetResponder is an implementation of the [ingress.ICMPResponder] which provides the ICMP Flow manager the
// return path to return and ICMP Echo response back to the QUIC muxer.
type packetResponder struct {
datagramMuxer DatagramICMPWriter
connID uint8
}
func newPacketResponder(datagramMuxer DatagramICMPWriter, connID uint8) ingress.ICMPResponder {
return &packetResponder{
datagramMuxer,
connID,
}
}
func (pr *packetResponder) ConnectionIndex() uint8 {
return pr.connID
}
func (pr *packetResponder) ReturnPacket(pk *packet.ICMP) error {
return pr.datagramMuxer.SendICMPPacket(pk)
}
func (pr *packetResponder) AddTraceContext(tracedCtx *tracing.TracedContext, serializedIdentity []byte) {
// datagram v3 does not support tracing ICMP packets
}
func (pr *packetResponder) RequestSpan(ctx context.Context, pk *packet.ICMP) (context.Context, trace.Span) {
// datagram v3 does not support tracing ICMP packets
return ctx, tracing.NewNoopSpan()
}
func (pr *packetResponder) ReplySpan(ctx context.Context, logger *zerolog.Logger) (context.Context, trace.Span) {
// datagram v3 does not support tracing ICMP packets
return ctx, tracing.NewNoopSpan()
}
func (pr *packetResponder) ExportSpan() {
// datagram v3 does not support tracing ICMP packets
}