Skip to content
Open
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
0020948
add tools
ProjectsByJackHe May 15, 2026
9830250
phase 2 looks good so far
ProjectsByJackHe May 15, 2026
7ba0bf1
phase 2 improvements
ProjectsByJackHe May 15, 2026
b364f47
better diagnostics
ProjectsByJackHe May 15, 2026
01df062
phase 3 plumbing...
ProjectsByJackHe May 16, 2026
3097b18
phase 3: iter 2
ProjectsByJackHe May 16, 2026
5750131
bug fixes man
ProjectsByJackHe May 16, 2026
bbf64e0
E2E
ProjectsByJackHe May 16, 2026
c62d7b1
fix comment
ProjectsByJackHe May 18, 2026
08ff04e
update xdp commit
ProjectsByJackHe May 18, 2026
b8285dc
get rid of tools
ProjectsByJackHe May 18, 2026
4546dfe
get rid of preview features
ProjectsByJackHe May 18, 2026
ba539a7
add unit tests
ProjectsByJackHe May 18, 2026
d15f3a7
CLOG
ProjectsByJackHe May 18, 2026
4fe8094
fix abi incompat
ProjectsByJackHe May 18, 2026
47f162d
address code feedback
ProjectsByJackHe May 19, 2026
0b83796
Merge branch 'main' into jackhe/xdp_map_dp_int_pr_2_core
ProjectsByJackHe May 20, 2026
f68a1d8
fix dp tests + update logging
ProjectsByJackHe May 20, 2026
d8fe2d2
infer xdp enablement if map mode is set
ProjectsByJackHe May 21, 2026
96ded75
set xdpenabled to false explicitly in map mode returns error
ProjectsByJackHe May 21, 2026
240f0d2
fix unit test, address comments
ProjectsByJackHe May 22, 2026
1559660
generate clog, fix code pattern
ProjectsByJackHe May 22, 2026
892304c
update comment
ProjectsByJackHe May 22, 2026
1388f07
put map mode flag in rawdatapath
ProjectsByJackHe May 22, 2026
c472280
rename
ProjectsByJackHe May 22, 2026
acc113b
simplify the code
ProjectsByJackHe May 22, 2026
2ae68ba
fix build
ProjectsByJackHe May 22, 2026
db73b3c
refactor map into RAW dp
ProjectsByJackHe May 22, 2026
4eb0d70
CLOG
ProjectsByJackHe May 22, 2026
c9e7b1f
remove bogus test
ProjectsByJackHe May 22, 2026
c1fa28c
stash changes
ProjectsByJackHe May 23, 2026
3b85f5e
improve tests
ProjectsByJackHe May 26, 2026
815ff66
add cibir/qtip matrix
ProjectsByJackHe May 26, 2026
39ce0e6
add CI to target map mode explicitly
ProjectsByJackHe May 26, 2026
3d9d478
comment out map job
ProjectsByJackHe May 28, 2026
9716cef
Merge branch 'main' into jackhe/xdp_map_dp_int_pr_2_core
ProjectsByJackHe May 28, 2026
d524666
move stuff out of the test harness
ProjectsByJackHe Jun 11, 2026
cb6db81
test harness refactors
ProjectsByJackHe Jun 11, 2026
4c30ab2
more feedback refactors
ProjectsByJackHe Jun 12, 2026
d69d27d
add coverage for wildcard clients
ProjectsByJackHe Jun 12, 2026
3e997ff
rename to not ref map mode
ProjectsByJackHe Jun 12, 2026
f658a8b
use -1
ProjectsByJackHe Jun 12, 2026
3432322
add proper preview guards
ProjectsByJackHe Jun 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/core/library.c
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,8 @@ QuicLibraryLazyInitialize(

CXPLAT_DATAPATH_INIT_CONFIG InitConfig = {0};
InitConfig.EnableDscpOnRecv = MsQuicLib.EnableDscpOnRecv;
InitConfig.XdpMapConfigs = MsQuicLib.XdpMapConfigs;
InitConfig.XdpMapConfigCount = MsQuicLib.XdpMapConfigCount;

Status =
CxPlatDataPathInitialize(
Expand Down
8 changes: 4 additions & 4 deletions src/generated/linux/datapath_raw.c.clog.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ tracepoint(CLOG_DATAPATH_RAW_C, AllocFailure , arg2, arg3);\
// Decoder Ring for LibraryErrorStatus
// [ lib] ERROR, %u, %s.
// QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
PlumbStatus,
"CxPlatDpRawPlumbRulesOnSocket (delete)");
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
PlumbStatus,
"CxPlatDpRawPlumbRulesOnSocket (delete)");
// arg2 = arg2 = PlumbStatus = arg2
// arg3 = arg3 = "CxPlatDpRawPlumbRulesOnSocket (delete)" = arg3
----------------------------------------------------------*/
Expand Down
8 changes: 4 additions & 4 deletions src/generated/linux/datapath_raw.c.clog.h.lttng.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ TRACEPOINT_EVENT(CLOG_DATAPATH_RAW_C, AllocFailure,
// Decoder Ring for LibraryErrorStatus
// [ lib] ERROR, %u, %s.
// QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
PlumbStatus,
"CxPlatDpRawPlumbRulesOnSocket (delete)");
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
PlumbStatus,
"CxPlatDpRawPlumbRulesOnSocket (delete)");
// arg2 = arg2 = PlumbStatus = arg2
// arg3 = arg3 = "CxPlatDpRawPlumbRulesOnSocket (delete)" = arg3
----------------------------------------------------------*/
Expand Down
44 changes: 44 additions & 0 deletions src/generated/linux/datapath_raw_xdp_win.c.clog.h
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,50 @@ tracepoint(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpPartitionShutdownComplete , arg2);\



