77 "net"
88 "net/netip"
99 "runtime/debug"
10+ "slices"
1011 "strings"
1112 "sync"
1213 "time"
@@ -24,6 +25,7 @@ import (
2425 "github.com/cloudflare/cloudflared/management"
2526 "github.com/cloudflare/cloudflared/orchestration"
2627 quicpogs "github.com/cloudflare/cloudflared/quic"
28+ v3 "github.com/cloudflare/cloudflared/quic/v3"
2729 "github.com/cloudflare/cloudflared/retry"
2830 "github.com/cloudflare/cloudflared/signal"
2931 "github.com/cloudflare/cloudflared/tunnelrpc/pogs"
@@ -87,14 +89,6 @@ func (c *TunnelConfig) connectionOptions(originLocalAddr string, numPreviousAtte
8789 }
8890}
8991
90- func (c * TunnelConfig ) SupportedFeatures () []string {
91- supported := []string {features .FeatureSerializedHeaders }
92- if c .NamedTunnel == nil {
93- supported = append (supported , features .FeatureQuickReconnects )
94- }
95- return supported
96- }
97-
9892func StartTunnelDaemon (
9993 ctx context.Context ,
10094 config * TunnelConfig ,
@@ -181,6 +175,7 @@ func (f *ipAddrFallback) ShouldGetNewAddress(connIndex uint8, err error) (needsN
181175type EdgeTunnelServer struct {
182176 config * TunnelConfig
183177 orchestrator * orchestration.Orchestrator
178+ sessionManager v3.SessionManager
184179 edgeAddrHandler EdgeAddrHandler
185180 edgeAddrs * edgediscovery.Edge
186181 edgeBindAddr net.IP
@@ -605,14 +600,24 @@ func (e *EdgeTunnelServer) serveQUIC(
605600 return err , true
606601 }
607602
608- datagramSessionManager := connection .NewDatagramV2Connection (
609- ctx ,
610- conn ,
611- e .config .PacketConfig ,
612- e .config .RPCTimeout ,
613- e .config .WriteStreamTimeout ,
614- connLogger .Logger (),
615- )
603+ var datagramSessionManager connection.DatagramSessionHandler
604+ if slices .Contains (connOptions .Client .Features , features .FeatureDatagramV3 ) {
605+ datagramSessionManager = connection .NewDatagramV3Connection (
606+ ctx ,
607+ conn ,
608+ e .sessionManager ,
609+ connLogger .Logger (),
610+ )
611+ } else {
612+ datagramSessionManager = connection .NewDatagramV2Connection (
613+ ctx ,
614+ conn ,
615+ e .config .PacketConfig ,
616+ e .config .RPCTimeout ,
617+ e .config .WriteStreamTimeout ,
618+ connLogger .Logger (),
619+ )
620+ }
616621
617622 // Wrap the [quic.Connection] as a TunnelConnection
618623 tunnelConn , err := connection .NewTunnelConnection (
0 commit comments