/*----------------------------------------------------------
// Decoder Ring for XdpMapModeConfigured
// [ixdp][%p] Map mode configured for IfIndex=%u (MapHandle=%p)
// QuicTraceLogVerbose(
XdpMapModeConfigured,
"[ixdp][%p] Map mode configured for IfIndex=%u (MapHandle=%p)",
Interface,
Interface->IfIndex,
XskMap);
// arg2 = arg2 = Interface = arg2
// arg3 = arg3 = Interface->IfIndex = arg3
// arg4 = arg4 = XskMap = arg4
----------------------------------------------------------*/
#ifndef _clog_5_ARGS_TRACE_XdpMapModeConfigured
#define _clog_5_ARGS_TRACE_XdpMapModeConfigured(uniqueId, encoded_arg_string, arg2, arg3, arg4)\
tracepoint(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpMapModeConfigured , arg2, arg3, arg4);\

#endif




/*----------------------------------------------------------
// Decoder Ring for XdpMapModeInserted
// [ixdp][%p] Map mode: inserted XSK for queue %u (IfIndex=%u)
// QuicTraceLogVerbose(
XdpMapModeInserted,
"[ixdp][%p] Map mode: inserted XSK for queue %u (IfIndex=%u)",
Interface,
j,
Interface->IfIndex);
// arg2 = arg2 = Interface = arg2
// arg3 = arg3 = j = arg3
// arg4 = arg4 = Interface->IfIndex = arg4
----------------------------------------------------------*/
#ifndef _clog_5_ARGS_TRACE_XdpMapModeInserted
#define _clog_5_ARGS_TRACE_XdpMapModeInserted(uniqueId, encoded_arg_string, arg2, arg3, arg4)\
tracepoint(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpMapModeInserted , arg2, arg3, arg4);\

#endif




/*----------------------------------------------------------
// Decoder Ring for LibraryErrorStatus
// [ lib] ERROR, %u, %s.
Expand Down
54 changes: 54 additions & 0 deletions src/generated/linux/datapath_raw_xdp_win.c.clog.h.lttng.h
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,60 @@ TRACEPOINT_EVENT(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpPartitionShutdownComplete,



/*----------------------------------------------------------
// Decoder Ring for XdpMapModeConfigured
// [ixdp][%p] Map mode configured for IfIndex=%u (MapHandle=%p)
// QuicTraceLogVerbose(
XdpMapModeConfigured,
"[ixdp][%p] Map mode configured for IfIndex=%u (MapHandle=%p)",
Interface,
Interface->IfIndex,
XskMap);
// arg2 = arg2 = Interface = arg2
// arg3 = arg3 = Interface->IfIndex = arg3
// arg4 = arg4 = XskMap = arg4
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpMapModeConfigured,
TP_ARGS(
const void *, arg2,
unsigned int, arg3,
const void *, arg4),
TP_FIELDS(
ctf_integer_hex(uint64_t, arg2, (uint64_t)arg2)
ctf_integer(unsigned int, arg3, arg3)
ctf_integer_hex(uint64_t, arg4, (uint64_t)arg4)
)
)



/*----------------------------------------------------------
// Decoder Ring for XdpMapModeInserted
// [ixdp][%p] Map mode: inserted XSK for queue %u (IfIndex=%u)
// QuicTraceLogVerbose(
XdpMapModeInserted,
"[ixdp][%p] Map mode: inserted XSK for queue %u (IfIndex=%u)",
Interface,
j,
Interface->IfIndex);
// arg2 = arg2 = Interface = arg2
// arg3 = arg3 = j = arg3
// arg4 = arg4 = Interface->IfIndex = arg4
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_RAW_XDP_WIN_C, XdpMapModeInserted,
TP_ARGS(
const void *, arg2,
unsigned int, arg3,
unsigned int, arg4),
TP_FIELDS(
ctf_integer_hex(uint64_t, arg2, (uint64_t)arg2)
ctf_integer(unsigned int, arg3, arg3)
ctf_integer(unsigned int, arg4, arg4)
)
)



/*----------------------------------------------------------
// Decoder Ring for LibraryErrorStatus
// [ lib] ERROR, %u, %s.
Expand Down
62 changes: 60 additions & 2 deletions src/generated/linux/datapath_xplat.c.clog.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
#define _clog_MACRO_QuicTraceLogError 1
#define QuicTraceLogError(a, ...) _clog_CAT(_clog_ARGN_SELECTOR(__VA_ARGS__), _clog_CAT(_,a(#a, __VA_ARGS__)))
#endif
#ifndef _clog_MACRO_QuicTraceEvent
#define _clog_MACRO_QuicTraceEvent 1
#define QuicTraceEvent(a, ...) _clog_CAT(_clog_ARGN_SELECTOR(__VA_ARGS__), _clog_CAT(_,a(#a, __VA_ARGS__)))
#endif
#ifdef __cplusplus
extern "C" {
#endif
Expand Down Expand Up @@ -63,12 +67,46 @@ tracepoint(CLOG_DATAPATH_XPLAT_C, WarnNoXdpForCibirSockets );\



/*----------------------------------------------------------
// Decoder Ring for DatapathRawInitFailMapMode
// [ dp] XDP map mode: raw datapath required but failed to initialize
// QuicTraceLogVerbose(
DatapathRawInitFailMapMode,
"[ dp] XDP map mode: raw datapath required but failed to initialize");
----------------------------------------------------------*/
#ifndef _clog_2_ARGS_TRACE_DatapathRawInitFailMapMode
#define _clog_2_ARGS_TRACE_DatapathRawInitFailMapMode(uniqueId, encoded_arg_string)\
tracepoint(CLOG_DATAPATH_XPLAT_C, DatapathRawInitFailMapMode );\

#endif




/*----------------------------------------------------------
// Decoder Ring for DatapathRawMapInsertFail
// [ dp] XDP map mode: failed to insert XSK sockets into map, status:%d
// QuicTraceLogVerbose(
DatapathRawMapInsertFail,
"[ dp] XDP map mode: failed to insert XSK sockets into map, status:%d",
Status);
// arg2 = arg2 = Status = arg2
----------------------------------------------------------*/
#ifndef _clog_3_ARGS_TRACE_DatapathRawMapInsertFail
#define _clog_3_ARGS_TRACE_DatapathRawMapInsertFail(uniqueId, encoded_arg_string, arg2)\
tracepoint(CLOG_DATAPATH_XPLAT_C, DatapathRawMapInsertFail , arg2);\

#endif




/*----------------------------------------------------------
// Decoder Ring for DatapathInitFail
// [ dp] Failed to initialize datapath, status:%d
// QuicTraceLogVerbose(
DatapathInitFail,
"[ dp] Failed to initialize datapath, status:%d", Status);
DatapathInitFail,
"[ dp] Failed to initialize datapath, status:%d", Status);
// arg2 = arg2 = Status = arg2
----------------------------------------------------------*/
#ifndef _clog_3_ARGS_TRACE_DatapathInitFail
Expand Down Expand Up @@ -130,6 +168,26 @@ tracepoint(CLOG_DATAPATH_XPLAT_C, ErrNoXdpForQtip );\



/*----------------------------------------------------------
// Decoder Ring for AllocFailure
// Allocation of '%s' failed. (%llu bytes)
// QuicTraceEvent(
AllocFailure,
"Allocation of '%s' failed. (%llu bytes)",
"CXPLAT_DATAPATH (map mode)",
sizeof(CXPLAT_DATAPATH));
// arg2 = arg2 = "CXPLAT_DATAPATH (map mode)" = arg2
// arg3 = arg3 = sizeof(CXPLAT_DATAPATH) = arg3
----------------------------------------------------------*/
#ifndef _clog_4_ARGS_TRACE_AllocFailure
#define _clog_4_ARGS_TRACE_AllocFailure(uniqueId, encoded_arg_string, arg2, arg3)\
tracepoint(CLOG_DATAPATH_XPLAT_C, AllocFailure , arg2, arg3);\

#endif




#ifdef __cplusplus
}
#endif
Expand Down
62 changes: 60 additions & 2 deletions src/generated/linux/datapath_xplat.c.clog.h.lttng.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,47 @@ TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, WarnNoXdpForCibirSockets,



/*----------------------------------------------------------
// Decoder Ring for DatapathRawInitFailMapMode
// [ dp] XDP map mode: raw datapath required but failed to initialize
// QuicTraceLogVerbose(
DatapathRawInitFailMapMode,
"[ dp] XDP map mode: raw datapath required but failed to initialize");
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, DatapathRawInitFailMapMode,
TP_ARGS(
),
TP_FIELDS(
)
)



/*----------------------------------------------------------
// Decoder Ring for DatapathRawMapInsertFail
// [ dp] XDP map mode: failed to insert XSK sockets into map, status:%d
// QuicTraceLogVerbose(
DatapathRawMapInsertFail,
"[ dp] XDP map mode: failed to insert XSK sockets into map, status:%d",
Status);
// arg2 = arg2 = Status = arg2
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, DatapathRawMapInsertFail,
TP_ARGS(
int, arg2),
TP_FIELDS(
ctf_integer(int, arg2, arg2)
)
)



/*----------------------------------------------------------
// Decoder Ring for DatapathInitFail
// [ dp] Failed to initialize datapath, status:%d
// QuicTraceLogVerbose(
DatapathInitFail,
"[ dp] Failed to initialize datapath, status:%d", Status);
DatapathInitFail,
"[ dp] Failed to initialize datapath, status:%d", Status);
// arg2 = arg2 = Status = arg2
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, DatapathInitFail,
Expand Down Expand Up @@ -102,3 +137,26 @@ TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, ErrNoXdpForQtip,
TP_FIELDS(
)
)



/*----------------------------------------------------------
// Decoder Ring for AllocFailure
// Allocation of '%s' failed. (%llu bytes)
// QuicTraceEvent(
AllocFailure,
"Allocation of '%s' failed. (%llu bytes)",
"CXPLAT_DATAPATH (map mode)",
sizeof(CXPLAT_DATAPATH));
// arg2 = arg2 = "CXPLAT_DATAPATH (map mode)" = arg2
// arg3 = arg3 = sizeof(CXPLAT_DATAPATH) = arg3
----------------------------------------------------------*/
TRACEPOINT_EVENT(CLOG_DATAPATH_XPLAT_C, AllocFailure,
TP_ARGS(
const char *, arg2,
unsigned long long, arg3),
TP_FIELDS(
ctf_string(arg2, arg2)
ctf_integer(uint64_t, arg3, arg3)
)
)
12 changes: 12 additions & 0 deletions src/inc/quic_datapath.h
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,18 @@ typedef struct CXPLAT_DATAPATH_INIT_CONFIG {
// the Windows fast path causing a large performance regression.
//
BOOLEAN EnableDscpOnRecv;

//
// External XDP map configurations. When XdpMapConfigCount > 0 and
// XdpMapConfigs is non-NULL, the datapath operates in XDP map mode: the
// WinSock (normal) datapath is skipped, the raw (XDP) datapath is required
// to succeed, and XSK sockets are inserted into the provided XSKMAPs at
// init time.
// XdpMapConfigs is NULL if and only if XdpMapConfigCount == 0.
// The map configs must remain valid for the lifetime of the datapath.
//
const struct QUIC_XDP_MAP_CONFIG* XdpMapConfigs;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: consider SAL to annotate the length.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: We don't repeat the "struct" keyword on use:

Suggested change
const struct QUIC_XDP_MAP_CONFIG* XdpMapConfigs;
const QUIC_XDP_MAP_CONFIG* XdpMapConfigs;

uint32_t XdpMapConfigCount;
} CXPLAT_DATAPATH_INIT_CONFIG;

//
Expand Down
Loading
Loading