diff --git a/docs/API.md b/docs/API.md
index 93c2ffdeef..3dcfc4fab2 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -33,9 +33,7 @@ The API supports both server and client applications. All functionality is expos
[**Registration**](#registration) – Manages the execution context for all child objects. An app may open multiple registrations but ideally should only open one.
-[**Security Configuration**](#security-configuration) – Abstracts the configuration for the TLS component. This primarily consists of a certificate that is used for authentication. The app may create as many of these as necessary.
-
-[**Session**](#session) – Abstracts several different session-layer concepts: TLS Session Resumption, Application Layer Protocol Negotiation (ALPN) and platform specifics (such as Server Silo and Network Compartment ID on Windows). The app may create as many of these as necessary.
+[**Configuration**](#configuration) – Abstracts the configuration for a connection. TODO
[**Listener**](#listener) – Server side only, this object provides the interface for an app to accept incoming connections from clients. Once the connection has been accepted, it is independent of the listener. The app may create as many of these as necessary.
@@ -88,17 +86,11 @@ Generally, each app only needs a single registration. The registration represent
A registration is created by calling [RegistrationOpen](api/RegistrationOpen.md) and deleted by calling [RegistrationClose](api/RegistrationClose.md).
-## Security Configuration
-
-Currently only used on the server side, the security configuration (AKA security config) abstracts a server certificate (and other configuration) used by a [listener](#listener) to accept an incoming connection request.
-
-A security config is created by calling [SecConfigCreate](api/SecConfigCreate.md) and deleted by calling [SecConfigDelete](api/SecConfigDelete.md).
-
-## Session
+## Configuration
-An app must create a session before it can create any listeners or connections. Each session maintains certain transport and platform state common to all child handles. Primarily, this consists of the ALPN string used for the connection handshakes and TLS state used for session resumption. On Windows platforms it also inherits the Silo and Network Compartment ID from the thread that creates it.
+TODO
-A session is created by calling [SessionOpen](api/SessionOpen.md) and deleted by calling [SessionClose](api/SessionClose.md). [SessionClose](api/SessionClose.md) **will block** on all oustanding connections. Therefore do not call it on any MsQuic event callback, as it will likely create a deadlock.
+A configuration is created by calling [ConfigurationOpen](api/ConfigurationOpen.md) and deleted by calling [ConfigurationClose](api/ConfigurationClose.md).
## Listener
diff --git a/docs/api/ConfigurationClose.md b/docs/api/ConfigurationClose.md
new file mode 100644
index 0000000000..329c7c15d0
--- /dev/null
+++ b/docs/api/ConfigurationClose.md
@@ -0,0 +1,29 @@
+ConfigurationClose function
+======
+
+Deletes an existing security configuration.
+
+# Syntax
+
+```C
+typedef
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+(QUIC_API * QUIC_CONFIGURATION_CLOSE_FN)(
+ _In_ _Pre_defensive_ __drv_freesMem(Mem)
+ HQUIC Configuration
+ );
+```
+
+# Parameters
+
+**TODO**
+
+# Remarks
+
+**TODO**
+
+# See Also
+
+[ConfigurationOpen](ConfigurationOpen.md)
+[ConfigurationLoadCredential](ConfigurationLoadCredential.md)
diff --git a/docs/api/ConfigurationLoadCredential.md b/docs/api/ConfigurationLoadCredential.md
new file mode 100644
index 0000000000..abd557cf2f
--- /dev/null
+++ b/docs/api/ConfigurationLoadCredential.md
@@ -0,0 +1,29 @@
+ConfigurationLoadCredential function
+======
+
+Deletes an existing configuration.
+
+# Syntax
+
+```C
+typedef
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+(QUIC_API * QUIC_CONFIGURATION_LOAD_CREDENTIAL_FN)(
+ _In_ _Pre_defensive_ HQUIC Configuration,
+ _In_ _Pre_defensive_ const QUIC_CREDENTIAL_CONFIG* CredConfig
+ );
+```
+
+# Parameters
+
+**TODO**
+
+# Remarks
+
+**TODO**
+
+# See Also
+
+[ConfigurationOpen](ConfigurationOpen.md)
+[ConfigurationClose](ConfigurationClose.md)
diff --git a/docs/api/ConfigurationOpen.md b/docs/api/ConfigurationOpen.md
new file mode 100644
index 0000000000..c04eb78e21
--- /dev/null
+++ b/docs/api/ConfigurationOpen.md
@@ -0,0 +1,45 @@
+ConfigurationOpen function
+======
+
+Creates a new configuration.
+
+# Syntax
+
+```C
+typedef
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+(QUIC_API * QUIC_CONFIGURATION_OPEN_FN)(
+ _In_ _Pre_defensive_ HQUIC Registration,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
+ _In_reads_bytes_opt_(SettingsSize)
+ const QUIC_SETTINGS* Settings,
+ _In_ uint32_t SettingsSize,
+ _In_opt_ void* Context,
+ _Outptr_ _At_(*Configuration, __drv_allocatesMem(Mem)) _Pre_defensive_
+ HQUIC* Configuration
+ );
+```
+
+# Parameters
+
+`Registration`
+
+The valid handle to an open registration object.
+
+**TODO**
+
+# Return Value
+
+The function returns a [QUIC_STATUS](QUIC_STATUS.md). The app may use `QUIC_FAILED` or `QUIC_SUCCEEDED` to determine if the function failed or succeeded.
+
+# Remarks
+
+**TODO**
+
+# See Also
+
+[ConfigurationClose](ConfigurationClose.md)
+[ConfigurationLoadCredential](ConfigurationLoadCredential.md)
diff --git a/docs/api/ConnectionOpen.md b/docs/api/ConnectionOpen.md
index 16c8ffe6a1..d73876c033 100644
--- a/docs/api/ConnectionOpen.md
+++ b/docs/api/ConnectionOpen.md
@@ -10,7 +10,8 @@ typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_CONNECTION_OPEN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
+ _In_ _Pre_defensive_ HQUIC Configuration,
_In_ _Pre_defensive_ QUIC_CONNECTION_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Connection, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -20,9 +21,13 @@ QUIC_STATUS
# Parameters
-`Session`
+`Registration`
-The valid handle to an open session object.
+The valid handle to an open registration object.
+
+`Configuration`
+
+The valid handle to an open configuration object.
`Handler`
diff --git a/docs/api/GetContext.md b/docs/api/GetContext.md
index 5bdc32ab01..5af898f84d 100644
--- a/docs/api/GetContext.md
+++ b/docs/api/GetContext.md
@@ -18,7 +18,7 @@ void*
`Handle`
-The valid handle to any API object. This includes handles to registration, session, listener, connection and stream objects.
+The valid handle to any API object. This includes handles to registration, configuration, listener, connection and stream objects.
# Return Value
diff --git a/docs/api/GetParam.md b/docs/api/GetParam.md
index 8a02b953e3..6722d9b93f 100644
--- a/docs/api/GetParam.md
+++ b/docs/api/GetParam.md
@@ -25,7 +25,7 @@ QUIC_STATUS
`Handle`
-The valid handle to any API object. This includes handles to registration, session, listener, connection and stream objects. For `Level` equal to `QUIC_PARAM_LEVEL_GLOBAL`, this parameter must be `NULL`.
+The valid handle to any API object. This includes handles to registration, configuration, listener, connection and stream objects. For `Level` equal to `QUIC_PARAM_LEVEL_GLOBAL`, this parameter must be `NULL`.
`Level`
diff --git a/docs/api/ListenerOpen.md b/docs/api/ListenerOpen.md
index a2ce981ed6..0421413d11 100644
--- a/docs/api/ListenerOpen.md
+++ b/docs/api/ListenerOpen.md
@@ -10,7 +10,7 @@ typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_LISTENER_OPEN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ _Pre_defensive_ QUIC_LISTENER_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Listener, __drv_allocatesMem(Mem)) _Pre_defensive_
diff --git a/docs/api/ListenerStart.md b/docs/api/ListenerStart.md
index 07128762c2..f906f5cf6b 100644
--- a/docs/api/ListenerStart.md
+++ b/docs/api/ListenerStart.md
@@ -11,6 +11,9 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_LISTENER_START_FN)(
_In_ _Pre_defensive_ HQUIC Listener,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR* LocalAddress
);
```
diff --git a/docs/api/QUIC_API_TABLE.md b/docs/api/QUIC_API_TABLE.md
index dade7a12d0..aefbdc5107 100644
--- a/docs/api/QUIC_API_TABLE.md
+++ b/docs/api/QUIC_API_TABLE.md
@@ -17,13 +17,12 @@ typedef struct QUIC_API_TABLE {
QUIC_REGISTRATION_OPEN_FN RegistrationOpen;
QUIC_REGISTRATION_CLOSE_FN RegistrationClose;
+ QUIC_REGISTRATION_SHUTDOWN_FN RegistrationShutdown;
- QUIC_SEC_CONFIG_CREATE_FN SecConfigCreate;
- QUIC_SEC_CONFIG_DELETE_FN SecConfigDelete;
-
- QUIC_SESSION_OPEN_FN SessionOpen;
- QUIC_SESSION_CLOSE_FN SessionClose;
- QUIC_SESSION_SHUTDOWN_FN SessionShutdown;
+ QUIC_CONFIGURATION_OPEN_FN ConfigurationOpen;
+ QUIC_CONFIGURATION_CLOSE_FN ConfigurationClose;
+ QUIC_CONFIGURATION_LOAD_CREDENTIAL_FN
+ ConfigurationLoadCredential;
QUIC_LISTENER_OPEN_FN ListenerOpen;
QUIC_LISTENER_CLOSE_FN ListenerClose;
@@ -34,6 +33,7 @@ typedef struct QUIC_API_TABLE {
QUIC_CONNECTION_CLOSE_FN ConnectionClose;
QUIC_CONNECTION_SHUTDOWN_FN ConnectionShutdown;
QUIC_CONNECTION_START_FN ConnectionStart;
+ QUIC_CONNECTION_SEND_RESUMPTION_FN ConnectionSendResumptionTicket;
QUIC_STREAM_OPEN_FN StreamOpen;
QUIC_STREAM_CLOSE_FN StreamClose;
@@ -78,25 +78,21 @@ See [RegistrationOpen](RegistrationOpen.md)
See [RegistrationClose](RegistrationClose.md)
-`SecConfigCreate`
-
-See [SecConfigCreate](SecConfigCreate.md)
-
-`SecConfigDelete`
+`RegistrationShutdown`
-See [SecConfigDelete](SecConfigDelete.md)
+See [RegistrationShutdown](RegistrationShutdown.md)
-`SessionOpen`
+`ConfigurationOpen`
-See [SessionOpen](SessionOpen.md)
+See [ConfigurationOpen](ConfigurationOpen.md)
-`SessionClose`
+`ConfigurationClose`
-See [SessionClose](SessionClose.md)
+See [ConfigurationClose](ConfigurationClose.md)
-`SessionShutdown`
+`ConfigurationLoadCredential`
-See [SessionShutdown](SessionShutdown.md)
+See [ConfigurationLoadCredential](ConfigurationLoadCredential.md)
`ListenerOpen`
diff --git a/docs/api/RegistrationClose.md b/docs/api/RegistrationClose.md
index ef0c6e17c7..26c828a4b2 100644
--- a/docs/api/RegistrationClose.md
+++ b/docs/api/RegistrationClose.md
@@ -23,7 +23,7 @@ A registration handle from a previous call to [RegistrationOpen](RegistrationOpe
# Remarks
-The application **must** close/delete all child security configurations and session objects before closing the registration. This call **will block** on those outstanding objects being cleaned up. Do no call it on any MsQuic event callback, or it will deadlock.
+The application **must** close/delete all child configurations and connection objects before closing the registration. This call **will block** on those outstanding objects being cleaned up. Do no call it on any MsQuic event callback, or it will deadlock.
# See Also
diff --git a/docs/api/SessionShutdown.md b/docs/api/RegistrationShutdown.md
similarity index 64%
rename from docs/api/SessionShutdown.md
rename to docs/api/RegistrationShutdown.md
index 6901e20d47..66abc9f5f7 100644
--- a/docs/api/SessionShutdown.md
+++ b/docs/api/RegistrationShutdown.md
@@ -1,16 +1,16 @@
-SessionShutdown function
+RegistrationShutdown function
======
-Starts the shutdown process for all connections in the session.
+Starts the shutdown process for all connections in the registration.
# Syntax
```C
typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
void
-(QUIC_API * QUIC_SESSION_SHUTDOWN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
+(QUIC_API * QUIC_REGISTRATION_SHUTDOWN_FN)(
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
_In_ _Pre_defensive_ QUIC_UINT62 ErrorCode // Application defined error code
);
@@ -18,9 +18,9 @@ void
# Parameters
-`Session`
+`Registration`
-The valid handle to an open session object.
+The valid handle to an open registration object.
`Flags`
@@ -41,6 +41,6 @@ The 62-bit error code to indicate to the peer as the reason for the shutdown.
# See Also
-[SessionOpen](SessionOpen.md)
-[SessionClose](SessionClose.md)
+[RegistrationOpen](RegistrationOpen.md)
+[RegistrationClose](RegistrationClose.md)
[ConnectionShutdown](ConnectionShutdown.md)
diff --git a/docs/api/SecConfigCreate.md b/docs/api/SecConfigCreate.md
deleted file mode 100644
index a296e00abb..0000000000
--- a/docs/api/SecConfigCreate.md
+++ /dev/null
@@ -1,67 +0,0 @@
-SecConfigCreate function
-======
-
-Asynchronously creates a new security configuration.
-
-# Syntax
-
-```C
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-(QUIC_API * QUIC_SEC_CONFIG_CREATE_FN)(
- _In_ _Pre_defensive_ HQUIC Registration,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
- _In_opt_ void* Context,
- _In_ _Pre_defensive_
- QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
- );
-```
-
-# Parameters
-
-`Registration`
-
-The valid handle to an open registration object.
-
-`Flags`
-
-The flags that control the type of the structure passed into the *Certificate* parameter.
-
-Value | Meaning
---- | ---
-**QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH**
0x00000001 | The *Certificate* parameter points to a `QUIC_CERTIFICATE_HASH` struct.
-**QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE**
0x00000002 | The *Certificate* parameter points to a `QUIC_CERTIFICATE_HASH_STORE` struct.
-**QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT**
0x00000004 | The *Certificate* parameter points to a `PCCERT_CONTEXT` (Windows specific) struct.
-**QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE**
0x00000008 | The *Certificate* parameter points to a `QUIC_CERTIFICATE_FILE` struct.
-**QUIC_SEC_CONFIG_FLAG_ENABLE_OCSP**
0x000000010 | This option can be used in conjunction with the above, and enables the Online Certificate Status Protocol (OCSP).
-
-`Certificate`
-
-A pointer to a certificate configuration struct whos type is determined by the *Flags* field.
-
-`Principal`
-
-An optional pointer, to a null-terminated string that specifies the name of the principal whose credentials the security config will reference.
-
-`Context`
-
-The app context pointer to be passed back into the *CompletionHandler*.
-
-`CompletionHandler`
-
-A pointer to the app's callback handler to be executed when the security config creation has completed.
-
-# Return Value
-
-The function returns a [QUIC_STATUS](QUIC_STATUS.md). The app may use `QUIC_FAILED` or `QUIC_SUCCEEDED` to determine if the function failed or succeeded.
-
-# Remarks
-
-**TODO**
-
-# See Also
-
-[SecConfigDelete](SecConfigDelete.md)
diff --git a/docs/api/SecConfigDelete.md b/docs/api/SecConfigDelete.md
deleted file mode 100644
index 2be53d0cfb..0000000000
--- a/docs/api/SecConfigDelete.md
+++ /dev/null
@@ -1,27 +0,0 @@
-SecConfigDelete function
-======
-
-Deletes an existing security configuration.
-
-# Syntax
-
-```C
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-(QUIC_API * QUIC_SEC_CONFIG_DELETE_FN)(
- _In_ _Pre_defensive_ QUIC_SEC_CONFIG* SecurityConfig
- );
-```
-
-# Parameters
-
-**TODO**
-
-# Remarks
-
-**TODO**
-
-# See Also
-
-[SecConfigCreate](SecConfigCreate.md)
diff --git a/docs/api/SessionClose.md b/docs/api/SessionClose.md
deleted file mode 100644
index 052c197d30..0000000000
--- a/docs/api/SessionClose.md
+++ /dev/null
@@ -1,31 +0,0 @@
-SessionClose function
-======
-
-Closes an existing session.
-
-# Syntax
-
-```C
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-(QUIC_API * QUIC_SESSION_CLOSE_FN)(
- _In_ _Pre_defensive_ __drv_freesMem(Mem)
- HQUIC Session
- );
-```
-
-# Parameters
-
-`Session`
-
-The valid handle to an open session object.
-
-# Remarks
-
-**TODO**
-
-# See Also
-
-[SessionOpen](SessionOpen.md)
-[SessionShutdown](SessionShutdown.md)
diff --git a/docs/api/SessionOpen.md b/docs/api/SessionOpen.md
deleted file mode 100644
index 6a8af8fc79..0000000000
--- a/docs/api/SessionOpen.md
+++ /dev/null
@@ -1,60 +0,0 @@
-SessionOpen function
-======
-
-Creates a new session.
-
-# Syntax
-
-```C
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-(QUIC_API * QUIC_SESSION_OPEN_FN)(
- _In_ _Pre_defensive_ HQUIC Registration,
- _In_ uint32_t SettingsSize,
- _In_reads_bytes_opt_(SettingsSize)
- const QUIC_SETTINGS* Settings,
- _In_reads_(AlpnBufferCount) _Pre_defensive_
- const QUIC_BUFFER* const AlpnBuffers,
- _In_range_(>, 0) uint32_t AlpnBufferCount,
- _In_opt_ void* Context,
- _Outptr_ _At_(*Session, __drv_allocatesMem(Mem)) _Pre_defensive_
- HQUIC* Session
- );
-```
-
-# Parameters
-
-`Registration`
-
-The valid handle to an open registration object.
-
-`AlpnBuffers`
-
-A contiguous array of QUIC_BUFFERs containing all the Application-Layer Protocol Negotiation (ALPN) buffers.
-
-`AlpnBufferCount`
-
-The number of QUIC_BUFFERS in the AlpnBuffers array.
-
-`Context`
-
-The app context pointer to be associated with the session object.
-
-`Connection`
-
-On success, returns a handle to the newly opened session object.
-
-
-# Return Value
-
-The function returns a [QUIC_STATUS](../api/QUIC_STATUS.md). The app may use `QUIC_FAILED` or `QUIC_SUCCEEDED` to determine if the function failed or succeeded.
-
-# Remarks
-
-**TODO**
-
-# See Also
-
-[SessionClose](SessionClose.md)
-[SessionShutdown](SessionShutdown.md)
diff --git a/docs/api/SetContext.md b/docs/api/SetContext.md
index ecca458772..d7af73f43e 100644
--- a/docs/api/SetContext.md
+++ b/docs/api/SetContext.md
@@ -19,7 +19,7 @@ void
`Handle`
-The valid handle to any API object. This includes handles to registration, session, listener, connection and stream objects.
+The valid handle to any API object. This includes handles to registration, configuration, listener, connection and stream objects.
`Context`
diff --git a/docs/api/SetParam.md b/docs/api/SetParam.md
index 3cf5cf947d..606619fe83 100644
--- a/docs/api/SetParam.md
+++ b/docs/api/SetParam.md
@@ -25,7 +25,7 @@ QUIC_STATUS
`Handle`
-The valid handle to any API object. This includes handles to registration, session, listener, connection and stream objects. For `Level` equal to `QUIC_PARAM_LEVEL_GLOBAL`, this parameter must be `NULL`.
+The valid handle to any API object. This includes handles to registration, configuration, listener, connection and stream objects. For `Level` equal to `QUIC_PARAM_LEVEL_GLOBAL`, this parameter must be `NULL`.
`Level`
diff --git a/scripts/update-sidecar.ps1 b/scripts/update-sidecar.ps1
new file mode 100644
index 0000000000..ce760f3d5f
--- /dev/null
+++ b/scripts/update-sidecar.ps1
@@ -0,0 +1,39 @@
+<#
+
+.SYNOPSIS
+This updates/regenerates the CLOG sidecar file.
+
+.PARAMETER Clean
+ Deletes the old sidecar file first.
+
+#>
+
+param (
+ [Parameter(Mandatory = $false)]
+ [switch]$Clean = $false
+)
+
+Set-StrictMode -Version 'Latest'
+$PSDefaultParameterValues['*:ErrorAction'] = 'Stop'
+
+$RootDir = Split-Path $PSScriptRoot -Parent
+$SrcDir = Join-Path $RootDir "src"
+
+$Files = Get-ChildItem -Path "$SrcDir\*" -Recurse -Include *.c,*.h,*.cpp,*.hpp -File
+
+$Sidecar = Join-Path $SrcDir "manifest" "clog.sidecar"
+$ConfigFile = Join-Path $SrcDir "manifest" "msquic.clog_config"
+
+$OutputDir = Join-Path $RootDir "build" "tmp"
+New-Item -Path $OutputDir -ItemType Directory -Force | Out-Null
+
+if ($Clean) {
+ Remove-Item $Sidecar -Force | Out-Null
+}
+
+foreach ($File in $Files) {
+ clog -p windows --scopePrefix "QUIC" -s $Sidecar -c $ConfigFile -i $File --outputDirectory "$OutputDir"
+ clog -p windows_kernel --scopePrefix "QUIC" -s $Sidecar -c $ConfigFile -i $File --outputDirectory "$OutputDir"
+ clog -p stubs --scopePrefix "QUIC" -s $Sidecar -c $ConfigFile -i $File --outputDirectory "$OutputDir"
+ clog -p linux --scopePrefix "QUIC" -s $Sidecar -c $ConfigFile -i $File --outputDirectory "$OutputDir"
+}
diff --git a/src/bin/winkernel/pgo_x64/msquic.pgd b/src/bin/winkernel/pgo_x64/msquic.pgd
index 7a4816d49b..b8290eca94 100644
Binary files a/src/bin/winkernel/pgo_x64/msquic.pgd and b/src/bin/winkernel/pgo_x64/msquic.pgd differ
diff --git a/src/bin/winuser/pgo_x64/msquic.pgd b/src/bin/winuser/pgo_x64/msquic.pgd
index 7a4816d49b..b8290eca94 100644
Binary files a/src/bin/winuser/pgo_x64/msquic.pgd and b/src/bin/winuser/pgo_x64/msquic.pgd differ
diff --git a/src/bin/winuser/pgo_x86/msquic.pgd b/src/bin/winuser/pgo_x86/msquic.pgd
index 00162791e1..42189dd6e2 100644
Binary files a/src/bin/winuser/pgo_x86/msquic.pgd and b/src/bin/winuser/pgo_x86/msquic.pgd differ
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 5c1e86783f..119a99c5a4 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -5,6 +5,7 @@ set(SOURCES
ack_tracker.c
api.c
binding.c
+ configuration.c
congestion_control.c
connection.c
crypto.c
@@ -26,7 +27,6 @@ set(SOURCES
send.c
send_buffer.c
sent_packet_metadata.c
- session.c
settings.c
stream.c
stream_recv.c
diff --git a/src/core/api.c b/src/core/api.c
index c13300a782..6fb64b00ba 100644
--- a/src/core/api.c
+++ b/src/core/api.c
@@ -14,9 +14,9 @@
#include "api.c.clog.h"
#endif
-#define IS_SESSION_HANDLE(Handle) \
+#define IS_REGISTRATION_HANDLE(Handle) \
( \
- (Handle) != NULL && (Handle)->Type == QUIC_HANDLE_TYPE_SESSION \
+ (Handle) != NULL && (Handle)->Type == QUIC_HANDLE_TYPE_REGISTRATION \
)
#define IS_CONN_HANDLE(Handle) \
@@ -34,7 +34,7 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
QUIC_API
MsQuicConnectionOpen(
- _In_ _Pre_defensive_ HQUIC SessionHandle,
+ _In_ _Pre_defensive_ HQUIC RegistrationHandle,
_In_ _Pre_defensive_ QUIC_CONNECTION_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*NewConnection, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -42,16 +42,16 @@ MsQuicConnectionOpen(
)
{
QUIC_STATUS Status;
- QUIC_SESSION* Session;
+ QUIC_REGISTRATION* Registration;
QUIC_CONNECTION* Connection = NULL;
QuicTraceEvent(
ApiEnter,
"[ api] Enter %u (%p).",
QUIC_TRACE_API_CONNECTION_OPEN,
- SessionHandle);
+ RegistrationHandle);
- if (!IS_SESSION_HANDLE(SessionHandle) ||
+ if (!IS_REGISTRATION_HANDLE(RegistrationHandle) ||
NewConnection == NULL ||
Handler == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
@@ -59,9 +59,9 @@ MsQuicConnectionOpen(
}
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
- Session = (QUIC_SESSION*)SessionHandle;
+ Registration = (QUIC_REGISTRATION*)RegistrationHandle;
- if ((Connection = QuicConnAlloc(Session, NULL)) == NULL) {
+ if ((Connection = QuicConnAlloc(Registration, NULL)) == NULL) {
Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Error;
}
@@ -69,7 +69,7 @@ MsQuicConnectionOpen(
Connection->ClientCallbackHandler = Handler;
Connection->ClientContext = Context;
- QuicRegistrationQueueNewConnection(Session->Registration, Connection);
+ QuicRegistrationQueueNewConnection(Registration, Connection);
*NewConnection = (HQUIC)Connection;
Status = QUIC_STATUS_SUCCESS;
@@ -238,6 +238,7 @@ QUIC_STATUS
QUIC_API
MsQuicConnectionStart(
_In_ _Pre_defensive_ HQUIC Handle,
+ _In_ _Pre_defensive_ HQUIC ConfigHandle,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_reads_opt_z_(QUIC_MAX_SNI_LENGTH)
const char* ServerName,
@@ -246,6 +247,7 @@ MsQuicConnectionStart(
{
QUIC_STATUS Status;
QUIC_CONNECTION* Connection;
+ QUIC_CONFIGURATION* Configuration;
QUIC_OPERATION* Oper;
char* ServerNameCopy = NULL;
@@ -257,7 +259,9 @@ MsQuicConnectionStart(
QUIC_TRACE_API_CONNECTION_START,
Handle);
- if (ServerPort == 0) {
+ if (ConfigHandle == NULL ||
+ ConfigHandle->Type != QUIC_HANDLE_TYPE_CONFIGURATION ||
+ ServerPort == 0) {
Status = QUIC_STATUS_INVALID_PARAMETER;
goto Error;
}
@@ -299,6 +303,13 @@ MsQuicConnectionStart(
goto Error;
}
+ Configuration = (QUIC_CONFIGURATION*)ConfigHandle;
+
+ if (Configuration->SecurityConfig == NULL) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
if (ServerName != NULL) {
//
// Validate the server name length.
@@ -340,7 +351,10 @@ MsQuicConnectionStart(
0);
goto Error;
}
+
+ QuicConfigurationAddRef(Configuration);
Oper->API_CALL.Context->Type = QUIC_API_TYPE_CONN_START;
+ Oper->API_CALL.Context->CONN_START.Configuration = Configuration;
Oper->API_CALL.Context->CONN_START.ServerName = ServerNameCopy;
Oper->API_CALL.Context->CONN_START.ServerPort = ServerPort;
Oper->API_CALL.Context->CONN_START.Family = Family;
@@ -366,6 +380,99 @@ MsQuicConnectionStart(
return Status;
}
+_IRQL_requires_max_(DISPATCH_LEVEL)
+QUIC_STATUS
+QUIC_API
+MsQuicConnectionSetConfiguration(
+ _In_ _Pre_defensive_ HQUIC Handle,
+ _In_ _Pre_defensive_ HQUIC ConfigHandle
+ )
+{
+ QUIC_STATUS Status;
+ QUIC_CONNECTION* Connection;
+ QUIC_CONFIGURATION* Configuration;
+ QUIC_OPERATION* Oper;
+
+ QUIC_PASSIVE_CODE();
+
+ QuicTraceEvent(
+ ApiEnter,
+ "[ api] Enter %u (%p).",
+ QUIC_TRACE_API_CONNECTION_SET_CONFIGURATION,
+ Handle);
+
+ if (ConfigHandle == NULL ||
+ ConfigHandle->Type != QUIC_HANDLE_TYPE_CONFIGURATION) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ if (IS_CONN_HANDLE(Handle)) {
+#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
+ Connection = (QUIC_CONNECTION*)Handle;
+ } else if (IS_STREAM_HANDLE(Handle)) {
+#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
+ QUIC_STREAM* Stream = (QUIC_STREAM*)Handle;
+ QUIC_TEL_ASSERT(!Stream->Flags.HandleClosed);
+ QUIC_TEL_ASSERT(!Stream->Flags.Freed);
+ Connection = Stream->Connection;
+ } else {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ QUIC_CONN_VERIFY(Connection, !Connection->State.Freed);
+
+ if (!QuicConnIsServer(Connection)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ if (Connection->Configuration != NULL) {
+ Status = QUIC_STATUS_INVALID_STATE;
+ goto Error;
+ }
+
+ Configuration = (QUIC_CONFIGURATION*)ConfigHandle;
+
+ if (Configuration->SecurityConfig == NULL) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ QUIC_CONN_VERIFY(Connection, !Connection->State.HandleClosed);
+ QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ Oper = QuicOperationAlloc(Connection->Worker, QUIC_OPER_TYPE_API_CALL);
+ if (Oper == NULL) {
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "CONN_SET_CONFIGURATION operation",
+ 0);
+ goto Error;
+ }
+
+ QuicConfigurationAddRef(Configuration);
+ Oper->API_CALL.Context->Type = QUIC_API_TYPE_CONN_SET_CONFIGURATION;
+ Oper->API_CALL.Context->CONN_SET_CONFIGURATION.Configuration = Configuration;
+
+ //
+ // Queue the operation but don't wait for the completion.
+ //
+ QuicConnQueueOper(Connection, Oper);
+ Status = QUIC_STATUS_PENDING;
+
+Error:
+
+ QuicTraceEvent(
+ ApiExitStatus,
+ "[ api] Exit %u",
+ Status);
+
+ return Status;
+}
+
_IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
QUIC_API
@@ -1195,10 +1302,10 @@ MsQuicSetParam(
}
if (Handle->Type == QUIC_HANDLE_TYPE_REGISTRATION ||
- Handle->Type == QUIC_HANDLE_TYPE_SESSION ||
+ Handle->Type == QUIC_HANDLE_TYPE_CONFIGURATION ||
Handle->Type == QUIC_HANDLE_TYPE_LISTENER) {
//
- // Registration, Session and Listener parameters are processed inline.
+ // Registration, Configuration and Listener parameters are processed inline.
//
Status = QuicLibrarySetParam(Handle, Level, Param, BufferLength, Buffer);
goto Error;
@@ -1306,10 +1413,10 @@ MsQuicGetParam(
}
if (Handle->Type == QUIC_HANDLE_TYPE_REGISTRATION ||
- Handle->Type == QUIC_HANDLE_TYPE_SESSION ||
+ Handle->Type == QUIC_HANDLE_TYPE_CONFIGURATION ||
Handle->Type == QUIC_HANDLE_TYPE_LISTENER) {
//
- // Registration, Session and Listener parameters are processed inline.
+ // Registration, Configuration and Listener parameters are processed inline.
//
Status = QuicLibraryGetParam(Handle, Level, Param, BufferLength, Buffer);
goto Error;
diff --git a/src/core/api.h b/src/core/api.h
index 9ba657d449..083bb5db06 100644
--- a/src/core/api.h
+++ b/src/core/api.h
@@ -22,64 +22,52 @@ MsQuicRegistrationClose(
HQUIC Registration
);
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QUIC_API
-MsQuicSecConfigCreate(
- _In_ _Pre_defensive_ HQUIC Registration,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
- _In_opt_ void* Context,
- _In_ _Pre_defensive_
- QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
- );
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
void
QUIC_API
-MsQuicSecConfigDelete(
- _In_ _Pre_defensive_ QUIC_SEC_CONFIG* SecurityConfig
+MsQuicRegistrationShutdown(
+ _In_ _Pre_defensive_ HQUIC Registration,
+ _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
+ _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode
);
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QUIC_API
-MsQuicSessionOpen(
- _In_ _Pre_defensive_ HQUIC RegistrationContext,
- _In_ uint32_t SettingsSize,
- _In_reads_bytes_opt_(SettingsSize)
- const QUIC_SETTINGS* Settings,
+MsQuicConfigurationOpen(
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_reads_(AlpnBufferCount) _Pre_defensive_
const QUIC_BUFFER* const AlpnBuffers,
- _In_ uint32_t AlpnBufferCount,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
+ _In_reads_bytes_opt_(SettingsSize)
+ const QUIC_SETTINGS* Settings,
+ _In_ uint32_t SettingsSize,
_In_opt_ void* Context,
- _Outptr_ _At_(*Session, __drv_allocatesMem(Mem)) _Pre_defensive_
- HQUIC *Session
+ _Outptr_ _At_(*Configuration, __drv_allocatesMem(Mem)) _Pre_defensive_
+ HQUIC* Configuration
);
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QUIC_API
-MsQuicSessionClose(
+MsQuicConfigurationClose(
_In_ _Pre_defensive_ __drv_freesMem(Mem)
- HQUIC Session
+ HQUIC Configuration
);
_IRQL_requires_max_(PASSIVE_LEVEL)
-void
+QUIC_STATUS
QUIC_API
-MsQuicSessionShutdown(
- _In_ _Pre_defensive_ HQUIC Session,
- _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
- _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode
+MsQuicConfigurationLoadCredential(
+ _In_ _Pre_defensive_ HQUIC Configuration,
+ _In_ _Pre_defensive_ const QUIC_CREDENTIAL_CONFIG* CredConfig
);
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QUIC_API
MsQuicListenerOpen(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ _Pre_defensive_ QUIC_LISTENER_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Listener, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -99,6 +87,9 @@ QUIC_STATUS
QUIC_API
MsQuicListenerStart(
_In_ _Pre_defensive_ HQUIC Handle,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR* LocalAddress
);
@@ -113,7 +104,7 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
QUIC_API
MsQuicConnectionOpen(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ _Pre_defensive_ QUIC_CONNECTION_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Connection, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -142,12 +133,21 @@ QUIC_STATUS
QUIC_API
MsQuicConnectionStart(
_In_ _Pre_defensive_ HQUIC Handle,
+ _In_ _Pre_defensive_ HQUIC ConfigHandle,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_reads_opt_z_(QUIC_MAX_SNI_LENGTH)
const char* ServerName,
_In_ uint16_t ServerPort // Host byte order
);
+_IRQL_requires_max_(DISPATCH_LEVEL)
+QUIC_STATUS
+QUIC_API
+MsQuicConnectionSetConfiguration(
+ _In_ _Pre_defensive_ HQUIC Handle,
+ _In_ _Pre_defensive_ HQUIC ConfigHandle
+ );
+
_IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
QUIC_API
diff --git a/src/core/binding.c b/src/core/binding.c
index 187b043dfd..c25fc3d1f0 100644
--- a/src/core/binding.c
+++ b/src/core/binding.c
@@ -332,7 +332,7 @@ QuicBindingRegisterListener(
continue;
}
- if (QuicSessionHasAlpnOverlap(NewListener->Session, ExistingListener->Session)) {
+ if (QuicListenerHasAlpnOverlap(NewListener, ExistingListener)) {
QuicTraceLogWarning(
BindingListenerAlreadyRegistered,
"[bind][%p] Listener (%p) already registered on ALPN",
@@ -407,7 +407,7 @@ QuicBindingGetListener(
}
}
- if (QuicSessionMatchesAlpn(ExistingListener->Session, Info)) {
+ if (QuicListenerMatchesAlpn(ExistingListener, Info)) {
if (QuicRundownAcquire(&ExistingListener->Rundown)) {
Listener = ExistingListener;
}
@@ -440,6 +440,60 @@ QuicBindingUnregisterListener(
QuicDispatchRwLockReleaseExclusive(&Binding->RwLock);
}
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicBindingAcceptConnection(
+ _In_ QUIC_BINDING* Binding,
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ QUIC_NEW_CONNECTION_INFO* Info
+ )
+{
+ //
+ // Find a listener that matches the incoming connection request, by IP, port
+ // and ALPN.
+ //
+ QUIC_LISTENER* Listener = QuicBindingGetListener(Binding, Info);
+ if (Listener == NULL) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "No listener found for connection");
+ QuicConnTransportError(
+ Connection,
+ QUIC_ERROR_CRYPTO_NO_APPLICATION_PROTOCOL);
+ return;
+ }
+
+ //
+ // Save the negotiated ALPN (starting with the length prefix) to be
+ // used later in building up the TLS response.
+ //
+ uint16_t NegotiatedAlpnLength = 1 + Info->NegotiatedAlpn[-1];
+ uint8_t* NegotiatedAlpn = QUIC_ALLOC_NONPAGED(NegotiatedAlpnLength);
+ if (NegotiatedAlpn == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "NegotiatedAlpn",
+ NegotiatedAlpnLength);
+ QuicConnTransportError(
+ Connection,
+ QUIC_ERROR_INTERNAL_ERROR);
+ return;
+ }
+ QuicCopyMemory(NegotiatedAlpn, Info->NegotiatedAlpn - 1, NegotiatedAlpnLength);
+ Connection->Crypto.TlsState.NegotiatedAlpn = NegotiatedAlpn;
+
+ //
+ // Allow for the listener to decide if it wishes to accept the incoming
+ // connection.
+ //
+ QuicListenerAcceptConnection(Listener, Connection, Info);
+
+ QuicRundownRelease(&Listener->Rundown);
+}
+
_IRQL_requires_max_(DISPATCH_LEVEL)
BOOLEAN
QuicBindingAddSourceConnectionID(
@@ -632,16 +686,16 @@ QuicBindingQueueStatelessOperation(
_In_ QUIC_RECV_DATAGRAM* Datagram
)
{
- if (MsQuicLib.WorkerPool == NULL) {
+ if (MsQuicLib.StatelessRegistration == NULL) {
QuicPacketLogDrop(Binding, QuicDataPathRecvDatagramToRecvPacket(Datagram),
- "NULL worker pool");
+ "NULL stateless registration");
return FALSE;
}
- QUIC_WORKER* Worker = QuicLibraryGetWorker();
+ QUIC_WORKER* Worker = QuicLibraryGetWorker(Datagram);
if (QuicWorkerIsOverloaded(Worker)) {
QuicPacketLogDrop(Binding, QuicDataPathRecvDatagramToRecvPacket(Datagram),
- "Worker overloaded (stateless oper)");
+ "Stateless worker overloaded (stateless oper)");
return FALSE;
}
@@ -1138,18 +1192,30 @@ QuicBindingCreateConnection(
// QuicLookupAddRemoteHash.
//
- QUIC_CONNECTION* Connection = NULL;
QUIC_RECV_PACKET* Packet = QuicDataPathRecvDatagramToRecvPacket(Datagram);
+ //
+ // Pick a stateless worker to process the client hello and if successful,
+ // the connection will later be moved to the correct registration's worker.
+ //
+ QUIC_WORKER* Worker = QuicLibraryGetWorker(Datagram);
+ if (QuicWorkerIsOverloaded(Worker)) {
+ QuicPacketLogDrop(Binding, Packet, "Stateless worker overloaded");
+ return NULL;
+ }
+
+ QUIC_CONNECTION* Connection = NULL;
QUIC_CONNECTION* NewConnection =
QuicConnAlloc(
- MsQuicLib.UnregisteredSession,
+ MsQuicLib.StatelessRegistration,
Datagram);
if (NewConnection == NULL) {
QuicPacketLogDrop(Binding, Packet, "Failed to initialize new connection");
return NULL;
}
+ QuicWorkerAssignConnection(Worker, NewConnection);
+
BOOLEAN BindingRefAdded = FALSE;
QUIC_DBG_ASSERT(NewConnection->SourceCids.Next != NULL);
QUIC_CID_HASH_ENTRY* SourceCid =
@@ -1160,17 +1226,6 @@ QuicBindingCreateConnection(
QuicConnAddRef(NewConnection, QUIC_CONN_REF_LOOKUP_RESULT);
- //
- // Pick a temporary worker to process the client hello and if successful,
- // the connection will later be moved to the correct registration's worker.
- //
- QUIC_WORKER* Worker = QuicLibraryGetWorker();
- if (QuicWorkerIsOverloaded(Worker)) {
- QuicPacketLogDrop(Binding, Packet, "Worker overloaded");
- goto Exit;
- }
- QuicWorkerAssignConnection(Worker, NewConnection);
-
//
// Even though the new connection might not end up being put in this
// binding's lookup table, it must be completely set up before it is
diff --git a/src/core/binding.h b/src/core/binding.h
index c658852eb7..dcc26bf080 100644
--- a/src/core/binding.h
+++ b/src/core/binding.h
@@ -320,6 +320,17 @@ QuicBindingUnregisterListener(
_In_ QUIC_LISTENER* Listener
);
+//
+// Passes the connection to the binding to (possibly) accept it.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicBindingAcceptConnection(
+ _In_ QUIC_BINDING* Binding,
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ QUIC_NEW_CONNECTION_INFO* Info
+ );
+
//
// Attempts to insert the connection's new source CID into the binding's
// lookup table.
diff --git a/src/core/configuration.c b/src/core/configuration.c
new file mode 100644
index 0000000000..5114d59d00
--- /dev/null
+++ b/src/core/configuration.c
@@ -0,0 +1,486 @@
+/*++
+
+ Copyright (c) Microsoft Corporation.
+ Licensed under the MIT License.
+
+Abstract:
+
+ A configurations is a container for multiple different settings, including
+ TLS security configuration and QUIC settings. On Windows it also manages
+ silo and network compartment state.
+
+--*/
+
+#include "precomp.h"
+#ifdef QUIC_CLOG
+#include "configuration.c.clog.h"
+#endif
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QUIC_API
+MsQuicConfigurationOpen(
+ _In_ _Pre_defensive_ HQUIC Handle,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
+ _In_reads_bytes_opt_(SettingsSize)
+ const QUIC_SETTINGS* Settings,
+ _In_ uint32_t SettingsSize,
+ _In_opt_ void* Context,
+ _Outptr_ _At_(*Configuration, __drv_allocatesMem(Mem)) _Pre_defensive_
+ HQUIC* NewConfiguration
+ )
+{
+ QUIC_STATUS Status = QUIC_STATUS_INVALID_PARAMETER;
+ QUIC_REGISTRATION* Registration = (QUIC_REGISTRATION*)Handle;
+ QUIC_CONFIGURATION* Configuration = NULL;
+ uint8_t* AlpnList;
+ uint32_t AlpnListLength;
+
+ QuicTraceEvent(
+ ApiEnter,
+ "[ api] Enter %u (%p).",
+ QUIC_TRACE_API_CONFIGURATION_OPEN,
+ Handle);
+
+ if (Handle == NULL ||
+ Handle->Type != QUIC_HANDLE_TYPE_REGISTRATION ||
+ AlpnBuffers == NULL ||
+ AlpnBufferCount == 0 ||
+ NewConfiguration == NULL) {
+ goto Error;
+ }
+
+ if (Settings != NULL &&
+ SettingsSize < (uint32_t)FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ AlpnListLength = 0;
+ for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
+ if (AlpnBuffers[i].Length == 0 ||
+ AlpnBuffers[i].Length > QUIC_MAX_ALPN_LENGTH) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ AlpnListLength += sizeof(uint8_t) + AlpnBuffers[i].Length;
+ }
+ if (AlpnListLength > UINT16_MAX) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ QUIC_ANALYSIS_ASSERT(AlpnListLength <= UINT16_MAX);
+
+ Configuration = QUIC_ALLOC_NONPAGED(sizeof(QUIC_CONFIGURATION) + AlpnListLength);
+ if (Configuration == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "QUIC_CONFIGURATION" ,
+ sizeof(QUIC_CONFIGURATION));
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ QuicZeroMemory(Configuration, sizeof(QUIC_CONFIGURATION));
+ Configuration->Type = QUIC_HANDLE_TYPE_CONFIGURATION;
+ Configuration->ClientContext = Context;
+ Configuration->Registration = Registration;
+ QuicRefInitialize(&Configuration->RefCount);
+
+ Configuration->AlpnListLength = (uint16_t)AlpnListLength;
+ AlpnList = Configuration->AlpnList;
+
+ for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
+ AlpnList[0] = (uint8_t)AlpnBuffers[i].Length;
+ AlpnList++;
+
+ QuicCopyMemory(
+ AlpnList,
+ AlpnBuffers[i].Buffer,
+ AlpnBuffers[i].Length);
+ AlpnList += AlpnBuffers[i].Length;
+ }
+
+#ifdef QUIC_COMPARTMENT_ID
+ Configuration->CompartmentId = QuicCompartmentIdGetCurrent();
+#endif
+
+ //
+ // TODO - Optimize the settings code below:
+ //
+ // 1. When there is no silo support, the per-app name settings can live in
+ // the registration.
+ //
+ // 2. When there is silo support (Windows kernel mode), then there will be
+ // a ton of duplication between every single configuration (multiple
+ // server certificate scenarios), so we should have an intermediate
+ // object (ref counted) that is per-silo, per-app to handle these.
+ //
+
+#ifdef QUIC_SILO
+ Configuration->Silo = QuicSiloGetCurrentServer();
+ QuicSiloAddRef(Configuration->Silo);
+ if (Configuration->Silo != NULL) {
+ //
+ // Only need to load base key if in a silo. Otherwise, the library already
+ // read in the default silo settings.
+ //
+ Status =
+ QuicStorageOpen(
+ NULL,
+ (QUIC_STORAGE_CHANGE_CALLBACK_HANDLER)QuicConfigurationSettingsChanged,
+ Configuration,
+ &Configuration->Storage);
+ if (QUIC_FAILED(Status)) {
+ QuicTraceLogWarning(
+ ConfigurationOpenStorageFailed,
+ "[cnfg][%p] Failed to open settings, 0x%x",
+ Configuration,
+ Status);
+ Status = QUIC_STATUS_SUCCESS; // Non-fatal, as the process may not have access
+ }
+ }
+#endif
+
+ if (Registration->AppNameLength != 0) {
+ char SpecificAppKey[UINT8_MAX + sizeof(QUIC_SETTING_APP_KEY)] = QUIC_SETTING_APP_KEY;
+ QuicCopyMemory(
+ SpecificAppKey + sizeof(QUIC_SETTING_APP_KEY) - 1,
+ Registration->AppName,
+ Registration->AppNameLength);
+ Status =
+ QuicStorageOpen(
+ SpecificAppKey,
+ (QUIC_STORAGE_CHANGE_CALLBACK_HANDLER)QuicConfigurationSettingsChanged,
+ Configuration,
+ &Configuration->AppSpecificStorage);
+ if (QUIC_FAILED(Status)) {
+ QuicTraceLogWarning(
+ ConfigurationOpenAppStorageFailed,
+ "[cnfg][%p] Failed to open app specific settings, 0x%x",
+ Configuration,
+ Status);
+ Status = QUIC_STATUS_SUCCESS; // Non-fatal, as the process may not have access
+ }
+ }
+
+ if (Settings != NULL && Settings->IsSetFlags != 0) {
+ QUIC_DBG_ASSERT(SettingsSize >= (uint32_t)FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey));
+ if (!QuicSettingApply(
+ &Configuration->Settings,
+ TRUE,
+ SettingsSize,
+ Settings)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ }
+
+ QuicTraceEvent(
+ ConfigurationCreated,
+ "[cnfg][%p] Created, Registration=%p",
+ Configuration,
+ Registration);
+
+ QuicConfigurationSettingsChanged(Configuration);
+
+ BOOLEAN Result = QuicRundownAcquire(&Registration->Rundown);
+ QUIC_FRE_ASSERT(Result);
+
+ QuicLockAcquire(&Registration->ConfigLock);
+ QuicListInsertTail(&Registration->Configurations, &Configuration->Link);
+ QuicLockRelease(&Registration->ConfigLock);
+
+ *NewConfiguration = (HQUIC)Configuration;
+
+Error:
+
+ if (QUIC_FAILED(Status) && Configuration != NULL) {
+ QuicStorageClose(Configuration->AppSpecificStorage);
+#ifdef QUIC_SILO
+ QuicStorageClose(Configuration->Storage);
+ QuicSiloRelease(Configuration->Silo);
+#endif
+ QUIC_FREE(Configuration);
+ }
+
+ QuicTraceEvent(
+ ApiExitStatus,
+ "[ api] Exit %u",
+ Status);
+
+ return Status;
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicConfigurationUninitialize(
+ _In_ __drv_freesMem(Mem) QUIC_CONFIGURATION* Configuration
+ )
+{
+ QUIC_DBG_ASSERT(Configuration != NULL);
+
+ QuicTraceEvent(
+ ConfigurationCleanup,
+ "[cnfg][%p] Cleaning up",
+ Configuration);
+
+ QuicLockAcquire(&Configuration->Registration->ConfigLock);
+ QuicListEntryRemove(&Configuration->Link);
+ QuicLockRelease(&Configuration->Registration->ConfigLock);
+
+ if (Configuration->SecurityConfig != NULL) {
+ QuicTlsSecConfigDelete(Configuration->SecurityConfig);
+ }
+
+ QuicStorageClose(Configuration->AppSpecificStorage);
+#ifdef QUIC_SILO
+ QuicStorageClose(Configuration->Storage);
+ QuicSiloRelease(Configuration->Silo);
+#endif
+
+ QuicRundownRelease(&Configuration->Registration->Rundown);
+
+ QuicTraceEvent(
+ ConfigurationDestroyed,
+ "[cnfg][%p] Destroyed",
+ Configuration);
+ QUIC_FREE(Configuration);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QUIC_API
+MsQuicConfigurationClose(
+ _In_ _Pre_defensive_ __drv_freesMem(Mem)
+ HQUIC Handle
+ )
+{
+ QuicTraceEvent(
+ ApiEnter,
+ "[ api] Enter %u (%p).",
+ QUIC_TRACE_API_CONFIGURATION_CLOSE,
+ Handle);
+
+ if (Handle != NULL && Handle->Type == QUIC_HANDLE_TYPE_CONFIGURATION) {
+#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
+ QuicConfigurationRelease((QUIC_CONFIGURATION*)Handle);
+ }
+
+ QuicTraceEvent(
+ ApiExit,
+ "[ api] Exit");
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
+void
+QUIC_API
+MsQuicConfigurationLoadCredentialComplete(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _In_opt_ void* Context,
+ _In_ QUIC_STATUS Status,
+ _In_opt_ QUIC_SEC_CONFIG* SecurityConfig
+ )
+{
+ QUIC_CONFIGURATION* Configuration = (QUIC_CONFIGURATION*)Context;
+
+ QUIC_DBG_ASSERT(Configuration != NULL);
+ QUIC_DBG_ASSERT(CredConfig != NULL);
+
+ if (QUIC_SUCCEEDED(Status)) {
+ QUIC_DBG_ASSERT(SecurityConfig);
+ Configuration->SecurityConfig = SecurityConfig;
+ } else {
+ QUIC_DBG_ASSERT(SecurityConfig == NULL);
+ }
+
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ QUIC_DBG_ASSERT(CredConfig->AsyncHandler != NULL);
+ CredConfig->AsyncHandler(
+ (HQUIC)Configuration,
+ Configuration->ClientContext,
+ Status);
+ QuicConfigurationRelease(Configuration);
+ }
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QUIC_API
+MsQuicConfigurationLoadCredential(
+ _In_ _Pre_defensive_ HQUIC Handle,
+ _In_ _Pre_defensive_ const QUIC_CREDENTIAL_CONFIG* CredConfig
+ )
+{
+ QUIC_STATUS Status = QUIC_STATUS_INVALID_PARAMETER;
+
+ QuicTraceEvent(
+ ApiEnter,
+ "[ api] Enter %u (%p).",
+ QUIC_TRACE_API_CONFIGURATION_LOAD_CREDENTIAL,
+ Handle);
+
+ if (Handle != NULL &&
+ CredConfig != NULL &&
+ Handle->Type == QUIC_HANDLE_TYPE_CONFIGURATION) {
+
+#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
+ QUIC_CONFIGURATION* Configuration = (QUIC_CONFIGURATION*)Handle;
+
+ QuicConfigurationAddRef(Configuration);
+
+ Status =
+ QuicTlsSecConfigCreate(
+ CredConfig,
+ Configuration,
+ MsQuicConfigurationLoadCredentialComplete);
+ if (!(CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) ||
+ QUIC_FAILED(Status)) {
+ //
+ // Release ref for synchronous calls or asynchronous failures.
+ //
+ QuicConfigurationRelease(Configuration);
+ }
+ }
+
+ QuicTraceEvent(
+ ApiExitStatus,
+ "[ api] Exit %u",
+ Status);
+
+ return Status;
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicConfigurationTraceRundown(
+ _In_ QUIC_CONFIGURATION* Configuration
+ )
+{
+ QuicTraceEvent(
+ ConfigurationRundown,
+ "[cnfg][%p] Rundown, Registration=%p",
+ Configuration,
+ Configuration->Registration);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
+void
+QuicConfigurationSettingsChanged(
+ _Inout_ QUIC_CONFIGURATION* Configuration
+ )
+{
+#ifdef QUIC_SILO
+ if (Configuration->Storage != NULL) {
+ QuicSettingsSetDefault(&Configuration->Settings);
+ QuicSettingsLoad(&Configuration->Settings, Configuration->Storage);
+ } else {
+ QuicSettingsCopy(&Configuration->Settings, &MsQuicLib.Settings);
+ }
+#else
+ QuicSettingsCopy(&Configuration->Settings, &MsQuicLib.Settings);
+#endif
+
+ if (Configuration->AppSpecificStorage != NULL) {
+ QuicSettingsLoad(&Configuration->Settings, Configuration->AppSpecificStorage);
+ }
+
+ QuicTraceLogInfo(
+ ConfigurationSettingsUpdated,
+ "[cnfg][%p] Settings %p Updated",
+ Configuration,
+ &Configuration->Settings);
+ QuicSettingsDump(&Configuration->Settings);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QuicConfigurationParamGet(
+ _In_ QUIC_CONFIGURATION* Configuration,
+ _In_ uint32_t Param,
+ _Inout_ uint32_t* BufferLength,
+ _Out_writes_bytes_opt_(*BufferLength)
+ void* Buffer
+ )
+{
+ QUIC_STATUS Status;
+
+ switch (Param) {
+ case QUIC_PARAM_CONFIGURATION_SETTINGS:
+
+ if (*BufferLength < sizeof(QUIC_SETTINGS)) {
+ *BufferLength = sizeof(QUIC_SETTINGS);
+ Status = QUIC_STATUS_BUFFER_TOO_SMALL; // TODO - Support partial
+ break;
+ }
+
+ if (Buffer == NULL) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ *BufferLength = sizeof(QUIC_SETTINGS);
+ QuicCopyMemory(Buffer, &Configuration->Settings, sizeof(QUIC_SETTINGS));
+
+ Status = QUIC_STATUS_SUCCESS;
+ break;
+
+ default:
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ return Status;
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QuicConfigurationParamSet(
+ _In_ QUIC_CONFIGURATION* Configuration,
+ _In_ uint32_t Param,
+ _In_ uint32_t BufferLength,
+ _In_reads_bytes_(BufferLength)
+ const void* Buffer
+ )
+{
+ QUIC_STATUS Status;
+
+ switch (Param) {
+ case QUIC_PARAM_GLOBAL_SETTINGS:
+
+ if (BufferLength != sizeof(QUIC_SETTINGS)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER; // TODO - Support partial
+ break;
+ }
+
+ QuicTraceLogInfo(
+ ConfigurationSetSettings,
+ "[cnfg][%p] Setting new settings",
+ Configuration);
+
+ if (!QuicSettingApply(
+ &Configuration->Settings,
+ TRUE,
+ BufferLength,
+ (QUIC_SETTINGS*)Buffer)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ QuicSettingsDumpNew(BufferLength, (QUIC_SETTINGS*)Buffer);
+
+ Status = QUIC_STATUS_SUCCESS;
+ break;
+
+ default:
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ return Status;
+}
diff --git a/src/core/configuration.h b/src/core/configuration.h
new file mode 100644
index 0000000000..8835949873
--- /dev/null
+++ b/src/core/configuration.h
@@ -0,0 +1,161 @@
+/*++
+
+ Copyright (c) Microsoft Corporation.
+ Licensed under the MIT License.
+
+--*/
+
+//
+// Represents a set of TLS and QUIC configurations and settings.
+//
+typedef struct QUIC_CONFIGURATION {
+
+ struct QUIC_HANDLE;
+
+ //
+ // Parent registration.
+ //
+ QUIC_REGISTRATION* Registration;
+
+ //
+ // Link in the parent registration's Configurations list.
+ //
+ QUIC_LIST_ENTRY Link;
+
+ //
+ // Reference count for tracking lifetime.
+ //
+ QUIC_REF_COUNT RefCount;
+
+ //
+ // The TLS security configurations.
+ //
+ QUIC_SEC_CONFIG* SecurityConfig;
+
+#ifdef QUIC_COMPARTMENT_ID
+ //
+ // The network compartment ID.
+ //
+ QUIC_COMPARTMENT_ID CompartmentId;
+#endif
+
+#ifdef QUIC_SILO
+ //
+ // The silo.
+ //
+ QUIC_SILO Silo;
+
+ //
+ // Handle to persistent storage (registry).
+ //
+ QUIC_STORAGE* Storage; // Only necessary if it could be in a different silo.
+#endif
+ QUIC_STORAGE* AppSpecificStorage;
+
+ //
+ // Configurable (app & registry) settings.
+ //
+ QUIC_SETTINGS Settings;
+
+ uint16_t AlpnListLength;
+ uint8_t AlpnList[0];
+
+} QUIC_CONFIGURATION;
+
+#ifdef QUIC_SILO
+
+#define QuicConfigurationAttachSilo(Configuration) \
+ QUIC_SILO PrevSilo = (Configuration == NULL || Configuration->Silo == NULL) ? \
+ QUIC_SILO_INVALID : QuicSiloAttach(Configuration->Silo)
+
+#define QuicConfigurationDetachSilo() \
+ if (PrevSilo != QUIC_SILO_INVALID) {\
+ QuicSiloDetatch(PrevSilo); \
+ }
+
+#else
+
+#define QuicConfigurationAttachSilo(Configuration)
+#define QuicConfigurationDetachSilo()
+
+#endif // #ifdef QUIC_SILO
+
+//
+// Cleans up the configuration memory.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicConfigurationUninitialize(
+ _In_ __drv_freesMem(Mem) QUIC_CONFIGURATION* Configuration
+ );
+
+//
+// Adds a new references to the configuration.
+//
+inline
+void
+QuicConfigurationAddRef(
+ _In_ QUIC_CONFIGURATION* Configuration
+ )
+{
+ QuicRefIncrement(&Configuration->RefCount);
+}
+
+//
+// Releases a reference to the configuration and cleans it up if it's the last.
+//
+inline
+void
+QuicConfigurationRelease(
+ _In_ QUIC_CONFIGURATION* Configuration
+ )
+{
+ if (QuicRefDecrement(&Configuration->RefCount)) {
+ QuicConfigurationUninitialize(Configuration);
+ }
+}
+
+//
+// Tracing rundown for the configuration.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicConfigurationTraceRundown(
+ _In_ QUIC_CONFIGURATION* Configuration
+ );
+
+//
+// Global or local settings were changed.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
+void
+QuicConfigurationSettingsChanged(
+ _Inout_ QUIC_CONFIGURATION* Configuration
+ );
+
+//
+// Gets a configuration parameter.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QuicConfigurationParamGet(
+ _In_ QUIC_CONFIGURATION* Configuration,
+ _In_ uint32_t Param,
+ _Inout_ uint32_t* BufferLength,
+ _Out_writes_bytes_opt_(*BufferLength)
+ void* Buffer
+ );
+
+//
+// Sets a configuration parameter.
+//
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QuicConfigurationParamSet(
+ _In_ QUIC_CONFIGURATION* Configuration,
+ _In_ uint32_t Param,
+ _In_ uint32_t BufferLength,
+ _In_reads_bytes_(BufferLength)
+ const void* Buffer
+ );
diff --git a/src/core/congestion_control.c b/src/core/congestion_control.c
index 94bdbff4c8..1adab44860 100644
--- a/src/core/congestion_control.c
+++ b/src/core/congestion_control.c
@@ -160,7 +160,7 @@ QuicCongestionControlGetSendAllowance(
//
SendAllowance = 0;
- } else if (!Connection->State.UsePacing || !Connection->Paths[0].GotFirstRttSample) {
+ } else if (!Connection->Settings.PacingEnabled || !Connection->Paths[0].GotFirstRttSample) {
//
// Pacing is disabled or we don't have an RTT sample yet, so just send
// everything we can.
diff --git a/src/core/connection.c b/src/core/connection.c
index 61cd478a70..e64fb415ee 100644
--- a/src/core/connection.c
+++ b/src/core/connection.c
@@ -42,10 +42,16 @@ typedef struct QUIC_RECEIVE_PROCESSING_STATE {
uint16_t PartitionIndex;
} QUIC_RECEIVE_PROCESSING_STATE;
+
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicConnInitializeCrypto(
- _In_ QUIC_CONNECTION* Connection
+BOOLEAN
+QuicConnApplyNewSettings(
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN OverWrite,
+ _In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
+ uint32_t NewSettingsSize,
+ _In_reads_bytes_(NewSettingsSize)
+ const QUIC_SETTINGS* NewSettings
);
_IRQL_requires_max_(DISPATCH_LEVEL)
@@ -54,7 +60,7 @@ _Must_inspect_result_
_Success_(return != NULL)
QUIC_CONNECTION*
QuicConnAlloc(
- _In_ QUIC_SESSION* Session,
+ _In_ QUIC_REGISTRATION* Registration,
_In_opt_ const QUIC_RECV_DATAGRAM* const Datagram
)
{
@@ -107,19 +113,21 @@ QuicConnAlloc(
#endif
Connection->PartitionID = PartitionId;
Connection->State.Allocated = TRUE;
- Connection->State.UseSendBuffer = QUIC_DEFAULT_SEND_BUFFERING_ENABLE;
Connection->State.ShareBinding = IsServer;
Connection->Stats.Timing.Start = QuicTimeUs64();
Connection->SourceCidLimit = QUIC_ACTIVE_CONNECTION_ID_LIMIT;
Connection->AckDelayExponent = QUIC_ACK_DELAY_EXPONENT;
Connection->PeerTransportParams.AckDelayExponent = QUIC_TP_ACK_DELAY_EXPONENT_DEFAULT;
Connection->ReceiveQueueTail = &Connection->ReceiveQueue;
+ Connection->Settings = MsQuicLib.Settings;
+ Connection->Settings.IsSetFlags = 0; // Just grab the global values, not IsSet flags.
QuicDispatchLockInitialize(&Connection->ReceiveQueueLock);
QuicListInitializeHead(&Connection->DestCids);
QuicStreamSetInitialize(&Connection->Streams);
QuicSendBufferInitialize(&Connection->SendBuffer);
QuicOperationQueueInitialize(&Connection->OperQ);
- QuicSendInitialize(&Connection->Send);
+ QuicSendInitialize(&Connection->Send, &Connection->Settings);
+ QuicCongestionControlInitialize(&Connection->CongestionControl, &Connection->Settings);
QuicLossDetectionInitialize(&Connection->LossDetection);
QuicDatagramInitialize(&Connection->Datagram);
QuicRangeInitialize(
@@ -148,12 +156,6 @@ QuicConnAlloc(
if (IsServer) {
- //
- // Use global settings until the connection is assigned to a session.
- // Then the connection will use the session's settings.
- //
- QuicConnApplySettings(Connection, &MsQuicLib.Settings);
-
const QUIC_RECV_PACKET* Packet =
QuicDataPathRecvDatagramToRecvPacket(Datagram);
@@ -252,7 +254,7 @@ QuicConnAlloc(
Connection);
}
- QuicSessionRegisterConnection(Session, Connection);
+ QuicConnRegister(Connection, Registration);
return Connection;
@@ -290,6 +292,7 @@ QuicConnFree(
if (Connection->State.ExternalOwner) {
QUIC_TEL_ASSERT(Connection->State.HandleClosed);
QUIC_TEL_ASSERT(Connection->State.Uninitialized);
+ QUIC_DBG_ASSERT(!Connection->State.Registered);
}
QUIC_TEL_ASSERT(Connection->SourceCids.Next == NULL);
QUIC_TEL_ASSERT(QuicListIsEmpty(&Connection->Streams.ClosedStreams));
@@ -322,6 +325,17 @@ QuicConnFree(
Link);
QUIC_FREE(CID);
}
+ if (Connection->State.Registered) {
+ QuicDispatchLockAcquire(&Connection->Registration->ConnectionLock);
+ QuicListEntryRemove(&Connection->RegistrationLink);
+ QuicDispatchLockRelease(&Connection->Registration->ConnectionLock);
+ Connection->State.Registered = FALSE;
+ QuicTraceEvent(
+ ConnUnregistered,
+ "[conn][%p] Unregistered from %p",
+ Connection,
+ Connection->Registration);
+ }
if (Connection->Worker != NULL) {
QuicOperationQueueClear(Connection->Worker, &Connection->OperQ);
}
@@ -343,11 +357,10 @@ QuicConnFree(
QuicStreamSetUninitialize(&Connection->Streams);
QuicSendBufferUninitialize(&Connection->SendBuffer);
QuicDatagramUninitialize(&Connection->Datagram);
- QuicSessionUnregisterConnection(Connection);
- if (Connection->Registration != NULL) {
- QuicRundownRelease(&Connection->Registration->ConnectionRundown);
+ if (Connection->Configuration != NULL) {
+ QuicConfigurationRelease(Connection->Configuration);
+ Connection->Configuration = NULL;
}
- Connection->State.Freed = TRUE;
if (Connection->RemoteServerName != NULL) {
QUIC_FREE(Connection->RemoteServerName);
}
@@ -360,17 +373,20 @@ QuicConnFree(
Connection->HandshakeTP);
Connection->HandshakeTP = NULL;
}
- QuicTraceEvent(
- ConnDestroyed,
- "[conn][%p] Destroyed",
- Connection);
-
if (Connection->State.Started && !Connection->State.Connected) {
QuicPerfCounterIncrement(QUIC_PERF_COUNTER_CONN_HANDSHAKE_FAIL);
}
if (Connection->State.Connected) {
QuicPerfCounterDecrement(QUIC_PERF_COUNTER_CONN_CONNECTED);
}
+ if (Connection->Registration != NULL) {
+ QuicRundownRelease(&Connection->Registration->Rundown);
+ }
+ Connection->State.Freed = TRUE;
+ QuicTraceEvent(
+ ConnDestroyed,
+ "[conn][%p] Destroyed",
+ Connection);
QuicPoolFree(
&MsQuicLib.PerProc[QuicProcCurrentNumber()].ConnectionPool,
Connection);
@@ -381,60 +397,6 @@ QuicConnFree(
QuicPerfCounterDecrement(QUIC_PERF_COUNTER_CONN_ACTIVE);
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicConnApplySettings(
- _In_ QUIC_CONNECTION* Connection,
- _In_ const QUIC_SETTINGS* Settings
- )
-{
- Connection->State.UsePacing = Settings->PacingEnabled;
- Connection->MaxAckDelayMs = Settings->MaxAckDelayMs;
- Connection->Paths[0].SmoothedRtt = MS_TO_US(Settings->InitialRttMs);
- Connection->Paths[0].RttVariance = Connection->Paths[0].SmoothedRtt / 2;
- Connection->DisconnectTimeoutUs = MS_TO_US(Settings->DisconnectTimeoutMs);
- Connection->IdleTimeoutMs = Settings->IdleTimeoutMs;
- Connection->HandshakeIdleTimeoutMs = Settings->HandshakeIdleTimeoutMs;
- Connection->KeepAliveIntervalMs = Settings->KeepAliveIntervalMs;
- Connection->Datagram.ReceiveEnabled = Settings->DatagramReceiveEnabled;
-
- uint8_t PeerStreamType =
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_CLIENT : STREAM_ID_FLAG_IS_SERVER;
- if (Settings->PeerBidiStreamCount != 0) {
- QuicStreamSetUpdateMaxCount(
- &Connection->Streams,
- PeerStreamType | STREAM_ID_FLAG_IS_BI_DIR,
- Settings->PeerBidiStreamCount);
- }
- if (Settings->PeerUnidiStreamCount != 0) {
- QuicStreamSetUpdateMaxCount(
- &Connection->Streams,
- PeerStreamType | STREAM_ID_FLAG_IS_UNI_DIR,
- Settings->PeerUnidiStreamCount);
- }
-
- if (Settings->ServerResumptionLevel > QUIC_SERVER_NO_RESUME &&
- Connection->HandshakeTP == NULL) {
- QUIC_DBG_ASSERT(!Connection->State.Started);
- Connection->HandshakeTP =
- QuicPoolAlloc(&MsQuicLib.PerProc[QuicProcCurrentNumber()].TransportParamPool);
- if (Connection->HandshakeTP == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "handshake TP",
- sizeof(*Connection->HandshakeTP));
- } else {
- QuicZeroMemory(Connection->HandshakeTP, sizeof(*Connection->HandshakeTP));
- Connection->State.ResumptionEnabled = TRUE;
- }
- }
-
- QuicSendApplySettings(&Connection->Send, Settings);
- QuicCongestionControlInitialize(&Connection->CongestionControl, Settings);
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicConnShutdown(
@@ -525,7 +487,17 @@ QuicConnCloseHandle(
Connection->State.HandleClosed = TRUE;
Connection->ClientCallbackHandler = NULL;
- QuicSessionUnregisterConnection(Connection);
+ if (Connection->State.Registered) {
+ QuicDispatchLockAcquire(&Connection->Registration->ConnectionLock);
+ QuicListEntryRemove(&Connection->RegistrationLink);
+ QuicDispatchLockRelease(&Connection->Registration->ConnectionLock);
+ Connection->State.Registered = FALSE;
+ QuicTraceEvent(
+ ConnUnregistered,
+ "[conn][%p] Unregistered from %p",
+ Connection,
+ Connection->Registration);
+ }
QuicTraceEvent(
ConnHandleClosed,
@@ -533,6 +505,45 @@ QuicConnCloseHandle(
Connection);
}
+_IRQL_requires_max_(DISPATCH_LEVEL)
+void
+QuicConnRegister(
+ _Inout_ QUIC_CONNECTION* Connection,
+ _Inout_ QUIC_REGISTRATION* Registration
+ )
+{
+ if (Connection->Registration != NULL) {
+ QuicDispatchLockAcquire(&Connection->Registration->ConnectionLock);
+ QuicListEntryRemove(&Connection->RegistrationLink);
+ QuicDispatchLockRelease(&Connection->Registration->ConnectionLock);
+ QuicRundownRelease(&Connection->Registration->Rundown);
+
+ QuicTraceEvent(
+ ConnUnregistered,
+ "[conn][%p] Unregistered from %p",
+ Connection,
+ Connection->Registration);
+ }
+
+ Connection->State.Registered = TRUE;
+ Connection->Registration = Registration;
+ BOOLEAN Success = QuicRundownAcquire(&Registration->Rundown);
+ QUIC_DBG_ASSERT(Success); UNREFERENCED_PARAMETER(Success);
+#ifdef QuicVerifierEnabledByAddr
+ Connection->State.IsVerifying = Registration->IsVerifying;
+#endif
+
+ QuicDispatchLockAcquire(&Registration->ConnectionLock);
+ QuicListInsertTail(&Registration->Connections, &Connection->RegistrationLink);
+ QuicDispatchLockRelease(&Registration->ConnectionLock);
+
+ QuicTraceEvent(
+ ConnRegistered,
+ "[conn][%p] Registered with %p",
+ Connection,
+ Registration);
+}
+
_IRQL_requires_max_(DISPATCH_LEVEL)
void
QuicConnQueueTraceRundown(
@@ -568,12 +579,18 @@ QuicConnTraceRundownOper(
"[conn][%p] Assigned worker: %p",
Connection,
Connection->Worker);
- if (Connection->Session != NULL) {
+ QUIC_DBG_ASSERT(Connection->Registration);
+ QuicTraceEvent(
+ ConnRegistered,
+ "[conn][%p] Registered with %p",
+ Connection,
+ Connection->Registration);
+ if (Connection->Stats.QuicVersion != 0) {
QuicTraceEvent(
- ConnRegisterSession,
- "[conn][%p] Registered with session: %p",
+ ConnVersionSet,
+ "[conn][%p] Version = %u",
Connection,
- Connection->Session);
+ Connection->Stats.QuicVersion);
}
if (Connection->State.Started) {
for (uint8_t i = 0; i < Connection->PathsCount; ++i) {
@@ -626,7 +643,6 @@ QuicConnTraceRundownOper(
}
}
if (Connection->State.Connected) {
- QuicConnOnQuicVersionSet(Connection);
QuicTraceEvent(
ConnHandshakeComplete,
"[conn][%p] Handshake complete",
@@ -1415,7 +1431,7 @@ QuicConnTryClose(
if (!ClosedRemotely) {
if ((Flags & QUIC_CLOSE_APPLICATION) &&
- Connection->Crypto.TlsState.WriteKey < QUIC_PACKET_KEY_1_RTT) {
+ QuicCryptoGetNextEncryptLevel(&Connection->Crypto) < QUIC_ENCRYPT_LEVEL_1_RTT) {
//
// Application close can only happen if we are using 1-RTT keys.
// Otherwise we have to send "user_canceled" TLS error code as a
@@ -1425,6 +1441,11 @@ QuicConnTryClose(
ErrorCode = QUIC_ERROR_CRYPTO_USER_CANCELED;
RemoteReasonPhrase = NULL;
RemoteReasonPhraseLength = 0;
+
+ QuicTraceLogConnInfo(
+ CloseUserCanceled,
+ Connection,
+ "Connection close using user canceled error");
}
}
@@ -1689,6 +1710,7 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicConnStart(
_In_ QUIC_CONNECTION* Connection,
+ _In_ QUIC_CONFIGURATION* Configuration,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_opt_z_ const char* ServerName,
_In_ uint16_t ServerPort // Host byte order
@@ -1715,8 +1737,8 @@ QuicConnStart(
#ifdef QUIC_COMPARTMENT_ID
BOOLEAN RevertCompartmentId = FALSE;
QUIC_COMPARTMENT_ID PrevCompartmentId = QuicCompartmentIdGetCurrent();
- if (PrevCompartmentId != Connection->Session->CompartmentId) {
- Status = QuicCompartmentIdSetCurrent(Connection->Session->CompartmentId);
+ if (PrevCompartmentId != Configuration->CompartmentId) {
+ Status = QuicCompartmentIdSetCurrent(Configuration->CompartmentId);
if (QUIC_FAILED(Status)) {
QuicTraceEvent(
ConnErrorStatus,
@@ -1763,7 +1785,9 @@ QuicConnStart(
//
Status =
QuicLibraryGetBinding(
- Connection->Session,
+#ifdef QUIC_COMPARTMENT_ID
+ Configuration->CompartmentId,
+#endif
Connection->State.ShareBinding,
FALSE,
Connection->State.LocalAddressSet ? &Path->LocalAddress : NULL,
@@ -1826,14 +1850,26 @@ QuicConnStart(
Connection->RemoteServerName = ServerName;
ServerName = NULL;
+ Status = QuicCryptoInitialize(&Connection->Crypto);
+ if (QUIC_FAILED(Status)) {
+ goto Exit;
+ }
+
//
// Start the handshake.
//
- Status = QuicConnInitializeCrypto(Connection);
+ Status = QuicConnSetConfiguration(Connection, Configuration);
if (QUIC_FAILED(Status)) {
goto Exit;
}
+ if (Connection->Settings.KeepAliveIntervalMs != 0) {
+ QuicConnTimerSet(
+ Connection,
+ QUIC_CONN_TIMER_KEEP_ALIVE,
+ Connection->Settings.KeepAliveIntervalMs);
+ }
+
Exit:
if (ServerName != NULL) {
@@ -1872,7 +1908,7 @@ QuicConnRestart(
//
QUIC_PATH* Path = &Connection->Paths[0];
Path->GotFirstRttSample = FALSE;
- Path->SmoothedRtt = MS_TO_US(Connection->Session->Settings.InitialRttMs);
+ Path->SmoothedRtt = MS_TO_US(Connection->Settings.InitialRttMs);
Path->RttVariance = Path->SmoothedRtt / 2;
}
@@ -1896,97 +1932,37 @@ QuicConnSendResumptionTicket(
)
{
QUIC_STATUS Status;
- uint32_t EncodedTransportParametersLength = 0;
uint8_t* TicketBuffer = NULL;
- uint16_t AlpnLength = *(Connection->Crypto.TlsState.NegotiatedAlpn);
- const uint8_t* EncodedHSTP = NULL;
+ uint32_t TicketLength = 0;
+ uint8_t AlpnLength = Connection->Crypto.TlsState.NegotiatedAlpn[0];
if (Connection->HandshakeTP == NULL) {
Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Error;
}
- QUIC_TRANSPORT_PARAMETERS HSTPCopy = *Connection->HandshakeTP;
- HSTPCopy.Flags = HSTPCopy.Flags & (
- QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
- QUIC_TP_FLAG_INITIAL_MAX_DATA |
- QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
- QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
- QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
- QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
- QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI);
-
- EncodedHSTP =
- QuicCryptoTlsEncodeTransportParameters(
+ Status =
+ QuicCryptoEncodeServerTicket(
Connection,
- &HSTPCopy,
- &EncodedTransportParametersLength);
- if (EncodedHSTP == NULL) {
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- uint32_t TotalTicketLength =
- (uint32_t)(QuicVarIntSize(QUIC_TLS_RESUMPTION_TICKET_VERSION) +
- QuicVarIntSize(AlpnLength) +
- QuicVarIntSize(EncodedTransportParametersLength) +
- QuicVarIntSize(AppDataLength) +
- sizeof(QUIC_VERSION_LATEST) +
- AlpnLength +
- EncodedTransportParametersLength +
- AppDataLength);
-
- TicketBuffer = QUIC_ALLOC_NONPAGED(TotalTicketLength);
- if (TicketBuffer == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "Server resumption ticket",
- TotalTicketLength);
- Status = QUIC_STATUS_OUT_OF_MEMORY;
+ Connection->Stats.QuicVersion,
+ AppDataLength,
+ AppResumptionData,
+ Connection->HandshakeTP,
+ AlpnLength,
+ Connection->Crypto.TlsState.NegotiatedAlpn + 1,
+ &TicketBuffer,
+ &TicketLength);
+ if (QUIC_FAILED(Status)) {
goto Error;
}
- //
- // Encoded ticket format is as follows:
- // Ticket Version (QUIC_VAR_INT) [1..4]
- // Quic Version [4]
- // Negotiated ALPN length (QUIC_VAR_INT) [1..2]
- // Negotiated ALPN [...]
- // Transport Parameters length (QUIC_VAR_INT) [1..2]
- // Transport Parameters [...]
- // App Ticket length (QUIC_VAR_INT) [1..2]
- // App Ticket (omitted if length is zero) [...]
- //
-
- _Analysis_assume_(sizeof(*TicketBuffer) >= 8);
- uint8_t* TicketCursor = QuicVarIntEncode(QUIC_TLS_RESUMPTION_TICKET_VERSION, TicketBuffer);
- *(uint32_t*)TicketCursor = QuicByteSwapUint32(QUIC_VERSION_LATEST);
- TicketCursor += sizeof(QUIC_VERSION_LATEST);
- TicketCursor = QuicVarIntEncode(AlpnLength, TicketCursor);
- QuicCopyMemory(TicketCursor, Connection->Crypto.TlsState.NegotiatedAlpn + 1, AlpnLength);
- TicketCursor += AlpnLength;
- TicketCursor = QuicVarIntEncode(EncodedTransportParametersLength, TicketCursor);
- QuicCopyMemory(TicketCursor, EncodedHSTP, EncodedTransportParametersLength);
- TicketCursor += EncodedTransportParametersLength;
- TicketCursor = QuicVarIntEncode(AppDataLength, TicketCursor);
- if (AppDataLength > 0) {
- QuicCopyMemory(TicketCursor, AppResumptionData, AppDataLength);
- TicketCursor += AppDataLength;
- }
- QUIC_DBG_ASSERT(TicketCursor == TicketBuffer + TotalTicketLength);
-
- Status = QuicCryptoProcessAppData(&Connection->Crypto, TotalTicketLength, TicketBuffer);
+ Status = QuicCryptoProcessAppData(&Connection->Crypto, TicketLength, TicketBuffer);
Error:
if (TicketBuffer != NULL) {
QUIC_FREE(TicketBuffer);
}
- if (EncodedHSTP != NULL) {
- QUIC_FREE(EncodedHSTP);
- }
-
if (AppResumptionData != NULL) {
QUIC_FREE(AppResumptionData);
}
@@ -2006,86 +1982,31 @@ QuicConnRecvResumptionTicket(
BOOLEAN ResumptionAccepted = FALSE;
QUIC_TRANSPORT_PARAMETERS ResumedTP;
if (QuicConnIsServer(Connection)) {
- uint16_t Offset = 0;
- QUIC_VAR_INT TicketVersion = 0, AlpnLength = 0, TPLength = 0, AppTicketLength = 0;
- if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &TicketVersion)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket version failed to decode");
- goto Error;
- }
- if (TicketVersion != QUIC_TLS_RESUMPTION_TICKET_VERSION) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket version unsupported");
- goto Error;
- }
-
- uint32_t QuicVersionHost = QuicByteSwapUint32(*(uint32_t*)(Ticket + Offset));
- if (!QuicIsVersionSupported(QuicVersionHost)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket for unsupported QUIC version");
- goto Error;
- }
- Offset += sizeof(QuicVersionHost);
-
- if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &AlpnLength)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket ALPN length failed to decode");
- goto Error;
- }
- if (QuicTlsAlpnFindInList(
- Connection->Session->AlpnListLength, Connection->Session->AlpnList,
- (uint8_t)AlpnLength, Ticket + Offset) == NULL) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket ALPN not present in ALPN list");
- goto Error;
- }
- Offset += (uint16_t)AlpnLength;
+ const uint8_t* AppData = NULL;
+ uint32_t AppDataLength = 0;
- if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &TPLength)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket TP length failed to decode");
- goto Error;
- }
- if (!QuicCryptoTlsDecodeTransportParameters(
- Connection,
- Ticket + Offset,
- (uint16_t)TPLength,
- &ResumedTP)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
+ QUIC_STATUS Status =
+ QuicCryptoDecodeServerTicket(
Connection,
- "Resumption Ticket TParams failed to decode");
+ TicketLength,
+ Ticket,
+ Connection->Configuration->AlpnList,
+ Connection->Configuration->AlpnListLength,
+ &ResumedTP,
+ &AppData,
+ &AppDataLength);
+ if (QUIC_FAILED(Status)) {
goto Error;
}
- Offset += (uint16_t)TPLength;
//
// Validate resumed TP are <= current settings
//
if (ResumedTP.ActiveConnectionIdLimit > QUIC_ACTIVE_CONNECTION_ID_LIMIT ||
ResumedTP.InitialMaxData > Connection->Send.MaxData ||
- ResumedTP.InitialMaxStreamDataBidiLocal > Connection->Session->Settings.StreamRecvWindowDefault ||
- ResumedTP.InitialMaxStreamDataBidiRemote > Connection->Session->Settings.StreamRecvWindowDefault ||
- ResumedTP.InitialMaxStreamDataUni > Connection->Session->Settings.StreamRecvWindowDefault ||
+ ResumedTP.InitialMaxStreamDataBidiLocal > Connection->Settings.StreamRecvWindowDefault ||
+ ResumedTP.InitialMaxStreamDataBidiRemote > Connection->Settings.StreamRecvWindowDefault ||
+ ResumedTP.InitialMaxStreamDataUni > Connection->Settings.StreamRecvWindowDefault ||
ResumedTP.InitialMaxUniStreams > Connection->Streams.Types[STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR].MaxTotalStreamCount ||
ResumedTP.InitialMaxBidiStreams > Connection->Streams.Types[STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_BI_DIR].MaxTotalStreamCount) {
//
@@ -2100,23 +2021,17 @@ QuicConnRecvResumptionTicket(
goto Error;
}
- if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &AppTicketLength)) {
- QuicTraceEvent(
- ConnError,
- "[conn][%p] ERROR, %s.",
- Connection,
- "Resumption Ticket app data length failed to decode");
- goto Error;
- }
-
- QUIC_CONNECTION_EVENT Event = { 0, };
+ QUIC_CONNECTION_EVENT Event;
Event.Type = QUIC_CONNECTION_EVENT_RESUMED;
- Event.RESUMED.ResumptionStateLength = (uint16_t)AppTicketLength;
- Event.RESUMED.ResumptionState = (AppTicketLength > 0) ? Ticket + Offset : NULL;
+ Event.RESUMED.ResumptionStateLength = (uint16_t)AppDataLength;
+ Event.RESUMED.ResumptionState = (AppDataLength > 0) ? AppData : NULL;
+ QuicTraceLogConnVerbose(
+ IndicateResumptionTicketReceived,
+ Connection,
+ "Indicating QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED");
ResumptionAccepted =
QUIC_SUCCEEDED(QuicConnIndicateEvent(Connection, &Event));
-
if (ResumptionAccepted) {
QuicTraceEvent(
ConnServerResumeTicket,
@@ -2130,13 +2045,36 @@ QuicConnRecvResumptionTicket(
"Resumption Ticket rejected by server app");
}
- QUIC_DBG_ASSERT(Offset + AppTicketLength == TicketLength);
} else {
- //
- // TODO Client-side processing.
- // Until then, this shouldn't ever get called.
- //
- QUIC_FRE_ASSERT(FALSE);
+
+ const uint8_t* ClientTicket = NULL;
+ uint32_t ClientTicketLength = 0;
+
+ QUIC_DBG_ASSERT(Connection->State.PeerTransportParameterValid);
+
+ if (QUIC_SUCCEEDED(
+ QuicCryptoEncodeClientTicket(
+ Connection,
+ TicketLength,
+ Ticket,
+ &Connection->PeerTransportParams,
+ Connection->Stats.QuicVersion,
+ &ClientTicket,
+ &ClientTicketLength))) {
+
+ QUIC_CONNECTION_EVENT Event;
+ Event.Type = QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED;
+ Event.RESUMPTION_TICKET_RECEIVED.ResumptionTicketLength = ClientTicketLength;
+ Event.RESUMPTION_TICKET_RECEIVED.ResumptionTicket = ClientTicket;
+ QuicTraceLogConnVerbose(
+ IndicateResumptionTicketReceived,
+ Connection,
+ "Indicating QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED");
+ (void)QuicConnIndicateEvent(Connection, &Event);
+
+ QUIC_FREE(ClientTicket);
+ ResumptionAccepted = TRUE;
+ }
}
Error:
@@ -2179,50 +2117,6 @@ QuicConnCleanupServerResumptionState(
}
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicConnInitializeCrypto(
- _In_ QUIC_CONNECTION* Connection
- )
-{
- QUIC_STATUS Status;
- BOOLEAN CryptoInitialized = FALSE;
-
- Status = QuicCryptoInitialize(&Connection->Crypto);
- if (QUIC_FAILED(Status)) {
- goto Error;
- }
- CryptoInitialized = TRUE;
-
- if (!QuicConnIsServer(Connection)) {
- Status = QuicConnHandshakeConfigure(Connection, NULL);
- if (QUIC_FAILED(Status)) {
- goto Error;
- }
- }
-
- if (Connection->KeepAliveIntervalMs != 0) {
- //
- // Now that we are starting the connection, start the keep alive timer
- // if enabled.
- //
- QuicConnTimerSet(
- Connection,
- QUIC_CONN_TIMER_KEEP_ALIVE,
- Connection->KeepAliveIntervalMs);
- }
-
-Error:
-
- if (QUIC_FAILED(Status)) {
- if (CryptoInitialized) {
- QuicCryptoUninitialize(&Connection->Crypto);
- }
- }
-
- return Status;
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicConnGenerateLocalTransportParameters(
@@ -2230,7 +2124,7 @@ QuicConnGenerateLocalTransportParameters(
_Out_ QUIC_TRANSPORT_PARAMETERS* LocalTP
)
{
- QUIC_TEL_ASSERT(Connection->Session != NULL);
+ QUIC_TEL_ASSERT(Connection->Configuration != NULL);
QUIC_DBG_ASSERT(Connection->SourceCids.Next != NULL);
const QUIC_CID_HASH_ENTRY* SourceCid =
@@ -2240,15 +2134,15 @@ QuicConnGenerateLocalTransportParameters(
Link);
LocalTP->InitialMaxData = Connection->Send.MaxData;
- LocalTP->InitialMaxStreamDataBidiLocal = Connection->Session->Settings.StreamRecvWindowDefault;
- LocalTP->InitialMaxStreamDataBidiRemote = Connection->Session->Settings.StreamRecvWindowDefault;
- LocalTP->InitialMaxStreamDataUni = Connection->Session->Settings.StreamRecvWindowDefault;
+ LocalTP->InitialMaxStreamDataBidiLocal = Connection->Settings.StreamRecvWindowDefault;
+ LocalTP->InitialMaxStreamDataBidiRemote = Connection->Settings.StreamRecvWindowDefault;
+ LocalTP->InitialMaxStreamDataUni = Connection->Settings.StreamRecvWindowDefault;
LocalTP->MaxUdpPayloadSize =
MaxUdpPayloadSizeFromMTU(
QuicDataPathBindingGetLocalMtu(
Connection->Paths[0].Binding->DatapathBinding));
LocalTP->MaxAckDelay =
- Connection->MaxAckDelayMs + MsQuicLib.TimerResolutionMs;
+ Connection->Settings.MaxAckDelayMs + MsQuicLib.TimerResolutionMs;
LocalTP->ActiveConnectionIdLimit = QUIC_ACTIVE_CONNECTION_ID_LIMIT;
LocalTP->Flags =
QUIC_TP_FLAG_INITIAL_MAX_DATA |
@@ -2259,9 +2153,9 @@ QuicConnGenerateLocalTransportParameters(
QUIC_TP_FLAG_MAX_ACK_DELAY |
QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT;
- if (Connection->IdleTimeoutMs != 0) {
+ if (Connection->Settings.IdleTimeoutMs != 0) {
LocalTP->Flags |= QUIC_TP_FLAG_IDLE_TIMEOUT;
- LocalTP->IdleTimeout = Connection->IdleTimeoutMs;
+ LocalTP->IdleTimeout = Connection->Settings.IdleTimeoutMs;
}
if (Connection->AckDelayExponent != QUIC_TP_ACK_DELAY_EXPONENT_DEFAULT) {
@@ -2301,7 +2195,7 @@ QuicConnGenerateLocalTransportParameters(
Connection->Streams.Types[STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR].MaxTotalStreamCount;
}
- if (!Connection->Session->Settings.MigrationEnabled) {
+ if (!Connection->Settings.MigrationEnabled) {
LocalTP->Flags |= QUIC_TP_FLAG_DISABLE_ACTIVE_MIGRATION;
}
@@ -2370,58 +2264,45 @@ QuicConnGenerateLocalTransportParameters(
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicConnHandshakeConfigure(
+QuicConnSetConfiguration(
_In_ QUIC_CONNECTION* Connection,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
+ _In_ QUIC_CONFIGURATION* Configuration
)
{
+ if (Connection->Configuration != NULL || QuicConnIsClosed(Connection)) {
+ return QUIC_STATUS_INVALID_STATE;
+ }
+
QUIC_STATUS Status;
QUIC_TRANSPORT_PARAMETERS LocalTP = { 0 };
- QUIC_TEL_ASSERT(Connection->Session != NULL);
- QUIC_TEL_ASSERT(SecConfig != NULL || !QuicConnIsServer(Connection));
+ QUIC_TEL_ASSERT(Connection->Configuration == NULL);
+ QUIC_TEL_ASSERT(Configuration != NULL);
+ QUIC_TEL_ASSERT(Configuration->SecurityConfig != NULL);
- if (!QuicConnIsServer(Connection)) {
+ QuicTraceLogConnInfo(
+ SetConfiguration,
+ Connection,
+ "Configuration set, %p",
+ Configuration);
- uint32_t InitialQuicVersion = QUIC_VERSION_LATEST;
- if (Connection->RemoteServerName != NULL &&
- QuicSessionServerCacheGetState(
- Connection->Session,
- Connection->RemoteServerName,
- &InitialQuicVersion,
- &Connection->PeerTransportParams,
- &SecConfig)) {
+ QuicConfigurationAddRef(Configuration);
+ Connection->Configuration = Configuration;
+ QuicConnApplyNewSettings(
+ Connection,
+ FALSE,
+ sizeof(Configuration->Settings),
+ &Configuration->Settings);
- QuicTraceLogConnVerbose(
- FoundCachedServerState,
- Connection,
- "Found server cached state");
- QuicConnProcessPeerTransportParameters(Connection, TRUE);
- }
+ if (!QuicConnIsServer(Connection)) {
if (Connection->Stats.QuicVersion == 0) {
//
// Only initialize the version if not already done (by the
// application layer).
//
- Connection->Stats.QuicVersion = InitialQuicVersion;
- }
- QuicConnOnQuicVersionSet(Connection);
-
- if (SecConfig == NULL) {
- Status =
- QuicTlsClientSecConfigCreate(
- Connection->ServerCertValidationFlags,
- &SecConfig);
- if (QUIC_FAILED(Status)) {
- QuicTraceEvent(
- ConnErrorStatus,
- "[conn][%p] ERROR, %u, %s.",
- Connection,
- Status,
- "QuicTlsClientSecConfigCreate");
- goto Error;
- }
+ Connection->Stats.QuicVersion = QUIC_VERSION_LATEST;
+ QuicConnOnQuicVersionSet(Connection);
}
QUIC_DBG_ASSERT(!QuicListIsEmpty(&Connection->DestCids));
@@ -2459,16 +2340,13 @@ QuicConnHandshakeConfigure(
goto Error;
}
- if (QuicConnIsServer(Connection)) {
-
- //
- // Persist the transport parameters used during handshake for resumption.
- // (if resumption is enabled)
- //
- if (Connection->HandshakeTP != NULL) {
- QUIC_DBG_ASSERT(Connection->State.ResumptionEnabled);
- *Connection->HandshakeTP = LocalTP;
- }
+ //
+ // Persist the transport parameters used during handshake for resumption.
+ // (if resumption is enabled)
+ //
+ if (QuicConnIsServer(Connection) && Connection->HandshakeTP != NULL) {
+ QUIC_DBG_ASSERT(Connection->State.ResumptionEnabled);
+ *Connection->HandshakeTP = LocalTP;
}
Connection->State.Started = TRUE;
@@ -2481,9 +2359,8 @@ QuicConnHandshakeConfigure(
Status =
QuicCryptoInitializeTls(
&Connection->Crypto,
- SecConfig,
+ Configuration->SecurityConfig,
&LocalTP);
- QuicTlsSecConfigRelease(SecConfig); // No longer need local ref.
Error:
@@ -2630,7 +2507,7 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicConnProcessPeerTransportParameters(
_In_ QUIC_CONNECTION* Connection,
- _In_ BOOLEAN FromCache
+ _In_ BOOLEAN FromResumptionTicket
)
{
QuicTraceLogConnInfo(
@@ -2648,34 +2525,34 @@ QuicConnProcessPeerTransportParameters(
Connection->SourceCidLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_DEFAULT;
}
- if (Connection->PeerTransportParams.Flags & QUIC_TP_FLAG_STATELESS_RESET_TOKEN) {
- QUIC_DBG_ASSERT(!QuicListIsEmpty(&Connection->DestCids));
- QUIC_DBG_ASSERT(!QuicConnIsServer(Connection));
- QUIC_CID_QUIC_LIST_ENTRY* DestCid =
- QUIC_CONTAINING_RECORD(
- Connection->DestCids.Flink,
- QUIC_CID_QUIC_LIST_ENTRY,
- Link);
- QuicCopyMemory(
- DestCid->ResetToken,
- Connection->PeerTransportParams.StatelessResetToken,
- QUIC_STATELESS_RESET_TOKEN_LENGTH);
- DestCid->CID.HasResetToken = TRUE;
- }
+ if (!FromResumptionTicket) {
+ if (Connection->PeerTransportParams.Flags & QUIC_TP_FLAG_STATELESS_RESET_TOKEN) {
+ QUIC_DBG_ASSERT(!QuicListIsEmpty(&Connection->DestCids));
+ QUIC_DBG_ASSERT(!QuicConnIsServer(Connection));
+ QUIC_CID_QUIC_LIST_ENTRY* DestCid =
+ QUIC_CONTAINING_RECORD(
+ Connection->DestCids.Flink,
+ QUIC_CID_QUIC_LIST_ENTRY,
+ Link);
+ QuicCopyMemory(
+ DestCid->ResetToken,
+ Connection->PeerTransportParams.StatelessResetToken,
+ QUIC_STATELESS_RESET_TOKEN_LENGTH);
+ DestCid->CID.HasResetToken = TRUE;
+ }
- if (Connection->PeerTransportParams.Flags & QUIC_TP_FLAG_PREFERRED_ADDRESS) {
- /*QuicTraceLogConnInfo(
- PeerPreferredAddress,
- Connection,
- "Peer configured preferred address %!ADDR!",
- CLOG_BYTEARRAY(sizeof(Connection->PeerTransportParams.PreferredAddress), &Connection->PeerTransportParams.PreferredAddress));*/
+ if (Connection->PeerTransportParams.Flags & QUIC_TP_FLAG_PREFERRED_ADDRESS) {
+ /*QuicTraceLogConnInfo(
+ PeerPreferredAddress,
+ Connection,
+ "Peer configured preferred address %!ADDR!",
+ CLOG_BYTEARRAY(sizeof(Connection->PeerTransportParams.PreferredAddress), &Connection->PeerTransportParams.PreferredAddress));*/
- //
- // TODO - Implement preferred address feature.
- //
- }
+ //
+ // TODO - Implement preferred address feature.
+ //
+ }
- if (!FromCache) {
//
// Version draft-28 and later fully validate all exchanged connection IDs.
// Version draft-27 only validates in the Retry scenario.
@@ -2698,7 +2575,7 @@ QuicConnProcessPeerTransportParameters(
&Connection->Streams,
Connection->PeerTransportParams.InitialMaxBidiStreams,
Connection->PeerTransportParams.InitialMaxUniStreams,
- !FromCache);
+ !FromResumptionTicket);
QuicDatagramOnSendStateChanged(&Connection->Datagram);
@@ -5245,11 +5122,12 @@ QuicConnResetIdleTimeout(
//
IdleTimeoutMs = Connection->PeerTransportParams.IdleTimeout;
if (IdleTimeoutMs == 0 ||
- (Connection->IdleTimeoutMs != 0 && Connection->IdleTimeoutMs < IdleTimeoutMs)) {
- IdleTimeoutMs = Connection->IdleTimeoutMs;
+ (Connection->Settings.IdleTimeoutMs != 0 &&
+ Connection->Settings.IdleTimeoutMs < IdleTimeoutMs)) {
+ IdleTimeoutMs = Connection->Settings.IdleTimeoutMs;
}
} else {
- IdleTimeoutMs = Connection->HandshakeIdleTimeoutMs;
+ IdleTimeoutMs = Connection->Settings.HandshakeIdleTimeoutMs;
}
if (IdleTimeoutMs != 0) {
@@ -5271,11 +5149,11 @@ QuicConnResetIdleTimeout(
QuicConnTimerCancel(Connection, QUIC_CONN_TIMER_IDLE);
}
- if (Connection->KeepAliveIntervalMs != 0) {
+ if (Connection->Settings.KeepAliveIntervalMs != 0) {
QuicConnTimerSet(
Connection,
QUIC_CONN_TIMER_KEEP_ALIVE,
- Connection->KeepAliveIntervalMs);
+ Connection->Settings.KeepAliveIntervalMs);
}
}
@@ -5313,7 +5191,7 @@ QuicConnProcessKeepAliveOperation(
QuicConnTimerSet(
Connection,
QUIC_CONN_TIMER_KEEP_ALIVE,
- Connection->KeepAliveIntervalMs);
+ Connection->Settings.KeepAliveIntervalMs);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -5399,12 +5277,15 @@ QuicConnParamSet(
QUIC_DBG_ASSERT(Connection->Paths[0].Binding);
QUIC_DBG_ASSERT(Connection->State.RemoteAddressSet);
+ QUIC_DBG_ASSERT(Connection->Configuration != NULL);
QUIC_BINDING* OldBinding = Connection->Paths[0].Binding;
Status =
QuicLibraryGetBinding(
- Connection->Session,
+#ifdef QUIC_COMPARTMENT_ID
+ Connection->Configuration->CompartmentId,
+#endif
Connection->State.ShareBinding,
FALSE,
LocalAddress,
@@ -5446,7 +5327,7 @@ QuicConnParamSet(
break;
}
- case QUIC_PARAM_CONN_REMOTE_ADDRESS: {
+ case QUIC_PARAM_CONN_REMOTE_ADDRESS:
if (BufferLength != sizeof(QUIC_ADDR)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
@@ -5472,61 +5353,45 @@ QuicConnParamSet(
Status = QUIC_STATUS_SUCCESS;
break;
- }
- case QUIC_PARAM_CONN_IDLE_TIMEOUT:
+ case QUIC_PARAM_CONN_SETTINGS:
- if (BufferLength != sizeof(Connection->IdleTimeoutMs)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
+ if (BufferLength != sizeof(QUIC_SETTINGS)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER; // TODO - Support partial
break;
}
- if (Connection->State.Started) {
- Status = QUIC_STATUS_INVALID_STATE;
+ if (!QuicConnApplyNewSettings(
+ Connection,
+ TRUE,
+ BufferLength,
+ (QUIC_SETTINGS*)Buffer)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- Connection->IdleTimeoutMs = *(uint64_t*)Buffer;
-
- QuicTraceLogConnInfo(
- UpdateIdleTimeout,
- Connection,
- "Updated idle timeout to %llu milliseconds",
- Connection->IdleTimeoutMs);
-
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT:
+ case QUIC_PARAM_CONN_SHARE_UDP_BINDING:
- if (BufferLength != sizeof(uint16_t)) {
+ if (BufferLength != sizeof(uint8_t)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- QuicStreamSetUpdateMaxCount(
- &Connection->Streams,
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_BI_DIR :
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_BI_DIR,
- *(uint16_t*)Buffer);
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT:
-
- if (BufferLength != sizeof(uint16_t)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
+ if (Connection->State.Started || QuicConnIsServer(Connection)) {
+ Status = QUIC_STATUS_INVALID_STATE;
break;
}
- QuicStreamSetUpdateMaxCount(
- &Connection->Streams,
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR :
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_UNI_DIR,
- *(uint16_t*)Buffer);
+ Connection->State.ShareBinding = *(uint8_t*)Buffer;
+
+ QuicTraceLogConnInfo(
+ UpdateShareBinding,
+ Connection,
+ "Updated ShareBinding = %hhu",
+ Connection->State.ShareBinding);
Status = QUIC_STATUS_SUCCESS;
break;
@@ -5573,206 +5438,118 @@ QuicConnParamSet(
break;
- case QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS:
+ case QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME: {
- if (BufferLength != sizeof(Connection->ServerCertValidationFlags)) {
+ if (BufferLength != sizeof(QUIC_STREAM_SCHEDULING_SCHEME)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- if (QuicConnIsServer(Connection) || Connection->State.Started) {
- //
- // Only allowed on client connections, before the connection starts.
- //
- Status = QUIC_STATUS_INVALID_STATE;
- break;
- }
-
- Connection->ServerCertValidationFlags = *(uint32_t*)Buffer;
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_KEEP_ALIVE:
+ QUIC_STREAM_SCHEDULING_SCHEME Scheme =
+ *(QUIC_STREAM_SCHEDULING_SCHEME*)Buffer;
- if (BufferLength != sizeof(Connection->KeepAliveIntervalMs)) {
+ if (Scheme >= QUIC_STREAM_SCHEDULING_SCHEME_COUNT) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- if (Connection->State.Started &&
- Connection->KeepAliveIntervalMs != 0) {
- //
- // Cancel any current timer first.
- //
- QuicConnTimerCancel(Connection, QUIC_CONN_TIMER_KEEP_ALIVE);
- }
-
- Connection->KeepAliveIntervalMs = *(uint32_t*)Buffer;
+ Connection->State.UseRoundRobinStreamScheduling =
+ Scheme == QUIC_STREAM_SCHEDULING_SCHEME_ROUND_ROBIN;
QuicTraceLogConnInfo(
- UpdateKeepAlive,
+ UpdateStreamSchedulingScheme,
Connection,
- "Updated keep alive interval to %u milliseconds",
- Connection->KeepAliveIntervalMs);
-
- if (Connection->State.Started &&
- Connection->KeepAliveIntervalMs != 0) {
- QuicConnProcessKeepAliveOperation(Connection);
- }
+ "Updated Stream Scheduling Scheme = %u",
+ Scheme);
Status = QUIC_STATUS_SUCCESS;
break;
+ }
- case QUIC_PARAM_CONN_DISCONNECT_TIMEOUT:
+ case QUIC_PARAM_CONN_DATAGRAM_RECEIVE_ENABLED:
- if (BufferLength != sizeof(Connection->DisconnectTimeoutUs)) {
+ if (BufferLength != sizeof(BOOLEAN)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- if (*(uint32_t*)Buffer == 0 ||
- *(uint32_t*)Buffer > QUIC_MAX_DISCONNECT_TIMEOUT) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
+ if (Connection->State.Started) {
+ Status = QUIC_STATUS_INVALID_STATE;
break;
}
- Connection->DisconnectTimeoutUs = MS_TO_US(*(uint32_t*)Buffer);
+ Connection->Datagram.ReceiveEnabled = *(BOOLEAN*)Buffer;
+ Status = QUIC_STATUS_SUCCESS;
- QuicTraceLogConnInfo(
- UpdateDisconnectTimeout,
+ QuicTraceLogConnVerbose(
+ DatagramReceiveEnableUpdated,
Connection,
- "Updated disconnect timeout = %u milliseconds",
- *(uint32_t*)Buffer);
+ "Updated datagram receive enabled to %hhu",
+ Connection->Datagram.ReceiveEnabled);
- Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_SEC_CONFIG: {
-
- if (BufferLength != sizeof(QUIC_SEC_CONFIG*)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- QUIC_SEC_CONFIG* SecConfig = *(QUIC_SEC_CONFIG**)Buffer;
+ case QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION:
- if (SecConfig == NULL) {
+ if (BufferLength != sizeof(BOOLEAN)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- if (!QuicConnIsServer(Connection) ||
- Connection->State.ListenerAccepted == FALSE ||
- Connection->Crypto.TLS != NULL) {
+ if (Connection->State.Started) {
Status = QUIC_STATUS_INVALID_STATE;
break;
}
- QuicTraceLogConnInfo(
- SetSecurityConfig,
- Connection,
- "Security config set, %p",
- SecConfig);
- (void)QuicTlsSecConfigAddRef(SecConfig);
-
- Status =
- QuicConnHandshakeConfigure(
- Connection,
- SecConfig);
- if (QUIC_FAILED(Status)) {
- break;
- }
-
- QuicCryptoProcessData(&Connection->Crypto, FALSE);
- break;
- }
-
- case QUIC_PARAM_CONN_SEND_BUFFERING:
-
- if (BufferLength != sizeof(uint8_t)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
- Connection->State.UseSendBuffer = *(uint8_t*)Buffer;
-
- QuicTraceLogConnInfo(
- UpdateUseSendBuffer,
- Connection,
- "Updated UseSendBuffer = %hhu",
- Connection->State.UseSendBuffer);
-
+ Connection->State.Disable1RttEncrytion = *(BOOLEAN*)Buffer;
Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_SEND_PACING:
-
- if (BufferLength != sizeof(uint8_t)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
- Connection->State.UsePacing = *(uint8_t*)Buffer;
- QuicTraceLogConnInfo(
- UpdateUsePacing,
+ QuicTraceLogConnVerbose(
+ Disable1RttEncrytionUpdated,
Connection,
- "Updated UsePacing = %hhu",
- Connection->State.UsePacing);
+ "Updated disable 1-RTT encrytption to %hhu",
+ Connection->State.Disable1RttEncrytion);
- Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_SHARE_UDP_BINDING:
-
- if (BufferLength != sizeof(uint8_t)) {
+ case QUIC_PARAM_CONN_RESUMPTION_STATE: {
+ if (BufferLength == 0 || Buffer == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
}
- if (Connection->State.Started || QuicConnIsServer(Connection)) {
+ //
+ // Must be set before the client connection is started.
+ //
+ if (QuicConnIsServer(Connection) || Connection->State.Started) {
Status = QUIC_STATUS_INVALID_STATE;
break;
}
- Connection->State.ShareBinding = *(uint8_t*)Buffer;
-
- QuicTraceLogConnInfo(
- UpdateShareBinding,
- Connection,
- "Updated ShareBinding = %hhu",
- Connection->State.ShareBinding);
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME: {
-
- if (BufferLength != sizeof(QUIC_STREAM_SCHEDULING_SCHEME)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- QUIC_STREAM_SCHEDULING_SCHEME Scheme =
- *(QUIC_STREAM_SCHEDULING_SCHEME*)Buffer;
-
- if (Scheme >= QUIC_STREAM_SCHEDULING_SCHEME_COUNT) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
+ Status =
+ QuicCryptoDecodeClientTicket(
+ Connection,
+ (uint16_t)BufferLength,
+ Buffer,
+ &Connection->PeerTransportParams,
+ &Connection->Crypto.ResumptionTicket,
+ &Connection->Crypto.ResumptionTicketLength,
+ &Connection->Stats.QuicVersion);
+ if (QUIC_FAILED(Status)) {
break;
}
- Connection->State.UseRoundRobinStreamScheduling =
- Scheme == QUIC_STREAM_SCHEDULING_SCHEME_ROUND_ROBIN;
-
- QuicTraceLogConnInfo(
- UpdateStreamSchedulingScheme,
- Connection,
- "Updated Stream Scheduling Scheme = %u",
- Scheme);
+ QuicConnOnQuicVersionSet(Connection);
+ QuicConnProcessPeerTransportParameters(Connection, TRUE);
Status = QUIC_STATUS_SUCCESS;
break;
}
+ //
+ // Private
+ //
+
case QUIC_PARAM_CONN_FORCE_KEY_UPDATE:
if (!Connection->State.Connected ||
@@ -5825,52 +5602,6 @@ QuicConnParamSet(
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_DATAGRAM_RECEIVE_ENABLED:
-
- if (BufferLength != sizeof(BOOLEAN)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- if (Connection->State.Started) {
- Status = QUIC_STATUS_INVALID_STATE;
- break;
- }
-
- Connection->Datagram.ReceiveEnabled = *(BOOLEAN*)Buffer;
- Status = QUIC_STATUS_SUCCESS;
-
- QuicTraceLogConnVerbose(
- DatagramReceiveEnableUpdated,
- Connection,
- "Updated datagram receive enabled to %hhu",
- Connection->Datagram.ReceiveEnabled);
-
- break;
-
- case QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION:
-
- if (BufferLength != sizeof(BOOLEAN)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- if (Connection->State.Started) {
- Status = QUIC_STATUS_INVALID_STATE;
- break;
- }
-
- Connection->State.Disable1RttEncrytion = *(BOOLEAN*)Buffer;
- Status = QUIC_STATUS_SUCCESS;
-
- QuicTraceLogConnVerbose(
- Disable1RttEncrytionUpdated,
- Connection,
- "Updated disable 1-RTT encrytption to %hhu",
- Connection->State.Disable1RttEncrytion);
-
- break;
-
case QUIC_PARAM_CONN_TEST_TRANSPORT_PARAMETER:
if (BufferLength != sizeof(QUIC_PRIVATE_TRANSPORT_PARAMETER)) {
@@ -5994,51 +5725,8 @@ QuicConnParamGet(
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_IDLE_TIMEOUT:
-
- if (*BufferLength < sizeof(Connection->IdleTimeoutMs)) {
- *BufferLength = sizeof(Connection->IdleTimeoutMs);
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- *BufferLength = sizeof(Connection->IdleTimeoutMs);
- *(uint64_t*)Buffer = Connection->IdleTimeoutMs;
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT:
- Type =
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_BI_DIR :
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_BI_DIR;
- goto Get_Stream_Count;
- case QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT:
- Type =
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR :
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_UNI_DIR;
- goto Get_Stream_Count;
- case QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT:
- Type =
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_BI_DIR :
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_BI_DIR;
- goto Get_Stream_Count;
- case QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT:
- Type =
- QuicConnIsServer(Connection) ?
- STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_UNI_DIR :
- STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR;
- goto Get_Stream_Count;
+ case QUIC_PARAM_CONN_IDEAL_PROCESSOR:
- Get_Stream_Count:
if (*BufferLength < sizeof(uint16_t)) {
*BufferLength = sizeof(uint16_t);
Status = QUIC_STATUS_BUFFER_TOO_SMALL;
@@ -6051,22 +5739,15 @@ QuicConnParamGet(
}
*BufferLength = sizeof(uint16_t);
- *(uint16_t*)Buffer =
- QuicStreamSetGetCountAvailable(&Connection->Streams, Type);
+ *(uint16_t*)Buffer = Connection->Worker->IdealProcessor;
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_CLOSE_REASON_PHRASE:
+ case QUIC_PARAM_CONN_SETTINGS:
- if (Connection->CloseReasonPhrase == NULL) {
- Status = QUIC_STATUS_NOT_FOUND;
- break;
- }
-
- Length = (uint32_t)strlen(Connection->CloseReasonPhrase) + 1;
- if (*BufferLength < Length) {
- *BufferLength = Length;
+ if (*BufferLength < sizeof(QUIC_SETTINGS)) {
+ *BufferLength = sizeof(QUIC_SETTINGS);
Status = QUIC_STATUS_BUFFER_TOO_SMALL;
break;
}
@@ -6076,8 +5757,8 @@ QuicConnParamGet(
break;
}
- *BufferLength = Length;
- QuicCopyMemory(Buffer, Connection->CloseReasonPhrase, Length);
+ *BufferLength = sizeof(QUIC_SETTINGS);
+ *(QUIC_SETTINGS*)Buffer = Connection->Settings;
Status = QUIC_STATUS_SUCCESS;
break;
@@ -6139,123 +5820,7 @@ QuicConnParamGet(
break;
}
- case QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS:
-
- if (*BufferLength < sizeof(Connection->ServerCertValidationFlags)) {
- *BufferLength = sizeof(Connection->ServerCertValidationFlags);
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- *BufferLength = sizeof(Connection->ServerCertValidationFlags);
- *(uint32_t*)Buffer = Connection->ServerCertValidationFlags;
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_KEEP_ALIVE:
-
- if (*BufferLength < sizeof(Connection->KeepAliveIntervalMs)) {
- *BufferLength = sizeof(Connection->KeepAliveIntervalMs);
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- *BufferLength = sizeof(Connection->KeepAliveIntervalMs);
- *(uint32_t*)Buffer = Connection->KeepAliveIntervalMs;
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_DISCONNECT_TIMEOUT:
-
- if (*BufferLength < sizeof(Connection->DisconnectTimeoutUs)) {
- *BufferLength = sizeof(Connection->DisconnectTimeoutUs);
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- *BufferLength = sizeof(uint32_t);
- *(uint32_t*)Buffer = US_TO_MS(Connection->DisconnectTimeoutUs);
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_RESUMPTION_STATE: {
-
- if (QuicConnIsServer(Connection)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- if (Connection->RemoteServerName == NULL) {
- Status = QUIC_STATUS_INVALID_STATE;
- break;
- }
-
- uint32_t RequiredBufferLength = 0;
- Status = QuicTlsReadTicket(Connection->Crypto.TLS, &RequiredBufferLength, NULL);
- if (Status != QUIC_STATUS_BUFFER_TOO_SMALL) {
- QuicTraceLogConnVerbose(
- ReadTicketFailure,
- Connection,
- "QuicTlsReadTicket failed, 0x%x",
- Status);
- break;
- }
-
- _Analysis_assume_(strlen(Connection->RemoteServerName) <= (size_t)UINT16_MAX);
- uint16_t RemoteServerNameLength = (uint16_t)strlen(Connection->RemoteServerName);
-
- QUIC_SERIALIZED_RESUMPTION_STATE* State =
- (QUIC_SERIALIZED_RESUMPTION_STATE*)Buffer;
-
- RequiredBufferLength += sizeof(QUIC_SERIALIZED_RESUMPTION_STATE);
- RequiredBufferLength += RemoteServerNameLength;
-
- if (*BufferLength < RequiredBufferLength) {
- *BufferLength = RequiredBufferLength;
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- State->QuicVersion = Connection->Stats.QuicVersion;
- State->TransportParameters = Connection->PeerTransportParams;
- State->ServerNameLength = RemoteServerNameLength;
- memcpy(State->Buffer, Connection->RemoteServerName, State->ServerNameLength);
-
- uint32_t TempBufferLength = *BufferLength - RemoteServerNameLength;
- Status =
- QuicTlsReadTicket(
- Connection->Crypto.TLS,
- &TempBufferLength,
- State->Buffer + RemoteServerNameLength);
- *BufferLength = RequiredBufferLength;
-
- break;
- }
-
- case QUIC_PARAM_CONN_SEND_BUFFERING:
+ case QUIC_PARAM_CONN_SHARE_UDP_BINDING:
if (*BufferLength < sizeof(uint8_t)) {
*BufferLength = sizeof(uint8_t);
@@ -6269,15 +5834,28 @@ QuicConnParamGet(
}
*BufferLength = sizeof(uint8_t);
- *(uint8_t*)Buffer = Connection->State.UseSendBuffer;
+ *(uint8_t*)Buffer = Connection->State.ShareBinding;
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_SEND_PACING:
+ case QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT:
+ Type =
+ QuicConnIsServer(Connection) ?
+ STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_BI_DIR :
+ STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_BI_DIR;
+ goto Get_Stream_Count;
- if (*BufferLength < sizeof(uint8_t)) {
- *BufferLength = sizeof(uint8_t);
+ case QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT:
+ Type =
+ QuicConnIsServer(Connection) ?
+ STREAM_ID_FLAG_IS_SERVER | STREAM_ID_FLAG_IS_UNI_DIR :
+ STREAM_ID_FLAG_IS_CLIENT | STREAM_ID_FLAG_IS_UNI_DIR;
+ goto Get_Stream_Count;
+
+ Get_Stream_Count:
+ if (*BufferLength < sizeof(uint16_t)) {
+ *BufferLength = sizeof(uint16_t);
Status = QUIC_STATUS_BUFFER_TOO_SMALL;
break;
}
@@ -6287,16 +5865,17 @@ QuicConnParamGet(
break;
}
- *BufferLength = sizeof(uint8_t);
- *(uint8_t*)Buffer = Connection->State.UsePacing;
+ *BufferLength = sizeof(uint16_t);
+ *(uint16_t*)Buffer =
+ QuicStreamSetGetCountAvailable(&Connection->Streams, Type);
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_SHARE_UDP_BINDING:
+ case QUIC_PARAM_CONN_MAX_STREAM_IDS:
- if (*BufferLength < sizeof(uint8_t)) {
- *BufferLength = sizeof(uint8_t);
+ if (*BufferLength < sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES) {
+ *BufferLength = sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES;
Status = QUIC_STATUS_BUFFER_TOO_SMALL;
break;
}
@@ -6306,35 +5885,22 @@ QuicConnParamGet(
break;
}
- *BufferLength = sizeof(uint8_t);
- *(uint8_t*)Buffer = Connection->State.ShareBinding;
+ *BufferLength = sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES;
+ QuicStreamSetGetMaxStreamIDs(&Connection->Streams, (uint64_t*)Buffer);
Status = QUIC_STATUS_SUCCESS;
break;
- case QUIC_PARAM_CONN_IDEAL_PROCESSOR:
-
- if (*BufferLength < sizeof(uint16_t)) {
- *BufferLength = sizeof(uint16_t);
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- break;
- }
+ case QUIC_PARAM_CONN_CLOSE_REASON_PHRASE:
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
+ if (Connection->CloseReasonPhrase == NULL) {
+ Status = QUIC_STATUS_NOT_FOUND;
break;
}
- *BufferLength = sizeof(uint16_t);
- *(uint16_t*)Buffer = Connection->Worker->IdealProcessor;
-
- Status = QUIC_STATUS_SUCCESS;
- break;
-
- case QUIC_PARAM_CONN_MAX_STREAM_IDS:
-
- if (*BufferLength < sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES) {
- *BufferLength = sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES;
+ Length = (uint32_t)strlen(Connection->CloseReasonPhrase) + 1;
+ if (*BufferLength < Length) {
+ *BufferLength = Length;
Status = QUIC_STATUS_BUFFER_TOO_SMALL;
break;
}
@@ -6344,8 +5910,8 @@ QuicConnParamGet(
break;
}
- *BufferLength = sizeof(uint64_t) * NUMBER_OF_STREAM_TYPES;
- QuicStreamSetGetMaxStreamIDs(&Connection->Streams, (uint64_t*)Buffer);
+ *BufferLength = Length;
+ QuicCopyMemory(Buffer, Connection->CloseReasonPhrase, Length);
Status = QUIC_STATUS_SUCCESS;
break;
@@ -6436,6 +6002,91 @@ QuicConnParamGet(
return Status;
}
+_IRQL_requires_max_(PASSIVE_LEVEL)
+BOOLEAN
+QuicConnApplyNewSettings(
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN OverWrite,
+ _In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
+ uint32_t NewSettingsSize,
+ _In_reads_bytes_(NewSettingsSize)
+ const QUIC_SETTINGS* NewSettings
+ )
+{
+ QuicTraceLogConnInfo(
+ ApplySettings,
+ Connection,
+ "Applying new settings");
+
+ if (!QuicSettingApply(
+ &Connection->Settings,
+ OverWrite,
+ NewSettingsSize,
+ NewSettings)) {
+ return FALSE;
+ }
+
+ if (!Connection->State.Started) {
+
+ Connection->Paths[0].SmoothedRtt = MS_TO_US(Connection->Settings.InitialRttMs);
+ Connection->Paths[0].RttVariance = Connection->Paths[0].SmoothedRtt / 2;
+ Connection->Datagram.ReceiveEnabled = Connection->Settings.DatagramReceiveEnabled;
+
+ if (Connection->Settings.ServerResumptionLevel > QUIC_SERVER_NO_RESUME &&
+ Connection->HandshakeTP == NULL) {
+ QUIC_DBG_ASSERT(!Connection->State.Started);
+ Connection->HandshakeTP =
+ QuicPoolAlloc(&MsQuicLib.PerProc[QuicProcCurrentNumber()].TransportParamPool);
+ if (Connection->HandshakeTP == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "handshake TP",
+ sizeof(*Connection->HandshakeTP));
+ } else {
+ QuicZeroMemory(Connection->HandshakeTP, sizeof(*Connection->HandshakeTP));
+ Connection->State.ResumptionEnabled = TRUE;
+ }
+ }
+
+ QuicSendApplyNewSettings(&Connection->Send, &Connection->Settings);
+ QuicCongestionControlInitialize(&Connection->CongestionControl, &Connection->Settings);
+ }
+
+ uint8_t PeerStreamType =
+ QuicConnIsServer(Connection) ?
+ STREAM_ID_FLAG_IS_CLIENT : STREAM_ID_FLAG_IS_SERVER;
+
+ if (NewSettings->IsSet.PeerBidiStreamCount) {
+ QuicStreamSetUpdateMaxCount(
+ &Connection->Streams,
+ PeerStreamType | STREAM_ID_FLAG_IS_BI_DIR,
+ Connection->Settings.PeerBidiStreamCount);
+ }
+ if (NewSettings->IsSet.PeerUnidiStreamCount) {
+ QuicStreamSetUpdateMaxCount(
+ &Connection->Streams,
+ PeerStreamType | STREAM_ID_FLAG_IS_UNI_DIR,
+ Connection->Settings.PeerUnidiStreamCount);
+ }
+
+ if (NewSettings->IsSet.KeepAliveIntervalMs && Connection->State.Started) {
+ if (Connection->Settings.KeepAliveIntervalMs != 0) {
+ QuicConnProcessKeepAliveOperation(Connection);;
+ } else {
+ QuicConnTimerCancel(Connection, QUIC_CONN_TIMER_KEEP_ALIVE);
+ }
+ }
+
+ if (OverWrite) {
+ QuicSettingsDumpNew(NewSettingsSize, NewSettings);
+ } else {
+ QuicSettingsDump(&Connection->Settings); // TODO - Really necessary?
+ }
+
+ return TRUE;
+}
+
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicConnProcessApiOperation(
@@ -6462,12 +6113,20 @@ QuicConnProcessApiOperation(
Status =
QuicConnStart(
Connection,
+ ApiCtx->CONN_START.Configuration,
ApiCtx->CONN_START.Family,
ApiCtx->CONN_START.ServerName,
ApiCtx->CONN_START.ServerPort);
ApiCtx->CONN_START.ServerName = NULL;
break;
+ case QUIC_API_TYPE_CONN_SET_CONFIGURATION:
+ Status =
+ QuicConnSetConfiguration(
+ Connection,
+ ApiCtx->CONN_SET_CONFIGURATION.Configuration);
+ break;
+
case QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET:
QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
Status =
@@ -6590,9 +6249,7 @@ QuicConnDrainOperations(
{
QUIC_OPERATION* Oper;
const uint32_t MaxOperationCount =
- (Connection->Session == NULL || Connection->Session->Registration == NULL) ?
- MsQuicLib.Settings.MaxOperationsPerDrain :
- Connection->Session->Settings.MaxOperationsPerDrain;
+ Connection->Settings.MaxOperationsPerDrain;
uint32_t OperationCount = 0;
BOOLEAN HasMoreWorkToDo = TRUE;
@@ -6605,7 +6262,7 @@ QuicConnDrainOperations(
//
QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
QUIC_STATUS Status;
- if (QUIC_FAILED(Status = QuicConnInitializeCrypto(Connection))) {
+ if (QUIC_FAILED(Status = QuicCryptoInitialize(&Connection->Crypto))) {
QuicConnFatalError(Connection, Status, "Lazily initialize failure");
} else {
Connection->State.Initialized = TRUE;
@@ -6613,6 +6270,12 @@ QuicConnDrainOperations(
ConnInitializeComplete,
"[conn][%p] Initialize complete",
Connection);
+ if (Connection->Settings.KeepAliveIntervalMs != 0) {
+ QuicConnTimerSet(
+ Connection,
+ QUIC_CONN_TIMER_KEEP_ALIVE,
+ Connection->Settings.KeepAliveIntervalMs);
+ }
}
}
diff --git a/src/core/connection.h b/src/core/connection.h
index 56b07487c2..1db907fe7f 100644
--- a/src/core/connection.h
+++ b/src/core/connection.h
@@ -45,8 +45,12 @@ typedef union QUIC_CONNECTION_STATE {
// Indicates whether packet number encryption is enabled or not for the
// connection.
//
- BOOLEAN HeaderProtectionEnabled : 1;
+ BOOLEAN HeaderProtectionEnabled : 1; // TODO - Remove since it's not used
+ //
+ // Indicates that 1-RTT encryption has been configured/negotiated to be
+ // disabled.
+ //
BOOLEAN Disable1RttEncrytion : 1;
//
@@ -57,6 +61,12 @@ typedef union QUIC_CONNECTION_STATE {
//
BOOLEAN ExternalOwner : 1;
+ //
+ // Indicate the connection is currently in the registration's list of
+ // connections and needs to be removed.
+ //
+ BOOLEAN Registered : 1;
+
//
// This flag indicates the client has gotten response from the server.
// The response could either be a Retry or server Initial packet. Once
@@ -114,16 +124,6 @@ typedef union QUIC_CONNECTION_STATE {
//
BOOLEAN SendShutdownCompleteNotif : 1;
- //
- // Indicates whether send requests should be buffered.
- //
- BOOLEAN UseSendBuffer : 1;
-
- //
- // Indicates whether pacing logic is enabled for sending.
- //
- BOOLEAN UsePacing : 1;
-
//
// Indicates whether this connection shares bindings with others.
//
@@ -272,9 +272,9 @@ typedef struct QUIC_CONNECTION {
struct QUIC_HANDLE;
//
- // Link into the session's list of connections.
+ // Link into the registrations's list of connections.
//
- QUIC_LIST_ENTRY SessionLink;
+ QUIC_LIST_ENTRY RegistrationLink;
//
// Link in the worker's connection queue.
@@ -298,9 +298,15 @@ typedef struct QUIC_CONNECTION {
QUIC_REGISTRATION* Registration;
//
- // The top level session this connection is a part of.
+ // The configuration for this connection.
//
- QUIC_SESSION* Session;
+ QUIC_CONFIGURATION* Configuration;
+
+ //
+ // The settings for this connection. Some values may be inherited from the
+ // global settings, the configuration setting or explicitly set by the app.
+ //
+ QUIC_SETTINGS Settings;
//
// Number of references to the handle.
@@ -324,11 +330,6 @@ typedef struct QUIC_CONNECTION {
//
QUIC_THREAD_ID WorkerThreadID;
- //
- // The set of ignore flags for server certificate validation to pass to TLS.
- //
- uint32_t ServerCertValidationFlags;
-
//
// The server ID for the connection ID.
//
@@ -379,33 +380,6 @@ typedef struct QUIC_CONNECTION {
//
uint8_t AckDelayExponent;
- //
- // Maximum amount of time the connection waits before acknowledging a
- // received packet.
- //
- uint32_t MaxAckDelayMs;
-
- //
- // The idle timeout period (in milliseconds).
- //
- uint64_t IdleTimeoutMs;
-
- //
- // The handshake idle timeout period (in milliseconds).
- //
- uint64_t HandshakeIdleTimeoutMs;
-
- //
- // The number of microseconds that must elapse before the connection will be
- // considered 'ACK idle' and disconnects.
- //
- uint32_t DisconnectTimeoutUs;
-
- //
- // The interval (in milliseconds) between keep alives sent locally.
- //
- uint32_t KeepAliveIntervalMs;
-
//
// The sequence number to use for the next source CID.
//
@@ -558,6 +532,15 @@ typedef struct QUIC_CONNECTION {
} QUIC_CONNECTION;
+typedef struct QUIC_SERIALIZED_RESUMPTION_STATE {
+
+ uint32_t QuicVersion;
+ QUIC_TRANSPORT_PARAMETERS TransportParameters;
+ uint16_t ServerNameLength;
+ uint8_t Buffer[0]; // ServerName and TLS Session/Ticket
+
+} QUIC_SERIALIZED_RESUMPTION_STATE;
+
//
// Estimates the memory usage for a connection object in the handshake state.
// TODO - Improve this estimate?
@@ -832,7 +815,7 @@ _Must_inspect_result_
_Success_(return != NULL)
QUIC_CONNECTION*
QuicConnAlloc(
- _In_ QUIC_SESSION* Session,
+ _In_ QUIC_REGISTRATION* Registration,
_In_opt_ const QUIC_RECV_DATAGRAM* const Datagram
);
@@ -942,6 +925,16 @@ QuicConnRelease(
}
#pragma warning(pop)
+//
+// Registers the connection with a registration.
+//
+_IRQL_requires_max_(DISPATCH_LEVEL)
+void
+QuicConnRegister(
+ _Inout_ QUIC_CONNECTION* Connection,
+ _Inout_ QUIC_REGISTRATION* Registration
+ );
+
//
// Tracing rundown for the connection.
//
@@ -972,16 +965,6 @@ QuicConnDrainOperations(
_In_ QUIC_CONNECTION* Connection
);
-//
-// Applies the settings from the session.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicConnApplySettings(
- _In_ QUIC_CONNECTION* Connection,
- _In_ const QUIC_SETTINGS* Settings
- );
-
//
// Queues a new operation on the connection and queues the connection on a
// worker if necessary.
@@ -1191,18 +1174,6 @@ QuicConnOnLocalAddressChanged(
_In_ QUIC_CONNECTION* Connection
);
-//
-// Starts the connection.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicConnStart(
- _In_ QUIC_CONNECTION* Connection,
- _In_ QUIC_ADDRESS_FAMILY Family,
- _In_opt_z_ const char* ServerName,
- _In_ uint16_t ServerPort // Host byte order
- );
-
//
// Restarts the connection with the current configuration.
//
@@ -1225,13 +1196,13 @@ QuicConnProcessPeerTransportParameters(
);
//
-// Configures the security config.
+// Sets the configuration handle.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicConnHandshakeConfigure(
+QuicConnSetConfiguration(
_In_ QUIC_CONNECTION* Connection,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
+ _In_ QUIC_CONFIGURATION* Configuration
);
//
diff --git a/src/core/core.kernel.vcxproj b/src/core/core.kernel.vcxproj
index 90bbe25487..2b8e180430 100644
--- a/src/core/core.kernel.vcxproj
+++ b/src/core/core.kernel.vcxproj
@@ -38,6 +38,7 @@
+
@@ -60,7 +61,6 @@
-
@@ -74,6 +74,7 @@
+
@@ -96,7 +97,6 @@
-
diff --git a/src/core/crypto.c b/src/core/crypto.c
index a002fee1db..8302f89b15 100644
--- a/src/core/crypto.c
+++ b/src/core/crypto.c
@@ -25,7 +25,7 @@
QUIC_TLS_PROCESS_COMPLETE_CALLBACK QuicTlsProcessDataCompleteCallback;
QUIC_TLS_RECEIVE_TP_CALLBACK QuicConnReceiveTP;
-QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK QuicConnRecvResumptionTicket;
+QUIC_TLS_RECEIVE_TICKET_CALLBACK QuicConnRecvResumptionTicket;
_IRQL_requires_max_(PASSIVE_LEVEL)
void
@@ -235,6 +235,15 @@ QuicCryptoUninitialize(
QuicTlsUninitialize(Crypto->TLS);
Crypto->TLS = NULL;
}
+ if (Crypto->ResumptionTicket != NULL) {
+ QUIC_FREE(Crypto->ResumptionTicket);
+ Crypto->ResumptionTicket = NULL;
+ }
+ if (Crypto->TlsState.NegotiatedAlpn != NULL &&
+ QuicConnIsServer(QuicCryptoGetConnection(Crypto))) {
+ QUIC_FREE(Crypto->TlsState.NegotiatedAlpn);
+ Crypto->TlsState.NegotiatedAlpn = NULL;
+ }
if (Crypto->Initialized) {
QuicRecvBufferUninitialize(&Crypto->RecvBuffer);
QuicRangeUninitialize(&Crypto->SparseAckRanges);
@@ -259,20 +268,20 @@ QuicCryptoInitializeTls(
QUIC_DBG_ASSERT(Params != NULL);
QUIC_DBG_ASSERT(SecConfig != NULL);
- QUIC_DBG_ASSERT(Connection->Session != NULL);
- QUIC_DBG_ASSERT(Connection->Session->TlsSession != NULL);
+ QUIC_DBG_ASSERT(Connection->Configuration != NULL);
TlsConfig.IsServer = IsServer;
- TlsConfig.TlsSession = Connection->Session->TlsSession;
if (IsServer) {
TlsConfig.AlpnBuffer = Crypto->TlsState.NegotiatedAlpn;
TlsConfig.AlpnBufferLength = 1 + Crypto->TlsState.NegotiatedAlpn[0];
} else {
- TlsConfig.AlpnBuffer = Connection->Session->AlpnList;
- TlsConfig.AlpnBufferLength = Connection->Session->AlpnListLength;
+ TlsConfig.AlpnBuffer = Connection->Configuration->AlpnList;
+ TlsConfig.AlpnBufferLength = Connection->Configuration->AlpnListLength;
}
TlsConfig.SecConfig = SecConfig;
TlsConfig.Connection = Connection;
+ TlsConfig.ResumptionTicketBuffer = Crypto->ResumptionTicket;
+ TlsConfig.ResumptionTicketLength = Crypto->ResumptionTicketLength;
TlsConfig.ProcessCompleteCallback = QuicTlsProcessDataCompleteCallback;
TlsConfig.ReceiveTPCallback = QuicConnReceiveTP;
TlsConfig.ReceiveResumptionCallback = QuicConnRecvResumptionTicket;
@@ -283,7 +292,10 @@ QuicCryptoInitializeTls(
TlsConfig.LocalTPBuffer =
QuicCryptoTlsEncodeTransportParameters(
Connection,
+ QuicConnIsServer(Connection),
Params,
+ (Connection->State.TestTransportParameterSet ?
+ &Connection->TestTransportParameter : NULL),
&TlsConfig.LocalTPLength);
if (TlsConfig.LocalTPBuffer == NULL) {
Status = QUIC_STATUS_OUT_OF_MEMORY;
@@ -302,9 +314,9 @@ QuicCryptoInitializeTls(
goto Error;
}
- if (!IsServer) {
- QuicCryptoProcessData(Crypto, TRUE);
- }
+ Crypto->ResumptionTicket = NULL; // Owned by TLS now.
+ Crypto->ResumptionTicketLength = 0;
+ QuicCryptoProcessData(Crypto, !IsServer);
Error:
@@ -1143,6 +1155,7 @@ QuicConnReceiveTP(
{
if (!QuicCryptoTlsDecodeTransportParameters(
Connection,
+ !QuicConnIsServer(Connection),
TPBuffer,
TPLength,
&Connection->PeerTransportParams)) {
@@ -1371,37 +1384,17 @@ QuicCryptoProcessTlsCompletion(
QuicConnGenerateNewSourceCids(Connection, FALSE);
- if (!QuicConnIsServer(Connection) &&
- Connection->RemoteServerName != NULL) {
-
- QUIC_SEC_CONFIG* SecConfig = QuicTlsGetSecConfig(Crypto->TLS);
-
- //
- // Cache this information for future connections in this
- // session to make use of.
- //
- QUIC_TEL_ASSERT(Connection->Session != NULL);
- QuicSessionServerCacheSetState(
- Connection->Session,
- Connection->RemoteServerName,
- Connection->Stats.QuicVersion,
- &Connection->PeerTransportParams,
- SecConfig);
-
- QuicTlsSecConfigRelease(SecConfig);
- }
-
QUIC_DBG_ASSERT(Crypto->TlsState.NegotiatedAlpn != NULL);
if (!QuicConnIsServer(Connection)) {
//
// Currently, NegotiatedAlpn points into TLS state memory, which
// doesn't live as long as the connection. Update it to point to the
- // session state memory instead.
+ // configuration state memory instead.
//
Crypto->TlsState.NegotiatedAlpn =
QuicTlsAlpnFindInList(
- Connection->Session->AlpnListLength,
- Connection->Session->AlpnList,
+ Connection->Configuration->AlpnListLength,
+ Connection->Configuration->AlpnList,
Crypto->TlsState.NegotiatedAlpn[0],
Crypto->TlsState.NegotiatedAlpn + 1);
QUIC_TEL_ASSERT(Crypto->TlsState.NegotiatedAlpn != NULL);
@@ -1432,13 +1425,6 @@ QuicCryptoProcessTlsCompletion(
}
}
- if (ResultFlags & QUIC_TLS_RESULT_TICKET) {
- QuicTraceLogConnInfo(
- TicketReady,
- Connection,
- "Ticket ready");
- }
-
QuicCryptoValidate(Crypto);
if (ResultFlags & QUIC_TLS_RESULT_READ_KEY_UPDATED) {
@@ -1545,13 +1531,12 @@ QuicCryptoProcessData(
goto Error;
}
- if (BufferOffset == 0 &&
- QuicConnIsServer(Connection) &&
- !Connection->State.ExternalOwner) {
+ if (QuicConnIsServer(Connection) && !Connection->State.ListenerAccepted) {
//
// Preprocess the TLS ClientHello to find the ALPN (and optionally
// SNI) to match the connection to a listener.
//
+ QUIC_DBG_ASSERT(BufferOffset == 0);
QUIC_NEW_CONNECTION_INFO Info = {0};
QUIC_STATUS Status =
QuicCryptoTlsReadInitial(
@@ -1571,72 +1556,24 @@ QuicCryptoProcessData(
goto Error;
}
+ QuicRecvBufferDrain(&Crypto->RecvBuffer, 0);
+ QuicCryptoValidate(Crypto);
+
Info.QuicVersion = Connection->Stats.QuicVersion;
Info.LocalAddress = &Connection->Paths[0].LocalAddress;
Info.RemoteAddress = &Connection->Paths[0].RemoteAddress;
Info.CryptoBufferLength = Buffer.Length;
Info.CryptoBuffer = Buffer.Buffer;
- QUIC_CONNECTION_ACCEPT_RESULT AcceptResult =
- QUIC_CONNECTION_REJECT_NO_LISTENER;
-
- QUIC_SEC_CONFIG* SecConfig = NULL;
- QUIC_LISTENER* Listener =
- QuicBindingGetListener(
- Connection->Paths[0].Binding,
- &Info);
- if (Listener != NULL) {
- AcceptResult =
- QuicListenerAcceptConnection(
- Listener,
- Connection,
- &Info,
- &SecConfig);
- QuicRundownRelease(&Listener->Rundown);
- }
-
- if (AcceptResult != QUIC_CONNECTION_ACCEPT) {
- QuicTraceEvent(
- ConnErrorStatus,
- "[conn][%p] ERROR, %u, %s.",
- Connection,
- AcceptResult,
- "Connection rejected");
- if (AcceptResult == QUIC_CONNECTION_REJECT_NO_LISTENER) {
- QuicConnTransportError(
- Connection,
- QUIC_ERROR_CRYPTO_NO_APPLICATION_PROTOCOL);
- } else if (AcceptResult == QUIC_CONNECTION_REJECT_BUSY) {
- QuicConnTransportError(
- Connection,
- QUIC_ERROR_CONNECTION_REFUSED);
- } else { // QUIC_CONNECTION_REJECT_APP
- QuicConnTransportError(
- Connection,
- QUIC_ERROR_INTERNAL_ERROR);
- }
- goto Error;
-
- }
-
- //
- // Save the negotiated ALPN (starting with the length prefix) to be
- // used later in building up the TLS response.
- //
- Crypto->TlsState.NegotiatedAlpn = Info.NegotiatedAlpn - 1;
-
- if (SecConfig != NULL) {
- Status = QuicConnHandshakeConfigure(Connection, SecConfig);
- if (QUIC_FAILED(Status)) {
- QuicConnTransportError(
- Connection,
- QUIC_ERROR_CRYPTO_HANDSHAKE_FAILURE);
- goto Error;
- }
- }
+ QuicBindingAcceptConnection(
+ Connection->Paths[0].Binding,
+ Connection,
+ &Info);
+ return;
}
}
+ QUIC_DBG_ASSERT(Crypto->TLS != NULL);
if (Crypto->TLS == NULL) {
//
// The listener still hasn't given us the security config to initialize
@@ -1651,7 +1588,12 @@ QuicCryptoProcessData(
QuicCryptoValidate(Crypto);
QUIC_TLS_RESULT_FLAGS ResultFlags =
- QuicTlsProcessData(Crypto->TLS, QUIC_TLS_CRYPTO_DATA, Buffer.Buffer, &Buffer.Length, &Crypto->TlsState);
+ QuicTlsProcessData(
+ Crypto->TLS,
+ QUIC_TLS_CRYPTO_DATA,
+ Buffer.Buffer,
+ &Buffer.Length,
+ &Crypto->TlsState);
QUIC_TEL_ASSERT(!IsClientInitial || ResultFlags != QUIC_TLS_RESULT_PENDING); // TODO - Support async for client Initial?
@@ -1839,3 +1781,452 @@ QuicCryptoUpdateKeyPhase(
PacketSpace->CurrentKeyPhaseBytesSent = 0;
}
+
+QUIC_STATUS
+QuicCryptoEncodeServerTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t QuicVersion,
+ _In_ uint32_t AppDataLength,
+ _In_reads_bytes_opt_(AppDataLength)
+ const uint8_t* const AppResumptionData,
+ _In_ const QUIC_TRANSPORT_PARAMETERS* HandshakeTP,
+ _In_ uint8_t AlpnLength,
+ _In_reads_bytes_(AlpnLength)
+ const uint8_t* const NegotiatedAlpn,
+ _Outptr_result_buffer_(*TicketLength)
+ uint8_t** Ticket,
+ _Out_ uint32_t* TicketLength
+ )
+{
+ QUIC_STATUS Status;
+ uint32_t EncodedTPLength = 0;
+ uint8_t* TicketBuffer = NULL;
+ const uint8_t* EncodedHSTP = NULL;
+
+ *Ticket = NULL;
+ *TicketLength = 0;
+
+ QUIC_TRANSPORT_PARAMETERS HSTPCopy = *HandshakeTP;
+ HSTPCopy.Flags &= (
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI);
+
+ EncodedHSTP =
+ QuicCryptoTlsEncodeTransportParameters(
+ Connection,
+ TRUE,
+ &HSTPCopy,
+ NULL,
+ &EncodedTPLength);
+ if (EncodedHSTP == NULL) {
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ //
+ // Adjust TP buffer for TLS header, if present.
+ //
+ EncodedTPLength -= QuicTlsTPHeaderSize;
+
+ uint32_t TotalTicketLength =
+ (uint32_t)(QuicVarIntSize(QUIC_TLS_RESUMPTION_TICKET_VERSION) +
+ sizeof(QuicVersion) +
+ QuicVarIntSize(AlpnLength) +
+ QuicVarIntSize(EncodedTPLength) +
+ QuicVarIntSize(AppDataLength) +
+ AlpnLength +
+ EncodedTPLength +
+ AppDataLength);
+
+ TicketBuffer = QUIC_ALLOC_NONPAGED(TotalTicketLength);
+ if (TicketBuffer == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "Server resumption ticket",
+ TotalTicketLength);
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ //
+ // Encoded ticket format is as follows:
+ // Ticket Version (QUIC_VAR_INT) [1..4]
+ // Quic Version (network byte order) [4]
+ // Negotiated ALPN length (QUIC_VAR_INT) [1..2]
+ // Transport Parameters length (QUIC_VAR_INT) [1..2]
+ // App Ticket length (QUIC_VAR_INT) [1..2]
+ // Negotiated ALPN [...]
+ // Transport Parameters [...]
+ // App Ticket (omitted if length is zero) [...]
+ //
+
+ _Analysis_assume_(sizeof(*TicketBuffer) >= 8);
+ uint8_t* TicketCursor = QuicVarIntEncode(QUIC_TLS_RESUMPTION_TICKET_VERSION, TicketBuffer);
+ QuicCopyMemory(TicketCursor, &QuicVersion, sizeof(QuicVersion));
+ TicketCursor += sizeof(QuicVersion);
+ TicketCursor = QuicVarIntEncode(AlpnLength, TicketCursor);
+ TicketCursor = QuicVarIntEncode(EncodedTPLength, TicketCursor);
+ TicketCursor = QuicVarIntEncode(AppDataLength, TicketCursor);
+ QuicCopyMemory(TicketCursor, NegotiatedAlpn, AlpnLength);
+ TicketCursor += AlpnLength;
+ QuicCopyMemory(TicketCursor, EncodedHSTP + QuicTlsTPHeaderSize, EncodedTPLength);
+ TicketCursor += EncodedTPLength;
+ if (AppDataLength > 0) {
+ QuicCopyMemory(TicketCursor, AppResumptionData, AppDataLength);
+ TicketCursor += AppDataLength;
+ }
+ QUIC_DBG_ASSERT(TicketCursor == TicketBuffer + TotalTicketLength);
+
+ *Ticket = TicketBuffer;
+ *TicketLength = TotalTicketLength;
+
+ Status = QUIC_STATUS_SUCCESS;
+
+Error:
+
+ if (EncodedHSTP != NULL) {
+ QUIC_FREE(EncodedHSTP);
+ }
+
+ return Status;
+}
+
+QUIC_STATUS
+QuicCryptoDecodeServerTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint16_t TicketLength,
+ _In_reads_bytes_(TicketLength)
+ const uint8_t* Ticket,
+ _In_ const uint8_t* AlpnList,
+ _In_ uint16_t AlpnListLength,
+ _Out_ QUIC_TRANSPORT_PARAMETERS* DecodedTP,
+ _Outptr_result_buffer_maybenull_(*AppDataLength)
+ const uint8_t** AppData,
+ _Out_ uint32_t* AppDataLength
+ )
+{
+ QUIC_STATUS Status = QUIC_STATUS_INVALID_PARAMETER;
+ uint16_t Offset = 0;
+ QUIC_VAR_INT TicketVersion = 0, AlpnLength = 0, TPLength = 0, AppTicketLength = 0;
+
+ *AppData = NULL;
+ *AppDataLength = 0;
+
+ if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &TicketVersion)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket version failed to decode");
+ goto Error;
+ }
+ if (TicketVersion != QUIC_TLS_RESUMPTION_TICKET_VERSION) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket version unsupported");
+ goto Error;
+ }
+
+ uint32_t QuicVersion;
+ memcpy(&QuicVersion, Ticket + Offset, sizeof(QuicVersion));
+ if (!QuicIsVersionSupported(QuicVersion)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket for unsupported QUIC version");
+ goto Error;
+ }
+ Offset += sizeof(QuicVersion);
+
+ if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &AlpnLength)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket ALPN length failed to decode");
+ goto Error;
+ }
+
+ if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &TPLength)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket TP length failed to decode");
+ goto Error;
+ }
+
+ if (!QuicVarIntDecode(TicketLength, Ticket, &Offset, &AppTicketLength)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket app data length failed to decode");
+ goto Error;
+ }
+
+ if (QuicTlsAlpnFindInList(AlpnListLength, AlpnList, (uint8_t)AlpnLength, Ticket + Offset) == NULL) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket ALPN not present in ALPN list");
+ goto Error;
+ }
+ Offset += (uint16_t)AlpnLength;
+
+ if (!QuicCryptoTlsDecodeTransportParameters(
+ Connection,
+ TRUE, // IsServerTP
+ Ticket + Offset,
+ (uint16_t)TPLength,
+ DecodedTP)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket TParams failed to decode");
+ goto Error;
+ }
+ Offset += (uint16_t)TPLength;
+
+ if (TicketLength == Offset + AppTicketLength) {
+ Status = QUIC_STATUS_SUCCESS;
+ *AppDataLength = (uint32_t)AppTicketLength;
+ if (AppTicketLength > 0) {
+ *AppData = Ticket + Offset;
+ }
+ } else {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket app data length corrupt");
+ }
+
+Error:
+ return Status;
+}
+
+QUIC_STATUS
+QuicCryptoEncodeClientTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t TicketLength,
+ _In_reads_bytes_(TicketLength)
+ const uint8_t* Ticket,
+ _In_ const QUIC_TRANSPORT_PARAMETERS* ServerTP,
+ _In_ uint32_t QuicVersion,
+ _Outptr_result_buffer_(*ClientTicketLength)
+ const uint8_t** ClientTicket,
+ _Out_ uint32_t* ClientTicketLength
+ )
+{
+ QUIC_STATUS Status;
+ uint32_t EncodedTPLength = 0;
+ uint8_t* ClientTicketBuffer = NULL;
+ const uint8_t* EncodedServerTP = NULL;
+
+ *ClientTicket = NULL;
+ *ClientTicketLength = 0;
+
+ QUIC_TRANSPORT_PARAMETERS ServerTPCopy = *ServerTP;
+ //
+ // The client must remember all TPs it can process except for the following
+ //
+ ServerTPCopy.Flags &= ~(
+ QUIC_TP_FLAG_ACK_DELAY_EXPONENT |
+ QUIC_TP_FLAG_MAX_ACK_DELAY |
+ QUIC_TP_FLAG_INITIAL_SOURCE_CONNECTION_ID |
+ QUIC_TP_FLAG_ORIGINAL_DESTINATION_CONNECTION_ID |
+ QUIC_TP_FLAG_PREFERRED_ADDRESS |
+ QUIC_TP_FLAG_RETRY_SOURCE_CONNECTION_ID |
+ QUIC_TP_FLAG_STATELESS_RESET_TOKEN);
+
+ EncodedServerTP =
+ QuicCryptoTlsEncodeTransportParameters(
+ Connection,
+ TRUE,
+ &ServerTPCopy,
+ NULL,
+ &EncodedTPLength);
+ if (EncodedServerTP == NULL) {
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ //
+ // Adjust for any TLS header potentially added to the TP buffer
+ //
+ EncodedTPLength -= QuicTlsTPHeaderSize;
+
+ uint32_t ClientTicketBufferLength =
+ (uint32_t)(QuicVarIntSize(QUIC_TLS_RESUMPTION_CLIENT_TICKET_VERSION) +
+ sizeof(QuicVersion) +
+ QuicVarIntSize(EncodedTPLength) +
+ QuicVarIntSize(TicketLength) +
+ EncodedTPLength +
+ TicketLength);
+
+ ClientTicketBuffer = QUIC_ALLOC_NONPAGED(ClientTicketBufferLength);
+ if (ClientTicketBuffer == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "Client resumption ticket",
+ ClientTicketBufferLength);
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ //
+ // Encoded ticket blob format is as follows:
+ // Ticket Version (QUIC_VAR_INT) [1..4]
+ // Negotiated Quic Version (network byte order) [4]
+ // Transport Parameters length (QUIC_VAR_INT) [1..2]
+ // Received Ticket length (QUIC_VAR_INT) [1..2]
+ // Transport Parameters [...]
+ // Received Ticket (omitted if length is zero) [...]
+ //
+
+ _Analysis_assume_(sizeof(*ClientTicketBuffer) >= 8);
+ uint8_t* TicketCursor = QuicVarIntEncode(QUIC_TLS_RESUMPTION_CLIENT_TICKET_VERSION, ClientTicketBuffer);
+ QuicCopyMemory(TicketCursor, &QuicVersion, sizeof(QuicVersion));
+ TicketCursor += sizeof(QuicVersion);
+ TicketCursor = QuicVarIntEncode(EncodedTPLength, TicketCursor);
+ TicketCursor = QuicVarIntEncode(TicketLength, TicketCursor);
+ QuicCopyMemory(TicketCursor, EncodedServerTP + QuicTlsTPHeaderSize, EncodedTPLength);
+ TicketCursor += EncodedTPLength;
+ if (TicketLength > 0) {
+ QuicCopyMemory(TicketCursor, Ticket, TicketLength);
+ TicketCursor += TicketLength;
+ }
+ QUIC_DBG_ASSERT(TicketCursor == ClientTicketBuffer + ClientTicketBufferLength);
+
+ *ClientTicket = ClientTicketBuffer;
+ *ClientTicketLength = ClientTicketBufferLength;
+
+ Status = QUIC_STATUS_SUCCESS;
+
+Error:
+
+ if (EncodedServerTP != NULL) {
+ QUIC_FREE(EncodedServerTP);
+ }
+
+ return Status;
+}
+
+QUIC_STATUS
+QuicCryptoDecodeClientTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint16_t ClientTicketLength,
+ _In_reads_bytes_(ClientTicketLength)
+ const uint8_t* ClientTicket,
+ _Out_ QUIC_TRANSPORT_PARAMETERS* DecodedTP,
+ _Outptr_result_buffer_maybenull_(*ServerTicketLength)
+ uint8_t** ServerTicket,
+ _Out_ uint32_t* ServerTicketLength,
+ _Out_ uint32_t* QuicVersion
+ )
+{
+ QUIC_STATUS Status;
+ uint16_t Offset = 0;
+ QUIC_VAR_INT TicketVersion = 0, TPLength = 0, TicketLength = 0;
+
+ *ServerTicket = NULL;
+ *ServerTicketLength = 0;
+ *QuicVersion = 0;
+
+ if (!QuicVarIntDecode(ClientTicketLength, ClientTicket, &Offset, &TicketVersion)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Client Ticket version failed to decode");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ if (TicketVersion != QUIC_TLS_RESUMPTION_CLIENT_TICKET_VERSION) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Client Ticket version unsupported");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ QuicCopyMemory(QuicVersion, ClientTicket + Offset, sizeof(*QuicVersion));
+ Offset += sizeof(*QuicVersion);
+ if (!QuicVarIntDecode(ClientTicketLength, ClientTicket, &Offset, &TPLength)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Client Ticket TP length failed to decode");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ if (!QuicVarIntDecode(ClientTicketLength, ClientTicket, &Offset, &TicketLength)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket data length failed to decode");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ if (!QuicCryptoTlsDecodeTransportParameters(
+ Connection,
+ TRUE, // IsServerTP
+ ClientTicket + Offset,
+ (uint16_t)TPLength,
+ DecodedTP)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Resumption Ticket TParams failed to decode");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ Offset += (uint16_t)TPLength;
+ if (Offset + TicketLength != ClientTicketLength) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
+ Connection,
+ "Client resumption ticket length is corrupt");
+ goto Error;
+ }
+ if (TicketLength != 0) {
+ *ServerTicket = QUIC_ALLOC_NONPAGED((uint32_t)TicketLength);
+ if (*ServerTicket == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "Resumption ticket copy",
+ TicketLength);
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+ QuicCopyMemory(*ServerTicket, (uint8_t*)ClientTicket + Offset, (uint16_t)TicketLength);
+ }
+ *ServerTicketLength = (uint32_t)TicketLength;
+ Offset += (uint16_t)TicketLength;
+ QUIC_DBG_ASSERT(ClientTicketLength == Offset);
+
+ Status = QUIC_STATUS_SUCCESS;
+
+Error:
+ return Status;
+}
diff --git a/src/core/crypto.h b/src/core/crypto.h
index a5729f2f6b..23430121e5 100644
--- a/src/core/crypto.h
+++ b/src/core/crypto.h
@@ -93,6 +93,12 @@ typedef struct QUIC_CRYPTO {
//
QUIC_RECV_BUFFER RecvBuffer;
+ //
+ // Resumption ticket to send to server.
+ //
+ uint8_t* ResumptionTicket;
+ uint32_t ResumptionTicketLength;
+
} QUIC_CRYPTO;
inline
@@ -293,3 +299,85 @@ QuicCryptoUpdateKeyPhase (
_In_ QUIC_CONNECTION* Connection,
_In_ BOOLEAN LocalUpdate
);
+
+//
+// Encode all state the server needs to resume the connection into a ticket
+// ready to be passed to TLS.
+// The buffer returned in Ticket needs to be freed with QUIC_FREE().
+// Note: Connection is only used for logging and may be NULL for testing.
+//
+QUIC_STATUS
+QuicCryptoEncodeServerTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t QuicVersion,
+ _In_ uint32_t AppDataLength,
+ _In_reads_bytes_opt_(AppDataLength)
+ const uint8_t* const AppResumptionData,
+ _In_ const QUIC_TRANSPORT_PARAMETERS* HandshakeTP,
+ _In_ uint8_t AlpnLength,
+ _In_reads_bytes_(AlpnLength)
+ const uint8_t* const NegotiatedAlpn,
+ _Outptr_result_buffer_(*TicketLength)
+ uint8_t** Ticket,
+ _Out_ uint32_t* TicketLength
+ );
+
+//
+// Decode a previously-generated resumption ticket and extract all data needed
+// to resume the connection.
+// AppData contains a pointer to the offset within Ticket, so do not free it.
+// AppData contain NULL if the server application didn't pass any resumption
+// data.
+// Note: Connection is only used for logging and may be NULL for testing.
+//
+QUIC_STATUS
+QuicCryptoDecodeServerTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint16_t TicketLength,
+ _In_reads_bytes_(TicketLength)
+ const uint8_t* Ticket,
+ _In_ const uint8_t* AlpnList,
+ _In_ uint16_t AlpnListLength,
+ _Out_ QUIC_TRANSPORT_PARAMETERS* DecodedTP,
+ _Outptr_result_buffer_maybenull_(*AppDataLength)
+ const uint8_t** AppData,
+ _Out_ uint32_t* AppDataLength
+ );
+
+//
+// Encodes necessary data into the client ticket to enable connection resumption.
+// The pointer held by ClientTicket needs to be freed by QUIC_FREE().
+// Note: Connection is only used for logging and may be NULL for testing.
+//
+QUIC_STATUS
+QuicCryptoEncodeClientTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t TicketLength,
+ _In_reads_bytes_(TicketLength)
+ const uint8_t* Ticket,
+ _In_ const QUIC_TRANSPORT_PARAMETERS* ServerTP,
+ _In_ uint32_t QuicVersion,
+ _Outptr_result_buffer_(*ClientTicketLength)
+ const uint8_t** ClientTicket,
+ _Out_ uint32_t* ClientTicketLength
+ );
+
+//
+// Decodes and returns data necessary to resume a connection from a client ticket.
+// The buffer held in ServerTicket must be freed with QUIC_FREE().
+// Note: Connection is only used for logging and my be NULL for testing.
+//
+QUIC_STATUS
+QuicCryptoDecodeClientTicket(
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ uint16_t ClientTicketLength,
+ _In_reads_bytes_(ClientTicketLength)
+ const uint8_t* ClientTicket,
+ _Out_ QUIC_TRANSPORT_PARAMETERS* DecodedTP,
+ _Outptr_result_buffer_maybenull_(*ServerTicketLength)
+ uint8_t** ServerTicket,
+ _Out_ uint32_t* ServerTicketLength,
+ _Out_ uint32_t* QuicVersion
+ );
+
+
diff --git a/src/core/crypto_tls.c b/src/core/crypto_tls.c
index b502d273c4..4e8d2c7261 100644
--- a/src/core/crypto_tls.c
+++ b/src/core/crypto_tls.c
@@ -620,8 +620,10 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
_Success_(return != NULL)
const uint8_t*
QuicCryptoTlsEncodeTransportParameters(
- _In_ QUIC_CONNECTION* Connection,
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN IsServerTP,
_In_ const QUIC_TRANSPORT_PARAMETERS *TransportParams,
+ _In_opt_ const QUIC_PRIVATE_TRANSPORT_PARAMETER* TestParam,
_Out_ uint32_t* TPLen
)
{
@@ -629,14 +631,18 @@ QuicCryptoTlsEncodeTransportParameters(
// Precompute the required size so we can allocate all at once.
//
+ UNREFERENCED_PARAMETER(Connection);
+ UNREFERENCED_PARAMETER(IsServerTP);
+
QuicTraceLogConnVerbose(
EncodeTPStart,
Connection,
- "Encoding Transport Parameters");
+ "Encoding Transport Parameters (Server = %hhu)",
+ IsServerTP);
size_t RequiredTPLen = 0;
if (TransportParams->Flags & QUIC_TP_FLAG_ORIGINAL_DESTINATION_CONNECTION_ID) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
QUIC_FRE_ASSERT(TransportParams->OriginalDestinationConnectionIDLength <= QUIC_MAX_CONNECTION_ID_LENGTH_V1);
RequiredTPLen +=
TlsTransportParamLength(
@@ -650,7 +656,7 @@ QuicCryptoTlsEncodeTransportParameters(
QuicVarIntSize(TransportParams->IdleTimeout));
}
if (TransportParams->Flags & QUIC_TP_FLAG_STATELESS_RESET_TOKEN) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
RequiredTPLen +=
TlsTransportParamLength(
QUIC_TP_ID_STATELESS_RESET_TOKEN,
@@ -717,7 +723,7 @@ QuicCryptoTlsEncodeTransportParameters(
0);
}
if (TransportParams->Flags & QUIC_TP_FLAG_PREFERRED_ADDRESS) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
QUIC_FRE_ASSERT(FALSE); // TODO - Implement
}
if (TransportParams->Flags & QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT) {
@@ -734,7 +740,7 @@ QuicCryptoTlsEncodeTransportParameters(
TransportParams->InitialSourceConnectionIDLength);
}
if (TransportParams->Flags & QUIC_TP_FLAG_RETRY_SOURCE_CONNECTION_ID) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
QUIC_FRE_ASSERT(TransportParams->RetrySourceConnectionIDLength <= QUIC_MAX_CONNECTION_ID_LENGTH_V1);
RequiredTPLen +=
TlsTransportParamLength(
@@ -753,11 +759,11 @@ QuicCryptoTlsEncodeTransportParameters(
QUIC_TP_ID_DISABLE_1RTT_ENCRYPTION,
0);
}
- if (Connection->State.TestTransportParameterSet) {
+ if (TestParam != NULL) {
RequiredTPLen +=
TlsTransportParamLength(
- Connection->TestTransportParameter.Type,
- Connection->TestTransportParameter.Length);
+ TestParam->Type,
+ TestParam->Length);
}
QUIC_TEL_ASSERT(RequiredTPLen <= UINT16_MAX);
@@ -789,7 +795,7 @@ QuicCryptoTlsEncodeTransportParameters(
//
if (TransportParams->Flags & QUIC_TP_FLAG_ORIGINAL_DESTINATION_CONNECTION_ID) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
TPBuf =
TlsWriteTransportParam(
QUIC_TP_ID_ORIGINAL_DESTINATION_CONNECTION_ID,
@@ -816,7 +822,7 @@ QuicCryptoTlsEncodeTransportParameters(
TransportParams->IdleTimeout);
}
if (TransportParams->Flags & QUIC_TP_FLAG_STATELESS_RESET_TOKEN) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
TPBuf =
TlsWriteTransportParam(
QUIC_TP_ID_STATELESS_RESET_TOKEN,
@@ -943,7 +949,7 @@ QuicCryptoTlsEncodeTransportParameters(
"TP: Disable Active Migration");
}
if (TransportParams->Flags & QUIC_TP_FLAG_PREFERRED_ADDRESS) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
QUIC_FRE_ASSERT(FALSE); // TODO - Implement
QuicTraceLogConnVerbose(
EncodeTPPreferredAddress,
@@ -978,7 +984,7 @@ QuicCryptoTlsEncodeTransportParameters(
TransportParams->InitialSourceConnectionIDLength).Buffer);
}
if (TransportParams->Flags & QUIC_TP_FLAG_RETRY_SOURCE_CONNECTION_ID) {
- QUIC_DBG_ASSERT(QuicConnIsServer(Connection));
+ QUIC_DBG_ASSERT(IsServerTP);
TPBuf =
TlsWriteTransportParam(
QUIC_TP_ID_RETRY_SOURCE_CONNECTION_ID,
@@ -1016,19 +1022,19 @@ QuicCryptoTlsEncodeTransportParameters(
Connection,
"TP: Disable 1-RTT Encryption");
}
- if (Connection->State.TestTransportParameterSet) {
+ if (TestParam != NULL) {
TPBuf =
TlsWriteTransportParam(
- Connection->TestTransportParameter.Type,
- Connection->TestTransportParameter.Length,
- Connection->TestTransportParameter.Buffer,
+ TestParam->Type,
+ TestParam->Length,
+ TestParam->Buffer,
TPBuf);
QuicTraceLogConnVerbose(
EncodeTPTest,
Connection,
"TP: TEST TP (Type %hu, Length %hu)",
- Connection->TestTransportParameter.Type,
- Connection->TestTransportParameter.Length);
+ TestParam->Type,
+ TestParam->Length);
}
size_t FinalTPLength = (TPBuf - (TPBufBase + QuicTlsTPHeaderSize));
@@ -1056,7 +1062,8 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
_Success_(return != FALSE)
BOOLEAN
QuicCryptoTlsDecodeTransportParameters(
- _In_ QUIC_CONNECTION* Connection,
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN IsServerTP,
_In_reads_(TPLen)
const uint8_t* TPBuf,
_In_ uint16_t TPLen,
@@ -1067,6 +1074,8 @@ QuicCryptoTlsDecodeTransportParameters(
uint64_t ParamsPresent = 0;
uint16_t Offset = 0;
+ UNREFERENCED_PARAMETER(Connection);
+
QuicZeroMemory(TransportParams, sizeof(QUIC_TRANSPORT_PARAMETERS));
TransportParams->MaxUdpPayloadSize = QUIC_TP_MAX_PACKET_SIZE_DEFAULT;
TransportParams->AckDelayExponent = QUIC_TP_ACK_DELAY_EXPONENT_DEFAULT;
@@ -1076,7 +1085,8 @@ QuicCryptoTlsDecodeTransportParameters(
QuicTraceLogConnVerbose(
DecodeTPStart,
Connection,
- "Decoding Peer Transport Parameters (%hu bytes)",
+ "Decoding Transport Parameters (Server = %hhu) (%hu bytes)",
+ IsServerTP,
TPLen);
while (Offset < TPLen) {
@@ -1139,7 +1149,7 @@ QuicCryptoTlsDecodeTransportParameters(
Length,
"Invalid length of QUIC_TP_ID_ORIGINAL_DESTINATION_CONNECTION_ID");
goto Exit;
- } else if (QuicConnIsServer(Connection)) {
+ } else if (!IsServerTP) {
QuicTraceEvent(
ConnError,
"[conn][%p] ERROR, %s.",
@@ -1189,7 +1199,7 @@ QuicCryptoTlsDecodeTransportParameters(
Length,
"Invalid length of QUIC_TP_ID_STATELESS_RESET_TOKEN");
goto Exit;
- } else if (QuicConnIsServer(Connection)) {
+ } else if (!IsServerTP) {
QuicTraceEvent(
ConnError,
"[conn][%p] ERROR, %s.",
@@ -1447,7 +1457,7 @@ QuicCryptoTlsDecodeTransportParameters(
break;
case QUIC_TP_ID_PREFERRED_ADDRESS:
- if (QuicConnIsServer(Connection)) {
+ if (!IsServerTP) {
QuicTraceEvent(
ConnError,
"[conn][%p] ERROR, %s.",
@@ -1522,7 +1532,7 @@ QuicCryptoTlsDecodeTransportParameters(
Length,
"Invalid length of QUIC_TP_ID_RETRY_SOURCE_CONNECTION_ID");
goto Exit;
- } else if (QuicConnIsServer(Connection)) {
+ } else if (!IsServerTP) {
QuicTraceEvent(
ConnError,
"[conn][%p] ERROR, %s.",
diff --git a/src/core/inline.c b/src/core/inline.c
index 50f841c41e..993fb0de3a 100644
--- a/src/core/inline.c
+++ b/src/core/inline.c
@@ -657,3 +657,13 @@ int64_t
QuicTimeEpochMs64(
void
);
+
+void
+QuicConfigurationAddRef(
+ _In_ QUIC_CONFIGURATION* Configuration
+ );
+
+void
+QuicConfigurationRelease(
+ _In_ QUIC_CONFIGURATION* Configuration
+ );
diff --git a/src/core/library.c b/src/core/library.c
index 84f5781960..d80d77e754 100644
--- a/src/core/library.c
+++ b/src/core/library.c
@@ -123,23 +123,11 @@ QuicLibrarySumPerfCountersExternal(
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
void
-MsQuicLibraryReadSettings(
- _In_opt_ void* Context
+MsQuicLibraryOnSettingsChanged(
+ _In_ BOOLEAN UpdateRegistrations
)
{
- QuicSettingsSetDefault(&MsQuicLib.Settings);
- if (MsQuicLib.Storage != NULL) {
- QuicSettingsLoad(&MsQuicLib.Settings, MsQuicLib.Storage);
- }
-
- QuicTraceLogInfo(
- LibrarySettingsUpdated,
- "[ lib] Settings %p Updated",
- &MsQuicLib.Settings);
- QuicSettingsDump(&MsQuicLib.Settings);
-
if (!MsQuicLib.InUse) {
//
// Load balancing settings can only change before the library is
@@ -149,7 +137,6 @@ MsQuicLibraryReadSettings(
QuicLibApplyLoadBalancingSetting();
}
- BOOLEAN UpdateRegistrations = (Context != NULL);
if (UpdateRegistrations) {
QuicLockAcquire(&MsQuicLib.Lock);
@@ -164,6 +151,27 @@ MsQuicLibraryReadSettings(
}
}
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
+void
+MsQuicLibraryReadSettings(
+ _In_opt_ void* Context
+ )
+{
+ QuicSettingsSetDefault(&MsQuicLib.Settings);
+ if (MsQuicLib.Storage != NULL) {
+ QuicSettingsLoad(&MsQuicLib.Settings, MsQuicLib.Storage);
+ }
+
+ QuicTraceLogInfo(
+ LibrarySettingsUpdated,
+ "[ lib] Settings %p Updated",
+ &MsQuicLib.Settings);
+ QuicSettingsDump(&MsQuicLib.Settings);
+
+ MsQuicLibraryOnSettingsChanged(Context != NULL);
+}
+
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
MsQuicLibraryInitialize(
@@ -172,6 +180,7 @@ MsQuicLibraryInitialize(
{
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
BOOLEAN PlatformInitialized = FALSE;
+ uint32_t DefaultMaxPartitionCount = QUIC_MAX_PARTITION_COUNT;
Status = QuicPlatformInitialize();
if (QUIC_FAILED(Status)) {
@@ -209,12 +218,22 @@ MsQuicLibraryInitialize(
//
// TODO: Add support for CPU hot swap/add.
//
- MsQuicLib.ProcessorCount = (uint16_t) QuicProcActiveCount();
- QUIC_FRE_ASSERT(MsQuicLib.ProcessorCount > 0);
- MsQuicLib.PartitionCount = (uint16_t)min(MsQuicLib.ProcessorCount, UINT16_MAX-1);
- if (MsQuicLib.PartitionCount > (uint32_t)MsQuicLib.Settings.MaxPartitionCount) {
- MsQuicLib.PartitionCount = (uint32_t)MsQuicLib.Settings.MaxPartitionCount;
+
+ if (MsQuicLib.Storage != NULL) {
+ uint32_t DefaultMaxPartitionCountLen = sizeof(DefaultMaxPartitionCount);
+ QuicStorageReadValue(
+ MsQuicLib.Storage,
+ QUIC_SETTING_MAX_PARTITION_COUNT,
+ (uint8_t*)&DefaultMaxPartitionCount,
+ &DefaultMaxPartitionCountLen);
+ if (DefaultMaxPartitionCount > QUIC_MAX_PARTITION_COUNT) {
+ DefaultMaxPartitionCount = QUIC_MAX_PARTITION_COUNT;
+ }
}
+ MsQuicLib.ProcessorCount = (uint16_t)QuicProcActiveCount();
+ QUIC_FRE_ASSERT(MsQuicLib.ProcessorCount > 0);
+ MsQuicLib.PartitionCount = (uint16_t)min(MsQuicLib.ProcessorCount, DefaultMaxPartitionCount);
+
MsQuicCalculatePartitionMask();
MsQuicLib.PerProc =
@@ -317,35 +336,36 @@ MsQuicLibraryUninitialize(
)
{
//
- // If you hit this assert, MsQuic API is trying to be unloaded without
- // first closing all registrations.
+ // Clean up the data path first, which can continue to cause new connections
+ // to get created.
//
- QUIC_TEL_ASSERT(QuicListIsEmpty(&MsQuicLib.Registrations));
-
- if (MsQuicLib.Storage != NULL) {
- QuicStorageClose(MsQuicLib.Storage);
- MsQuicLib.Storage = NULL;
- }
+ QuicDataPathUninitialize(MsQuicLib.Datapath);
+ MsQuicLib.Datapath = NULL;
//
- // Clean up all the leftover, unregistered server connections.
+ // The library's stateless registration for processing half-opened
+ // connections needs to be cleaned up next, as it's the last thing that can
+ // be holding on to connection objects.
//
- if (MsQuicLib.UnregisteredSession != NULL) {
- MsQuicSessionClose((HQUIC)MsQuicLib.UnregisteredSession);
- MsQuicLib.UnregisteredSession = NULL;
+ if (MsQuicLib.StatelessRegistration != NULL) {
+ MsQuicRegistrationShutdown(
+ (HQUIC)MsQuicLib.StatelessRegistration,
+ QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT,
+ 0);
+ MsQuicRegistrationClose(
+ (HQUIC)MsQuicLib.StatelessRegistration);
+ MsQuicLib.StatelessRegistration = NULL;
}
- QuicDataPathUninitialize(MsQuicLib.Datapath);
- MsQuicLib.Datapath = NULL;
-
//
- // The library's worker pool for processing half-opened connections
- // needs to be cleaned up first, as it's the last thing that can be
- // holding on to connection objects.
+ // If you hit this assert, MsQuic API is trying to be unloaded without
+ // first closing all registrations.
//
- if (MsQuicLib.WorkerPool != NULL) {
- QuicWorkerPoolUninitialize(MsQuicLib.WorkerPool);
- MsQuicLib.WorkerPool = NULL;
+ QUIC_TEL_ASSERT(QuicListIsEmpty(&MsQuicLib.Registrations));
+
+ if (MsQuicLib.Storage != NULL) {
+ QuicStorageClose(MsQuicLib.Storage);
+ MsQuicLib.Storage = NULL;
}
#if DEBUG
@@ -621,6 +641,33 @@ QuicLibrarySetGlobalParam(
Status = QUIC_STATUS_SUCCESS;
break;
+ }
+
+ case QUIC_PARAM_GLOBAL_SETTINGS:
+
+ if (BufferLength != sizeof(QUIC_SETTINGS)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER; // TODO - Support partial
+ break;
+ }
+
+ QuicTraceLogInfo(
+ LibrarySetSettings,
+ "[ lib] Setting new settings");
+
+ if (!QuicSettingApply(
+ &MsQuicLib.Settings,
+ TRUE,
+ BufferLength,
+ (QUIC_SETTINGS*)Buffer)) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ QuicSettingsDumpNew(BufferLength, (QUIC_SETTINGS*)Buffer);
+ MsQuicLibraryOnSettingsChanged(TRUE);
+
+ Status = QUIC_STATUS_SUCCESS;
+ break;
#if QUIC_TEST_DATAPATH_HOOKS_ENABLED
case QUIC_PARAM_GLOBAL_TEST_DATAPATH_HOOKS:
@@ -638,7 +685,6 @@ QuicLibrarySetGlobalParam(
Status = QUIC_STATUS_SUCCESS;
break;
#endif
- }
default:
Status = QUIC_STATUS_INVALID_PARAMETER;
@@ -748,6 +794,25 @@ QuicLibraryGetGlobalParam(
break;
}
+ case QUIC_PARAM_GLOBAL_SETTINGS:
+
+ if (*BufferLength < sizeof(QUIC_SETTINGS)) {
+ *BufferLength = sizeof(QUIC_SETTINGS);
+ Status = QUIC_STATUS_BUFFER_TOO_SMALL; // TODO - Support partial
+ break;
+ }
+
+ if (Buffer == NULL) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ break;
+ }
+
+ *BufferLength = sizeof(QUIC_SETTINGS);
+ QuicCopyMemory(Buffer, &MsQuicLib.Settings, sizeof(QUIC_SETTINGS));
+
+ Status = QUIC_STATUS_SUCCESS;
+ break;
+
default:
Status = QUIC_STATUS_INVALID_PARAMETER;
break;
@@ -769,7 +834,7 @@ QuicLibrarySetParam(
{
QUIC_STATUS Status;
QUIC_REGISTRATION* Registration;
- QUIC_SESSION* Session;
+ QUIC_CONFIGURATION* Configuration;
QUIC_LISTENER* Listener;
QUIC_CONNECTION* Connection;
QUIC_STREAM* Stream;
@@ -780,18 +845,18 @@ QuicLibrarySetParam(
Stream = NULL;
Connection = NULL;
Listener = NULL;
- Session = NULL;
+ Configuration = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Registration = (QUIC_REGISTRATION*)Handle;
break;
- case QUIC_HANDLE_TYPE_SESSION:
+ case QUIC_HANDLE_TYPE_CONFIGURATION:
Stream = NULL;
Connection = NULL;
Listener = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
- Session = (QUIC_SESSION*)Handle;
- Registration = Session->Registration;
+ Configuration = (QUIC_CONFIGURATION*)Handle;
+ Registration = Configuration->Registration;
break;
case QUIC_HANDLE_TYPE_LISTENER:
@@ -799,8 +864,8 @@ QuicLibrarySetParam(
Connection = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Listener = (QUIC_LISTENER*)Handle;
- Session = Listener->Session;
- Registration = Session->Registration;
+ Configuration = NULL;
+ Registration = Listener->Registration;
break;
case QUIC_HANDLE_TYPE_CONNECTION_CLIENT:
@@ -809,9 +874,8 @@ QuicLibrarySetParam(
Listener = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Connection = (QUIC_CONNECTION*)Handle;
- Session = Connection->Session;
- QUIC_DBG_ASSERT(Session != NULL);
- Registration = Session->Registration;
+ Configuration = Connection->Configuration;
+ Registration = Connection->Registration;
break;
case QUIC_HANDLE_TYPE_STREAM:
@@ -819,9 +883,8 @@ QuicLibrarySetParam(
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Stream = (QUIC_STREAM*)Handle;
Connection = Stream->Connection;
- Session = Connection->Session;
- QUIC_DBG_ASSERT(Session != NULL);
- Registration = Session->Registration;
+ Configuration = Connection->Configuration;
+ Registration = Connection->Registration;
break;
default:
@@ -840,11 +903,11 @@ QuicLibrarySetParam(
}
break;
- case QUIC_PARAM_LEVEL_SESSION:
- if (Session == NULL) {
+ case QUIC_PARAM_LEVEL_CONFIGURATION:
+ if (Configuration == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
} else {
- Status = QuicSessionParamSet(Session, Param, BufferLength, Buffer);
+ Status = QuicConfigurationParamSet(Configuration, Param, BufferLength, Buffer);
}
break;
@@ -903,7 +966,7 @@ QuicLibraryGetParam(
{
QUIC_STATUS Status;
QUIC_REGISTRATION* Registration;
- QUIC_SESSION* Session;
+ QUIC_CONFIGURATION* Configuration;
QUIC_LISTENER* Listener;
QUIC_CONNECTION* Connection;
QUIC_STREAM* Stream;
@@ -916,18 +979,18 @@ QuicLibraryGetParam(
Stream = NULL;
Connection = NULL;
Listener = NULL;
- Session = NULL;
+ Configuration = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Registration = (QUIC_REGISTRATION*)Handle;
break;
- case QUIC_HANDLE_TYPE_SESSION:
+ case QUIC_HANDLE_TYPE_CONFIGURATION:
Stream = NULL;
Connection = NULL;
Listener = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
- Session = (QUIC_SESSION*)Handle;
- Registration = Session->Registration;
+ Configuration = (QUIC_CONFIGURATION*)Handle;
+ Registration = Configuration->Registration;
break;
case QUIC_HANDLE_TYPE_LISTENER:
@@ -935,8 +998,8 @@ QuicLibraryGetParam(
Connection = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Listener = (QUIC_LISTENER*)Handle;
- Session = Listener->Session;
- Registration = Session->Registration;
+ Configuration = NULL;
+ Registration = Listener->Registration;
break;
case QUIC_HANDLE_TYPE_CONNECTION_CLIENT:
@@ -945,9 +1008,8 @@ QuicLibraryGetParam(
Listener = NULL;
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Connection = (QUIC_CONNECTION*)Handle;
- Session = Connection->Session;
- QUIC_TEL_ASSERT(Session != NULL);
- Registration = Session->Registration;
+ Configuration = Connection->Configuration;
+ Registration = Connection->Registration;
break;
case QUIC_HANDLE_TYPE_STREAM:
@@ -955,9 +1017,8 @@ QuicLibraryGetParam(
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
Stream = (QUIC_STREAM*)Handle;
Connection = Stream->Connection;
- Session = Connection->Session;
- QUIC_TEL_ASSERT(Session != NULL);
- Registration = Session->Registration;
+ Configuration = Connection->Configuration;
+ Registration = Connection->Registration;
break;
default:
@@ -976,11 +1037,11 @@ QuicLibraryGetParam(
}
break;
- case QUIC_PARAM_LEVEL_SESSION:
- if (Session == NULL) {
+ case QUIC_PARAM_LEVEL_CONFIGURATION:
+ if (Configuration == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
} else {
- Status = QuicSessionParamGet(Session, Param, BufferLength, Buffer);
+ Status = QuicConfigurationParamGet(Configuration, Param, BufferLength, Buffer);
}
break;
@@ -1067,13 +1128,11 @@ MsQuicOpen(
Api->RegistrationOpen = MsQuicRegistrationOpen;
Api->RegistrationClose = MsQuicRegistrationClose;
+ Api->RegistrationShutdown = MsQuicRegistrationShutdown;
- Api->SecConfigCreate = MsQuicSecConfigCreate;
- Api->SecConfigDelete = MsQuicSecConfigDelete;
-
- Api->SessionOpen = MsQuicSessionOpen;
- Api->SessionClose = MsQuicSessionClose;
- Api->SessionShutdown = MsQuicSessionShutdown;
+ Api->ConfigurationOpen = MsQuicConfigurationOpen;
+ Api->ConfigurationClose = MsQuicConfigurationClose;
+ Api->ConfigurationLoadCredential = MsQuicConfigurationLoadCredential;
Api->ListenerOpen = MsQuicListenerOpen;
Api->ListenerClose = MsQuicListenerClose;
@@ -1084,6 +1143,7 @@ MsQuicOpen(
Api->ConnectionClose = MsQuicConnectionClose;
Api->ConnectionShutdown = MsQuicConnectionShutdown;
Api->ConnectionStart = MsQuicConnectionStart;
+ Api->ConnectionSetConfiguration = MsQuicConnectionSetConfiguration;
Api->ConnectionSendResumptionTicket = MsQuicConnectionSendResumptionTicket;
Api->StreamOpen = MsQuicStreamOpen;
@@ -1184,7 +1244,9 @@ QuicLibraryLookupBinding(
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicLibraryGetBinding(
- _In_ QUIC_SESSION* Session,
+#ifdef QUIC_COMPARTMENT_ID
+ _In_ QUIC_COMPARTMENT_ID CompartmentId,
+#endif
_In_ BOOLEAN ShareBinding,
_In_ BOOLEAN ServerOwned,
_In_opt_ const QUIC_ADDR * LocalAddress,
@@ -1192,7 +1254,6 @@ QuicLibraryGetBinding(
_Out_ QUIC_BINDING** NewBinding
)
{
- UNREFERENCED_PARAMETER(Session);
QUIC_STATUS Status = QUIC_STATUS_NOT_FOUND;
QUIC_BINDING* Binding;
QUIC_ADDR NewLocalAddress;
@@ -1214,7 +1275,7 @@ QuicLibraryGetBinding(
Binding =
QuicLibraryLookupBinding(
#ifdef QUIC_COMPARTMENT_ID
- Session->CompartmentId,
+ CompartmentId,
#endif
LocalAddress,
RemoteAddress);
@@ -1252,7 +1313,7 @@ QuicLibraryGetBinding(
Status =
QuicBindingInitialize(
#ifdef QUIC_COMPARTMENT_ID
- Session->CompartmentId,
+ CompartmentId,
#endif
ShareBinding,
ServerOwned,
@@ -1283,7 +1344,7 @@ QuicLibraryGetBinding(
Binding =
QuicLibraryLookupBinding(
#ifdef QUIC_COMPARTMENT_ID
- Session->CompartmentId,
+ CompartmentId,
#endif
&NewLocalAddress,
NULL);
@@ -1387,36 +1448,24 @@ QuicLibraryOnListenerRegistered(
QuicLockAcquire(&MsQuicLib.Lock);
- if (MsQuicLib.WorkerPool == NULL) {
+ if (MsQuicLib.StatelessRegistration == NULL) {
//
- // Lazily initialize server specific state, such as worker threads and
- // the unregistered connection session.
+ // Lazily initialize server specific state.
//
QuicTraceEvent(
- LibraryWorkerPoolInit,
- "[ lib] Shared worker pool initializing");
+ LibraryServerInit,
+ "[ lib] Shared server state initializing");
- QUIC_DBG_ASSERT(MsQuicLib.UnregisteredSession == NULL);
- if (QUIC_FAILED(
- QuicSessionAlloc(
- NULL,
- NULL,
- NULL,
- 0,
- &MsQuicLib.UnregisteredSession))) {
- Success = FALSE;
- goto Fail;
- }
+ const QUIC_REGISTRATION_CONFIG Config = {
+ "Stateless",
+ QUIC_EXECUTION_PROFILE_TYPE_INTERNAL
+ };
if (QUIC_FAILED(
- QuicWorkerPoolInitialize(
- NULL,
- 0,
- max(1, MsQuicLib.PartitionCount / 4),
- &MsQuicLib.WorkerPool))) {
+ MsQuicRegistrationOpen(
+ &Config,
+ (HQUIC*)&MsQuicLib.StatelessRegistration))) {
Success = FALSE;
- MsQuicSessionClose((HQUIC)MsQuicLib.UnregisteredSession);
- MsQuicLib.UnregisteredSession = NULL;
goto Fail;
}
}
@@ -1432,13 +1481,13 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_WORKER*
QUIC_NO_SANITIZE("implicit-conversion")
QuicLibraryGetWorker(
- void
+ _In_ const _In_ QUIC_RECV_DATAGRAM* Datagram
)
{
- QUIC_DBG_ASSERT(MsQuicLib.WorkerPool != NULL);
+ QUIC_DBG_ASSERT(MsQuicLib.StatelessRegistration != NULL);
return
- &MsQuicLib.WorkerPool->Workers[
- MsQuicLib.NextWorkerIndex++ % MsQuicLib.WorkerPool->WorkerCount];
+ &MsQuicLib.StatelessRegistration->WorkerPool->Workers[
+ Datagram->PartitionIndex % MsQuicLib.PartitionCount];
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -1460,6 +1509,10 @@ QuicTraceRundown(
MsQuicLib.PartitionCount,
QuicDataPathGetSupportedFeatures(MsQuicLib.Datapath));
+ if (MsQuicLib.StatelessRegistration) {
+ QuicRegistrationTraceRundown(MsQuicLib.StatelessRegistration);
+ }
+
for (QUIC_LIST_ENTRY* Link = MsQuicLib.Registrations.Flink;
Link != &MsQuicLib.Registrations;
Link = Link->Flink) {
diff --git a/src/core/library.h b/src/core/library.h
index 2e97a8b9d3..36eb5c953c 100644
--- a/src/core/library.h
+++ b/src/core/library.h
@@ -11,7 +11,7 @@
typedef enum QUIC_HANDLE_TYPE {
QUIC_HANDLE_TYPE_REGISTRATION,
- QUIC_HANDLE_TYPE_SESSION,
+ QUIC_HANDLE_TYPE_CONFIGURATION,
QUIC_HANDLE_TYPE_LISTENER,
QUIC_HANDLE_TYPE_CONNECTION_CLIENT,
QUIC_HANDLE_TYPE_CONNECTION_SERVER,
@@ -136,11 +136,6 @@ typedef struct QUIC_LIBRARY {
long ConnectionCount;
#endif
- //
- // Next worker to use in the pool.
- //
- uint8_t NextWorkerIndex;
-
//
// Estimated timer resolution for the platform.
//
@@ -188,13 +183,7 @@ typedef struct QUIC_LIBRARY {
//
// Contains all (server) connections currently not in an app's registration.
//
- QUIC_SESSION* UnregisteredSession;
-
- //
- // Set of workers that manage processing client Initial packets on the
- // server side.
- //
- QUIC_WORKER_POOL* WorkerPool;
+ QUIC_REGISTRATION* StatelessRegistration;
//
// Per-processor storage. Count of `PartitionCount`.
@@ -428,7 +417,9 @@ QuicLibraryGetParam(
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicLibraryGetBinding(
- _In_ QUIC_SESSION* Session,
+#ifdef QUIC_COMPARTMENT_ID
+ _In_ QUIC_COMPARTMENT_ID CompartmentId,
+#endif
_In_ BOOLEAN ShareBinding,
_In_ BOOLEAN ServerOwned,
_In_opt_ const QUIC_ADDR * LocalAddress,
@@ -473,7 +464,7 @@ QuicLibraryOnListenerRegistered(
_IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_WORKER*
QuicLibraryGetWorker(
- void
+ _In_ const _In_ QUIC_RECV_DATAGRAM* Datagram
);
//
diff --git a/src/core/listener.c b/src/core/listener.c
index 143784d506..6bb23a67ec 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -18,7 +18,7 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QUIC_API
MsQuicListenerOpen(
- _In_ _Pre_defensive_ HQUIC SessionHandle,
+ _In_ _Pre_defensive_ HQUIC RegistrationHandle,
_In_ _Pre_defensive_ QUIC_LISTENER_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*NewListener, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -26,24 +26,24 @@ MsQuicListenerOpen(
)
{
QUIC_STATUS Status;
- QUIC_SESSION* Session;
+ QUIC_REGISTRATION* Registration;
QUIC_LISTENER* Listener = NULL;
QuicTraceEvent(
ApiEnter,
"[ api] Enter %u (%p).",
QUIC_TRACE_API_LISTENER_OPEN,
- SessionHandle);
+ RegistrationHandle);
- if (SessionHandle == NULL ||
- SessionHandle->Type != QUIC_HANDLE_TYPE_SESSION ||
+ if (RegistrationHandle == NULL ||
+ RegistrationHandle->Type != QUIC_HANDLE_TYPE_REGISTRATION ||
NewListener == NULL ||
Handler == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
goto Error;
}
- Session = (QUIC_SESSION*)SessionHandle;
+ Registration = (QUIC_REGISTRATION*)RegistrationHandle;
Listener = QUIC_ALLOC_NONPAGED(sizeof(QUIC_LISTENER));
if (Listener == NULL) {
@@ -58,19 +58,24 @@ MsQuicListenerOpen(
QuicZeroMemory(Listener, sizeof(QUIC_LISTENER));
Listener->Type = QUIC_HANDLE_TYPE_LISTENER;
- Listener->Session = Session;
+ Listener->Registration = Registration;
Listener->ClientCallbackHandler = Handler;
Listener->ClientContext = Context;
QuicRundownInitializeDisabled(&Listener->Rundown);
-#pragma prefast(suppress: __WARNING_6031, "Will always succeed.")
- QuicRundownAcquire(&Session->Rundown);
+#ifdef QUIC_SILO
+ Listener->Silo = QuicSiloGetCurrentServer();
+ QuicSiloAddRef(Listener->Silo);
+#endif
+
+ BOOLEAN Result = QuicRundownAcquire(&Registration->Rundown);
+ QUIC_DBG_ASSERT(Result); UNREFERENCED_PARAMETER(Result);
QuicTraceEvent(
ListenerCreated,
- "[list][%p] Created, Session=%p",
+ "[list][%p] Created, Registration=%p",
Listener,
- Listener->Session);
+ Listener->Registration);
*NewListener = (HQUIC)Listener;
Status = QUIC_STATUS_SUCCESS;
@@ -117,7 +122,7 @@ MsQuicListenerClose(
#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
QUIC_LISTENER* Listener = (QUIC_LISTENER*)Handle;
- QUIC_SESSION* Session = Listener->Session;
+ QUIC_REGISTRATION* Registration = Listener->Registration;
//
// Make sure the listener has unregistered from the binding.
@@ -131,8 +136,13 @@ MsQuicListenerClose(
"[list][%p] Destroyed",
Listener);
+#ifdef QUIC_SILO
+ QuicSiloRelease(Listener->Silo);
+#endif
+
+ QUIC_DBG_ASSERT(Listener->AlpnList == NULL);
QUIC_FREE(Listener);
- QuicRundownRelease(&Session->Rundown);
+ QuicRundownRelease(&Registration->Rundown);
QuicTraceEvent(
ApiExit,
@@ -144,11 +154,16 @@ QUIC_STATUS
QUIC_API
MsQuicListenerStart(
_In_ _Pre_defensive_ HQUIC Handle,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR * LocalAddress
)
{
QUIC_STATUS Status;
QUIC_LISTENER* Listener;
+ uint8_t* AlpnList;
+ uint32_t AlpnListLength;
BOOLEAN PortUnspecified;
QUIC_ADDR BindingLocalAddress = {0};
@@ -159,10 +174,27 @@ MsQuicListenerStart(
Handle);
if (Handle == NULL ||
- Handle->Type != QUIC_HANDLE_TYPE_LISTENER) {
+ Handle->Type != QUIC_HANDLE_TYPE_LISTENER ||
+ AlpnBuffers == NULL ||
+ AlpnBufferCount == 0) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Exit;
+ }
+
+ AlpnListLength = 0;
+ for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
+ if (AlpnBuffers[i].Length == 0 ||
+ AlpnBuffers[i].Length > QUIC_MAX_ALPN_LENGTH) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Exit;
+ }
+ AlpnListLength += sizeof(uint8_t) + AlpnBuffers[i].Length;
+ }
+ if (AlpnListLength > UINT16_MAX) {
Status = QUIC_STATUS_INVALID_PARAMETER;
goto Exit;
}
+ QUIC_ANALYSIS_ASSERT(AlpnListLength <= UINT16_MAX);
if (LocalAddress && !QuicAddrIsValid(LocalAddress)) {
Status = QUIC_STATUS_INVALID_PARAMETER;
@@ -178,6 +210,31 @@ MsQuicListenerStart(
goto Exit;
}
+ AlpnList = QUIC_ALLOC_NONPAGED(AlpnListLength);
+ if (AlpnList == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "AlpnList" ,
+ AlpnListLength);
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Exit;
+ }
+
+ Listener->AlpnList = AlpnList;
+ Listener->AlpnListLength = (uint16_t)AlpnListLength;
+
+ for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
+ AlpnList[0] = (uint8_t)AlpnBuffers[i].Length;
+ AlpnList++;
+
+ QuicCopyMemory(
+ AlpnList,
+ AlpnBuffers[i].Buffer,
+ AlpnBuffers[i].Length);
+ AlpnList += AlpnBuffers[i].Length;
+ }
+
if (LocalAddress != NULL) {
QuicCopyMemory(&Listener->LocalAddress, LocalAddress, sizeof(QUIC_ADDR));
Listener->WildCard = QuicAddrIsWildCard(LocalAddress);
@@ -202,7 +259,9 @@ MsQuicListenerStart(
QUIC_TEL_ASSERT(Listener->Binding == NULL);
Status =
QuicLibraryGetBinding(
- Listener->Session,
+#ifdef QUIC_COMPARTMENT_ID
+ QuicCompartmentIdGetCurrent(),
+#endif
TRUE, // Listeners always share the binding.
TRUE,
&BindingLocalAddress,
@@ -254,6 +313,11 @@ MsQuicListenerStart(
QuicLibraryReleaseBinding(Listener->Binding);
Listener->Binding = NULL;
}
+ if (Listener->AlpnList != NULL) {
+ QUIC_FREE(Listener->AlpnList);
+ Listener->AlpnList = NULL;
+ }
+ Listener->AlpnListLength = 0;
}
Exit:
@@ -288,6 +352,12 @@ MsQuicListenerStop(
Listener->Binding = NULL;
QuicRundownReleaseAndWait(&Listener->Rundown);
+
+ if (Listener->AlpnList != NULL) {
+ QUIC_FREE(Listener->AlpnList);
+ Listener->AlpnList = NULL;
+ }
+
QuicTraceEvent(
ListenerStopped,
"[list][%p] Stopped",
@@ -308,9 +378,9 @@ QuicListenerTraceRundown(
{
QuicTraceEvent(
ListenerRundown,
- "[list][%p] Rundown, Session=%p",
+ "[list][%p] Rundown, Registration=%p",
Listener,
- Listener->Session);
+ Listener->Registration);
if (Listener->Binding != NULL) {
QuicTraceEvent(
ListenerStarted,
@@ -336,13 +406,83 @@ QuicListenerIndicateEvent(
Event);
}
+_IRQL_requires_max_(DISPATCH_LEVEL)
+const uint8_t*
+QuicListenerFindAlpnInList(
+ _In_ const QUIC_LISTENER* Listener,
+ _In_ uint16_t OtherAlpnListLength,
+ _In_reads_(OtherAlpnListLength)
+ const uint8_t* OtherAlpnList
+ )
+{
+ const uint8_t* AlpnList = Listener->AlpnList;
+ uint16_t AlpnListLength = Listener->AlpnListLength;
+
+ //
+ // We want to respect the server's ALPN preference order (i.e. Listener) and
+ // not the client's. So we loop over every ALPN in the listener and then see
+ // if there is a match in the client's list.
+ //
+
+ while (AlpnListLength != 0) {
+ QUIC_ANALYSIS_ASSUME(AlpnList[0] + 1 <= AlpnListLength);
+ const uint8_t* Result =
+ QuicTlsAlpnFindInList(
+ OtherAlpnListLength,
+ OtherAlpnList,
+ AlpnList[0],
+ AlpnList + 1);
+ if (Result != NULL) {
+ //
+ // Return AlpnList instead of Result, since Result points into what
+ // might be a temporary buffer.
+ //
+ return AlpnList;
+ }
+ AlpnListLength -= AlpnList[0] + 1;
+ AlpnList += AlpnList[0] + 1;
+ }
+
+ return NULL;
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+QuicListenerHasAlpnOverlap(
+ _In_ const QUIC_LISTENER* Listener1,
+ _In_ const QUIC_LISTENER* Listener2
+ )
+{
+ return
+ QuicListenerFindAlpnInList(
+ Listener1,
+ Listener2->AlpnListLength,
+ Listener2->AlpnList) != NULL;
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+QuicListenerMatchesAlpn(
+ _In_ const QUIC_LISTENER* Listener,
+ _In_ QUIC_NEW_CONNECTION_INFO* Info
+ )
+{
+ const uint8_t* Alpn =
+ QuicListenerFindAlpnInList(Listener, Info->ClientAlpnListLength, Info->ClientAlpnList);
+ if (Alpn != NULL) {
+ Info->NegotiatedAlpnLength = Alpn[0]; // The length prefixed to the ALPN buffer.
+ Info->NegotiatedAlpn = Alpn + 1;
+ return TRUE;
+ }
+ return FALSE;
+}
+
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
+BOOLEAN
QuicListenerClaimConnection(
_In_ QUIC_LISTENER* Listener,
_In_ QUIC_CONNECTION* Connection,
- _In_ const QUIC_NEW_CONNECTION_INFO* Info,
- _Out_ QUIC_SEC_CONFIG** SecConfig
+ _In_ const QUIC_NEW_CONNECTION_INFO* Info
)
{
QUIC_DBG_ASSERT(Listener != NULL);
@@ -351,134 +491,89 @@ QuicListenerClaimConnection(
//
// Internally, the connection matches the listener. Update the associated
// connection state. Next, call up to the application layer to accept the
- // connection and return the server certificate.
+ // connection and return the server configuration.
//
- QuicSessionRegisterConnection(Listener->Session, Connection);
+ Connection->State.ListenerAccepted = TRUE;
QUIC_LISTENER_EVENT Event;
Event.Type = QUIC_LISTENER_EVENT_NEW_CONNECTION;
Event.NEW_CONNECTION.Info = Info;
Event.NEW_CONNECTION.Connection = (HQUIC)Connection;
- Event.NEW_CONNECTION.SecurityConfig = NULL;
- QuicSessionAttachSilo(Listener->Session);
+ QuicListenerAttachSilo(Listener);
QuicTraceLogVerbose(
ListenerIndicateNewConnection,
"[list][%p] Indicating NEW_CONNECTION",
Listener);
+
QUIC_STATUS Status = QuicListenerIndicateEvent(Listener, &Event);
- QuicSessionDetachSilo();
+ QuicListenerDetachSilo();
- if (Status == QUIC_STATUS_PENDING) {
- QuicTraceLogVerbose(
- ListenerNewConnectionPending,
- "[list][%p] App indicate pending NEW_CONNECTION",
- Listener);
- QUIC_DBG_ASSERT(Event.NEW_CONNECTION.SecurityConfig == NULL);
- *SecConfig = NULL;
- } else if (QUIC_FAILED(Status)) {
+ if (QUIC_FAILED(Status)) {
QuicTraceEvent(
ListenerErrorStatus,
"[list][%p] ERROR, %u, %s.",
Listener,
Status,
"NEW_CONNECTION callback");
- goto Exit;
- } else if (Event.NEW_CONNECTION.SecurityConfig == NULL) {
- QuicTraceEvent(
- ListenerError,
- "[list][%p] ERROR, %s.",
- Listener,
- "NEW_CONNECTION callback didn't set SecConfig");
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Exit;
- } else {
- QuicTraceLogVerbose(
- ListenerNewConnectionAccepted,
- "[list][%p] App accepted NEW_CONNECTION",
- Listener);
- *SecConfig = Event.NEW_CONNECTION.SecurityConfig;
+ QuicConnTransportError(
+ Connection,
+ QUIC_ERROR_CONNECTION_REFUSED);
+ return FALSE;
}
//
- // The application layer has accepted the connection and provided a
- // server certificate.
+ // The application layer has accepted the connection and provided a server
+ // certificate.
//
QUIC_FRE_ASSERTMSG(
Connection->ClientCallbackHandler != NULL,
"App MUST set callback handler!");
Connection->State.ExternalOwner = TRUE;
- Connection->State.ListenerAccepted = TRUE;
-
- if (!QuicConnGenerateNewSourceCid(Connection, TRUE)) {
- Event.NEW_CONNECTION.SecurityConfig = NULL;
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Exit;
- }
-
- if (Event.NEW_CONNECTION.SecurityConfig != NULL) {
- (void)QuicTlsSecConfigAddRef(Event.NEW_CONNECTION.SecurityConfig);
- }
Connection->State.UpdateWorker = TRUE;
-Exit:
-
- if (Status != QUIC_STATUS_PENDING && QUIC_FAILED(Status)) {
- QuicSessionUnregisterConnection(Connection);
- QuicPerfCounterIncrement(QUIC_PERF_COUNTER_CONN_APP_REJECT);
- }
-
- return Status;
+ return TRUE;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_CONNECTION_ACCEPT_RESULT
+void
QuicListenerAcceptConnection(
_In_ QUIC_LISTENER* Listener,
_In_ QUIC_CONNECTION* Connection,
- _In_ const QUIC_NEW_CONNECTION_INFO* Info,
- _Out_ QUIC_SEC_CONFIG** SecConfig
+ _In_ const QUIC_NEW_CONNECTION_INFO* Info
)
{
- QUIC_CONNECTION_ACCEPT_RESULT AcceptResult =
- QuicRegistrationAcceptConnection(
- Listener->Session->Registration,
- Connection);
- if (AcceptResult != QUIC_CONNECTION_ACCEPT) {
- goto Error;
- }
-
- QUIC_STATUS Status =
- QuicListenerClaimConnection(
- Listener,
+ if (!QuicRegistrationAcceptConnection(
+ Listener->Registration,
+ Connection)) {
+ QuicTraceEvent(
+ ConnError,
+ "[conn][%p] ERROR, %s.",
Connection,
- Info,
- SecConfig);
- if (Status != QUIC_STATUS_PENDING) {
- if (QUIC_FAILED(Status)) {
- QUIC_TEL_ASSERTMSG(*SecConfig == NULL, "App failed AND provided a sec config?");
- goto Error;
- } else if (*SecConfig == NULL) {
- QuicTraceLogConnVerbose(
- NoSecurityConfigAvailable,
- Connection,
- "No security config was provided by the app.");
- goto Error;
- }
+ "Connection rejected by registration (overloaded)");
+ QuicConnTransportError(
+ Connection,
+ QUIC_ERROR_CONNECTION_REFUSED);
+ Listener->TotalRejectedConnections++;
+ return;
}
- Listener->TotalAcceptedConnections++;
- return QUIC_CONNECTION_ACCEPT;
+ QuicConnRegister(Connection, Listener->Registration);
+ if (!QuicConnGenerateNewSourceCid(Connection, TRUE)) {
+ return;
+ }
-Error:
+ if (!QuicListenerClaimConnection(Listener, Connection, Info)) {
+ Listener->TotalRejectedConnections++;
+ QuicPerfCounterIncrement(QUIC_PERF_COUNTER_CONN_APP_REJECT);
+ return;
+ }
- *SecConfig = NULL;
- Listener->TotalRejectedConnections++;
- return QUIC_CONNECTION_REJECT_APP;
+ Listener->TotalAcceptedConnections++;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
diff --git a/src/core/listener.h b/src/core/listener.h
index e8c394f41e..a543fb5e8d 100644
--- a/src/core/listener.h
+++ b/src/core/listener.h
@@ -23,9 +23,16 @@ typedef struct QUIC_LISTENER {
QUIC_LIST_ENTRY Link;
//
- // The top level session.
+ // The top level registration.
//
- QUIC_SESSION* Session;
+ QUIC_REGISTRATION* Registration;
+
+#ifdef QUIC_SILO
+ //
+ // The silo.
+ //
+ QUIC_SILO Silo;
+#endif
//
// Rundown for unregistering from a binding.
@@ -53,8 +60,34 @@ typedef struct QUIC_LISTENER {
uint64_t TotalAcceptedConnections;
uint64_t TotalRejectedConnections;
+ //
+ // The application layer protocol negotiation buffers. Encoded in the TLS
+ // extension format.
+ //
+ uint16_t AlpnListLength;
+ _Field_size_(AlpnListLength)
+ uint8_t* AlpnList;
+
} QUIC_LISTENER;
+#ifdef QUIC_SILO
+
+#define QuicListenerAttachSilo(Listener) \
+ QUIC_SILO PrevSilo = Listener->Silo == NULL ? \
+ QUIC_SILO_INVALID : QuicSiloAttach(Listener->Silo)
+
+#define QuicListenerDetachSilo() \
+ if (PrevSilo != QUIC_SILO_INVALID) {\
+ QuicSiloDetatch(PrevSilo); \
+ }
+
+#else
+
+#define QuicListenerAttachSilo(Listener)
+#define QuicListenerDetachSilo()
+
+#endif // #ifdef QUIC_SILO
+
//
// Tracing rundown for the binding.
//
@@ -65,25 +98,35 @@ QuicListenerTraceRundown(
);
//
-// Indicates an event to the application layer.
+// Returns TRUE if the two listeners have an overlapping ALPN.
//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicListenerIndicateEvent(
- _In_ QUIC_LISTENER* Listener,
- _Inout_ QUIC_LISTENER_EVENT* Event
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+QuicListenerHasAlpnOverlap(
+ _In_ const QUIC_LISTENER* Listener1,
+ _In_ const QUIC_LISTENER* Listener2
+ );
+
+//
+// Returns TRUE if the listener has a matching ALPN. Also updates the new
+// connection info with the matching ALPN.
+//
+_IRQL_requires_max_(DISPATCH_LEVEL)
+BOOLEAN
+QuicListenerMatchesAlpn(
+ _In_ const QUIC_LISTENER* Listener,
+ _In_ QUIC_NEW_CONNECTION_INFO* Info
);
//
// Passes the connection to the listener to (possibly) accept it.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_CONNECTION_ACCEPT_RESULT
+void
QuicListenerAcceptConnection(
_In_ QUIC_LISTENER* Listener,
_In_ QUIC_CONNECTION* Connection,
- _In_ const QUIC_NEW_CONNECTION_INFO* Info,
- _Out_ QUIC_SEC_CONFIG** SecConfig
+ _In_ const QUIC_NEW_CONNECTION_INFO* Info
);
//
diff --git a/src/core/loss_detection.c b/src/core/loss_detection.c
index 1eb6ab57e8..0e92da67cf 100644
--- a/src/core/loss_detection.c
+++ b/src/core/loss_detection.c
@@ -227,8 +227,8 @@ QuicLossDetectionComputeProbeTimeout(
4 * Path->RttVariance +
(uint32_t)MS_TO_US(Connection->PeerTransportParams.MaxAckDelay);
Pto *= Count;
- if (Pto < MsQuicLib.Settings.MaxWorkerQueueDelayUs) {
- Pto = MsQuicLib.Settings.MaxWorkerQueueDelayUs;
+ if (Pto < Connection->Settings.MaxWorkerQueueDelayUs) {
+ Pto = Connection->Settings.MaxWorkerQueueDelayUs;
}
return Pto;
}
@@ -349,7 +349,7 @@ QuicLossDetectionUpdateTimer(
MaxDelay =
QuicTimeDiff32(
TimeNow,
- OldestPacket->SentTime + Connection->DisconnectTimeoutUs);
+ OldestPacket->SentTime + MS_TO_US(Connection->Settings.DisconnectTimeoutMs));
} else {
MaxDelay = (UINT32_MAX >> 1) - 1;
}
@@ -720,10 +720,10 @@ QuicLossDetectionRetransmitFrames(
QUIC_PATH* Path = QuicConnGetPathByID(Connection, Packet->PathId);
if (Path != NULL && !Path->IsPeerValidated) {
uint32_t TimeNow = QuicTimeUs32();
- QUIC_DBG_ASSERT(Connection->Session != NULL);
+ QUIC_DBG_ASSERT(Connection->Configuration != NULL);
uint32_t ValidationTimeout =
max(QuicLossDetectionComputeProbeTimeout(LossDetection, Path, 3),
- 6 * MS_TO_US(Connection->Session->Settings.InitialRttMs));
+ 6 * MS_TO_US(Connection->Settings.InitialRttMs));
if (QuicTimeDiff32(Path->PathValidationStartTime, TimeNow) > ValidationTimeout) {
QuicTraceLogConnInfo(
PathValidationTimeout,
@@ -1547,7 +1547,7 @@ QuicLossDetectionProcessTimerOperation(
if (OldestPacket != NULL &&
QuicTimeDiff32(OldestPacket->SentTime, TimeNow) >=
- Connection->DisconnectTimeoutUs) {
+ MS_TO_US(Connection->Settings.DisconnectTimeoutMs)) {
//
// OldestPacket has been in the SentPackets list for at least
// DisconnectTimeoutUs without an ACK for either OldestPacket or for any
diff --git a/src/core/operation.c b/src/core/operation.c
index a4dab83caa..963dcbc699 100644
--- a/src/core/operation.c
+++ b/src/core/operation.c
@@ -93,9 +93,12 @@ QuicOperationFree(
if (Oper->Type == QUIC_OPER_TYPE_API_CALL) {
QUIC_API_CONTEXT* ApiCtx = Oper->API_CALL.Context;
if (ApiCtx->Type == QUIC_API_TYPE_CONN_START) {
+ QuicConfigurationRelease(ApiCtx->CONN_START.Configuration);
if (ApiCtx->CONN_START.ServerName != NULL) {
QUIC_FREE(ApiCtx->CONN_START.ServerName);
}
+ } else if (ApiCtx->Type == QUIC_API_TYPE_CONN_SET_CONFIGURATION) {
+ QuicConfigurationRelease(ApiCtx->CONN_SET_CONFIGURATION.Configuration);
} else if (ApiCtx->Type == QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET) {
if (ApiCtx->CONN_SEND_RESUMPTION_TICKET.ResumptionAppData != NULL) {
QUIC_DBG_ASSERT(ApiCtx->CONN_SEND_RESUMPTION_TICKET.AppDataLength != 0);
diff --git a/src/core/operation.h b/src/core/operation.h
index de7f16f202..e2d71fe57a 100644
--- a/src/core/operation.h
+++ b/src/core/operation.h
@@ -46,6 +46,7 @@ typedef enum QUIC_API_TYPE {
QUIC_API_TYPE_CONN_CLOSE,
QUIC_API_TYPE_CONN_SHUTDOWN,
QUIC_API_TYPE_CONN_START,
+ QUIC_API_TYPE_CONN_SET_CONFIGURATION,
QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET,
QUIC_API_TYPE_STRM_CLOSE,
@@ -96,11 +97,15 @@ typedef struct QUIC_API_CONTEXT {
QUIC_VAR_INT ErrorCode;
} CONN_SHUTDOWN;
struct {
+ QUIC_CONFIGURATION* Configuration;
_Null_terminated_
const char* ServerName;
uint16_t ServerPort;
QUIC_ADDRESS_FAMILY Family;
} CONN_START;
+ struct {
+ QUIC_CONFIGURATION* Configuration;
+ } CONN_SET_CONFIGURATION;
struct {
QUIC_SEND_RESUMPTION_FLAGS Flags;
uint8_t* ResumptionAppData;
diff --git a/src/core/packet_builder.c b/src/core/packet_builder.c
index 648e52bf2e..69301682de 100644
--- a/src/core/packet_builder.c
+++ b/src/core/packet_builder.c
@@ -781,7 +781,7 @@ QuicPacketBuilderFinalize(
//
if (Builder->PacketType == SEND_PACKET_SHORT_HEADER_TYPE &&
PacketSpace->CurrentKeyPhaseBytesSent + QUIC_MAX_MTU >=
- Connection->Session->Settings.MaxBytesPerKey &&
+ Connection->Settings.MaxBytesPerKey &&
!PacketSpace->AwaitingKeyPhaseConfirmation &&
Connection->State.HandshakeConfirmed) {
diff --git a/src/core/path.c b/src/core/path.c
index 2408b8e9de..6e4ae35c37 100644
--- a/src/core/path.c
+++ b/src/core/path.c
@@ -29,11 +29,7 @@ QuicPathInitialize(
Path->ID = Connection->NextPathId++; // TODO - Check for duplicates after wrap around?
Path->MinRtt = UINT32_MAX;
Path->Mtu = QUIC_DEFAULT_PATH_MTU;
- if (Connection->Session != NULL) {
- Path->SmoothedRtt = MS_TO_US(Connection->Session->Settings.InitialRttMs);
- } else {
- Path->SmoothedRtt = MS_TO_US(QUIC_INITIAL_RTT);
- }
+ Path->SmoothedRtt = MS_TO_US(Connection->Settings.InitialRttMs);
Path->RttVariance = Path->SmoothedRtt / 2;
QuicTraceLogConnInfo(
diff --git a/src/core/precomp.h b/src/core/precomp.h
index 58bae0e03a..579937556d 100644
--- a/src/core/precomp.h
+++ b/src/core/precomp.h
@@ -50,7 +50,7 @@ extern "C" {
#include "binding.h"
#include "api.h"
#include "registration.h"
-#include "session.h"
+#include "configuration.h"
#include "range.h"
#include "recv_buffer.h"
#include "send_buffer.h"
diff --git a/src/core/quicdef.h b/src/core/quicdef.h
index aaf380f2bd..d61837cd69 100644
--- a/src/core/quicdef.h
+++ b/src/core/quicdef.h
@@ -10,7 +10,7 @@ typedef struct QUIC_OPERATION QUIC_OPERATION;
typedef struct QUIC_WORKER QUIC_WORKER;
typedef struct QUIC_WORKER_POOL QUIC_WORKER_POOL;
typedef struct QUIC_REGISTRATION QUIC_REGISTRATION;
-typedef struct QUIC_SESSION QUIC_SESSION;
+typedef struct QUIC_CONFIGURATION QUIC_CONFIGURATION;
typedef struct QUIC_LISTENER QUIC_LISTENER;
typedef struct QUIC_CONNECTION QUIC_CONNECTION;
typedef struct QUIC_STREAM QUIC_STREAM;
@@ -409,6 +409,12 @@ QUIC_STATIC_ASSERT(
//
#define QUIC_TLS_RESUMPTION_TICKET_VERSION 1
+//
+// Version of the blob for client resumption tickets.
+// This needs to be incremented for each change in order or count of fields.
+//
+#define QUIC_TLS_RESUMPTION_CLIENT_TICKET_VERSION 1
+
//
// The AEAD Integrity limit for maximum failed decryption packets over the
// lifetime of a connection. Set to the lowest limit, which is for
@@ -429,6 +435,7 @@ QUIC_STATIC_ASSERT(
#define QUIC_SETTING_MAX_STATELESS_OPERATIONS "MaxStatelessOperations"
#define QUIC_SETTING_MAX_OPERATIONS_PER_DRAIN "MaxOperationsPerDrain"
+#define QUIC_SETTING_SEND_BUFFERING_DEFAULT "SendBufferingDefault"
#define QUIC_SETTING_SEND_PACING_DEFAULT "SendPacingDefault"
#define QUIC_SETTING_MIGRATION_ENABLED "MigrationEnabled"
#define QUIC_SETTING_DATAGRAM_RECEIVE_ENABLED "DatagramReceiveEnabled"
diff --git a/src/core/registration.c b/src/core/registration.c
index ceff08d5fe..6ac5395e11 100644
--- a/src/core/registration.c
+++ b/src/core/registration.c
@@ -69,10 +69,11 @@ MsQuicRegistrationOpen(
Registration->ExecProfile = Config == NULL ? QUIC_EXECUTION_PROFILE_LOW_LATENCY : Config->ExecutionProfile;
Registration->CidPrefixLength = 0;
Registration->CidPrefix = NULL;
- QuicLockInitialize(&Registration->Lock);
- QuicListInitializeHead(&Registration->Sessions);
- QuicRundownInitialize(&Registration->SecConfigRundown);
- QuicRundownInitialize(&Registration->ConnectionRundown);
+ QuicLockInitialize(&Registration->ConfigLock);
+ QuicListInitializeHead(&Registration->Configurations);
+ QuicDispatchLockInitialize(&Registration->ConnectionLock);
+ QuicListInitializeHead(&Registration->Connections);
+ QuicRundownInitialize(&Registration->Rundown);
Registration->AppNameLength = (uint8_t)(AppNameLength + 1);
if (AppNameLength != 0) {
QuicCopyMemory(Registration->AppName, Config->AppName, AppNameLength + 1);
@@ -143,9 +144,11 @@ MsQuicRegistrationOpen(
}
#endif
- QuicLockAcquire(&MsQuicLib.Lock);
- QuicListInsertTail(&MsQuicLib.Registrations, &Registration->Link);
- QuicLockRelease(&MsQuicLib.Lock);
+ if (Registration->ExecProfile != QUIC_EXECUTION_PROFILE_TYPE_INTERNAL) {
+ QuicLockAcquire(&MsQuicLib.Lock);
+ QuicListInsertTail(&MsQuicLib.Registrations, &Registration->Link);
+ QuicLockRelease(&MsQuicLib.Lock);
+ }
*NewRegistration = (HQUIC)Registration;
Registration = NULL;
@@ -153,9 +156,9 @@ MsQuicRegistrationOpen(
Error:
if (Registration != NULL) {
- QuicRundownUninitialize(&Registration->SecConfigRundown);
- QuicRundownUninitialize(&Registration->ConnectionRundown);
- QuicLockUninitialize(&Registration->Lock);
+ QuicRundownUninitialize(&Registration->Rundown);
+ QuicDispatchLockUninitialize(&Registration->ConnectionLock);
+ QuicLockUninitialize(&Registration->ConfigLock);
QUIC_FREE(Registration);
}
@@ -190,24 +193,18 @@ MsQuicRegistrationClose(
"[ reg][%p] Cleaning up",
Registration);
- //
- // If you hit this assert, you are trying to clean up a registration without
- // first cleaning up all the child sessions first.
- //
- QUIC_REG_VERIFY(Registration, QuicListIsEmpty(&Registration->Sessions));
-
- QuicLockAcquire(&MsQuicLib.Lock);
- QuicListEntryRemove(&Registration->Link);
- QuicLockRelease(&MsQuicLib.Lock);
+ if (Registration->ExecProfile != QUIC_EXECUTION_PROFILE_TYPE_INTERNAL) {
+ QuicLockAcquire(&MsQuicLib.Lock);
+ QuicListEntryRemove(&Registration->Link);
+ QuicLockRelease(&MsQuicLib.Lock);
+ }
- QuicRundownReleaseAndWait(&Registration->ConnectionRundown);
+ QuicRundownReleaseAndWait(&Registration->Rundown);
QuicWorkerPoolUninitialize(Registration->WorkerPool);
- QuicRundownReleaseAndWait(&Registration->SecConfigRundown);
-
- QuicRundownUninitialize(&Registration->SecConfigRundown);
- QuicRundownUninitialize(&Registration->ConnectionRundown);
- QuicLockUninitialize(&Registration->Lock);
+ QuicRundownUninitialize(&Registration->Rundown);
+ QuicDispatchLockUninitialize(&Registration->ConnectionLock);
+ QuicLockUninitialize(&Registration->ConfigLock);
if (Registration->CidPrefix != NULL) {
QUIC_FREE(Registration->CidPrefix);
@@ -221,115 +218,119 @@ MsQuicRegistrationClose(
}
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
void
-QuicRegistrationTraceRundown(
- _In_ QUIC_REGISTRATION* Registration
+QUIC_API
+MsQuicRegistrationShutdown(
+ _In_ _Pre_defensive_ HQUIC Handle,
+ _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
+ _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode
)
{
+ QUIC_DBG_ASSERT(Handle != NULL);
+ QUIC_DBG_ASSERT(Handle->Type == QUIC_HANDLE_TYPE_REGISTRATION);
+
+ if (ErrorCode > QUIC_UINT62_MAX) {
+ return;
+ }
+
QuicTraceEvent(
- RegistrationRundown,
- "[ reg][%p] Rundown, AppName=%s",
- Registration,
- Registration->AppName);
+ ApiEnter,
+ "[ api] Enter %u (%p).",
+ QUIC_TRACE_API_REGISTRATION_SHUTDOWN,
+ Handle);
- QuicLockAcquire(&Registration->Lock);
+ if (Handle && Handle->Type == QUIC_HANDLE_TYPE_REGISTRATION) {
+#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
+ QUIC_REGISTRATION* Registration = (QUIC_REGISTRATION*)Handle;
- for (QUIC_LIST_ENTRY* Link = Registration->Sessions.Flink;
- Link != &Registration->Sessions;
- Link = Link->Flink) {
- QuicSessionTraceRundown(
- QUIC_CONTAINING_RECORD(Link, QUIC_SESSION, Link));
- }
+ QuicDispatchLockAcquire(&Registration->ConnectionLock);
- QuicLockRelease(&Registration->Lock);
-}
+ QUIC_LIST_ENTRY* Entry = Registration->Connections.Flink;
+ while (Entry != &Registration->Connections) {
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicRegistrationSettingsChanged(
- _Inout_ QUIC_REGISTRATION* Registration
- )
-{
- QuicLockAcquire(&Registration->Lock);
+ QUIC_CONNECTION* Connection =
+ QUIC_CONTAINING_RECORD(Entry, QUIC_CONNECTION, RegistrationLink);
- for (QUIC_LIST_ENTRY* Link = Registration->Sessions.Flink;
- Link != &Registration->Sessions;
- Link = Link->Flink) {
- QuicSessionSettingsChanged(
- QUIC_CONTAINING_RECORD(Link, QUIC_SESSION, Link));
+ if (InterlockedCompareExchange16(
+ (short*)&Connection->BackUpOperUsed, 1, 0) == 0) {
+
+ QUIC_OPERATION* Oper = &Connection->BackUpOper;
+ Oper->FreeAfterProcess = FALSE;
+ Oper->Type = QUIC_OPER_TYPE_API_CALL;
+ Oper->API_CALL.Context = &Connection->BackupApiContext;
+ Oper->API_CALL.Context->Type = QUIC_API_TYPE_CONN_SHUTDOWN;
+ Oper->API_CALL.Context->CONN_SHUTDOWN.Flags = Flags;
+ Oper->API_CALL.Context->CONN_SHUTDOWN.ErrorCode = ErrorCode;
+ QuicConnQueueHighestPriorityOper(Connection, Oper);
+ }
+
+ Entry = Entry->Flink;
+ }
+
+ QuicDispatchLockRelease(&Registration->ConnectionLock);
}
- QuicLockRelease(&Registration->Lock);
+ QuicTraceEvent(
+ ApiExit,
+ "[ api] Exit");
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QUIC_API
-MsQuicSecConfigCreate(
- _In_ _Pre_defensive_ HQUIC Handle,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
- _In_opt_ void* Context,
- _In_ _Pre_defensive_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
+void
+QuicRegistrationTraceRundown(
+ _In_ QUIC_REGISTRATION* Registration
)
{
- QUIC_STATUS Status = QUIC_STATUS_INVALID_PARAMETER;
-
QuicTraceEvent(
- ApiEnter,
- "[ api] Enter %u (%p).",
- QUIC_TRACE_API_SEC_CONFIG_CREATE,
- Handle);
+ RegistrationRundown,
+ "[ reg][%p] Rundown, AppName=%s",
+ Registration,
+ Registration->AppName);
- if (Handle != NULL &&
- Handle->Type == QUIC_HANDLE_TYPE_REGISTRATION &&
- CompletionHandler != NULL) {
+ QuicLockAcquire(&Registration->ConfigLock);
- QUIC_REGISTRATION* Registration = (QUIC_REGISTRATION*)Handle;
- Status =
- QuicTlsServerSecConfigCreate(
- &Registration->SecConfigRundown,
- Flags,
- Certificate,
- Principal,
- Context,
- CompletionHandler);
+ for (QUIC_LIST_ENTRY* Link = Registration->Configurations.Flink;
+ Link != &Registration->Configurations;
+ Link = Link->Flink) {
+ QuicConfigurationTraceRundown(
+ QUIC_CONTAINING_RECORD(Link, QUIC_CONFIGURATION, Link));
}
- QuicTraceEvent(
- ApiExitStatus,
- "[ api] Exit %u",
- Status);
+ QuicLockRelease(&Registration->ConfigLock);
- return Status;
+ QuicDispatchLockAcquire(&Registration->ConnectionLock);
+
+ for (QUIC_LIST_ENTRY* Link = Registration->Connections.Flink;
+ Link != &Registration->Connections;
+ Link = Link->Flink) {
+ QuicConnQueueTraceRundown(
+ QUIC_CONTAINING_RECORD(Link, QUIC_CONNECTION, RegistrationLink));
+ }
+
+ QuicDispatchLockRelease(&Registration->ConnectionLock);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-QUIC_API
-MsQuicSecConfigDelete(
- _In_ _Pre_defensive_ QUIC_SEC_CONFIG* SecurityConfig
+QuicRegistrationSettingsChanged(
+ _Inout_ QUIC_REGISTRATION* Registration
)
{
- QuicTraceEvent(
- ApiEnter,
- "[ api] Enter %u (%p).",
- QUIC_TRACE_API_SEC_CONFIG_DELETE,
- SecurityConfig);
+ QuicLockAcquire(&Registration->ConfigLock);
- if (SecurityConfig != NULL) {
- QuicTlsSecConfigRelease(SecurityConfig);
+ for (QUIC_LIST_ENTRY* Link = Registration->Configurations.Flink;
+ Link != &Registration->Configurations;
+ Link = Link->Flink) {
+ QuicConfigurationSettingsChanged(
+ QUIC_CONTAINING_RECORD(Link, QUIC_CONFIGURATION, Link));
}
- QuicTraceEvent(
- ApiExit,
- "[ api] Exit");
+ QuicLockRelease(&Registration->ConfigLock);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_CONNECTION_ACCEPT_RESULT
+BOOLEAN
QuicRegistrationAcceptConnection(
_In_ QUIC_REGISTRATION* Registration,
_In_ QUIC_CONNECTION* Connection
@@ -349,11 +350,7 @@ QuicRegistrationAcceptConnection(
// TODO - Look for other worker instead if the proposed worker is overloaded?
//
- if (QuicWorkerIsOverloaded(&Registration->WorkerPool->Workers[Index])) {
- return QUIC_CONNECTION_REJECT_BUSY;
- } else {
- return QUIC_CONNECTION_ACCEPT;
- }
+ return !QuicWorkerIsOverloaded(&Registration->WorkerPool->Workers[Index]);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
diff --git a/src/core/registration.h b/src/core/registration.h
index 6dc9d2c34a..72007683a5 100644
--- a/src/core/registration.h
+++ b/src/core/registration.h
@@ -5,6 +5,12 @@
--*/
+//
+// Special internal type to indicate registration created for global listener
+// processing.
+//
+#define QUIC_EXECUTION_PROFILE_TYPE_INTERNAL ((QUIC_EXECUTION_PROFILE)0xFF)
+
//
// Different outcomes for a new incoming connection.
//
@@ -63,24 +69,29 @@ typedef struct QUIC_REGISTRATION {
QUIC_WORKER_POOL* WorkerPool;
//
- // Protects access to the Sessions list.
+ // Protects access to the Configurations list.
+ //
+ QUIC_LOCK ConfigLock;
+
+ //
+ // List of all configurations for this registration.
//
- QUIC_LOCK Lock;
+ QUIC_LIST_ENTRY Configurations;
//
- // List of all sessions for this registration.
+ // Protects access to the Connections list.
//
- QUIC_LIST_ENTRY Sessions;
+ QUIC_DISPATCH_LOCK ConnectionLock;
//
- // Rundown for all connections
+ // List of all connections for this registration.
//
- QUIC_RUNDOWN_REF ConnectionRundown;
+ QUIC_LIST_ENTRY Connections;
//
- // Rundown for all outstanding security configs.
+ // Rundown for all child objects.
//
- QUIC_RUNDOWN_REF SecConfigRundown;
+ QUIC_RUNDOWN_REF Rundown;
//
// Name of the application layer.
@@ -123,7 +134,7 @@ QuicRegistrationSettingsChanged(
// or not.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_CONNECTION_ACCEPT_RESULT
+BOOLEAN
QuicRegistrationAcceptConnection(
_In_ QUIC_REGISTRATION* Registration,
_In_ QUIC_CONNECTION* Connection
diff --git a/src/core/send.c b/src/core/send.c
index 9f84a7b241..054f7905ff 100644
--- a/src/core/send.c
+++ b/src/core/send.c
@@ -28,10 +28,12 @@
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicSendInitialize(
- _Inout_ QUIC_SEND* Send
+ _Inout_ QUIC_SEND* Send,
+ _In_ const QUIC_SETTINGS* Settings
)
{
QuicListInitializeHead(&Send->SendStreams);
+ Send->MaxData = Settings->ConnFlowControlWindow;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -67,7 +69,7 @@ QuicSendUninitialize(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-QuicSendApplySettings(
+QuicSendApplyNewSettings(
_Inout_ QUIC_SEND* Send,
_In_ const QUIC_SETTINGS* Settings
)
@@ -1190,11 +1192,11 @@ QuicSendStartDelayedAckTimer(
StartAckDelayTimer,
Connection,
"Starting ACK_DELAY timer for %u ms",
- Connection->MaxAckDelayMs);
+ Connection->Settings.MaxAckDelayMs);
QuicConnTimerSet(
Connection,
QUIC_CONN_TIMER_ACK_DELAY,
- Connection->MaxAckDelayMs); // TODO - Use smaller timeout when handshake data is outstanding.
+ Connection->Settings.MaxAckDelayMs); // TODO - Use smaller timeout when handshake data is outstanding.
Send->DelayedAckTimerActive = TRUE;
}
}
diff --git a/src/core/send.h b/src/core/send.h
index 6d081df93a..64b9098f71 100644
--- a/src/core/send.h
+++ b/src/core/send.h
@@ -239,7 +239,8 @@ typedef struct QUIC_SEND {
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicSendInitialize(
- _Inout_ QUIC_SEND* Send
+ _Inout_ QUIC_SEND* Send,
+ _In_ const QUIC_SETTINGS* Settings
);
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -260,7 +261,7 @@ QuicSendValidate(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-QuicSendApplySettings(
+QuicSendApplyNewSettings(
_Inout_ QUIC_SEND* Send,
_In_ const QUIC_SETTINGS* Settings
);
diff --git a/src/core/send_buffer.c b/src/core/send_buffer.c
index 6656a09caa..97f37ae889 100644
--- a/src/core/send_buffer.c
+++ b/src/core/send_buffer.c
@@ -146,7 +146,7 @@ QuicSendBufferFill(
QUIC_SEND_REQUEST* Req;
QUIC_LIST_ENTRY* Entry;
- QUIC_DBG_ASSERT(Connection->State.UseSendBuffer);
+ QUIC_DBG_ASSERT(Connection->Settings.SendBufferingEnabled);
Entry = Connection->Send.SendStreams.Flink;
while (QuicSendBufferHasSpace(&Connection->SendBuffer) && Entry != &(Connection->Send.SendStreams)) {
@@ -251,7 +251,7 @@ QuicSendBufferConnectionAdjust(
}
QuicHashtableEnumerateEnd(Connection->Streams.StreamTable, &Enumerator);
- if (Connection->State.UseSendBuffer) {
+ if (Connection->Settings.SendBufferingEnabled) {
QuicSendBufferFill(Connection);
}
}
diff --git a/src/core/session.c b/src/core/session.c
deleted file mode 100644
index ee8bd69e3c..0000000000
--- a/src/core/session.c
+++ /dev/null
@@ -1,841 +0,0 @@
-/*++
-
- Copyright (c) Microsoft Corporation.
- Licensed under the MIT License.
-
-Abstract:
-
- A "session" manages TLS session state, which is used for session
- resumption across connections. On Windows it also manages silo
- and network compartment state.
-
---*/
-
-#include "precomp.h"
-#ifdef QUIC_CLOG
-#include "session.c.clog.h"
-#endif
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-QUIC_STATUS
-QuicSessionAlloc(
- _In_opt_ QUIC_REGISTRATION* Registration,
- _In_opt_ void* Context,
- _When_(AlpnBufferCount > 0, _In_reads_(AlpnBufferCount))
- _When_(AlpnBufferCount == 0, _In_opt_)
- const QUIC_BUFFER* const AlpnBuffers,
- _In_ uint32_t AlpnBufferCount,
- _Outptr_ _At_(*NewSession, __drv_allocatesMem(Mem))
- QUIC_SESSION** NewSession
- )
-{
- uint32_t AlpnListLength = 0;
- for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
- if (AlpnBuffers[i].Length == 0 ||
- AlpnBuffers[i].Length > QUIC_MAX_ALPN_LENGTH) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
- AlpnListLength += sizeof(uint8_t) + AlpnBuffers[i].Length;
- }
- if (AlpnListLength > UINT16_MAX) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
- QUIC_ANALYSIS_ASSERT(AlpnListLength <= UINT16_MAX);
-
- QUIC_SESSION* Session = QUIC_ALLOC_NONPAGED(sizeof(QUIC_SESSION) + AlpnListLength);
- if (Session == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "session" ,
- sizeof(QUIC_SESSION) + AlpnListLength);
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
-
- QuicZeroMemory(Session, sizeof(QUIC_SESSION));
- Session->Type = QUIC_HANDLE_TYPE_SESSION;
- Session->ClientContext = Context;
- Session->AlpnListLength = (uint16_t)AlpnListLength;
-
- uint8_t* AlpnList = Session->AlpnList;
- for (uint32_t i = 0; i < AlpnBufferCount; ++i) {
- AlpnList[0] = (uint8_t)AlpnBuffers[i].Length;
- AlpnList++;
-
- QuicCopyMemory(
- AlpnList,
- AlpnBuffers[i].Buffer,
- AlpnBuffers[i].Length);
- AlpnList += AlpnBuffers[i].Length;
- }
-
- if (Registration != NULL) {
- Session->Registration = Registration;
-
-#ifdef QUIC_SILO
- Session->Silo = QuicSiloGetCurrentServer();
- QuicSiloAddRef(Session->Silo);
-#endif
-
-#ifdef QUIC_COMPARTMENT_ID
- Session->CompartmentId = QuicCompartmentIdGetCurrent();
-#endif
- }
-
- QuicTraceEvent(
- SessionCreated,
- "[sess][%p] Created, Registration=%p, Alpn=%s",
- Session,
- Session->Registration,
- ""); // TODO - Buffer and length
-
- QuicRundownInitialize(&Session->Rundown);
- QuicRwLockInitialize(&Session->ServerCacheLock);
- QuicDispatchLockInitialize(&Session->ConnectionsLock);
- QuicListInitializeHead(&Session->Connections);
-
- *NewSession = Session;
-
- return QUIC_STATUS_SUCCESS;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-MsQuicSessionFree(
- _In_ _Pre_defensive_ __drv_freesMem(Mem)
- QUIC_SESSION* Session
- )
-{
- //
- // If you hit this assert, you are trying to clean up a session without
- // first cleaning up all the child connections first.
- //
- QUIC_TEL_ASSERT(QuicListIsEmpty(&Session->Connections));
- QuicRundownUninitialize(&Session->Rundown);
-
- if (Session->Registration != NULL) {
- QuicTlsSessionUninitialize(Session->TlsSession);
-
- //
- // Enumerate and free all entries in the table.
- //
- QUIC_HASHTABLE_ENTRY* Entry;
- QUIC_HASHTABLE_ENUMERATOR Enumerator;
- QuicHashtableEnumerateBegin(&Session->ServerCache, &Enumerator);
- while (TRUE) {
- Entry = QuicHashtableEnumerateNext(&Session->ServerCache, &Enumerator);
- if (Entry == NULL) {
- QuicHashtableEnumerateEnd(&Session->ServerCache, &Enumerator);
- break;
- }
- QuicHashtableRemove(&Session->ServerCache, Entry, NULL);
-
- //
- // Release the security config stored in this cache.
- //
- QUIC_SERVER_CACHE* Temp = QUIC_CONTAINING_RECORD(Entry, QUIC_SERVER_CACHE, Entry);
- if (Temp->SecConfig != NULL) {
- QuicTlsSecConfigRelease(Temp->SecConfig);
- }
-
- QUIC_FREE(Entry);
- }
- QuicHashtableUninitialize(&Session->ServerCache);
-
- QuicStorageClose(Session->AppSpecificStorage);
-#ifdef QUIC_SILO
- QuicStorageClose(Session->Storage);
- QuicSiloRelease(Session->Silo);
-#endif
- }
-
- QuicDispatchLockUninitialize(&Session->ConnectionsLock);
- QuicRwLockUninitialize(&Session->ServerCacheLock);
- QuicTraceEvent(
- SessionDestroyed,
- "[sess][%p] Destroyed",
- Session);
- QUIC_FREE(Session);
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QUIC_API
-MsQuicSessionOpen(
- _In_ _Pre_defensive_ HQUIC RegistrationContext,
- _In_ uint32_t SettingsSize,
- _In_reads_bytes_opt_(SettingsSize)
- const QUIC_SETTINGS* Settings,
- _In_reads_(AlpnBufferCount) _Pre_defensive_
- const QUIC_BUFFER* const AlpnBuffers,
- _In_range_(>, 0) uint32_t AlpnBufferCount,
- _In_opt_ void* Context,
- _Outptr_ _At_(*NewSession, __drv_allocatesMem(Mem)) _Pre_defensive_
- HQUIC *NewSession
- )
-{
- QUIC_STATUS Status;
- QUIC_SESSION* Session = NULL;
-
- QuicTraceEvent(
- ApiEnter,
- "[ api] Enter %u (%p).",
- QUIC_TRACE_API_SESSION_OPEN,
- RegistrationContext);
-
- if (RegistrationContext == NULL ||
- RegistrationContext->Type != QUIC_HANDLE_TYPE_REGISTRATION ||
- NewSession == NULL ||
- AlpnBufferCount == 0 ||
- AlpnBuffers == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
-
- if (Settings != NULL &&
- SettingsSize < (uint32_t)FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
-
- Status =
- QuicSessionAlloc(
- (QUIC_REGISTRATION*)RegistrationContext,
- Context,
- AlpnBuffers,
- AlpnBufferCount,
- &Session);
- if (QUIC_FAILED(Status)) {
- goto Error;
- }
-
- if (!QuicHashtableInitializeEx(&Session->ServerCache, QUIC_HASH_MIN_SIZE)) {
- QuicTraceEvent(
- SessionError,
- "[sess][%p] ERROR, %s.",
- Session,
- "Server cache initialize");
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- Status = QuicTlsSessionInitialize(&Session->TlsSession);
- if (QUIC_FAILED(Status)) {
- QuicTraceEvent(
- SessionErrorStatus,
- "[sess][%p] ERROR, %u, %s.",
- Session,
- Status,
- "QuicTlsSessionInitialize");
- QuicHashtableUninitialize(&Session->ServerCache);
- goto Error;
- }
-
-#ifdef QUIC_SILO
- if (Session->Silo != NULL) {
- //
- // Only need to load base key if in a silo. Otherwise, the library already
- // read in the default silo settings.
- //
- Status =
- QuicStorageOpen(
- NULL,
- (QUIC_STORAGE_CHANGE_CALLBACK_HANDLER)QuicSessionSettingsChanged,
- Session,
- &Session->Storage);
- if (QUIC_FAILED(Status)) {
- QuicTraceLogWarning(
- SessionOpenStorageFailed,
- "[sess][%p] Failed to open settings, 0x%x",
- Session,
- Status);
- Status = QUIC_STATUS_SUCCESS; // Non-fatal, as the process may not have access
- }
- }
-#endif
-
- if (Session->Registration->AppNameLength != 0) {
- char SpecificAppKey[UINT8_MAX + sizeof(QUIC_SETTING_APP_KEY)] = QUIC_SETTING_APP_KEY;
- QuicCopyMemory(
- SpecificAppKey + sizeof(QUIC_SETTING_APP_KEY) - 1,
- Session->Registration->AppName,
- Session->Registration->AppNameLength);
- Status =
- QuicStorageOpen(
- SpecificAppKey,
- (QUIC_STORAGE_CHANGE_CALLBACK_HANDLER)QuicSessionSettingsChanged,
- Session,
- &Session->AppSpecificStorage);
- if (QUIC_FAILED(Status)) {
- QuicTraceLogWarning(
- SessionOpenAppStorageFailed,
- "[sess][%p] Failed to open app specific settings, 0x%x",
- Session,
- Status);
- Status = QUIC_STATUS_SUCCESS; // Non-fatal, as the process may not have access
- }
- }
-
- if (Settings != NULL && Settings->IsSetFlags != 0) {
- QUIC_DBG_ASSERT(SettingsSize >= (uint32_t)FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey));
- if (!QuicSettingApply(&Session->Settings, SettingsSize, Settings)) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
- }
-
- QuicSessionSettingsChanged(Session);
-
- QuicLockAcquire(&Session->Registration->Lock);
- QuicListInsertTail(&Session->Registration->Sessions, &Session->Link);
- QuicLockRelease(&Session->Registration->Lock);
-
- *NewSession = (HQUIC)Session;
- Session = NULL;
-
-Error:
-
- if (Session != NULL) {
- MsQuicSessionFree(Session);
- }
-
- QuicTraceEvent(
- ApiExitStatus,
- "[ api] Exit %u",
- Status);
-
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-MsQuicSessionClose(
- _In_ _Pre_defensive_ __drv_freesMem(Mem)
- HQUIC Handle
- )
-{
- if (Handle == NULL) {
- return;
- }
-
- QUIC_TEL_ASSERT(Handle->Type == QUIC_HANDLE_TYPE_SESSION);
- _Analysis_assume_(Handle->Type == QUIC_HANDLE_TYPE_SESSION);
- if (Handle->Type != QUIC_HANDLE_TYPE_SESSION) {
- return;
- }
-
- QuicTraceEvent(
- ApiEnter,
- "[ api] Enter %u (%p).",
- QUIC_TRACE_API_SESSION_CLOSE,
- Handle);
-
-#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
- QUIC_SESSION* Session = (QUIC_SESSION*)Handle;
-
- QuicTraceEvent(
- SessionCleanup,
- "[sess][%p] Cleaning up",
- Session);
-
- if (Session->Registration != NULL) {
- QuicLockAcquire(&Session->Registration->Lock);
- QuicListEntryRemove(&Session->Link);
- QuicLockRelease(&Session->Registration->Lock);
- } else {
- //
- // This is the global unregistered session. All connections need to be
- // immediately cleaned up. Use shutdown to ensure this all gets placed
- // on the worker queue.
- //
- MsQuicSessionShutdown(Handle, QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
- }
-
- QuicRundownReleaseAndWait(&Session->Rundown);
- MsQuicSessionFree(Session);
-
- QuicTraceEvent(
- ApiExit,
- "[ api] Exit");
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-MsQuicSessionShutdown(
- _In_ _Pre_defensive_ HQUIC Handle,
- _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
- _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode
- )
-{
- QUIC_DBG_ASSERT(Handle != NULL);
- QUIC_DBG_ASSERT(Handle->Type == QUIC_HANDLE_TYPE_SESSION);
-
- if (ErrorCode > QUIC_UINT62_MAX) {
- return;
- }
-
- QuicTraceEvent(
- ApiEnter,
- "[ api] Enter %u (%p).",
- QUIC_TRACE_API_SESSION_SHUTDOWN,
- Handle);
-
- if (Handle && Handle->Type == QUIC_HANDLE_TYPE_SESSION) {
-#pragma prefast(suppress: __WARNING_25024, "Pointer cast already validated.")
- QUIC_SESSION* Session = (QUIC_SESSION*)Handle;
-
- QuicTraceEvent(
- SessionShutdown,
- "[sess][%p] Shutting down connections, Flags=%u, ErrorCode=%llu",
- Session,
- Flags,
- ErrorCode);
-
- QuicDispatchLockAcquire(&Session->ConnectionsLock);
-
- QUIC_LIST_ENTRY* Entry = Session->Connections.Flink;
- while (Entry != &Session->Connections) {
-
- QUIC_CONNECTION* Connection =
- QUIC_CONTAINING_RECORD(Entry, QUIC_CONNECTION, SessionLink);
-
- if (InterlockedCompareExchange16(
- (short*)&Connection->BackUpOperUsed, 1, 0) == 0) {
-
- QUIC_OPERATION* Oper = &Connection->BackUpOper;
- Oper->FreeAfterProcess = FALSE;
- Oper->Type = QUIC_OPER_TYPE_API_CALL;
- Oper->API_CALL.Context = &Connection->BackupApiContext;
- Oper->API_CALL.Context->Type = QUIC_API_TYPE_CONN_SHUTDOWN;
- Oper->API_CALL.Context->CONN_SHUTDOWN.Flags = Flags;
- Oper->API_CALL.Context->CONN_SHUTDOWN.ErrorCode = ErrorCode;
- QuicConnQueueHighestPriorityOper(Connection, Oper);
- }
-
- Entry = Entry->Flink;
- }
-
- QuicDispatchLockRelease(&Session->ConnectionsLock);
- }
-
- QuicTraceEvent(
- ApiExit,
- "[ api] Exit");
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-const uint8_t*
-QuicSessionFindAlpnInList(
- _In_ const QUIC_SESSION* Session,
- _In_ uint16_t OtherAlpnListLength,
- _In_reads_(OtherAlpnListLength)
- const uint8_t* OtherAlpnList
- )
-{
- const uint8_t* AlpnList = Session->AlpnList;
- uint16_t AlpnListLength = Session->AlpnListLength;
-
- //
- // We want to respect the server's ALPN preference order (i.e. Session) and
- // not the client's. So we loop over every ALPN in the session and then see
- // if there is a match in the client's list.
- //
-
- while (AlpnListLength != 0) {
- QUIC_ANALYSIS_ASSUME(AlpnList[0] + 1 <= AlpnListLength);
- const uint8_t* Result =
- QuicTlsAlpnFindInList(
- OtherAlpnListLength,
- OtherAlpnList,
- AlpnList[0],
- AlpnList + 1);
- if (Result != NULL) {
- //
- // Return AlpnList instead of Result, since Result points into what
- // might be a temporary buffer.
- //
- return AlpnList;
- }
- AlpnListLength -= AlpnList[0] + 1;
- AlpnList += AlpnList[0] + 1;
- }
-
- return NULL;
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-BOOLEAN
-QuicSessionHasAlpnOverlap(
- _In_ const QUIC_SESSION* Session1,
- _In_ const QUIC_SESSION* Session2
- )
-{
- return
- QuicSessionFindAlpnInList(
- Session1,
- Session2->AlpnListLength,
- Session2->AlpnList) != NULL;
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-BOOLEAN
-QuicSessionMatchesAlpn(
- _In_ const QUIC_SESSION* Session,
- _In_ QUIC_NEW_CONNECTION_INFO* Info
- )
-{
- const uint8_t* Alpn =
- QuicSessionFindAlpnInList(Session, Info->ClientAlpnListLength, Info->ClientAlpnList);
- if (Alpn != NULL) {
- Info->NegotiatedAlpnLength = Alpn[0]; // The length prefixed to the ALPN buffer.
- Info->NegotiatedAlpn = Alpn + 1;
- return TRUE;
- }
- return FALSE;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicSessionTraceRundown(
- _In_ QUIC_SESSION* Session
- )
-{
- QuicTraceEvent(
- SessionRundown,
- "[sess][%p] Rundown, Registration=%p, Alpn=%p",
- Session,
- Session->Registration,
- ""); // TODO
-
- QuicDispatchLockAcquire(&Session->ConnectionsLock);
-
- for (QUIC_LIST_ENTRY* Link = Session->Connections.Flink;
- Link != &Session->Connections;
- Link = Link->Flink) {
- QuicConnQueueTraceRundown(
- QUIC_CONTAINING_RECORD(Link, QUIC_CONNECTION, SessionLink));
- }
-
- QuicDispatchLockRelease(&Session->ConnectionsLock);
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
-void
-QuicSessionSettingsChanged(
- _Inout_ QUIC_SESSION* Session
- )
-{
-#ifdef QUIC_SILO
- if (Session->Storage != NULL) {
- QuicSettingsSetDefault(&Session->Settings);
- QuicSettingsLoad(&Session->Settings, Session->Storage);
- } else {
- QuicSettingsCopy(&Session->Settings, &MsQuicLib.Settings);
- }
-#else
- QuicSettingsCopy(&Session->Settings, &MsQuicLib.Settings);
-#endif
-
- if (Session->AppSpecificStorage != NULL) {
- QuicSettingsLoad(&Session->Settings, Session->AppSpecificStorage);
- }
-
- QuicTraceLogInfo(
- SessionSettingsUpdated,
- "[sess][%p] Settings %p Updated",
- Session,
- &Session->Settings);
- QuicSettingsDump(&Session->Settings);
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-void
-QuicSessionRegisterConnection(
- _Inout_ QUIC_SESSION* Session,
- _Inout_ QUIC_CONNECTION* Connection
- )
-{
- QuicSessionUnregisterConnection(Connection);
- Connection->Session = Session;
-
- if (Session->Registration != NULL) {
- Connection->Registration = Session->Registration;
- QuicRundownAcquire(&Session->Registration->ConnectionRundown);
-#ifdef QuicVerifierEnabledByAddr
- Connection->State.IsVerifying = Session->Registration->IsVerifying;
-#endif
- QuicConnApplySettings(Connection, &Session->Settings);
- }
-
- QuicTraceEvent(
- ConnRegisterSession,
- "[conn][%p] Registered with session: %p",
- Connection,
- Session);
- BOOLEAN Success = QuicRundownAcquire(&Session->Rundown);
- QUIC_DBG_ASSERT(Success); UNREFERENCED_PARAMETER(Success);
- QuicDispatchLockAcquire(&Session->ConnectionsLock);
- QuicListInsertTail(&Session->Connections, &Connection->SessionLink);
- QuicDispatchLockRelease(&Session->ConnectionsLock);
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-void
-QuicSessionUnregisterConnection(
- _Inout_ QUIC_CONNECTION* Connection
- )
-{
- if (Connection->Session == NULL) {
- return;
- }
- QUIC_SESSION* Session = Connection->Session;
- Connection->Session = NULL;
- QuicTraceEvent(
- ConnUnregisterSession,
- "[conn][%p] Unregistered from session: %p",
- Connection,
- Session);
- QuicDispatchLockAcquire(&Session->ConnectionsLock);
- QuicListEntryRemove(&Connection->SessionLink);
- QuicDispatchLockRelease(&Session->ConnectionsLock);
- QuicRundownRelease(&Session->Rundown);
-}
-
-//
-// Requires Session->Lock to be held (shared or exclusive).
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SERVER_CACHE*
-QuicSessionServerCacheLookup(
- _In_ QUIC_SESSION* Session,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName,
- _In_ uint32_t Hash
- )
-{
- QUIC_HASHTABLE_LOOKUP_CONTEXT Context;
- QUIC_HASHTABLE_ENTRY* Entry =
- QuicHashtableLookup(&Session->ServerCache, Hash, &Context);
-
- while (Entry != NULL) {
- QUIC_SERVER_CACHE* Temp =
- QUIC_CONTAINING_RECORD(Entry, QUIC_SERVER_CACHE, Entry);
- if (Temp->ServerNameLength == ServerNameLength &&
- memcmp(Temp->ServerName, ServerName, ServerNameLength) == 0) {
- return Temp;
- }
- Entry = QuicHashtableLookupNext(&Session->ServerCache, &Context);
- }
-
- return NULL;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Success_(return != FALSE)
-BOOLEAN
-QuicSessionServerCacheGetState(
- _In_ QUIC_SESSION* Session,
- _In_z_ const char* ServerName,
- _Out_ uint32_t* QuicVersion,
- _Out_ QUIC_TRANSPORT_PARAMETERS* Parameters,
- _Out_ QUIC_SEC_CONFIG** ClientSecConfig
- )
-{
- uint16_t ServerNameLength = (uint16_t)strlen(ServerName);
- uint32_t Hash = QuicHashSimple(ServerNameLength, (const uint8_t*)ServerName);
-
- QuicRwLockAcquireShared(&Session->ServerCacheLock);
-
- QUIC_SERVER_CACHE* Cache =
- QuicSessionServerCacheLookup(
- Session,
- ServerNameLength,
- ServerName,
- Hash);
-
- if (Cache != NULL) {
- *QuicVersion = Cache->QuicVersion;
- *Parameters = Cache->TransportParameters;
- if (Cache->SecConfig != NULL) {
- *ClientSecConfig = QuicTlsSecConfigAddRef(Cache->SecConfig);
- } else {
- *ClientSecConfig = NULL;
- }
- }
-
- QuicRwLockReleaseShared(&Session->ServerCacheLock);
-
- return Cache != NULL;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicSessionServerCacheSetStateInternal(
- _In_ QUIC_SESSION* Session,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName,
- _In_ uint32_t QuicVersion,
- _In_ const QUIC_TRANSPORT_PARAMETERS* Parameters,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
- )
-{
- uint32_t Hash = QuicHashSimple(ServerNameLength, (const uint8_t*)ServerName);
-
- QuicRwLockAcquireExclusive(&Session->ServerCacheLock);
-
- QUIC_SERVER_CACHE* Cache =
- QuicSessionServerCacheLookup(
- Session,
- ServerNameLength,
- ServerName,
- Hash);
-
- if (Cache != NULL) {
- Cache->QuicVersion = QuicVersion;
- Cache->TransportParameters = *Parameters;
- if (SecConfig != NULL) {
- if (Cache->SecConfig != NULL) {
- QuicTlsSecConfigRelease(Cache->SecConfig);
- }
- Cache->SecConfig = QuicTlsSecConfigAddRef(SecConfig);
- }
-
- } else {
-#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (MsQuicSessionClose).")
- Cache = QUIC_ALLOC_PAGED(sizeof(QUIC_SERVER_CACHE) + ServerNameLength);
-
- if (Cache != NULL) {
- memcpy(Cache + 1, ServerName, ServerNameLength);
- Cache->ServerName = (const char*)(Cache + 1);
- Cache->ServerNameLength = ServerNameLength;
- Cache->QuicVersion = QuicVersion;
- Cache->TransportParameters = *Parameters;
- if (SecConfig != NULL) {
- Cache->SecConfig = QuicTlsSecConfigAddRef(SecConfig);
- }
-
- QuicHashtableInsert(&Session->ServerCache, &Cache->Entry, Hash, NULL);
-
- } else {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "server cache entry",
- sizeof(QUIC_SERVER_CACHE) + ServerNameLength);
- }
- }
-
- QuicRwLockReleaseExclusive(&Session->ServerCacheLock);
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicSessionServerCacheSetState(
- _In_ QUIC_SESSION* Session,
- _In_z_ const char* ServerName,
- _In_ uint32_t QuicVersion,
- _In_ const QUIC_TRANSPORT_PARAMETERS* Parameters,
- _In_ QUIC_SEC_CONFIG* SecConfig
- )
-{
- QuicSessionServerCacheSetStateInternal(
- Session,
- (uint16_t)strlen(ServerName),
- ServerName,
- QuicVersion,
- Parameters,
- SecConfig);
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicSessionParamGet(
- _In_ QUIC_SESSION* Session,
- _In_ uint32_t Param,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- void* Buffer
- )
-{
- UNREFERENCED_PARAMETER(Session);
- UNREFERENCED_PARAMETER(Param);
- UNREFERENCED_PARAMETER(BufferLength);
- UNREFERENCED_PARAMETER(Buffer);
- return QUIC_STATUS_NOT_SUPPORTED;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicSessionParamSet(
- _In_ QUIC_SESSION* Session,
- _In_ uint32_t Param,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const void* Buffer
- )
-{
- QUIC_STATUS Status;
-
- switch (Param) {
-
- case QUIC_PARAM_SESSION_TLS_TICKET_KEY: {
-
- if (BufferLength != 44) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- Status =
- QuicTlsSessionSetTicketKey(
- Session->TlsSession,
- Buffer);
- break;
- }
-
- case QUIC_PARAM_SESSION_ADD_RESUMPTION_STATE: {
-
- const QUIC_SERIALIZED_RESUMPTION_STATE* State =
- (const QUIC_SERIALIZED_RESUMPTION_STATE*)Buffer;
-
- if (BufferLength < sizeof(QUIC_SERIALIZED_RESUMPTION_STATE) ||
- BufferLength < sizeof(QUIC_SERIALIZED_RESUMPTION_STATE) + State->ServerNameLength) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- const char* ServerName = (const char*)State->Buffer;
-
- const uint8_t* TicketBuffer = State->Buffer + State->ServerNameLength;
- uint32_t TicketBufferLength =
- BufferLength -
- sizeof(QUIC_SERIALIZED_RESUMPTION_STATE) -
- State->ServerNameLength;
-
- QuicSessionServerCacheSetStateInternal(
- Session,
- State->ServerNameLength,
- ServerName,
- State->QuicVersion,
- &State->TransportParameters,
- NULL);
-
- Status =
- QuicTlsSessionAddTicket(
- Session->TlsSession,
- TicketBufferLength,
- TicketBuffer);
- break;
- }
-
- default:
- Status = QUIC_STATUS_INVALID_PARAMETER;
- break;
- }
-
- return Status;
-}
diff --git a/src/core/session.h b/src/core/session.h
deleted file mode 100644
index bb42aa9381..0000000000
--- a/src/core/session.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/*++
-
- Copyright (c) Microsoft Corporation.
- Licensed under the MIT License.
-
---*/
-
-typedef struct QUIC_SERIALIZED_RESUMPTION_STATE {
-
- uint32_t QuicVersion;
- QUIC_TRANSPORT_PARAMETERS TransportParameters;
- uint16_t ServerNameLength;
- uint8_t Buffer[0]; // ServerName and TLS Session/Ticket
-
-} QUIC_SERIALIZED_RESUMPTION_STATE;
-
-//
-// Represents cached (in memory) state from previous connections to a server.
-//
-typedef struct QUIC_SERVER_CACHE {
-
- QUIC_HASHTABLE_ENTRY Entry;
-
- const char* ServerName;
-
- uint16_t ServerNameLength;
-
- uint32_t QuicVersion;
-
- QUIC_TRANSPORT_PARAMETERS TransportParameters;
-
- QUIC_SEC_CONFIG* SecConfig;
-
-} QUIC_SERVER_CACHE;
-
-//
-// Represents a library session context.
-//
-typedef struct QUIC_SESSION {
-
- struct QUIC_HANDLE;
-
- //
- // Parent registration.
- //
- QUIC_REGISTRATION* Registration;
-
- //
- // Link in the parent registration's Sessions list.
- //
- QUIC_LIST_ENTRY Link;
-
- //
- // Rundown for clean up.
- //
- QUIC_RUNDOWN_REF Rundown;
-
- //
- // TLS Session Context.
- //
- QUIC_TLS_SESSION* TlsSession;
-
-#ifdef QUIC_SILO
- //
- // The silo.
- //
- QUIC_SILO Silo;
-#endif
-
-#ifdef QUIC_COMPARTMENT_ID
- //
- // The network compartment ID.
- //
- QUIC_COMPARTMENT_ID CompartmentId;
-#endif
-
- //
- // Handle to persistent storage (registry).
- //
-#ifdef QUIC_SILO
- QUIC_STORAGE* Storage; // Only necessary if it could be in a different silo.
-#endif
- QUIC_STORAGE* AppSpecificStorage;
-
- //
- // Configurable (app & registry) settings.
- //
- QUIC_SETTINGS Settings;
-
- //
- // Per server cached state information.
- //
- QUIC_HASHTABLE ServerCache;
- QUIC_RW_LOCK ServerCacheLock;
-
- //
- // List of all connections in the session.
- //
- QUIC_LIST_ENTRY Connections;
- QUIC_DISPATCH_LOCK ConnectionsLock;
-
- //
- // The application layer protocol negotiation buffers. Encoded in the TLS
- // extension format.
- //
- uint16_t AlpnListLength;
- _Field_size_(AlpnListLength)
- uint8_t AlpnList[0];
-
-} QUIC_SESSION;
-
-#ifdef QUIC_SILO
-
-#define QuicSessionAttachSilo(Session) \
- QUIC_SILO PrevSilo = (Session == NULL || Session->Silo == NULL) ? \
- QUIC_SILO_INVALID : QuicSiloAttach(Session->Silo)
-
-#define QuicSessionDetachSilo() \
- if (PrevSilo != QUIC_SILO_INVALID) {\
- QuicSiloDetatch(PrevSilo); \
- }
-
-#else
-
-#define QuicSessionAttachSilo(Session)
-#define QuicSessionDetachSilo()
-
-#endif // #ifdef QUIC_SILO
-
-//
-// Initializes an empty session object.
-//
-_IRQL_requires_max_(DISPATCH_LEVEL)
-QUIC_STATUS
-QuicSessionAlloc(
- _In_opt_ QUIC_REGISTRATION* Registration,
- _In_opt_ void* Context,
- _When_(AlpnBufferCount > 0, _In_reads_(AlpnBufferCount))
- _When_(AlpnBufferCount == 0, _In_opt_)
- const QUIC_BUFFER* const AlpnBuffers,
- _In_ uint32_t AlpnBufferCount,
- _Outptr_ _At_(*NewSession, __drv_allocatesMem(Mem))
- QUIC_SESSION** NewSession
- );
-
-//
-// Returns TRUE if the two sessions have an overlapping ALPN.
-//
-_IRQL_requires_max_(DISPATCH_LEVEL)
-BOOLEAN
-QuicSessionHasAlpnOverlap(
- _In_ const QUIC_SESSION* Session1,
- _In_ const QUIC_SESSION* Session2
- );
-
-//
-// Returns TRUE if the session has a matching ALPN. Also updates the new
-// connection info with the matching ALPN.
-//
-_IRQL_requires_max_(DISPATCH_LEVEL)
-BOOLEAN
-QuicSessionMatchesAlpn(
- _In_ const QUIC_SESSION* Session,
- _In_ QUIC_NEW_CONNECTION_INFO* Info
- );
-
-//
-// Tracing rundown for the session.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicSessionTraceRundown(
- _In_ QUIC_SESSION* Session
- );
-
-//
-// Global or local settings were changed.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Function_class_(QUIC_STORAGE_CHANGE_CALLBACK)
-void
-QuicSessionSettingsChanged(
- _Inout_ QUIC_SESSION* Session
- );
-
-//
-// Registers the connection with the session.
-//
-_IRQL_requires_max_(DISPATCH_LEVEL)
-void
-QuicSessionRegisterConnection(
- _Inout_ QUIC_SESSION* Session,
- _Inout_ QUIC_CONNECTION* Connection
- );
-
-//
-// Unregisters the connection with the session.
-//
-_IRQL_requires_max_(DISPATCH_LEVEL)
-void
-QuicSessionUnregisterConnection(
- _Inout_ QUIC_CONNECTION* Connection
- );
-
-//
-// Gets a session parameter.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicSessionParamGet(
- _In_ QUIC_SESSION* Session,
- _In_ uint32_t Param,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- void* Buffer
- );
-
-//
-// Sets a session parameter.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicSessionParamSet(
- _In_ QUIC_SESSION* Session,
- _In_ uint32_t Param,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const void* Buffer
- );
-
-//
-// Gets a previously cached server state.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Success_(return!=FALSE)
-BOOLEAN
-QuicSessionServerCacheGetState(
- _In_ QUIC_SESSION* Session,
- _In_z_ const char* ServerName,
- _Out_ uint32_t* QuicVersion,
- _Out_ QUIC_TRANSPORT_PARAMETERS* Parameters,
- _Out_ QUIC_SEC_CONFIG** SecConfig
- );
-
-//
-// Sets/updates cached server state.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicSessionServerCacheSetState(
- _In_ QUIC_SESSION* Session,
- _In_z_ const char* ServerName,
- _In_ uint32_t QuicVersion,
- _In_ const QUIC_TRANSPORT_PARAMETERS* Parameters,
- _In_ QUIC_SEC_CONFIG* SecConfig
- );
diff --git a/src/core/settings.c b/src/core/settings.c
index 40b49e4765..b2a7cb01a4 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -20,6 +20,9 @@ QuicSettingsSetDefault(
_Inout_ QUIC_SETTINGS* Settings
)
{
+ if (!Settings->IsSet.SendBufferingEnabled) {
+ Settings->SendBufferingEnabled = QUIC_DEFAULT_SEND_BUFFERING_ENABLE;
+ }
if (!Settings->IsSet.PacingEnabled) {
Settings->PacingEnabled = QUIC_DEFAULT_SEND_PACING;
}
@@ -29,9 +32,6 @@ QuicSettingsSetDefault(
if (!Settings->IsSet.DatagramReceiveEnabled) {
Settings->DatagramReceiveEnabled = QUIC_DEFAULT_DATAGRAM_RECEIVE_ENABLED;
}
- if (!Settings->IsSet.MaxPartitionCount) {
- Settings->MaxPartitionCount = QUIC_MAX_PARTITION_COUNT;
- }
if (!Settings->IsSet.MaxOperationsPerDrain) {
Settings->MaxOperationsPerDrain = QUIC_MAX_OPERATIONS_PER_DRAIN;
}
@@ -103,229 +103,231 @@ QuicSettingsSetDefault(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicSettingsCopy(
- _Inout_ QUIC_SETTINGS* Settings,
- _In_ const QUIC_SETTINGS* ParentSettings
+ _Inout_ QUIC_SETTINGS* Destination,
+ _In_ const QUIC_SETTINGS* Source
)
{
- if (!Settings->IsSet.PacingEnabled) {
- Settings->PacingEnabled = ParentSettings->PacingEnabled;
+ if (!Destination->IsSet.SendBufferingEnabled) {
+ Destination->SendBufferingEnabled = Source->SendBufferingEnabled;
}
- if (!Settings->IsSet.MigrationEnabled) {
- Settings->MigrationEnabled = ParentSettings->MigrationEnabled;
+ if (!Destination->IsSet.PacingEnabled) {
+ Destination->PacingEnabled = Source->PacingEnabled;
}
- if (!Settings->IsSet.DatagramReceiveEnabled) {
- Settings->DatagramReceiveEnabled = ParentSettings->DatagramReceiveEnabled;
+ if (!Destination->IsSet.MigrationEnabled) {
+ Destination->MigrationEnabled = Source->MigrationEnabled;
}
- if (!Settings->IsSet.MaxPartitionCount) {
- Settings->MaxPartitionCount = ParentSettings->MaxPartitionCount;
+ if (!Destination->IsSet.DatagramReceiveEnabled) {
+ Destination->DatagramReceiveEnabled = Source->DatagramReceiveEnabled;
}
- if (!Settings->IsSet.MaxOperationsPerDrain) {
- Settings->MaxOperationsPerDrain = ParentSettings->MaxOperationsPerDrain;
+ if (!Destination->IsSet.MaxOperationsPerDrain) {
+ Destination->MaxOperationsPerDrain = Source->MaxOperationsPerDrain;
}
- if (!Settings->IsSet.RetryMemoryLimit) {
- Settings->RetryMemoryLimit = ParentSettings->RetryMemoryLimit;
+ if (!Destination->IsSet.RetryMemoryLimit) {
+ Destination->RetryMemoryLimit = Source->RetryMemoryLimit;
}
- if (!Settings->IsSet.LoadBalancingMode) {
- Settings->LoadBalancingMode = ParentSettings->LoadBalancingMode;
+ if (!Destination->IsSet.LoadBalancingMode) {
+ Destination->LoadBalancingMode = Source->LoadBalancingMode;
}
- if (!Settings->IsSet.MaxWorkerQueueDelayUs) {
- Settings->MaxWorkerQueueDelayUs = ParentSettings->MaxWorkerQueueDelayUs;
+ if (!Destination->IsSet.MaxWorkerQueueDelayUs) {
+ Destination->MaxWorkerQueueDelayUs = Source->MaxWorkerQueueDelayUs;
}
- if (!Settings->IsSet.MaxStatelessOperations) {
- Settings->MaxStatelessOperations = ParentSettings->MaxStatelessOperations;
+ if (!Destination->IsSet.MaxStatelessOperations) {
+ Destination->MaxStatelessOperations = Source->MaxStatelessOperations;
}
- if (!Settings->IsSet.InitialWindowPackets) {
- Settings->InitialWindowPackets = ParentSettings->InitialWindowPackets;
+ if (!Destination->IsSet.InitialWindowPackets) {
+ Destination->InitialWindowPackets = Source->InitialWindowPackets;
}
- if (!Settings->IsSet.SendIdleTimeoutMs) {
- Settings->SendIdleTimeoutMs = ParentSettings->SendIdleTimeoutMs;
+ if (!Destination->IsSet.SendIdleTimeoutMs) {
+ Destination->SendIdleTimeoutMs = Source->SendIdleTimeoutMs;
}
- if (!Settings->IsSet.InitialRttMs) {
- Settings->InitialRttMs = ParentSettings->InitialRttMs;
+ if (!Destination->IsSet.InitialRttMs) {
+ Destination->InitialRttMs = Source->InitialRttMs;
}
- if (!Settings->IsSet.MaxAckDelayMs) {
- Settings->MaxAckDelayMs = ParentSettings->MaxAckDelayMs;
+ if (!Destination->IsSet.MaxAckDelayMs) {
+ Destination->MaxAckDelayMs = Source->MaxAckDelayMs;
}
- if (!Settings->IsSet.DisconnectTimeoutMs) {
- Settings->DisconnectTimeoutMs = ParentSettings->DisconnectTimeoutMs;
+ if (!Destination->IsSet.DisconnectTimeoutMs) {
+ Destination->DisconnectTimeoutMs = Source->DisconnectTimeoutMs;
}
- if (!Settings->IsSet.KeepAliveIntervalMs) {
- Settings->KeepAliveIntervalMs = ParentSettings->KeepAliveIntervalMs;
+ if (!Destination->IsSet.KeepAliveIntervalMs) {
+ Destination->KeepAliveIntervalMs = Source->KeepAliveIntervalMs;
}
- if (!Settings->IsSet.IdleTimeoutMs) {
- Settings->IdleTimeoutMs = ParentSettings->IdleTimeoutMs;
+ if (!Destination->IsSet.IdleTimeoutMs) {
+ Destination->IdleTimeoutMs = Source->IdleTimeoutMs;
}
- if (!Settings->IsSet.HandshakeIdleTimeoutMs) {
- Settings->HandshakeIdleTimeoutMs = ParentSettings->HandshakeIdleTimeoutMs;
+ if (!Destination->IsSet.HandshakeIdleTimeoutMs) {
+ Destination->HandshakeIdleTimeoutMs = Source->HandshakeIdleTimeoutMs;
}
- if (!Settings->IsSet.PeerBidiStreamCount) {
- Settings->PeerBidiStreamCount = ParentSettings->PeerBidiStreamCount;
+ if (!Destination->IsSet.PeerBidiStreamCount) {
+ Destination->PeerBidiStreamCount = Source->PeerBidiStreamCount;
}
- if (!Settings->IsSet.PeerUnidiStreamCount) {
- Settings->PeerUnidiStreamCount = ParentSettings->PeerUnidiStreamCount;
+ if (!Destination->IsSet.PeerUnidiStreamCount) {
+ Destination->PeerUnidiStreamCount = Source->PeerUnidiStreamCount;
}
- if (!Settings->IsSet.TlsClientMaxSendBuffer) {
- Settings->TlsClientMaxSendBuffer = ParentSettings->TlsClientMaxSendBuffer;
+ if (!Destination->IsSet.TlsClientMaxSendBuffer) {
+ Destination->TlsClientMaxSendBuffer = Source->TlsClientMaxSendBuffer;
}
- if (!Settings->IsSet.TlsClientMaxSendBuffer) {
- Settings->TlsClientMaxSendBuffer = ParentSettings->TlsClientMaxSendBuffer;
+ if (!Destination->IsSet.TlsClientMaxSendBuffer) {
+ Destination->TlsClientMaxSendBuffer = Source->TlsClientMaxSendBuffer;
}
- if (!Settings->IsSet.StreamRecvWindowDefault) {
- Settings->StreamRecvWindowDefault = ParentSettings->StreamRecvWindowDefault;
+ if (!Destination->IsSet.StreamRecvWindowDefault) {
+ Destination->StreamRecvWindowDefault = Source->StreamRecvWindowDefault;
}
- if (!Settings->IsSet.StreamRecvBufferDefault) {
- Settings->StreamRecvBufferDefault = ParentSettings->StreamRecvBufferDefault;
+ if (!Destination->IsSet.StreamRecvBufferDefault) {
+ Destination->StreamRecvBufferDefault = Source->StreamRecvBufferDefault;
}
- if (!Settings->IsSet.ConnFlowControlWindow) {
- Settings->ConnFlowControlWindow = ParentSettings->ConnFlowControlWindow;
+ if (!Destination->IsSet.ConnFlowControlWindow) {
+ Destination->ConnFlowControlWindow = Source->ConnFlowControlWindow;
}
- if (!Settings->IsSet.MaxBytesPerKey) {
- Settings->MaxBytesPerKey = ParentSettings->MaxBytesPerKey;
+ if (!Destination->IsSet.MaxBytesPerKey) {
+ Destination->MaxBytesPerKey = Source->MaxBytesPerKey;
}
- if (!Settings->IsSet.ServerResumptionLevel) {
- Settings->ServerResumptionLevel = ParentSettings->ServerResumptionLevel;
+ if (!Destination->IsSet.ServerResumptionLevel) {
+ Destination->ServerResumptionLevel = Source->ServerResumptionLevel;
}
}
_IRQL_requires_max_(PASSIVE_LEVEL)
BOOLEAN
QuicSettingApply(
- _Inout_ QUIC_SETTINGS* Settings,
+ _Inout_ QUIC_SETTINGS* Destination,
+ _In_ BOOLEAN OverWrite,
_In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
- uint32_t NewSessionSize,
- _In_reads_bytes_(NewSessionSize)
- const QUIC_SETTINGS* NewSettings
+ uint32_t NewSettingsSize,
+ _In_reads_bytes_(NewSettingsSize)
+ const QUIC_SETTINGS* Source
)
{
// TODO - Input validation
- UNREFERENCED_PARAMETER(NewSessionSize); // TODO - Use to validate new settings
- if (NewSettings->IsSet.PacingEnabled) {
- Settings->PacingEnabled = NewSettings->PacingEnabled;
- Settings->IsSet.PacingEnabled = TRUE;
+ UNREFERENCED_PARAMETER(NewSettingsSize); // TODO - Use to validate new settings
+
+ if (Source->IsSet.SendBufferingEnabled && (!Destination->IsSet.SendBufferingEnabled || OverWrite)) {
+ Destination->SendBufferingEnabled = Source->SendBufferingEnabled;
+ Destination->IsSet.SendBufferingEnabled = TRUE;
}
- if (NewSettings->IsSet.MigrationEnabled) {
- Settings->MigrationEnabled = NewSettings->MigrationEnabled;
- Settings->IsSet.MigrationEnabled = TRUE;
+ if (Source->IsSet.PacingEnabled && (!Destination->IsSet.PacingEnabled || OverWrite)) {
+ Destination->PacingEnabled = Source->PacingEnabled;
+ Destination->IsSet.PacingEnabled = TRUE;
}
- if (NewSettings->IsSet.DatagramReceiveEnabled) {
- Settings->DatagramReceiveEnabled = NewSettings->DatagramReceiveEnabled;
- Settings->IsSet.DatagramReceiveEnabled = TRUE;
+ if (Source->IsSet.MigrationEnabled && (!Destination->IsSet.MigrationEnabled || OverWrite)) {
+ Destination->MigrationEnabled = Source->MigrationEnabled;
+ Destination->IsSet.MigrationEnabled = TRUE;
}
- if (NewSettings->IsSet.MaxPartitionCount) {
- Settings->MaxPartitionCount = NewSettings->MaxPartitionCount;
- Settings->IsSet.MaxPartitionCount = TRUE;
+ if (Source->IsSet.DatagramReceiveEnabled && (!Destination->IsSet.DatagramReceiveEnabled || OverWrite)) {
+ Destination->DatagramReceiveEnabled = Source->DatagramReceiveEnabled;
+ Destination->IsSet.DatagramReceiveEnabled = TRUE;
}
- if (NewSettings->IsSet.MaxOperationsPerDrain) {
- Settings->MaxOperationsPerDrain = NewSettings->MaxOperationsPerDrain;
- Settings->IsSet.MaxOperationsPerDrain = TRUE;
+ if (Source->IsSet.MaxOperationsPerDrain && (!Destination->IsSet.MaxOperationsPerDrain || OverWrite)) {
+ Destination->MaxOperationsPerDrain = Source->MaxOperationsPerDrain;
+ Destination->IsSet.MaxOperationsPerDrain = TRUE;
}
- if (NewSettings->IsSet.RetryMemoryLimit) {
- Settings->RetryMemoryLimit = NewSettings->RetryMemoryLimit;
- Settings->IsSet.RetryMemoryLimit = TRUE;
+ if (Source->IsSet.RetryMemoryLimit && (!Destination->IsSet.RetryMemoryLimit || OverWrite)) {
+ Destination->RetryMemoryLimit = Source->RetryMemoryLimit;
+ Destination->IsSet.RetryMemoryLimit = TRUE;
}
- if (NewSettings->IsSet.LoadBalancingMode) {
- if (NewSettings->LoadBalancingMode > QUIC_LOAD_BALANCING_SERVER_ID_IP) {
+ if (Source->IsSet.LoadBalancingMode && (!Destination->IsSet.LoadBalancingMode || OverWrite)) {
+ if (Source->LoadBalancingMode > QUIC_LOAD_BALANCING_SERVER_ID_IP) {
return FALSE;
}
- Settings->LoadBalancingMode = NewSettings->LoadBalancingMode;
- Settings->IsSet.LoadBalancingMode = TRUE;
+ Destination->LoadBalancingMode = Source->LoadBalancingMode;
+ Destination->IsSet.LoadBalancingMode = TRUE;
}
- if (NewSettings->IsSet.MaxWorkerQueueDelayUs) {
- Settings->MaxWorkerQueueDelayUs = NewSettings->MaxWorkerQueueDelayUs;
- Settings->IsSet.MaxWorkerQueueDelayUs = TRUE;
+ if (Source->IsSet.MaxWorkerQueueDelayUs && (!Destination->IsSet.MaxWorkerQueueDelayUs || OverWrite)) {
+ Destination->MaxWorkerQueueDelayUs = Source->MaxWorkerQueueDelayUs;
+ Destination->IsSet.MaxWorkerQueueDelayUs = TRUE;
}
- if (NewSettings->IsSet.MaxStatelessOperations) {
- Settings->MaxStatelessOperations = NewSettings->MaxStatelessOperations;
- Settings->IsSet.MaxStatelessOperations = TRUE;
+ if (Source->IsSet.MaxStatelessOperations && (!Destination->IsSet.MaxStatelessOperations || OverWrite)) {
+ Destination->MaxStatelessOperations = Source->MaxStatelessOperations;
+ Destination->IsSet.MaxStatelessOperations = TRUE;
}
- if (NewSettings->IsSet.InitialWindowPackets) {
- Settings->InitialWindowPackets = NewSettings->InitialWindowPackets;
- Settings->IsSet.InitialWindowPackets = TRUE;
+ if (Source->IsSet.InitialWindowPackets && (!Destination->IsSet.InitialWindowPackets || OverWrite)) {
+ Destination->InitialWindowPackets = Source->InitialWindowPackets;
+ Destination->IsSet.InitialWindowPackets = TRUE;
}
- if (NewSettings->IsSet.SendIdleTimeoutMs) {
- Settings->SendIdleTimeoutMs = NewSettings->SendIdleTimeoutMs;
- Settings->IsSet.SendIdleTimeoutMs = TRUE;
+ if (Source->IsSet.SendIdleTimeoutMs && (!Destination->IsSet.SendIdleTimeoutMs || OverWrite)) {
+ Destination->SendIdleTimeoutMs = Source->SendIdleTimeoutMs;
+ Destination->IsSet.SendIdleTimeoutMs = TRUE;
}
- if (NewSettings->IsSet.InitialRttMs) {
- Settings->InitialRttMs = NewSettings->InitialRttMs;
- Settings->IsSet.InitialRttMs = TRUE;
+ if (Source->IsSet.InitialRttMs && (!Destination->IsSet.InitialRttMs || OverWrite)) {
+ Destination->InitialRttMs = Source->InitialRttMs;
+ Destination->IsSet.InitialRttMs = TRUE;
}
- if (NewSettings->IsSet.MaxAckDelayMs) {
- if (NewSettings->MaxAckDelayMs > QUIC_TP_MAX_ACK_DELAY_MAX) {
+ if (Source->IsSet.MaxAckDelayMs && (!Destination->IsSet.MaxAckDelayMs || OverWrite)) {
+ if (Source->MaxAckDelayMs > QUIC_TP_MAX_ACK_DELAY_MAX) {
return FALSE;
}
- Settings->MaxAckDelayMs = NewSettings->MaxAckDelayMs;
- Settings->IsSet.MaxAckDelayMs = TRUE;
+ Destination->MaxAckDelayMs = Source->MaxAckDelayMs;
+ Destination->IsSet.MaxAckDelayMs = TRUE;
}
- if (NewSettings->IsSet.DisconnectTimeoutMs) {
- if (NewSettings->DisconnectTimeoutMs > QUIC_MAX_DISCONNECT_TIMEOUT) {
+ if (Source->IsSet.DisconnectTimeoutMs && (!Destination->IsSet.DisconnectTimeoutMs || OverWrite)) {
+ if (Source->DisconnectTimeoutMs > QUIC_MAX_DISCONNECT_TIMEOUT) {
return FALSE;
}
- Settings->DisconnectTimeoutMs = NewSettings->DisconnectTimeoutMs;
- Settings->IsSet.DisconnectTimeoutMs = TRUE;
+ Destination->DisconnectTimeoutMs = Source->DisconnectTimeoutMs;
+ Destination->IsSet.DisconnectTimeoutMs = TRUE;
}
- if (NewSettings->IsSet.KeepAliveIntervalMs) {
- Settings->KeepAliveIntervalMs = NewSettings->KeepAliveIntervalMs;
- Settings->IsSet.KeepAliveIntervalMs = TRUE;
+ if (Source->IsSet.KeepAliveIntervalMs && (!Destination->IsSet.KeepAliveIntervalMs || OverWrite)) {
+ Destination->KeepAliveIntervalMs = Source->KeepAliveIntervalMs;
+ Destination->IsSet.KeepAliveIntervalMs = TRUE;
}
- if (NewSettings->IsSet.IdleTimeoutMs) {
- if (NewSettings->IdleTimeoutMs > QUIC_VAR_INT_MAX) {
+ if (Source->IsSet.IdleTimeoutMs && (!Destination->IsSet.IdleTimeoutMs || OverWrite)) {
+ if (Source->IdleTimeoutMs > QUIC_VAR_INT_MAX) {
return FALSE;
}
- Settings->IdleTimeoutMs = NewSettings->IdleTimeoutMs;
- Settings->IsSet.IdleTimeoutMs = TRUE;
+ Destination->IdleTimeoutMs = Source->IdleTimeoutMs;
+ Destination->IsSet.IdleTimeoutMs = TRUE;
}
- if (NewSettings->IsSet.HandshakeIdleTimeoutMs) {
- if (NewSettings->HandshakeIdleTimeoutMs > QUIC_VAR_INT_MAX) {
+ if (Source->IsSet.HandshakeIdleTimeoutMs && (!Destination->IsSet.HandshakeIdleTimeoutMs || OverWrite)) {
+ if (Source->HandshakeIdleTimeoutMs > QUIC_VAR_INT_MAX) {
return FALSE;
}
- Settings->HandshakeIdleTimeoutMs = NewSettings->HandshakeIdleTimeoutMs;
- Settings->IsSet.HandshakeIdleTimeoutMs = TRUE;
+ Destination->HandshakeIdleTimeoutMs = Source->HandshakeIdleTimeoutMs;
+ Destination->IsSet.HandshakeIdleTimeoutMs = TRUE;
}
- if (NewSettings->IsSet.PeerBidiStreamCount) {
- Settings->PeerBidiStreamCount = NewSettings->PeerBidiStreamCount;
- Settings->IsSet.PeerBidiStreamCount = TRUE;
+ if (Source->IsSet.PeerBidiStreamCount && (!Destination->IsSet.PeerBidiStreamCount || OverWrite)) {
+ Destination->PeerBidiStreamCount = Source->PeerBidiStreamCount;
+ Destination->IsSet.PeerBidiStreamCount = TRUE;
}
- if (NewSettings->IsSet.PeerUnidiStreamCount) {
- Settings->PeerUnidiStreamCount = NewSettings->PeerUnidiStreamCount;
- Settings->IsSet.PeerUnidiStreamCount = TRUE;
+ if (Source->IsSet.PeerUnidiStreamCount && (!Destination->IsSet.PeerUnidiStreamCount || OverWrite)) {
+ Destination->PeerUnidiStreamCount = Source->PeerUnidiStreamCount;
+ Destination->IsSet.PeerUnidiStreamCount = TRUE;
}
- if (NewSettings->IsSet.TlsClientMaxSendBuffer) {
- Settings->TlsClientMaxSendBuffer = NewSettings->TlsClientMaxSendBuffer;
- Settings->IsSet.TlsClientMaxSendBuffer = TRUE;
+ if (Source->IsSet.TlsClientMaxSendBuffer && (!Destination->IsSet.TlsClientMaxSendBuffer || OverWrite)) {
+ Destination->TlsClientMaxSendBuffer = Source->TlsClientMaxSendBuffer;
+ Destination->IsSet.TlsClientMaxSendBuffer = TRUE;
}
- if (NewSettings->IsSet.TlsClientMaxSendBuffer) {
- Settings->TlsClientMaxSendBuffer = NewSettings->TlsClientMaxSendBuffer;
- Settings->IsSet.TlsClientMaxSendBuffer = TRUE;
+ if (Source->IsSet.TlsClientMaxSendBuffer && (!Destination->IsSet.TlsClientMaxSendBuffer || OverWrite)) {
+ Destination->TlsClientMaxSendBuffer = Source->TlsClientMaxSendBuffer;
+ Destination->IsSet.TlsClientMaxSendBuffer = TRUE;
}
- if (NewSettings->IsSet.StreamRecvWindowDefault) {
- Settings->StreamRecvWindowDefault = NewSettings->StreamRecvWindowDefault;
- Settings->IsSet.StreamRecvWindowDefault = TRUE;
+ if (Source->IsSet.StreamRecvWindowDefault && (!Destination->IsSet.StreamRecvWindowDefault || OverWrite)) {
+ Destination->StreamRecvWindowDefault = Source->StreamRecvWindowDefault;
+ Destination->IsSet.StreamRecvWindowDefault = TRUE;
}
- if (NewSettings->IsSet.StreamRecvBufferDefault) {
- if (NewSettings->StreamRecvBufferDefault < QUIC_DEFAULT_STREAM_RECV_BUFFER_SIZE) {
+ if (Source->IsSet.StreamRecvBufferDefault && (!Destination->IsSet.StreamRecvBufferDefault || OverWrite)) {
+ if (Source->StreamRecvBufferDefault < QUIC_DEFAULT_STREAM_RECV_BUFFER_SIZE) {
return FALSE;
}
- Settings->StreamRecvBufferDefault = NewSettings->StreamRecvBufferDefault;
- Settings->IsSet.StreamRecvBufferDefault = TRUE;
+ Destination->StreamRecvBufferDefault = Source->StreamRecvBufferDefault;
+ Destination->IsSet.StreamRecvBufferDefault = TRUE;
}
- if (NewSettings->IsSet.ConnFlowControlWindow) {
- Settings->ConnFlowControlWindow = NewSettings->ConnFlowControlWindow;
- Settings->IsSet.ConnFlowControlWindow = TRUE;
+ if (Source->IsSet.ConnFlowControlWindow && (!Destination->IsSet.ConnFlowControlWindow || OverWrite)) {
+ Destination->ConnFlowControlWindow = Source->ConnFlowControlWindow;
+ Destination->IsSet.ConnFlowControlWindow = TRUE;
}
- if (NewSettings->IsSet.MaxBytesPerKey) {
- if (NewSettings->MaxBytesPerKey > QUIC_DEFAULT_MAX_BYTES_PER_KEY) {
+ if (Source->IsSet.MaxBytesPerKey && (!Destination->IsSet.MaxBytesPerKey || OverWrite)) {
+ if (Source->MaxBytesPerKey > QUIC_DEFAULT_MAX_BYTES_PER_KEY) {
return FALSE;
}
- Settings->MaxBytesPerKey = NewSettings->MaxBytesPerKey;
- Settings->IsSet.MaxBytesPerKey = TRUE;
+ Destination->MaxBytesPerKey = Source->MaxBytesPerKey;
+ Destination->IsSet.MaxBytesPerKey = TRUE;
}
- if (NewSettings->IsSet.ServerResumptionLevel) {
- if (NewSettings->ServerResumptionLevel > QUIC_SERVER_RESUME_AND_ZERORTT) {
+ if (Source->IsSet.ServerResumptionLevel && (!Destination->IsSet.ServerResumptionLevel || OverWrite)) {
+ if (Source->ServerResumptionLevel > QUIC_SERVER_RESUME_AND_ZERORTT) {
return FALSE;
}
- Settings->ServerResumptionLevel = NewSettings->ServerResumptionLevel;
- Settings->IsSet.ServerResumptionLevel = TRUE;
+ Destination->ServerResumptionLevel = Source->ServerResumptionLevel;
+ Destination->IsSet.ServerResumptionLevel = TRUE;
}
return TRUE;
}
@@ -345,6 +347,17 @@ QuicSettingsLoad(
} MultiValue;
uint32_t ValueLen;
+ if (!Settings->IsSet.SendBufferingEnabled) {
+ Value = QUIC_DEFAULT_SEND_BUFFERING_ENABLE;
+ ValueLen = sizeof(Value);
+ QuicStorageReadValue(
+ Storage,
+ QUIC_SETTING_SEND_BUFFERING_DEFAULT,
+ (uint8_t*)&Value,
+ &ValueLen);
+ Settings->SendBufferingEnabled = !!Value;
+ }
+
if (!Settings->IsSet.PacingEnabled) {
Value = QUIC_DEFAULT_SEND_PACING;
ValueLen = sizeof(Value);
@@ -378,19 +391,6 @@ QuicSettingsLoad(
Settings->DatagramReceiveEnabled = !!Value;
}
- if (!Settings->IsSet.MaxPartitionCount) {
- Value = QUIC_MAX_PARTITION_COUNT;
- ValueLen = sizeof(Value);
- QuicStorageReadValue(
- Storage,
- QUIC_SETTING_MAX_PARTITION_COUNT,
- (uint8_t*)&Value,
- &ValueLen);
- if (Value <= UINT8_MAX) {
- Settings->MaxPartitionCount = (uint8_t)Value;
- }
- }
-
if (!Settings->IsSet.MaxOperationsPerDrain) {
Value = QUIC_MAX_OPERATIONS_PER_DRAIN;
ValueLen = sizeof(Value);
@@ -632,10 +632,10 @@ QuicSettingsDump(
_In_ const QUIC_SETTINGS* Settings
)
{
- QuicTraceLogVerbose(SettingDumpPacingDefault, "[sett] PacingEnabled = %hhu", Settings->PacingEnabled);
+ QuicTraceLogVerbose(SettingDumpSendBufferingEnabled, "[sett] SendBufferingEnabled = %hhu", Settings->SendBufferingEnabled);
+ QuicTraceLogVerbose(SettingDumpPacingEnabled, "[sett] PacingEnabled = %hhu", Settings->PacingEnabled);
QuicTraceLogVerbose(SettingDumpMigrationEnabled, "[sett] MigrationEnabled = %hhu", Settings->MigrationEnabled);
QuicTraceLogVerbose(SettingDumpDatagramReceiveEnabled, "[sett] DatagramReceiveEnabled = %hhu", Settings->DatagramReceiveEnabled);
- QuicTraceLogVerbose(SettingDumpMaxPartitionCount, "[sett] MaxPartitionCount = %hhu", Settings->MaxPartitionCount);
QuicTraceLogVerbose(SettingDumpMaxOperationsPerDrain, "[sett] MaxOperationsPerDrain = %hhu", Settings->MaxOperationsPerDrain);
QuicTraceLogVerbose(SettingDumpRetryMemoryLimit, "[sett] RetryMemoryLimit = %hu", Settings->RetryMemoryLimit);
QuicTraceLogVerbose(SettingDumpLoadBalancingMode, "[sett] LoadBalancingMode = %hu", Settings->LoadBalancingMode);
@@ -659,3 +659,94 @@ QuicSettingsDump(
QuicTraceLogVerbose(SettingDumpMaxBytesPerKey, "[sett] MaxBytesPerKey = %llu", Settings->MaxBytesPerKey);
QuicTraceLogVerbose(SettingDumpServerResumptionLevel, "[sett] ServerResumptionLevel = %hhu", Settings->ServerResumptionLevel);
}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicSettingsDumpNew(
+ _In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
+ uint32_t SettingsSize,
+ _In_reads_bytes_(SettingsSize)
+ const QUIC_SETTINGS* Settings
+ )
+{
+ UNREFERENCED_PARAMETER(SettingsSize); // TODO - Use when reading settings
+
+ if (Settings->IsSet.SendBufferingEnabled) {
+ QuicTraceLogVerbose(SettingDumpSendBufferingEnabled, "[sett] SendBufferingEnabled = %hhu", Settings->SendBufferingEnabled);
+ }
+ if (Settings->IsSet.PacingEnabled) {
+ QuicTraceLogVerbose(SettingDumpPacingEnabled, "[sett] PacingEnabled = %hhu", Settings->PacingEnabled);
+ }
+ if (Settings->IsSet.MigrationEnabled) {
+ QuicTraceLogVerbose(SettingDumpMigrationEnabled, "[sett] MigrationEnabled = %hhu", Settings->MigrationEnabled);
+ }
+ if (Settings->IsSet.DatagramReceiveEnabled) {
+ QuicTraceLogVerbose(SettingDumpDatagramReceiveEnabled, "[sett] DatagramReceiveEnabled = %hhu", Settings->DatagramReceiveEnabled);
+ }
+ if (Settings->IsSet.MaxOperationsPerDrain) {
+ QuicTraceLogVerbose(SettingDumpMaxOperationsPerDrain, "[sett] MaxOperationsPerDrain = %hhu", Settings->MaxOperationsPerDrain);
+ }
+ if (Settings->IsSet.RetryMemoryLimit) {
+ QuicTraceLogVerbose(SettingDumpRetryMemoryLimit, "[sett] RetryMemoryLimit = %hu", Settings->RetryMemoryLimit);
+ }
+ if (Settings->IsSet.LoadBalancingMode) {
+ QuicTraceLogVerbose(SettingDumpLoadBalancingMode, "[sett] LoadBalancingMode = %hu", Settings->LoadBalancingMode);
+ }
+ if (Settings->IsSet.MaxStatelessOperations) {
+ QuicTraceLogVerbose(SettingDumpMaxStatelessOperations, "[sett] MaxStatelessOperations = %u", Settings->MaxStatelessOperations);
+ }
+ if (Settings->IsSet.MaxWorkerQueueDelayUs) {
+ QuicTraceLogVerbose(SettingDumpMaxWorkerQueueDelayUs, "[sett] MaxWorkerQueueDelayUs = %u", Settings->MaxWorkerQueueDelayUs);
+ }
+ if (Settings->IsSet.InitialWindowPackets) {
+ QuicTraceLogVerbose(SettingDumpInitialWindowPackets, "[sett] InitialWindowPackets = %u", Settings->InitialWindowPackets);
+ }
+ if (Settings->IsSet.SendIdleTimeoutMs) {
+ QuicTraceLogVerbose(SettingDumpSendIdleTimeoutMs, "[sett] SendIdleTimeoutMs = %u", Settings->SendIdleTimeoutMs);
+ }
+ if (Settings->IsSet.InitialRttMs) {
+ QuicTraceLogVerbose(SettingDumpInitialRttMs, "[sett] InitialRttMs = %u", Settings->InitialRttMs);
+ }
+ if (Settings->IsSet.MaxAckDelayMs) {
+ QuicTraceLogVerbose(SettingDumpMaxAckDelayMs, "[sett] MaxAckDelayMs = %u", Settings->MaxAckDelayMs);
+ }
+ if (Settings->IsSet.DisconnectTimeoutMs) {
+ QuicTraceLogVerbose(SettingDumpDisconnectTimeoutMs, "[sett] DisconnectTimeoutMs = %u", Settings->DisconnectTimeoutMs);
+ }
+ if (Settings->IsSet.KeepAliveIntervalMs) {
+ QuicTraceLogVerbose(SettingDumpKeepAliveIntervalMs, "[sett] KeepAliveIntervalMs = %u", Settings->KeepAliveIntervalMs);
+ }
+ if (Settings->IsSet.IdleTimeoutMs) {
+ QuicTraceLogVerbose(SettingDumpIdleTimeoutMs, "[sett] IdleTimeoutMs = %llu", Settings->IdleTimeoutMs);
+ }
+ if (Settings->IsSet.HandshakeIdleTimeoutMs) {
+ QuicTraceLogVerbose(SettingDumpHandshakeIdleTimeoutMs, "[sett] HandshakeIdleTimeoutMs = %llu", Settings->HandshakeIdleTimeoutMs);
+ }
+ if (Settings->IsSet.PeerBidiStreamCount) {
+ QuicTraceLogVerbose(SettingDumpBidiStreamCount, "[sett] PeerBidiStreamCount = %hu", Settings->PeerBidiStreamCount);
+ }
+ if (Settings->IsSet.PeerUnidiStreamCount) {
+ QuicTraceLogVerbose(SettingDumpUnidiStreamCount, "[sett] PeerUnidiStreamCount = %hu", Settings->PeerUnidiStreamCount);
+ }
+ if (Settings->IsSet.TlsClientMaxSendBuffer) {
+ QuicTraceLogVerbose(SettingDumpTlsClientMaxSendBuffer, "[sett] TlsClientMaxSendBuffer = %u", Settings->TlsClientMaxSendBuffer);
+ }
+ if (Settings->IsSet.TlsServerMaxSendBuffer) {
+ QuicTraceLogVerbose(SettingDumpTlsServerMaxSendBuffer, "[sett] TlsServerMaxSendBuffer = %u", Settings->TlsServerMaxSendBuffer);
+ }
+ if (Settings->IsSet.StreamRecvWindowDefault) {
+ QuicTraceLogVerbose(SettingDumpStreamRecvWindowDefault, "[sett] StreamRecvWindowDefault= %u", Settings->StreamRecvWindowDefault);
+ }
+ if (Settings->IsSet.StreamRecvBufferDefault) {
+ QuicTraceLogVerbose(SettingDumpStreamRecvBufferDefault, "[sett] StreamRecvBufferDefault= %u", Settings->StreamRecvBufferDefault);
+ }
+ if (Settings->IsSet.ConnFlowControlWindow) {
+ QuicTraceLogVerbose(SettingDumpConnFlowControlWindow, "[sett] ConnFlowControlWindow = %u", Settings->ConnFlowControlWindow);
+ }
+ if (Settings->IsSet.MaxBytesPerKey) {
+ QuicTraceLogVerbose(SettingDumpMaxBytesPerKey, "[sett] MaxBytesPerKey = %llu", Settings->MaxBytesPerKey);
+ }
+ if (Settings->IsSet.ServerResumptionLevel) {
+ QuicTraceLogVerbose(SettingDumpServerResumptionLevel, "[sett] ServerResumptionLevel = %hhu", Settings->ServerResumptionLevel);
+ }
+}
diff --git a/src/core/settings.h b/src/core/settings.h
index de4c768d7d..b4714e5b9f 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -20,8 +20,8 @@ QuicSettingsSetDefault(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicSettingsCopy(
- _Inout_ QUIC_SETTINGS* Settings,
- _In_ const QUIC_SETTINGS* ParentSettings
+ _Inout_ QUIC_SETTINGS* Destination,
+ _In_ const QUIC_SETTINGS* Source
);
//
@@ -30,11 +30,12 @@ QuicSettingsCopy(
_IRQL_requires_max_(PASSIVE_LEVEL)
BOOLEAN
QuicSettingApply(
- _Inout_ QUIC_SETTINGS* Settings,
+ _Inout_ QUIC_SETTINGS* Destination,
+ _In_ BOOLEAN OverWrite,
_In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
- uint32_t NewSessionSize,
- _In_reads_bytes_(NewSessionSize)
- const QUIC_SETTINGS* NewSettings
+ uint32_t SourceSize,
+ _In_reads_bytes_(SourceSize)
+ const QUIC_SETTINGS* Source
);
//
@@ -55,3 +56,12 @@ void
QuicSettingsDump(
_In_ const QUIC_SETTINGS* Settings
);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicSettingsDumpNew(
+ _In_range_(FIELD_OFFSET(QUIC_SETTINGS, MaxBytesPerKey), UINT32_MAX)
+ uint32_t SettingsSize,
+ _In_reads_bytes_(SettingsSize)
+ const QUIC_SETTINGS* Settings
+ );
diff --git a/src/core/stream.c b/src/core/stream.c
index 3d5aed5385..470232409d 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -85,7 +85,7 @@ QuicStreamInitialize(
}
}
- InitialRecvBufferLength = Connection->Session->Settings.StreamRecvBufferDefault;
+ InitialRecvBufferLength = Connection->Settings.StreamRecvBufferDefault;
if (InitialRecvBufferLength == QUIC_DEFAULT_STREAM_RECV_BUFFER_SIZE) {
PreallocatedRecvBuffer = QuicPoolAlloc(&Worker->DefaultReceiveBufferPool);
if (PreallocatedRecvBuffer == NULL) {
@@ -98,7 +98,7 @@ QuicStreamInitialize(
QuicRecvBufferInitialize(
&Stream->RecvBuffer,
InitialRecvBufferLength,
- Connection->Session->Settings.StreamRecvWindowDefault,
+ Connection->Settings.StreamRecvWindowDefault,
FALSE,
PreallocatedRecvBuffer);
if (QUIC_FAILED(Status)) {
diff --git a/src/core/stream_recv.c b/src/core/stream_recv.c
index 7f5c0d6d95..8f0268eeaf 100644
--- a/src/core/stream_recv.c
+++ b/src/core/stream_recv.c
@@ -584,7 +584,7 @@ QuicStreamOnBytesDelivered(
// Limit stream FC window growth by the connection FC window size.
//
if (Stream->RecvBuffer.VirtualBufferLength <
- Stream->Connection->Session->Settings.ConnFlowControlWindow) {
+ Stream->Connection->Settings.ConnFlowControlWindow) {
uint32_t TimeThreshold = (uint32_t)
((Stream->RecvWindowBytesDelivered * Stream->Connection->Paths[0].MinRtt) / RecvBufferDrainThreshold);
diff --git a/src/core/stream_send.c b/src/core/stream_send.c
index 0ba33686cd..8658a14f4b 100644
--- a/src/core/stream_send.c
+++ b/src/core/stream_send.c
@@ -406,7 +406,7 @@ QuicStreamCompleteSendRequest(
QUIC_DBG_ASSERT(Connection->SendBuffer.PostedBytes >= SendRequest->TotalLength);
Connection->SendBuffer.PostedBytes -= SendRequest->TotalLength;
- if (Connection->State.UseSendBuffer) {
+ if (Connection->Settings.SendBufferingEnabled) {
QuicSendBufferFill(Connection);
}
}
@@ -577,7 +577,7 @@ QuicStreamSendFlush(
Stream,
QUIC_STREAM_SEND_FLAG_DATA);
- if (Stream->Connection->State.UseSendBuffer) {
+ if (Stream->Connection->Settings.SendBufferingEnabled) {
QuicSendBufferFill(Stream->Connection);
}
diff --git a/src/core/transport_params.h b/src/core/transport_params.h
index 187973d442..3972b8d9bb 100644
--- a/src/core/transport_params.h
+++ b/src/core/transport_params.h
@@ -174,8 +174,10 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
_Success_(return != NULL)
const uint8_t*
QuicCryptoTlsEncodeTransportParameters(
- _In_ QUIC_CONNECTION* Connection,
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN IsServerTP,
_In_ const QUIC_TRANSPORT_PARAMETERS *TransportParams,
+ _In_opt_ const QUIC_PRIVATE_TRANSPORT_PARAMETER* TestParam,
_Out_ uint32_t* TPLen
);
@@ -186,7 +188,8 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
_Success_(return != FALSE)
BOOLEAN
QuicCryptoTlsDecodeTransportParameters(
- _In_ QUIC_CONNECTION* Connection,
+ _In_opt_ QUIC_CONNECTION* Connection,
+ _In_ BOOLEAN IsServerTP,
_In_reads_(TPLen)
const uint8_t* TPBuf,
_In_ uint16_t TPLen,
diff --git a/src/core/unittest/CMakeLists.txt b/src/core/unittest/CMakeLists.txt
index ee237c17d7..1fffc80116 100644
--- a/src/core/unittest/CMakeLists.txt
+++ b/src/core/unittest/CMakeLists.txt
@@ -8,6 +8,7 @@ set(SOURCES
PartitionTest.cpp
RangeTest.cpp
SpinFrame.cpp
+ TicketTest.cpp
TransportParamTest.cpp
VarIntTest.cpp
)
diff --git a/src/core/unittest/TicketTest.cpp b/src/core/unittest/TicketTest.cpp
new file mode 100644
index 0000000000..2c11441193
--- /dev/null
+++ b/src/core/unittest/TicketTest.cpp
@@ -0,0 +1,307 @@
+/*++
+
+ Copyright (c) Microsoft Corporation.
+ Licensed under the MIT License.
+
+Abstract:
+
+ Test the resumption ticket encoding and decoding logic.
+
+--*/
+
+#include "main.h"
+#ifdef QUIC_CLOG
+#include "TicketTest.cpp.clog.h"
+#endif
+
+void
+CompareTransportParameters(
+ const QUIC_TRANSPORT_PARAMETERS* A,
+ const QUIC_TRANSPORT_PARAMETERS* B
+ )
+{
+ ASSERT_EQ(A->Flags, B->Flags);
+ COMPARE_TP_FIELD(INITIAL_MAX_DATA, InitialMaxData);
+ COMPARE_TP_FIELD(INITIAL_MAX_STRM_DATA_BIDI_LOCAL, InitialMaxStreamDataBidiLocal);
+ COMPARE_TP_FIELD(INITIAL_MAX_STRM_DATA_BIDI_REMOTE, InitialMaxStreamDataBidiRemote);
+ COMPARE_TP_FIELD(INITIAL_MAX_STRM_DATA_UNI, InitialMaxStreamDataUni);
+ COMPARE_TP_FIELD(INITIAL_MAX_STRMS_BIDI, InitialMaxBidiStreams);
+ COMPARE_TP_FIELD(INITIAL_MAX_STRMS_UNI, InitialMaxUniStreams);
+ COMPARE_TP_FIELD(ACTIVE_CONNECTION_ID_LIMIT, ActiveConnectionIdLimit);
+}
+
+TEST(ResumptionTicketTest, ClientEncDec)
+{
+ //
+ // Original parameters
+ //
+ uint8_t ServerTicket[] = {0, 1, 2, 3, 4, 5};
+ QUIC_TRANSPORT_PARAMETERS ClientTP;
+ const uint8_t* EncodedClientTicket = nullptr;
+ uint32_t EncodedClientTicketLength = 0;
+
+ //
+ // Parameters to compare against
+ //
+ QUIC_TRANSPORT_PARAMETERS DecodedTP;
+ uint8_t* DecodedServerTicket = nullptr;
+ uint32_t DecodedServerTicketLength = 0;
+ uint32_t DecodedQuicVersion = 0;
+
+ QuicZeroMemory(&DecodedTP, sizeof(DecodedTP));
+ QuicZeroMemory(&ClientTP, sizeof(ClientTP));
+ ClientTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ ClientTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoEncodeClientTicket(
+ nullptr,
+ sizeof(ServerTicket),
+ ServerTicket,
+ &ClientTP,
+ QUIC_VERSION_LATEST,
+ &EncodedClientTicket,
+ &EncodedClientTicketLength));
+
+ ASSERT_NE(EncodedClientTicket, nullptr);
+ ASSERT_NE(EncodedClientTicketLength, 0);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoDecodeClientTicket(
+ nullptr,
+ (uint16_t)EncodedClientTicketLength,
+ EncodedClientTicket,
+ &DecodedTP,
+ &DecodedServerTicket,
+ &DecodedServerTicketLength,
+ &DecodedQuicVersion));
+
+ ASSERT_EQ(QUIC_VERSION_LATEST, DecodedQuicVersion);
+ ASSERT_EQ(DecodedServerTicketLength, sizeof(ServerTicket));
+ ASSERT_NE(DecodedServerTicket, nullptr);
+ ASSERT_TRUE(memcmp(DecodedServerTicket, ServerTicket, sizeof(ServerTicket)) == 0);
+ CompareTransportParameters(&ClientTP, &DecodedTP);
+
+ QUIC_FREE(EncodedClientTicket);
+ QUIC_FREE(DecodedServerTicket);
+}
+
+TEST(ResumptionTicketTest, ServerEncDec)
+{
+ uint8_t AppData[] = {10, 9, 8, 7, 6};
+ QUIC_TRANSPORT_PARAMETERS ServerTP;
+ uint8_t NegotiatedAlpn[] = {4, 't', 'e', 's', 't'};
+ uint8_t* EncodedServerTicket = nullptr;
+ uint32_t EncodedServerTicketLength = 0;
+
+
+ QUIC_TRANSPORT_PARAMETERS DecodedTP;
+ const uint8_t* DecodedAppData = nullptr;
+ uint32_t DecodedAppDataLength = 0;
+
+ QuicZeroMemory(&ServerTP, sizeof(ServerTP));
+ QuicZeroMemory(&DecodedTP, sizeof(DecodedTP));
+ ServerTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ ServerTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoEncodeServerTicket(
+ nullptr,
+ QUIC_VERSION_LATEST,
+ sizeof(AppData),
+ AppData,
+ &ServerTP,
+ NegotiatedAlpn[0],
+ NegotiatedAlpn + 1,
+ &EncodedServerTicket,
+ &EncodedServerTicketLength));
+
+ ASSERT_NE(EncodedServerTicket, nullptr);
+ ASSERT_NE(EncodedServerTicketLength, 0);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoDecodeServerTicket(
+ nullptr,
+ EncodedServerTicketLength,
+ EncodedServerTicket,
+ NegotiatedAlpn,
+ sizeof(NegotiatedAlpn),
+ &DecodedTP,
+ &DecodedAppData,
+ &DecodedAppDataLength));
+
+ ASSERT_EQ(DecodedAppDataLength, sizeof(AppData));
+ ASSERT_NE(DecodedAppData, nullptr);
+ ASSERT_TRUE(memcmp(AppData, DecodedAppData, sizeof(AppData)) == 0);
+ CompareTransportParameters(&ServerTP, &DecodedTP);
+
+ QUIC_FREE(EncodedServerTicket);
+}
+
+TEST(ResumptionTicketTest, ServerEncDecNoAppData)
+{
+ QUIC_TRANSPORT_PARAMETERS ServerTP;
+ uint8_t NegotiatedAlpn[] = {4, 't', 'e', 's', 't'};
+ uint8_t* EncodedServerTicket = nullptr;
+ uint32_t EncodedServerTicketLength = 0;
+
+ QUIC_TRANSPORT_PARAMETERS DecodedServerTP;
+ const uint8_t* DecodedAppData = nullptr;
+ uint32_t DecodedAppDataLength = 0;
+
+ QuicZeroMemory(&ServerTP, sizeof(ServerTP));
+ QuicZeroMemory(&DecodedServerTP, sizeof(DecodedServerTP));
+ ServerTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ ServerTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoEncodeServerTicket(
+ nullptr,
+ QUIC_VERSION_LATEST,
+ 0,
+ nullptr,
+ &ServerTP,
+ NegotiatedAlpn[0],
+ NegotiatedAlpn + 1,
+ &EncodedServerTicket,
+ &EncodedServerTicketLength));
+
+ ASSERT_NE(EncodedServerTicket, nullptr);
+ ASSERT_NE(EncodedServerTicketLength, 0);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoDecodeServerTicket(
+ nullptr,
+ EncodedServerTicketLength,
+ EncodedServerTicket,
+ NegotiatedAlpn,
+ sizeof(NegotiatedAlpn),
+ &DecodedServerTP,
+ &DecodedAppData,
+ &DecodedAppDataLength));
+
+ ASSERT_EQ(DecodedAppDataLength, 0);
+ ASSERT_EQ(DecodedAppData, nullptr);
+ CompareTransportParameters(&ServerTP, &DecodedServerTP);
+
+ QUIC_FREE(EncodedServerTicket);
+}
+
+TEST(ResumptionTicketTest, ClientServerEndToEnd)
+{
+ uint8_t AppData[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
+ QUIC_TRANSPORT_PARAMETERS ServerTP, ClientTP, DecodedClientTP, DecodedServerTP;
+ uint8_t NegotiatedAlpn[] = {4, 't', 'e', 's', 't'};
+ uint8_t* EncodedServerTicket = nullptr, *DecodedServerTicket = nullptr;
+ uint32_t EncodedServerTicketLength = 0, EncodedClientTicketLength = 0, DecodedServerTicketLength = 0, DecodedAppDataLength = 0, DecodedQuicVersion = 0;
+ const uint8_t* EncodedClientTicket = nullptr, *DecodedAppData = nullptr;
+
+ QuicZeroMemory(&ServerTP, sizeof(ServerTP));
+ QuicZeroMemory(&DecodedServerTP, sizeof(DecodedServerTP));
+ ServerTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ ServerTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ QuicZeroMemory(&DecodedClientTP, sizeof(DecodedClientTP));
+ QuicZeroMemory(&ClientTP, sizeof(ClientTP));
+ ClientTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ ClientTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoEncodeServerTicket(
+ nullptr,
+ QUIC_VERSION_LATEST,
+ sizeof(AppData),
+ AppData,
+ &ServerTP,
+ NegotiatedAlpn[0],
+ NegotiatedAlpn + 1,
+ &EncodedServerTicket,
+ &EncodedServerTicketLength));
+
+ ASSERT_NE(EncodedServerTicket, nullptr);
+ ASSERT_NE(EncodedServerTicketLength, 0);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoEncodeClientTicket(
+ nullptr,
+ EncodedServerTicketLength,
+ EncodedServerTicket,
+ &ClientTP,
+ QUIC_VERSION_LATEST,
+ &EncodedClientTicket,
+ &EncodedClientTicketLength));
+
+ ASSERT_NE(EncodedClientTicket, nullptr);
+ ASSERT_NE(EncodedClientTicketLength, 0);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoDecodeClientTicket(
+ nullptr,
+ (uint16_t)EncodedClientTicketLength,
+ EncodedClientTicket,
+ &DecodedClientTP,
+ &DecodedServerTicket,
+ &DecodedServerTicketLength,
+ &DecodedQuicVersion));
+
+ ASSERT_EQ(QUIC_VERSION_LATEST, DecodedQuicVersion);
+ ASSERT_EQ(DecodedServerTicketLength, EncodedServerTicketLength);
+ ASSERT_NE(DecodedServerTicket, nullptr);
+ ASSERT_TRUE(memcmp(DecodedServerTicket, EncodedServerTicket, DecodedServerTicketLength) == 0);
+ CompareTransportParameters(&ClientTP, &DecodedClientTP);
+
+ TEST_QUIC_SUCCEEDED(
+ QuicCryptoDecodeServerTicket(
+ nullptr,
+ EncodedServerTicketLength,
+ EncodedServerTicket,
+ NegotiatedAlpn,
+ sizeof(NegotiatedAlpn),
+ &DecodedServerTP,
+ &DecodedAppData,
+ &DecodedAppDataLength));
+
+ ASSERT_EQ(DecodedAppDataLength, sizeof(AppData));
+ ASSERT_NE(DecodedAppData, nullptr);
+ ASSERT_TRUE(memcmp(AppData, DecodedAppData, sizeof(AppData)) == 0);
+ CompareTransportParameters(&ServerTP, &DecodedServerTP);
+
+ QUIC_FREE(EncodedClientTicket);
+ QUIC_FREE(EncodedServerTicket);
+ QUIC_FREE(DecodedServerTicket);
+}
diff --git a/src/core/unittest/TransportParamTest.cpp b/src/core/unittest/TransportParamTest.cpp
index 0d697ef09e..1badf5e1ff 100644
--- a/src/core/unittest/TransportParamTest.cpp
+++ b/src/core/unittest/TransportParamTest.cpp
@@ -22,9 +22,6 @@ void CompareTransportParams(
_In_ bool IsServer = false
)
{
-#define COMPARE_TP_FIELD(TpName, Field) \
- if (A->Flags & QUIC_TP_FLAG_##TpName) { ASSERT_EQ(A->Field, B->Field); }
-
ASSERT_EQ(A->Flags, B->Flags);
COMPARE_TP_FIELD(INITIAL_MAX_DATA, InitialMaxData);
COMPARE_TP_FIELD(INITIAL_MAX_STRM_DATA_BIDI_LOCAL, InitialMaxStreamDataBidiLocal);
@@ -57,7 +54,7 @@ void EncodeDecodeAndCompare(
uint32_t BufferLength;
auto Buffer =
QuicCryptoTlsEncodeTransportParameters(
- &JunkConnection, Original, &BufferLength);
+ &JunkConnection, IsServer, Original, NULL, &BufferLength);
ASSERT_NE(nullptr, Buffer);
ASSERT_TRUE(UINT16_MAX >= (BufferLength - QuicTlsTPHeaderSize));
@@ -68,7 +65,7 @@ void EncodeDecodeAndCompare(
QUIC_TRANSPORT_PARAMETERS Decoded;
BOOLEAN DecodedSuccessfully =
QuicCryptoTlsDecodeTransportParameters(
- &JunkConnection, TPBuffer, TPBufferLength, &Decoded);
+ &JunkConnection, IsServer, TPBuffer, TPBufferLength, &Decoded);
QUIC_FREE(Buffer);
@@ -99,3 +96,20 @@ TEST(TransportParamTest, Preset1)
Original.IdleTimeout = 100000;
EncodeDecodeAndCompare(&Original);
}
+
+TEST(TransportParamTest, ZeroTP)
+{
+ QUIC_TRANSPORT_PARAMETERS OriginalTP;
+ QuicZeroMemory(&OriginalTP, sizeof(OriginalTP));
+ OriginalTP.Flags =
+ QUIC_TP_FLAG_ACTIVE_CONNECTION_ID_LIMIT |
+ QUIC_TP_FLAG_INITIAL_MAX_DATA |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_LOCAL |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_BIDI_REMOTE |
+ QUIC_TP_FLAG_INITIAL_MAX_STRM_DATA_UNI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_BIDI |
+ QUIC_TP_FLAG_INITIAL_MAX_STRMS_UNI;
+ OriginalTP.ActiveConnectionIdLimit = QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT_MIN;
+
+ EncodeDecodeAndCompare(&OriginalTP);
+}
diff --git a/src/core/unittest/main.h b/src/core/unittest/main.h
index 290c93fff7..5dd71cae61 100644
--- a/src/core/unittest/main.h
+++ b/src/core/unittest/main.h
@@ -15,6 +15,9 @@
#define TEST_QUIC_SUCCEEDED(__condition) ASSERT_FALSE(QUIC_FAILED(__condition))
+#define COMPARE_TP_FIELD(TpName, Field) \
+ if (A->Flags & QUIC_TP_FLAG_##TpName) { ASSERT_EQ(A->Field, B->Field); }
+
inline
std::ostream& operator << (std::ostream& o, const QUIC_FRAME_TYPE& type) {
switch (type) {
diff --git a/src/core/worker.c b/src/core/worker.c
index 19eb8dec47..506fc73e12 100644
--- a/src/core/worker.c
+++ b/src/core/worker.c
@@ -418,9 +418,9 @@ QuicWorkerProcessTimers(
QUIC_CONTAINING_RECORD(Entry, QUIC_CONNECTION, TimerLink);
Connection->WorkerThreadID = Worker->ThreadID;
- QuicSessionAttachSilo(Connection->Session);
+ QuicConfigurationAttachSilo(Connection->Configuration);
QuicConnTimerExpired(Connection, TimeNow);
- QuicSessionDetachSilo();
+ QuicConfigurationDetachSilo();
Connection->WorkerThreadID = 0;
}
}
@@ -437,7 +437,7 @@ QuicWorkerProcessConnection(
"[conn][%p] Scheduling: %u",
Connection,
QUIC_SCHEDULE_PROCESSING);
- QuicSessionAttachSilo(Connection->Session);
+ QuicConfigurationAttachSilo(Connection->Configuration);
if (Connection->Stats.Schedule.LastQueueTime != 0) {
QuicWorkerUpdateQueueDelay(
@@ -516,7 +516,7 @@ QuicWorkerProcessConnection(
}
QuicDispatchLockRelease(&Worker->Lock);
- QuicSessionDetachSilo();
+ QuicConfigurationDetachSilo();
if (DoneWithConnection) {
if (Connection->State.UpdateWorker) {
@@ -638,8 +638,8 @@ QUIC_THREAD_CALLBACK(QuicWorkerThread, Context)
}
//
- // Because the session layer only waits for the session rundown to complete,
- // and because the connection releases the session rundown on handle close,
+ // Because the registration layer only waits for the rundown to complete,
+ // and because the connection releases the rundown on handle close,
// not free, it's possible that the worker thread still had the connection
// in it's list by the time clean up started. So it needs to release any
// remaining references on connections.
diff --git a/src/inc/msquic.h b/src/inc/msquic.h
index d67c493ce1..ac5392a25f 100644
--- a/src/inc/msquic.h
+++ b/src/inc/msquic.h
@@ -42,10 +42,7 @@ Supported Platforms:
extern "C" {
#endif
-
typedef struct QUIC_HANDLE *HQUIC;
-typedef struct QUIC_SEC_CONFIG QUIC_SEC_CONFIG;
-
//
// The maximum value that can be encoded in a 62-bit integer.
@@ -85,16 +82,23 @@ typedef enum QUIC_LOAD_BALANCING_MODE {
QUIC_LOAD_BALANCING_SERVER_ID_IP // Encodes IP address in Server ID
} QUIC_LOAD_BALANCING_MODE;
-typedef enum QUIC_SEC_CONFIG_FLAGS {
- QUIC_SEC_CONFIG_FLAG_NONE = 0x00000000,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH = 0x00000001,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE = 0x00000002,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT = 0x00000004,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE = 0x00000008,
- QUIC_SEC_CONFIG_FLAG_ENABLE_OCSP = 0x00000010
-} QUIC_SEC_CONFIG_FLAGS;
+typedef enum QUIC_CREDENTIAL_TYPE {
+ QUIC_CREDENTIAL_TYPE_NONE,
+ QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH,
+ QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE,
+ QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT,
+ QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE
+} QUIC_CREDENTIAL_TYPE;
-DEFINE_ENUM_FLAG_OPERATORS(QUIC_SEC_CONFIG_FLAGS);
+typedef enum QUIC_CREDENTIAL_FLAGS {
+ QUIC_CREDENTIAL_FLAG_NONE = 0x00000000,
+ QUIC_CREDENTIAL_FLAG_CLIENT = 0x00000001, // Lack of client flag indicates server.
+ QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS = 0x00000002,
+ QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION = 0x00000004,
+ QUIC_CREDENTIAL_FLAG_ENABLE_OCSP = 0x00000008
+} QUIC_CREDENTIAL_FLAGS;
+
+DEFINE_ENUM_FLAG_OPERATORS(QUIC_CREDENTIAL_FLAGS);
typedef enum QUIC_CERTIFICATE_HASH_STORE_FLAGS {
QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE = 0x0000,
@@ -197,6 +201,18 @@ typedef struct QUIC_REGISTRATION_CONFIG { // All fields may be NULL/zero.
QUIC_EXECUTION_PROFILE ExecutionProfile;
} QUIC_REGISTRATION_CONFIG;
+typedef
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Function_class_(QUIC_CREDENTIAL_LOAD_COMPLETE)
+void
+(QUIC_API QUIC_CREDENTIAL_LOAD_COMPLETE)(
+ _In_ HQUIC Configuration,
+ _In_opt_ void* Context,
+ _In_ QUIC_STATUS Status
+ );
+
+typedef QUIC_CREDENTIAL_LOAD_COMPLETE *QUIC_CREDENTIAL_LOAD_COMPLETE_HANDLER;
+
typedef struct QUIC_CERTIFICATE_HASH {
uint8_t ShaHash[20];
} QUIC_CERTIFICATE_HASH;
@@ -212,6 +228,22 @@ typedef struct QUIC_CERTIFICATE_FILE {
char *CertificateFile;
} QUIC_CERTIFICATE_FILE;
+typedef void QUIC_CERTIFICATE; // Platform specific certificate context object
+
+typedef struct QUIC_CREDENTIAL_CONFIG {
+ QUIC_CREDENTIAL_TYPE Type;
+ QUIC_CREDENTIAL_FLAGS Flags;
+ union {
+ QUIC_CERTIFICATE_HASH* CertificateHash;
+ QUIC_CERTIFICATE_HASH_STORE* CertificateHashStore;
+ QUIC_CERTIFICATE* CertificateContext;
+ QUIC_CERTIFICATE_FILE* CertificateFile;
+ };
+ const char* Principal;
+ void* TicketKey; // Optional, 44 byte array
+ QUIC_CREDENTIAL_LOAD_COMPLETE_HANDLER AsyncHandler; // Optional
+} QUIC_CREDENTIAL_CONFIG;
+
//
// A single contiguous buffer.
//
@@ -357,8 +389,8 @@ typedef struct QUIC_SETTINGS {
uint64_t PeerUnidiStreamCount : 1;
uint64_t RetryMemoryLimit : 1;
uint64_t LoadBalancingMode : 1;
- uint64_t MaxPartitionCount : 1;
uint64_t MaxOperationsPerDrain : 1;
+ uint64_t SendBufferingEnabled : 1;
uint64_t PacingEnabled : 1;
uint64_t MigrationEnabled : 1;
uint64_t DatagramReceiveEnabled : 1;
@@ -387,13 +419,13 @@ typedef struct QUIC_SETTINGS {
uint16_t PeerUnidiStreamCount;
uint16_t RetryMemoryLimit; // Global only
uint16_t LoadBalancingMode; // Global only
- uint16_t MaxPartitionCount; // Global only
- uint8_t MaxOperationsPerDrain; // Global only
+ uint8_t MaxOperationsPerDrain;
+ uint8_t SendBufferingEnabled : 1;
uint8_t PacingEnabled : 1;
uint8_t MigrationEnabled : 1;
uint8_t DatagramReceiveEnabled : 1;
uint8_t ServerResumptionLevel : 2; // QUIC_SERVER_RESUMPTION_LEVEL
- uint8_t RESERVED : 3;
+ uint8_t RESERVED : 2;
} QUIC_SETTINGS;
@@ -436,7 +468,7 @@ void
typedef enum QUIC_PARAM_LEVEL {
QUIC_PARAM_LEVEL_GLOBAL,
QUIC_PARAM_LEVEL_REGISTRATION,
- QUIC_PARAM_LEVEL_SESSION,
+ QUIC_PARAM_LEVEL_CONFIGURATION,
QUIC_PARAM_LEVEL_LISTENER,
QUIC_PARAM_LEVEL_CONNECTION,
QUIC_PARAM_LEVEL_TLS,
@@ -450,6 +482,7 @@ typedef enum QUIC_PARAM_LEVEL {
#define QUIC_PARAM_GLOBAL_SUPPORTED_VERSIONS 1 // uint32_t[] - network byte order
#define QUIC_PARAM_GLOBAL_LOAD_BALACING_MODE 2 // uint16_t - QUIC_LOAD_BALANCING_MODE
#define QUIC_PARAM_GLOBAL_PERF_COUNTERS 3 // uint64_t[] - Array size is QUIC_PERF_COUNTER_MAX
+#define QUIC_PARAM_GLOBAL_SETTINGS 4 // QUIC_SETTINGS
//
// Parameters for QUIC_PARAM_LEVEL_REGISTRATION.
@@ -457,9 +490,9 @@ typedef enum QUIC_PARAM_LEVEL {
#define QUIC_PARAM_REGISTRATION_CID_PREFIX 0 // uint8_t[]
//
-// Parameters for QUIC_PARAM_LEVEL_SESSION.
+// Parameters for QUIC_PARAM_LEVEL_CONFIGURATION.
//
-#define QUIC_PARAM_SESSION_TLS_TICKET_KEY 0 // uint8_t[44]
+#define QUIC_PARAM_CONFIGURATION_SETTINGS 0 // QUIC_SETTINGS
//
// Parameters for QUIC_PARAM_LEVEL_LISTENER.
@@ -473,38 +506,22 @@ typedef enum QUIC_PARAM_LEVEL {
#define QUIC_PARAM_CONN_QUIC_VERSION 0 // uint32_t
#define QUIC_PARAM_CONN_LOCAL_ADDRESS 1 // QUIC_ADDR
#define QUIC_PARAM_CONN_REMOTE_ADDRESS 2 // QUIC_ADDR
-#define QUIC_PARAM_CONN_IDLE_TIMEOUT 3 // uint64_t - milliseconds
-#define QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT 4 // uint16_t
-#define QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT 5 // uint16_t
-#define QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT 6 // uint16_t
-#define QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT 7 // uint16_t
-#define QUIC_PARAM_CONN_CLOSE_REASON_PHRASE 8 // char[]
-#define QUIC_PARAM_CONN_STATISTICS 9 // QUIC_STATISTICS
-#define QUIC_PARAM_CONN_STATISTICS_PLAT 10 // QUIC_STATISTICS
-#define QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS 11 // uint32_t
-#define QUIC_PARAM_CONN_KEEP_ALIVE 12 // uint32_t - milliseconds
-#define QUIC_PARAM_CONN_DISCONNECT_TIMEOUT 13 // uint32_t - milliseconds
-#define QUIC_PARAM_CONN_SEC_CONFIG 14 // QUIC_SEC_CONFIG*
-#define QUIC_PARAM_CONN_SEND_BUFFERING 15 // uint8_t (BOOLEAN)
-#define QUIC_PARAM_CONN_SEND_PACING 16 // uint8_t (BOOLEAN)
-#define QUIC_PARAM_CONN_SHARE_UDP_BINDING 17 // uint8_t (BOOLEAN)
-#define QUIC_PARAM_CONN_IDEAL_PROCESSOR 18 // uint16_t
-#define QUIC_PARAM_CONN_MAX_STREAM_IDS 19 // uint64_t[4]
-#define QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME 20 // QUIC_STREAM_SCHEDULING_SCHEME
-#define QUIC_PARAM_CONN_DATAGRAM_RECEIVE_ENABLED 21 // uint8_t (BOOLEAN)
-#define QUIC_PARAM_CONN_DATAGRAM_SEND_ENABLED 22 // uint8_t (BOOLEAN)
+#define QUIC_PARAM_CONN_IDEAL_PROCESSOR 3 // uint16_t
+#define QUIC_PARAM_CONN_SETTINGS 4 // QUIC_SETTINGS
+#define QUIC_PARAM_CONN_STATISTICS 5 // QUIC_STATISTICS
+#define QUIC_PARAM_CONN_STATISTICS_PLAT 6 // QUIC_STATISTICS
+#define QUIC_PARAM_CONN_SHARE_UDP_BINDING 7 // uint8_t (BOOLEAN)
+#define QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT 8 // uint16_t
+#define QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT 9 // uint16_t
+#define QUIC_PARAM_CONN_MAX_STREAM_IDS 10 // uint64_t[4]
+#define QUIC_PARAM_CONN_CLOSE_REASON_PHRASE 11 // char[]
+#define QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME 12 // QUIC_STREAM_SCHEDULING_SCHEME
+#define QUIC_PARAM_CONN_DATAGRAM_RECEIVE_ENABLED 13 // uint8_t (BOOLEAN)
+#define QUIC_PARAM_CONN_DATAGRAM_SEND_ENABLED 14 // uint8_t (BOOLEAN)
#ifdef QUIC_API_ENABLE_INSECURE_FEATURES
-#define QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION 23 // uint8_t (BOOLEAN)
-#endif
-
-#ifdef WIN32 // Windows certificate validation ignore flags.
-#define QUIC_CERTIFICATE_FLAG_IGNORE_REVOCATION 0x00000080
-#define QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA 0x00000100
-#define QUIC_CERTIFICATE_FLAG_IGNORE_WRONG_USAGE 0x00000200
-#define QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID 0x00001000 // bad common name in X509 Cert.
-#define QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_DATE_INVALID 0x00002000 // expired X509 Cert.
-#define QUIC_CERTIFICATE_FLAG_IGNORE_WEAK_SIGNATURE 0x00010000
+#define QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION 15 // uint8_t (BOOLEAN)
#endif
+#define QUIC_PARAM_CONN_RESUMPTION_STATE 16 // uint8_t[]
//
// Parameters for QUIC_PARAM_LEVEL_TLS.
@@ -569,7 +586,10 @@ QUIC_STATUS
);
//
-// Closes the registration.
+// Closes the registration. This function synchronizes the cleanup of all
+// child objects. It does this by blocking until all those child objects have
+// been closed by the application.
+// N.B. This function will deadlock if called in any MsQuic callbacks.
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -580,92 +600,61 @@ void
);
//
-// Security Configuration Interface.
+// Calls shutdown for all connections in this registration. Don't call on a
+// MsQuic callback thread or it might deadlock.
//
-
typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
+_IRQL_requires_max_(DISPATCH_LEVEL)
void
-(QUIC_API QUIC_SEC_CONFIG_CREATE_COMPLETE)(
- _In_opt_ void* Context,
- _In_ QUIC_STATUS Status,
- _In_opt_ QUIC_SEC_CONFIG* SecurityConfig
- );
-
-typedef QUIC_SEC_CONFIG_CREATE_COMPLETE *QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER;
-
-//
-// Create a new security config.
-//
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-(QUIC_API * QUIC_SEC_CONFIG_CREATE_FN)(
+(QUIC_API * QUIC_REGISTRATION_SHUTDOWN_FN)(
_In_ _Pre_defensive_ HQUIC Registration,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
- _In_opt_ void* Context,
- _In_ _Pre_defensive_
- QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
- );
-
-typedef
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-(QUIC_API * QUIC_SEC_CONFIG_DELETE_FN)(
- _In_ _Pre_defensive_ QUIC_SEC_CONFIG* SecurityConfig
+ _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
+ _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode // Application defined error code
);
//
-// Session Context Interface.
+// Configuration Interface.
//
//
-// Opens a new session.
+// Opens a new configuration.
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-(QUIC_API * QUIC_SESSION_OPEN_FN)(
+(QUIC_API * QUIC_CONFIGURATION_OPEN_FN)(
_In_ _Pre_defensive_ HQUIC Registration,
- _In_ uint32_t SettingsSize,
- _In_reads_bytes_opt_(SettingsSize)
- const QUIC_SETTINGS* Settings,
_In_reads_(AlpnBufferCount) _Pre_defensive_
const QUIC_BUFFER* const AlpnBuffers,
_In_range_(>, 0) uint32_t AlpnBufferCount,
+ _In_reads_bytes_opt_(SettingsSize)
+ const QUIC_SETTINGS* Settings,
+ _In_ uint32_t SettingsSize,
_In_opt_ void* Context,
- _Outptr_ _At_(*Session, __drv_allocatesMem(Mem)) _Pre_defensive_
- HQUIC* Session
+ _Outptr_ _At_(*Configuration, __drv_allocatesMem(Mem)) _Pre_defensive_
+ HQUIC* Configuration
);
//
-// Closes an existing session. This function synchronizes the cleanup of all
-// child objects (listeners and connections). It does this by blocking until
-// all those child objects have been closed by the application.
-// N.B. This function will deadlock if called in any MsQuic callbacks.
+// Closes an existing configuration.
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-(QUIC_API * QUIC_SESSION_CLOSE_FN)(
+(QUIC_API * QUIC_CONFIGURATION_CLOSE_FN)(
_In_ _Pre_defensive_ __drv_freesMem(Mem)
- HQUIC Session
+ HQUIC Configuration
);
//
-// Calls shutdown for all connections in this session. Don't call on a MsQuic
-// callback thread or it might deadlock.
+// Loads the credentials based on the input configuration.
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-(QUIC_API * QUIC_SESSION_SHUTDOWN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
- _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
- _In_ _Pre_defensive_ QUIC_UINT62 ErrorCode // Application defined error code
+QUIC_STATUS
+(QUIC_API * QUIC_CONFIGURATION_LOAD_CREDENTIAL_FN)(
+ _In_ _Pre_defensive_ HQUIC Configuration,
+ _In_ _Pre_defensive_ const QUIC_CREDENTIAL_CONFIG* CredConfig
);
//
@@ -680,9 +669,8 @@ typedef struct QUIC_LISTENER_EVENT {
QUIC_LISTENER_EVENT_TYPE Type;
union {
struct {
- /* in */ const QUIC_NEW_CONNECTION_INFO* Info;
- /* in */ HQUIC Connection;
- /* out */ QUIC_SEC_CONFIG* SecurityConfig;
+ const QUIC_NEW_CONNECTION_INFO* Info;
+ HQUIC Connection;
} NEW_CONNECTION;
};
} QUIC_LISTENER_EVENT;
@@ -706,7 +694,7 @@ typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_LISTENER_OPEN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ _Pre_defensive_ QUIC_LISTENER_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Listener, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -733,6 +721,9 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_LISTENER_START_FN)(
_In_ _Pre_defensive_ HQUIC Listener,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR* LocalAddress
);
@@ -822,7 +813,7 @@ typedef struct QUIC_CONNECTION_EVENT {
const uint8_t* ResumptionState;
} RESUMED;
struct {
- uint16_t ResumptionTicketLength;
+ uint32_t ResumptionTicketLength;
const uint8_t* ResumptionTicket;
} RESUMPTION_TICKET_RECEIVED;
};
@@ -847,7 +838,7 @@ typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_CONNECTION_OPEN_FN)(
- _In_ _Pre_defensive_ HQUIC Session,
+ _In_ _Pre_defensive_ HQUIC Registration,
_In_ _Pre_defensive_ QUIC_CONNECTION_CALLBACK_HANDLER Handler,
_In_opt_ void* Context,
_Outptr_ _At_(*Connection, __drv_allocatesMem(Mem)) _Pre_defensive_
@@ -889,12 +880,25 @@ _IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
(QUIC_API * QUIC_CONNECTION_START_FN)(
_In_ _Pre_defensive_ HQUIC Connection,
+ _In_ _Pre_defensive_ HQUIC Configuration,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_reads_opt_z_(QUIC_MAX_SNI_LENGTH)
const char* ServerName,
_In_ uint16_t ServerPort // Host byte order
);
+//
+// Sets the (server-side) configuration handle for the connection. This must be
+// called on an accepted connection in order to proceed with the QUIC handshake.
+//
+typedef
+_IRQL_requires_max_(DISPATCH_LEVEL)
+QUIC_STATUS
+(QUIC_API * QUIC_CONNECTION_SET_CONFIGURATION_FN)(
+ _In_ _Pre_defensive_ HQUIC Connection,
+ _In_ _Pre_defensive_ HQUIC Configuration
+ );
+
//
// Uses the QUIC (server) handle to send a resumption ticket to the remote
// client, optionally with app-specific data useful during resumption.
@@ -1094,13 +1098,12 @@ typedef struct QUIC_API_TABLE {
QUIC_REGISTRATION_OPEN_FN RegistrationOpen;
QUIC_REGISTRATION_CLOSE_FN RegistrationClose;
+ QUIC_REGISTRATION_SHUTDOWN_FN RegistrationShutdown;
- QUIC_SEC_CONFIG_CREATE_FN SecConfigCreate;
- QUIC_SEC_CONFIG_DELETE_FN SecConfigDelete;
-
- QUIC_SESSION_OPEN_FN SessionOpen;
- QUIC_SESSION_CLOSE_FN SessionClose;
- QUIC_SESSION_SHUTDOWN_FN SessionShutdown;
+ QUIC_CONFIGURATION_OPEN_FN ConfigurationOpen;
+ QUIC_CONFIGURATION_CLOSE_FN ConfigurationClose;
+ QUIC_CONFIGURATION_LOAD_CREDENTIAL_FN
+ ConfigurationLoadCredential;
QUIC_LISTENER_OPEN_FN ListenerOpen;
QUIC_LISTENER_CLOSE_FN ListenerClose;
@@ -1111,6 +1114,8 @@ typedef struct QUIC_API_TABLE {
QUIC_CONNECTION_CLOSE_FN ConnectionClose;
QUIC_CONNECTION_SHUTDOWN_FN ConnectionShutdown;
QUIC_CONNECTION_START_FN ConnectionStart;
+ QUIC_CONNECTION_SET_CONFIGURATION_FN
+ ConnectionSetConfiguration;
QUIC_CONNECTION_SEND_RESUMPTION_FN ConnectionSendResumptionTicket;
QUIC_STREAM_OPEN_FN StreamOpen;
diff --git a/src/inc/msquic.hpp b/src/inc/msquic.hpp
index 51eb0e3a31..4d382e7f27 100644
--- a/src/inc/msquic.hpp
+++ b/src/inc/msquic.hpp
@@ -22,22 +22,26 @@ Supported Platforms:
#include
+#ifndef QUIC_DBG_ASSERT
+#define QUIC_DBG_ASSERT(X) // no-op if not already defined
+#endif
+
struct QuicAddr {
QUIC_ADDR SockAddr;
QuicAddr() {
- QuicZeroMemory(&SockAddr, sizeof(SockAddr));
+ memset(&SockAddr, 0, sizeof(SockAddr));
}
QuicAddr(QUIC_ADDRESS_FAMILY af) {
- QuicZeroMemory(&SockAddr, sizeof(SockAddr));
+ memset(&SockAddr, 0, sizeof(SockAddr));
QuicAddrSetFamily(&SockAddr, af);
}
QuicAddr(QUIC_ADDRESS_FAMILY af, uint16_t Port) {
- QuicZeroMemory(&SockAddr, sizeof(SockAddr));
+ memset(&SockAddr, 0, sizeof(SockAddr));
QuicAddrSetFamily(&SockAddr, af);
QuicAddrSetPort(&SockAddr, Port);
}
QuicAddr(QUIC_ADDRESS_FAMILY af, bool /*unused*/) {
- QuicZeroMemory(&SockAddr, sizeof(SockAddr));
+ memset(&SockAddr, 0, sizeof(SockAddr));
QuicAddrSetFamily(&SockAddr, af);
QuicAddrSetToLoopback(&SockAddr);
}
@@ -190,7 +194,7 @@ class MsQuicApi : public QUIC_API_TABLE {
MsQuicApi() noexcept {
if (QUIC_SUCCEEDED(InitStatus = MsQuicOpen(&ApiTable))) {
QUIC_API_TABLE* thisTable = this;
- QuicCopyMemory(thisTable, ApiTable, sizeof(*ApiTable));
+ memcpy(thisTable, ApiTable, sizeof(*ApiTable));
}
}
~MsQuicApi() noexcept {
@@ -198,7 +202,7 @@ class MsQuicApi : public QUIC_API_TABLE {
MsQuicClose(ApiTable);
ApiTable = nullptr;
QUIC_API_TABLE* thisTable = this;
- QuicZeroMemory(thisTable, sizeof(*thisTable));
+ memset(thisTable, 0, sizeof(*thisTable));
}
}
QUIC_STATUS GetInitStatus() const noexcept { return InitStatus; }
@@ -207,24 +211,45 @@ class MsQuicApi : public QUIC_API_TABLE {
extern const MsQuicApi* MsQuic;
class MsQuicRegistration {
+ bool CloseAllConnectionsOnDelete {false};
HQUIC Handle {nullptr};
QUIC_STATUS InitStatus;
public:
operator HQUIC () const noexcept { return Handle; }
- MsQuicRegistration() noexcept {
+ MsQuicRegistration(
+ _In_ bool AutoCleanUp = false
+ ) noexcept : CloseAllConnectionsOnDelete(AutoCleanUp) {
InitStatus = MsQuic->RegistrationOpen(nullptr, &Handle);
}
- MsQuicRegistration(_In_z_ const char* AppName, QUIC_EXECUTION_PROFILE Profile = QUIC_EXECUTION_PROFILE_LOW_LATENCY) noexcept {
+ MsQuicRegistration(
+ _In_z_ const char* AppName,
+ QUIC_EXECUTION_PROFILE Profile = QUIC_EXECUTION_PROFILE_LOW_LATENCY,
+ _In_ bool AutoCleanUp = false
+ ) noexcept : CloseAllConnectionsOnDelete(AutoCleanUp) {
const QUIC_REGISTRATION_CONFIG RegConfig = { AppName, Profile };
InitStatus = MsQuic->RegistrationOpen(&RegConfig, &Handle);
}
~MsQuicRegistration() noexcept {
- MsQuic->RegistrationClose(Handle);
+ if (Handle != nullptr) {
+ if (CloseAllConnectionsOnDelete) {
+ MsQuic->RegistrationShutdown(
+ Handle,
+ QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT,
+ 1);
+ }
+ MsQuic->RegistrationClose(Handle);
+ }
}
QUIC_STATUS GetInitStatus() const noexcept { return InitStatus; }
- bool IsValid() const noexcept { return Handle != nullptr; }
+ bool IsValid() const noexcept { return QUIC_SUCCEEDED(InitStatus); }
MsQuicRegistration(MsQuicRegistration& other) = delete;
MsQuicRegistration operator=(MsQuicRegistration& Other) = delete;
+ void Shutdown(
+ _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
+ _In_ QUIC_UINT62 ErrorCode
+ ) noexcept {
+ MsQuic->RegistrationShutdown(Handle, Flags, ErrorCode);
+ }
};
class MsQuicAlpn {
@@ -250,6 +275,7 @@ class MsQuicAlpn {
class MsQuicSettings : public QUIC_SETTINGS {
public:
MsQuicSettings() noexcept { IsSetFlags = 0; }
+ MsQuicSettings& SetSendBufferingEnabled(bool Value) { SendBufferingEnabled = Value; IsSet.SendBufferingEnabled = TRUE; return *this; }
MsQuicSettings& SetPacingEnabled(bool Value) { PacingEnabled = Value; IsSet.PacingEnabled = TRUE; return *this; }
MsQuicSettings& SetMigrationEnabled(bool Value) { MigrationEnabled = Value; IsSet.MigrationEnabled = TRUE; return *this; }
MsQuicSettings& SetDatagramReceiveEnabled(bool Value) { DatagramReceiveEnabled = Value; IsSet.DatagramReceiveEnabled = TRUE; return *this; }
@@ -262,78 +288,110 @@ class MsQuicSettings : public QUIC_SETTINGS {
MsQuicSettings& SetMaxBytesPerKey(uint64_t Value) { MaxBytesPerKey = Value; IsSet.MaxBytesPerKey = TRUE; return *this; }
};
-class MsQuicSession {
- bool CloseAllConnectionsOnDelete {false};
- QUIC_STATUS InitStatus;
+#ifndef QUIC_DEFAULT_CLIENT_CRED_FLAGS
+#define QUIC_DEFAULT_CLIENT_CRED_FLAGS QUIC_CREDENTIAL_FLAG_CLIENT
+#endif
+
+class MsQuicCredentialConfig : public QUIC_CREDENTIAL_CONFIG {
public:
+ MsQuicCredentialConfig(const QUIC_CREDENTIAL_CONFIG& Config) {
+ QUIC_CREDENTIAL_CONFIG* thisStruct = this;
+ memcpy(thisStruct, &Config, sizeof(QUIC_CREDENTIAL_CONFIG));
+ }
+ MsQuicCredentialConfig(QUIC_CREDENTIAL_FLAGS _Flags = QUIC_DEFAULT_CLIENT_CRED_FLAGS) {
+ QUIC_CREDENTIAL_CONFIG* thisStruct = this;
+ memset(thisStruct, 0, sizeof(QUIC_CREDENTIAL_CONFIG));
+ Flags = _Flags;
+ }
+};
+
+class MsQuicConfiguration {
HQUIC Handle {nullptr};
+ QUIC_STATUS InitStatus;
+public:
operator HQUIC () const noexcept { return Handle; }
- MsQuicSession(
+ MsQuicConfiguration(
+ _In_ const MsQuicRegistration& Reg,
+ _In_ const MsQuicAlpn& Alpns
+ ) {
+ InitStatus = !Reg.IsValid() ?
+ Reg.GetInitStatus() :
+ MsQuic->ConfigurationOpen(
+ Reg,
+ Alpns,
+ Alpns.Length(),
+ nullptr,
+ 0,
+ nullptr,
+ &Handle);
+ }
+ MsQuicConfiguration(
_In_ const MsQuicRegistration& Reg,
_In_ const MsQuicAlpn& Alpns,
- _In_ bool AutoCleanUp = false
- ) noexcept : CloseAllConnectionsOnDelete(AutoCleanUp) {
+ _In_ const MsQuicCredentialConfig& CredConfig
+ ) {
InitStatus = !Reg.IsValid() ?
Reg.GetInitStatus() :
- MsQuic->SessionOpen(
+ MsQuic->ConfigurationOpen(
Reg,
+ Alpns,
+ Alpns.Length(),
+ nullptr,
0,
nullptr,
+ &Handle);
+ if (IsValid()) {
+ InitStatus = LoadCredential(&CredConfig);
+ }
+ }
+ MsQuicConfiguration(
+ _In_ const MsQuicRegistration& Reg,
+ _In_ const MsQuicAlpn& Alpns,
+ _In_ const MsQuicSettings& Settings
+ ) noexcept {
+ InitStatus = !Reg.IsValid() ?
+ Reg.GetInitStatus() :
+ MsQuic->ConfigurationOpen(
+ Reg,
Alpns,
Alpns.Length(),
+ &Settings,
+ sizeof(Settings),
nullptr,
&Handle);
}
- MsQuicSession(
+ MsQuicConfiguration(
_In_ const MsQuicRegistration& Reg,
_In_ const MsQuicAlpn& Alpns,
_In_ const MsQuicSettings& Settings,
- _In_ bool AutoCleanUp = false
- ) noexcept : CloseAllConnectionsOnDelete(AutoCleanUp) {
+ _In_ const MsQuicCredentialConfig& CredConfig
+ ) noexcept {
InitStatus = !Reg.IsValid() ?
Reg.GetInitStatus() :
- MsQuic->SessionOpen(
+ MsQuic->ConfigurationOpen(
Reg,
- sizeof(Settings),
- &Settings,
Alpns,
Alpns.Length(),
+ &Settings,
+ sizeof(Settings),
nullptr,
&Handle);
+ if (IsValid()) {
+ InitStatus = LoadCredential(&CredConfig);
+ }
}
- ~MsQuicSession() noexcept {
+ ~MsQuicConfiguration() noexcept {
if (Handle != nullptr) {
- if (CloseAllConnectionsOnDelete) {
- MsQuic->SessionShutdown(
- Handle,
- QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT,
- 1);
- }
- MsQuic->SessionClose(Handle);
+ MsQuic->ConfigurationClose(Handle);
}
}
QUIC_STATUS GetInitStatus() const noexcept { return InitStatus; }
- bool IsValid() const noexcept { return Handle != nullptr; }
- MsQuicSession(MsQuicSession& other) = delete;
- MsQuicSession operator=(MsQuicSession& Other) = delete;
- void Shutdown(
- _In_ QUIC_CONNECTION_SHUTDOWN_FLAGS Flags,
- _In_ QUIC_UINT62 ErrorCode
- ) noexcept {
- MsQuic->SessionShutdown(Handle, Flags, ErrorCode);
- }
+ bool IsValid() const noexcept { return QUIC_SUCCEEDED(InitStatus); }
+ MsQuicConfiguration(MsQuicConfiguration& other) = delete;
+ MsQuicConfiguration operator=(MsQuicConfiguration& Other) = delete;
QUIC_STATUS
- SetTlsTicketKey(
- _In_reads_bytes_(44)
- const uint8_t* const Buffer
- ) noexcept {
- return
- MsQuic->SetParam(
- Handle,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- 44,
- Buffer);
+ LoadCredential(_In_ const QUIC_CREDENTIAL_CONFIG* CredConfig) noexcept {
+ return MsQuic->ConfigurationLoadCredential(Handle, CredConfig);
}
};
@@ -343,15 +401,15 @@ struct MsQuicListener {
QUIC_LISTENER_CALLBACK_HANDLER Handler { nullptr };
void* Context{ nullptr };
- MsQuicListener(const MsQuicSession& Session) noexcept {
- if (!Session.IsValid()) {
- InitStatus = Session.GetInitStatus();
+ MsQuicListener(const MsQuicRegistration& Registration) noexcept {
+ if (!Registration.IsValid()) {
+ InitStatus = Registration.GetInitStatus();
return;
}
if (QUIC_FAILED(
InitStatus =
MsQuic->ListenerOpen(
- Session,
+ Registration,
[](HQUIC Handle, void* Context, QUIC_LISTENER_EVENT* Event) -> QUIC_STATUS {
MsQuicListener* Listener = (MsQuicListener*)Context;
return Listener->Handler(Handle, Listener->Context, Event);
@@ -372,12 +430,13 @@ struct MsQuicListener {
QUIC_STATUS
Start(
+ _In_ const MsQuicAlpn& Alpns,
_In_ QUIC_ADDR* Address,
_In_ QUIC_LISTENER_CALLBACK_HANDLER _Handler,
_In_ void* _Context) noexcept {
Handler = _Handler;
Context = _Context;
- return MsQuic->ListenerStart(Handle, Address);
+ return MsQuic->ListenerStart(Handle, Alpns, Alpns.Length(), Address);
}
QUIC_STATUS
@@ -386,7 +445,7 @@ struct MsQuicListener {
}
QUIC_STATUS GetInitStatus() const noexcept { return InitStatus; }
- bool IsValid() const { return Handle != nullptr; }
+ bool IsValid() const { return QUIC_SUCCEEDED(InitStatus); }
MsQuicListener(MsQuicListener& other) = delete;
MsQuicListener operator=(MsQuicListener& Other) = delete;
operator HQUIC () const noexcept { return Handle; }
@@ -416,23 +475,31 @@ struct StreamScope {
operator HQUIC() const noexcept { return Handle; }
};
-struct EventScope {
- QUIC_EVENT Handle;
- EventScope() noexcept { QuicEventInitialize(&Handle, FALSE, FALSE); }
- EventScope(bool ManualReset) noexcept { QuicEventInitialize(&Handle, ManualReset, FALSE); }
- EventScope(QUIC_EVENT event) noexcept : Handle(event) { }
- ~EventScope() noexcept { QuicEventUninitialize(Handle); }
- operator QUIC_EVENT() const noexcept { return Handle; }
-};
-
struct QuicBufferScope {
QUIC_BUFFER* Buffer;
QuicBufferScope() noexcept : Buffer(nullptr) { }
QuicBufferScope(uint32_t Size) noexcept : Buffer((QUIC_BUFFER*) new uint8_t[sizeof(QUIC_BUFFER) + Size]) {
- QuicZeroMemory(Buffer, sizeof(*Buffer) + Size);
+ memset(Buffer, 0, sizeof(*Buffer) + Size);
Buffer->Length = Size;
Buffer->Buffer = (uint8_t*)(Buffer + 1);
}
operator QUIC_BUFFER* () noexcept { return Buffer; }
~QuicBufferScope() noexcept { if (Buffer) { delete[](uint8_t*) Buffer; } }
};
+
+#ifdef QUIC_PLATFORM_TYPE
+
+//
+// Abstractions for platform specific types/interfaces
+//
+
+struct EventScope {
+ QUIC_EVENT Handle;
+ EventScope() noexcept { QuicEventInitialize(&Handle, FALSE, FALSE); }
+ EventScope(bool ManualReset) noexcept { QuicEventInitialize(&Handle, ManualReset, FALSE); }
+ EventScope(QUIC_EVENT event) noexcept : Handle(event) { }
+ ~EventScope() noexcept { QuicEventUninitialize(Handle); }
+ operator QUIC_EVENT() const noexcept { return Handle; }
+};
+
+#endif
diff --git a/src/inc/msquic_linux.h b/src/inc/msquic_linux.h
index 16064deb73..4ef6899d50 100644
--- a/src/inc/msquic_linux.h
+++ b/src/inc/msquic_linux.h
@@ -32,7 +32,8 @@
#include
#include
#include
-#include
+#include
+#include
#include "quic_sal_stub.h"
#ifdef __cplusplus
diff --git a/src/inc/msquichelper.h b/src/inc/msquichelper.h
index c4df80c83c..2407d377bf 100644
--- a/src/inc/msquichelper.h
+++ b/src/inc/msquichelper.h
@@ -21,6 +21,15 @@
#include
#include
+typedef struct QUIC_CREDENTIAL_CONFIG_HELPER {
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ union {
+ QUIC_CERTIFICATE_HASH CertHash;
+ QUIC_CERTIFICATE_HASH_STORE CertHashStore;
+ QUIC_CERTIFICATE_FILE CertFile;
+ };
+} QUIC_CREDENTIAL_CONFIG_HELPER;
+
//
// Converts the QUIC Status Code to a string for console output.
//
@@ -239,229 +248,8 @@ DecodeHexBuffer(
return HexBufferLen;
}
-//
-// Helper function to take a hex encoded byte string for the resumption state.
-//
-inline
-BOOLEAN
-SetResumptionState(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Handle,
- _In_z_ const char* SerializedState
- )
-{
- uint8_t State[2048];
- uint32_t StateLen =
- DecodeHexBuffer(SerializedState, sizeof(State), State);
-
- if (StateLen == 0) {
- return FALSE;
- }
-
- return
- QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Handle,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_ADD_RESUMPTION_STATE,
- StateLen,
- State));
-}
-
#if defined(__cplusplus)
-struct CreateSecConfigHelper {
- QUIC_EVENT Complete;
- QUIC_SEC_CONFIG* SecurityConfig;
-
- CreateSecConfigHelper() : SecurityConfig(nullptr) {
- QuicEventInitialize(&Complete, FALSE, FALSE);
- }
-
- ~CreateSecConfigHelper() {
- QuicEventUninitialize(Complete);
- }
-
- _Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
- static void
- QUIC_API
- GetSecConfigComplete(
- _In_opt_ void* Context,
- _In_ QUIC_STATUS /* Status */,
- _In_opt_ QUIC_SEC_CONFIG* SecurityConfig
- )
- {
- _Analysis_assume_(Context);
- auto HelperContext = (CreateSecConfigHelper*)Context;
- HelperContext->SecurityConfig = SecurityConfig;
- QuicEventSet(HelperContext->Complete);
- }
-
- QUIC_SEC_CONFIG*
- Create(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ _Pre_defensive_ HQUIC Registration,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal
- )
- {
- if (QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- Registration,
- Flags,
- Certificate,
- Principal,
- this,
- GetSecConfigComplete))) {
- QuicEventWaitForever(Complete);
- }
- return SecurityConfig;
- }
-};
-
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForCertContext(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_ void* CertContext
- )
-{
- CreateSecConfigHelper Helper;
- return
- Helper.Create(
- MsQuic,
- Registration,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT,
- CertContext,
- nullptr);
-}
-
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForSNI(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_z_ const char* ServerName
- )
-{
- CreateSecConfigHelper Helper;
- return
- Helper.Create(
- MsQuic,
- Registration,
- QUIC_SEC_CONFIG_FLAG_NONE,
- nullptr,
- ServerName);
-}
-
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForThumbprint(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_z_ const char* Thumbprint
- )
-{
- QUIC_CERTIFICATE_HASH CertHash;
- uint32_t CertHashLen =
- DecodeHexBuffer(
- Thumbprint,
- sizeof(CertHash.ShaHash),
- CertHash.ShaHash);
- if (CertHashLen != sizeof(CertHash.ShaHash)) {
- return nullptr;
- }
- CreateSecConfigHelper Helper;
- return
- Helper.Create(
- MsQuic,
- Registration,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH,
- &CertHash,
- nullptr);
-}
-
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForThumbprintAndStore(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_ QUIC_CERTIFICATE_HASH_STORE_FLAGS Flags,
- _In_z_ const char* Thumbprint,
- _In_z_ const char* StoreName
- )
-{
- QUIC_CERTIFICATE_HASH_STORE CertHashStore;
- QuicZeroMemory(&CertHashStore, sizeof(CertHashStore));
-
- uint32_t CertHashLen =
- DecodeHexBuffer(
- Thumbprint,
- sizeof(CertHashStore.ShaHash),
- CertHashStore.ShaHash);
- if (CertHashLen != sizeof(CertHashStore.ShaHash)) {
- return nullptr;
- }
-
- size_t StoreNameLen = strlen(StoreName);
- QuicCopyMemory(CertHashStore.StoreName, StoreName, min(StoreNameLen, sizeof(CertHashStore.StoreName)));
-
- CertHashStore.Flags = Flags;
-
- CreateSecConfigHelper Helper;
- return
- Helper.Create(
- MsQuic,
- Registration,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE,
- &CertHashStore,
- nullptr);
-}
-
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForFile(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_z_ const char *PrivateKeyFile,
- _In_z_ const char *CertificateFile
- )
-{
- QUIC_CERTIFICATE_FILE CertFile;
- CertFile.PrivateKeyFile = (char*)PrivateKeyFile;
- CertFile.CertificateFile = (char*)CertificateFile;
- CreateSecConfigHelper Helper;
- return
- Helper.Create(
- MsQuic,
- Registration,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE,
- &CertFile,
- nullptr);
-}
-
-#ifdef QUIC_TEST_APIS
-inline
-QUIC_SEC_CONFIG*
-GetSecConfigForSelfSigned(
- _In_ const QUIC_API_TABLE* MsQuic,
- _In_ HQUIC Registration,
- _In_ const QUIC_SEC_CONFIG_PARAMS* Params
- )
-{
- CreateSecConfigHelper Helper;
- return Helper.Create(
- MsQuic,
- Registration,
- (QUIC_SEC_CONFIG_FLAGS)Params->Flags,
- Params->Certificate,
- Params->Principal
- );
-}
-#endif
-
//
// Arg Value Parsers
//
@@ -592,4 +380,118 @@ TryGetValue(
return true;
}
+inline
+_Success_(return != false)
+HQUIC
+GetServerConfigurationFromArgs(
+ _In_ int argc,
+ _In_reads_(argc) _Null_terminated_ char* argv[],
+ _In_ const QUIC_API_TABLE* MsQuic,
+ _In_ HQUIC Registration,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
+ _In_reads_bytes_opt_(SettingsSize)
+ const QUIC_SETTINGS* Settings,
+ _In_ uint32_t SettingsSize
+ )
+{
+ QUIC_CREDENTIAL_CONFIG_HELPER Helper;
+ QuicZeroMemory(&Helper, sizeof(Helper));
+ const QUIC_CREDENTIAL_CONFIG* Config = &Helper.CredConfig;
+ Helper.CredConfig.Flags = QUIC_CREDENTIAL_FLAG_NONE;
+
+ const char* Cert;
+ const char* KeyFile;
+
+ if (((Cert = GetValue(argc, argv, "thumbprint")) != nullptr) ||
+ ((Cert = GetValue(argc, argv, "cert_hash")) != nullptr) ||
+ ((Cert = GetValue(argc, argv, "hash")) != nullptr)) {
+ uint32_t CertHashLen =
+ DecodeHexBuffer(
+ Cert,
+ sizeof(Helper.CertHashStore.ShaHash),
+ Helper.CertHashStore.ShaHash);
+ if (CertHashLen != sizeof(Helper.CertHashStore.ShaHash)) {
+ return nullptr;
+ }
+ Helper.CredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE;
+ Helper.CredConfig.CertificateHashStore = &Helper.CertHashStore;
+ memcpy(Helper.CertHashStore.StoreName, "My", sizeof("My"));
+ Helper.CertHashStore.Flags =
+ GetValue(argc, argv, "machine") ?
+ QUIC_CERTIFICATE_HASH_STORE_FLAG_MACHINE_STORE :
+ QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE;
+
+ } else if (
+ (((Cert = GetValue(argc, argv, "file")) != nullptr) &&
+ ((KeyFile = GetValue(argc, argv, "key")) != nullptr)) ||
+ (((Cert = GetValue(argc, argv, "cert_file")) != nullptr) &&
+ ((KeyFile = GetValue(argc, argv, "cert_key")) != nullptr))) {
+ Helper.CertFile.CertificateFile = (char*)Cert;
+ Helper.CertFile.PrivateKeyFile = (char*)KeyFile;
+ Helper.CredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE;
+ Helper.CredConfig.CertificateFile = &Helper.CertFile;
+
+#ifdef QUIC_TEST_APIS
+ } else if (GetValue(argc, argv, "selfsign")) {
+ Config = QuicPlatGetSelfSignedCert(QUIC_SELF_SIGN_CERT_USER);
+ if (!Config) {
+ return nullptr;
+ }
+#endif
+
+ } else {
+ return nullptr;
+ }
+
+#ifdef QUIC_TEST_APIS
+ void* Context = (Config != &Helper.CredConfig) ? (void*)Config : nullptr;
+#else
+ void* Context = nullptr;
+#endif
+
+ HQUIC Configuration = nullptr;
+ if (QUIC_SUCCEEDED(
+ MsQuic->ConfigurationOpen(
+ Registration,
+ AlpnBuffers,
+ AlpnBufferCount,
+ Settings,
+ SettingsSize,
+ Context,
+ &Configuration)) &&
+ QUIC_FAILED(
+ MsQuic->ConfigurationLoadCredential(
+ Configuration,
+ Config))) {
+ MsQuic->ConfigurationClose(Configuration);
+ Configuration = nullptr;
+ }
+
+#ifdef QUIC_TEST_APIS
+ if (!Configuration && Config != &Helper.CredConfig) {
+ QuicPlatFreeSelfSignedCert(Config);
+ }
+#endif
+
+ return Configuration;
+}
+
+inline
+void
+FreeServerConfiguration(
+ _In_ const QUIC_API_TABLE* MsQuic,
+ _In_ HQUIC Configuration
+ )
+{
+#ifdef QUIC_TEST_APIS
+ auto SelfSignedConfig = (const QUIC_CREDENTIAL_CONFIG*)MsQuic->GetContext(Configuration);
+ if (SelfSignedConfig) {
+ QuicPlatFreeSelfSignedCert(SelfSignedConfig);
+ }
#endif
+ MsQuic->ConfigurationClose(Configuration);
+}
+
+#endif // defined(__cplusplus)
diff --git a/src/inc/msquicp.h b/src/inc/msquicp.h
index 6efdd49854..e812a543c6 100644
--- a/src/inc/msquicp.h
+++ b/src/inc/msquicp.h
@@ -23,16 +23,6 @@ extern "C" {
typedef struct QUIC_RECV_DATAGRAM QUIC_RECV_DATAGRAM;
typedef struct QUIC_DATAPATH_SEND_CONTEXT QUIC_DATAPATH_SEND_CONTEXT;
-//
-// Disables server certificate validation.
-// Used with the QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS parameter.
-//
-#define QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION 0x80000000
-
-//
-// The different private parameters for QUIC_PARAM_LEVEL_GLOBAL.
-//
-
//
// Returns TRUE to drop the packet.
//
@@ -68,28 +58,26 @@ typedef struct QUIC_TEST_DATAPATH_HOOKS {
#define QUIC_TEST_DATAPATH_HOOKS_ENABLED 1
#endif
-#define QUIC_PARAM_GLOBAL_TEST_DATAPATH_HOOKS 0x80000001 // QUIC_TEST_DATAPATH_HOOKS*
+typedef struct QUIC_PRIVATE_TRANSPORT_PARAMETER {
+ uint16_t Type;
+ uint16_t Length;
+ _Field_size_(Length)
+ const uint8_t* Buffer;
+} QUIC_PRIVATE_TRANSPORT_PARAMETER;
//
-// The different private parameters for QUIC_PARAM_LEVEL_SESSION.
+// The different private parameters for QUIC_PARAM_LEVEL_GLOBAL.
//
-#define QUIC_PARAM_SESSION_ADD_RESUMPTION_STATE 0x80000001 // uint8_t*
+
+#define QUIC_PARAM_GLOBAL_TEST_DATAPATH_HOOKS 0x80000001 // QUIC_TEST_DATAPATH_HOOKS*
//
// The different private parameters for QUIC_PARAM_LEVEL_CONNECTION.
//
-typedef struct QUIC_PRIVATE_TRANSPORT_PARAMETER {
- uint16_t Type;
- uint16_t Length;
- _Field_size_(Length)
- const uint8_t* Buffer;
-} QUIC_PRIVATE_TRANSPORT_PARAMETER;
-
-#define QUIC_PARAM_CONN_RESUMPTION_STATE 0x80000001 // uint8_t*
-#define QUIC_PARAM_CONN_FORCE_KEY_UPDATE 0x80000002 // No payload
-#define QUIC_PARAM_CONN_FORCE_CID_UPDATE 0x80000003 // No payload
-#define QUIC_PARAM_CONN_TEST_TRANSPORT_PARAMETER 0x80000004 // QUIC_PRIVATE_TRANSPORT_PARAMETER
+#define QUIC_PARAM_CONN_FORCE_KEY_UPDATE 0x80000001 // No payload
+#define QUIC_PARAM_CONN_FORCE_CID_UPDATE 0x80000002 // No payload
+#define QUIC_PARAM_CONN_TEST_TRANSPORT_PARAMETER 0x80000003 // QUIC_PRIVATE_TRANSPORT_PARAMETER
#if defined(__cplusplus)
}
diff --git a/src/inc/quic_cert.h b/src/inc/quic_cert.h
index c00ac4ffec..9717c3cb6b 100644
--- a/src/inc/quic_cert.h
+++ b/src/inc/quic_cert.h
@@ -15,17 +15,16 @@
#define SIZEOF_CERT_CHAIN_LIST_LENGTH 3
-typedef void QUIC_CERT;
+typedef struct QUIC_CREDENTIAL_CONFIG QUIC_CREDENTIAL_CONFIG;
+typedef void QUIC_CERTIFICATE;
//
// Gets the certificate from the input configuration.
//
QUIC_STATUS
QuicCertCreate(
- _In_ uint32_t Flags,
- _In_opt_ void* CertConfig,
- _In_opt_z_ const char* Principal,
- _Out_ QUIC_CERT** NewCertificate
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _Out_ QUIC_CERTIFICATE** NewCertificate
);
//
@@ -33,7 +32,7 @@ QuicCertCreate(
//
void
QuicCertFree(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
);
//
@@ -43,7 +42,7 @@ QuicCertFree(
_Success_(return != FALSE)
BOOLEAN
QuicCertSelect(
- _In_opt_ QUIC_CERT* Certificate,
+ _In_opt_ QUIC_CERTIFICATE* Certificate,
_In_reads_(SignatureAlgorithmsLength)
const uint16_t *SignatureAlgorithms,
_In_ size_t SignatureAlgorithmsLength,
@@ -55,7 +54,7 @@ QuicCertSelect(
// to a certificate object.
//
_Success_(return != NULL)
-QUIC_CERT*
+QUIC_CERTIFICATE*
QuicCertParseChain(
_In_ size_t ChainBufferLength,
_In_reads_(ChainBufferLength) const uint8_t *ChainBuffer
@@ -68,7 +67,7 @@ QuicCertParseChain(
_Success_(return != 0)
size_t
QuicCertFormat(
- _In_opt_ QUIC_CERT* Certificate,
+ _In_opt_ QUIC_CERTIFICATE* Certificate,
_In_ size_t BufferLength,
_Out_writes_to_(BufferLength, return)
uint8_t* Buffer
@@ -80,7 +79,7 @@ QuicCertFormat(
_Success_(return != FALSE)
BOOLEAN
QuicCertValidateChain(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_opt_z_ const char* Host,
_In_ uint32_t IgnoreFlags
);
@@ -91,7 +90,7 @@ QuicCertValidateChain(
_Success_(return != NULL)
void*
QuicCertGetPrivateKey(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
);
//
@@ -124,7 +123,7 @@ QuicCertSign(
_Success_(return != FALSE)
BOOLEAN
QuicCertVerify(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ const uint16_t SignatureAlgorithm,
_In_reads_(CertListToBeSignedLength)
const uint8_t *CertListToBeSigned,
diff --git a/src/inc/quic_driver_helpers.h b/src/inc/quic_driver_helpers.h
index 9ed716b7f0..06278cfa8b 100644
--- a/src/inc/quic_driver_helpers.h
+++ b/src/inc/quic_driver_helpers.h
@@ -146,7 +146,7 @@ class QuicDriverClient {
public:
QuicDriverClient() : DeviceHandle(INVALID_HANDLE_VALUE) { }
bool Initialize(
- _In_ QUIC_SEC_CONFIG_PARAMS* SecConfigParams,
+ _In_ QUIC_CERTIFICATE_HASH* CertHash,
_In_z_ const char* DriverName
) {
uint32_t Error;
@@ -182,13 +182,13 @@ class QuicDriverClient {
"CreateFile failed");
return false;
}
- if (!Run(IOCTL_QUIC_SEC_CONFIG, SecConfigParams->Thumbprint, sizeof(SecConfigParams->Thumbprint), 30000)) {
+ if (!Run(IOCTL_QUIC_SET_CERT_HASH, CertHash, sizeof(*CertHash), 30000)) {
CloseHandle(DeviceHandle);
DeviceHandle = INVALID_HANDLE_VALUE;
QuicTraceEvent(
LibraryError,
"[ lib] ERROR, %s.",
- "Run(IOCTL_QUIC_SEC_CONFIG) failed");
+ "Run(IOCTL_QUIC_SET_CERT_HASH) failed");
return false;
}
return true;
@@ -367,10 +367,10 @@ class QuicDriverService {
class QuicDriverClient {
public:
bool Initialize(
- _In_ QUIC_SEC_CONFIG_PARAMS* SecConfigParams,
+ _In_ QUIC_CERTIFICATE_HASH* CertHash,
_In_z_ const char* DriverName
) {
- UNREFERENCED_PARAMETER(SecConfigParams);
+ UNREFERENCED_PARAMETER(CertHash);
UNREFERENCED_PARAMETER(DriverName);
return false;
}
diff --git a/src/inc/quic_platform.h b/src/inc/quic_platform.h
index 9af893a913..739839e483 100644
--- a/src/inc/quic_platform.h
+++ b/src/inc/quic_platform.h
@@ -253,3 +253,38 @@ QuicListPopEntry(
#include "quic_hashtable.h"
#include "quic_toeplitz.h"
+
+//
+// Test Interface for loading a self-signed certificate.
+//
+
+#ifdef QUIC_TEST_APIS
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+typedef struct QUIC_CREDENTIAL_CONFIG QUIC_CREDENTIAL_CONFIG;
+
+typedef enum QUIC_SELF_SIGN_CERT_TYPE {
+ QUIC_SELF_SIGN_CERT_USER,
+ QUIC_SELF_SIGN_CERT_MACHINE
+} QUIC_SELF_SIGN_CERT_TYPE;
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+const QUIC_CREDENTIAL_CONFIG*
+QuicPlatGetSelfSignedCert(
+ _In_ QUIC_SELF_SIGN_CERT_TYPE Type
+ );
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+void
+QuicPlatFreeSelfSignedCert(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig
+ );
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif // QUIC_TEST_APIS
diff --git a/src/inc/quic_platform_linux.h b/src/inc/quic_platform_linux.h
index 62717b0bbe..dc5b8aa1c6 100644
--- a/src/inc/quic_platform_linux.h
+++ b/src/inc/quic_platform_linux.h
@@ -756,37 +756,6 @@ QuicConvertFromMappedV6(
_Out_ QUIC_ADDR* OutAddr
);
-//
-// Test Interface for loading a self-signed certificate.
-//
-
-#ifdef QUIC_TEST_APIS
-
-typedef struct QUIC_SEC_CONFIG_PARAMS {
- uint32_t Flags;
- void* Certificate;
- const char* Principal;
-} QUIC_SEC_CONFIG_PARAMS;
-
-typedef enum QUIC_SELF_SIGN_CERT_TYPE {
- QUIC_SELF_SIGN_CERT_USER,
- QUIC_SELF_SIGN_CERT_MACHINE
-} QUIC_SELF_SIGN_CERT_TYPE;
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG_PARAMS*
-QuicPlatGetSelfSignedCert(
- _In_ QUIC_SELF_SIGN_CERT_TYPE Type
- );
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicPlatFreeSelfSignedCert(
- _In_ QUIC_SEC_CONFIG_PARAMS* Params
- );
-
-#endif // QUIC_TEST_APIS
-
#define QuicSetCurrentThreadProcessorAffinity(ProcessorIndex) QUIC_STATUS_SUCCESS
#define QUIC_CPUID(FunctionId, eax, ebx, ecx, dx)
diff --git a/src/inc/quic_platform_winuser.h b/src/inc/quic_platform_winuser.h
index 86d20ddb83..441b524943 100644
--- a/src/inc/quic_platform_winuser.h
+++ b/src/inc/quic_platform_winuser.h
@@ -923,38 +923,6 @@ QuicSetCurrentThreadProcessorAffinity(
#endif
-//
-// Test Interface for loading a self-signed certificate.
-//
-
-#ifdef QUIC_TEST_APIS
-
-typedef struct QUIC_SEC_CONFIG_PARAMS {
- uint32_t Flags; // QUIC_SEC_CONFIG_FLAGS
- void* Certificate;
- const char* Principal;
- uint8_t Thumbprint[20];
-} QUIC_SEC_CONFIG_PARAMS;
-
-typedef enum QUIC_SELF_SIGN_CERT_TYPE {
- QUIC_SELF_SIGN_CERT_USER,
- QUIC_SELF_SIGN_CERT_MACHINE
-} QUIC_SELF_SIGN_CERT_TYPE;
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG_PARAMS*
-QuicPlatGetSelfSignedCert(
- _In_ QUIC_SELF_SIGN_CERT_TYPE Type
- );
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicPlatFreeSelfSignedCert(
- _In_ QUIC_SEC_CONFIG_PARAMS* Params
- );
-
-#endif // QUIC_TEST_APIS
-
#ifdef _M_X64
#define QUIC_CPUID(FunctionId, eax, ebx, ecx, edx) \
int CpuInfo[4]; \
diff --git a/src/inc/quic_sal_stub.h b/src/inc/quic_sal_stub.h
index 8c1492ec0c..4b73d34d66 100644
--- a/src/inc/quic_sal_stub.h
+++ b/src/inc/quic_sal_stub.h
@@ -182,6 +182,10 @@
#define __drv_aliasesMem
#endif
+#ifndef _Frees_ptr_
+#define _Frees_ptr_
+#endif
+
#ifndef _Frees_ptr_opt_
#define _Frees_ptr_opt_
#endif
diff --git a/src/inc/quic_tls.h b/src/inc/quic_tls.h
index ca81064d51..ec66994a52 100644
--- a/src/inc/quic_tls.h
+++ b/src/inc/quic_tls.h
@@ -21,8 +21,8 @@ extern "C" {
#pragma warning(disable:4201) // nonstandard extension used: nameless struct/union
#pragma warning(disable:4214) // nonstandard extension used: bit field types other than int
+typedef struct QUIC_SEC_CONFIG QUIC_SEC_CONFIG;
typedef struct QUIC_CONNECTION QUIC_CONNECTION;
-typedef struct QUIC_TLS_SESSION QUIC_TLS_SESSION;
typedef struct QUIC_TLS QUIC_TLS;
#define TLS_EXTENSION_TYPE_APPLICATION_LAYER_PROTOCOL_NEGOTIATION 0x0010 // Host Byte Order
@@ -67,13 +67,13 @@ typedef QUIC_TLS_RECEIVE_TP_CALLBACK *QUIC_TLS_RECEIVE_TP_CALLBACK_HANDLER;
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
BOOLEAN
-(QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK)(
+(QUIC_TLS_RECEIVE_TICKET_CALLBACK)(
_In_ QUIC_CONNECTION* Connection,
- _In_ uint16_t TicketLength,
+ _In_ uint32_t TicketLength,
_In_reads_(TicketLength) const uint8_t* Ticket
);
-typedef QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK *QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK_HANDLER;
+typedef QUIC_TLS_RECEIVE_TICKET_CALLBACK *QUIC_TLS_RECEIVE_TICKET_CALLBACK_HANDLER;
//
// The input configuration for creation of a TLS context.
@@ -83,9 +83,9 @@ typedef struct QUIC_TLS_CONFIG {
BOOLEAN IsServer;
//
- // The TLS session.
+ // Connection context for completion callbacks.
//
- QUIC_TLS_SESSION* TlsSession;
+ QUIC_CONNECTION* Connection;
//
// The TLS configuration information and credentials.
@@ -100,6 +100,18 @@ typedef struct QUIC_TLS_CONFIG {
const uint8_t* AlpnBuffer;
uint16_t AlpnBufferLength;
+ //
+ // Name of the server we are connecting to (client side only).
+ //
+ const char* ServerName;
+
+ //
+ // The optional ticket buffer the client size uses to resume a previous
+ // session (client side only).
+ //
+ const uint8_t* ResumptionTicketBuffer;
+ uint32_t ResumptionTicketLength;
+
//
// The local QUIC transport parameters to send. Buffer is freed by the TLS
// context when it's no longer needed.
@@ -107,30 +119,20 @@ typedef struct QUIC_TLS_CONFIG {
const uint8_t* LocalTPBuffer;
uint32_t LocalTPLength;
- //
- // Passed into completion callbacks.
- //
- QUIC_CONNECTION* Connection;
-
//
// Invoked for the completion of process calls that were pending.
//
QUIC_TLS_PROCESS_COMPLETE_CALLBACK_HANDLER ProcessCompleteCallback;
//
- // Invoked when QUIC TP are received.
+ // Invoked when QUIC transport parameters are received.
//
QUIC_TLS_RECEIVE_TP_CALLBACK_HANDLER ReceiveTPCallback;
//
// Invoked when a resumption ticket is received.
//
- QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK_HANDLER ReceiveResumptionCallback;
-
- //
- // Name of the server we are connecting to (client side only).
- //
- const char* ServerName;
+ QUIC_TLS_RECEIVE_TICKET_CALLBACK_HANDLER ReceiveResumptionCallback;
} QUIC_TLS_CONFIG;
@@ -147,7 +149,6 @@ typedef enum QUIC_TLS_RESULT_FLAGS {
QUIC_TLS_RESULT_EARLY_DATA_ACCEPT = 0x0020, // The server accepted the early (0-RTT) data.
QUIC_TLS_RESULT_EARLY_DATA_REJECT = 0x0040, // The server rejected the early (0-RTT) data.
QUIC_TLS_RESULT_COMPLETE = 0x0080, // Handshake complete.
- QUIC_TLS_RESULT_TICKET = 0x0100, // Ticket Ready.
QUIC_TLS_RESULT_ERROR = 0x8000 // An error occured.
} QUIC_TLS_RESULT_FLAGS;
@@ -257,89 +258,38 @@ typedef struct QUIC_TLS_PROCESS_STATE {
} QUIC_TLS_PROCESS_STATE;
-//
-// Creates a new TLS security configuration.
-//
+typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsServerSecConfigCreate(
- _Inout_ QUIC_RUNDOWN_REF* Rundown,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
+_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
+void
+(QUIC_API QUIC_SEC_CONFIG_CREATE_COMPLETE)(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
_In_opt_ void* Context,
- _In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
- );
-
-//
-// Creates a new TLS security configuration for client use.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsClientSecConfigCreate(
- _In_ uint32_t Flags,
- _Outptr_ QUIC_SEC_CONFIG** ClientConfig
+ _In_ QUIC_STATUS Status,
+ _In_opt_ QUIC_SEC_CONFIG* SecurityConfig
);
-//
-// Adds a reference to a TLS security configuration.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsSecConfigAddRef(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- );
+typedef QUIC_SEC_CONFIG_CREATE_COMPLETE *QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER;
//
-// Releases a references on a TLS security configuration and cleans it up
-// if it's the last reference.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-QuicTlsSecConfigRelease(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- );
-
-//
-// Initializes a TLS session.
+// Creates a new TLS security configuration.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicTlsSessionInitialize(
- _Out_ QUIC_TLS_SESSION** NewTlsSession
+QuicTlsSecConfigCreate(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _In_opt_ void* Context,
+ _In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
);
//
-// Uninitializes a TLS session.
+// Deletes a TLS security configuration.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-QuicTlsSessionUninitialize(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- );
-
-//
-// Configures the 0-RTT ticket key (server side).
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionSetTicketKey(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_reads_bytes_(44)
- const void* Buffer
- );
-
-//
-// Adds a new ticket to the ticket store, from a contiguous buffer.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionAddTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const uint8_t * const Buffer
+QuicTlsSecConfigDelete(
+ __drv_freesMem(ServerConfig) _Frees_ptr_ _In_
+ QUIC_SEC_CONFIG* SecurityConfig
);
//
@@ -371,16 +321,6 @@ QuicTlsReset(
_In_ QUIC_TLS* TlsContext
);
-//
-// Returns the security configuration used to initialize this TLS.
-// Caller must release the ref on the QUIC_SEC_CONFIG.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsGetSecConfig(
- _In_ QUIC_TLS* TlsContext
- );
-
//
// Called to process any data received from the peer. In the case of the client,
// the initial call is made with no input buffer to generate the initial output.
@@ -412,18 +352,6 @@ QuicTlsProcessDataComplete(
_Out_ uint32_t * ConsumedBuffer
);
-//
-// Called to read a TLS ticket.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsReadTicket(
- _In_ QUIC_TLS* TlsContext,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- uint8_t* Buffer
- );
-
//
// Sets a TLS parameter.
//
@@ -467,7 +395,7 @@ QuicTlsAlpnFindInList(
)
{
while (AlpnListLength != 0) {
- QUIC_ANALYSIS_ASSUME(AlpnList[0] + 1 <= AlpnListLength);
+ QUIC_DBG_ASSERT(AlpnList[0] + 1 <= AlpnListLength);
if (AlpnList[0] == FindAlpnLength &&
memcmp(AlpnList+1, FindAlpn, FindAlpnLength) == 0) {
return AlpnList;
diff --git a/src/inc/quic_trace.h b/src/inc/quic_trace.h
index 0ac7a25742..a11f674d1f 100644
--- a/src/inc/quic_trace.h
+++ b/src/inc/quic_trace.h
@@ -72,11 +72,10 @@ typedef enum QUIC_TRACE_API_TYPE {
QUIC_TRACE_API_GET_PARAM,
QUIC_TRACE_API_REGISTRATION_OPEN,
QUIC_TRACE_API_REGISTRATION_CLOSE,
- QUIC_TRACE_API_SEC_CONFIG_CREATE,
- QUIC_TRACE_API_SEC_CONFIG_DELETE,
- QUIC_TRACE_API_SESSION_OPEN,
- QUIC_TRACE_API_SESSION_CLOSE,
- QUIC_TRACE_API_SESSION_SHUTDOWN,
+ QUIC_TRACE_API_REGISTRATION_SHUTDOWN,
+ QUIC_TRACE_API_CONFIGURATION_OPEN,
+ QUIC_TRACE_API_CONFIGURATION_CLOSE,
+ QUIC_TRACE_API_CONFIGURATION_LOAD_CREDENTIAL,
QUIC_TRACE_API_LISTENER_OPEN,
QUIC_TRACE_API_LISTENER_CLOSE,
QUIC_TRACE_API_LISTENER_START,
@@ -85,6 +84,7 @@ typedef enum QUIC_TRACE_API_TYPE {
QUIC_TRACE_API_CONNECTION_CLOSE,
QUIC_TRACE_API_CONNECTION_SHUTDOWN,
QUIC_TRACE_API_CONNECTION_START,
+ QUIC_TRACE_API_CONNECTION_SET_CONFIGURATION,
QUIC_TRACE_API_CONNECTION_SEND_RESUMPTION_TICKET,
QUIC_TRACE_API_STREAM_OPEN,
QUIC_TRACE_API_STREAM_CLOSE,
@@ -93,7 +93,8 @@ typedef enum QUIC_TRACE_API_TYPE {
QUIC_TRACE_API_STREAM_SEND,
QUIC_TRACE_API_STREAM_RECEIVE_COMPLETE,
QUIC_TRACE_API_STREAM_RECEIVE_SET_ENABLED,
- QUIC_TRACE_API_DATAGRAM_SEND
+ QUIC_TRACE_API_DATAGRAM_SEND,
+ QUIC_TRACE_API_COUNT // Must be last
} QUIC_TRACE_API_TYPE;
typedef enum QUIC_TRACE_LEVEL {
diff --git a/src/manifest/MsQuicEtw.man b/src/manifest/MsQuicEtw.man
index de8c35518a..15b0719817 100644
--- a/src/manifest/MsQuicEtw.man
+++ b/src/manifest/MsQuicEtw.man
@@ -23,8 +23,8 @@
/>
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
+
-
+
-
+
@@ -932,14 +928,14 @@
name="Worker"
/>
-
+
@@ -1698,9 +1694,9 @@
+
-
+
+
-
@@ -1999,7 +1996,7 @@
message="$(string.Etw.ListenerCreated)"
opcode="win:Info"
symbol="QuicListenerCreated"
- template="tid_LISTENER_SESSION"
+ template="tid_LISTENER_REGISTRATION"
value="4096"
/>
+
-
-
+
Buffer + PacketLength - QUIC_STATELESS_RESET_TOKEN_LENGTH,\n QUIC_STATELESS_RESET_TOKEN_LENGTH\n ).Buffer",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n SendDatagram->Buffer + PacketLength - QUIC_STATELESS_RESET_TOKEN_LENGTH,\r\n QUIC_STATELESS_RESET_TOKEN_LENGTH\r\n ).Buffer",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "s",
@@ -382,7 +425,7 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
@@ -441,7 +484,7 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
@@ -468,7 +511,7 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
@@ -495,7 +538,7 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
@@ -538,17 +581,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "BindingCleanup": {
+ "BindingCreated": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] Cleaning up",
- "UniqueId": "BindingCleanup",
+ "TraceString": "[bind][%p] Created, Udp=%p LocalAddr=%!ADDR! RemoteAddr=%!ADDR!",
+ "UniqueId": "BindingCreated",
"splitArgs": [
{
"VariableInfo": {
@@ -557,6 +600,30 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Binding->DatapathBinding",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathLocalAddr), &DatapathLocalAddr)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathRemoteAddr), &DatapathRemoteAddr)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -565,17 +632,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "BindingDestroyed": {
+ "BindingCleanup": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] Destroyed",
- "UniqueId": "BindingDestroyed",
+ "TraceString": "[bind][%p] Cleaning up",
+ "UniqueId": "BindingCleanup",
"splitArgs": [
{
"VariableInfo": {
@@ -592,17 +659,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "BindingExecOper": {
+ "BindingDestroyed": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] Execute: %u",
- "UniqueId": "BindingExecOper",
+ "TraceString": "[bind][%p] Destroyed",
+ "UniqueId": "BindingDestroyed",
"splitArgs": [
{
"VariableInfo": {
@@ -611,14 +678,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "OperationType",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -627,21 +686,21 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnCubic": {
+ "BindingRundown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] CUBIC: SlowStartThreshold=%u K=%u WindowMax=%u WindowLastMax=%u",
- "UniqueId": "ConnCubic",
+ "TraceString": "[bind][%p] Rundown, Udp=%p LocalAddr=%!ADDR! RemoteAddr=%!ADDR!",
+ "UniqueId": "BindingRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -649,35 +708,62 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.SlowStartThreshold",
+ "UserSuppliedTrimmed": "Binding->DatapathBinding",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.KCubic",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathLocalAddr), &DatapathLocalAddr)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg4"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.WindowMax",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathRemoteAddr), &DatapathRemoteAddr)",
"SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg5"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "BindingExecOper": {
+ "ModuleProperites": {},
+ "TraceString": "[bind][%p] Execute: %u",
+ "UniqueId": "BindingExecOper",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.WindowLastMax",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "OperationType",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -686,419 +772,475 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnCongestion": {
+ "ConfigurationOpenStorageFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Congestion event",
- "UniqueId": "ConnCongestion",
+ "TraceString": "[cnfg][%p] Failed to open settings, 0x%x",
+ "UniqueId": "ConfigurationOpenStorageFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnPersistentCongestion": {
+ "ConfigurationOpenAppStorageFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Persistent congestion event",
- "UniqueId": "ConnPersistentCongestion",
+ "TraceString": "[cnfg][%p] Failed to open app specific settings, 0x%x",
+ "UniqueId": "ConfigurationOpenAppStorageFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnRecoveryExit": {
+ "ConfigurationSettingsUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Recovery complete",
- "UniqueId": "ConnRecoveryExit",
+ "TraceString": "[cnfg][%p] Settings %p Updated",
+ "UniqueId": "ConfigurationSettingsUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "&Configuration->Settings",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketRxStatelessReset": {
+ "ConfigurationSetSettings": {
"ModuleProperites": {},
- "TraceString": "[S][RX][-] SR %s",
- "UniqueId": "PacketRxStatelessReset",
+ "TraceString": "[cnfg][%p] Setting new settings",
+ "UniqueId": "ConfigurationSetSettings",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(PacketResetToken, QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketRxNotAcked": {
+ "ConfigurationCreated": {
"ModuleProperites": {},
- "TraceString": "[%c][RX][%llu] not acked (connection is closed)",
- "UniqueId": "PacketRxNotAcked",
+ "TraceString": "[cnfg][%p] Created, Registration=%p",
+ "UniqueId": "ConfigurationCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "Registration",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ApiEventNoHandler": {
+ "ConfigurationCleanup": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Event silently discarded (no handler).",
- "UniqueId": "ApiEventNoHandler",
+ "TraceString": "[cnfg][%p] Cleaning up",
+ "UniqueId": "ConfigurationCleanup",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Configuration",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ApiEventAlreadyClosed": {
+ "ConfigurationDestroyed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Event silently discarded.",
- "UniqueId": "ApiEventAlreadyClosed",
+ "TraceString": "[cnfg][%p] Destroyed",
+ "UniqueId": "ConfigurationDestroyed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Configuration",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NoReplacementCidForRetire": {
+ "ConfigurationRundown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Can't retire current CID because we don't have a replacement",
- "UniqueId": "NoReplacementCidForRetire",
+ "TraceString": "[cnfg][%p] Rundown, Registration=%p",
+ "UniqueId": "ConfigurationRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Configuration",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Configuration->Registration",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NonActivePathCidRetired": {
+ "ConnCubic": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Non-active path has no replacement for retired CID.",
- "UniqueId": "NonActivePathCidRetired",
+ "TraceString": "[conn][%p] CUBIC: SlowStartThreshold=%u K=%u WindowMax=%u WindowLastMax=%u",
+ "UniqueId": "ConnCubic",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->CongestionControl.SlowStartThreshold",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->CongestionControl.KCubic",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->CongestionControl.WindowMax",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->CongestionControl.WindowLastMax",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IgnoreUnreachable": {
+ "ConnCongestion": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring received unreachable event (inline)",
- "UniqueId": "IgnoreUnreachable",
+ "TraceString": "[conn][%p] Congestion event",
+ "UniqueId": "ConnCongestion",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IgnoreFrameAfterClose": {
+ "ConnPersistentCongestion": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring frame (%hhu) for already closed stream id = %llu",
- "UniqueId": "IgnoreFrameAfterClose",
+ "TraceString": "[conn][%p] Persistent congestion event",
+ "UniqueId": "ConnPersistentCongestion",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "FrameType",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "StreamId",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UnreachableIgnore": {
+ "ConnRecoveryExit": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring received unreachable event",
- "UniqueId": "UnreachableIgnore",
+ "TraceString": "[conn][%p] Recovery complete",
+ "UniqueId": "ConnRecoveryExit",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UnreachableInvalid": {
+ "PacketRxStatelessReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received invalid unreachable event",
- "UniqueId": "UnreachableInvalid",
+ "TraceString": "[S][RX][-] SR %s",
+ "UniqueId": "PacketRxStatelessReset",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "QuicCidBufToStr(PacketResetToken, QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CloseComplete": {
+ "PacketRxNotAcked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Connection close complete",
- "UniqueId": "CloseComplete",
+ "TraceString": "[%c][RX][%llu] not acked (connection is closed)",
+ "UniqueId": "PacketRxNotAcked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "Restart": {
+ "ApiEventNoHandler": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Restart (CompleteReset=%hhu)",
- "UniqueId": "Restart",
+ "TraceString": "[conn][%p] Event silently discarded (no handler).",
+ "UniqueId": "ApiEventNoHandler",
"splitArgs": [
{
"VariableInfo": {
@@ -1107,33 +1249,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CompleteReset",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CryptoStateDiscard": {
+ "ApiEventAlreadyClosed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS state no longer needed",
- "UniqueId": "CryptoStateDiscard",
+ "TraceString": "[conn][%p] Event silently discarded.",
+ "UniqueId": "ApiEventAlreadyClosed",
"splitArgs": [
{
"VariableInfo": {
@@ -1145,22 +1279,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PeerTPSet": {
+ "NoReplacementCidForRetire": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Peer Transport Parameters Set",
- "UniqueId": "PeerTPSet",
+ "TraceString": "[conn][%p] Can't retire current CID because we don't have a replacement",
+ "UniqueId": "NoReplacementCidForRetire",
"splitArgs": [
{
"VariableInfo": {
@@ -1172,22 +1306,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecvStatelessReset": {
+ "NonActivePathCidRetired": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received stateless reset",
- "UniqueId": "RecvStatelessReset",
+ "TraceString": "[conn][%p] Non-active path has no replacement for retired CID.",
+ "UniqueId": "NonActivePathCidRetired",
"splitArgs": [
{
"VariableInfo": {
@@ -1199,22 +1333,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "HandshakeConfirmedFrame": {
+ "IgnoreUnreachable": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake confirmed (frame)",
- "UniqueId": "HandshakeConfirmedFrame",
+ "TraceString": "[conn][%p] Ignoring received unreachable event (inline)",
+ "UniqueId": "IgnoreUnreachable",
"splitArgs": [
{
"VariableInfo": {
@@ -1226,22 +1360,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FirstCidUsage": {
+ "IgnoreFrameAfterClose": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] First usage of SrcCid: %s",
- "UniqueId": "FirstCidUsage",
+ "TraceString": "[conn][%p] Ignoring frame (%hhu) for already closed stream id = %llu",
+ "UniqueId": "IgnoreFrameAfterClose",
"splitArgs": [
{
"VariableInfo": {
@@ -1253,30 +1387,38 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(Packet->DestCid, Packet->DestCidLen).Buffer",
+ "UserSuppliedTrimmed": "FrameType",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
- }
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "StreamId",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ }
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathDiscarded": {
+ "InvalidInitialPackets": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Removing invalid path[%hhu]",
- "UniqueId": "PathDiscarded",
+ "TraceString": "[conn][%p] Aborting connection with invalid initial packets",
+ "UniqueId": "InvalidInitialPackets",
"splitArgs": [
{
"VariableInfo": {
@@ -1285,33 +1427,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Paths[i].ID",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "Unreachable": {
+ "UnreachableIgnore": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received unreachable event",
- "UniqueId": "Unreachable",
+ "TraceString": "[conn][%p] Ignoring received unreachable event",
+ "UniqueId": "UnreachableIgnore",
"splitArgs": [
{
"VariableInfo": {
@@ -1323,22 +1457,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateIdleTimeout": {
+ "UnreachableInvalid": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated idle timeout to %llu milliseconds",
- "UniqueId": "UpdateIdleTimeout",
+ "TraceString": "[conn][%p] Received invalid unreachable event",
+ "UniqueId": "UnreachableInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -1347,33 +1481,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->IdleTimeoutMs",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateKeepAlive": {
+ "CloseUserCanceled": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated keep alive interval to %u milliseconds",
- "UniqueId": "UpdateKeepAlive",
+ "TraceString": "[conn][%p] Connection close using user canceled error",
+ "UniqueId": "CloseUserCanceled",
"splitArgs": [
{
"VariableInfo": {
@@ -1382,14 +1508,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->KeepAliveIntervalMs",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -1398,17 +1516,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateDisconnectTimeout": {
+ "CloseComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated disconnect timeout = %u milliseconds",
- "UniqueId": "UpdateDisconnectTimeout",
+ "TraceString": "[conn][%p] Connection close complete",
+ "UniqueId": "CloseComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -1417,14 +1535,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*(uint32_t*)Buffer",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -1433,17 +1543,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SetSecurityConfig": {
+ "Restart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Security config set, %p",
- "UniqueId": "SetSecurityConfig",
+ "TraceString": "[conn][%p] Restart (CompleteReset=%hhu)",
+ "UniqueId": "Restart",
"splitArgs": [
{
"VariableInfo": {
@@ -1455,10 +1565,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SecConfig",
+ "UserSuppliedTrimmed": "CompleteReset",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
@@ -1468,17 +1578,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateUseSendBuffer": {
+ "CryptoStateDiscard": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated UseSendBuffer = %hhu",
- "UniqueId": "UpdateUseSendBuffer",
+ "TraceString": "[conn][%p] TLS state no longer needed",
+ "UniqueId": "CryptoStateDiscard",
"splitArgs": [
{
"VariableInfo": {
@@ -1487,14 +1597,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->State.UseSendBuffer",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -1503,17 +1605,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateUsePacing": {
+ "SetConfiguration": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated UsePacing = %hhu",
- "UniqueId": "UpdateUsePacing",
+ "TraceString": "[conn][%p] Configuration set, %p",
+ "UniqueId": "SetConfiguration",
"splitArgs": [
{
"VariableInfo": {
@@ -1525,10 +1627,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->State.UsePacing",
+ "UserSuppliedTrimmed": "Configuration",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
}
],
@@ -1538,17 +1640,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateShareBinding": {
+ "PeerTPSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated ShareBinding = %hhu",
- "UniqueId": "UpdateShareBinding",
+ "TraceString": "[conn][%p] Peer Transport Parameters Set",
+ "UniqueId": "PeerTPSet",
"splitArgs": [
{
"VariableInfo": {
@@ -1557,14 +1659,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->State.ShareBinding",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -1573,17 +1667,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateStreamSchedulingScheme": {
+ "PeerPreferredAddress": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated Stream Scheduling Scheme = %u",
- "UniqueId": "UpdateStreamSchedulingScheme",
+ "TraceString": "[conn][%p] Peer configured preferred address %!ADDR!",
+ "UniqueId": "PeerPreferredAddress",
"splitArgs": [
{
"VariableInfo": {
@@ -1595,10 +1689,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Scheme",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Connection->PeerTransportParams.PreferredAddress), &Connection->PeerTransportParams.PreferredAddress)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg3"
}
],
@@ -1608,17 +1702,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RttUpdated": {
+ "NegotiatedDisable1RttEncryption": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated Rtt=%u.%03u ms, Var=%u.%03u",
- "UniqueId": "RttUpdated",
+ "TraceString": "[conn][%p] Negotiated Disable 1-RTT Encryption",
+ "UniqueId": "NegotiatedDisable1RttEncryption",
"splitArgs": [
{
"VariableInfo": {
@@ -1627,57 +1721,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->SmoothedRtt / 1000",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->SmoothedRtt % 1000",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "03u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->RttVariance / 1000",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->RttVariance % 1000",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "03u",
- "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NewSrcCidNameCollision": {
+ "RecvStatelessReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] CID collision, trying again",
- "UniqueId": "NewSrcCidNameCollision",
+ "TraceString": "[conn][%p] Received stateless reset",
+ "UniqueId": "RecvStatelessReset",
"splitArgs": [
{
"VariableInfo": {
@@ -1689,22 +1751,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ZeroLengthCidRetire": {
+ "HandshakeConfirmedFrame": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Can't retire current CID because it's zero length",
- "UniqueId": "ZeroLengthCidRetire",
+ "TraceString": "[conn][%p] Handshake confirmed (frame)",
+ "UniqueId": "HandshakeConfirmedFrame",
"splitArgs": [
{
"VariableInfo": {
@@ -1716,22 +1778,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerExpired": {
+ "FirstCidUsage": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] %s timer expired",
- "UniqueId": "TimerExpired",
+ "TraceString": "[conn][%p] First usage of SrcCid: %s",
+ "UniqueId": "FirstCidUsage",
"splitArgs": [
{
"VariableInfo": {
@@ -1743,7 +1805,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerNames[Temp[j].Type]",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(Packet->DestCid, Packet->DestCidLen).Buffer",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "s",
@@ -1751,22 +1813,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateShutdownByPeer": {
+ "PathDiscarded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER [0x%llx]",
- "UniqueId": "IndicateShutdownByPeer",
+ "TraceString": "[conn][%p] Removing invalid path[%hhu]",
+ "UniqueId": "PathDiscarded",
"splitArgs": [
{
"VariableInfo": {
@@ -1778,30 +1840,30 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Event.SHUTDOWN_INITIATED_BY_PEER.ErrorCode",
+ "UserSuppliedTrimmed": "Connection->Paths[i].ID",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llx",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateShutdownByTransport": {
+ "Unreachable": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT [0x%x]",
- "UniqueId": "IndicateShutdownByTransport",
+ "TraceString": "[conn][%p] Received unreachable event",
+ "UniqueId": "Unreachable",
"splitArgs": [
{
"VariableInfo": {
@@ -1810,33 +1872,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.SHUTDOWN_INITIATED_BY_TRANSPORT.Status",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateConnectionShutdownComplete": {
+ "UpdateShareBinding": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE",
- "UniqueId": "IndicateConnectionShutdownComplete",
+ "TraceString": "[conn][%p] Updated ShareBinding = %hhu",
+ "UniqueId": "UpdateShareBinding",
"splitArgs": [
{
"VariableInfo": {
@@ -1845,25 +1899,33 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->State.ShareBinding",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FoundCachedServerState": {
+ "UpdateStreamSchedulingScheme": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Found server cached state",
- "UniqueId": "FoundCachedServerState",
+ "TraceString": "[conn][%p] Updated Stream Scheduling Scheme = %u",
+ "UniqueId": "UpdateStreamSchedulingScheme",
"splitArgs": [
{
"VariableInfo": {
@@ -1872,60 +1934,33 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Scheme",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "QueueDatagrams": {
+ "ApplySettings": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Queuing %u UDP datagrams",
- "UniqueId": "QueueDatagrams",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "DatagramChainLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "RecvVerNeg": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] Received Version Negotation:",
- "UniqueId": "RecvVerNeg",
+ "TraceString": "[conn][%p] Applying new settings",
+ "UniqueId": "ApplySettings",
"splitArgs": [
{
"VariableInfo": {
@@ -1937,22 +1972,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "VerNegItem": {
+ "RttUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ver[%d]: 0x%x",
- "UniqueId": "VerNegItem",
+ "TraceString": "[conn][%p] Updated Rtt=%u.%03u ms, Var=%u.%03u",
+ "UniqueId": "RttUpdated",
"splitArgs": [
{
"VariableInfo": {
@@ -1964,19 +1999,35 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "i",
+ "UserSuppliedTrimmed": "Path->SmoothedRtt / 1000",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "d",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicByteSwapUint32(ServerVersionList[i])",
+ "UserSuppliedTrimmed": "Path->SmoothedRtt % 1000",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "03u",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->RttVariance / 1000",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->RttVariance % 1000",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "03u",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -1985,17 +2036,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "InvalidVerNeg": {
+ "NewSrcCidNameCollision": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Dropping version negotation that includes the current version",
- "UniqueId": "InvalidVerNeg",
+ "TraceString": "[conn][%p] CID collision, trying again",
+ "UniqueId": "NewSrcCidNameCollision",
"splitArgs": [
{
"VariableInfo": {
@@ -2012,17 +2063,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DeferDatagram": {
+ "ZeroLengthCidRetire": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Deferring datagram (type=%hu)",
- "UniqueId": "DeferDatagram",
+ "TraceString": "[conn][%p] Can't retire current CID because it's zero length",
+ "UniqueId": "ZeroLengthCidRetire",
"splitArgs": [
{
"VariableInfo": {
@@ -2031,14 +2082,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->KeyType",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2047,17 +2090,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecryptOldKey": {
+ "TimerExpired": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Using old key to decrypt",
- "UniqueId": "DecryptOldKey",
+ "TraceString": "[conn][%p] %s timer expired",
+ "UniqueId": "TimerExpired",
"splitArgs": [
{
"VariableInfo": {
@@ -2066,6 +2109,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TimerNames[Temp[j].Type]",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2074,17 +2125,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PossiblePeerKeyUpdate": {
+ "IndicateShutdownByPeer": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Possible peer initiated key update [packet %llu]",
- "UniqueId": "PossiblePeerKeyUpdate",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER [0x%llx]",
+ "UniqueId": "IndicateShutdownByPeer",
"splitArgs": [
{
"VariableInfo": {
@@ -2096,10 +2147,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "Event.SHUTDOWN_INITIATED_BY_PEER.ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "llx",
"MacroVariableName": "arg3"
}
],
@@ -2109,17 +2160,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateReadKeyPhase": {
+ "IndicateShutdownByTransport": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updating current read key phase and packet number[%llu]",
- "UniqueId": "UpdateReadKeyPhase",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT [0x%x]",
+ "UniqueId": "IndicateShutdownByTransport",
"splitArgs": [
{
"VariableInfo": {
@@ -2131,10 +2182,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "Event.SHUTDOWN_INITIATED_BY_TRANSPORT.Status",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
}
],
@@ -2144,17 +2195,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PeerConnFCBlocked": {
+ "IndicateConnectionShutdownComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Peer Connection FC blocked (%llu)",
- "UniqueId": "PeerConnFCBlocked",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE",
+ "UniqueId": "IndicateConnectionShutdownComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -2163,14 +2214,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.DataLimit",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2179,17 +2222,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PeerStreamFCBlocked": {
+ "IndicateResumptionTicketReceived": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Peer Streams[%hu] FC blocked (%llu)",
- "UniqueId": "PeerStreamFCBlocked",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED",
+ "UniqueId": "IndicateResumptionTicketReceived",
"splitArgs": [
{
"VariableInfo": {
@@ -2198,22 +2241,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamLimit",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
@@ -2222,17 +2249,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerNeedStreams": {
+ "QueueDatagrams": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_NEEDS_STREAMS",
- "UniqueId": "IndicatePeerNeedStreams",
+ "TraceString": "[conn][%p] Queuing %u UDP datagrams",
+ "UniqueId": "QueueDatagrams",
"splitArgs": [
{
"VariableInfo": {
@@ -2241,6 +2268,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "DatagramChainLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2249,17 +2284,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerAddrChanged": {
+ "RecvVerNeg": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_ADDRESS_CHANGED",
- "UniqueId": "IndicatePeerAddrChanged",
+ "TraceString": "[conn][%p] Received Version Negotation:",
+ "UniqueId": "RecvVerNeg",
"splitArgs": [
{
"VariableInfo": {
@@ -2276,17 +2311,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UdpRecvBatch": {
+ "VerNegItem": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Batch Recv %u UDP datagrams",
- "UniqueId": "UdpRecvBatch",
+ "TraceString": "[conn][%p] Ver[%d]: 0x%x",
+ "UniqueId": "VerNegItem",
"splitArgs": [
{
"VariableInfo": {
@@ -2298,11 +2333,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "BatchCount",
+ "UserSuppliedTrimmed": "i",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "d",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicByteSwapUint32(ServerVersionList[i])",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -2311,17 +2354,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UdpRecvDeferred": {
+ "InvalidVerNeg": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Recv %u deferred UDP datagrams",
- "UniqueId": "UdpRecvDeferred",
+ "TraceString": "[conn][%p] Dropping version negotation that includes the current version",
+ "UniqueId": "InvalidVerNeg",
"splitArgs": [
{
"VariableInfo": {
@@ -2330,14 +2373,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "DatagramChainCount",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2346,17 +2381,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UdpRecv": {
+ "DeferDatagram": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Recv %u UDP datagrams",
- "UniqueId": "UdpRecv",
+ "TraceString": "[conn][%p] Deferring datagram (type=%hu)",
+ "UniqueId": "DeferDatagram",
"splitArgs": [
{
"VariableInfo": {
@@ -2368,10 +2403,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "DatagramChainCount",
+ "UserSuppliedTrimmed": "Packet->KeyType",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
}
],
@@ -2381,17 +2416,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ForceKeyUpdate": {
+ "DecryptOldKey": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Forcing key update",
- "UniqueId": "ForceKeyUpdate",
+ "TraceString": "[conn][%p] Using old key to decrypt",
+ "UniqueId": "DecryptOldKey",
"splitArgs": [
{
"VariableInfo": {
@@ -2408,17 +2443,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ForceCidUpdate": {
+ "PossiblePeerKeyUpdate": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Forcing destination CID update",
- "UniqueId": "ForceCidUpdate",
+ "TraceString": "[conn][%p] Possible peer initiated key update [packet %llu]",
+ "UniqueId": "PossiblePeerKeyUpdate",
"splitArgs": [
{
"VariableInfo": {
@@ -2427,6 +2462,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -2435,17 +2478,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatagramReceiveEnableUpdated": {
+ "UpdateReadKeyPhase": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated datagram receive enabled to %hhu",
- "UniqueId": "DatagramReceiveEnableUpdated",
+ "TraceString": "[conn][%p] Updating current read key phase and packet number[%llu]",
+ "UniqueId": "UpdateReadKeyPhase",
"splitArgs": [
{
"VariableInfo": {
@@ -2457,10 +2500,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Datagram.ReceiveEnabled",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
@@ -2470,17 +2513,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestTPSet": {
+ "PeerConnFCBlocked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Setting Test Transport Parameter (type %hu, %hu bytes)",
- "UniqueId": "TestTPSet",
+ "TraceString": "[conn][%p] Peer Connection FC blocked (%llu)",
+ "UniqueId": "PeerConnFCBlocked",
"splitArgs": [
{
"VariableInfo": {
@@ -2492,19 +2535,11 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->TestTransportParameter.Type",
+ "UserSuppliedTrimmed": "Frame.DataLimit",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->TestTransportParameter.Length",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
}
],
"macro": {
@@ -2513,17 +2548,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ReadTicketFailure": {
+ "PeerStreamFCBlocked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] QuicTlsReadTicket failed, 0x%x",
- "UniqueId": "ReadTicketFailure",
+ "TraceString": "[conn][%p] Peer Streams[%hu] FC blocked (%llu)",
+ "UniqueId": "PeerStreamFCBlocked",
"splitArgs": [
{
"VariableInfo": {
@@ -2535,11 +2570,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamLimit",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -2548,17 +2591,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AbandonInternallyClosed": {
+ "IndicatePeerNeedStreams": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Abandoning internal, closed connection",
- "UniqueId": "AbandonInternallyClosed",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_NEEDS_STREAMS",
+ "UniqueId": "IndicatePeerNeedStreams",
"splitArgs": [
{
"VariableInfo": {
@@ -2575,351 +2618,343 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnCreated": {
+ "IndicatePeerAddrChanged": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Created, IsServer=%hhu, CorrelationId=%llu",
- "UniqueId": "ConnCreated",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_ADDRESS_CHANGED",
+ "UniqueId": "IndicatePeerAddrChanged",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "IsServer",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.CorrelationId",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnInitializeComplete": {
+ "UdpRecvBatch": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Initialize complete",
- "UniqueId": "ConnInitializeComplete",
+ "TraceString": "[conn][%p] Batch Recv %u UDP datagrams",
+ "UniqueId": "UdpRecvBatch",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "BatchCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnDestroyed": {
+ "UdpRecvDeferred": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Destroyed",
- "UniqueId": "ConnDestroyed",
+ "TraceString": "[conn][%p] Recv %u deferred UDP datagrams",
+ "UniqueId": "UdpRecvDeferred",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "DatagramChainCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnHandleClosed": {
+ "UdpRecv": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handle closed",
- "UniqueId": "ConnHandleClosed",
+ "TraceString": "[conn][%p] Recv %u UDP datagrams",
+ "UniqueId": "UdpRecv",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "DatagramChainCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnRundown": {
+ "DatagramReceiveEnableUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Rundown, IsServer=%hu, CorrelationId=%llu",
- "UniqueId": "ConnRundown",
+ "TraceString": "[conn][%p] Updated datagram receive enabled to %hhu",
+ "UniqueId": "DatagramReceiveEnableUpdated",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicConnIsServer(Connection)",
+ "UserSuppliedTrimmed": "Connection->Datagram.ReceiveEnabled",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.CorrelationId",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnAssignWorker": {
+ "Disable1RttEncrytionUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Assigned worker: %p",
- "UniqueId": "ConnAssignWorker",
+ "TraceString": "[conn][%p] Updated disable 1-RTT encrytption to %hhu",
+ "UniqueId": "Disable1RttEncrytionUpdated",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Worker",
+ "UserSuppliedTrimmed": "Connection->State.Disable1RttEncrytion",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnRegisterSession": {
+ "ForceKeyUpdate": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Registered with session: %p",
- "UniqueId": "ConnRegisterSession",
+ "TraceString": "[conn][%p] Forcing key update",
+ "UniqueId": "ForceKeyUpdate",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Session",
- "SuggestedTelemetryName": "arg3"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnHandshakeComplete": {
+ "ForceCidUpdate": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake complete",
- "UniqueId": "ConnHandshakeComplete",
+ "TraceString": "[conn][%p] Forcing destination CID update",
+ "UniqueId": "ForceCidUpdate",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnExecTimerOper": {
+ "TestTPSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Execute: %u",
- "UniqueId": "ConnExecTimerOper",
+ "TraceString": "[conn][%p] Setting Test Transport Parameter (type %hu, %hu bytes)",
+ "UniqueId": "TestTPSet",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QUIC_CONN_TIMER_ACK_DELAY",
+ "UserSuppliedTrimmed": "Connection->TestTransportParameter.Type",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->TestTransportParameter.Length",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnShutdownComplete": {
+ "AbandonInternallyClosed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Shutdown complete, PeerFailedToAcknowledged=%hhu.",
- "UniqueId": "ConnShutdownComplete",
+ "TraceString": "[conn][%p] Abandoning internal, closed connection",
+ "UniqueId": "AbandonInternallyClosed",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->State.ShutdownCompleteTimedOut",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnAppShutdown": {
+ "ConnCreated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] App Shutdown: %llu (Remote=%hhu)",
- "UniqueId": "ConnAppShutdown",
+ "TraceString": "[conn][%p] Created, IsServer=%hhu, CorrelationId=%llu",
+ "UniqueId": "ConnCreated",
"splitArgs": [
{
"VariableInfo": {
@@ -2931,18 +2966,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
+ "UserSuppliedTrimmed": "IsServer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ClosedRemotely",
+ "UserSuppliedTrimmed": "Connection->Stats.CorrelationId",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
}
],
@@ -2952,17 +2987,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnTransportShutdown": {
+ "ConnLocalAddrAdded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Transport Shutdown: %llu (Remote=%hhu) (QS=%hhu)",
- "UniqueId": "ConnTransportShutdown",
+ "TraceString": "[conn][%p] New Local IP: %!ADDR!",
+ "UniqueId": "ConnLocalAddrAdded",
"splitArgs": [
{
"VariableInfo": {
@@ -2974,27 +3009,11 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Path->LocalAddress), &Path->LocalAddress)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ClosedRemotely",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "!!(Flags & QUIC_CLOSE_QUIC_STATUS)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
}
],
"macro": {
@@ -3003,17 +3022,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnVersionSet": {
+ "ConnRemoteAddrAdded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Version = %u",
- "UniqueId": "ConnVersionSet",
+ "TraceString": "[conn][%p] New Remote IP: %!ADDR!",
+ "UniqueId": "ConnRemoteAddrAdded",
"splitArgs": [
{
"VariableInfo": {
@@ -3025,10 +3044,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.QuicVersion",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Path->RemoteAddress), &Path->RemoteAddress)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg3"
}
],
@@ -3038,17 +3057,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnErrorStatus": {
+ "ConnDestCidAdded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] ERROR, %u, %s.",
- "UniqueId": "ConnErrorStatus",
+ "TraceString": "[conn][%p] (SeqNum=%llu) New Destination CID: %!CID!",
+ "UniqueId": "ConnDestCidAdded",
"splitArgs": [
{
"VariableInfo": {
@@ -3060,18 +3079,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Path->DestCid->CID.SequenceNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"Set current compartment Id\"",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(Path->DestCid->CID.Length, Path->DestCid->CID.Data)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "!CID!",
"MacroVariableName": "arg4"
}
],
@@ -3081,17 +3100,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnServerResumeTicket": {
+ "ConnSourceCidAdded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Server app accepted resumption ticket",
- "UniqueId": "ConnServerResumeTicket",
+ "TraceString": "[conn][%p] (SeqNum=%llu) New Source CID: %!CID!",
+ "UniqueId": "ConnSourceCidAdded",
"splitArgs": [
{
"VariableInfo": {
@@ -3100,6 +3119,22 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SourceCid->CID.SequenceNumber",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(SourceCid->CID.Length, SourceCid->CID.Data)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!CID!",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -3108,17 +3143,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnHandshakeStart": {
+ "ConnInitializeComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake start",
- "UniqueId": "ConnHandshakeStart",
+ "TraceString": "[conn][%p] Initialize complete",
+ "UniqueId": "ConnInitializeComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -3135,652 +3170,488 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "IgnoreCryptoFrame": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring received crypto after cleanup",
- "UniqueId": "IgnoreCryptoFrame",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DiscardKeyType": {
+ "ConnUnregistered": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Discarding key type = %hhu",
- "UniqueId": "DiscardKeyType",
+ "TraceString": "[conn][%p] Unregistered from %p",
+ "UniqueId": "ConnUnregistered",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "KeyType",
+ "UserSuppliedTrimmed": "Connection->Registration",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ZeroRttAccepted": {
+ "ConnDestroyed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 0-RTT accepted",
- "UniqueId": "ZeroRttAccepted",
+ "TraceString": "[conn][%p] Destroyed",
+ "UniqueId": "ConnDestroyed",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ZeroRttRejected": {
+ "ConnHandleClosed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 0-RTT rejected",
- "UniqueId": "ZeroRttRejected",
+ "TraceString": "[conn][%p] Handle closed",
+ "UniqueId": "ConnHandleClosed",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "HandshakeConfirmedServer": {
+ "ConnRegistered": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake confirmed (server)",
- "UniqueId": "HandshakeConfirmedServer",
+ "TraceString": "[conn][%p] Registered with %p",
+ "UniqueId": "ConnRegistered",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Registration",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TicketReady": {
+ "ConnRundown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ticket ready",
- "UniqueId": "TicketReady",
+ "TraceString": "[conn][%p] Rundown, IsServer=%hu, CorrelationId=%llu",
+ "UniqueId": "ConnRundown",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "CryptoDump": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] QS:%u MAX:%u UNA:%u NXT:%u RECOV:%u-%u",
- "UniqueId": "CryptoDump",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->TlsState.BufferTotalLength",
+ "UserSuppliedTrimmed": "QuicConnIsServer(Connection)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->MaxSentLength",
+ "UserSuppliedTrimmed": "Connection->Stats.CorrelationId",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->UnAckedOffset",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->NextSendOffset",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->InRecovery ? Crypto->RecoveryNextOffset : 0",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->InRecovery ? Crypto->RecoveryEndOffset : 0",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg8"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CryptoDumpUnacked": {
+ "ConnAssignWorker": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] unACKed: [%llu, %llu]",
- "UniqueId": "CryptoDumpUnacked",
+ "TraceString": "[conn][%p] Assigned worker: %p",
+ "UniqueId": "ConnAssignWorker",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "UnAcked",
+ "UserSuppliedTrimmed": "Connection->Worker",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Sack->Low",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CryptoDumpUnacked2": {
+ "ConnVersionSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] unACKed: [%llu, %u]",
- "UniqueId": "CryptoDumpUnacked2",
+ "TraceString": "[conn][%p] Version = %u",
+ "UniqueId": "ConnVersionSet",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "UnAcked",
+ "UserSuppliedTrimmed": "Connection->Stats.QuicVersion",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->MaxSentLength",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "u",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NoMoreRoomForCrypto": {
+ "ConnHandshakeComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] No room for CRYPTO frame",
- "UniqueId": "NoMoreRoomForCrypto",
+ "TraceString": "[conn][%p] Handshake complete",
+ "UniqueId": "ConnHandshakeComplete",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AddCryptoFrame": {
+ "ConnDestCidRemoved": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Sending %hu crypto bytes, offset=%u",
- "UniqueId": "AddCryptoFrame",
+ "TraceString": "[conn][%p] (SeqNum=%llu) Removed Destination CID: %!CID!",
+ "UniqueId": "ConnDestCidRemoved",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "UserSuppliedTrimmed": "DestCid->CID.SequenceNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CryptoOffset",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(DestCid->CID.Length, DestCid->CID.Data)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "!CID!",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecoverCrypto": {
+ "ConnExecTimerOper": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Recovering crypto from %llu up to %llu",
- "UniqueId": "RecoverCrypto",
+ "TraceString": "[conn][%p] Execute: %u",
+ "UniqueId": "ConnExecTimerOper",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Start",
+ "UserSuppliedTrimmed": "QUIC_CONN_TIMER_ACK_DELAY",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "End",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AckCrypto": {
+ "ConnShutdownComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received ack for %u crypto bytes, offset=%u",
- "UniqueId": "AckCrypto",
+ "TraceString": "[conn][%p] Shutdown complete, PeerFailedToAcknowledged=%hhu.",
+ "UniqueId": "ConnShutdownComplete",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Length",
+ "UserSuppliedTrimmed": "Connection->State.ShutdownCompleteTimedOut",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Offset",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecvCrypto": {
+ "ConnAppShutdown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received %hu crypto bytes, offset=%llu Ready=%hhu",
- "UniqueId": "RecvCrypto",
+ "TraceString": "[conn][%p] App Shutdown: %llu (Remote=%hhu)",
+ "UniqueId": "ConnAppShutdown",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame->Length",
+ "UserSuppliedTrimmed": "ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame->Offset",
+ "UserSuppliedTrimmed": "ClosedRemotely",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*DataReady",
- "SuggestedTelemetryName": "arg5"
- },
"DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateConnected": {
+ "ConnTransportShutdown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_CONNECTED (Resume=%hhu)",
- "UniqueId": "IndicateConnected",
+ "TraceString": "[conn][%p] Transport Shutdown: %llu (Remote=%hhu) (QS=%hhu)",
+ "UniqueId": "ConnTransportShutdown",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Event.CONNECTED.SessionResumed",
+ "UserSuppliedTrimmed": "ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "DrainCrypto": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] Draining %u crypto bytes",
- "UniqueId": "DrainCrypto",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCryptoGetConnection(Crypto)",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "RecvBufferConsumed",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "ClosedRemotely",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
},
- "CustomSettings": null
- }
- },
- "CryptoNotReady": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] No complete TLS messages to process",
- "UniqueId": "CryptoNotReady",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "!!(Flags & QUIC_CLOSE_QUIC_STATUS)",
+ "SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnWriteKeyUpdated": {
+ "ConnErrorStatus": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Write Key Updated, %hhu.",
- "UniqueId": "ConnWriteKeyUpdated",
+ "TraceString": "[conn][%p] ERROR, %u, %s.",
+ "UniqueId": "ConnErrorStatus",
"splitArgs": [
{
"VariableInfo": {
@@ -3792,11 +3663,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->TlsState.WriteKey",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "\"Set current compartment Id\"",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -3805,17 +3684,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnReadKeyUpdated": {
+ "ConnServerResumeTicket": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Read Key Updated, %hhu.",
- "UniqueId": "ConnReadKeyUpdated",
+ "TraceString": "[conn][%p] Server app accepted resumption ticket",
+ "UniqueId": "ConnServerResumeTicket",
"splitArgs": [
{
"VariableInfo": {
@@ -3824,14 +3703,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Crypto->TlsState.ReadKey",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -3840,17 +3711,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnNewPacketKeys": {
+ "ConnHandshakeStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] New packet keys created successfully.",
- "UniqueId": "ConnNewPacketKeys",
+ "TraceString": "[conn][%p] Handshake start",
+ "UniqueId": "ConnHandshakeStart",
"splitArgs": [
{
"VariableInfo": {
@@ -3867,17 +3738,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnKeyPhaseChange": {
+ "ConnPacketRecv": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Key phase change (locally initiated=%hhu).",
- "UniqueId": "ConnKeyPhaseChange",
+ "TraceString": "[conn][%p][RX][%llu] %c (%hu bytes)",
+ "UniqueId": "ConnPacketRecv",
"splitArgs": [
{
"VariableInfo": {
@@ -3889,69 +3760,58 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "LocalUpdate",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "NoSniPresent": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] No SNI extension present",
- "UniqueId": "NoSniPresent",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Packet->IsShortHeader ? QUIC_TRACE_PACKET_ONE_RTT : (Packet->LH->Type + 1)",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Packet->HeaderLength + Packet->PayloadLength",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPReserved": {
+ "ConnSourceCidRemoved": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Reserved ID %llu, length %hu",
- "UniqueId": "DecodeTPReserved",
+ "TraceString": "[conn][%p] (SeqNum=%llu) Removed Source CID: %!CID!",
+ "UniqueId": "ConnSourceCidRemoved",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Id",
+ "UserSuppliedTrimmed": "NextSourceCid->CID.SequenceNumber",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
@@ -3959,287 +3819,219 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Length",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(NextSourceCid->CID.Length, NextSourceCid->CID.Data)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "!CID!",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPUnknown": {
+ "ConnLocalAddrRemoved": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Unknown ID %llu, length %hu",
- "UniqueId": "DecodeTPUnknown",
+ "TraceString": "[conn][%p] Removed Local IP: %!ADDR!",
+ "UniqueId": "ConnLocalAddrRemoved",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Id",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Connection->Paths[0].LocalAddress), &Connection->Paths[0].LocalAddress)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Length",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPStart": {
+ "ConnOutFlowStats": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Encoding Transport Parameters",
- "UniqueId": "EncodeTPStart",
+ "TraceString": "[conn][%p] OUT: BytesSent=%llu InFlight=%u InFlightMax=%u CWnd=%u SSThresh=%u ConnFC=%llu ISB=%llu PostedBytes=%llu SRtt=%u",
+ "UniqueId": "ConnOutFlowStats",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "MacroVariableName": "arg2"
},
- "CustomSettings": null
- }
- },
- "EncodeTPOriginalDestinationCID": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Original Destination Connection ID (%s)",
- "UniqueId": "EncodeTPOriginalDestinationCID",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection->Stats.Send.TotalBytes",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->OriginalDestinationConnectionID,\n TransportParams->OriginalDestinationConnectionIDLength).Buffer",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Connection->CongestionControl.BytesInFlight",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
},
- "CustomSettings": null
- }
- },
- "EncodeTPIdleTimeout": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Idle Timeout (%llu ms)",
- "UniqueId": "EncodeTPIdleTimeout",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection->CongestionControl.BytesInFlightMax",
+ "SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->IdleTimeout",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Connection->CongestionControl.CongestionWindow",
+ "SuggestedTelemetryName": "arg6"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg6"
},
- "CustomSettings": null
- }
- },
- "EncodeTPStatelessResetToken": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Stateless Reset Token (%s)",
- "UniqueId": "EncodeTPStatelessResetToken",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection->CongestionControl.SlowStartThreshold",
+ "SuggestedTelemetryName": "arg7"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg7"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->StatelessResetToken,\n QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Connection->Send.PeerMaxData - Connection->Send.OrderedStreamBytesSent",
+ "SuggestedTelemetryName": "arg8"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg8"
},
- "CustomSettings": null
- }
- },
- "EncodeTPMaxUdpPayloadSize": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Udp Payload Size (%llu bytes)",
- "UniqueId": "EncodeTPMaxUdpPayloadSize",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection->SendBuffer.IdealBytes",
+ "SuggestedTelemetryName": "arg9"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg9"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxUdpPayloadSize",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Connection->SendBuffer.PostedBytes",
+ "SuggestedTelemetryName": "arg10"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg10"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->GotFirstRttSample ? Path->SmoothedRtt : 0",
+ "SuggestedTelemetryName": "arg11"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg11"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPInitMaxData": {
+ "ConnOutFlowStreamStats": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Data (%llu bytes)",
- "UniqueId": "EncodeTPInitMaxData",
+ "TraceString": "[conn][%p] OUT: StreamFC=%llu StreamSendWindow=%llu",
+ "UniqueId": "ConnOutFlowStreamStats",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxData",
+ "UserSuppliedTrimmed": "FcAvailable",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendWindow",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPInitMaxStreamDataBidiLocal": {
+ "ConnInFlowStats": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Local Bidirectional Stream Data (%llu bytes)",
- "UniqueId": "EncodeTPInitMaxStreamDataBidiLocal",
+ "TraceString": "[conn][%p] IN: BytesRecv=%llu",
+ "UniqueId": "ConnInFlowStats",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiLocal",
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalBytes",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
@@ -4247,162 +4039,215 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPInitMaxStreamDataBidiRemote": {
+ "ConnStats": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Remote Bidirectional Stream Data (%llu bytes)",
- "UniqueId": "EncodeTPInitMaxStreamDataBidiRemote",
+ "TraceString": "[conn][%p] STATS: SRtt=%u CongestionCount=%u PersistentCongestionCount=%u SendTotalBytes=%llu RecvTotalBytes=%llu",
+ "UniqueId": "ConnStats",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiRemote",
+ "UserSuppliedTrimmed": "Path->SmoothedRtt",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "EncodeTPInitMaxStreamUni": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Unidirectional Stream Data (%llu)",
- "UniqueId": "EncodeTPInitMaxStreamUni",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection->Stats.Send.CongestionCount",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataUni",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Connection->Stats.Send.PersistentCongestionCount",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Send.TotalBytes",
+ "SuggestedTelemetryName": "arg6"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalBytes",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg7"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPMaxBidiStreams": {
+ "ConnPacketStats": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Bidirectional Streams (%llu)",
- "UniqueId": "EncodeTPMaxBidiStreams",
+ "TraceString": "[conn][%p] STATS: SendTotalPackets=%llu SendSuspectedLostPackets=%llu SendSpuriousLostPackets=%llu RecvTotalPackets=%llu RecvReorderedPackets=%llu RecvDroppedPackets=%llu RecvDuplicatePackets=%llu RecvDecryptionFailures=%llu",
+ "UniqueId": "ConnPacketStats",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxBidiStreams",
+ "UserSuppliedTrimmed": "Connection->Stats.Send.TotalPackets",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Send.SuspectedLostPackets",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Send.SpuriousLostPackets",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalPackets",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.ReorderedPackets",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.DroppedPackets",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg8"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.DuplicatePackets",
+ "SuggestedTelemetryName": "arg9"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg9"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Stats.Recv.DecryptionFailures",
+ "SuggestedTelemetryName": "arg10"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg10"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPMaxUniStreams": {
+ "ConnOutFlowBlocked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Unidirectional Streams (%llu)",
- "UniqueId": "EncodeTPMaxUniStreams",
+ "TraceString": "[conn][%p] Send Blocked Flags: %hhu",
+ "UniqueId": "ConnOutFlowBlocked",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxUniStreams",
+ "UserSuppliedTrimmed": "Connection->OutFlowBlockedReasons",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPAckDelayExponent": {
+ "IgnoreCryptoFrame": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: ACK Delay Exponent (%llu)",
- "UniqueId": "EncodeTPAckDelayExponent",
+ "TraceString": "[conn][%p] Ignoring received crypto after cleanup",
+ "UniqueId": "IgnoreCryptoFrame",
"splitArgs": [
{
"VariableInfo": {
@@ -4411,33 +4256,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->AckDelayExponent",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPMaxAckDelay": {
+ "DiscardKeyType": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max ACK Delay (%llu ms)",
- "UniqueId": "EncodeTPMaxAckDelay",
+ "TraceString": "[conn][%p] Discarding key type = %hhu",
+ "UniqueId": "DiscardKeyType",
"splitArgs": [
{
"VariableInfo": {
@@ -4449,30 +4286,30 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxAckDelay",
+ "UserSuppliedTrimmed": "KeyType",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPDisableMigration": {
+ "ZeroRttAccepted": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Disable Active Migration",
- "UniqueId": "EncodeTPDisableMigration",
+ "TraceString": "[conn][%p] 0-RTT accepted",
+ "UniqueId": "ZeroRttAccepted",
"splitArgs": [
{
"VariableInfo": {
@@ -4484,22 +4321,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPPreferredAddress": {
+ "ZeroRttRejected": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Preferred Address",
- "UniqueId": "EncodeTPPreferredAddress",
+ "TraceString": "[conn][%p] 0-RTT rejected",
+ "UniqueId": "ZeroRttRejected",
"splitArgs": [
{
"VariableInfo": {
@@ -4511,22 +4348,22 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPCIDLimit": {
+ "HandshakeConfirmedServer": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Connection ID Limit (%llu)",
- "UniqueId": "EncodeTPCIDLimit",
+ "TraceString": "[conn][%p] Handshake confirmed (server)",
+ "UniqueId": "HandshakeConfirmedServer",
"splitArgs": [
{
"VariableInfo": {
@@ -4535,33 +4372,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->ActiveConnectionIdLimit",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPOriginalCID": {
+ "CryptoDump": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Initial Source Connection ID (%s)",
- "UniqueId": "EncodeTPOriginalCID",
+ "TraceString": "[conn][%p] QS:%u MAX:%u UNA:%u NXT:%u RECOV:%u-%u",
+ "UniqueId": "CryptoDump",
"splitArgs": [
{
"VariableInfo": {
@@ -4573,11 +4402,51 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->InitialSourceConnectionID,\n TransportParams->InitialSourceConnectionIDLength).Buffer",
+ "UserSuppliedTrimmed": "Crypto->TlsState.BufferTotalLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Crypto->MaxSentLength",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Crypto->UnAckedOffset",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Crypto->NextSendOffset",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Crypto->InRecovery ? Crypto->RecoveryNextOffset : 0",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Crypto->InRecovery ? Crypto->RecoveryEndOffset : 0",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg8"
}
],
"macro": {
@@ -4593,10 +4462,10 @@
"CustomSettings": null
}
},
- "EncodeMaxDatagramFrameSize": {
+ "CryptoDumpUnacked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Datagram Frame Size (%llu bytes)",
- "UniqueId": "EncodeMaxDatagramFrameSize",
+ "TraceString": "[conn][%p] unACKed: [%llu, %llu]",
+ "UniqueId": "CryptoDumpUnacked",
"splitArgs": [
{
"VariableInfo": {
@@ -4608,11 +4477,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxDatagramFrameSize",
+ "UserSuppliedTrimmed": "UnAcked",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Sack->Low",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -4621,17 +4498,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPTest": {
+ "CryptoDumpUnacked2": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: TEST TP (Type %hu, Length %hu)",
- "UniqueId": "EncodeTPTest",
+ "TraceString": "[conn][%p] unACKed: [%llu, %u]",
+ "UniqueId": "CryptoDumpUnacked2",
"splitArgs": [
{
"VariableInfo": {
@@ -4643,18 +4520,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->TestTransportParameter.Type",
+ "UserSuppliedTrimmed": "UnAcked",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->TestTransportParameter.Length",
+ "UserSuppliedTrimmed": "Crypto->MaxSentLength",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg4"
}
],
@@ -4664,17 +4541,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EncodeTPEnd": {
+ "NoMoreRoomForCrypto": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Encoded %hu bytes for QUIC TP",
- "UniqueId": "EncodeTPEnd",
+ "TraceString": "[conn][%p] No room for CRYPTO frame",
+ "UniqueId": "NoMoreRoomForCrypto",
"splitArgs": [
{
"VariableInfo": {
@@ -4683,14 +4560,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)FinalTPLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -4699,17 +4568,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPStart": {
+ "AddCryptoFrame": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Decoding Peer Transport Parameters (%hu bytes)",
- "UniqueId": "DecodeTPStart",
+ "TraceString": "[conn][%p] Sending %hu crypto bytes, offset=%u",
+ "UniqueId": "AddCryptoFrame",
"splitArgs": [
{
"VariableInfo": {
@@ -4721,30 +4590,38 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TPLen",
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "hu",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CryptoOffset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ }
+ ],
+ "macro": {
"MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPOriginalDestinationCID": {
+ "RecoverCrypto": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Original Connection Destination ID (%s)",
- "UniqueId": "DecodeTPOriginalDestinationCID",
+ "TraceString": "[conn][%p] Recovering crypto from %llu up to %llu",
+ "UniqueId": "RecoverCrypto",
"splitArgs": [
{
"VariableInfo": {
@@ -4756,11 +4633,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->OriginalDestinationConnectionID,\n TransportParams->OriginalDestinationConnectionIDLength).Buffer",
+ "UserSuppliedTrimmed": "Start",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "End",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -4769,17 +4654,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPIdleTimeout": {
+ "AckCrypto": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Idle Timeout (%llu ms)",
- "UniqueId": "DecodeTPIdleTimeout",
+ "TraceString": "[conn][%p] Received ack for %u crypto bytes, offset=%u",
+ "UniqueId": "AckCrypto",
"splitArgs": [
{
"VariableInfo": {
@@ -4791,11 +4676,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->IdleTimeout",
+ "UserSuppliedTrimmed": "Length",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Offset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -4804,17 +4697,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPStatelessResetToken": {
+ "RecvCrypto": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Stateless Reset Token (%s)",
- "UniqueId": "DecodeTPStatelessResetToken",
+ "TraceString": "[conn][%p] Received %hu crypto bytes, offset=%llu Ready=%hhu",
+ "UniqueId": "RecvCrypto",
"splitArgs": [
{
"VariableInfo": {
@@ -4826,11 +4719,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->StatelessResetToken,\n QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
+ "UserSuppliedTrimmed": "(uint16_t)Frame->Length",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame->Offset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*DataReady",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -4839,17 +4748,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPMaxUdpPayloadSize": {
+ "IndicateConnected": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Udp Payload Size (%llu bytes)",
- "UniqueId": "DecodeTPMaxUdpPayloadSize",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_CONNECTED (Resume=%hhu)",
+ "UniqueId": "IndicateConnected",
"splitArgs": [
{
"VariableInfo": {
@@ -4861,10 +4770,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxUdpPayloadSize",
+ "UserSuppliedTrimmed": "Event.CONNECTED.SessionResumed",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
@@ -4874,21 +4783,21 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPInitMaxData": {
+ "DrainCrypto": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Data (%llu bytes)",
- "UniqueId": "DecodeTPInitMaxData",
+ "TraceString": "[conn][%p] Draining %u crypto bytes",
+ "UniqueId": "DrainCrypto",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "QuicCryptoGetConnection(Crypto)",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -4896,10 +4805,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxData",
+ "UserSuppliedTrimmed": "RecvBufferConsumed",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
}
],
@@ -4909,17 +4818,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPInitMaxStreamDataBidiLocal": {
+ "CryptoNotReady": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Local Bidirectional Stream Data (%llu bytes)",
- "UniqueId": "DecodeTPInitMaxStreamDataBidiLocal",
+ "TraceString": "[conn][%p] No complete TLS messages to process",
+ "UniqueId": "CryptoNotReady",
"splitArgs": [
{
"VariableInfo": {
@@ -4928,14 +4837,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiLocal",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -4944,157 +4845,149 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPInitMaxStreamDataBidiRemote": {
+ "ConnWriteKeyUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Remote Bidirectional Stream Data (%llu bytes)",
- "UniqueId": "DecodeTPInitMaxStreamDataBidiRemote",
+ "TraceString": "[conn][%p] Write Key Updated, %hhu.",
+ "UniqueId": "ConnWriteKeyUpdated",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiRemote",
+ "UserSuppliedTrimmed": "Crypto->TlsState.WriteKey",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPInitMaxStreamDataBidiUni": {
+ "ConnReadKeyUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Unidirectional Stream Data (%llu)",
- "UniqueId": "DecodeTPInitMaxStreamDataBidiUni",
+ "TraceString": "[conn][%p] Read Key Updated, %hhu.",
+ "UniqueId": "ConnReadKeyUpdated",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataUni",
+ "UserSuppliedTrimmed": "Crypto->TlsState.ReadKey",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPMaxBidiStreams": {
+ "ConnNewPacketKeys": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Bidirectional Streams (%llu)",
- "UniqueId": "DecodeTPMaxBidiStreams",
+ "TraceString": "[conn][%p] New packet keys created successfully.",
+ "UniqueId": "ConnNewPacketKeys",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxBidiStreams",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPMaxUniStreams": {
+ "ConnKeyPhaseChange": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Unidirectional Streams (%llu)",
- "UniqueId": "DecodeTPMaxUniStreams",
+ "TraceString": "[conn][%p] Key phase change (locally initiated=%hhu).",
+ "UniqueId": "ConnKeyPhaseChange",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->InitialMaxUniStreams",
+ "UserSuppliedTrimmed": "LocalUpdate",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPAckDelayExponent": {
+ "NoSniPresent": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: ACK Delay Exponent (%llu)",
- "UniqueId": "DecodeTPAckDelayExponent",
+ "TraceString": "[conn][%p] No SNI extension present",
+ "UniqueId": "NoSniPresent",
"splitArgs": [
{
"VariableInfo": {
@@ -5103,33 +4996,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->AckDelayExponent",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPMaxAckDelay": {
+ "DecodeTPReserved": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max ACK Delay (%llu ms)",
- "UniqueId": "DecodeTPMaxAckDelay",
+ "TraceString": "[conn][%p] TP: Reserved ID %llu, length %hu",
+ "UniqueId": "DecodeTPReserved",
"splitArgs": [
{
"VariableInfo": {
@@ -5141,30 +5026,38 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxAckDelay",
+ "UserSuppliedTrimmed": "Id",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Length",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPDisableActiveMigration": {
+ "DecodeTPUnknown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Disable Active Migration",
- "UniqueId": "DecodeTPDisableActiveMigration",
+ "TraceString": "[conn][%p] TP: Unknown ID %llu, length %hu",
+ "UniqueId": "DecodeTPUnknown",
"splitArgs": [
{
"VariableInfo": {
@@ -5173,52 +5066,41 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "DecodeTPPreferredAddress": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Preferred Address",
- "UniqueId": "DecodeTPPreferredAddress",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Id",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Length",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPCIDLimit": {
+ "EncodeTPStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Connection ID Limit (%llu)",
- "UniqueId": "DecodeTPCIDLimit",
+ "TraceString": "[conn][%p] Encoding Transport Parameters (Server = %hhu)",
+ "UniqueId": "EncodeTPStart",
"splitArgs": [
{
"VariableInfo": {
@@ -5230,10 +5112,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->ActiveConnectionIdLimit",
+ "UserSuppliedTrimmed": "IsServerTP",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
@@ -5243,17 +5125,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPInitialSourceCID": {
+ "EncodeTPOriginalDestinationCID": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Initial Source Connection ID (%s)",
- "UniqueId": "DecodeTPInitialSourceCID",
+ "TraceString": "[conn][%p] TP: Original Destination Connection ID (%s)",
+ "UniqueId": "EncodeTPOriginalDestinationCID",
"splitArgs": [
{
"VariableInfo": {
@@ -5265,7 +5147,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->InitialSourceConnectionID,\n TransportParams->InitialSourceConnectionIDLength).Buffer",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->OriginalDestinationConnectionID,\r\n TransportParams->OriginalDestinationConnectionIDLength).Buffer",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "s",
@@ -5278,17 +5160,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPRetrySourceCID": {
+ "EncodeTPIdleTimeout": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Retry Source Connection ID (%s)",
- "UniqueId": "DecodeTPRetrySourceCID",
+ "TraceString": "[conn][%p] TP: Idle Timeout (%llu ms)",
+ "UniqueId": "EncodeTPIdleTimeout",
"splitArgs": [
{
"VariableInfo": {
@@ -5300,10 +5182,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->RetrySourceConnectionID,\n TransportParams->RetrySourceConnectionIDLength).Buffer",
+ "UserSuppliedTrimmed": "TransportParams->IdleTimeout",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
@@ -5313,17 +5195,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DecodeTPMaxDatagramFrameSize": {
+ "EncodeTPStatelessResetToken": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Max Datagram Frame Size (%llu bytes)",
- "UniqueId": "DecodeTPMaxDatagramFrameSize",
+ "TraceString": "[conn][%p] TP: Stateless Reset Token (%s)",
+ "UniqueId": "EncodeTPStatelessResetToken",
"splitArgs": [
{
"VariableInfo": {
@@ -5335,10 +5217,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TransportParams->MaxDatagramFrameSize",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->StatelessResetToken,\r\n QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
@@ -5348,17 +5230,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatagramSendStateChanged": {
+ "EncodeTPMaxUdpPayloadSize": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating DATAGRAM_SEND_STATE_CHANGED to %u",
- "UniqueId": "DatagramSendStateChanged",
+ "TraceString": "[conn][%p] TP: Max Udp Payload Size (%llu bytes)",
+ "UniqueId": "EncodeTPMaxUdpPayloadSize",
"splitArgs": [
{
"VariableInfo": {
@@ -5370,10 +5252,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "State",
+ "UserSuppliedTrimmed": "TransportParams->MaxUdpPayloadSize",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
@@ -5383,17 +5265,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatagramSendShutdown": {
+ "EncodeTPInitMaxData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Datagram send shutdown",
- "UniqueId": "DatagramSendShutdown",
+ "TraceString": "[conn][%p] TP: Max Data (%llu bytes)",
+ "UniqueId": "EncodeTPInitMaxData",
"splitArgs": [
{
"VariableInfo": {
@@ -5402,6 +5284,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxData",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -5410,17 +5300,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateDatagramStateChanged": {
+ "EncodeTPInitMaxStreamDataBidiLocal": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating DATAGRAM_STATE_CHANGED [SendEnabled=%hhu] [MaxSendLength=%hu]",
- "UniqueId": "IndicateDatagramStateChanged",
+ "TraceString": "[conn][%p] TP: Max Local Bidirectional Stream Data (%llu bytes)",
+ "UniqueId": "EncodeTPInitMaxStreamDataBidiLocal",
"splitArgs": [
{
"VariableInfo": {
@@ -5432,19 +5322,11 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Event.DATAGRAM_STATE_CHANGED.SendEnabled",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiLocal",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.DATAGRAM_STATE_CHANGED.MaxSendLength",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
}
],
"macro": {
@@ -5453,17 +5335,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatagramSendQueued": {
+ "EncodeTPInitMaxStreamDataBidiRemote": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Datagram [%p] queued with %llu bytes (flags 0x%x)",
- "UniqueId": "DatagramSendQueued",
+ "TraceString": "[conn][%p] TP: Max Remote Bidirectional Stream Data (%llu bytes)",
+ "UniqueId": "EncodeTPInitMaxStreamDataBidiRemote",
"splitArgs": [
{
"VariableInfo": {
@@ -5475,27 +5357,11 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiRemote",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest->TotalLength",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest->Flags",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -5504,17 +5370,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateDatagramReceived": {
+ "EncodeTPInitMaxStreamUni": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating DATAGRAM_RECEIVED [len=%hu]",
- "UniqueId": "IndicateDatagramReceived",
+ "TraceString": "[conn][%p] TP: Max Unidirectional Stream Data (%llu)",
+ "UniqueId": "EncodeTPInitMaxStreamUni",
"splitArgs": [
{
"VariableInfo": {
@@ -5526,10 +5392,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataUni",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
@@ -5539,1567 +5405,1265 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogUnknownType": {
+ "EncodeTPMaxBidiStreams": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] unknown frame (%hu)",
- "UniqueId": "FrameLogUnknownType",
+ "TraceString": "[conn][%p] TP: Max Bidirectional Streams (%llu)",
+ "UniqueId": "EncodeTPMaxBidiStreams",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxBidiStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "FrameType",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPadding": {
+ "EncodeTPMaxUniStreams": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PADDING Len:%hu",
- "UniqueId": "FrameLogPadding",
+ "TraceString": "[conn][%p] TP: Max Unidirectional Streams (%llu)",
+ "UniqueId": "EncodeTPMaxUniStreams",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxUniStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(*Offset - Start) + 1",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPing": {
+ "EncodeTPAckDelayExponent": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PING",
- "UniqueId": "FrameLogPing",
+ "TraceString": "[conn][%p] TP: ACK Delay Exponent (%llu)",
+ "UniqueId": "EncodeTPAckDelayExponent",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->AckDelayExponent",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckInvalid": {
+ "EncodeTPMaxAckDelay": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] ACK [Invalid]",
- "UniqueId": "FrameLogAckInvalid",
+ "TraceString": "[conn][%p] TP: Max ACK Delay (%llu ms)",
+ "UniqueId": "EncodeTPMaxAckDelay",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->MaxAckDelay",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAck": {
+ "EncodeTPDisableMigration": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] ACK Largest:%llu Delay:%llu",
- "UniqueId": "FrameLogAck",
+ "TraceString": "[conn][%p] TP: Disable Active Migration",
+ "UniqueId": "EncodeTPDisableMigration",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.AckDelay",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckSingleBlock": {
+ "EncodeTPPreferredAddress": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] %llu",
- "UniqueId": "FrameLogAckSingleBlock",
+ "TraceString": "[conn][%p] TP: Preferred Address",
+ "UniqueId": "EncodeTPPreferredAddress",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckMultiBlock": {
+ "EncodeTPCIDLimit": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] %llu - %llu",
- "UniqueId": "FrameLogAckMultiBlock",
+ "TraceString": "[conn][%p] TP: Connection ID Limit (%llu)",
+ "UniqueId": "EncodeTPCIDLimit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->ActiveConnectionIdLimit",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.LargestAcknowledged - Frame.FirstAckBlock",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckInvalidBlock": {
+ "EncodeTPOriginalCID": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] [Invalid Block]",
- "UniqueId": "FrameLogAckInvalidBlock",
+ "TraceString": "[conn][%p] TP: Initial Source Connection ID (%s)",
+ "UniqueId": "EncodeTPOriginalCID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->InitialSourceConnectionID,\r\n TransportParams->InitialSourceConnectionIDLength).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckEcnInvalid": {
+ "EncodeTPRetrySourceCID": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] ECN [Invalid]",
- "UniqueId": "FrameLogAckEcnInvalid",
+ "TraceString": "[conn][%p] TP: Retry Source Connection ID (%s)",
+ "UniqueId": "EncodeTPRetrySourceCID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->RetrySourceConnectionID,\r\n TransportParams->RetrySourceConnectionIDLength).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogAckEcn": {
+ "EncodeMaxDatagramFrameSize": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] ECN [ECT0=%llu,ECT1=%llu,CE=%llu]",
- "UniqueId": "FrameLogAckEcn",
+ "TraceString": "[conn][%p] TP: Max Datagram Frame Size (%llu bytes)",
+ "UniqueId": "EncodeMaxDatagramFrameSize",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->MaxDatagramFrameSize",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Ecn.ECT_0_Count",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Ecn.ECT_1_Count",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Ecn.CE_Count",
- "SuggestedTelemetryName": "arg7"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg7"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogResetStreamInvalid": {
+ "EncodeTPDisable1RttEncryption": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] RESET_STREAM [Invalid]",
- "UniqueId": "FrameLogResetStreamInvalid",
+ "TraceString": "[conn][%p] TP: Disable 1-RTT Encryption",
+ "UniqueId": "EncodeTPDisable1RttEncryption",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogResetStream": {
+ "EncodeTPTest": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] RESET_STREAM ID:%llu ErrorCode:0x%llX FinalSize:%llu",
- "UniqueId": "FrameLogResetStream",
+ "TraceString": "[conn][%p] TP: TEST TP (Type %hu, Length %hu)",
+ "UniqueId": "EncodeTPTest",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TestParam->Type",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
+ "UserSuppliedTrimmed": "TestParam->Length",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.ErrorCode",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llX",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.FinalSize",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg7"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStopSendingInvalid": {
+ "EncodeTPEnd": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STOP_SENDING [Invalid]",
- "UniqueId": "FrameLogStopSendingInvalid",
+ "TraceString": "[conn][%p] Encoded %hu bytes for QUIC TP",
+ "UniqueId": "EncodeTPEnd",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "(uint16_t)FinalTPLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStopSending": {
+ "DecodeTPStart": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STOP_SENDING ID:%llu Error:0x%llX",
- "UniqueId": "FrameLogStopSending",
+ "TraceString": "[conn][%p] Decoding Transport Parameters (Server = %hhu) (%hu bytes)",
+ "UniqueId": "DecodeTPStart",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "IsServerTP",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
+ "UserSuppliedTrimmed": "TPLen",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.ErrorCode",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llX",
- "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogCryptoInvalid": {
+ "DecodeTPOriginalDestinationCID": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] CRYPTO [Invalid]",
- "UniqueId": "FrameLogCryptoInvalid",
+ "TraceString": "[conn][%p] TP: Original Connection Destination ID (%s)",
+ "UniqueId": "DecodeTPOriginalDestinationCID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->OriginalDestinationConnectionID,\r\n TransportParams->OriginalDestinationConnectionIDLength).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogCrypto": {
+ "DecodeTPIdleTimeout": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] CRYPTO Offset:%llu Len:%hu",
- "UniqueId": "FrameLogCrypto",
+ "TraceString": "[conn][%p] TP: Idle Timeout (%llu ms)",
+ "UniqueId": "DecodeTPIdleTimeout",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->IdleTimeout",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Offset",
- "SuggestedTelemetryName": "arg5"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogNewTokenInvalid": {
+ "DecodeTPStatelessResetToken": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] NEW_TOKEN [Invalid]",
- "UniqueId": "FrameLogNewTokenInvalid",
+ "TraceString": "[conn][%p] TP: Stateless Reset Token (%s)",
+ "UniqueId": "DecodeTPStatelessResetToken",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->StatelessResetToken,\r\n QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogNewToken": {
+ "DecodeTPMaxUdpPayloadSize": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] NEW_TOKEN Length:%llu",
- "UniqueId": "FrameLogNewToken",
+ "TraceString": "[conn][%p] TP: Max Udp Payload Size (%llu bytes)",
+ "UniqueId": "DecodeTPMaxUdpPayloadSize",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->MaxUdpPayloadSize",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DecodeTPInitMaxData": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] TP: Max Data (%llu bytes)",
+ "UniqueId": "DecodeTPInitMaxData",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.TokenLength",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxData",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamInvalid": {
+ "DecodeTPInitMaxStreamDataBidiLocal": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAM [Invalid]",
- "UniqueId": "FrameLogStreamInvalid",
+ "TraceString": "[conn][%p] TP: Max Local Bidirectional Stream Data (%llu bytes)",
+ "UniqueId": "DecodeTPInitMaxStreamDataBidiLocal",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiLocal",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamFin": {
+ "DecodeTPInitMaxStreamDataBidiRemote": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAM ID:%llu Offset:%llu Len:%hu Fin",
- "UniqueId": "FrameLogStreamFin",
+ "TraceString": "[conn][%p] TP: Max Remote Bidirectional Stream Data (%llu bytes)",
+ "UniqueId": "DecodeTPInitMaxStreamDataBidiRemote",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataBidiRemote",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DecodeTPInitMaxStreamDataBidiUni": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] TP: Max Unidirectional Stream Data (%llu)",
+ "UniqueId": "DecodeTPInitMaxStreamDataBidiUni",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Offset",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxStreamDataUni",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg7"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStream": {
+ "DecodeTPMaxBidiStreams": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAM ID:%llu Offset:%llu Len:%hu",
- "UniqueId": "FrameLogStream",
+ "TraceString": "[conn][%p] TP: Max Bidirectional Streams (%llu)",
+ "UniqueId": "DecodeTPMaxBidiStreams",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxBidiStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Offset",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg7"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxDataInvalid": {
+ "DecodeTPMaxUniStreams": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_DATA [Invalid]",
- "UniqueId": "FrameLogMaxDataInvalid",
+ "TraceString": "[conn][%p] TP: Max Unidirectional Streams (%llu)",
+ "UniqueId": "DecodeTPMaxUniStreams",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->InitialMaxUniStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxData": {
+ "DecodeTPAckDelayExponent": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_DATA Max:%llu",
- "UniqueId": "FrameLogMaxData",
+ "TraceString": "[conn][%p] TP: ACK Delay Exponent (%llu)",
+ "UniqueId": "DecodeTPAckDelayExponent",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->AckDelayExponent",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.MaximumData",
- "SuggestedTelemetryName": "arg5"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxStreamDataInvalid": {
+ "DecodeTPMaxAckDelay": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_STREAM_DATA [Invalid]",
- "UniqueId": "FrameLogMaxStreamDataInvalid",
+ "TraceString": "[conn][%p] TP: Max ACK Delay (%llu ms)",
+ "UniqueId": "DecodeTPMaxAckDelay",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->MaxAckDelay",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxStreamData": {
+ "DecodeTPDisableActiveMigration": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_STREAM_DATA ID:%llu Max:%llu",
- "UniqueId": "FrameLogMaxStreamData",
+ "TraceString": "[conn][%p] TP: Disable Active Migration",
+ "UniqueId": "DecodeTPDisableActiveMigration",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DecodeTPPreferredAddress": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] TP: Preferred Address",
+ "UniqueId": "DecodeTPPreferredAddress",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.MaximumData",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxStreamsInvalid": {
+ "DecodeTPCIDLimit": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_STREAMS [Invalid]",
- "UniqueId": "FrameLogMaxStreamsInvalid",
+ "TraceString": "[conn][%p] TP: Connection ID Limit (%llu)",
+ "UniqueId": "DecodeTPCIDLimit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->ActiveConnectionIdLimit",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogMaxStreams": {
+ "DecodeTPInitialSourceCID": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] MAX_STREAMS[%hu] Count:%llu",
- "UniqueId": "FrameLogMaxStreams",
+ "TraceString": "[conn][%p] TP: Initial Source Connection ID (%s)",
+ "UniqueId": "DecodeTPInitialSourceCID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->InitialSourceConnectionID,\r\n TransportParams->InitialSourceConnectionIDLength).Buffer",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DecodeTPRetrySourceCID": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] TP: Retry Source Connection ID (%s)",
+ "UniqueId": "DecodeTPRetrySourceCID",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.MaximumStreams",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "QuicCidBufToStr(\r\n TransportParams->RetrySourceConnectionID,\r\n TransportParams->RetrySourceConnectionIDLength).Buffer",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogDataBlockedInvalid": {
+ "DecodeTPMaxDatagramFrameSize": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] DATA_BLOCKED [Invalid]",
- "UniqueId": "FrameLogDataBlockedInvalid",
+ "TraceString": "[conn][%p] TP: Max Datagram Frame Size (%llu bytes)",
+ "UniqueId": "DecodeTPMaxDatagramFrameSize",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "TransportParams->MaxDatagramFrameSize",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DecodeTPDisable1RttEncryption": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] TP: Disable 1-RTT Encryption",
+ "UniqueId": "DecodeTPDisable1RttEncryption",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogDataBlocked": {
+ "DatagramSendStateChanged": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] DATA_BLOCKED Limit:%llu",
- "UniqueId": "FrameLogDataBlocked",
+ "TraceString": "[conn][%p] Indicating DATAGRAM_SEND_STATE_CHANGED to %u",
+ "UniqueId": "DatagramSendStateChanged",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "State",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DatagramSendShutdown": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] Datagram send shutdown",
+ "UniqueId": "DatagramSendShutdown",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.DataLimit",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamDataBlockedInvalid": {
+ "IndicateDatagramStateChanged": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAM_DATA_BLOCKED [Invalid]",
- "UniqueId": "FrameLogStreamDataBlockedInvalid",
+ "TraceString": "[conn][%p] Indicating DATAGRAM_STATE_CHANGED [SendEnabled=%hhu] [MaxSendLength=%hu]",
+ "UniqueId": "IndicateDatagramStateChanged",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "Event.DATAGRAM_STATE_CHANGED.SendEnabled",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
+ "UserSuppliedTrimmed": "Event.DATAGRAM_STATE_CHANGED.MaxSendLength",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamDataBlocked": {
+ "DatagramSendQueued": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAM_DATA_BLOCKED ID:%llu Limit:%llu",
- "UniqueId": "FrameLogStreamDataBlocked",
+ "TraceString": "[conn][%p] Datagram [%p] queued with %llu bytes (flags 0x%x)",
+ "UniqueId": "DatagramSendQueued",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "SendRequest",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
+ "UserSuppliedTrimmed": "SendRequest->TotalLength",
"SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "llu",
@@ -7107,81 +6671,65 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamID",
+ "UserSuppliedTrimmed": "SendRequest->Flags",
"SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamDataLimit",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamsBlockedInvalid": {
+ "IndicateDatagramReceived": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAMS_BLOCKED [Invalid]",
- "UniqueId": "FrameLogStreamsBlockedInvalid",
+ "TraceString": "[conn][%p] Indicating DATAGRAM_RECEIVED [len=%hu]",
+ "UniqueId": "IndicateDatagramReceived",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogStreamsBlocked": {
+ "FrameLogUnknownType": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] STREAMS_BLOCKED[%hu] ID:%llu",
- "UniqueId": "FrameLogStreamsBlocked",
+ "TraceString": "[%c][%cX][%llu] unknown frame (%hu)",
+ "UniqueId": "FrameLogUnknownType",
"splitArgs": [
{
"VariableInfo": {
@@ -7209,19 +6757,11 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
+ "UserSuppliedTrimmed": "FrameType",
"SuggestedTelemetryName": "arg5"
},
"DefinationEncoding": "hu",
"MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamLimit",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
}
],
"macro": {
@@ -7230,17 +6770,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogNewConnectionIDInvalid": {
+ "FrameLogPadding": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] NEW_CONN_ID [Invalid]",
- "UniqueId": "FrameLogNewConnectionIDInvalid",
+ "TraceString": "[%c][%cX][%llu] PADDING Len:%hu",
+ "UniqueId": "FrameLogPadding",
"splitArgs": [
{
"VariableInfo": {
@@ -7265,6 +6805,14 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(*Offset - Start) + 1",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -7273,17 +6821,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogNewConnectionID": {
+ "FrameLogPing": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] NEW_CONN_ID Seq:%llu RPT:%llu CID:%s Token:%s",
- "UniqueId": "FrameLogNewConnectionID",
+ "TraceString": "[%c][%cX][%llu] PING",
+ "UniqueId": "FrameLogPing",
"splitArgs": [
{
"VariableInfo": {
@@ -7308,38 +6856,6 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Sequence",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.RetirePriorTo",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(Frame.Buffer, Frame.Length).Buffer",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(Frame.Buffer + Frame.Length, QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg8"
}
],
"macro": {
@@ -7348,17 +6864,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogRetireConnectionIDInvalid": {
+ "FrameLogAckInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] RETIRE_CONN_ID [Invalid]",
- "UniqueId": "FrameLogRetireConnectionIDInvalid",
+ "TraceString": "[%c][%cX][%llu] ACK [Invalid]",
+ "UniqueId": "FrameLogAckInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -7391,17 +6907,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogRetireConnectionID": {
+ "FrameLogAck": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] RETIRE_CONN_ID Seq:%llu",
- "UniqueId": "FrameLogRetireConnectionID",
+ "TraceString": "[%c][%cX][%llu] ACK Largest:%llu Delay:%llu",
+ "UniqueId": "FrameLogAck",
"splitArgs": [
{
"VariableInfo": {
@@ -7429,11 +6945,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Sequence",
+ "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
"SuggestedTelemetryName": "arg5"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.AckDelay",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -7442,17 +6966,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPathChallengeInvalid": {
+ "FrameLogAckSingleBlock": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PATH_CHALLENGE [Invalid]",
- "UniqueId": "FrameLogPathChallengeInvalid",
+ "TraceString": "[%c][%cX][%llu] %llu",
+ "UniqueId": "FrameLogAckSingleBlock",
"splitArgs": [
{
"VariableInfo": {
@@ -7477,6 +7001,14 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -7485,17 +7017,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPathChallenge": {
+ "FrameLogAckMultiBlock": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PATH_CHALLENGE [%llu]",
- "UniqueId": "FrameLogPathChallenge",
+ "TraceString": "[%c][%cX][%llu] %llu - %llu",
+ "UniqueId": "FrameLogAckMultiBlock",
"splitArgs": [
{
"VariableInfo": {
@@ -7523,11 +7055,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicByteSwapUint64(*(uint64_t*)Frame.Data)",
+ "UserSuppliedTrimmed": "Frame.LargestAcknowledged - Frame.FirstAckBlock",
"SuggestedTelemetryName": "arg5"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.LargestAcknowledged",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -7536,17 +7076,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPathResponseInvalid": {
+ "FrameLogAckInvalidBlock": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PATH_RESPONSE [Invalid]",
- "UniqueId": "FrameLogPathResponseInvalid",
+ "TraceString": "[%c][%cX][%llu] [Invalid Block]",
+ "UniqueId": "FrameLogAckInvalidBlock",
"splitArgs": [
{
"VariableInfo": {
@@ -7579,17 +7119,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogPathResponse": {
+ "FrameLogAckEcnInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] PATH_RESPONSE [%llu]",
- "UniqueId": "FrameLogPathResponse",
+ "TraceString": "[%c][%cX][%llu] ECN [Invalid]",
+ "UniqueId": "FrameLogAckEcnInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -7614,14 +7154,6 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicByteSwapUint64(*(uint64_t*)Frame.Data)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
}
],
"macro": {
@@ -7630,17 +7162,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogConnectionCloseInvalid": {
+ "FrameLogAckEcn": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] CONN_CLOSE [Invalid]",
- "UniqueId": "FrameLogConnectionCloseInvalid",
+ "TraceString": "[%c][%cX][%llu] ECN [ECT0=%llu,ECT1=%llu,CE=%llu]",
+ "UniqueId": "FrameLogAckEcn",
"splitArgs": [
{
"VariableInfo": {
@@ -7665,6 +7197,30 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Ecn.ECT_0_Count",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Ecn.ECT_1_Count",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Ecn.CE_Count",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg7"
}
],
"macro": {
@@ -7673,17 +7229,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogConnectionCloseApp": {
+ "FrameLogResetStreamInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] CONN_CLOSE (App) ErrorCode:0x%llX",
- "UniqueId": "FrameLogConnectionCloseApp",
+ "TraceString": "[%c][%cX][%llu] RESET_STREAM [Invalid]",
+ "UniqueId": "FrameLogResetStreamInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -7708,14 +7264,6 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.ErrorCode",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llX",
- "MacroVariableName": "arg5"
}
],
"macro": {
@@ -7724,17 +7272,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogConnectionClose": {
+ "FrameLogResetStream": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] CONN_CLOSE ErrorCode:0x%llX FrameType:%llu",
- "UniqueId": "FrameLogConnectionClose",
+ "TraceString": "[%c][%cX][%llu] RESET_STREAM ID:%llu ErrorCode:0x%llX FinalSize:%llu",
+ "UniqueId": "FrameLogResetStream",
"splitArgs": [
{
"VariableInfo": {
@@ -7762,19 +7310,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.ErrorCode",
+ "UserSuppliedTrimmed": "Frame.StreamID",
"SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "llX",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg5"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Frame.FrameType",
+ "UserSuppliedTrimmed": "Frame.ErrorCode",
"SuggestedTelemetryName": "arg6"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "llX",
"MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.FinalSize",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg7"
}
],
"macro": {
@@ -7783,17 +7339,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogHandshakeDone": {
+ "FrameLogStopSendingInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] HANDSHAKE_DONE",
- "UniqueId": "FrameLogHandshakeDone",
+ "TraceString": "[%c][%cX][%llu] STOP_SENDING [Invalid]",
+ "UniqueId": "FrameLogStopSendingInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -7826,17 +7382,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogDatagramInvalid": {
+ "FrameLogStopSending": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] DATAGRAM [Invalid]",
- "UniqueId": "FrameLogDatagramInvalid",
+ "TraceString": "[%c][%cX][%llu] STOP_SENDING ID:%llu Error:0x%llX",
+ "UniqueId": "FrameLogStopSending",
"splitArgs": [
{
"VariableInfo": {
@@ -7861,25 +7417,41 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamID",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.ErrorCode",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llX",
+ "MacroVariableName": "arg6"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FrameLogDatagram": {
+ "FrameLogCryptoInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] DATAGRAM Len:%hu",
- "UniqueId": "FrameLogDatagram",
+ "TraceString": "[%c][%cX][%llu] CRYPTO [Invalid]",
+ "UniqueId": "FrameLogCryptoInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -7904,14 +7476,6 @@
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
}
],
"macro": {
@@ -7920,286 +7484,328 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryStorageOpenFailed": {
+ "FrameLogCrypto": {
"ModuleProperites": {},
- "TraceString": "[ lib] Failed to open global settings, 0x%x",
- "UniqueId": "LibraryStorageOpenFailed",
+ "TraceString": "[%c][%cX][%llu] CRYPTO Offset:%llu Len:%hu",
+ "UniqueId": "FrameLogCrypto",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Offset",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "LibraryTestDatapathHooksSet": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Updated test datapath hooks",
- "UniqueId": "LibraryTestDatapathHooksSet",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibrarySettingsUpdated": {
+ "FrameLogNewTokenInvalid": {
"ModuleProperites": {},
- "TraceString": "[ lib] Settings %p Updated",
- "UniqueId": "LibrarySettingsUpdated",
+ "TraceString": "[%c][%cX][%llu] NEW_TOKEN [Invalid]",
+ "UniqueId": "FrameLogNewTokenInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "&MsQuicLib.Settings",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "LibraryVerifierEnabledPerRegistration": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Verifing enabled, per-registration!",
- "UniqueId": "LibraryVerifierEnabledPerRegistration",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
},
- "CustomSettings": null
- }
- },
- "LibraryVerifierEnabled": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Verifing enabled for all!",
- "UniqueId": "LibraryVerifierEnabled",
- "splitArgs": [],
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryCidLengthSet": {
+ "FrameLogNewToken": {
"ModuleProperites": {},
- "TraceString": "[ lib] CID Length = %hhu",
- "UniqueId": "LibraryCidLengthSet",
+ "TraceString": "[%c][%cX][%llu] NEW_TOKEN Length:%llu",
+ "UniqueId": "FrameLogNewToken",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MsQuicLib.CidTotalLength",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.TokenLength",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryRetryMemoryLimitSet": {
+ "FrameLogStreamInvalid": {
"ModuleProperites": {},
- "TraceString": "[ lib] Updated retry memory limit = %hu",
- "UniqueId": "LibraryRetryMemoryLimitSet",
+ "TraceString": "[%c][%cX][%llu] STREAM [Invalid]",
+ "UniqueId": "FrameLogStreamInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MsQuicLib.Settings.RetryMemoryLimit",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryLoadBalancingModeSet": {
+ "FrameLogStreamFin": {
"ModuleProperites": {},
- "TraceString": "[ lib] Updated load balancing mode = %hu",
- "UniqueId": "LibraryLoadBalancingModeSet",
+ "TraceString": "[%c][%cX][%llu] STREAM ID:%llu Offset:%llu Len:%hu Fin",
+ "UniqueId": "FrameLogStreamFin",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MsQuicLib.Settings.LoadBalancingMode",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "LibraryInUse": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Now in use.",
- "UniqueId": "LibraryInUse",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
},
- "CustomSettings": null
- }
- },
- "LibraryNotInUse": {
- "ModuleProperites": {},
- "TraceString": "[ lib] No longer in use.",
- "UniqueId": "LibraryNotInUse",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
},
- "CustomSettings": null
- }
- },
- "LibraryMsQuicOpenNull": {
- "ModuleProperites": {},
- "TraceString": "[ api] MsQuicOpen, NULL",
- "UniqueId": "LibraryMsQuicOpenNull",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamID",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
},
- "CustomSettings": null
- }
- },
- "LibraryMsQuicOpenEntry": {
- "ModuleProperites": {},
- "TraceString": "[ api] MsQuicOpen",
- "UniqueId": "LibraryMsQuicOpenEntry",
- "splitArgs": [],
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Offset",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg7"
+ }
+ ],
"macro": {
"MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryMsQuicOpenExit": {
+ "FrameLogStream": {
"ModuleProperites": {},
- "TraceString": "[ api] MsQuicOpen, status=0x%x",
- "UniqueId": "LibraryMsQuicOpenExit",
+ "TraceString": "[%c][%cX][%llu] STREAM ID:%llu Offset:%llu Len:%hu",
+ "UniqueId": "FrameLogStream",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamID",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Offset",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg7"
}
],
"macro": {
@@ -8208,238 +7814,296 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryMsQuicClose": {
+ "FrameLogMaxDataInvalid": {
"ModuleProperites": {},
- "TraceString": "[ api] MsQuicClose",
- "UniqueId": "LibraryMsQuicClose",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "TraceString": "[%c][%cX][%llu] MAX_DATA [Invalid]",
+ "UniqueId": "FrameLogMaxDataInvalid",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
},
- "CustomSettings": null
- }
- },
- "LibraryLoadBalancingModeSetAfterInUse": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Tried to change load balancing mode after library in use!",
- "UniqueId": "LibraryLoadBalancingModeSetAfterInUse",
- "splitArgs": [],
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogError",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryErrorStatus": {
+ "FrameLogMaxData": {
"ModuleProperites": {},
- "TraceString": "[ lib] ERROR, %u, %s.",
- "UniqueId": "LibraryErrorStatus",
+ "TraceString": "[%c][%cX][%llu] MAX_DATA Max:%llu",
+ "UniqueId": "FrameLogMaxData",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"QuicDataPathInitialize\"",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.MaximumData",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryInitialized": {
+ "FrameLogMaxStreamDataInvalid": {
"ModuleProperites": {},
- "TraceString": "[ lib] Initialized, PartitionCount=%u DatapathFeatures=%u",
- "UniqueId": "LibraryInitialized",
+ "TraceString": "[%c][%cX][%llu] MAX_STREAM_DATA [Invalid]",
+ "UniqueId": "FrameLogMaxStreamDataInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MsQuicLib.PartitionCount",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicDataPathGetSupportedFeatures(MsQuicLib.Datapath)",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryUninitialized": {
+ "FrameLogMaxStreamData": {
"ModuleProperites": {},
- "TraceString": "[ lib] Uninitialized",
- "UniqueId": "LibraryUninitialized",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "TraceString": "[%c][%cX][%llu] MAX_STREAM_DATA ID:%llu Max:%llu",
+ "UniqueId": "FrameLogMaxStreamData",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
},
- "CustomSettings": null
- }
- },
- "LibraryAddRef": {
- "ModuleProperites": {},
- "TraceString": "[ lib] AddRef",
- "UniqueId": "LibraryAddRef",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
},
- "CustomSettings": null
- }
- },
- "LibraryRelease": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Release",
- "UniqueId": "LibraryRelease",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
},
- "CustomSettings": null
- }
- },
- "LibraryWorkerPoolInit": {
- "ModuleProperites": {},
- "TraceString": "[ lib] Shared worker pool initializing",
- "UniqueId": "LibraryWorkerPoolInit",
- "splitArgs": [],
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamID",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.MaximumData",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryRundown": {
+ "FrameLogMaxStreamsInvalid": {
"ModuleProperites": {},
- "TraceString": "[ lib] Rundown, PartitionCount=%u DatapathFeatures=%u",
- "UniqueId": "LibraryRundown",
+ "TraceString": "[%c][%cX][%llu] MAX_STREAMS [Invalid]",
+ "UniqueId": "FrameLogMaxStreamsInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MsQuicLib.PartitionCount",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicDataPathGetSupportedFeatures(MsQuicLib.Datapath)",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerIndicateNewConnection": {
+ "FrameLogMaxStreams": {
"ModuleProperites": {},
- "TraceString": "[list][%p] Indicating NEW_CONNECTION",
- "UniqueId": "ListenerIndicateNewConnection",
+ "TraceString": "[%c][%cX][%llu] MAX_STREAMS[%hu] Count:%llu",
+ "UniqueId": "FrameLogMaxStreams",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.MaximumStreams",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -8448,25 +8112,41 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerNewConnectionPending": {
+ "FrameLogDataBlockedInvalid": {
"ModuleProperites": {},
- "TraceString": "[list][%p] App indicate pending NEW_CONNECTION",
- "UniqueId": "ListenerNewConnectionPending",
+ "TraceString": "[%c][%cX][%llu] DATA_BLOCKED [Invalid]",
+ "UniqueId": "FrameLogDataBlockedInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -8475,25 +8155,49 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerNewConnectionAccepted": {
+ "FrameLogDataBlocked": {
"ModuleProperites": {},
- "TraceString": "[list][%p] App accepted NEW_CONNECTION",
- "UniqueId": "ListenerNewConnectionAccepted",
+ "TraceString": "[%c][%cX][%llu] DATA_BLOCKED Limit:%llu",
+ "UniqueId": "FrameLogDataBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.DataLimit",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -8502,270 +8206,320 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NoSecurityConfigAvailable": {
+ "FrameLogStreamDataBlockedInvalid": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] No security config was provided by the app.",
- "UniqueId": "NoSecurityConfigAvailable",
+ "TraceString": "[%c][%cX][%llu] STREAM_DATA_BLOCKED [Invalid]",
+ "UniqueId": "FrameLogStreamDataBlockedInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerCreated": {
+ "FrameLogStreamDataBlocked": {
"ModuleProperites": {},
- "TraceString": "[list][%p] Created, Session=%p",
- "UniqueId": "ListenerCreated",
+ "TraceString": "[%c][%cX][%llu] STREAM_DATA_BLOCKED ID:%llu Limit:%llu",
+ "UniqueId": "FrameLogStreamDataBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener->Session",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "ListenerDestroyed": {
- "ModuleProperites": {},
- "TraceString": "[list][%p] Destroyed",
- "UniqueId": "ListenerDestroyed",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamID",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamDataLimit",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerErrorStatus": {
+ "FrameLogStreamsBlockedInvalid": {
"ModuleProperites": {},
- "TraceString": "[list][%p] ERROR, %u, %s.",
- "UniqueId": "ListenerErrorStatus",
+ "TraceString": "[%c][%cX][%llu] STREAMS_BLOCKED [Invalid]",
+ "UniqueId": "FrameLogStreamsBlockedInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"Get binding\"",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerError": {
+ "FrameLogStreamsBlocked": {
"ModuleProperites": {},
- "TraceString": "[list][%p] ERROR, %s.",
- "UniqueId": "ListenerError",
+ "TraceString": "[%c][%cX][%llu] STREAMS_BLOCKED[%hu] ID:%llu",
+ "UniqueId": "FrameLogStreamsBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"Register with binding\"",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "ListenerStopped": {
- "ModuleProperites": {},
- "TraceString": "[list][%p] Stopped",
- "UniqueId": "ListenerStopped",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.BidirectionalStreams",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.StreamLimit",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ListenerRundown": {
+ "FrameLogNewConnectionIDInvalid": {
"ModuleProperites": {},
- "TraceString": "[list][%p] Rundown, Session=%p",
- "UniqueId": "ListenerRundown",
+ "TraceString": "[%c][%cX][%llu] NEW_CONN_ID [Invalid]",
+ "UniqueId": "FrameLogNewConnectionIDInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener->Session",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupCidFound": {
+ "FrameLogNewConnectionID": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Lookup Hash=%u found %p",
- "UniqueId": "LookupCidFound",
+ "TraceString": "[%c][%cX][%llu] NEW_CONN_ID Seq:%llu RPT:%llu CID:%s Token:%s",
+ "UniqueId": "FrameLogNewConnectionID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Sequence",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.RetirePriorTo",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(Frame.Buffer, Frame.Length).Buffer",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(Frame.Buffer + Frame.Length, QUIC_STATELESS_RESET_TOKEN_LENGTH).Buffer",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg8"
}
],
"macro": {
@@ -8774,33 +8528,41 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupCidNotFound": {
+ "FrameLogRetireConnectionIDInvalid": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Lookup Hash=%u not found",
- "UniqueId": "LookupCidNotFound",
+ "TraceString": "[%c][%cX][%llu] RETIRE_CONN_ID [Invalid]",
+ "UniqueId": "FrameLogRetireConnectionIDInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -8809,41 +8571,49 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupRemoteHashFound": {
+ "FrameLogRetireConnectionID": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Lookup RemoteHash=%u found %p",
- "UniqueId": "LookupRemoteHashFound",
+ "TraceString": "[%c][%cX][%llu] RETIRE_CONN_ID Seq:%llu",
+ "UniqueId": "FrameLogRetireConnectionID",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Sequence",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -8852,33 +8622,41 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupRemoteHashNotFound": {
+ "FrameLogPathChallengeInvalid": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Lookup RemoteHash=%u not found",
- "UniqueId": "LookupRemoteHashNotFound",
- "splitArgs": [
+ "TraceString": "[%c][%cX][%llu] PATH_CHALLENGE [Invalid]",
+ "UniqueId": "FrameLogPathChallengeInvalid",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -8887,41 +8665,49 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupCidInsert": {
+ "FrameLogPathChallenge": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Insert Conn=%p Hash=%u",
- "UniqueId": "LookupCidInsert",
+ "TraceString": "[%c][%cX][%llu] PATH_CHALLENGE [%llu]",
+ "UniqueId": "FrameLogPathChallenge",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicByteSwapUint64(*(uint64_t*)Frame.Data)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -8930,40 +8716,40 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupRemoteHashInsert": {
+ "FrameLogPathResponseInvalid": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Insert Conn=%p RemoteHash=%u",
- "UniqueId": "LookupRemoteHashInsert",
+ "TraceString": "[%c][%cX][%llu] PATH_RESPONSE [Invalid]",
+ "UniqueId": "FrameLogPathResponseInvalid",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Hash",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
}
],
@@ -8973,33 +8759,49 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LookupCidRemoved": {
+ "FrameLogPathResponse": {
"ModuleProperites": {},
- "TraceString": "[look][%p] Remove Conn=%p",
- "UniqueId": "LookupCidRemoved",
+ "TraceString": "[%c][%cX][%llu] PATH_RESPONSE [%llu]",
+ "UniqueId": "FrameLogPathResponse",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Lookup",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SourceCid->Connection",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicByteSwapUint64(*(uint64_t*)Frame.Data)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -9008,17 +8810,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxDiscarded": {
+ "FrameLogConnectionCloseInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Thrown away on shutdown",
- "UniqueId": "PacketTxDiscarded",
+ "TraceString": "[%c][%cX][%llu] CONN_CLOSE [Invalid]",
+ "UniqueId": "FrameLogConnectionCloseInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -9030,11 +8832,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -9043,17 +8853,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxLostDiscarded": {
+ "FrameLogConnectionCloseApp": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Thrown away on shutdown (lost packet)",
- "UniqueId": "PacketTxLostDiscarded",
+ "TraceString": "[%c][%cX][%llu] CONN_CLOSE (App) ErrorCode:0x%llX",
+ "UniqueId": "FrameLogConnectionCloseApp",
"splitArgs": [
{
"VariableInfo": {
@@ -9065,11 +8875,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.ErrorCode",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llX",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -9078,17 +8904,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxForget": {
+ "FrameLogConnectionClose": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Forgetting",
- "UniqueId": "PacketTxForget",
+ "TraceString": "[%c][%cX][%llu] CONN_CLOSE ErrorCode:0x%llX FrameType:%llu",
+ "UniqueId": "FrameLogConnectionClose",
"splitArgs": [
{
"VariableInfo": {
@@ -9100,11 +8926,35 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.ErrorCode",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llX",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.FrameType",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -9113,17 +8963,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxLostFack": {
+ "FrameLogHandshakeDone": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Lost: FACK %llu packets",
- "UniqueId": "PacketTxLostFack",
+ "TraceString": "[%c][%cX][%llu] HANDSHAKE_DONE",
+ "UniqueId": "FrameLogHandshakeDone",
"splitArgs": [
{
"VariableInfo": {
@@ -9135,15 +8985,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "LossDetection->LargestAck - Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "llu",
@@ -9156,17 +9006,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxLostRack": {
+ "FrameLogDatagramInvalid": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Lost: RACK %lu ms",
- "UniqueId": "PacketTxLostRack",
+ "TraceString": "[%c][%cX][%llu] DATAGRAM [Invalid]",
+ "UniqueId": "FrameLogDatagramInvalid",
"splitArgs": [
{
"VariableInfo": {
@@ -9178,18 +9028,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicTimeDiff32(Packet->SentTime, TimeNow)",
+ "UserSuppliedTrimmed": "PacketNumber",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "lu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
}
],
@@ -9199,17 +9049,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxAckedImplicit": {
+ "FrameLogDatagram": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] ACKed (implicit)",
- "UniqueId": "PacketTxAckedImplicit",
+ "TraceString": "[%c][%cX][%llu] DATAGRAM Len:%hu",
+ "UniqueId": "FrameLogDatagram",
"splitArgs": [
{
"VariableInfo": {
@@ -9221,11 +9071,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -9234,552 +9100,304 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTx0RttRejected": {
+ "LibraryStorageOpenFailed": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Rejected",
- "UniqueId": "PacketTx0RttRejected",
+ "TraceString": "[ lib] Failed to open global settings, 0x%x",
+ "UniqueId": "LibraryStorageOpenFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxSpuriousLoss": {
+ "LibraryTestDatapathHooksSet": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Spurious loss detected",
- "UniqueId": "PacketTxSpuriousLoss",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(*End)->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ lib] Updated test datapath hooks",
+ "UniqueId": "LibraryTestDatapathHooksSet",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxAcked": {
+ "LibrarySettingsUpdated": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] ACKed (%u.%03u ms)",
- "UniqueId": "PacketTxAcked",
+ "TraceString": "[ lib] Settings %p Updated",
+ "UniqueId": "LibrarySettingsUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "UserSuppliedTrimmed": "&MsQuicLib.Settings",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketRtt / 1000",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketRtt % 1000",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "03u",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketTxProbeRetransmit": {
+ "LibraryVerifierEnabledPerRegistration": {
"ModuleProperites": {},
- "TraceString": "[%c][TX][%llu] Probe Retransmit",
- "UniqueId": "PacketTxProbeRetransmit",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ lib] Verifing enabled, per-registration!",
+ "UniqueId": "LibraryVerifierEnabledPerRegistration",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "HandshakeConfirmedAck": {
+ "LibraryVerifierEnabled": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake confirmed (ack)",
- "UniqueId": "HandshakeConfirmedAck",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
+ "TraceString": "[ lib] Verifing enabled for all!",
+ "UniqueId": "LibraryVerifierEnabled",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathValidationTimeout": {
+ "LibraryCidLengthSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] validation timed out",
- "UniqueId": "PathValidationTimeout",
+ "TraceString": "[ lib] CID Length = %hhu",
+ "UniqueId": "LibraryCidLengthSet",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "MsQuicLib.CidTotalLength",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ScheduleProbe": {
+ "LibraryRetryMemoryLimitSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] probe round %lu",
- "UniqueId": "ScheduleProbe",
+ "TraceString": "[ lib] Updated retry memory limit = %hu",
+ "UniqueId": "LibraryRetryMemoryLimitSet",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "LossDetection->ProbeCount",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "MsQuicLib.Settings.RetryMemoryLimit",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "lu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "KeyChangeConfirmed": {
+ "LibraryLoadBalancingModeSet": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Key change confirmed by peer",
- "UniqueId": "KeyChangeConfirmed",
+ "TraceString": "[ lib] Updated load balancing mode = %hu",
+ "UniqueId": "LibraryLoadBalancingModeSet",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "MsQuicLib.Settings.LoadBalancingMode",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnLossDetectionTimerCancel": {
+ "LibrarySetSettings": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Cancelling loss detection timer.",
- "UniqueId": "ConnLossDetectionTimerCancel",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[ lib] Setting new settings",
+ "UniqueId": "LibrarySetSettings",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnLossDetectionTimerSet": {
+ "LibraryInUse": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Setting loss detection %hhu timer for %u ms. (ProbeCount=%hu)",
- "UniqueId": "ConnLossDetectionTimerSet",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TimeoutType",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Delay",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "LossDetection->ProbeCount",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
- }
- ],
+ "TraceString": "[ lib] Now in use.",
+ "UniqueId": "LibraryInUse",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnPacketLost": {
+ "LibraryNotInUse": {
"ModuleProperites": {},
- "TraceString": "[conn][%p][TX][%llu] %hhu Lost: %hhu",
- "UniqueId": "ConnPacketLost",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicPacketTraceType(Packet)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QUIC_TRACE_PACKET_LOSS_FACK",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
- }
- ],
+ "TraceString": "[ lib] No longer in use.",
+ "UniqueId": "LibraryNotInUse",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnPacketACKed": {
+ "LibraryMsQuicOpenNull": {
"ModuleProperites": {},
- "TraceString": "[conn][%p][TX][%llu] %hhu ACKed",
- "UniqueId": "ConnPacketACKed",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicPacketTraceType(Packet)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- }
- ],
+ "TraceString": "[ api] MsQuicOpen, NULL",
+ "UniqueId": "LibraryMsQuicOpenNull",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LogPacketVersionNegotiation": {
+ "LibraryMsQuicOpenEntry": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][-] VerNeg DestCid:%s SrcCid:%s (Payload %lu bytes)",
- "UniqueId": "LogPacketVersionNegotiation",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketLength - Offset",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "lu",
- "MacroVariableName": "arg6"
- }
- ],
+ "TraceString": "[ api] MsQuicOpen",
+ "UniqueId": "LibraryMsQuicOpenEntry",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LogPacketVersionNegotiationVersion": {
+ "LibraryMsQuicOpenExit": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][-] Ver:0x%x",
- "UniqueId": "LogPacketVersionNegotiationVersion",
+ "TraceString": "[ api] MsQuicOpen, status=0x%x",
+ "UniqueId": "LibraryMsQuicOpenExit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*(uint32_t*)(Packet + Offset)",
- "SuggestedTelemetryName": "arg4"
- },
"DefinationEncoding": "x",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg2"
}
],
"macro": {
@@ -9788,844 +9406,265 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LogPacketRetry": {
+ "LibraryMsQuicClose": {
"ModuleProperites": {},
- "TraceString": "[%c][%cX][-] LH Ver:0x%x DestCid:%s SrcCid:%s Type:R (Token %hu bytes)",
- "UniqueId": "LogPacketRetry",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "LongHdr->Version",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketLength - (Offset + QUIC_RETRY_INTEGRITY_TAG_LENGTH_V1)",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg7"
- }
- ],
+ "TraceString": "[ api] MsQuicClose",
+ "UniqueId": "LibraryMsQuicClose",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "LogPacketLongHeaderInitial": {
- "ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] LH Ver:0x%x DestCid:%s SrcCid:%s Type:I (Token %hu bytes) (Payload %hu bytes)",
- "UniqueId": "LogPacketLongHeaderInitial",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "LongHdr->Version",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)TokenLength",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg8"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Length",
- "SuggestedTelemetryName": "arg9"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg9"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "LogPacketLongHeader": {
- "ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] LH Ver:0x%x DestCid:%s SrcCid:%s Type:%s (Payload %hu bytes)",
- "UniqueId": "LogPacketLongHeader",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "LongHdr->Version",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicLongHeaderTypeToString(LongHdr->Type)",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg8"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Length",
- "SuggestedTelemetryName": "arg9"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg9"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "LogPacketLongHeaderUnsupported": {
- "ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] LH Ver:[UNSUPPORTED,0x%x] DestCid:%s SrcCid:%s",
- "UniqueId": "LogPacketLongHeaderUnsupported",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Invariant->LONG_HDR.Version",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg7"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "LogPacketShortHeader": {
- "ModuleProperites": {},
- "TraceString": "[%c][%cX][%llu] SH DestCid:%s KP:%hu SB:%hu (Payload %hu bytes)",
- "UniqueId": "LogPacketShortHeader",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PtkConnPre(Connection)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PktRxPre(Rx)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "c",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketNumber",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Header->KeyPhase",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Header->SpinBit",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "PacketLength - Offset",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg8"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "NoSrcCidAvailable": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] No src CID to send with",
- "UniqueId": "NoSrcCidAvailable",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "GetPacketTypeFailure": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] Failed to get packet type for control frames, 0x%x",
- "UniqueId": "GetPacketTypeFailure",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Builder->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendFlags",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "PacketBuilderNewDatagram": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] New UDP datagram. Space: %u",
- "UniqueId": "PacketBuilderNewDatagram",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Builder->Datagram->Length",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketBuilderNewPacket": {
+ "LibraryLoadBalancingModeSetAfterInUse": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] New QUIC packet. Space: %hu. Type: %hx",
- "UniqueId": "PacketBuilderNewPacket",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "BufferSpaceAvailable",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "NewPacketType",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hx",
- "MacroVariableName": "arg4"
- }
- ],
+ "TraceString": "[ lib] Tried to change load balancing mode after library in use!",
+ "UniqueId": "LibraryLoadBalancingModeSetAfterInUse",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogError",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PacketBuilderSendBatch": {
+ "LibraryInitialized": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Sending batch. %hu datagrams",
- "UniqueId": "PacketBuilderSendBatch",
+ "TraceString": "[ lib] Initialized, PartitionCount=%u DatapathFeatures=%u",
+ "UniqueId": "LibraryInitialized",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Builder->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "MsQuicLib.PartitionCount",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Builder->TotalCountDatagrams",
+ "UserSuppliedTrimmed": "QuicDataPathGetSupportedFeatures(MsQuicLib.Datapath)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnPacketSent": {
+ "LibraryUninitialized": {
"ModuleProperites": {},
- "TraceString": "[conn][%p][TX][%llu] %hhu (%hu bytes)",
- "UniqueId": "ConnPacketSent",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Builder->Metadata->PacketNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicPacketTraceType(Builder->Metadata)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Builder->Metadata->PacketLength",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
- }
- ],
+ "TraceString": "[ lib] Uninitialized",
+ "UniqueId": "LibraryUninitialized",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathInitialized": {
+ "LibraryAddRef": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] Initialized",
- "UniqueId": "PathInitialized",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ lib] AddRef",
+ "UniqueId": "LibraryAddRef",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathRemoved": {
+ "LibraryRelease": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] Removed",
- "UniqueId": "PathRemoved",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ lib] Release",
+ "UniqueId": "LibraryRelease",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathValidated": {
+ "LibraryServerInit": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] Validated (%s)",
- "UniqueId": "PathValidated",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ReasonStrings[Reason]",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
- }
- ],
+ "TraceString": "[ lib] Shared server state initializing",
+ "UniqueId": "LibraryServerInit",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathActive": {
+ "LibraryRundown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] Set active (rebind=%hhu)",
- "UniqueId": "PathActive",
+ "TraceString": "[ lib] Rundown, PartitionCount=%u DatapathFeatures=%u",
+ "UniqueId": "LibraryRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "MsQuicLib.PartitionCount",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
+ "UserSuppliedTrimmed": "QuicDataPathGetSupportedFeatures(MsQuicLib.Datapath)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "UdpPortChangeOnly",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RegistrationVerifierEnabled": {
+ "PerfCountersRundown": {
"ModuleProperites": {},
- "TraceString": "[ reg][%p] Verifing enabled!",
- "UniqueId": "RegistrationVerifierEnabled",
+ "TraceString": "[ lib] Perf counters Rundown, Counters=%!CID!",
+ "UniqueId": "PerfCountersRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Registration",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(PerfCounters), PerfCounters)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "!CID!",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RegistrationCreated": {
- "ModuleProperites": {},
- "TraceString": "[ reg][%p] Created, AppName=%s",
- "UniqueId": "RegistrationCreated",
+ "ListenerIndicateNewConnection": {
+ "ModuleProperites": {},
+ "TraceString": "[list][%p] Indicating NEW_CONNECTION",
+ "UniqueId": "ListenerIndicateNewConnection",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Registration",
+ "UserSuppliedTrimmed": "Listener",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Registration->AppName",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RegistrationCleanup": {
+ "ListenerCreated": {
"ModuleProperites": {},
- "TraceString": "[ reg][%p] Cleaning up",
- "UniqueId": "RegistrationCleanup",
+ "TraceString": "[list][%p] Created, Registration=%p",
+ "UniqueId": "ListenerCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Registration",
+ "UserSuppliedTrimmed": "Listener",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Listener->Registration",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -10634,33 +9673,25 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RegistrationRundown": {
+ "ListenerDestroyed": {
"ModuleProperites": {},
- "TraceString": "[ reg][%p] Rundown, AppName=%s",
- "UniqueId": "RegistrationRundown",
+ "TraceString": "[list][%p] Destroyed",
+ "UniqueId": "ListenerDestroyed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Registration",
+ "UserSuppliedTrimmed": "Listener",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Registration->AppName",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -10669,255 +9700,255 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SetSendFlag": {
+ "ListenerErrorStatus": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Setting flags 0x%x (existing flags: 0x%x)",
- "UniqueId": "SetSendFlag",
+ "TraceString": "[list][%p] ERROR, %u, %s.",
+ "UniqueId": "ListenerErrorStatus",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Listener",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(SendFlags & (~Stream->SendFlags))",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream->SendFlags",
+ "UserSuppliedTrimmed": "\"Get binding\"",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ClearSendFlags": {
+ "ListenerError": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Removing flags %x",
- "UniqueId": "ClearSendFlags",
+ "TraceString": "[list][%p] ERROR, %s.",
+ "UniqueId": "ListenerError",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Listener",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(SendFlags & Stream->SendFlags)",
+ "UserSuppliedTrimmed": "\"Register with binding\"",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PathMtuUpdated": {
+ "ListenerStarted": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Path[%hhu] MTU updated to %hu bytes",
- "UniqueId": "PathMtuUpdated",
+ "TraceString": "[list][%p] Started, Binding=%p, LocalAddr=%!ADDR!",
+ "UniqueId": "ListenerStarted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Listener",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Path->ID",
+ "UserSuppliedTrimmed": "Listener->Binding",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Path->Mtu",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Listener->LocalAddress), &Listener->LocalAddress)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "!ADDR!",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CancelAckDelayTimer": {
+ "ListenerStopped": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Canceling ACK_DELAY timer",
- "UniqueId": "CancelAckDelayTimer",
+ "TraceString": "[list][%p] Stopped",
+ "UniqueId": "ListenerStopped",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Listener",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ScheduleSendFlags": {
+ "ListenerRundown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Scheduling flags 0x%x to 0x%x",
- "UniqueId": "ScheduleSendFlags",
+ "TraceString": "[list][%p] Rundown, Registration=%p",
+ "UniqueId": "ListenerRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Listener",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SendFlags",
+ "UserSuppliedTrimmed": "Listener->Registration",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Send->SendFlags",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RemoveSendFlags": {
+ "LookupCidFound": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Removing flags %x",
- "UniqueId": "RemoveSendFlags",
+ "TraceString": "[look][%p] Lookup Hash=%u found %p",
+ "UniqueId": "LookupCidFound",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(SendFlags & Send->SendFlags)",
+ "UserSuppliedTrimmed": "Hash",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FlushSend": {
+ "LookupCidNotFound": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Flushing send. Allowance=%u bytes",
- "UniqueId": "FlushSend",
+ "TraceString": "[look][%p] Lookup Hash=%u not found",
+ "UniqueId": "LookupCidNotFound",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Builder.SendAllowance",
+ "UserSuppliedTrimmed": "Hash",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -10925,61 +9956,77 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AmplificationProtectionBlocked": {
+ "LookupRemoteHashFound": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Cannot send any more because of amplification protection",
- "UniqueId": "AmplificationProtectionBlocked",
+ "TraceString": "[look][%p] Lookup RemoteHash=%u found %p",
+ "UniqueId": "LookupRemoteHashFound",
"splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Hash",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
{
"VariableInfo": {
"UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SetPacingTimer": {
+ "LookupRemoteHashNotFound": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Setting delayed send (PACING) timer for %u ms",
- "UniqueId": "SetPacingTimer",
+ "TraceString": "[look][%p] Lookup RemoteHash=%u not found",
+ "UniqueId": "LookupRemoteHashNotFound",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QUIC_SEND_PACING_INTERVAL",
+ "UserSuppliedTrimmed": "Hash",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -10987,96 +10034,112 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SendFlushComplete": {
+ "LookupCidInsert": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Flush complete flags=0x%x",
- "UniqueId": "SendFlushComplete",
+ "TraceString": "[look][%p] Insert Conn=%p Hash=%u",
+ "UniqueId": "LookupCidInsert",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Send->SendFlags",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Hash",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StartAckDelayTimer": {
+ "LookupRemoteHashInsert": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Starting ACK_DELAY timer for %u ms",
- "UniqueId": "StartAckDelayTimer",
+ "TraceString": "[look][%p] Insert Conn=%p RemoteHash=%u",
+ "UniqueId": "LookupRemoteHashInsert",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Lookup",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->MaxAckDelayMs",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Hash",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnQueueSendFlush": {
+ "LookupCidRemoved": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Queueing send flush, reason=%u",
- "UniqueId": "ConnQueueSendFlush",
+ "TraceString": "[look][%p] Remove Conn=%p",
+ "UniqueId": "LookupCidRemoved",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Lookup",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -11084,42 +10147,42 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Reason",
+ "UserSuppliedTrimmed": "SourceCid->Connection",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateIdealSendBuffer": {
+ "PacketTxDiscarded": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_IDEAL_SEND_BUFFER_SIZE = %llu",
- "UniqueId": "IndicateIdealSendBuffer",
+ "TraceString": "[%c][TX][%llu] Thrown away on shutdown",
+ "UniqueId": "PacketTxDiscarded",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Event.IDEAL_SEND_BUFFER_SIZE.ByteCount",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
@@ -11127,209 +10190,225 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionOpenStorageFailed": {
+ "PacketTxLostDiscarded": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Failed to open settings, 0x%x",
- "UniqueId": "SessionOpenStorageFailed",
+ "TraceString": "[%c][TX][%llu] Thrown away on shutdown (lost packet)",
+ "UniqueId": "PacketTxLostDiscarded",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionOpenAppStorageFailed": {
+ "PacketTxForget": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Failed to open app specific settings, 0x%x",
- "UniqueId": "SessionOpenAppStorageFailed",
+ "TraceString": "[%c][TX][%llu] Forgetting",
+ "UniqueId": "PacketTxForget",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionSettingsUpdated": {
+ "PacketTxLostFack": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Settings %p Updated",
- "UniqueId": "SessionSettingsUpdated",
+ "TraceString": "[%c][TX][%llu] Lost: FACK %llu packets",
+ "UniqueId": "PacketTxLostFack",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "&Session->Settings",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "LossDetection->LargestAck - Packet->PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionBiDiStreamCountSet": {
+ "PacketTxLostRack": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated bidirectional stream count = %hu",
- "UniqueId": "SessionBiDiStreamCountSet",
+ "TraceString": "[%c][TX][%llu] Lost: RACK %lu ms",
+ "UniqueId": "PacketTxLostRack",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.PeerBidiStreamCount",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicTimeDiff32(Packet->SentTime, TimeNow)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "lu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionUniDiStreamCountSet": {
+ "PacketTxAckedImplicit": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated unidirectional stream count = %hu",
- "UniqueId": "SessionUniDiStreamCountSet",
+ "TraceString": "[%c][TX][%llu] ACKed (implicit)",
+ "UniqueId": "PacketTxAckedImplicit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.PeerUnidiStreamCount",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionIdleTimeoutSet": {
+ "PacketTx0RttRejected": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated idle timeout to %llu milliseconds",
- "UniqueId": "SessionIdleTimeoutSet",
+ "TraceString": "[%c][TX][%llu] Rejected",
+ "UniqueId": "PacketTx0RttRejected",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.IdleTimeoutMs",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
@@ -11337,174 +10416,182 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionDisconnectTimeoutSet": {
+ "PacketTxSpuriousLoss": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated disconnect timeout to %u milliseconds",
- "UniqueId": "SessionDisconnectTimeoutSet",
+ "TraceString": "[%c][TX][%llu] Spurious loss detected",
+ "UniqueId": "PacketTxSpuriousLoss",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.DisconnectTimeoutMs",
+ "UserSuppliedTrimmed": "(*End)->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionMaxBytesPerKeySet": {
+ "PacketTxAcked": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated max bytes per key to %llu bytes",
- "UniqueId": "SessionMaxBytesPerKeySet",
+ "TraceString": "[%c][TX][%llu] ACKed (%u.%03u ms)",
+ "UniqueId": "PacketTxAcked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.MaxBytesPerKey",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketRtt / 1000",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketRtt % 1000",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "03u",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionMigrationEnabledSet": {
+ "PacketTxProbeRetransmit": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated migration enabled to %hhu",
- "UniqueId": "SessionMigrationEnabledSet",
+ "TraceString": "[%c][TX][%llu] Probe Retransmit",
+ "UniqueId": "PacketTxProbeRetransmit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.MigrationEnabled",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionDatagramReceiveEnabledSet": {
+ "HandshakeConfirmedAck": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated datagram receive enabled to %hhu",
- "UniqueId": "SessionDatagramReceiveEnabledSet",
+ "TraceString": "[conn][%p] Handshake confirmed (ack)",
+ "UniqueId": "HandshakeConfirmedAck",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.DatagramReceiveEnabled",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionServerResumptionLevelSet": {
+ "PathValidationTimeout": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Updated Server resume/0-RTT to %hhu",
- "UniqueId": "SessionServerResumptionLevelSet",
+ "TraceString": "[conn][%p] Path[%hhu] validation timed out",
+ "UniqueId": "PathValidationTimeout",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Settings.ServerResumptionLevel",
+ "UserSuppliedTrimmed": "Path->ID",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "hhu",
@@ -11512,108 +10599,92 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionCreated": {
+ "ScheduleProbe": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Created, Registration=%p, Alpn=%s",
- "UniqueId": "SessionCreated",
+ "TraceString": "[conn][%p] probe round %lu",
+ "UniqueId": "ScheduleProbe",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Registration",
+ "UserSuppliedTrimmed": "LossDetection->ProbeCount",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "lu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "\"\"",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionDestroyed": {
+ "KeyChangeConfirmed": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Destroyed",
- "UniqueId": "SessionDestroyed",
+ "TraceString": "[conn][%p] Key change confirmed by peer",
+ "UniqueId": "KeyChangeConfirmed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionError": {
+ "ConnLossDetectionTimerCancel": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] ERROR, %s.",
- "UniqueId": "SessionError",
+ "TraceString": "[conn][%p] Cancelling loss detection timer.",
+ "UniqueId": "ConnLossDetectionTimerCancel",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "\"Server cache initialize\"",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -11622,21 +10693,21 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionErrorStatus": {
+ "ConnLossDetectionTimerSet": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] ERROR, %u, %s.",
- "UniqueId": "SessionErrorStatus",
+ "TraceString": "[conn][%p] Setting loss detection %hhu timer for %u ms. (ProbeCount=%hu)",
+ "UniqueId": "ConnLossDetectionTimerSet",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -11644,46 +10715,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "TimeoutType",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"QuicTlsSessionInitialize\"",
+ "UserSuppliedTrimmed": "Delay",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg4"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "SessionCleanup": {
- "ModuleProperites": {},
- "TraceString": "[sess][%p] Cleaning up",
- "UniqueId": "SessionCleanup",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "LossDetection->ProbeCount",
+ "SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -11692,21 +10744,21 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionShutdown": {
+ "ConnPacketLost": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Shutting down connections, Flags=%u, ErrorCode=%llu",
- "UniqueId": "SessionShutdown",
+ "TraceString": "[conn][%p][TX][%llu] %hhu Lost: %hhu",
+ "UniqueId": "ConnPacketLost",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -11714,19 +10766,27 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Flags",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
+ "UserSuppliedTrimmed": "QuicPacketTraceType(Packet)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QUIC_TRACE_PACKET_LOSS_FACK",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -11735,21 +10795,21 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SessionRundown": {
+ "ConnPacketACKed": {
"ModuleProperites": {},
- "TraceString": "[sess][%p] Rundown, Registration=%p, Alpn=%p",
- "UniqueId": "SessionRundown",
+ "TraceString": "[conn][%p][TX][%llu] %hhu ACKed",
+ "UniqueId": "ConnPacketACKed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -11757,18 +10817,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session->Registration",
+ "UserSuppliedTrimmed": "Packet->PacketNumber",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"\"",
+ "UserSuppliedTrimmed": "QuicPacketTraceType(Packet)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg4"
}
],
@@ -11778,17 +10838,17 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnUnregisterSession": {
+ "ConnExecApiOper": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Unregistered from session: %p",
- "UniqueId": "ConnUnregisterSession",
+ "TraceString": "[conn][%p] Execute: %u",
+ "UniqueId": "ConnExecApiOper",
"splitArgs": [
{
"VariableInfo": {
@@ -11800,10 +10860,10 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Session",
+ "UserSuppliedTrimmed": "Oper->API_CALL.Context->Type",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
}
],
@@ -11813,29 +10873,37 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpPacingDefault": {
+ "ConnExecOper": {
"ModuleProperites": {},
- "TraceString": "[sett] PacingEnabled = %hhu",
- "UniqueId": "SettingDumpPacingDefault",
+ "TraceString": "[conn][%p] Execute: %u",
+ "UniqueId": "ConnExecOper",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->PacingEnabled",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Oper->Type",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -11847,72 +10915,50 @@
"CustomSettings": null
}
},
- "SettingDumpMigrationEnabled": {
+ "LogPacketVersionNegotiation": {
"ModuleProperites": {},
- "TraceString": "[sett] MigrationEnabled = %hhu",
- "UniqueId": "SettingDumpMigrationEnabled",
+ "TraceString": "[%c][%cX][-] VerNeg DestCid:%s SrcCid:%s (Payload %lu bytes)",
+ "UniqueId": "LogPacketVersionNegotiation",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MigrationEnabled",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "SettingDumpDatagramReceiveEnabled": {
- "ModuleProperites": {},
- "TraceString": "[sett] DatagramReceiveEnabled = %hhu",
- "UniqueId": "SettingDumpDatagramReceiveEnabled",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->DatagramReceiveEnabled",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
},
- "CustomSettings": null
- }
- },
- "SettingDumpMaxPartitionCount": {
- "ModuleProperites": {},
- "TraceString": "[sett] MaxPartitionCount = %hhu",
- "UniqueId": "SettingDumpMaxPartitionCount",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxPartitionCount",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketLength - Offset",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "lu",
+ "MacroVariableName": "arg6"
}
],
"macro": {
@@ -11921,25 +10967,41 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpMaxOperationsPerDrain": {
+ "LogPacketVersionNegotiationVersion": {
"ModuleProperites": {},
- "TraceString": "[sett] MaxOperationsPerDrain = %hhu",
- "UniqueId": "SettingDumpMaxOperationsPerDrain",
+ "TraceString": "[%c][%cX][-] Ver:0x%x",
+ "UniqueId": "LogPacketVersionNegotiationVersion",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxOperationsPerDrain",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*(uint32_t*)(Packet + Offset)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -11948,25 +11010,65 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpRetryMemoryLimit": {
+ "LogPacketRetry": {
"ModuleProperites": {},
- "TraceString": "[sett] RetryMemoryLimit = %hu",
- "UniqueId": "SettingDumpRetryMemoryLimit",
+ "TraceString": "[%c][%cX][-] LH Ver:0x%x DestCid:%s SrcCid:%s Type:R (Token %hu bytes)",
+ "UniqueId": "LogPacketRetry",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->RetryMemoryLimit",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "LongHdr->Version",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketLength - (Offset + QUIC_RETRY_INTEGRITY_TAG_LENGTH_V1)",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg7"
}
],
"macro": {
@@ -11975,25 +11077,81 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpLoadBalancingMode": {
+ "LogPacketLongHeaderInitial": {
"ModuleProperites": {},
- "TraceString": "[sett] LoadBalancingMode = %hu",
- "UniqueId": "SettingDumpLoadBalancingMode",
+ "TraceString": "[%c][%cX][%llu] LH Ver:0x%x DestCid:%s SrcCid:%s Type:I (Token %hu bytes) (Payload %hu bytes)",
+ "UniqueId": "LogPacketLongHeaderInitial",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->LoadBalancingMode",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "LongHdr->Version",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)TokenLength",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg8"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Length",
+ "SuggestedTelemetryName": "arg9"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg9"
}
],
"macro": {
@@ -12002,25 +11160,81 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpMaxStatelessOperations": {
+ "LogPacketLongHeader": {
"ModuleProperites": {},
- "TraceString": "[sett] MaxStatelessOperations = %u",
- "UniqueId": "SettingDumpMaxStatelessOperations",
+ "TraceString": "[%c][%cX][%llu] LH Ver:0x%x DestCid:%s SrcCid:%s Type:%s (Payload %hu bytes)",
+ "UniqueId": "LogPacketLongHeader",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxStatelessOperations",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "LongHdr->Version",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicLongHeaderTypeToString(LongHdr->Type)",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg8"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Length",
+ "SuggestedTelemetryName": "arg9"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg9"
}
],
"macro": {
@@ -12029,25 +11243,65 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpMaxWorkerQueueDelayUs": {
+ "LogPacketLongHeaderUnsupported": {
"ModuleProperites": {},
- "TraceString": "[sett] MaxWorkerQueueDelayUs = %u",
- "UniqueId": "SettingDumpMaxWorkerQueueDelayUs",
+ "TraceString": "[%c][%cX][%llu] LH Ver:[UNSUPPORTED,0x%x] DestCid:%s SrcCid:%s",
+ "UniqueId": "LogPacketLongHeaderUnsupported",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxWorkerQueueDelayUs",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Invariant->LONG_HDR.Version",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(SourceCid, SourceCidLen).Buffer",
+ "SuggestedTelemetryName": "arg7"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg7"
}
],
"macro": {
@@ -12056,52 +11310,73 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpInitialWindowPackets": {
+ "LogPacketShortHeader": {
"ModuleProperites": {},
- "TraceString": "[sett] InitialWindowPackets = %u",
- "UniqueId": "SettingDumpInitialWindowPackets",
+ "TraceString": "[%c][%cX][%llu] SH DestCid:%s KP:%hu SB:%hu (Payload %hu bytes)",
+ "UniqueId": "LogPacketShortHeader",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->InitialWindowPackets",
+ "UserSuppliedTrimmed": "PtkConnPre(Connection)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "c",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "SettingDumpSendIdleTimeoutMs": {
- "ModuleProperites": {},
- "TraceString": "[sett] SendIdleTimeoutMs = %u",
- "UniqueId": "SettingDumpSendIdleTimeoutMs",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->SendIdleTimeoutMs",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "PktRxPre(Rx)",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "c",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketNumber",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicCidBufToStr(DestCid, DestCidLen).Buffer",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Header->KeyPhase",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Header->SpinBit",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "PacketLength - Offset",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg8"
}
],
"macro": {
@@ -12110,193 +11385,286 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpInitialRttMs": {
+ "ConnDropPacket": {
"ModuleProperites": {},
- "TraceString": "[sett] InitialRttMs = %u",
- "UniqueId": "SettingDumpInitialRttMs",
+ "TraceString": "[conn][%p] DROP packet Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
+ "UniqueId": "ConnDropPacket",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->InitialRttMs",
+ "UserSuppliedTrimmed": "Owner",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Reason",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpMaxAckDelayMs": {
+ "BindingDropPacket": {
"ModuleProperites": {},
- "TraceString": "[sett] MaxAckDelayMs = %u",
- "UniqueId": "SettingDumpMaxAckDelayMs",
+ "TraceString": "[bind][%p] DROP packet Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
+ "UniqueId": "BindingDropPacket",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxAckDelayMs",
+ "UserSuppliedTrimmed": "Owner",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Reason",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpDisconnectTimeoutMs": {
+ "ConnDropPacketEx": {
"ModuleProperites": {},
- "TraceString": "[sett] DisconnectTimeoutMs = %u",
- "UniqueId": "SettingDumpDisconnectTimeoutMs",
+ "TraceString": "[conn][%p] DROP packet Value=%llu Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
+ "UniqueId": "ConnDropPacketEx",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->DisconnectTimeoutMs",
+ "UserSuppliedTrimmed": "Owner",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Value",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Reason",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpKeepAliveIntervalMs": {
+ "BindingDropPacketEx": {
"ModuleProperites": {},
- "TraceString": "[sett] KeepAliveIntervalMs = %u",
- "UniqueId": "SettingDumpKeepAliveIntervalMs",
+ "TraceString": "[bind][%p] DROP packet %llu. Dst=%!ADDR! Src=%!ADDR! Reason=%s",
+ "UniqueId": "BindingDropPacketEx",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->KeepAliveIntervalMs",
+ "UserSuppliedTrimmed": "Owner",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "SettingDumpIdleTimeoutMs": {
- "ModuleProperites": {},
- "TraceString": "[sett] IdleTimeoutMs = %llu",
- "UniqueId": "SettingDumpIdleTimeoutMs",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->IdleTimeoutMs",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Value",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Reason",
+ "SuggestedTelemetryName": "arg6"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpHandshakeIdleTimeoutMs": {
+ "NoSrcCidAvailable": {
"ModuleProperites": {},
- "TraceString": "[sett] HandshakeIdleTimeoutMs = %llu",
- "UniqueId": "SettingDumpHandshakeIdleTimeoutMs",
+ "TraceString": "[conn][%p] No src CID to send with",
+ "UniqueId": "NoSrcCidAvailable",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->HandshakeIdleTimeoutMs",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnWarning",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpBidiStreamCount": {
+ "GetPacketTypeFailure": {
"ModuleProperites": {},
- "TraceString": "[sett] PeerBidiStreamCount = %hu",
- "UniqueId": "SettingDumpBidiStreamCount",
+ "TraceString": "[conn][%p] Failed to get packet type for control frames, 0x%x",
+ "UniqueId": "GetPacketTypeFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->PeerBidiStreamCount",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Builder->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendFlags",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnWarning",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -12306,24 +11674,32 @@
"CustomSettings": null
}
},
- "SettingDumpUnidiStreamCount": {
+ "PacketBuilderSendBatch": {
"ModuleProperites": {},
- "TraceString": "[sett] PeerUnidiStreamCount = %hu",
- "UniqueId": "SettingDumpUnidiStreamCount",
+ "TraceString": "[conn][%p] Sending batch. %hu datagrams",
+ "UniqueId": "PacketBuilderSendBatch",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->PeerUnidiStreamCount",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Builder->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Builder->TotalCountDatagrams",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "hu",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -12333,253 +11709,341 @@
"CustomSettings": null
}
},
- "SettingDumpTlsClientMaxSendBuffer": {
+ "ConnPacketSent": {
"ModuleProperites": {},
- "TraceString": "[sett] TlsClientMaxSendBuffer = %u",
- "UniqueId": "SettingDumpTlsClientMaxSendBuffer",
+ "TraceString": "[conn][%p][TX][%llu] %hhu (%hu bytes)",
+ "UniqueId": "ConnPacketSent",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->TlsClientMaxSendBuffer",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Builder->Metadata->PacketNumber",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicPacketTraceType(Builder->Metadata)",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Builder->Metadata->PacketLength",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpTlsServerMaxSendBuffer": {
+ "PathInitialized": {
"ModuleProperites": {},
- "TraceString": "[sett] TlsServerMaxSendBuffer = %u",
- "UniqueId": "SettingDumpTlsServerMaxSendBuffer",
+ "TraceString": "[conn][%p] Path[%hhu] Initialized",
+ "UniqueId": "PathInitialized",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->TlsServerMaxSendBuffer",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->ID",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpStreamRecvWindowDefault": {
+ "PathRemoved": {
"ModuleProperites": {},
- "TraceString": "[sett] StreamRecvWindowDefault= %u",
- "UniqueId": "SettingDumpStreamRecvWindowDefault",
+ "TraceString": "[conn][%p] Path[%hhu] Removed",
+ "UniqueId": "PathRemoved",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->StreamRecvWindowDefault",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->ID",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpStreamRecvBufferDefault": {
+ "PathValidated": {
"ModuleProperites": {},
- "TraceString": "[sett] StreamRecvBufferDefault= %u",
- "UniqueId": "SettingDumpStreamRecvBufferDefault",
+ "TraceString": "[conn][%p] Path[%hhu] Validated (%s)",
+ "UniqueId": "PathValidated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->StreamRecvBufferDefault",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Path->ID",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "ReasonStrings[Reason]",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpConnFlowControlWindow": {
+ "PathActive": {
"ModuleProperites": {},
- "TraceString": "[sett] ConnFlowControlWindow = %u",
- "UniqueId": "SettingDumpConnFlowControlWindow",
+ "TraceString": "[conn][%p] Path[%hhu] Set active (rebind=%hhu)",
+ "UniqueId": "PathActive",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->ConnFlowControlWindow",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Paths[0].ID",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "UdpPortChangeOnly",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
}
],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "macro": {
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpMaxBytesPerKey": {
+ "RegistrationVerifierEnabled": {
"ModuleProperites": {},
- "TraceString": "[sett] MaxBytesPerKey = %llu",
- "UniqueId": "SettingDumpMaxBytesPerKey",
+ "TraceString": "[ reg][%p] Verifing enabled!",
+ "UniqueId": "RegistrationVerifierEnabled",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->MaxBytesPerKey",
+ "UserSuppliedTrimmed": "Registration",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SettingDumpServerResumptionLevel": {
+ "RegistrationCreated": {
"ModuleProperites": {},
- "TraceString": "[sett] ServerResumptionLevel = %hhu",
- "UniqueId": "SettingDumpServerResumptionLevel",
+ "TraceString": "[ reg][%p] Created, AppName=%s",
+ "UniqueId": "RegistrationCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Settings->ServerResumptionLevel",
+ "UserSuppliedTrimmed": "Registration",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Registration->AppName",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "CloseWithoutShutdown": {
+ "RegistrationCleanup": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Closing handle without fully shutting down",
- "UniqueId": "CloseWithoutShutdown",
+ "TraceString": "[ reg][%p] Cleaning up",
+ "UniqueId": "RegistrationCleanup",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Registration",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "EventSilentDiscard": {
+ "RegistrationRundown": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Event silently discarded",
- "UniqueId": "EventSilentDiscard",
+ "TraceString": "[ reg][%p] Rundown, AppName=%s",
+ "UniqueId": "RegistrationRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Registration",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Registration->AppName",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateStartComplete": {
+ "SetSendFlag": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_START_COMPLETE (0x%x)",
- "UniqueId": "IndicateStartComplete",
+ "TraceString": "[strm][%p] Setting flags 0x%x (existing flags: 0x%x)",
+ "UniqueId": "SetSendFlag",
"splitArgs": [
{
"VariableInfo": {
@@ -12591,11 +12055,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "(SendFlags & (uint32_t)(~Stream->SendFlags))",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "x",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->SendFlags",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -12604,17 +12076,17 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateStreamShutdownComplete": {
+ "ClearSendFlags": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SHUTDOWN_COMPLETE",
- "UniqueId": "IndicateStreamShutdownComplete",
+ "TraceString": "[strm][%p] Removing flags %x",
+ "UniqueId": "ClearSendFlags",
"splitArgs": [
{
"VariableInfo": {
@@ -12623,263 +12095,220 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "StreamDestroyed": {
- "ModuleProperites": {},
- "TraceString": "[strm][%p] Destroyed",
- "UniqueId": "StreamDestroyed",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "(SendFlags & Stream->SendFlags)",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StreamCreated": {
+ "PathMtuUpdated": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Created, Conn=%p ID=%llu IsLocal=%hhu",
- "UniqueId": "StreamCreated",
+ "TraceString": "[conn][%p] Path[%hhu] MTU updated to %hu bytes",
+ "UniqueId": "PathMtuUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream->Connection",
+ "UserSuppliedTrimmed": "Path->ID",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream->ID",
+ "UserSuppliedTrimmed": "Path->Mtu",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "!IsRemoteStream",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StreamSendState": {
+ "CancelAckDelayTimer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Send State: %hhu",
- "UniqueId": "StreamSendState",
+ "TraceString": "[conn][%p] Canceling ACK_DELAY timer",
+ "UniqueId": "CancelAckDelayTimer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicStreamSendGetState(Stream)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StreamRecvState": {
+ "ScheduleSendFlags": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Recv State: %hhu",
- "UniqueId": "StreamRecvState",
+ "TraceString": "[conn][%p] Scheduling flags 0x%x to 0x%x",
+ "UniqueId": "ScheduleSendFlags",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicStreamRecvGetState(Stream)",
+ "UserSuppliedTrimmed": "SendFlags",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Send->SendFlags",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StreamOutFlowBlocked": {
+ "RemoveSendFlags": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Send Blocked Flags: %hhu",
- "UniqueId": "StreamOutFlowBlocked",
+ "TraceString": "[conn][%p] Removing flags %x",
+ "UniqueId": "RemoveSendFlags",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "QuicSendGetConnection(Send)",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream->OutFlowBlockedReasons",
+ "UserSuppliedTrimmed": "(SendFlags & Send->SendFlags)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StreamRundown": {
+ "FlushSend": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Rundown, Conn=%p ID=%llu IsLocal=%hhu",
- "UniqueId": "StreamRundown",
+ "TraceString": "[conn][%p] Flushing send. Allowance=%u bytes",
+ "UniqueId": "FlushSend",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream->Connection",
+ "UserSuppliedTrimmed": "Builder.SendAllowance",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->ID",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(!QuicConnIsServer(Stream->Connection) ^ (Stream->ID & STREAM_ID_FLAG_IS_SERVER))",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ResetEarly": {
+ "AmplificationProtectionBlocked": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Tried to reset at earlier final size!",
- "UniqueId": "ResetEarly",
+ "TraceString": "[conn][%p] Cannot send any more because of amplification protection",
+ "UniqueId": "AmplificationProtectionBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -12887,130 +12316,162 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ResetTooBig": {
+ "SetPacingTimer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Tried to reset with too big final size!",
- "UniqueId": "ResetTooBig",
+ "TraceString": "[conn][%p] Setting delayed send (PACING) timer for %u ms",
+ "UniqueId": "SetPacingTimer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QUIC_SEND_PACING_INTERVAL",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ReceiveTooBig": {
+ "SendFlushComplete": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Tried to write beyond end of buffer!",
- "UniqueId": "ReceiveTooBig",
+ "TraceString": "[conn][%p] Flush complete flags=0x%x",
+ "UniqueId": "SendFlushComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Send->SendFlags",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ReceiveBeyondFlowControl": {
+ "StartAckDelayTimer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Tried to write beyond flow control limit!",
- "UniqueId": "ReceiveBeyondFlowControl",
+ "TraceString": "[conn][%p] Starting ACK_DELAY timer for %u ms",
+ "UniqueId": "StartAckDelayTimer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Connection->Settings.MaxAckDelayMs",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
- "EncodedPrefix": "[strm][%p] ",
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RemoteCloseReset": {
+ "ConnQueueSendFlush": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Closed remotely (reset)",
- "UniqueId": "RemoteCloseReset",
+ "TraceString": "[conn][%p] Queueing send flush, reason=%u",
+ "UniqueId": "ConnQueueSendFlush",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Reason",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamInfo",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LocalCloseStopSending": {
+ "IndicateIdealSendBuffer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Closed locally (stop sending)",
- "UniqueId": "LocalCloseStopSending",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_IDEAL_SEND_BUFFER_SIZE = %llu",
+ "UniqueId": "IndicateIdealSendBuffer",
"splitArgs": [
{
"VariableInfo": {
@@ -13019,932 +12480,735 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Event.IDEAL_SEND_BUFFER_SIZE.ByteCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamInfo",
+ "MacroName": "QuicTraceLogStreamVerbose",
"EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "QueueRecvFlush": {
+ "SettingDumpSendBufferingEnabled": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Queuing recv flush",
- "UniqueId": "QueueRecvFlush",
+ "TraceString": "[sett] SendBufferingEnabled = %hhu",
+ "UniqueId": "SettingDumpSendBufferingEnabled",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->SendBufferingEnabled",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerSendAbort": {
+ "SettingDumpPacingEnabled": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_SEND_ABORTED (0x%llX)",
- "UniqueId": "IndicatePeerSendAbort",
+ "TraceString": "[sett] PacingEnabled = %hhu",
+ "UniqueId": "SettingDumpPacingEnabled",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->PacingEnabled",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llX",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerReceiveAborted": {
+ "SettingDumpMigrationEnabled": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_RECEIVE_ABORTED (0x%llX)",
- "UniqueId": "IndicatePeerReceiveAborted",
+ "TraceString": "[sett] MigrationEnabled = %hhu",
+ "UniqueId": "SettingDumpMigrationEnabled",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->MigrationEnabled",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "SettingDumpDatagramReceiveEnabled": {
+ "ModuleProperites": {},
+ "TraceString": "[sett] DatagramReceiveEnabled = %hhu",
+ "UniqueId": "SettingDumpDatagramReceiveEnabled",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->DatagramReceiveEnabled",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llX",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "FlowControlExhausted": {
+ "SettingDumpMaxOperationsPerDrain": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Flow control window exhausted!",
- "UniqueId": "FlowControlExhausted",
+ "TraceString": "[sett] MaxOperationsPerDrain = %hhu",
+ "UniqueId": "SettingDumpMaxOperationsPerDrain",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->MaxOperationsPerDrain",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "Receive": {
+ "SettingDumpRetryMemoryLimit": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Received %hu bytes, offset=%llu Ready=%hhu",
- "UniqueId": "Receive",
+ "TraceString": "[sett] RetryMemoryLimit = %hu",
+ "UniqueId": "SettingDumpRetryMemoryLimit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame->Length",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->RetryMemoryLimit",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame->Offset",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ReadyToDeliver",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RemoteBlocked": {
+ "SettingDumpLoadBalancingMode": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Remote FC blocked (%llu)",
- "UniqueId": "RemoteBlocked",
+ "TraceString": "[sett] LoadBalancingMode = %hu",
+ "UniqueId": "SettingDumpLoadBalancingMode",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.StreamDataLimit",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->LoadBalancingMode",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IncreaseRxBuffer": {
+ "SettingDumpMaxStatelessOperations": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Increasing max RX buffer size to %u (MinRtt=%u; TimeNow=%u; LastUpdate=%u)",
- "UniqueId": "IncreaseRxBuffer",
+ "TraceString": "[sett] MaxStatelessOperations = %u",
+ "UniqueId": "SettingDumpMaxStatelessOperations",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->RecvBuffer.VirtualBufferLength * 2",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->Connection->Paths[0].MinRtt",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TimeNow",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->RecvWindowLastUpdate",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "Settings->MaxStatelessOperations",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "u",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "UpdateFlowControl": {
+ "SettingDumpMaxWorkerQueueDelayUs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Updating flow control window",
- "UniqueId": "UpdateFlowControl",
+ "TraceString": "[sett] MaxWorkerQueueDelayUs = %u",
+ "UniqueId": "SettingDumpMaxWorkerQueueDelayUs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->MaxWorkerQueueDelayUs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IgnoreRecvFlush": {
+ "SettingDumpInitialWindowPackets": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Ignoring recv flush (recv disabled)",
- "UniqueId": "IgnoreRecvFlush",
+ "TraceString": "[sett] InitialWindowPackets = %u",
+ "UniqueId": "SettingDumpInitialWindowPackets",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->InitialWindowPackets",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateReceive": {
+ "SettingDumpSendIdleTimeoutMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_RECEIVE [%llu bytes, %u buffers, 0x%x flags]",
- "UniqueId": "IndicateReceive",
+ "TraceString": "[sett] SendIdleTimeoutMs = %u",
+ "UniqueId": "SettingDumpSendIdleTimeoutMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.RECEIVE.TotalBufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.RECEIVE.BufferCount",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Settings->SendIdleTimeoutMs",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.RECEIVE.Flags",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg5"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ReceiveComplete": {
+ "SettingDumpInitialRttMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Recv complete (%llu bytes)",
- "UniqueId": "ReceiveComplete",
+ "TraceString": "[sett] InitialRttMs = %u",
+ "UniqueId": "SettingDumpInitialRttMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "BufferLength",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->InitialRttMs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerSendShutdown": {
+ "SettingDumpMaxAckDelayMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_SEND_SHUTDOWN",
- "UniqueId": "IndicatePeerSendShutdown",
+ "TraceString": "[sett] MaxAckDelayMs = %u",
+ "UniqueId": "SettingDumpMaxAckDelayMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->MaxAckDelayMs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateSendShutdownComplete": {
+ "SettingDumpDisconnectTimeoutMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_SHUTDOWN_COMPLETE",
- "UniqueId": "IndicateSendShutdownComplete",
+ "TraceString": "[sett] DisconnectTimeoutMs = %u",
+ "UniqueId": "SettingDumpDisconnectTimeoutMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->DisconnectTimeoutMs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateSendCanceled": {
+ "SettingDumpKeepAliveIntervalMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_COMPLETE [%p] (Canceled)",
- "UniqueId": "IndicateSendCanceled",
+ "TraceString": "[sett] KeepAliveIntervalMs = %u",
+ "UniqueId": "SettingDumpKeepAliveIntervalMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->KeepAliveIntervalMs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateSendComplete": {
+ "SettingDumpIdleTimeoutMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_COMPLETE [%p]",
- "UniqueId": "IndicateSendComplete",
+ "TraceString": "[sett] IdleTimeoutMs = %llu",
+ "UniqueId": "SettingDumpIdleTimeoutMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->IdleTimeoutMs",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SendQueued": {
+ "SettingDumpHandshakeIdleTimeoutMs": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Send Request [%p] queued with %llu bytes at offset %llu (flags 0x%x)",
- "UniqueId": "SendQueued",
+ "TraceString": "[sett] HandshakeIdleTimeoutMs = %llu",
+ "UniqueId": "SettingDumpHandshakeIdleTimeoutMs",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest->TotalLength",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest->StreamOffset",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Settings->HandshakeIdleTimeoutMs",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendRequest->Flags",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NoMoreRoom": {
+ "SettingDumpBidiStreamCount": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Can't squeeze in a frame (no room for header)",
- "UniqueId": "NoMoreRoom",
+ "TraceString": "[sett] PeerBidiStreamCount = %hu",
+ "UniqueId": "SettingDumpBidiStreamCount",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->PeerBidiStreamCount",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NoMoreFrames": {
+ "SettingDumpUnidiStreamCount": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] No more frames",
- "UniqueId": "NoMoreFrames",
+ "TraceString": "[sett] PeerUnidiStreamCount = %hu",
+ "UniqueId": "SettingDumpUnidiStreamCount",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->PeerUnidiStreamCount",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AddFrame": {
+ "SettingDumpTlsClientMaxSendBuffer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Built stream frame, offset=%llu len=%lu fin=%hhu",
- "UniqueId": "AddFrame",
+ "TraceString": "[sett] TlsClientMaxSendBuffer = %u",
+ "UniqueId": "SettingDumpTlsClientMaxSendBuffer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Offset",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "lu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Frame.Fin",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Settings->TlsClientMaxSendBuffer",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecoverOpen": {
+ "SettingDumpTlsServerMaxSendBuffer": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Recovering open STREAM frame",
- "UniqueId": "RecoverOpen",
+ "TraceString": "[sett] TlsServerMaxSendBuffer = %u",
+ "UniqueId": "SettingDumpTlsServerMaxSendBuffer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->TlsServerMaxSendBuffer",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecoverFin": {
+ "SettingDumpStreamRecvWindowDefault": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Recovering fin STREAM frame",
- "UniqueId": "RecoverFin",
+ "TraceString": "[sett] StreamRecvWindowDefault= %u",
+ "UniqueId": "SettingDumpStreamRecvWindowDefault",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->StreamRecvWindowDefault",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "RecoverRange": {
+ "SettingDumpStreamRecvBufferDefault": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Recovering offset %llu up to %llu",
- "UniqueId": "RecoverRange",
+ "TraceString": "[sett] StreamRecvBufferDefault= %u",
+ "UniqueId": "SettingDumpStreamRecvBufferDefault",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Start",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "End",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Settings->StreamRecvBufferDefault",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AckRange": {
+ "SettingDumpConnFlowControlWindow": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Received ack for %d bytes, offset=%llu, FF=0x%hx",
- "UniqueId": "AckRange",
+ "TraceString": "[sett] ConnFlowControlWindow = %u",
+ "UniqueId": "SettingDumpConnFlowControlWindow",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Length",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Offset",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "FrameMetadata->Flags",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "Settings->ConnFlowControlWindow",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hx",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "Send0RttUpdated": {
+ "SettingDumpMaxBytesPerKey": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Updated sent 0RTT length to %llu",
- "UniqueId": "Send0RttUpdated",
+ "TraceString": "[sett] MaxBytesPerKey = %llu",
+ "UniqueId": "SettingDumpMaxBytesPerKey",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "FollowingOffset",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Settings->MaxBytesPerKey",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SendQueueDrained": {
+ "SettingDumpServerResumptionLevel": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] Send queue completely drained",
- "UniqueId": "SendQueueDrained",
+ "TraceString": "[sett] ServerResumptionLevel = %hhu",
+ "UniqueId": "SettingDumpServerResumptionLevel",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Stream",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Settings->ServerResumptionLevel",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
- "EncodedPrefix": "[strm][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SendDump": {
+ "CloseWithoutShutdown": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] SF:%hX FC:%llu QS:%llu MAX:%llu UNA:%llu NXT:%llu RECOV:%llu-%llu",
- "UniqueId": "SendDump",
+ "TraceString": "[strm][%p] Closing handle without fully shutting down",
+ "UniqueId": "CloseWithoutShutdown",
"splitArgs": [
{
"VariableInfo": {
@@ -13953,89 +13217,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->SendFlags",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hX",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->MaxAllowedSendOffset",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->QueuedSendOffset",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->MaxSentLength",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->UnAckedOffset",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->NextSendOffset",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg8"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->Flags.InRecovery ? Stream->RecoveryNextOffset : 0",
- "SuggestedTelemetryName": "arg9"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg9"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Stream->Flags.InRecovery ? Stream->RecoveryEndOffset : 0",
- "SuggestedTelemetryName": "arg10"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg10"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
+ "MacroName": "QuicTraceLogStreamWarning",
"EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "SendDumpAck": {
+ "EventSilentDiscard": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] unACKed: [%llu, %llu]",
- "UniqueId": "SendDumpAck",
+ "TraceString": "[strm][%p] Event silently discarded",
+ "UniqueId": "EventSilentDiscard",
"splitArgs": [
{
"VariableInfo": {
@@ -14044,41 +13244,25 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "UnAcked",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Sack->Low",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamVerbose",
+ "MacroName": "QuicTraceLogStreamWarning",
"EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "NotAccepted": {
+ "IndicateStartComplete": {
"ModuleProperites": {},
- "TraceString": "[strm][%p] New stream wasn't accepted, 0x%x",
- "UniqueId": "NotAccepted",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_START_COMPLETE (0x%x)",
+ "UniqueId": "IndicateStartComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -14098,198 +13282,166 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogStreamWarning",
+ "MacroName": "QuicTraceLogStreamVerbose",
"EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "MaxStreamCountUpdated": {
+ "IndicateStreamShutdownComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] App configured max stream count of %hu (type=%hhu).",
- "UniqueId": "MaxStreamCountUpdated",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SHUTDOWN_COMPLETE",
+ "UniqueId": "IndicateStreamShutdownComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Count",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Type",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateStreamsAvailable": {
+ "StreamDestroyed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE [%hu] [%hu]",
- "UniqueId": "IndicateStreamsAvailable",
+ "TraceString": "[strm][%p] Destroyed",
+ "UniqueId": "StreamDestroyed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.STREAMS_AVAILABLE.BidirectionalCount",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.STREAMS_AVAILABLE.UnidirectionalCount",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "PeerStreamCountsUpdated": {
+ "StreamCreated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Peer updated max stream count (%hhu, %llu).",
- "UniqueId": "PeerStreamCountsUpdated",
+ "TraceString": "[strm][%p] Created, Conn=%p ID=%llu IsLocal=%hhu",
+ "UniqueId": "StreamCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "BidirectionalStreams",
+ "UserSuppliedTrimmed": "Stream->Connection",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MaxStreams",
+ "UserSuppliedTrimmed": "Stream->ID",
"SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "!IsRemoteStream",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicatePeerStreamStarted": {
+ "StreamSendState": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED [%p, 0x%x]",
- "UniqueId": "IndicatePeerStreamStarted",
+ "TraceString": "[strm][%p] Send State: %hhu",
+ "UniqueId": "StreamSendState",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Event.PEER_STREAM_STARTED.Stream",
+ "UserSuppliedTrimmed": "QuicStreamSendGetState(Stream)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Event.PEER_STREAM_STARTED.Flags",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerWheelResize": {
+ "StreamRecvState": {
"ModuleProperites": {},
- "TraceString": "[time][%p] Resizing timer wheel (new slot count = %u).",
- "UniqueId": "TimerWheelResize",
+ "TraceString": "[strm][%p] Recv State: %hhu",
+ "UniqueId": "StreamRecvState",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -14297,61 +13449,69 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "NewSlotCount",
+ "UserSuppliedTrimmed": "QuicStreamRecvGetState(Stream)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerWheelNextExpirationNull": {
+ "StreamOutFlowBlocked": {
"ModuleProperites": {},
- "TraceString": "[time][%p] Next Expiration = {NULL}.",
- "UniqueId": "TimerWheelNextExpirationNull",
+ "TraceString": "[strm][%p] Send Blocked Flags: %hhu",
+ "UniqueId": "StreamOutFlowBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->OutFlowBlockedReasons",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerWheelNextExpiration": {
+ "StreamRundown": {
"ModuleProperites": {},
- "TraceString": "[time][%p] Next Expiration = {%llu, %p}.",
- "UniqueId": "TimerWheelNextExpiration",
+ "TraceString": "[strm][%p] Rundown, Conn=%p ID=%llu IsLocal=%hhu",
+ "UniqueId": "StreamRundown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -14359,112 +13519,158 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel->NextExpirationTime",
+ "UserSuppliedTrimmed": "Stream->Connection",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel->NextConnection",
+ "UserSuppliedTrimmed": "Stream->ID",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(!QuicConnIsServer(Stream->Connection) ^ (Stream->ID & STREAM_ID_FLAG_IS_SERVER))",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerWheelRemoveConnection": {
+ "ResetEarly": {
"ModuleProperites": {},
- "TraceString": "[time][%p] Removing Connection %p.",
- "UniqueId": "TimerWheelRemoveConnection",
+ "TraceString": "[strm][%p] Tried to reset at earlier final size!",
+ "UniqueId": "ResetEarly",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamWarning",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "ResetTooBig": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Tried to reset with too big final size!",
+ "UniqueId": "ResetTooBig",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamWarning",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "ReceiveTooBig": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Tried to write beyond end of buffer!",
+ "UniqueId": "ReceiveTooBig",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamWarning",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TimerWheelUpdateConnection": {
+ "ReceiveBeyondFlowControl": {
"ModuleProperites": {},
- "TraceString": "[time][%p] Updating Connection %p.",
- "UniqueId": "TimerWheelUpdateConnection",
+ "TraceString": "[strm][%p] Tried to write beyond flow control limit!",
+ "UniqueId": "ReceiveBeyondFlowControl",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TimerWheel",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamWarning",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StillInTimerWheel": {
+ "RemoteCloseReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Still in timer wheel! Connection was likely leaked!",
- "UniqueId": "StillInTimerWheel",
+ "TraceString": "[strm][%p] Closed remotely (reset)",
+ "UniqueId": "RemoteCloseReset",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -14472,26 +13678,26 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamInfo",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "IndicateIdealProcChanged": {
+ "LocalCloseStopSending": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_IDEAL_PROCESSOR_CHANGED",
- "UniqueId": "IndicateIdealProcChanged",
+ "TraceString": "[strm][%p] Closed locally (stop sending)",
+ "UniqueId": "LocalCloseStopSending",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -14499,26 +13705,26 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamInfo",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "AbandonOnLibShutdown": {
+ "QueueRecvFlush": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Abandoning on shutdown",
- "UniqueId": "AbandonOnLibShutdown",
+ "TraceString": "[strm][%p] Queuing recv flush",
+ "UniqueId": "QueueRecvFlush",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -14526,52 +13732,44 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerCreated": {
+ "IndicatePeerSendAbort": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] Created, IdealProc=%hu Owner=%p",
- "UniqueId": "WorkerCreated",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_SEND_ABORTED (0x%llX)",
+ "UniqueId": "IndicatePeerSendAbort",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "IdealProcessor",
+ "UserSuppliedTrimmed": "ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "llX",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Owner",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -14581,600 +13779,606 @@
"CustomSettings": null
}
},
- "WorkerErrorStatus": {
+ "IndicatePeerReceiveAborted": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] ERROR, %u, %s.",
- "UniqueId": "WorkerErrorStatus",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_RECEIVE_ABORTED (0x%llX)",
+ "UniqueId": "IndicatePeerReceiveAborted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llX",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "\"QuicThreadCreate\"",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerCleanup": {
+ "FlowControlExhausted": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] Cleaning up",
- "UniqueId": "WorkerCleanup",
+ "TraceString": "[strm][%p] Flow control window exhausted!",
+ "UniqueId": "FlowControlExhausted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerDestroyed": {
+ "Receive": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] Destroyed",
- "UniqueId": "WorkerDestroyed",
+ "TraceString": "[strm][%p] Received %hu bytes, offset=%llu Ready=%hhu",
+ "UniqueId": "Receive",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint16_t)Frame->Length",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame->Offset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "ReadyToDeliver",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnScheduleState": {
+ "RemoteBlocked": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Scheduling: %u",
- "UniqueId": "ConnScheduleState",
+ "TraceString": "[strm][%p] Remote FC blocked (%llu)",
+ "UniqueId": "RemoteBlocked",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QUIC_SCHEDULE_QUEUED",
+ "UserSuppliedTrimmed": "Frame.StreamDataLimit",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerActivityStateUpdated": {
+ "IncreaseRxBuffer": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] IsActive = %hhu, Arg = %u",
- "UniqueId": "WorkerActivityStateUpdated",
+ "TraceString": "[strm][%p] Increasing max RX buffer size to %u (MinRtt=%u; TimeNow=%u; LastUpdate=%u)",
+ "UniqueId": "IncreaseRxBuffer",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker->IsActive",
+ "UserSuppliedTrimmed": "Stream->RecvBuffer.VirtualBufferLength * 2",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hhu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Arg",
+ "UserSuppliedTrimmed": "Stream->Connection->Paths[0].MinRtt",
"SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg4"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "WorkerQueueDelayUpdated": {
- "ModuleProperites": {},
- "TraceString": "[wrkr][%p] QueueDelay = %u",
- "UniqueId": "WorkerQueueDelayUpdated",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TimeNow",
+ "SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker->AverageQueueDelay",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Stream->RecvWindowLastUpdate",
+ "SuggestedTelemetryName": "arg6"
},
"DefinationEncoding": "u",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerStart": {
+ "UpdateFlowControl": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] Start",
- "UniqueId": "WorkerStart",
+ "TraceString": "[strm][%p] Updating flow control window",
+ "UniqueId": "UpdateFlowControl",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "WorkerStop": {
+ "IgnoreRecvFlush": {
"ModuleProperites": {},
- "TraceString": "[wrkr][%p] Stop",
- "UniqueId": "WorkerStop",
+ "TraceString": "[strm][%p] Ignoring recv flush (recv disabled)",
+ "UniqueId": "IgnoreRecvFlush",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Worker",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnExecApiOper": {
+ "IndicateReceive": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Execute: %u",
- "UniqueId": "ConnExecApiOper",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_RECEIVE [%llu bytes, %u buffers, 0x%x flags]",
+ "UniqueId": "IndicateReceive",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Oper->API_CALL.Context->Type",
+ "UserSuppliedTrimmed": "Event.RECEIVE.TotalBufferLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Event.RECEIVE.BufferCount",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Event.RECEIVE.Flags",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnExecOper": {
+ "ReceiveComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Execute: %u",
- "UniqueId": "ConnExecOper",
+ "TraceString": "[strm][%p] Recv complete (%llu bytes)",
+ "UniqueId": "ReceiveComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Oper->Type",
+ "UserSuppliedTrimmed": "BufferLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnOutFlowStats": {
+ "IndicatePeerSendShutdown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OUT: BytesSent=%llu InFlight=%u InFlightMax=%u CWnd=%u SSThresh=%u ConnFC=%llu ISB=%llu PostedBytes=%llu SRtt=%u",
- "UniqueId": "ConnOutFlowStats",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_PEER_SEND_SHUTDOWN",
+ "UniqueId": "IndicatePeerSendShutdown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.TotalBytes",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.BytesInFlight",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.BytesInFlightMax",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.CongestionWindow",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->CongestionControl.SlowStartThreshold",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Send.PeerMaxData - Connection->Send.OrderedStreamBytesSent",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg8"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->SendBuffer.IdealBytes",
- "SuggestedTelemetryName": "arg9"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg9"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->SendBuffer.PostedBytes",
- "SuggestedTelemetryName": "arg10"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg10"
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "IndicateSendShutdownComplete": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_SHUTDOWN_COMPLETE",
+ "UniqueId": "IndicateSendShutdownComplete",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Path->GotFirstRttSample ? Path->SmoothedRtt : 0",
- "SuggestedTelemetryName": "arg11"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg11"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnOutFlowStreamStats": {
+ "IndicateSendCanceled": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OUT: StreamFC=%llu StreamSendWindow=%llu",
- "UniqueId": "ConnOutFlowStreamStats",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_COMPLETE [%p] (Canceled)",
+ "UniqueId": "IndicateSendCanceled",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "FcAvailable",
+ "UserSuppliedTrimmed": "SendRequest",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendWindow",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg4"
}
],
- "macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "macro": {
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnInFlowStats": {
+ "IndicateSendComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] IN: BytesRecv=%llu",
- "UniqueId": "ConnInFlowStats",
+ "TraceString": "[strm][%p] Indicating QUIC_STREAM_EVENT_SEND_COMPLETE [%p]",
+ "UniqueId": "IndicateSendComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalBytes",
+ "UserSuppliedTrimmed": "SendRequest",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnStats": {
+ "SendQueued": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] STATS: SRtt=%u CongestionCount=%u PersistentCongestionCount=%u SendTotalBytes=%llu RecvTotalBytes=%llu",
- "UniqueId": "ConnStats",
+ "TraceString": "[strm][%p] Send Request [%p] queued with %llu bytes at offset %llu (flags 0x%x)",
+ "UniqueId": "SendQueued",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Path->SmoothedRtt",
+ "UserSuppliedTrimmed": "SendRequest",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.CongestionCount",
+ "UserSuppliedTrimmed": "SendRequest->TotalLength",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg4"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.PersistentCongestionCount",
+ "UserSuppliedTrimmed": "SendRequest->StreamOffset",
"SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg5"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.TotalBytes",
+ "UserSuppliedTrimmed": "SendRequest->Flags",
"SuggestedTelemetryName": "arg6"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg6"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "NoMoreRoom": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Can't squeeze in a frame (no room for header)",
+ "UniqueId": "NoMoreRoom",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalBytes",
- "SuggestedTelemetryName": "arg7"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg7"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnPacketStats": {
+ "NoMoreFrames": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] STATS: SendTotalPackets=%llu SendSuspectedLostPackets=%llu SendSpuriousLostPackets=%llu RecvTotalPackets=%llu RecvReorderedPackets=%llu RecvDroppedPackets=%llu RecvDuplicatePackets=%llu RecvDecryptionFailures=%llu",
- "UniqueId": "ConnPacketStats",
+ "TraceString": "[strm][%p] No more frames",
+ "UniqueId": "NoMoreFrames",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "AddFrame": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Built stream frame, offset=%llu len=%lu fin=%hhu",
+ "UniqueId": "AddFrame",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.TotalPackets",
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Frame.Offset",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "llu",
@@ -15182,233 +14386,252 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.SuspectedLostPackets",
+ "UserSuppliedTrimmed": "(uint16_t)Frame.Length",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "lu",
"MacroVariableName": "arg4"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Send.SpuriousLostPackets",
+ "UserSuppliedTrimmed": "Frame.Fin",
"SuggestedTelemetryName": "arg5"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.TotalPackets",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.ReorderedPackets",
- "SuggestedTelemetryName": "arg7"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg7"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.DroppedPackets",
- "SuggestedTelemetryName": "arg8"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg8"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.DuplicatePackets",
- "SuggestedTelemetryName": "arg9"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg9"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection->Stats.Recv.DecryptionFailures",
- "SuggestedTelemetryName": "arg10"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg10"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "ConnOutFlowBlocked": {
+ "RecoverOpen": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Send Blocked Flags: %hhu",
- "UniqueId": "ConnOutFlowBlocked",
+ "TraceString": "[strm][%p] Recovering open STREAM frame",
+ "UniqueId": "RecoverOpen",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "RecoverFin": {
+ "ModuleProperites": {},
+ "TraceString": "[strm][%p] Recovering fin STREAM frame",
+ "UniqueId": "RecoverFin",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->OutFlowBlockedReasons",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Stream",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsCertValidationDisabled": {
+ "RecoverRange": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Certificate validation disabled!",
- "UniqueId": "StubTlsCertValidationDisabled",
+ "TraceString": "[strm][%p] Recovering offset %llu up to %llu",
+ "UniqueId": "RecoverRange",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Start",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "End",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsContextReset": {
+ "AckRange": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Resetting TLS state",
- "UniqueId": "StubTlsContextReset",
+ "TraceString": "[strm][%p] Received ack for %d bytes, offset=%llu, FF=0x%hx",
+ "UniqueId": "AckRange",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Length",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "d",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Offset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "FrameMetadata->Flags",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hx",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsHandshakeComplete": {
+ "Send0RttUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake complete",
- "UniqueId": "StubTlsHandshakeComplete",
+ "TraceString": "[strm][%p] Updated sent 0RTT length to %llu",
+ "UniqueId": "Send0RttUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "FollowingOffset",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsConsumedData": {
+ "SendQueueDrained": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Consumed %u bytes",
- "UniqueId": "StubTlsConsumedData",
+ "TraceString": "[strm][%p] Send queue completely drained",
+ "UniqueId": "SendQueueDrained",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsProducedData": {
+ "SendDump": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Produced %hu bytes",
- "UniqueId": "StubTlsProducedData",
+ "TraceString": "[strm][%p] SF:%hX FC:%llu QS:%llu MAX:%llu UNA:%llu NXT:%llu RECOV:%llu-%llu",
+ "UniqueId": "SendDump",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -15416,43 +14639,115 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(State->BufferLength - PrevBufferLength)",
+ "UserSuppliedTrimmed": "Stream->SendFlags",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "hX",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->MaxAllowedSendOffset",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->QueuedSendOffset",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->MaxSentLength",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->UnAckedOffset",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg7"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->NextSendOffset",
+ "SuggestedTelemetryName": "arg8"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg8"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->Flags.InRecovery ? Stream->RecoveryNextOffset : 0",
+ "SuggestedTelemetryName": "arg9"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg9"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Stream->Flags.InRecovery ? Stream->RecoveryEndOffset : 0",
+ "SuggestedTelemetryName": "arg10"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg10"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsContextCreated": {
+ "SendDumpAck": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS context Created",
- "UniqueId": "StubTlsContextCreated",
+ "TraceString": "[strm][%p] unACKed: [%llu, %llu]",
+ "UniqueId": "SendDumpAck",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "UnAcked",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Sack->Low",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamVerbose",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
@@ -15463,68 +14758,92 @@
"CustomSettings": null
}
},
- "StubTlsUsing0Rtt": {
+ "NotAccepted": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Using 0-RTT ticket.",
- "UniqueId": "StubTlsUsing0Rtt",
+ "TraceString": "[strm][%p] New stream wasn't accepted, 0x%x",
+ "UniqueId": "NotAccepted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Stream",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
+ "MacroName": "QuicTraceLogStreamWarning",
+ "EncodedPrefix": "[strm][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsContextCleaningUp": {
+ "MaxStreamCountUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Cleaning up",
- "UniqueId": "StubTlsContextCleaningUp",
+ "TraceString": "[conn][%p] App configured max stream count of %hu (type=%hhu).",
+ "UniqueId": "MaxStreamCountUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Count",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Type",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsRecvNewSessionTicket": {
+ "IndicateStreamsAvailable": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received new ticket. ticket_len:%u session_len:%u for %s",
- "UniqueId": "StubTlsRecvNewSessionTicket",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE [%hu] [%hu]",
+ "UniqueId": "IndicateStreamsAvailable",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -15532,27 +14851,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)ServerMessageLength",
+ "UserSuppliedTrimmed": "Event.STREAMS_AVAILABLE.BidirectionalCount",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)0",
+ "UserSuppliedTrimmed": "Event.STREAMS_AVAILABLE.UnidirectionalCount",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->SNI",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -15561,21 +14872,21 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsProcessData": {
+ "PeerStreamCountsUpdated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Processing %u received bytes",
- "UniqueId": "StubTlsProcessData",
+ "TraceString": "[conn][%p] Peer updated max stream count (%hhu, %llu).",
+ "UniqueId": "PeerStreamCountsUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -15583,11 +14894,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
+ "UserSuppliedTrimmed": "BidirectionalStreams",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "MaxStreams",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "llu",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -15596,21 +14915,21 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "StubTlsReadTicket": {
+ "IndicatePeerStreamStarted": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ticket (%u bytes) read.",
- "UniqueId": "StubTlsReadTicket",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED [%p, 0x%x]",
+ "UniqueId": "IndicatePeerStreamStarted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
@@ -15618,11 +14937,19 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TicketBufferLength",
+ "UserSuppliedTrimmed": "Event.PEER_STREAM_STARTED.Stream",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Event.PEER_STREAM_STARTED.Flags",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -15631,83 +14958,83 @@
"EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryError": {
+ "TimerWheelResize": {
"ModuleProperites": {},
- "TraceString": "[ lib] ERROR, %s.",
- "UniqueId": "LibraryError",
+ "TraceString": "[time][%p] Resizing timer wheel (new slot count = %u).",
+ "UniqueId": "TimerWheelResize",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"Failed to acquire sec config rundown\"",
+ "UserSuppliedTrimmed": "TimerWheel",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "NewSlotCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TlsError": {
+ "TimerWheelNextExpirationNull": {
"ModuleProperites": {},
- "TraceString": "[ tls][%p] ERROR, %s.",
- "UniqueId": "TlsError",
+ "TraceString": "[time][%p] Next Expiration = {NULL}.",
+ "UniqueId": "TimerWheelNextExpirationNull",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "TimerWheel",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "\"SNI Too Long\"",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TlsErrorStatus": {
+ "TimerWheelNextExpiration": {
"ModuleProperites": {},
- "TraceString": "[ tls][%p] ERROR, %u, %s.",
- "UniqueId": "TlsErrorStatus",
+ "TraceString": "[time][%p] Next Expiration = {%llu, %p}.",
+ "UniqueId": "TimerWheelNextExpiration",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
+ "UserSuppliedTrimmed": "TimerWheel",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -15715,127 +15042,89 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ClientMessage->Type",
+ "UserSuppliedTrimmed": "TimerWheel->NextExpirationTime",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"Invalid message\"",
+ "UserSuppliedTrimmed": "TimerWheel->NextConnection",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathCreate": {
+ "TimerWheelRemoveConnection": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Created.",
- "UniqueId": "DatapathCreate",
+ "TraceString": "[time][%p] Removing Connection %p.",
+ "UniqueId": "TimerWheelRemoveConnection",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "TimerWheel",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "DatapathWorkerThreadStart": {
- "ModuleProperites": {},
- "TraceString": "[ udp][%p] Worker start",
- "UniqueId": "DatapathWorkerThreadStart",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ProcContext",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathWorkerThreadStop": {
+ "TimerWheelUpdateConnection": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Worker stop",
- "UniqueId": "DatapathWorkerThreadStop",
+ "TraceString": "[time][%p] Updating Connection %p.",
+ "UniqueId": "TimerWheelUpdateConnection",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ProcContext",
+ "UserSuppliedTrimmed": "TimerWheel",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
},
- "CustomSettings": null
- }
- },
- "DatapathShuttingDown": {
- "ModuleProperites": {},
- "TraceString": "[ udp][%p] Shutting down",
- "UniqueId": "DatapathShuttingDown",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -15844,126 +15133,102 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathSendToCompleted": {
+ "StillInTimerWheel": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] sendto succeeded, bytes transferred %d",
- "UniqueId": "DatapathSendToCompleted",
+ "TraceString": "[conn][%p] Still in timer wheel! Connection was likely leaked!",
+ "UniqueId": "StillInTimerWheel",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SentByteCount",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnWarning",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathSendMsgCompleted": {
+ "IndicateIdealProcChanged": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] sendmsg succeeded, bytes transferred %d",
- "UniqueId": "DatapathSendMsgCompleted",
+ "TraceString": "[conn][%p] Indicating QUIC_CONNECTION_EVENT_IDEAL_PROCESSOR_CHANGED",
+ "UniqueId": "IndicateIdealProcChanged",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SentByteCount",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathResolveHostNameFailed": {
+ "AbandonOnLibShutdown": {
"ModuleProperites": {},
- "TraceString": "[%p] Couldn't resolve hostname '%s' to an IP address",
- "UniqueId": "DatapathResolveHostNameFailed",
+ "TraceString": "[conn][%p] Abandoning on shutdown",
+ "UniqueId": "AbandonOnLibShutdown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Datapath",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "HostName",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogError",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "DatapathErrorStatus": {
+ "WorkerCreated": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] ERROR, %u, %s.",
- "UniqueId": "DatapathErrorStatus",
+ "TraceString": "[wrkr][%p] Created, IdealProc=%hu Owner=%p",
+ "UniqueId": "WorkerCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -15971,18 +15236,18 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "IdealProcessor",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "\"eventfd failed\"",
+ "UserSuppliedTrimmed": "Owner",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg4"
}
],
@@ -15992,37 +15257,37 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "LibraryAssert": {
+ "WorkerErrorStatus": {
"ModuleProperites": {},
- "TraceString": "[ lib] ASSERT, %u:%s - %s.",
- "UniqueId": "LibraryAssert",
+ "TraceString": "[wrkr][%p] ERROR, %u, %s.",
+ "UniqueId": "WorkerErrorStatus",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Line",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "File",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Expr",
+ "UserSuppliedTrimmed": "\"QuicThreadCreate\"",
"SuggestedTelemetryName": "arg4"
},
"DefinationEncoding": "s",
@@ -16035,338 +15300,262 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestScopeEntry": {
+ "WorkerCleanup": {
"ModuleProperites": {},
- "TraceString": "[test]---> %s",
- "UniqueId": "TestScopeEntry",
+ "TraceString": "[wrkr][%p] Cleaning up",
+ "UniqueId": "WorkerCleanup",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Name",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestScopeExit": {
+ "WorkerDestroyed": {
"ModuleProperites": {},
- "TraceString": "[test]<--- %s",
- "UniqueId": "TestScopeExit",
+ "TraceString": "[wrkr][%p] Destroyed",
+ "UniqueId": "WorkerDestroyed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Name",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookRegister": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Registering",
- "UniqueId": "TestHookRegister",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookUnregistering": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Unregistering",
- "UniqueId": "TestHookUnregistering",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookUnregistered": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Unregistered",
- "UniqueId": "TestHookUnregistered",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookDropPacketRandom": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Random packet drop",
- "UniqueId": "TestHookDropPacketRandom",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookDropPacketSelective": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Selective packet drop",
- "UniqueId": "TestHookDropPacketSelective",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestHookReplaceAddrRecv": {
+ "ConnScheduleState": {
"ModuleProperites": {},
- "TraceString": "[test][hook] Recv Addr :%hu => :%hu",
- "UniqueId": "TestHookReplaceAddrRecv",
+ "TraceString": "[conn][%p] Scheduling: %u",
+ "UniqueId": "ConnScheduleState",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicAddrGetPort(&Original)",
+ "UserSuppliedTrimmed": "Connection",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicAddrGetPort(&New)",
+ "UserSuppliedTrimmed": "QUIC_SCHEDULE_QUEUED",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestHookReplaceAddrSend": {
+ "WorkerActivityStateUpdated": {
"ModuleProperites": {},
- "TraceString": "[test][hook] Send Addr :%hu => :%hu",
- "UniqueId": "TestHookReplaceAddrSend",
+ "TraceString": "[wrkr][%p] IsActive = %hhu, Arg = %u",
+ "UniqueId": "WorkerActivityStateUpdated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicAddrGetPort(&New)",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicAddrGetPort(&Original)",
+ "UserSuppliedTrimmed": "Worker->IsActive",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "hhu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Arg",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestHookDropOldAddrSend": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Dropping send to old addr",
- "UniqueId": "TestHookDropOldAddrSend",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestHookDropLimitAddrRecv": {
+ "WorkerQueueDelayUpdated": {
"ModuleProperites": {},
- "TraceString": "[test][hook] Dropping recv over limit to new addr",
- "UniqueId": "TestHookDropLimitAddrRecv",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "empty",
- "windows_kernel": "empty",
- "windows": "empty"
+ "TraceString": "[wrkr][%p] QueueDelay = %u",
+ "UniqueId": "WorkerQueueDelayUpdated",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Worker",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg2"
},
- "CustomSettings": null
- }
- },
- "TestHookDropLimitAddrSend": {
- "ModuleProperites": {},
- "TraceString": "[test][hook] Dropping send over limit to new addr",
- "UniqueId": "TestHookDropLimitAddrSend",
- "splitArgs": [],
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Worker->AverageQueueDelay",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestIgnoreConnectionTimeout": {
+ "WorkerStart": {
"ModuleProperites": {},
- "TraceString": "[test] Ignoring timeout unexpected status because of random loss",
- "UniqueId": "TestIgnoreConnectionTimeout",
- "splitArgs": [],
+ "TraceString": "[wrkr][%p] Start",
+ "UniqueId": "WorkerStart",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Worker",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg2"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestCaseStart": {
+ "WorkerStop": {
"ModuleProperites": {},
- "TraceString": "[test] START %s",
- "UniqueId": "TestCaseStart",
+ "TraceString": "[wrkr][%p] Stop",
+ "UniqueId": "WorkerStop",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TestName",
+ "UserSuppliedTrimmed": "Worker",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceEvent",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestCaseEnd": {
+ "CertCapiVerifiedChain": {
"ModuleProperites": {},
- "TraceString": "[test] END %s",
- "UniqueId": "TestCaseEnd",
+ "TraceString": "CertVerifyChain: %S 0x%x, result=0x%x",
+ "UniqueId": "CertCapiVerifiedChain",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TestName",
+ "UserSuppliedTrimmed": "ServerName",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "S",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "IgnoreFlags",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg4"
}
],
"macro": {
@@ -16375,559 +15564,626 @@
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestCaseTStart": {
+ "CertCapiParsedChain": {
"ModuleProperites": {},
- "TraceString": "[test] START %s, %s",
- "UniqueId": "TestCaseTStart",
+ "TraceString": "[cert] Successfully parsed chain of %u certificate(s)",
+ "UniqueId": "CertCapiParsedChain",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TestName",
+ "UserSuppliedTrimmed": "CertNumber",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "stream.str().c_str()",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestCaseTEnd": {
+ "CertCapiFormattedChain": {
"ModuleProperites": {},
- "TraceString": "[test] END %s",
- "UniqueId": "TestCaseTEnd",
+ "TraceString": "[cert] Successfully formatted chain of %u certificate(s)",
+ "UniqueId": "CertCapiFormattedChain",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TestName",
+ "UserSuppliedTrimmed": "CertNumber",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "TestLogFailure": {
+ "CertCapiSign": {
"ModuleProperites": {},
- "TraceString": "[test] FAILURE - %s:%d - %s",
- "UniqueId": "TestLogFailure",
+ "TraceString": "[cert] QuicCertSign alg=0x%4.4x",
+ "UniqueId": "CertCapiSign",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "File",
+ "UserSuppliedTrimmed": "SignatureAlgorithm",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "4.4x",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Line",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Buffer",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogError",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslAlert": {
+ "CertCapiVerify": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Send alert = %u (Level = %u)",
- "UniqueId": "OpenSslAlert",
+ "TraceString": "[cert] QuicCertVerify alg=0x%4.4x",
+ "UniqueId": "CertCapiVerify",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Alert",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Level",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "SignatureAlgorithm",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "4.4x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslHandshakeErrorStr": {
+ "LibraryError": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS handshake error: %s",
- "UniqueId": "OpenSslHandshakeErrorStr",
+ "TraceString": "[ lib] ERROR, %s.",
+ "UniqueId": "LibraryError",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ERR_error_string(ERR_get_error(), NULL)",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "\"Not all cert bytes were processed\"",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "s",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslHandshakeError": {
+ "CertOpenSslGetProcessAddressFailure": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS handshake error: %d",
- "UniqueId": "OpenSslHandshakeError",
+ "TraceString": "[cert] GetProcAddress failed for %s, 0x%x",
+ "UniqueId": "CertOpenSslGetProcessAddressFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "FuncName",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Err",
+ "UserSuppliedTrimmed": "Error",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "d",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslAlpnNegotiationFailure": {
+ "DatapathCreate": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Failed to negotiate ALPN",
- "UniqueId": "OpenSslAlpnNegotiationFailure",
+ "TraceString": "[ udp][%p] Created.",
+ "UniqueId": "DatapathCreate",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslInvalidAlpnLength": {
+ "DatapathWorkerThreadStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Invalid negotiated ALPN length",
- "UniqueId": "OpenSslInvalidAlpnLength",
+ "TraceString": "[ udp][%p] Worker start",
+ "UniqueId": "DatapathWorkerThreadStart",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "ProcContext",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslNoMatchingAlpn": {
+ "DatapathWorkerThreadStop": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Failed to find a matching ALPN",
- "UniqueId": "OpenSslNoMatchingAlpn",
+ "TraceString": "[ udp][%p] Worker stop",
+ "UniqueId": "DatapathWorkerThreadStop",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "ProcContext",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslMissingTransportParameters": {
+ "DatapathShuttingDown": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] No transport parameters received",
- "UniqueId": "OpenSslMissingTransportParameters",
+ "TraceString": "[ udp][%p] Shutting down",
+ "UniqueId": "DatapathShuttingDown",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
}
],
- "macro": {
- "MacroName": "QuicTraceLogConnError",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslHandshakeDataStart": {
+ "DatapathResolveHostNameFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Writing Handshake data starts at %u",
- "UniqueId": "OpenSslHandshakeDataStart",
+ "TraceString": "[%p] Couldn't resolve hostname '%s' to an IP address",
+ "UniqueId": "DatapathResolveHostNameFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Datapath",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsState->BufferOffsetHandshake",
+ "UserSuppliedTrimmed": "HostName",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogError",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSsl1RttDataStart": {
+ "DatapathErrorStatus": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Writing 1-RTT data starts at %u",
- "UniqueId": "OpenSsl1RttDataStart",
+ "TraceString": "[ udp][%p] ERROR, %u, %s.",
+ "UniqueId": "DatapathErrorStatus",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsState->BufferOffset1Rtt",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "\"eventfd failed\"",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslContextReset": {
+ "DatapathRecv": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Resetting TLS state",
- "UniqueId": "OpenSslContextReset",
+ "TraceString": "[ udp][%p] Recv %u bytes (segment=%hu) Src=%!ADDR! Dst=%!ADDR!",
+ "UniqueId": "DatapathRecv",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "SocketContext->Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint32_t)BytesTransferred",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint32_t)BytesTransferred",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*LocalAddr), LocalAddr)",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslHandshakeComplete": {
+ "DatapathSendTo": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake complete",
- "UniqueId": "OpenSslHandshakeComplete",
+ "TraceString": "[ udp][%p] Send %u bytes in %hhu buffers (segment=%hu) Dst=%!ADDR!",
+ "UniqueId": "DatapathSendTo",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TotalSize",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendContext->BufferCount",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendContext->Buffers[0].Length",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddress), RemoteAddress)",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslNewEncryptionSecrets": {
+ "DatapathSendFromTo": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] New encryption secrets (Level = %u)",
- "UniqueId": "OpenSslNewEncryptionSecrets",
+ "TraceString": "[ udp][%p] Send %u bytes in %hhu buffers (segment=%hu) Dst=%!ADDR!, Src=%!ADDR!",
+ "UniqueId": "DatapathSendFromTo",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Binding",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Level",
+ "UserSuppliedTrimmed": "TotalSize",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendContext->BufferCount",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hhu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SendContext->Buffers[0].Length",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddress), RemoteAddress)",
+ "SuggestedTelemetryName": "arg6"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg6"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*LocalAddress), LocalAddress)",
+ "SuggestedTelemetryName": "arg7"
+ },
+ "DefinationEncoding": "!ADDR!",
+ "MacroVariableName": "arg7"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslAddHandshakeData": {
+ "DatapathOpenTcpSocketFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Sending %llu handshake bytes (Level = %u)",
- "UniqueId": "OpenSslAddHandshakeData",
+ "TraceString": "[ udp] RSS helper socket failed to open, 0x%x",
+ "UniqueId": "DatapathOpenTcpSocketFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Length",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DatapathOpenTcpSocketFailedAsync": {
+ "ModuleProperites": {},
+ "TraceString": "[ udp] RSS helper socket failed to open (async), 0x%x",
+ "UniqueId": "DatapathOpenTcpSocketFailedAsync",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Level",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslContextCreated": {
+ "DatapathQueryRssScalabilityInfoFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS context Created",
- "UniqueId": "OpenSslContextCreated",
+ "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed, 0x%x",
+ "UniqueId": "DatapathQueryRssScalabilityInfoFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -16937,59 +16193,51 @@
"CustomSettings": null
}
},
- "OpenSslContextCleaningUp": {
+ "DatapathQueryRssScalabilityInfoFailedAsync": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Cleaning up",
- "UniqueId": "OpenSslContextCleaningUp",
+ "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed (async), 0x%x",
+ "UniqueId": "DatapathQueryRssScalabilityInfoFailedAsync",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
- "stubs": "empty",
+ "stubs": "stubs",
"windows_kernel": "empty",
"windows": "empty"
},
"CustomSettings": null
}
},
- "OpenSslProcessData_IgnoreTicket": {
+ "DatapathOpenUdpSocketFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring %u ticket bytes",
- "UniqueId": "OpenSslProcessData_IgnoreTicket",
+ "TraceString": "[ udp] UDP send segmentation helper socket failed to open, 0x%x",
+ "UniqueId": "DatapathOpenUdpSocketFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -16999,24 +16247,24 @@
"CustomSettings": null
}
},
- "NegotiatedDisable1RttEncryption": {
+ "DatapathOpenUdpSocketFailedAsync": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Negotiated Disable 1-RTT Encryption",
- "UniqueId": "NegotiatedDisable1RttEncryption",
+ "TraceString": "[ udp] UDP send segmentation helper socket failed to open (async), 0x%x",
+ "UniqueId": "DatapathOpenUdpSocketFailedAsync",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -17026,32 +16274,51 @@
"CustomSettings": null
}
},
- "Disable1RttEncrytionUpdated": {
+ "DatapathQueryUdpSendMsgFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Updated disable 1-RTT encrytption to %hhu",
- "UniqueId": "Disable1RttEncrytionUpdated",
+ "TraceString": "[ udp] Query for UDP_SEND_MSG_SIZE failed, 0x%x",
+ "UniqueId": "DatapathQueryUdpSendMsgFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DatapathQueryUdpSendMsgFailedAsync": {
+ "ModuleProperites": {},
+ "TraceString": "[ udp] Query for UDP_SEND_MSG_SIZE failed (async), 0x%x",
+ "UniqueId": "DatapathQueryUdpSendMsgFailedAsync",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection->State.Disable1RttEncrytion",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -17061,24 +16328,24 @@
"CustomSettings": null
}
},
- "EncodeTPDisable1RttEncryption": {
+ "DatapathQueryRecvMaxCoalescedSizeFailed": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Disable 1-RTT Encryption",
- "UniqueId": "EncodeTPDisable1RttEncryption",
+ "TraceString": "[ udp] Query for UDP_RECV_MAX_COALESCED_SIZE failed, 0x%x",
+ "UniqueId": "DatapathQueryRecvMaxCoalescedSizeFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -17088,24 +16355,24 @@
"CustomSettings": null
}
},
- "DecodeTPDisable1RttEncryption": {
+ "DatapathQueryRecvMaxCoalescedSizeFailedAsync": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Disable 1-RTT Encryption",
- "UniqueId": "DecodeTPDisable1RttEncryption",
+ "TraceString": "[ udp] Query for UDP_RECV_MAX_COALESCED_SIZE failed (async), 0x%x",
+ "UniqueId": "DatapathQueryRecvMaxCoalescedSizeFailedAsync",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -17115,10 +16382,10 @@
"CustomSettings": null
}
},
- "BindingCreated": {
+ "DatapathDropEmptyMdl": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] Created, Udp=%p LocalAddr=%!ADDR! RemoteAddr=%!ADDR!",
- "UniqueId": "BindingCreated",
+ "TraceString": "[%p] Dropping datagram with empty mdl.",
+ "UniqueId": "DatapathDropEmptyMdl",
"splitArgs": [
{
"VariableInfo": {
@@ -17127,34 +16394,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding->DatapathBinding",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathLocalAddr), &DatapathLocalAddr)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathRemoteAddr), &DatapathRemoteAddr)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17166,10 +16409,10 @@
"CustomSettings": null
}
},
- "BindingRundown": {
+ "DatapathDropMissingInfo": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] Rundown, Udp=%p LocalAddr=%!ADDR! RemoteAddr=%!ADDR!",
- "UniqueId": "BindingRundown",
+ "TraceString": "[%p] Dropping datagram missing IP_PKTINFO/IP_RECVERR.",
+ "UniqueId": "DatapathDropMissingInfo",
"splitArgs": [
{
"VariableInfo": {
@@ -17178,34 +16421,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding->DatapathBinding",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathLocalAddr), &DatapathLocalAddr)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(DatapathRemoteAddr), &DatapathRemoteAddr)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17217,14 +16436,14 @@
"CustomSettings": null
}
},
- "ConnLocalAddrAdded": {
+ "DatapathDropTooBig": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] New Local IP: %!ADDR!",
- "UniqueId": "ConnLocalAddrAdded",
+ "TraceString": "[%p] Dropping datagram with too many bytes (%llu).",
+ "UniqueId": "DatapathDropTooBig",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -17232,15 +16451,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Path->LocalAddress), &Path->LocalAddress)",
+ "UserSuppliedTrimmed": "(uint64_t)DataLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "!ADDR!",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17252,30 +16471,22 @@
"CustomSettings": null
}
},
- "ConnRemoteAddrAdded": {
+ "DatapathDropMdlMapFailure": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] New Remote IP: %!ADDR!",
- "UniqueId": "ConnRemoteAddrAdded",
+ "TraceString": "[%p] Failed to map MDL chain",
+ "UniqueId": "DatapathDropMdlMapFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Path->RemoteAddress), &Path->RemoteAddress)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17287,38 +16498,22 @@
"CustomSettings": null
}
},
- "ConnDestCidAdded": {
+ "DatapathFragmented": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] (SeqNum=%llu) New Destination CID: %!CID!",
- "UniqueId": "ConnDestCidAdded",
+ "TraceString": "[%p] Dropping datagram with fragmented MDL.",
+ "UniqueId": "DatapathFragmented",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Path->DestCid->CID.SequenceNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(Path->DestCid->CID.Length, Path->DestCid->CID.Data)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!CID!",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17330,38 +16525,22 @@
"CustomSettings": null
}
},
- "ConnSourceCidAdded": {
+ "DatapathDropAllocRecvContextFailure": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] (SeqNum=%llu) New Source CID: %!CID!",
- "UniqueId": "ConnSourceCidAdded",
+ "TraceString": "[%p] Couldn't allocate receive context.",
+ "UniqueId": "DatapathDropAllocRecvContextFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SourceCid->CID.SequenceNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(SourceCid->CID.Length, SourceCid->CID.Data)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!CID!",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17373,38 +16552,22 @@
"CustomSettings": null
}
},
- "ConnDestCidRemoved": {
+ "DatapathDropAllocRecvBufferFailure": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] (SeqNum=%llu) Removed Destination CID: %!CID!",
- "UniqueId": "ConnDestCidRemoved",
+ "TraceString": "[%p] Couldn't allocate receive buffers.",
+ "UniqueId": "DatapathDropAllocRecvBufferFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "DestCid->CID.SequenceNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(DestCid->CID.Length, DestCid->CID.Data)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!CID!",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17416,38 +16579,22 @@
"CustomSettings": null
}
},
- "ConnSourceCidRemoved": {
+ "DatapathUroExceeded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] (SeqNum=%llu) Removed Source CID: %!CID!",
- "UniqueId": "ConnSourceCidRemoved",
+ "TraceString": "[%p] Exceeded URO preallocation capacity.",
+ "UniqueId": "DatapathUroExceeded",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "NextSourceCid->CID.SequenceNumber",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(NextSourceCid->CID.Length, NextSourceCid->CID.Data)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!CID!",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17459,14 +16606,14 @@
"CustomSettings": null
}
},
- "ConnLocalAddrRemoved": {
+ "DatapathUnreachable": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Removed Local IP: %!ADDR!",
- "UniqueId": "ConnLocalAddrRemoved",
+ "TraceString": "[sock][%p] Unreachable error from %!ADDR!",
+ "UniqueId": "DatapathUnreachable",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -17474,7 +16621,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Connection->Paths[0].LocalAddress), &Connection->Paths[0].LocalAddress)",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(RemoteAddr), &RemoteAddr)",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "!ADDR!",
@@ -17482,7 +16629,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17494,38 +16641,22 @@
"CustomSettings": null
}
},
- "ListenerStarted": {
+ "DatapathQueryRssProcessorInfoFailed": {
"ModuleProperites": {},
- "TraceString": "[list][%p] Started, Binding=%p, LocalAddr=%!ADDR!",
- "UniqueId": "ListenerStarted",
+ "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed, 0x%x",
+ "UniqueId": "DatapathQueryRssProcessorInfoFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Listener",
+ "UserSuppliedTrimmed": "WsaError",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Listener->Binding",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Listener->LocalAddress), &Listener->LocalAddress)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17537,14 +16668,14 @@
"CustomSettings": null
}
},
- "BindingDropPacketEx": {
+ "DatapathQueryProcessorAffinityFailed": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] DROP packet %llu. Dst=%!ADDR! Src=%!ADDR! Reason=%s",
- "UniqueId": "BindingDropPacketEx",
+ "TraceString": "[ udp][%p] WSAIoctl for SIO_QUERY_RSS_PROCESSOR_INFO failed, 0x%x",
+ "UniqueId": "DatapathQueryProcessorAffinityFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Owner",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -17552,39 +16683,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Value",
+ "UserSuppliedTrimmed": "WsaError",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Reason",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17596,54 +16703,49 @@
"CustomSettings": null
}
},
- "ConnDropPacketEx": {
+ "DatapathMissingInfo": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] DROP packet Value=%llu Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
- "UniqueId": "ConnDropPacketEx",
+ "TraceString": "[ udp][%p] WSARecvMsg completion is missing IP_PKTINFO",
+ "UniqueId": "DatapathMissingInfo",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Owner",
+ "UserSuppliedTrimmed": "SocketContext->Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogWarning",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "DatapathRecvEmpty": {
+ "ModuleProperites": {},
+ "TraceString": "[ udp][%p] Dropping datagram with empty payload.",
+ "UniqueId": "DatapathRecvEmpty",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Value",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Reason",
- "SuggestedTelemetryName": "arg6"
+ "UserSuppliedTrimmed": "SocketContext->Binding",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg6"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17655,46 +16757,22 @@
"CustomSettings": null
}
},
- "BindingDropPacket": {
+ "DatapathUroPreallocExceeded": {
"ModuleProperites": {},
- "TraceString": "[bind][%p] DROP packet Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
- "UniqueId": "BindingDropPacket",
+ "TraceString": "[ udp][%p] Exceeded URO preallocation capacity.",
+ "UniqueId": "DatapathUroPreallocExceeded",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Owner",
+ "UserSuppliedTrimmed": "SocketContext->Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Reason",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogWarning",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17706,46 +16784,22 @@
"CustomSettings": null
}
},
- "ConnDropPacket": {
+ "DatapathShutDownReturn": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] DROP packet Dst=%!ADDR! Src=%!ADDR! Reason=%s.",
- "UniqueId": "ConnDropPacket",
+ "TraceString": "[ udp][%p] Shut down (return)",
+ "UniqueId": "DatapathShutDownReturn",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Owner",
+ "UserSuppliedTrimmed": "Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->LocalAddress), &Datagram->Tuple->LocalAddress)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Datagram->Tuple->RemoteAddress), &Datagram->Tuple->RemoteAddress)",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Reason",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17757,10 +16811,10 @@
"CustomSettings": null
}
},
- "DatapathRecv": {
+ "DatapathShutDownComplete": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Recv %u bytes (segment=%hu) Src=%!ADDR! Dst=%!ADDR!",
- "UniqueId": "DatapathRecv",
+ "TraceString": "[ udp][%p] Shut down (complete)",
+ "UniqueId": "DatapathShutDownComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -17769,42 +16823,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)BytesTransferred",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)BytesTransferred",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*LocalAddr), LocalAddr)",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg6"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17816,14 +16838,14 @@
"CustomSettings": null
}
},
- "DatapathSendTo": {
+ "DatapathUnreachableWithError": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Send %u bytes in %hhu buffers (segment=%hu) Dst=%!ADDR!",
- "UniqueId": "DatapathSendTo",
+ "TraceString": "[ udp][%p] Received unreachable error (0x%x) from %!ADDR!",
+ "UniqueId": "DatapathUnreachableWithError",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "SocketContext->Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -17831,39 +16853,23 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SendContext->Buffers[i].Length",
+ "UserSuppliedTrimmed": "ErrorCode",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "1",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendContext->Buffers[i].Length",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddress), RemoteAddress)",
- "SuggestedTelemetryName": "arg6"
- },
"DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg6"
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17875,14 +16881,14 @@
"CustomSettings": null
}
},
- "DatapathSendFromTo": {
+ "DatapathTooLarge": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Send %u bytes in %hhu buffers (segment=%hu) Dst=%!ADDR!, Src=%!ADDR!",
- "UniqueId": "DatapathSendFromTo",
+ "TraceString": "[ udp][%p] Received larger than expected datagram from %!ADDR!",
+ "UniqueId": "DatapathTooLarge",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "SocketContext->Binding",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -17890,47 +16896,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TotalSize",
+ "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendContext->BufferCount",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hhu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SendContext->Buffers[0].Length",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddress), RemoteAddress)",
- "SuggestedTelemetryName": "arg6"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg6"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*LocalAddress), LocalAddress)",
- "SuggestedTelemetryName": "arg7"
- },
"DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg7"
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -17942,42 +16916,34 @@
"CustomSettings": null
}
},
- "ConnPacketRecv": {
+ "LibraryAssert": {
"ModuleProperites": {},
- "TraceString": "[conn][%p][RX][%llu] %c (%hu bytes)",
- "UniqueId": "ConnPacketRecv",
+ "TraceString": "[ lib] ASSERT, %u:%s - %s.",
+ "UniqueId": "LibraryAssert",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
+ "UserSuppliedTrimmed": "(uint32_t)Line",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->PacketNumber",
+ "UserSuppliedTrimmed": "File",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Packet->IsShortHeader ? QUIC_TRACE_PACKET_ONE_RTT : (Packet->LH->Type + 1)",
+ "UserSuppliedTrimmed": "Expr",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "c",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Packet->HeaderLength + Packet->PayloadLength",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
}
],
"macro": {
@@ -17993,32 +16959,68 @@
"CustomSettings": null
}
},
- "PeerPreferredAddress": {
+ "WindowsKernelLoaded": {
+ "ModuleProperites": {},
+ "TraceString": "[ sys] Loaded",
+ "UniqueId": "WindowsKernelLoaded",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "WindowsKernelUnloaded": {
+ "ModuleProperites": {},
+ "TraceString": "[ sys] Unloaded",
+ "UniqueId": "WindowsKernelUnloaded",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "WindowsKernelInitialized": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Peer configured preferred address %!ADDR!",
- "UniqueId": "PeerPreferredAddress",
+ "TraceString": "[ sys] Initialized (PageSize = %u bytes; AvailMem = %llu bytes)",
+ "UniqueId": "WindowsKernelInitialized",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Sbi.PageSize",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(Connection->PeerTransportParams.PreferredAddress), &Connection->PeerTransportParams.PreferredAddress)",
+ "UserSuppliedTrimmed": "QuicTotalMemory",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "!ADDR!",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18028,32 +17030,15 @@
"CustomSettings": null
}
},
- "EncodeTPOriginalCID_Retry": {
+ "WindowsKernelUninitialized": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Retry Source Connection ID (%s)",
- "UniqueId": "EncodeTPOriginalCID_Retry",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->RetrySourceConnectionID,\n TransportParams->RetrySourceConnectionIDLength).Buffer",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ sys] Uninitialized",
+ "UniqueId": "WindowsKernelUninitialized",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18063,32 +17048,15 @@
"CustomSettings": null
}
},
- "OpenSslProcessData": {
+ "WindowsUserLoaded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Processing %u received bytes",
- "UniqueId": "OpenSslProcessData",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ dll] Loaded",
+ "UniqueId": "WindowsUserLoaded",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18098,32 +17066,15 @@
"CustomSettings": null
}
},
- "SchannelProcessingData": {
+ "WindowsUserUnloaded": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Processing %u received bytes",
- "UniqueId": "SchannelProcessingData",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[ dll] Unloaded",
+ "UniqueId": "WindowsUserUnloaded",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18133,22 +17084,38 @@
"CustomSettings": null
}
},
- "DatapathOpenTcpSocketFailed": {
+ "WindowsUserProcessorState": {
"ModuleProperites": {},
- "TraceString": "[ udp] RSS helper socket failed to open, 0x%x",
- "UniqueId": "DatapathOpenTcpSocketFailed",
+ "TraceString": "[ dll] Processors:%u, Groups:%u, NUMA Nodes:%u",
+ "UniqueId": "WindowsUserProcessorState",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
+ "UserSuppliedTrimmed": "ActiveProcessorCount",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "ProcessorGroupCount",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "NumaNodeCount",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18160,22 +17127,46 @@
"CustomSettings": null
}
},
- "DatapathQueryRssProcessorInfoFailed": {
+ "ProcessorInfo": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed, 0x%x",
- "UniqueId": "DatapathQueryRssProcessorInfoFailed",
+ "TraceString": "[ dll] Proc[%u] Group[%hu] Index[%u] NUMA[%u]",
+ "UniqueId": "ProcessorInfo",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
+ "UserSuppliedTrimmed": "Index",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicProcessorInfo[Index].Group",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicProcessorInfo[Index].Index",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "QuicProcessorInfo[Index].NumaNode",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18187,22 +17178,22 @@
"CustomSettings": null
}
},
- "DatapathOpenUdpSocketFailed": {
+ "WindowsUserInitialized": {
"ModuleProperites": {},
- "TraceString": "[ udp] UDP send segmentation helper socket failed to open, 0x%x",
- "UniqueId": "DatapathOpenUdpSocketFailed",
+ "TraceString": "[ dll] Initialized (AvailMem = %llu bytes)",
+ "UniqueId": "WindowsUserInitialized",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
+ "UserSuppliedTrimmed": "QuicTotalMemory",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18214,22 +17205,13 @@
"CustomSettings": null
}
},
- "DatapathQueryUdpSendMsgFailed": {
+ "WindowsUserUninitialized": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for UDP_SEND_MSG_SIZE failed, 0x%x",
- "UniqueId": "DatapathQueryUdpSendMsgFailed",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[ dll] Uninitialized",
+ "UniqueId": "WindowsUserUninitialized",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18241,18 +17223,26 @@
"CustomSettings": null
}
},
- "DatapathQueryRecvMaxCoalescedSizeFailed": {
+ "CertWaitForCreationEvent": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for UDP_RECV_MAX_COALESCED_SIZE failed, 0x%x",
- "UniqueId": "DatapathQueryRecvMaxCoalescedSizeFailed",
+ "TraceString": "[test] WaitForSingleObject returned 0x%x, proceeding without caution... (GLE: 0x%x)",
+ "UniqueId": "CertWaitForCreationEvent",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
+ "UserSuppliedTrimmed": "WaitResult",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "x",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "GetLastError()",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -18268,30 +17258,48 @@
"CustomSettings": null
}
},
- "DatapathQueryProcessorAffinityFailed": {
+ "CertCleanTestCerts": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] WSAIoctl for SIO_QUERY_RSS_PROCESSOR_INFO failed, 0x%x",
- "UniqueId": "DatapathQueryProcessorAffinityFailed",
+ "TraceString": "[cert] %d test certificates found, and %d deleted",
+ "UniqueId": "CertCleanTestCerts",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Found",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "d",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WsaError",
+ "UserSuppliedTrimmed": "Deleted",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "d",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "CertOpenRsaKeySuccess": {
+ "ModuleProperites": {},
+ "TraceString": "[cert] Successfully opened RSA key",
+ "UniqueId": "CertOpenRsaKeySuccess",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18303,22 +17311,13 @@
"CustomSettings": null
}
},
- "DatapathMissingInfo": {
+ "CertCreateRsaKeySuccess": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] WSARecvMsg completion is missing IP_PKTINFO",
- "UniqueId": "DatapathMissingInfo",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[cert] Successfully created key",
+ "UniqueId": "CertCreateRsaKeySuccess",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18330,22 +17329,13 @@
"CustomSettings": null
}
},
- "DatapathRecvEmpty": {
+ "CertCreationEventAlreadyCreated": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Dropping datagram with empty payload.",
- "UniqueId": "DatapathRecvEmpty",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[test] CreateEvent opened existing event",
+ "UniqueId": "CertCreationEventAlreadyCreated",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18357,22 +17347,22 @@
"CustomSettings": null
}
},
- "DatapathUroPreallocExceeded": {
+ "StorageOpenKey": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Exceeded URO preallocation capacity.",
- "UniqueId": "DatapathUroPreallocExceeded",
+ "TraceString": "[ reg] Opening %s",
+ "UniqueId": "StorageOpenKey",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
+ "UserSuppliedTrimmed": "FullKeyName",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -18384,20 +17374,11 @@
"CustomSettings": null
}
},
- "DatapathShutDownReturn": {
+ "miTlsInitialize": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Shut down (return)",
- "UniqueId": "DatapathShutDownReturn",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[ tls] Initializing miTLS library",
+ "UniqueId": "miTlsInitialize",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
@@ -18411,20 +17392,11 @@
"CustomSettings": null
}
},
- "DatapathShutDownComplete": {
+ "miTlsUninitialize": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Shut down (complete)",
- "UniqueId": "DatapathShutDownComplete",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[ tls] Cleaning up miTLS library",
+ "UniqueId": "miTlsUninitialize",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
@@ -18438,33 +17410,33 @@
"CustomSettings": null
}
},
- "DatapathUnreachableWithError": {
+ "miTlsLogSecret": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Received unreachable error (0x%x) from %!ADDR!",
- "UniqueId": "DatapathUnreachableWithError",
+ "TraceString": "[ tls] %s[%u]: %s",
+ "UniqueId": "miTlsLogSecret",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
+ "UserSuppliedTrimmed": "Prefix",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ErrorCode",
+ "UserSuppliedTrimmed": "Length",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
+ "UserSuppliedTrimmed": "SecretStr",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "!ADDR!",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg4"
}
],
@@ -18481,32 +17453,40 @@
"CustomSettings": null
}
},
- "DatapathTooLarge": {
+ "miTlsFfiProcessFailed": {
"ModuleProperites": {},
- "TraceString": "[ udp][%p] Received larger than expected datagram from %!ADDR!",
- "UniqueId": "DatapathTooLarge",
+ "TraceString": "[conn][%p] FFI_mitls_quic_process failed, tls_error %hu, %s",
+ "UniqueId": "miTlsFfiProcessFailed",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SocketContext->Binding",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(*RemoteAddr), RemoteAddr)",
+ "UserSuppliedTrimmed": "Context.tls_error",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "!ADDR!",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Context.tls_error_desc",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnError",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18516,15 +17496,40 @@
"CustomSettings": null
}
},
- "WindowsUserLoaded": {
+ "miTlsFfiGetHelloSummaryFailed": {
"ModuleProperites": {},
- "TraceString": "[ dll] Loaded",
- "UniqueId": "WindowsUserLoaded",
- "splitArgs": [],
+ "TraceString": "[conn][%p] FFI_mitls_get_hello_summary failed, cookie_len: %zu, ticket_len: %zu",
+ "UniqueId": "miTlsFfiGetHelloSummaryFailed",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "CookieLen",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "zu",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TicketLen",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "zu",
+ "MacroVariableName": "arg4"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnError",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18534,15 +17539,24 @@
"CustomSettings": null
}
},
- "WindowsUserUnloaded": {
+ "miTlsCertValidationDisabled": {
"ModuleProperites": {},
- "TraceString": "[ dll] Unloaded",
- "UniqueId": "WindowsUserUnloaded",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Certificate validation disabled!",
+ "UniqueId": "miTlsCertValidationDisabled",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnWarning",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18552,40 +17566,40 @@
"CustomSettings": null
}
},
- "WindowsUserProcessorState": {
+ "miTlsCertSelected": {
"ModuleProperites": {},
- "TraceString": "[ dll] Processors:%u, Groups:%u, NUMA Nodes:%u",
- "UniqueId": "WindowsUserProcessorState",
+ "TraceString": "[conn][%p] Server certificate selected. SNI: %s; Algorithm: 0x%4.4x",
+ "UniqueId": "miTlsCertSelected",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ActiveProcessorCount",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ProcessorGroupCount",
+ "UserSuppliedTrimmed": "TlsContext->SNI",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "NumaNodeCount",
+ "UserSuppliedTrimmed": "*SelectedSignature",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "4.4x",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18594,49 +17608,25 @@
},
"CustomSettings": null
}
- },
- "ProcessorInfo": {
- "ModuleProperites": {},
- "TraceString": "[ dll] Proc[%u] Group[%hu] Index[%u] NUMA[%u]",
- "UniqueId": "ProcessorInfo",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Index",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicProcessorInfo[Index].Group",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicProcessorInfo[Index].Index",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
+ },
+ "miTlsUsing0Rtt": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] Using 0-RTT ticket.",
+ "UniqueId": "miTlsUsing0Rtt",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicProcessorInfo[Index].NumaNode",
- "SuggestedTelemetryName": "arg5"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg5"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18646,24 +17636,32 @@
"CustomSettings": null
}
},
- "WindowsUserInitialized": {
+ "miTlsProcess": {
"ModuleProperites": {},
- "TraceString": "[ dll] Initialized (AvailMem = %llu bytes)",
- "UniqueId": "WindowsUserInitialized",
+ "TraceString": "[conn][%p] Processing %u bytes",
+ "UniqueId": "miTlsProcess",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicTotalMemory",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*BufferLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18673,15 +17671,24 @@
"CustomSettings": null
}
},
- "WindowsUserUninitialized": {
+ "miTlsSend0RttTicket": {
"ModuleProperites": {},
- "TraceString": "[ dll] Uninitialized",
- "UniqueId": "WindowsUserUninitialized",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Sending 0-RTT ticket",
+ "UniqueId": "miTlsSend0RttTicket",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18691,24 +17698,32 @@
"CustomSettings": null
}
},
- "StorageOpenKey": {
+ "miTlsFfiProces": {
"ModuleProperites": {},
- "TraceString": "[ reg] Opening %s",
- "UniqueId": "StorageOpenKey",
+ "TraceString": "[conn][%p] FFI_mitls_quic_process processing %u input bytes",
+ "UniqueId": "miTlsFfiProces",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "FullKeyName",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint32_t)Context.input_len",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18718,40 +17733,40 @@
"CustomSettings": null
}
},
- "CertCapiVerifiedChain": {
+ "miTlsFfiProcessResult": {
"ModuleProperites": {},
- "TraceString": "CertVerifyChain: %S 0x%x, result=0x%x",
- "UniqueId": "CertCapiVerifiedChain",
+ "TraceString": "[conn][%p] FFI_mitls_quic_process read %u bytes and has %u bytes ready to send",
+ "UniqueId": "miTlsFfiProcessResult",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "ServerName",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "S",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "IgnoreFlags",
+ "UserSuppliedTrimmed": "(uint32_t)Context.consumed_bytes",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "(uint32_t)Context.output_len",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18761,24 +17776,24 @@
"CustomSettings": null
}
},
- "CertCapiParsedChain": {
+ "miTlsHandshakeComplete": {
"ModuleProperites": {},
- "TraceString": "[cert] Successfully parsed chain of %u certificate(s)",
- "UniqueId": "CertCapiParsedChain",
+ "TraceString": "[conn][%p] Handshake complete",
+ "UniqueId": "miTlsHandshakeComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CertNumber",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18788,24 +17803,24 @@
"CustomSettings": null
}
},
- "CertCapiFormattedChain": {
+ "miTlsEarlyDataRejected": {
"ModuleProperites": {},
- "TraceString": "[cert] Successfully formatted chain of %u certificate(s)",
- "UniqueId": "CertCapiFormattedChain",
+ "TraceString": "[conn][%p] Early data rejected",
+ "UniqueId": "miTlsEarlyDataRejected",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CertNumber",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "u",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18815,24 +17830,24 @@
"CustomSettings": null
}
},
- "CertCapiSign": {
+ "miTlsEarlyDataAccepted": {
"ModuleProperites": {},
- "TraceString": "[cert] QuicCertSign alg=0x%4.4x",
- "UniqueId": "CertCapiSign",
+ "TraceString": "[conn][%p] Early data accepted",
+ "UniqueId": "miTlsEarlyDataAccepted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SignatureAlgorithm",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "4.4x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18842,24 +17857,24 @@
"CustomSettings": null
}
},
- "CertCapiVerify": {
+ "miTlsEarlyDataNotAttempted": {
"ModuleProperites": {},
- "TraceString": "[cert] QuicCertVerify alg=0x%4.4x",
- "UniqueId": "CertCapiVerify",
+ "TraceString": "[conn][%p] Early data not attempted",
+ "UniqueId": "miTlsEarlyDataNotAttempted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SignatureAlgorithm",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "4.4x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18869,32 +17884,59 @@
"CustomSettings": null
}
},
- "CertWaitForCreationEvent": {
+ "miTlsEarlyDataAttempted": {
"ModuleProperites": {},
- "TraceString": "[test] WaitForSingleObject returned 0x%x, proceeding without caution... (GLE: 0x%x)",
- "UniqueId": "CertWaitForCreationEvent",
+ "TraceString": "[conn][%p] Early data attempted",
+ "UniqueId": "miTlsEarlyDataAttempted",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "WaitResult",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "miTlsKeySchedule": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] Key schedule = %hu",
+ "UniqueId": "miTlsKeySchedule",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "GetLastError()",
+ "UserSuppliedTrimmed": "TlsContext->TlsKeySchedule",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18904,32 +17946,24 @@
"CustomSettings": null
}
},
- "CertCleanTestCerts": {
+ "miTls0RttReadKeyExported": {
"ModuleProperites": {},
- "TraceString": "[cert] %d test certificates found, and %d deleted",
- "UniqueId": "CertCleanTestCerts",
+ "TraceString": "[conn][%p] 0-RTT read key exported",
+ "UniqueId": "miTls0RttReadKeyExported",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Found",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Deleted",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "d",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18939,15 +17973,24 @@
"CustomSettings": null
}
},
- "CertOpenRsaKeySuccess": {
+ "miTlsHandshakeReadKeyExported": {
"ModuleProperites": {},
- "TraceString": "[cert] Successfully opened RSA key",
- "UniqueId": "CertOpenRsaKeySuccess",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Handshake read key exported",
+ "UniqueId": "miTlsHandshakeReadKeyExported",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18957,15 +18000,24 @@
"CustomSettings": null
}
},
- "CertCreateRsaKeySuccess": {
+ "miTls1RttReadKeyExported": {
"ModuleProperites": {},
- "TraceString": "[cert] Successfully created key",
- "UniqueId": "CertCreateRsaKeySuccess",
- "splitArgs": [],
+ "TraceString": "[conn][%p] 1-RTT read key exported",
+ "UniqueId": "miTls1RttReadKeyExported",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18975,15 +18027,24 @@
"CustomSettings": null
}
},
- "CertCreationEventAlreadyCreated": {
+ "miTls0RttWriteKeyExported": {
"ModuleProperites": {},
- "TraceString": "[test] CreateEvent opened existing event",
- "UniqueId": "CertCreationEventAlreadyCreated",
- "splitArgs": [],
+ "TraceString": "[conn][%p] 0-RTT write key exported",
+ "UniqueId": "miTls0RttWriteKeyExported",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -18993,15 +18054,24 @@
"CustomSettings": null
}
},
- "SchannelInitialized": {
+ "miTlsHandshakeWriteKeyExported": {
"ModuleProperites": {},
- "TraceString": "[ tls] Library initialized",
- "UniqueId": "SchannelInitialized",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Handshake write key exported",
+ "UniqueId": "miTlsHandshakeWriteKeyExported",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19011,15 +18081,24 @@
"CustomSettings": null
}
},
- "SchannelUninitialized": {
+ "miTls1RttWriteKeyExported": {
"ModuleProperites": {},
- "TraceString": "[ tls] Library uninitialized",
- "UniqueId": "SchannelUninitialized",
- "splitArgs": [],
+ "TraceString": "[conn][%p] 1-RTT write key exported",
+ "UniqueId": "miTls1RttWriteKeyExported",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19029,15 +18108,32 @@
"CustomSettings": null
}
},
- "SchannelAch": {
+ "miTlsHandshakeWriteOffsetSet": {
"ModuleProperites": {},
- "TraceString": "[ tls] Calling ACH to create server security config",
- "UniqueId": "SchannelAch",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Handshake write offset = %u",
+ "UniqueId": "miTlsHandshakeWriteOffsetSet",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "State->BufferOffsetHandshake",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19047,24 +18143,32 @@
"CustomSettings": null
}
},
- "SchannelAchCompleteInline": {
+ "miTls1RttWriteOffsetSet": {
"ModuleProperites": {},
- "TraceString": "[ tls] Invoking security config completion callback, 0x%x",
- "UniqueId": "SchannelAchCompleteInline",
+ "TraceString": "[conn][%p] 1-RTT write offset = %u",
+ "UniqueId": "miTls1RttWriteOffsetSet",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SecStatus",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "State->BufferOffset1Rtt",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19074,40 +18178,59 @@
"CustomSettings": null
}
},
- "SchannelLogSecret": {
+ "miTlsFfiProcesComplete": {
"ModuleProperites": {},
- "TraceString": "[ tls] %s[%u]: %s",
- "UniqueId": "SchannelLogSecret",
+ "TraceString": "[conn][%p] Consumed %u bytes",
+ "UniqueId": "miTlsFfiProcesComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Prefix",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Length",
+ "UserSuppliedTrimmed": "BufferOffset",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "miTlsOnCertSelect": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] OnCertSelect",
+ "UniqueId": "miTlsOnCertSelect",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "SecretStr",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19117,10 +18240,10 @@
"CustomSettings": null
}
},
- "SchannelContextReset": {
+ "miTlsOnNegotiate": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Resetting TLS state",
- "UniqueId": "SchannelContextReset",
+ "TraceString": "[conn][%p] OnNegotiate",
+ "UniqueId": "miTlsOnNegotiate",
"splitArgs": [
{
"VariableInfo": {
@@ -19132,7 +18255,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19144,10 +18267,10 @@
"CustomSettings": null
}
},
- "SchannelHandshakeComplete": {
+ "miTlsProcessServerAlpn": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake complete (resume=%hu)",
- "UniqueId": "SchannelHandshakeComplete",
+ "TraceString": "[conn][%p] Processing server ALPN (Length=%u)",
+ "UniqueId": "miTlsProcessServerAlpn",
"splitArgs": [
{
"VariableInfo": {
@@ -19159,15 +18282,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "State->SessionResumed",
+ "UserSuppliedTrimmed": "(uint32_t)ExtensionDataLength",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19179,10 +18302,10 @@
"CustomSettings": null
}
},
- "SchannelConsumedBytes": {
+ "miTlsOnCertFormat": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Consumed %u bytes",
- "UniqueId": "SchannelConsumedBytes",
+ "TraceString": "[conn][%p] OnCertFormat",
+ "UniqueId": "miTlsOnCertFormat",
"splitArgs": [
{
"VariableInfo": {
@@ -19191,18 +18314,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*InBufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19214,10 +18329,10 @@
"CustomSettings": null
}
},
- "SchannelReadHandshakeStart": {
+ "miTlsOnCertSign": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Reading Handshake data starts now",
- "UniqueId": "SchannelReadHandshakeStart",
+ "TraceString": "[conn][%p] OnCertSign",
+ "UniqueId": "miTlsOnCertSign",
"splitArgs": [
{
"VariableInfo": {
@@ -19229,7 +18344,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19241,10 +18356,10 @@
"CustomSettings": null
}
},
- "SchannelRead1RttStart": {
+ "miTlsOnCertVerify": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Reading 1-RTT data starts now",
- "UniqueId": "SchannelRead1RttStart",
+ "TraceString": "[conn][%p] OnCertVerify",
+ "UniqueId": "miTlsOnCertVerify",
"splitArgs": [
{
"VariableInfo": {
@@ -19256,7 +18371,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19268,10 +18383,10 @@
"CustomSettings": null
}
},
- "SchannelWriteHandshakeStart": {
+ "miTlsRecvNewSessionTicket": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Writing Handshake data starts at %u",
- "UniqueId": "SchannelWriteHandshakeStart",
+ "TraceString": "[conn][%p] Received new ticket. ticket_len:%u session_len:%u for %s",
+ "UniqueId": "miTlsRecvNewSessionTicket",
"splitArgs": [
{
"VariableInfo": {
@@ -19283,15 +18398,31 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "State->BufferOffsetHandshake",
+ "UserSuppliedTrimmed": "(uint32_t)Ticket->ticket_len",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "(uint32_t)Ticket->session_len",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "ServerNameIndication",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19303,32 +18434,32 @@
"CustomSettings": null
}
},
- "SchannelWrite1RttStart": {
+ "TlsMessage": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Writing 1-RTT data starts at %u",
- "UniqueId": "SchannelWrite1RttStart",
+ "TraceString": "[ tls][%p] %s",
+ "UniqueId": "TlsMessage",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "TlsGetValue(miTlsCurrentConnectionIndex)",
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "State->BufferOffset1Rtt",
+ "UserSuppliedTrimmed": "Msg",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19338,32 +18469,32 @@
"CustomSettings": null
}
},
- "SchannelProducedData": {
+ "TlsError": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Produced %u bytes",
- "UniqueId": "SchannelProducedData",
+ "TraceString": "[ tls][%p] ERROR, %s.",
+ "UniqueId": "TlsError",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "OutputTokenBuffer->cbBuffer",
+ "UserSuppliedTrimmed": "\"SNI Too Long\"",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19373,10 +18504,10 @@
"CustomSettings": null
}
},
- "SchannelMissingData": {
+ "OpenSslAlert": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS message missing %u bytes of data",
- "UniqueId": "SchannelMissingData",
+ "TraceString": "[conn][%p] Send alert = %u (Level = %u)",
+ "UniqueId": "OpenSslAlert",
"splitArgs": [
{
"VariableInfo": {
@@ -19388,15 +18519,23 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "MissingBuffer->cbBuffer",
+ "UserSuppliedTrimmed": "Alert",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Level",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnError",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19408,10 +18547,10 @@
"CustomSettings": null
}
},
- "SchannelContextCreated": {
+ "OpenSslHandshakeErrorStr": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] TLS context Created",
- "UniqueId": "SchannelContextCreated",
+ "TraceString": "[conn][%p] TLS handshake error: %s",
+ "UniqueId": "OpenSslHandshakeErrorStr",
"splitArgs": [
{
"VariableInfo": {
@@ -19420,10 +18559,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "ERR_error_string(ERR_get_error(), NULL)",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnError",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19435,10 +18582,10 @@
"CustomSettings": null
}
},
- "SchannelContextCleaningUp": {
+ "OpenSslHandshakeError": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Cleaning up",
- "UniqueId": "SchannelContextCleaningUp",
+ "TraceString": "[conn][%p] TLS handshake error: %d",
+ "UniqueId": "OpenSslHandshakeError",
"splitArgs": [
{
"VariableInfo": {
@@ -19447,10 +18594,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Err",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "d",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnError",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19462,10 +18617,10 @@
"CustomSettings": null
}
},
- "SchannelKeyReady": {
+ "OpenSslAlpnNegotiationFailure": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Key Ready Type, %u [%hu to %hu]",
- "UniqueId": "SchannelKeyReady",
+ "TraceString": "[conn][%p] Failed to negotiate ALPN",
+ "UniqueId": "OpenSslAlpnNegotiationFailure",
"splitArgs": [
{
"VariableInfo": {
@@ -19474,34 +18629,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TrafficSecret->TrafficSecretType",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TrafficSecret->MsgSequenceStart",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TrafficSecret->MsgSequenceEnd",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "hu",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnError",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19513,10 +18644,10 @@
"CustomSettings": null
}
},
- "SchannelProcessingData_IgnoringTicket": {
+ "OpenSslInvalidAlpnLength": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring %u ticket bytes",
- "UniqueId": "SchannelProcessingData_IgnoringTicket",
+ "TraceString": "[conn][%p] Invalid negotiated ALPN length",
+ "UniqueId": "OpenSslInvalidAlpnLength",
"splitArgs": [
{
"VariableInfo": {
@@ -19525,18 +18656,10 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnError",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19548,15 +18671,24 @@
"CustomSettings": null
}
},
- "miTlsInitialize": {
+ "OpenSslNoMatchingAlpn": {
"ModuleProperites": {},
- "TraceString": "[ tls] Initializing miTLS library",
- "UniqueId": "miTlsInitialize",
- "splitArgs": [],
+ "TraceString": "[conn][%p] Failed to find a matching ALPN",
+ "UniqueId": "OpenSslNoMatchingAlpn",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnError",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19566,15 +18698,24 @@
"CustomSettings": null
}
},
- "miTlsUninitialize": {
+ "OpenSslMissingTransportParameters": {
"ModuleProperites": {},
- "TraceString": "[ tls] Cleaning up miTLS library",
- "UniqueId": "miTlsUninitialize",
- "splitArgs": [],
+ "TraceString": "[conn][%p] No transport parameters received",
+ "UniqueId": "OpenSslMissingTransportParameters",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ }
+ ],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnError",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19584,40 +18725,32 @@
"CustomSettings": null
}
},
- "miTlsLogSecret": {
+ "OpenSslHandshakeDataStart": {
"ModuleProperites": {},
- "TraceString": "[ tls] %s[%u]: %s",
- "UniqueId": "miTlsLogSecret",
+ "TraceString": "[conn][%p] Writing Handshake data starts at %u",
+ "UniqueId": "OpenSslHandshakeDataStart",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Prefix",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "s",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Length",
+ "UserSuppliedTrimmed": "TlsState->BufferOffsetHandshake",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "SecretStr",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19627,10 +18760,10 @@
"CustomSettings": null
}
},
- "miTlsFfiProcessFailed": {
+ "OpenSsl1RttDataStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] FFI_mitls_quic_process failed, tls_error %hu, %s",
- "UniqueId": "miTlsFfiProcessFailed",
+ "TraceString": "[conn][%p] Writing 1-RTT data starts at %u",
+ "UniqueId": "OpenSsl1RttDataStart",
"splitArgs": [
{
"VariableInfo": {
@@ -19642,23 +18775,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Context.tls_error",
+ "UserSuppliedTrimmed": "TlsState->BufferOffset1Rtt",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "hu",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Context.tls_error_desc",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19670,10 +18795,10 @@
"CustomSettings": null
}
},
- "miTlsFfiGetHelloSummaryFailed": {
+ "OpenSslContextReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] FFI_mitls_get_hello_summary failed, cookie_len: %zu, ticket_len: %zu",
- "UniqueId": "miTlsFfiGetHelloSummaryFailed",
+ "TraceString": "[conn][%p] Resetting TLS state",
+ "UniqueId": "OpenSslContextReset",
"splitArgs": [
{
"VariableInfo": {
@@ -19682,26 +18807,37 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ }
+ ],
+ "macro": {
+ "MacroName": "QuicTraceLogConnInfo",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
},
+ "CustomSettings": null
+ }
+ },
+ "OpenSslHandshakeComplete": {
+ "ModuleProperites": {},
+ "TraceString": "[conn][%p] Handshake complete",
+ "UniqueId": "OpenSslHandshakeComplete",
+ "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "CookieLen",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "zu",
- "MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TicketLen",
- "SuggestedTelemetryName": "arg4"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "zu",
- "MacroVariableName": "arg4"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnError",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19713,10 +18849,10 @@
"CustomSettings": null
}
},
- "miTlsCertValidationDisabled": {
+ "OpenSslNewEncryptionSecrets": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Certificate validation disabled!",
- "UniqueId": "miTlsCertValidationDisabled",
+ "TraceString": "[conn][%p] New encryption secrets (Level = %u)",
+ "UniqueId": "OpenSslNewEncryptionSecrets",
"splitArgs": [
{
"VariableInfo": {
@@ -19725,10 +18861,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Level",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19740,10 +18884,10 @@
"CustomSettings": null
}
},
- "miTlsCertSelected": {
+ "OpenSslAddHandshakeData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Server certificate selected. SNI: %s; Algorithm: 0x%4.4x",
- "UniqueId": "miTlsCertSelected",
+ "TraceString": "[conn][%p] Sending %llu handshake bytes (Level = %u)",
+ "UniqueId": "OpenSslAddHandshakeData",
"splitArgs": [
{
"VariableInfo": {
@@ -19755,23 +18899,23 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->SNI",
+ "UserSuppliedTrimmed": "Length",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "llu",
"MacroVariableName": "arg3"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "*SelectedSignature",
+ "UserSuppliedTrimmed": "Level",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "4.4x",
+ "DefinationEncoding": "u",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnInfo",
+ "MacroName": "QuicTraceLogConnVerbose",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -19783,10 +18927,10 @@
"CustomSettings": null
}
},
- "miTlsUsing0Rtt": {
+ "OpenSslContextCreated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Using 0-RTT ticket.",
- "UniqueId": "miTlsUsing0Rtt",
+ "TraceString": "[conn][%p] TLS context Created",
+ "UniqueId": "OpenSslContextCreated",
"splitArgs": [
{
"VariableInfo": {
@@ -19810,10 +18954,10 @@
"CustomSettings": null
}
},
- "miTlsProcess": {
+ "OpenSslContextCleaningUp": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Processing %u bytes",
- "UniqueId": "miTlsProcess",
+ "TraceString": "[conn][%p] Cleaning up",
+ "UniqueId": "OpenSslContextCleaningUp",
"splitArgs": [
{
"VariableInfo": {
@@ -19822,14 +18966,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -19845,10 +18981,10 @@
"CustomSettings": null
}
},
- "miTlsSend0RttTicket": {
+ "OpenSsslIgnoringTicket": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Sending 0-RTT ticket",
- "UniqueId": "miTlsSend0RttTicket",
+ "TraceString": "[conn][%p] Ignoring %u ticket bytes",
+ "UniqueId": "OpenSsslIgnoringTicket",
"splitArgs": [
{
"VariableInfo": {
@@ -19857,6 +18993,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*BufferLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -19872,10 +19016,10 @@
"CustomSettings": null
}
},
- "miTlsFfiProces": {
+ "OpenSslProcessData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] FFI_mitls_quic_process processing %u input bytes",
- "UniqueId": "miTlsFfiProces",
+ "TraceString": "[conn][%p] Processing %u received bytes",
+ "UniqueId": "OpenSslProcessData",
"splitArgs": [
{
"VariableInfo": {
@@ -19887,7 +19031,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Context.input_len",
+ "UserSuppliedTrimmed": "*BufferLength",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -19907,22 +19051,22 @@
"CustomSettings": null
}
},
- "miTlsFfiProcessResult": {
+ "TlsErrorStatus": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] FFI_mitls_quic_process read %u bytes and has %u bytes ready to send",
- "UniqueId": "miTlsFfiProcessResult",
+ "TraceString": "[ tls][%p] ERROR, %u, %s.",
+ "UniqueId": "TlsErrorStatus",
"splitArgs": [
{
"VariableInfo": {
"UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Context.consumed_bytes",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -19930,17 +19074,17 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Context.output_len",
+ "UserSuppliedTrimmed": "\"QuicTlsDerivePacketProtectionKey failed\"",
"SuggestedTelemetryName": "arg4"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceEvent",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19950,24 +19094,69 @@
"CustomSettings": null
}
},
- "miTlsHandshakeComplete": {
+ "SchannelInitialized": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake complete",
- "UniqueId": "miTlsHandshakeComplete",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
+ "TraceString": "[ tls] Library initialized",
+ "UniqueId": "SchannelInitialized",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "SchannelUninitialized": {
+ "ModuleProperites": {},
+ "TraceString": "[ tls] Library uninitialized",
+ "UniqueId": "SchannelUninitialized",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "SchannelAchAsync": {
+ "ModuleProperites": {},
+ "TraceString": "[ tls] Calling SspiAcquireCredentialsHandleAsyncW",
+ "UniqueId": "SchannelAchAsync",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "SchannelAchWorkerStart": {
+ "ModuleProperites": {},
+ "TraceString": "[ tls] Starting ACH worker",
+ "UniqueId": "SchannelAchWorkerStart",
+ "splitArgs": [],
+ "macro": {
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -19977,24 +19166,15 @@
"CustomSettings": null
}
},
- "miTlsEarlyDataRejected": {
+ "SchannelAch": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Early data rejected",
- "UniqueId": "miTlsEarlyDataRejected",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
+ "TraceString": "[ tls] Calling AcquireCredentialsHandleW",
+ "UniqueId": "SchannelAch",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20004,24 +19184,24 @@
"CustomSettings": null
}
},
- "miTlsEarlyDataAccepted": {
+ "SchannelAchCompleteInline": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Early data accepted",
- "UniqueId": "miTlsEarlyDataAccepted",
+ "TraceString": "[ tls] Invoking security config completion callback inline, 0x%x",
+ "UniqueId": "SchannelAchCompleteInline",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Status",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "x",
+ "MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20031,24 +19211,40 @@
"CustomSettings": null
}
},
- "miTlsEarlyDataNotAttempted": {
+ "SchannelLogSecret": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Early data not attempted",
- "UniqueId": "miTlsEarlyDataNotAttempted",
+ "TraceString": "[ tls] %s[%u]: %s",
+ "UniqueId": "SchannelLogSecret",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
+ "UserSuppliedTrimmed": "Prefix",
+ "SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Length",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "SecretStr",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20058,10 +19254,10 @@
"CustomSettings": null
}
},
- "miTlsEarlyDataAttempted": {
+ "SchannelContextReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Early data attempted",
- "UniqueId": "miTlsEarlyDataAttempted",
+ "TraceString": "[conn][%p] Resetting TLS state",
+ "UniqueId": "SchannelContextReset",
"splitArgs": [
{
"VariableInfo": {
@@ -20073,7 +19269,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20085,10 +19281,10 @@
"CustomSettings": null
}
},
- "miTlsKeySchedule": {
+ "SchannelHandshakeComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Key schedule = %hu",
- "UniqueId": "miTlsKeySchedule",
+ "TraceString": "[conn][%p] Handshake complete (resume=%hu)",
+ "UniqueId": "SchannelHandshakeComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -20100,7 +19296,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->TlsKeySchedule",
+ "UserSuppliedTrimmed": "State->SessionResumed",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "hu",
@@ -20108,7 +19304,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20120,10 +19316,10 @@
"CustomSettings": null
}
},
- "miTls0RttReadKeyExported": {
+ "SchannelConsumedBytes": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 0-RTT read key exported",
- "UniqueId": "miTls0RttReadKeyExported",
+ "TraceString": "[conn][%p] Consumed %u bytes",
+ "UniqueId": "SchannelConsumedBytes",
"splitArgs": [
{
"VariableInfo": {
@@ -20132,10 +19328,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*InBufferLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20147,10 +19351,10 @@
"CustomSettings": null
}
},
- "miTlsHandshakeReadKeyExported": {
+ "SchannelReadHandshakeStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake read key exported",
- "UniqueId": "miTlsHandshakeReadKeyExported",
+ "TraceString": "[conn][%p] Reading Handshake data starts now",
+ "UniqueId": "SchannelReadHandshakeStart",
"splitArgs": [
{
"VariableInfo": {
@@ -20162,7 +19366,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20174,10 +19378,10 @@
"CustomSettings": null
}
},
- "miTls1RttReadKeyExported": {
+ "SchannelRead1RttStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 1-RTT read key exported",
- "UniqueId": "miTls1RttReadKeyExported",
+ "TraceString": "[conn][%p] Reading 1-RTT data starts now",
+ "UniqueId": "SchannelRead1RttStart",
"splitArgs": [
{
"VariableInfo": {
@@ -20189,7 +19393,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20201,10 +19405,10 @@
"CustomSettings": null
}
},
- "miTls0RttWriteKeyExported": {
+ "SchannelWriteHandshakeStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 0-RTT write key exported",
- "UniqueId": "miTls0RttWriteKeyExported",
+ "TraceString": "[conn][%p] Writing Handshake data starts at %u",
+ "UniqueId": "SchannelWriteHandshakeStart",
"splitArgs": [
{
"VariableInfo": {
@@ -20213,10 +19417,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "State->BufferOffsetHandshake",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20228,10 +19440,10 @@
"CustomSettings": null
}
},
- "miTlsHandshakeWriteKeyExported": {
+ "SchannelWrite1RttStart": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake write key exported",
- "UniqueId": "miTlsHandshakeWriteKeyExported",
+ "TraceString": "[conn][%p] Writing 1-RTT data starts at %u",
+ "UniqueId": "SchannelWrite1RttStart",
"splitArgs": [
{
"VariableInfo": {
@@ -20240,10 +19452,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "State->BufferOffset1Rtt",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20255,10 +19475,10 @@
"CustomSettings": null
}
},
- "miTls1RttWriteKeyExported": {
+ "SchannelProducedData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 1-RTT write key exported",
- "UniqueId": "miTls1RttWriteKeyExported",
+ "TraceString": "[conn][%p] Produced %u bytes",
+ "UniqueId": "SchannelProducedData",
"splitArgs": [
{
"VariableInfo": {
@@ -20267,10 +19487,18 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "OutputTokenBuffer->cbBuffer",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20282,10 +19510,10 @@
"CustomSettings": null
}
},
- "miTlsHandshakeWriteOffsetSet": {
+ "SchannelMissingData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Handshake write offset = %u",
- "UniqueId": "miTlsHandshakeWriteOffsetSet",
+ "TraceString": "[conn][%p] TLS message missing %u bytes of data",
+ "UniqueId": "SchannelMissingData",
"splitArgs": [
{
"VariableInfo": {
@@ -20297,7 +19525,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "State->BufferOffsetHandshake",
+ "UserSuppliedTrimmed": "MissingBuffer->cbBuffer",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -20305,7 +19533,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20317,10 +19545,10 @@
"CustomSettings": null
}
},
- "miTls1RttWriteOffsetSet": {
+ "SchannelContextCreated": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] 1-RTT write offset = %u",
- "UniqueId": "miTls1RttWriteOffsetSet",
+ "TraceString": "[conn][%p] TLS context Created",
+ "UniqueId": "SchannelContextCreated",
"splitArgs": [
{
"VariableInfo": {
@@ -20329,14 +19557,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "State->BufferOffset1Rtt",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -20352,10 +19572,10 @@
"CustomSettings": null
}
},
- "miTlsFfiProcesComplete": {
+ "SchannelContextCleaningUp": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Consumed %u bytes",
- "UniqueId": "miTlsFfiProcesComplete",
+ "TraceString": "[conn][%p] Cleaning up",
+ "UniqueId": "SchannelContextCleaningUp",
"splitArgs": [
{
"VariableInfo": {
@@ -20364,14 +19584,6 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "BufferOffset",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -20387,10 +19599,10 @@
"CustomSettings": null
}
},
- "miTlsOnCertSelect": {
+ "SchannelKeyReady": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OnCertSelect",
- "UniqueId": "miTlsOnCertSelect",
+ "TraceString": "[conn][%p] Key Ready Type, %u [%hu to %hu]",
+ "UniqueId": "SchannelKeyReady",
"splitArgs": [
{
"VariableInfo": {
@@ -20399,6 +19611,30 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TrafficSecret->TrafficSecretType",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TrafficSecret->MsgSequenceStart",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg4"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TrafficSecret->MsgSequenceEnd",
+ "SuggestedTelemetryName": "arg5"
+ },
+ "DefinationEncoding": "hu",
+ "MacroVariableName": "arg5"
}
],
"macro": {
@@ -20414,10 +19650,10 @@
"CustomSettings": null
}
},
- "miTlsOnNegotiate": {
+ "SchannelIgnoringTicket": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OnNegotiate",
- "UniqueId": "miTlsOnNegotiate",
+ "TraceString": "[conn][%p] Ignoring %u ticket bytes",
+ "UniqueId": "SchannelIgnoringTicket",
"splitArgs": [
{
"VariableInfo": {
@@ -20426,6 +19662,14 @@
},
"DefinationEncoding": "p",
"MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*BufferLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -20441,10 +19685,10 @@
"CustomSettings": null
}
},
- "miTlsProcessServerAlpn": {
+ "SchannelProcessingData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Processing server ALPN (Length=%u)",
- "UniqueId": "miTlsProcessServerAlpn",
+ "TraceString": "[conn][%p] Processing %u received bytes",
+ "UniqueId": "SchannelProcessingData",
"splitArgs": [
{
"VariableInfo": {
@@ -20456,7 +19700,7 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)ExtensionDataLength",
+ "UserSuppliedTrimmed": "*BufferLength",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
@@ -20476,10 +19720,10 @@
"CustomSettings": null
}
},
- "miTlsOnCertFormat": {
+ "StubTlsCertValidationDisabled": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OnCertFormat",
- "UniqueId": "miTlsOnCertFormat",
+ "TraceString": "[conn][%p] Certificate validation disabled!",
+ "UniqueId": "StubTlsCertValidationDisabled",
"splitArgs": [
{
"VariableInfo": {
@@ -20491,7 +19735,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnWarning",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20503,10 +19747,10 @@
"CustomSettings": null
}
},
- "miTlsOnCertSign": {
+ "StubTlsContextReset": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OnCertSign",
- "UniqueId": "miTlsOnCertSign",
+ "TraceString": "[conn][%p] Resetting TLS state",
+ "UniqueId": "StubTlsContextReset",
"splitArgs": [
{
"VariableInfo": {
@@ -20518,7 +19762,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20530,10 +19774,10 @@
"CustomSettings": null
}
},
- "miTlsOnCertVerify": {
+ "StubTlsHandshakeComplete": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] OnCertVerify",
- "UniqueId": "miTlsOnCertVerify",
+ "TraceString": "[conn][%p] Handshake complete",
+ "UniqueId": "StubTlsHandshakeComplete",
"splitArgs": [
{
"VariableInfo": {
@@ -20545,7 +19789,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20557,10 +19801,10 @@
"CustomSettings": null
}
},
- "miTlsRecvNewSessionTicket": {
+ "StubTlsConsumedData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Received new ticket. ticket_len:%u session_len:%u for %s",
- "UniqueId": "miTlsRecvNewSessionTicket",
+ "TraceString": "[conn][%p] Consumed %u bytes",
+ "UniqueId": "StubTlsConsumedData",
"splitArgs": [
{
"VariableInfo": {
@@ -20572,31 +19816,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Ticket->ticket_len",
+ "UserSuppliedTrimmed": "*BufferLength",
"SuggestedTelemetryName": "arg3"
},
"DefinationEncoding": "u",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "(uint32_t)Ticket->session_len",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg4"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "ServerNameIndication",
- "SuggestedTelemetryName": "arg5"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg5"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20608,10 +19836,10 @@
"CustomSettings": null
}
},
- "miTlsReadTicket": {
+ "StubTlsProducedData": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ticket (%u bytes) read.",
- "UniqueId": "miTlsReadTicket",
+ "TraceString": "[conn][%p] Produced %hu bytes",
+ "UniqueId": "StubTlsProducedData",
"splitArgs": [
{
"VariableInfo": {
@@ -20623,15 +19851,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "TicketBufferLength",
+ "UserSuppliedTrimmed": "(State->BufferLength - PrevBufferLength)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
+ "MacroName": "QuicTraceLogConnInfo",
"EncodedPrefix": "[conn][%p] ",
"EncodedArgNumber": 2,
"MacroConfiguration": {
@@ -20643,32 +19871,24 @@
"CustomSettings": null
}
},
- "TlsMessage": {
+ "StubTlsContextCreated": {
"ModuleProperites": {},
- "TraceString": "[ tls][%p] %s",
- "UniqueId": "TlsMessage",
+ "TraceString": "[conn][%p] TLS context Created",
+ "UniqueId": "StubTlsContextCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "NULL",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
"DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "// TODO - Save connection in thread-local storage and retrieve it?\r\n Msg",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg3"
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceEvent",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20678,32 +19898,24 @@
"CustomSettings": null
}
},
- "CertOpenSslGetProcessAddressFailure": {
+ "StubTlsUsing0Rtt": {
"ModuleProperites": {},
- "TraceString": "[cert] GetProcAddress failed for %s, 0x%x",
- "UniqueId": "CertOpenSslGetProcessAddressFailure",
+ "TraceString": "[conn][%p] Using 0-RTT ticket.",
+ "UniqueId": "StubTlsUsing0Rtt",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "FuncName",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "s",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Error",
- "SuggestedTelemetryName": "arg3"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg3"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20713,24 +19925,24 @@
"CustomSettings": null
}
},
- "DatapathOpenTcpSocketFailedAsync": {
+ "StubTlsContextCleaningUp": {
"ModuleProperites": {},
- "TraceString": "[ udp] RSS helper socket failed to open (async), 0x%x",
- "UniqueId": "DatapathOpenTcpSocketFailedAsync",
+ "TraceString": "[conn][%p] Cleaning up",
+ "UniqueId": "StubTlsContextCleaningUp",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20740,51 +19952,40 @@
"CustomSettings": null
}
},
- "DatapathQueryRssScalabilityInfoFailed": {
+ "StubTlsRecvNewSessionTicket": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed, 0x%x",
- "UniqueId": "DatapathQueryRssScalabilityInfoFailed",
+ "TraceString": "[conn][%p] Received new ticket. ticket_len:%u for %s",
+ "UniqueId": "StubTlsRecvNewSessionTicket",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "stubs",
- "windows_kernel": "empty",
- "windows": "empty"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
},
- "CustomSettings": null
- }
- },
- "DatapathQueryRssScalabilityInfoFailedAsync": {
- "ModuleProperites": {},
- "TraceString": "[ udp] Query for SIO_QUERY_RSS_SCALABILITY_INFO failed (async), 0x%x",
- "UniqueId": "DatapathQueryRssScalabilityInfoFailedAsync",
- "splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "ServerMessageLength",
+ "SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TlsContext->SNI",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20794,24 +19995,32 @@
"CustomSettings": null
}
},
- "DatapathOpenUdpSocketFailedAsync": {
+ "StubTlsProcessData": {
"ModuleProperites": {},
- "TraceString": "[ udp] UDP send segmentation helper socket failed to open (async), 0x%x",
- "UniqueId": "DatapathOpenUdpSocketFailedAsync",
+ "TraceString": "[conn][%p] Processing %u received bytes",
+ "UniqueId": "StubTlsProcessData",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
- "SuggestedTelemetryName": "arg2"
+ "UserSuppliedTrimmed": "TlsContext->Connection",
+ "SuggestedTelemetryName": "arg1"
},
- "DefinationEncoding": "x",
- "MacroVariableName": "arg2"
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg1"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "*BufferLength",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
+ "MacroName": "QuicTraceLogConnVerbose",
+ "EncodedPrefix": "[conn][%p] ",
+ "EncodedArgNumber": 2,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -20821,18 +20030,26 @@
"CustomSettings": null
}
},
- "DatapathQueryUdpSendMsgFailedAsync": {
+ "TestControlClientCanceledRequest": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for UDP_SEND_MSG_SIZE failed (async), 0x%x",
- "UniqueId": "DatapathQueryUdpSendMsgFailedAsync",
+ "TraceString": "[test] Client %p canceled request %p",
+ "UniqueId": "TestControlClientCanceledRequest",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Client",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Request",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "p",
+ "MacroVariableName": "arg3"
}
],
"macro": {
@@ -20848,22 +20065,22 @@
"CustomSettings": null
}
},
- "DatapathQueryRecvMaxCoalescedSizeFailedAsync": {
+ "TestControlClientCreated": {
"ModuleProperites": {},
- "TraceString": "[ udp] Query for UDP_RECV_MAX_COALESCED_SIZE failed (async), 0x%x",
- "UniqueId": "DatapathQueryRecvMaxCoalescedSizeFailedAsync",
+ "TraceString": "[test] Client %p created",
+ "UniqueId": "TestControlClientCreated",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Client",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "p",
"MacroVariableName": "arg2"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -20875,14 +20092,14 @@
"CustomSettings": null
}
},
- "DatapathDropEmptyMdl": {
+ "TestControlClientCleaningUp": {
"ModuleProperites": {},
- "TraceString": "[%p] Dropping datagram with empty mdl.",
- "UniqueId": "DatapathDropEmptyMdl",
+ "TraceString": "[test] Client %p cleaning up",
+ "UniqueId": "TestControlClientCleaningUp",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Client",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -20890,7 +20107,7 @@
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -20902,22 +20119,30 @@
"CustomSettings": null
}
},
- "DatapathDropMissingInfo": {
+ "TestControlClientIoctl": {
"ModuleProperites": {},
- "TraceString": "[%p] Dropping datagram missing IP_PKTINFO/IP_RECVERR.",
- "UniqueId": "DatapathDropMissingInfo",
+ "TraceString": "[test] Client %p executing IOCTL %u",
+ "UniqueId": "TestControlClientIoctl",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Client",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "FunctionCode",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "u",
+ "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -20929,14 +20154,14 @@
"CustomSettings": null
}
},
- "DatapathDropTooBig": {
+ "TestControlClientIoctlComplete": {
"ModuleProperites": {},
- "TraceString": "[%p] Dropping datagram with too many bytes (%llu).",
- "UniqueId": "DatapathDropTooBig",
+ "TraceString": "[test] Client %p completing request, 0x%x",
+ "UniqueId": "TestControlClientIoctlComplete",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Client",
"SuggestedTelemetryName": "arg2"
},
"DefinationEncoding": "p",
@@ -20944,15 +20169,15 @@
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "(uint64_t)DataLength",
+ "UserSuppliedTrimmed": "Status",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "llu",
+ "DefinationEncoding": "x",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -20964,22 +20189,13 @@
"CustomSettings": null
}
},
- "DatapathDropMdlMapFailure": {
+ "TestControlInitialized": {
"ModuleProperites": {},
- "TraceString": "[%p] Failed to map MDL chain",
- "UniqueId": "DatapathDropMdlMapFailure",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[test] Control interface initialized",
+ "UniqueId": "TestControlInitialized",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -20991,22 +20207,13 @@
"CustomSettings": null
}
},
- "DatapathFragmented": {
+ "TestControlUninitializing": {
"ModuleProperites": {},
- "TraceString": "[%p] Dropping datagram with fragmented MDL.",
- "UniqueId": "DatapathFragmented",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[test] Control interface uninitializing",
+ "UniqueId": "TestControlUninitializing",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21018,22 +20225,13 @@
"CustomSettings": null
}
},
- "DatapathDropAllocRecvContextFailure": {
+ "TestControlUninitialized": {
"ModuleProperites": {},
- "TraceString": "[%p] Couldn't allocate receive context.",
- "UniqueId": "DatapathDropAllocRecvContextFailure",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[test] Control interface uninitialized",
+ "UniqueId": "TestControlUninitialized",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21045,22 +20243,38 @@
"CustomSettings": null
}
},
- "DatapathUroExceeded": {
+ "TestDriverFailureLocation": {
"ModuleProperites": {},
- "TraceString": "[%p] Exceeded URO preallocation capacity.",
- "UniqueId": "DatapathUroExceeded",
+ "TraceString": "[test] File: %s, Function: %s, Line: %d",
+ "UniqueId": "TestDriverFailureLocation",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "File",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Function",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Line",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "d",
+ "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogError",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21072,30 +20286,22 @@
"CustomSettings": null
}
},
- "DatapathUnreachable": {
+ "TestDriverFailure": {
"ModuleProperites": {},
- "TraceString": "[sock][%p] Unreachable error from %!ADDR!",
- "UniqueId": "DatapathUnreachable",
+ "TraceString": "[test] FAIL: %s",
+ "UniqueId": "TestDriverFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Binding",
+ "UserSuppliedTrimmed": "Buffer",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(RemoteAddr), &RemoteAddr)",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "!ADDR!",
- "MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogError",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21107,10 +20313,10 @@
"CustomSettings": null
}
},
- "WindowsKernelLoaded": {
+ "TestDriverStarted": {
"ModuleProperites": {},
- "TraceString": "[ sys] Loaded",
- "UniqueId": "WindowsKernelLoaded",
+ "TraceString": "[test] Started",
+ "UniqueId": "TestDriverStarted",
"splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogInfo",
@@ -21125,10 +20331,10 @@
"CustomSettings": null
}
},
- "WindowsKernelUnloaded": {
+ "TestDriverStopped": {
"ModuleProperites": {},
- "TraceString": "[ sys] Unloaded",
- "UniqueId": "WindowsKernelUnloaded",
+ "TraceString": "[test] Stopped",
+ "UniqueId": "TestDriverStopped",
"splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogInfo",
@@ -21143,26 +20349,18 @@
"CustomSettings": null
}
},
- "WindowsKernelInitialized": {
+ "TestCaseStart": {
"ModuleProperites": {},
- "TraceString": "[ sys] Initialized (PageSize = %u bytes; AvailMem = %llu bytes)",
- "UniqueId": "WindowsKernelInitialized",
+ "TraceString": "[test] START %s",
+ "UniqueId": "TestCaseStart",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Sbi.PageSize",
+ "UserSuppliedTrimmed": "TestName",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "u",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "QuicTotalMemory",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "llu",
- "MacroVariableName": "arg3"
}
],
"macro": {
@@ -21178,11 +20376,20 @@
"CustomSettings": null
}
},
- "WindowsKernelUninitialized": {
+ "TestCaseEnd": {
"ModuleProperites": {},
- "TraceString": "[ sys] Uninitialized",
- "UniqueId": "WindowsKernelUninitialized",
- "splitArgs": [],
+ "TraceString": "[test] END %s",
+ "UniqueId": "TestCaseEnd",
+ "splitArgs": [
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "TestName",
+ "SuggestedTelemetryName": "arg2"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg2"
+ }
+ ],
"macro": {
"MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
@@ -21196,30 +20403,30 @@
"CustomSettings": null
}
},
- "TestControlClientCanceledRequest": {
+ "TestCaseTStart": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p canceled request %p",
- "UniqueId": "TestControlClientCanceledRequest",
+ "TraceString": "[test] START %s, %s",
+ "UniqueId": "TestCaseTStart",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Client",
+ "UserSuppliedTrimmed": "TestName",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Request",
+ "UserSuppliedTrimmed": "stream.str().c_str()",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogWarning",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21231,17 +20438,17 @@
"CustomSettings": null
}
},
- "TestControlClientCreated": {
+ "TestCaseTEnd": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p created",
- "UniqueId": "TestControlClientCreated",
+ "TraceString": "[test] END %s",
+ "UniqueId": "TestCaseTEnd",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Client",
+ "UserSuppliedTrimmed": "TestName",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
}
],
@@ -21258,20 +20465,54 @@
"CustomSettings": null
}
},
- "TestControlClientCleaningUp": {
+ "TestLogFailure": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p cleaning up",
- "UniqueId": "TestControlClientCleaningUp",
+ "TraceString": "[test] FAILURE - %s:%d - %s",
+ "UniqueId": "TestLogFailure",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Client",
+ "UserSuppliedTrimmed": "File",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Line",
+ "SuggestedTelemetryName": "arg3"
+ },
+ "DefinationEncoding": "d",
+ "MacroVariableName": "arg3"
+ },
+ {
+ "VariableInfo": {
+ "UserSuppliedTrimmed": "Buffer",
+ "SuggestedTelemetryName": "arg4"
+ },
+ "DefinationEncoding": "s",
+ "MacroVariableName": "arg4"
}
],
+ "macro": {
+ "MacroName": "QuicTraceLogError",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
+ "MacroConfiguration": {
+ "linux": "lttng_plus",
+ "stubs": "stubs",
+ "windows_kernel": "empty",
+ "windows": "empty"
+ },
+ "CustomSettings": null
+ }
+ },
+ "TestIgnoreConnectionTimeout": {
+ "ModuleProperites": {},
+ "TraceString": "[test] Ignoring timeout unexpected status because of random loss",
+ "UniqueId": "TestIgnoreConnectionTimeout",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
@@ -21285,17 +20526,17 @@
"CustomSettings": null
}
},
- "TestControlClientInitialized": {
+ "TestScopeEntry": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p set security config and initialized",
- "UniqueId": "TestControlClientInitialized",
+ "TraceString": "[test]---> %s",
+ "UniqueId": "TestScopeEntry",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Client",
+ "UserSuppliedTrimmed": "Name",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "p",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
}
],
@@ -21312,17 +20553,17 @@
"CustomSettings": null
}
},
- "TestControlSecConfigCreated": {
+ "TestScopeExit": {
"ModuleProperites": {},
- "TraceString": "[test] SecConfigCreated: 0x%x",
- "UniqueId": "TestControlSecConfigCreated",
+ "TraceString": "[test]<--- %s",
+ "UniqueId": "TestScopeExit",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Status",
+ "UserSuppliedTrimmed": "Name",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "x",
+ "DefinationEncoding": "s",
"MacroVariableName": "arg2"
}
],
@@ -21339,28 +20580,11 @@
"CustomSettings": null
}
},
- "TestControlClientIoctl": {
+ "TestHookRegister": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p executing IOCTL %u",
- "UniqueId": "TestControlClientIoctl",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Client",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "FunctionCode",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[test][hook] Registering",
+ "UniqueId": "TestHookRegister",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
@@ -21374,28 +20598,11 @@
"CustomSettings": null
}
},
- "TestControlClientIoctlComplete": {
+ "TestHookUnregistering": {
"ModuleProperites": {},
- "TraceString": "[test] Client %p completing request, 0x%x",
- "UniqueId": "TestControlClientIoctlComplete",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Client",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg2"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Status",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "x",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[test][hook] Unregistering",
+ "UniqueId": "TestHookUnregistering",
+ "splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
@@ -21409,13 +20616,13 @@
"CustomSettings": null
}
},
- "TestControlInitialized": {
+ "TestHookUnregistered": {
"ModuleProperites": {},
- "TraceString": "[test] Control interface initialized",
- "UniqueId": "TestControlInitialized",
+ "TraceString": "[test][hook] Unregistered",
+ "UniqueId": "TestHookUnregistered",
"splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogVerbose",
+ "MacroName": "QuicTraceLogInfo",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21427,10 +20634,10 @@
"CustomSettings": null
}
},
- "TestControlUninitializing": {
+ "TestHookDropPacketRandom": {
"ModuleProperites": {},
- "TraceString": "[test] Control interface uninitializing",
- "UniqueId": "TestControlUninitializing",
+ "TraceString": "[test][hook] Random packet drop",
+ "UniqueId": "TestHookDropPacketRandom",
"splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
@@ -21445,10 +20652,10 @@
"CustomSettings": null
}
},
- "TestControlUninitialized": {
+ "TestHookDropPacketSelective": {
"ModuleProperites": {},
- "TraceString": "[test] Control interface uninitialized",
- "UniqueId": "TestControlUninitialized",
+ "TraceString": "[test][hook] Selective packet drop",
+ "UniqueId": "TestHookDropPacketSelective",
"splitArgs": [],
"macro": {
"MacroName": "QuicTraceLogVerbose",
@@ -21463,38 +20670,30 @@
"CustomSettings": null
}
},
- "TestDriverFailureLocation": {
+ "TestHookReplaceAddrRecv": {
"ModuleProperites": {},
- "TraceString": "[test] File: %s, Function: %s, Line: %d",
- "UniqueId": "TestDriverFailureLocation",
+ "TraceString": "[test][hook] Recv Addr :%hu => :%hu",
+ "UniqueId": "TestHookReplaceAddrRecv",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "File",
+ "UserSuppliedTrimmed": "QuicAddrGetPort(&Original)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg2"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Function",
+ "UserSuppliedTrimmed": "QuicAddrGetPort(&New)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Line",
- "SuggestedTelemetryName": "arg4"
- },
- "DefinationEncoding": "d",
- "MacroVariableName": "arg4"
}
],
"macro": {
- "MacroName": "QuicTraceLogError",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21506,95 +20705,32 @@
"CustomSettings": null
}
},
- "TestDriverFailure": {
+ "TestHookReplaceAddrSend": {
"ModuleProperites": {},
- "TraceString": "[test] FAIL: %s",
- "UniqueId": "TestDriverFailure",
+ "TraceString": "[test][hook] Send Addr :%hu => :%hu",
+ "UniqueId": "TestHookReplaceAddrSend",
"splitArgs": [
{
"VariableInfo": {
- "UserSuppliedTrimmed": "Buffer",
+ "UserSuppliedTrimmed": "QuicAddrGetPort(&New)",
"SuggestedTelemetryName": "arg2"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg2"
- }
- ],
- "macro": {
- "MacroName": "QuicTraceLogError",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "stubs",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestDriverStarted": {
- "ModuleProperites": {},
- "TraceString": "[test] Started",
- "UniqueId": "TestDriverStarted",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "stubs",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "TestDriverStopped": {
- "ModuleProperites": {},
- "TraceString": "[test] Stopped",
- "UniqueId": "TestDriverStopped",
- "splitArgs": [],
- "macro": {
- "MacroName": "QuicTraceLogInfo",
- "EncodedPrefix": null,
- "EncodedArgNumber": 1,
- "MacroConfiguration": {
- "linux": "lttng_plus",
- "stubs": "stubs",
- "windows_kernel": "empty",
- "windows": "empty"
- },
- "CustomSettings": null
- }
- },
- "EncodeTPRetrySourceCID": {
- "ModuleProperites": {},
- "TraceString": "[conn][%p] TP: Retry Source Connection ID (%s)",
- "UniqueId": "EncodeTPRetrySourceCID",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
},
{
"VariableInfo": {
- "UserSuppliedTrimmed": "QuicCidBufToStr(\n TransportParams->RetrySourceConnectionID,\n TransportParams->RetrySourceConnectionIDLength).Buffer",
+ "UserSuppliedTrimmed": "QuicAddrGetPort(&Original)",
"SuggestedTelemetryName": "arg3"
},
- "DefinationEncoding": "s",
+ "DefinationEncoding": "hu",
"MacroVariableName": "arg3"
}
],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -21604,32 +20740,15 @@
"CustomSettings": null
}
},
- "OpenSsslIgnoringTicket": {
+ "TestHookDropOldAddrSend": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Ignoring %u ticket bytes",
- "UniqueId": "OpenSsslIgnoringTicket",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "TlsContext->Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- },
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "*BufferLength",
- "SuggestedTelemetryName": "arg3"
- },
- "DefinationEncoding": "u",
- "MacroVariableName": "arg3"
- }
- ],
+ "TraceString": "[test][hook] Dropping send to old addr",
+ "UniqueId": "TestHookDropOldAddrSend",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnVerbose",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -21639,22 +20758,13 @@
"CustomSettings": null
}
},
- "PerfCountersRundown": {
+ "TestHookDropLimitAddrRecv": {
"ModuleProperites": {},
- "TraceString": "[ lib] Perf counters Rundown, Counters=%!CID!",
- "UniqueId": "PerfCountersRundown",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "CLOG_BYTEARRAY(sizeof(PerfCounters), PerfCounters)",
- "SuggestedTelemetryName": "arg2"
- },
- "DefinationEncoding": "!CID!",
- "MacroVariableName": "arg2"
- }
- ],
+ "TraceString": "[test][hook] Dropping recv over limit to new addr",
+ "UniqueId": "TestHookDropLimitAddrRecv",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceEvent",
+ "MacroName": "QuicTraceLogVerbose",
"EncodedPrefix": null,
"EncodedArgNumber": 1,
"MacroConfiguration": {
@@ -21666,24 +20776,15 @@
"CustomSettings": null
}
},
- "InvalidInitialPackets": {
+ "TestHookDropLimitAddrSend": {
"ModuleProperites": {},
- "TraceString": "[conn][%p] Aborting connection with invalid initial packets",
- "UniqueId": "InvalidInitialPackets",
- "splitArgs": [
- {
- "VariableInfo": {
- "UserSuppliedTrimmed": "Connection",
- "SuggestedTelemetryName": "arg1"
- },
- "DefinationEncoding": "p",
- "MacroVariableName": "arg1"
- }
- ],
+ "TraceString": "[test][hook] Dropping send over limit to new addr",
+ "UniqueId": "TestHookDropLimitAddrSend",
+ "splitArgs": [],
"macro": {
- "MacroName": "QuicTraceLogConnWarning",
- "EncodedPrefix": "[conn][%p] ",
- "EncodedArgNumber": 2,
+ "MacroName": "QuicTraceLogVerbose",
+ "EncodedPrefix": null,
+ "EncodedArgNumber": 1,
"MacroConfiguration": {
"linux": "lttng_plus",
"stubs": "stubs",
@@ -22134,6 +21235,14 @@
},
"ModuleUniqueness": {
"TraceInformation": [
+ {
+ "UniquenessHash": "f8608b33-99de-87fb-58fc-7a0f6dfe385c",
+ "TraceID": "LibraryErrorStatus"
+ },
+ {
+ "UniquenessHash": "bb7402a7-ba47-dbce-71f2-fbbd659eb0ff",
+ "TraceID": "PacketRxMarkedForAck"
+ },
{
"UniquenessHash": "92b1bb9f-afd4-62fa-3fb6-1021c09c5916",
"TraceID": "ApiEnter"
@@ -22150,6 +21259,10 @@
"UniquenessHash": "fe671d01-61c1-337c-86f7-e918563cc313",
"TraceID": "ApiExit"
},
+ {
+ "UniquenessHash": "335643ef-1fdb-099b-6672-4452222524ff",
+ "TraceID": "AllocFailure"
+ },
{
"UniquenessHash": "c3b546cc-e127-435d-8bf4-cf20ca3d2d5e",
"TraceID": "StreamError"
@@ -22194,6 +21307,10 @@
"UniquenessHash": "8f664316-de64-1faa-b303-6cda51fd619a",
"TraceID": "BindingErrorStatus"
},
+ {
+ "UniquenessHash": "de67327e-34fe-e36e-e687-09f38be7e043",
+ "TraceID": "BindingCreated"
+ },
{
"UniquenessHash": "5d83e63e-7ce5-0102-8dd2-cbcf5946da2e",
"TraceID": "BindingCleanup"
@@ -22202,10 +21319,46 @@
"UniquenessHash": "9dc8a42f-5829-5abf-0bb0-5040ff1428b9",
"TraceID": "BindingDestroyed"
},
+ {
+ "UniquenessHash": "229b6b27-7423-c3ab-5a3e-f99929ef7e50",
+ "TraceID": "BindingRundown"
+ },
{
"UniquenessHash": "3726f8cb-fca2-1ea3-208b-0f223c09aae2",
"TraceID": "BindingExecOper"
},
+ {
+ "UniquenessHash": "c020fe47-4ec6-93b0-03db-ec72593a14b5",
+ "TraceID": "ConfigurationOpenStorageFailed"
+ },
+ {
+ "UniquenessHash": "2b8c1b84-4ce3-1294-13da-1f56579a80a0",
+ "TraceID": "ConfigurationOpenAppStorageFailed"
+ },
+ {
+ "UniquenessHash": "e104b282-92ce-2322-3af0-f59ccaabf2f1",
+ "TraceID": "ConfigurationSettingsUpdated"
+ },
+ {
+ "UniquenessHash": "68e427b3-d324-b500-3d21-f8f8c84079fb",
+ "TraceID": "ConfigurationSetSettings"
+ },
+ {
+ "UniquenessHash": "f017e9d9-1069-630c-9301-b7c2cdd0dab5",
+ "TraceID": "ConfigurationCreated"
+ },
+ {
+ "UniquenessHash": "c4fb9ea0-c592-0ce3-51af-47689a0b2d11",
+ "TraceID": "ConfigurationCleanup"
+ },
+ {
+ "UniquenessHash": "e63d4591-3c4b-b640-cf7d-5e58755920bd",
+ "TraceID": "ConfigurationDestroyed"
+ },
+ {
+ "UniquenessHash": "1a9b55d5-1b7e-a6d6-e74a-cc8d426e6aaa",
+ "TraceID": "ConfigurationRundown"
+ },
{
"UniquenessHash": "e507ac6d-1899-3690-fceb-3231a0eedb86",
"TraceID": "ConnCubic"
@@ -22254,6 +21407,10 @@
"UniquenessHash": "9b430be7-b0f2-665f-5499-2558b9679b2b",
"TraceID": "IgnoreFrameAfterClose"
},
+ {
+ "UniquenessHash": "77212d61-9925-bec1-4c5b-749d4fff7279",
+ "TraceID": "InvalidInitialPackets"
+ },
{
"UniquenessHash": "abdd8da8-ac7e-f610-f745-b4d3fc85bbca",
"TraceID": "UnreachableIgnore"
@@ -22262,6 +21419,10 @@
"UniquenessHash": "9ed03280-632f-813e-4188-70167f097eae",
"TraceID": "UnreachableInvalid"
},
+ {
+ "UniquenessHash": "b4f3dc8d-17c8-39c5-5345-952616752980",
+ "TraceID": "CloseUserCanceled"
+ },
{
"UniquenessHash": "e6969fd7-4bfa-f16b-fd2d-f366f94dce7c",
"TraceID": "CloseComplete"
@@ -22274,10 +21435,18 @@
"UniquenessHash": "ab194a75-9835-d231-9336-628397e466cc",
"TraceID": "CryptoStateDiscard"
},
+ {
+ "UniquenessHash": "9263ea25-3bcc-5edf-b6ee-493bfe5cc4de",
+ "TraceID": "SetConfiguration"
+ },
{
"UniquenessHash": "63153436-bbba-4092-b061-5aab2692a9c9",
"TraceID": "PeerTPSet"
},
+ {
+ "UniquenessHash": "74d787df-3260-879d-5e65-e28486df5e26",
+ "TraceID": "PeerPreferredAddress"
+ },
{
"UniquenessHash": "270621d6-25e4-9741-4f15-ed4a5b3d4f33",
"TraceID": "NegotiatedDisable1RttEncryption"
@@ -22302,30 +21471,6 @@
"UniquenessHash": "78e16be2-4ef2-96e6-6151-8c7198865607",
"TraceID": "Unreachable"
},
- {
- "UniquenessHash": "5566ba17-a508-e348-c832-84523238b097",
- "TraceID": "UpdateIdleTimeout"
- },
- {
- "UniquenessHash": "5b5d01c1-4b5f-2107-e6bf-6438b293efa1",
- "TraceID": "UpdateKeepAlive"
- },
- {
- "UniquenessHash": "c12bc763-2609-6955-b54b-6514e5ddc0a4",
- "TraceID": "UpdateDisconnectTimeout"
- },
- {
- "UniquenessHash": "7421b3e5-dd56-37b4-86a2-1a7c53110237",
- "TraceID": "SetSecurityConfig"
- },
- {
- "UniquenessHash": "333a1d25-730c-87e8-c17c-7ab1cc39df40",
- "TraceID": "UpdateUseSendBuffer"
- },
- {
- "UniquenessHash": "f1df97fd-15d7-455b-c14f-10a85fd3d688",
- "TraceID": "UpdateUsePacing"
- },
{
"UniquenessHash": "66cfdc40-f79f-a762-a02c-b7f1a4c2e0eb",
"TraceID": "UpdateShareBinding"
@@ -22334,6 +21479,10 @@
"UniquenessHash": "f433b4bc-afec-9da4-79cb-eb11596d42e4",
"TraceID": "UpdateStreamSchedulingScheme"
},
+ {
+ "UniquenessHash": "87c499a7-b21e-c2df-9d11-9176e9730676",
+ "TraceID": "ApplySettings"
+ },
{
"UniquenessHash": "ffeb66e8-2636-b98b-46a5-564068b26843",
"TraceID": "RttUpdated"
@@ -22363,8 +21512,8 @@
"TraceID": "IndicateConnectionShutdownComplete"
},
{
- "UniquenessHash": "3fd431ea-14e0-47c5-7242-475a64109172",
- "TraceID": "FoundCachedServerState"
+ "UniquenessHash": "920800a1-3a54-af40-19d9-fdfaf274a6d4",
+ "TraceID": "IndicateResumptionTicketReceived"
},
{
"UniquenessHash": "18ef147d-5376-d7f2-f624-3b27af96dd05",
@@ -22426,14 +21575,6 @@
"UniquenessHash": "cd3c6623-5c8b-d0a0-f653-dd7ae1b09077",
"TraceID": "UdpRecv"
},
- {
- "UniquenessHash": "4e7f072c-3335-6eb0-dcca-13d3fdf87fe8",
- "TraceID": "ForceKeyUpdate"
- },
- {
- "UniquenessHash": "6e5b39c0-03d0-5405-431a-9b3d0940496e",
- "TraceID": "ForceCidUpdate"
- },
{
"UniquenessHash": "886942eb-0bdc-fffd-0a3b-e2ea639228bb",
"TraceID": "DatagramReceiveEnableUpdated"
@@ -22443,12 +21584,16 @@
"TraceID": "Disable1RttEncrytionUpdated"
},
{
- "UniquenessHash": "ad3632a2-ac75-293d-854f-381b59368114",
- "TraceID": "TestTPSet"
+ "UniquenessHash": "4e7f072c-3335-6eb0-dcca-13d3fdf87fe8",
+ "TraceID": "ForceKeyUpdate"
+ },
+ {
+ "UniquenessHash": "6e5b39c0-03d0-5405-431a-9b3d0940496e",
+ "TraceID": "ForceCidUpdate"
},
{
- "UniquenessHash": "ec0cf6f5-fe6d-3708-e0e3-53203202704d",
- "TraceID": "ReadTicketFailure"
+ "UniquenessHash": "ad3632a2-ac75-293d-854f-381b59368114",
+ "TraceID": "TestTPSet"
},
{
"UniquenessHash": "4af24dff-9b3b-84ae-8868-0443f2ad6ec5",
@@ -22458,10 +21603,30 @@
"UniquenessHash": "aed1e684-1268-09f6-9232-3b0ad19349f5",
"TraceID": "ConnCreated"
},
+ {
+ "UniquenessHash": "44cc2fb4-5b7d-66dd-69b4-3644ee31088f",
+ "TraceID": "ConnLocalAddrAdded"
+ },
+ {
+ "UniquenessHash": "57df3cb1-120c-282b-ea2a-f9ff854b5a76",
+ "TraceID": "ConnRemoteAddrAdded"
+ },
+ {
+ "UniquenessHash": "e2133726-1e36-d515-e6b1-ab7ac6fdf53e",
+ "TraceID": "ConnDestCidAdded"
+ },
+ {
+ "UniquenessHash": "b1ef59fd-834d-2786-8b05-c14f32023aea",
+ "TraceID": "ConnSourceCidAdded"
+ },
{
"UniquenessHash": "228c04ea-f275-6f9c-e29a-a8f058a5db5e",
"TraceID": "ConnInitializeComplete"
},
+ {
+ "UniquenessHash": "2c7b6642-2b16-6fdb-2e81-f932dca249e3",
+ "TraceID": "ConnUnregistered"
+ },
{
"UniquenessHash": "3903cc44-b387-b5f6-17fc-62d5aee48015",
"TraceID": "ConnDestroyed"
@@ -22470,6 +21635,10 @@
"UniquenessHash": "27cd4e17-599b-5429-699a-05377472f707",
"TraceID": "ConnHandleClosed"
},
+ {
+ "UniquenessHash": "60a38bc0-4218-963b-507a-5d7cb5c08596",
+ "TraceID": "ConnRegistered"
+ },
{
"UniquenessHash": "9ba874f3-1fe6-aef6-6d3b-5c9b8b9d8720",
"TraceID": "ConnRundown"
@@ -22479,13 +21648,17 @@
"TraceID": "ConnAssignWorker"
},
{
- "UniquenessHash": "69e49bb9-4937-56a4-18b8-93bc614a86f9",
- "TraceID": "ConnRegisterSession"
+ "UniquenessHash": "bdb8873d-36bc-4a0a-69e3-0de1a47e4afd",
+ "TraceID": "ConnVersionSet"
},
{
"UniquenessHash": "e55bbe23-63cb-e695-26d2-734d5bab5d48",
"TraceID": "ConnHandshakeComplete"
},
+ {
+ "UniquenessHash": "8f204a2e-9160-ae42-2cdd-4f8e8eab10c5",
+ "TraceID": "ConnDestCidRemoved"
+ },
{
"UniquenessHash": "43def263-b39e-5ace-4ab9-9318c5382766",
"TraceID": "ConnExecTimerOper"
@@ -22502,10 +21675,6 @@
"UniquenessHash": "421b9353-bbea-5599-f173-5911d85a776e",
"TraceID": "ConnTransportShutdown"
},
- {
- "UniquenessHash": "bdb8873d-36bc-4a0a-69e3-0de1a47e4afd",
- "TraceID": "ConnVersionSet"
- },
{
"UniquenessHash": "7a6ee833-be8b-28d5-a62a-4addb834ada3",
"TraceID": "ConnErrorStatus"
@@ -22518,6 +21687,42 @@
"UniquenessHash": "01d5a727-8287-c441-9ff0-0ebbd899549f",
"TraceID": "ConnHandshakeStart"
},
+ {
+ "UniquenessHash": "af137df5-1055-7424-de16-65895d8d276b",
+ "TraceID": "ConnPacketRecv"
+ },
+ {
+ "UniquenessHash": "65f1ff8d-810a-4f24-b2f6-817daf9275ef",
+ "TraceID": "ConnSourceCidRemoved"
+ },
+ {
+ "UniquenessHash": "23378f35-794d-1493-0f86-0c338e1bf37c",
+ "TraceID": "ConnLocalAddrRemoved"
+ },
+ {
+ "UniquenessHash": "9165bf3c-da91-8d88-41bc-6709ad299bed",
+ "TraceID": "ConnOutFlowStats"
+ },
+ {
+ "UniquenessHash": "55425e95-f2a7-6b0d-41e9-82bdeb5d9082",
+ "TraceID": "ConnOutFlowStreamStats"
+ },
+ {
+ "UniquenessHash": "5e524dd5-fea0-3816-a291-92ed85eab29d",
+ "TraceID": "ConnInFlowStats"
+ },
+ {
+ "UniquenessHash": "7a9075aa-0c84-7fed-6142-be1d15c7f7dd",
+ "TraceID": "ConnStats"
+ },
+ {
+ "UniquenessHash": "86c5e382-0fbb-1fd6-cdaa-a3d988861364",
+ "TraceID": "ConnPacketStats"
+ },
+ {
+ "UniquenessHash": "11964356-1a57-bc4d-0637-9300c14e0cb9",
+ "TraceID": "ConnOutFlowBlocked"
+ },
{
"UniquenessHash": "60d753ab-6710-fe16-e47d-37f046f5973c",
"TraceID": "IgnoreCryptoFrame"
@@ -22538,10 +21743,6 @@
"UniquenessHash": "fba5c72f-0c3d-f668-a88b-39e5e3e62cbd",
"TraceID": "HandshakeConfirmedServer"
},
- {
- "UniquenessHash": "b9d890f2-d479-8184-b0e5-948bdc1545d7",
- "TraceID": "TicketReady"
- },
{
"UniquenessHash": "4e785757-b1de-e65c-a7b1-7ac868748434",
"TraceID": "CryptoDump"
@@ -22615,7 +21816,7 @@
"TraceID": "DecodeTPUnknown"
},
{
- "UniquenessHash": "2c89f795-3932-98d9-2849-6ddf6675cfa9",
+ "UniquenessHash": "0e57e530-870c-7ba0-5b7b-5da31f55dc03",
"TraceID": "EncodeTPStart"
},
{
@@ -22678,6 +21879,14 @@
"UniquenessHash": "a9ef9690-4a65-72f7-40ad-f09fd6976881",
"TraceID": "EncodeTPCIDLimit"
},
+ {
+ "UniquenessHash": "a10dde76-0ba2-2458-5f43-805105fa2127",
+ "TraceID": "EncodeTPOriginalCID"
+ },
+ {
+ "UniquenessHash": "214be45a-42ba-44e1-05c2-f82f3200e671",
+ "TraceID": "EncodeTPRetrySourceCID"
+ },
{
"UniquenessHash": "d276c997-5dfb-645e-b54a-7ec567967851",
"TraceID": "EncodeMaxDatagramFrameSize"
@@ -22695,7 +21904,7 @@
"TraceID": "EncodeTPEnd"
},
{
- "UniquenessHash": "7e43f912-3063-019a-bbcf-efe0eff8fbb4",
+ "UniquenessHash": "822613a7-cc7e-334a-8e53-483b30217cea",
"TraceID": "DecodeTPStart"
},
{
@@ -23014,6 +22223,10 @@
"UniquenessHash": "99794e3f-6b9a-841b-214f-6ee4f630fa38",
"TraceID": "LibraryLoadBalancingModeSet"
},
+ {
+ "UniquenessHash": "8b631421-6922-c7cf-8f9e-0b9ded090611",
+ "TraceID": "LibrarySetSettings"
+ },
{
"UniquenessHash": "80830820-d84f-0303-c862-a7d195fbca03",
"TraceID": "LibraryInUse"
@@ -23042,10 +22255,6 @@
"UniquenessHash": "e6c3b194-e19d-d568-1157-675aba101620",
"TraceID": "LibraryLoadBalancingModeSetAfterInUse"
},
- {
- "UniquenessHash": "f8608b33-99de-87fb-58fc-7a0f6dfe385c",
- "TraceID": "LibraryErrorStatus"
- },
{
"UniquenessHash": "8f218f73-51d3-e674-6f43-937ce1e861c9",
"TraceID": "LibraryInitialized"
@@ -23063,31 +22272,23 @@
"TraceID": "LibraryRelease"
},
{
- "UniquenessHash": "35758a81-621f-50b4-2b9e-db10d7ef1625",
- "TraceID": "LibraryWorkerPoolInit"
+ "UniquenessHash": "58367e27-574f-14e0-4661-81f93cdb9e18",
+ "TraceID": "LibraryServerInit"
},
{
"UniquenessHash": "4810c9e0-dcf7-bc55-81bb-684627b092b1",
"TraceID": "LibraryRundown"
},
{
- "UniquenessHash": "ffc33ba8-4bc7-9e30-e207-f1d3cb6bb3f2",
- "TraceID": "ListenerIndicateNewConnection"
- },
- {
- "UniquenessHash": "2a7ce132-f946-ec7a-79f4-18f2efe3e781",
- "TraceID": "ListenerNewConnectionPending"
- },
- {
- "UniquenessHash": "1e177a53-4d41-51c1-4261-1d8b246402b8",
- "TraceID": "ListenerNewConnectionAccepted"
+ "UniquenessHash": "10ce7ee9-cfcc-e364-e24c-71e1913cb472",
+ "TraceID": "PerfCountersRundown"
},
{
- "UniquenessHash": "2f8d153a-0fcd-a7fd-a5f2-48a05dfd9a40",
- "TraceID": "NoSecurityConfigAvailable"
+ "UniquenessHash": "ffc33ba8-4bc7-9e30-e207-f1d3cb6bb3f2",
+ "TraceID": "ListenerIndicateNewConnection"
},
{
- "UniquenessHash": "b5ee3b99-bc14-024e-4f0a-8be10e90a5fa",
+ "UniquenessHash": "135ad665-a1b8-32ac-555d-8d1c65c94206",
"TraceID": "ListenerCreated"
},
{
@@ -23102,12 +22303,16 @@
"UniquenessHash": "c11d30b9-28c1-6e74-528e-d5660eebfcc9",
"TraceID": "ListenerError"
},
+ {
+ "UniquenessHash": "753890f0-f5e6-b412-0d97-189eed7c57ef",
+ "TraceID": "ListenerStarted"
+ },
{
"UniquenessHash": "da94a1b4-7135-7fd3-9216-36a5faf1ed7a",
"TraceID": "ListenerStopped"
},
{
- "UniquenessHash": "8dacc12e-b838-4b2f-273b-77a730a20b87",
+ "UniquenessHash": "516f74f8-8802-7cdb-d034-3fa2e41d42c0",
"TraceID": "ListenerRundown"
},
{
@@ -23210,6 +22415,14 @@
"UniquenessHash": "26dded12-d106-a37b-0903-9a3cb98e3618",
"TraceID": "ConnPacketACKed"
},
+ {
+ "UniquenessHash": "4ef04b3e-7dde-88ad-60eb-150c807af68f",
+ "TraceID": "ConnExecApiOper"
+ },
+ {
+ "UniquenessHash": "2f8e5304-312b-2633-ee2b-def9ea2e0e72",
+ "TraceID": "ConnExecOper"
+ },
{
"UniquenessHash": "05679666-5021-56bf-0a98-5c02ef0f0bff",
"TraceID": "LogPacketVersionNegotiation"
@@ -23239,20 +22452,28 @@
"TraceID": "LogPacketShortHeader"
},
{
- "UniquenessHash": "91e6e3a1-830d-6ed9-b737-a6481ac8eb55",
- "TraceID": "NoSrcCidAvailable"
+ "UniquenessHash": "946d7a4f-ca9f-b676-8fef-1661da5703cd",
+ "TraceID": "ConnDropPacket"
},
{
- "UniquenessHash": "03e79f57-89b7-b2d2-b13f-cb2f995b47cd",
- "TraceID": "GetPacketTypeFailure"
+ "UniquenessHash": "aff4ab67-a70e-f05b-c51d-9b97628c141e",
+ "TraceID": "BindingDropPacket"
+ },
+ {
+ "UniquenessHash": "7b8fcbcd-b097-9b8b-3d56-a2ca2d8b5cb8",
+ "TraceID": "ConnDropPacketEx"
+ },
+ {
+ "UniquenessHash": "262f6b18-033f-5ef9-44eb-b2bebae16084",
+ "TraceID": "BindingDropPacketEx"
},
{
- "UniquenessHash": "afeabc8e-8a4f-dc8c-ea60-7b49babf6d1f",
- "TraceID": "PacketBuilderNewDatagram"
+ "UniquenessHash": "91e6e3a1-830d-6ed9-b737-a6481ac8eb55",
+ "TraceID": "NoSrcCidAvailable"
},
{
- "UniquenessHash": "82f1cecd-7200-a01b-1bf8-b1c01dcf4522",
- "TraceID": "PacketBuilderNewPacket"
+ "UniquenessHash": "03e79f57-89b7-b2d2-b13f-cb2f995b47cd",
+ "TraceID": "GetPacketTypeFailure"
},
{
"UniquenessHash": "f2859068-aa3b-758e-45b8-db7e1bf4063f",
@@ -23347,80 +22568,12 @@
"TraceID": "IndicateIdealSendBuffer"
},
{
- "UniquenessHash": "b1ccda4a-30c6-faa3-82e1-58f26a04fd3a",
- "TraceID": "SessionOpenStorageFailed"
- },
- {
- "UniquenessHash": "fd1dcb72-2e16-2303-9c6e-26ec454bad5b",
- "TraceID": "SessionOpenAppStorageFailed"
- },
- {
- "UniquenessHash": "003f6e08-f695-7465-a9f8-7cf5d278d40c",
- "TraceID": "SessionSettingsUpdated"
- },
- {
- "UniquenessHash": "b59dce87-a83c-5666-177a-33b2e923d7f1",
- "TraceID": "SessionBiDiStreamCountSet"
- },
- {
- "UniquenessHash": "eac9e3ea-5afd-27c1-ca5d-98b45ec5249e",
- "TraceID": "SessionUniDiStreamCountSet"
- },
- {
- "UniquenessHash": "b39a4626-172f-2a1b-0445-4f85d4a9cef4",
- "TraceID": "SessionIdleTimeoutSet"
- },
- {
- "UniquenessHash": "3eb2b58a-7fe2-2f50-d8b5-9cb1ac4b118e",
- "TraceID": "SessionDisconnectTimeoutSet"
+ "UniquenessHash": "a0905196-8b7e-fdd3-5369-0c6ffcc3707f",
+ "TraceID": "SettingDumpSendBufferingEnabled"
},
{
- "UniquenessHash": "374333eb-afd7-c5f4-000a-c99886eecf1c",
- "TraceID": "SessionMaxBytesPerKeySet"
- },
- {
- "UniquenessHash": "cf50c39e-a1dc-26f4-76ae-9af915b90637",
- "TraceID": "SessionMigrationEnabledSet"
- },
- {
- "UniquenessHash": "6d4e7f68-5e0e-704a-b2e9-286af412d91b",
- "TraceID": "SessionDatagramReceiveEnabledSet"
- },
- {
- "UniquenessHash": "f214a949-859c-b672-e968-07517083599f",
- "TraceID": "SessionServerResumptionLevelSet"
- },
- {
- "UniquenessHash": "beb182bb-7f41-f3cf-e77a-ad0a0f1c1fa4",
- "TraceID": "SessionCreated"
- },
- {
- "UniquenessHash": "95031d15-4726-27c6-6968-bd42ae4a56b4",
- "TraceID": "SessionDestroyed"
- },
- {
- "UniquenessHash": "97ed84db-6299-0c17-382d-1a56cd9a0df9",
- "TraceID": "SessionError"
- },
- {
- "UniquenessHash": "b5a9abc4-9472-22be-72c8-9c20a5e11b83",
- "TraceID": "SessionErrorStatus"
- },
- {
- "UniquenessHash": "99b4b1e0-3664-72f3-d357-b343967e9f0d",
- "TraceID": "SessionCleanup"
- },
- {
- "UniquenessHash": "9bec5f10-1218-44b8-2370-fd6a7817fcfe",
- "TraceID": "SessionShutdown"
- },
- {
- "UniquenessHash": "9f017e81-6d92-3436-a8e5-023d33db9c0f",
- "TraceID": "SessionRundown"
- },
- {
- "UniquenessHash": "cf82c2cd-9f33-dd50-a621-e700bfc9069b",
- "TraceID": "ConnUnregisterSession"
+ "UniquenessHash": "50c8e61a-10db-0422-9497-26f288b36eed",
+ "TraceID": "SettingDumpPacingEnabled"
},
{
"UniquenessHash": "340f2d77-e194-4320-a5cf-5bd9f81d8568",
@@ -23430,10 +22583,6 @@
"UniquenessHash": "d4201eb3-a633-2e4e-e23a-2c5e045234fa",
"TraceID": "SettingDumpDatagramReceiveEnabled"
},
- {
- "UniquenessHash": "8ec2f3d9-be06-8705-d9ac-064897042254",
- "TraceID": "SettingDumpMaxPartitionCount"
- },
{
"UniquenessHash": "3fe22b95-e06c-01be-48f2-1bed9eb3def3",
"TraceID": "SettingDumpMaxOperationsPerDrain"
@@ -23483,8 +22632,16 @@
"TraceID": "SettingDumpIdleTimeoutMs"
},
{
- "UniquenessHash": "155f7518-f6a7-c163-087f-cd860a6b3bb5",
- "TraceID": "SettingDumpHandshakeIdleTimeoutMs"
+ "UniquenessHash": "155f7518-f6a7-c163-087f-cd860a6b3bb5",
+ "TraceID": "SettingDumpHandshakeIdleTimeoutMs"
+ },
+ {
+ "UniquenessHash": "b6d32b84-af0c-b1cb-5e97-a9fb84980e8d",
+ "TraceID": "SettingDumpBidiStreamCount"
+ },
+ {
+ "UniquenessHash": "db025b70-a960-32f0-75b0-1cc495602e15",
+ "TraceID": "SettingDumpUnidiStreamCount"
},
{
"UniquenessHash": "4eaf58f9-d813-f2de-2388-6f550e14f27d",
@@ -23738,6 +22895,10 @@
"UniquenessHash": "2104f4e7-9cc0-74bc-f4b5-dfc645b5642a",
"TraceID": "AbandonOnLibShutdown"
},
+ {
+ "UniquenessHash": "49ee2ed0-1b90-a7f2-d8a6-230a287a07b7",
+ "TraceID": "WorkerCreated"
+ },
{
"UniquenessHash": "07e794d9-3f9b-61ce-b0b8-af3cc9d92ebe",
"TraceID": "WorkerErrorStatus"
@@ -23771,88 +22932,32 @@
"TraceID": "WorkerStop"
},
{
- "UniquenessHash": "4ef04b3e-7dde-88ad-60eb-150c807af68f",
- "TraceID": "ConnExecApiOper"
- },
- {
- "UniquenessHash": "2f8e5304-312b-2633-ee2b-def9ea2e0e72",
- "TraceID": "ConnExecOper"
- },
- {
- "UniquenessHash": "9165bf3c-da91-8d88-41bc-6709ad299bed",
- "TraceID": "ConnOutFlowStats"
- },
- {
- "UniquenessHash": "55425e95-f2a7-6b0d-41e9-82bdeb5d9082",
- "TraceID": "ConnOutFlowStreamStats"
- },
- {
- "UniquenessHash": "5e524dd5-fea0-3816-a291-92ed85eab29d",
- "TraceID": "ConnInFlowStats"
- },
- {
- "UniquenessHash": "7a9075aa-0c84-7fed-6142-be1d15c7f7dd",
- "TraceID": "ConnStats"
- },
- {
- "UniquenessHash": "86c5e382-0fbb-1fd6-cdaa-a3d988861364",
- "TraceID": "ConnPacketStats"
- },
- {
- "UniquenessHash": "11964356-1a57-bc4d-0637-9300c14e0cb9",
- "TraceID": "ConnOutFlowBlocked"
- },
- {
- "UniquenessHash": "64ef2389-7553-24d5-62f5-94fa1ab55eac",
- "TraceID": "StubTlsCertValidationDisabled"
- },
- {
- "UniquenessHash": "ae0cc427-609d-ce4f-004d-6ef2c2d6c540",
- "TraceID": "StubTlsContextReset"
- },
- {
- "UniquenessHash": "2ca06c46-059c-c3e2-a6db-dc8f0d6292eb",
- "TraceID": "StubTlsHandshakeComplete"
- },
- {
- "UniquenessHash": "27a202b6-2090-aed6-26c8-4b193f0cb901",
- "TraceID": "StubTlsConsumedData"
- },
- {
- "UniquenessHash": "8671265f-83a7-8d8f-4fac-ea0d14b9da84",
- "TraceID": "StubTlsProducedData"
- },
- {
- "UniquenessHash": "16a301c5-8f8d-0d34-6fb9-0a608367097e",
- "TraceID": "StubTlsUsing0Rtt"
+ "UniquenessHash": "6fb480dc-d71f-74f2-dc75-559a5591fe3d",
+ "TraceID": "CertCapiVerifiedChain"
},
{
- "UniquenessHash": "068a93f4-8ad9-2eae-53e9-44da62c39494",
- "TraceID": "StubTlsContextCleaningUp"
+ "UniquenessHash": "2e3530fe-5082-ce8a-7275-87755eb70c41",
+ "TraceID": "CertCapiParsedChain"
},
{
- "UniquenessHash": "0b1951ab-04a5-27f1-86ca-0dc9d53ba837",
- "TraceID": "StubTlsRecvNewSessionTicket"
+ "UniquenessHash": "bc118133-e7f5-68c2-fd22-5dba9202e2eb",
+ "TraceID": "CertCapiFormattedChain"
},
{
- "UniquenessHash": "9b5f99a0-b1b6-bae7-12fd-89f89d1f1667",
- "TraceID": "StubTlsProcessData"
+ "UniquenessHash": "827a6a52-50a7-a1f6-8caa-5f1aea644206",
+ "TraceID": "CertCapiSign"
},
{
- "UniquenessHash": "ba8f7a88-fc0f-b8fc-30a8-bdb33e21fd5b",
- "TraceID": "StubTlsReadTicket"
+ "UniquenessHash": "d53212c8-2068-d598-a55f-1b238ec86ad1",
+ "TraceID": "CertCapiVerify"
},
{
"UniquenessHash": "2cbc406b-c1c0-ba4d-eee8-669f30330f4a",
"TraceID": "LibraryError"
},
{
- "UniquenessHash": "9eac4540-061f-ff2b-c104-5c1e1b8b22b6",
- "TraceID": "TlsError"
- },
- {
- "UniquenessHash": "7312d23f-2305-b54b-e1da-81597fabe281",
- "TraceID": "TlsErrorStatus"
+ "UniquenessHash": "f11702ec-fc18-f5bb-c732-90e621e3356d",
+ "TraceID": "CertOpenSslGetProcessAddressFailure"
},
{
"UniquenessHash": "eca69f63-4fd1-2302-5724-89ca1189754e",
@@ -23870,14 +22975,6 @@
"UniquenessHash": "5b32401b-1842-9af0-ebab-67d1baf8fc7a",
"TraceID": "DatapathShuttingDown"
},
- {
- "UniquenessHash": "288834d5-3dac-d5c7-9149-5b3ecae18f47",
- "TraceID": "DatapathSendToCompleted"
- },
- {
- "UniquenessHash": "83724b51-cf73-026c-4a26-055e061654e4",
- "TraceID": "DatapathSendMsgCompleted"
- },
{
"UniquenessHash": "8c0dc882-517e-cd8f-df0b-0b892d83bb00",
"TraceID": "DatapathResolveHostNameFailed"
@@ -23887,244 +22984,96 @@
"TraceID": "DatapathErrorStatus"
},
{
- "UniquenessHash": "681db658-c247-7951-8110-1c361bf69097",
- "TraceID": "LibraryAssert"
- },
- {
- "UniquenessHash": "76b54d32-001b-12e0-4e99-d29d2640eaeb",
- "TraceID": "TestScopeEntry"
- },
- {
- "UniquenessHash": "dcfcaf50-a07f-c426-e2fb-f19b77811e65",
- "TraceID": "TestScopeExit"
- },
- {
- "UniquenessHash": "1dfb652d-bf04-b3c5-5037-a1d7659e3d23",
- "TraceID": "TestHookRegister"
- },
- {
- "UniquenessHash": "b00f19a5-597a-64dd-4bab-fa3e383ea688",
- "TraceID": "TestHookUnregistering"
- },
- {
- "UniquenessHash": "35fe1a4b-cb88-2161-ef4b-e6d0c78186f5",
- "TraceID": "TestHookUnregistered"
- },
- {
- "UniquenessHash": "ccf24f92-4b3c-0f17-5c84-1d454a788837",
- "TraceID": "TestHookDropPacketRandom"
- },
- {
- "UniquenessHash": "ce814b3f-616f-bb09-3743-9c2879fd97a4",
- "TraceID": "TestHookDropPacketSelective"
- },
- {
- "UniquenessHash": "28d71381-a26c-3f0b-e2a9-1a97c3be08e2",
- "TraceID": "TestHookReplaceAddrRecv"
- },
- {
- "UniquenessHash": "5d176d92-2974-c576-9dba-202db86131f2",
- "TraceID": "TestHookReplaceAddrSend"
- },
- {
- "UniquenessHash": "861bbb4e-e371-4334-b45d-03199c1cacda",
- "TraceID": "TestHookDropOldAddrSend"
- },
- {
- "UniquenessHash": "8b50bb5d-c66e-e93c-55cd-253b3af4d510",
- "TraceID": "TestHookDropLimitAddrRecv"
- },
- {
- "UniquenessHash": "78d1c2fe-fbce-b603-004e-f2026093416c",
- "TraceID": "TestHookDropLimitAddrSend"
- },
- {
- "UniquenessHash": "f4248703-23be-e418-2b90-c9670966f154",
- "TraceID": "TestIgnoreConnectionTimeout"
- },
- {
- "UniquenessHash": "75b94a49-9bfe-7be0-7756-8f014aeeddba",
- "TraceID": "TestCaseStart"
- },
- {
- "UniquenessHash": "b79cc8df-4d28-f459-11b2-ba8160512a09",
- "TraceID": "TestCaseEnd"
- },
- {
- "UniquenessHash": "cf26e1f0-583d-ec79-4a49-8e398f9883b0",
- "TraceID": "TestCaseTStart"
- },
- {
- "UniquenessHash": "36ce89a9-c16e-d08a-4bea-f8e25c22d2ce",
- "TraceID": "TestCaseTEnd"
- },
- {
- "UniquenessHash": "3928cc2f-84c2-48ac-845b-40781cf8021b",
- "TraceID": "TestLogFailure"
- },
- {
- "UniquenessHash": "e2133726-1e36-d515-e6b1-ab7ac6fdf53e",
- "TraceID": "ConnDestCidAdded"
- },
- {
- "UniquenessHash": "b1ef59fd-834d-2786-8b05-c14f32023aea",
- "TraceID": "ConnSourceCidAdded"
- },
- {
- "UniquenessHash": "8f204a2e-9160-ae42-2cdd-4f8e8eab10c5",
- "TraceID": "ConnDestCidRemoved"
- },
- {
- "UniquenessHash": "65f1ff8d-810a-4f24-b2f6-817daf9275ef",
- "TraceID": "ConnSourceCidRemoved"
- },
- {
- "UniquenessHash": "c7b17ffc-7649-6294-b6d0-cf4bbf4bc8cb",
- "TraceID": "OpenSslAlert"
- },
- {
- "UniquenessHash": "04956959-ecb5-9bea-dd79-ca22765f2c95",
- "TraceID": "OpenSslHandshakeErrorStr"
- },
- {
- "UniquenessHash": "f80224e1-7ca4-27b8-154f-fc7e85e79ec7",
- "TraceID": "OpenSslHandshakeError"
- },
- {
- "UniquenessHash": "c279cde0-f02f-b00b-6d26-e4b9b7a7f136",
- "TraceID": "OpenSslAlpnNegotiationFailure"
- },
- {
- "UniquenessHash": "9db25efa-f88e-4060-209f-1512595e2e48",
- "TraceID": "OpenSslInvalidAlpnLength"
- },
- {
- "UniquenessHash": "ae3edb31-740c-da1e-7beb-1413f94a5af4",
- "TraceID": "OpenSslNoMatchingAlpn"
- },
- {
- "UniquenessHash": "b75cb1a1-4f18-b079-1f2f-c85b209e0bb2",
- "TraceID": "OpenSslMissingTransportParameters"
- },
- {
- "UniquenessHash": "adea8fef-9bdf-e9d9-63f2-64fefaea1bde",
- "TraceID": "OpenSslHandshakeDataStart"
- },
- {
- "UniquenessHash": "eaede67a-124b-3b3f-95ba-363d08546d2a",
- "TraceID": "OpenSsl1RttDataStart"
- },
- {
- "UniquenessHash": "c4429bfe-e7df-7623-090b-4ab09187da8f",
- "TraceID": "OpenSslContextReset"
- },
- {
- "UniquenessHash": "a02a0e9d-57cd-0abf-1cd9-5a46076919b2",
- "TraceID": "OpenSslHandshakeComplete"
- },
- {
- "UniquenessHash": "e9fe92dd-5582-f430-a385-ab63ebfd22c8",
- "TraceID": "OpenSslNewEncryptionSecrets"
- },
- {
- "UniquenessHash": "286da584-4057-1b9b-c98f-83b7b936af68",
- "TraceID": "OpenSslAddHandshakeData"
- },
- {
- "UniquenessHash": "a241a44d-19e5-3ddd-03b3-2e65b093720f",
- "TraceID": "OpenSslContextCleaningUp"
- },
- {
- "UniquenessHash": "af137df5-1055-7424-de16-65895d8d276b",
- "TraceID": "ConnPacketRecv"
+ "UniquenessHash": "4a17af8c-bd56-a1f2-d3d6-b28b75030213",
+ "TraceID": "DatapathRecv"
},
{
- "UniquenessHash": "de67327e-34fe-e36e-e687-09f38be7e043",
- "TraceID": "BindingCreated"
+ "UniquenessHash": "60419832-af2f-d7f6-6f43-935918db56b1",
+ "TraceID": "DatapathSendTo"
},
{
- "UniquenessHash": "229b6b27-7423-c3ab-5a3e-f99929ef7e50",
- "TraceID": "BindingRundown"
+ "UniquenessHash": "0b5e94e2-63da-d912-9c46-0b9e3b5ea839",
+ "TraceID": "DatapathSendFromTo"
},
{
- "UniquenessHash": "74d787df-3260-879d-5e65-e28486df5e26",
- "TraceID": "PeerPreferredAddress"
+ "UniquenessHash": "b24b16a3-d334-7fa7-5991-5361737fa9a5",
+ "TraceID": "DatapathOpenTcpSocketFailed"
},
- {
- "UniquenessHash": "44cc2fb4-5b7d-66dd-69b4-3644ee31088f",
- "TraceID": "ConnLocalAddrAdded"
+ {
+ "UniquenessHash": "19716fe5-c9e9-01cf-c8fe-adaa001f1096",
+ "TraceID": "DatapathOpenTcpSocketFailedAsync"
},
{
- "UniquenessHash": "57df3cb1-120c-282b-ea2a-f9ff854b5a76",
- "TraceID": "ConnRemoteAddrAdded"
+ "UniquenessHash": "e199bbc2-944b-b1c2-6013-67e8818f2e13",
+ "TraceID": "DatapathQueryRssScalabilityInfoFailed"
},
{
- "UniquenessHash": "23378f35-794d-1493-0f86-0c338e1bf37c",
- "TraceID": "ConnLocalAddrRemoved"
+ "UniquenessHash": "3d57fa5f-a053-b239-52cb-febd154ffd26",
+ "TraceID": "DatapathQueryRssScalabilityInfoFailedAsync"
},
{
- "UniquenessHash": "753890f0-f5e6-b412-0d97-189eed7c57ef",
- "TraceID": "ListenerStarted"
+ "UniquenessHash": "71af3614-5dc0-62a2-c723-6f31838c3400",
+ "TraceID": "DatapathOpenUdpSocketFailed"
},
{
- "UniquenessHash": "4a17af8c-bd56-a1f2-d3d6-b28b75030213",
- "TraceID": "DatapathRecv"
+ "UniquenessHash": "d1b57f51-d0dc-7fe1-82ba-ccde7926e0cc",
+ "TraceID": "DatapathOpenUdpSocketFailedAsync"
},
{
- "UniquenessHash": "60419832-af2f-d7f6-6f43-935918db56b1",
- "TraceID": "DatapathSendTo"
+ "UniquenessHash": "71ede21d-777c-2e7a-9260-26fd3efc8601",
+ "TraceID": "DatapathQueryUdpSendMsgFailed"
},
{
- "UniquenessHash": "0b5e94e2-63da-d912-9c46-0b9e3b5ea839",
- "TraceID": "DatapathSendFromTo"
+ "UniquenessHash": "8703c474-c698-92fe-cb33-28ca924e6b98",
+ "TraceID": "DatapathQueryUdpSendMsgFailedAsync"
},
{
- "UniquenessHash": "bb7402a7-ba47-dbce-71f2-fbbd659eb0ff",
- "TraceID": "PacketRxMarkedForAck"
+ "UniquenessHash": "9c74edde-b4c6-c412-a4aa-615ad0321ac3",
+ "TraceID": "DatapathQueryRecvMaxCoalescedSizeFailed"
},
{
- "UniquenessHash": "a10dde76-0ba2-2458-5f43-805105fa2127",
- "TraceID": "EncodeTPOriginalCID"
+ "UniquenessHash": "8f820ed1-ce50-5793-0bd4-ae115f172b66",
+ "TraceID": "DatapathQueryRecvMaxCoalescedSizeFailedAsync"
},
{
- "UniquenessHash": "aaebf719-e666-5611-57b6-68d10b71a928",
- "TraceID": "EncodeTPOriginalCID_Retry"
+ "UniquenessHash": "b503f2a8-8676-cb38-1cab-733b1b6168c4",
+ "TraceID": "DatapathDropEmptyMdl"
},
{
- "UniquenessHash": "4c35533b-ecc3-d025-ac7a-5a7cc648db02",
- "TraceID": "OpenSslProcessData_IgnoreTicket"
+ "UniquenessHash": "93ba4ba0-a056-754c-13bd-4d57d0f1d5f4",
+ "TraceID": "DatapathDropMissingInfo"
},
{
- "UniquenessHash": "ff332af9-4ba2-95a8-bb2c-c5c729be4ccd",
- "TraceID": "OpenSslProcessData"
+ "UniquenessHash": "e2a52ac0-8148-8ba4-8ea5-bab2cbf1a43c",
+ "TraceID": "DatapathDropTooBig"
},
{
- "UniquenessHash": "183e91b7-6ad7-7a8b-0d77-94004bde6757",
- "TraceID": "SchannelProcessingData"
+ "UniquenessHash": "177e3d8f-353c-329c-6b7c-638649a7d3ef",
+ "TraceID": "DatapathDropMdlMapFailure"
},
{
- "UniquenessHash": "335643ef-1fdb-099b-6672-4452222524ff",
- "TraceID": "AllocFailure"
+ "UniquenessHash": "b940eb8b-74ec-f569-8167-e95ccc36510e",
+ "TraceID": "DatapathFragmented"
},
{
- "UniquenessHash": "b24b16a3-d334-7fa7-5991-5361737fa9a5",
- "TraceID": "DatapathOpenTcpSocketFailed"
+ "UniquenessHash": "a3d48581-00d1-fbbf-3ede-f8e9a4a22187",
+ "TraceID": "DatapathDropAllocRecvContextFailure"
},
{
- "UniquenessHash": "73d44c65-66ff-f29f-bb76-28617b93d44b",
- "TraceID": "DatapathQueryRssProcessorInfoFailed"
+ "UniquenessHash": "977ca100-03bb-010a-09ab-0a04d33a7dfd",
+ "TraceID": "DatapathDropAllocRecvBufferFailure"
},
{
- "UniquenessHash": "71af3614-5dc0-62a2-c723-6f31838c3400",
- "TraceID": "DatapathOpenUdpSocketFailed"
+ "UniquenessHash": "9ab36cd5-f082-c444-283c-9b8354ecedb5",
+ "TraceID": "DatapathUroExceeded"
},
{
- "UniquenessHash": "71ede21d-777c-2e7a-9260-26fd3efc8601",
- "TraceID": "DatapathQueryUdpSendMsgFailed"
+ "UniquenessHash": "37423b13-b9e3-7961-07d6-137252085127",
+ "TraceID": "DatapathUnreachable"
},
{
- "UniquenessHash": "9c74edde-b4c6-c412-a4aa-615ad0321ac3",
- "TraceID": "DatapathQueryRecvMaxCoalescedSizeFailed"
+ "UniquenessHash": "73d44c65-66ff-f29f-bb76-28617b93d44b",
+ "TraceID": "DatapathQueryRssProcessorInfoFailed"
},
{
"UniquenessHash": "113c84ef-50cb-cb52-931e-bf57bcabe3c4",
@@ -24158,6 +23107,26 @@
"UniquenessHash": "2266b6a6-3223-3a10-348c-e3c811fa0818",
"TraceID": "DatapathTooLarge"
},
+ {
+ "UniquenessHash": "681db658-c247-7951-8110-1c361bf69097",
+ "TraceID": "LibraryAssert"
+ },
+ {
+ "UniquenessHash": "bddd082e-fd86-4e92-2b3f-ed831dad41eb",
+ "TraceID": "WindowsKernelLoaded"
+ },
+ {
+ "UniquenessHash": "99b1ad83-0cbf-8b42-36e2-86e505bf6b76",
+ "TraceID": "WindowsKernelUnloaded"
+ },
+ {
+ "UniquenessHash": "09622250-6902-8f51-16a4-41a81d9cfc14",
+ "TraceID": "WindowsKernelInitialized"
+ },
+ {
+ "UniquenessHash": "7d3c84e1-4c84-fd6e-19b0-5210f45719fe",
+ "TraceID": "WindowsKernelUninitialized"
+ },
{
"UniquenessHash": "b34bba29-c6d5-e31d-a099-d73a62330504",
"TraceID": "WindowsUserLoaded"
@@ -24182,337 +23151,369 @@
"UniquenessHash": "19b21f4a-a6e8-3b9b-c4da-e303c8f108b1",
"TraceID": "WindowsUserUninitialized"
},
+ {
+ "UniquenessHash": "b3f755ee-8d5e-ee68-77ce-d28d21c60214",
+ "TraceID": "CertWaitForCreationEvent"
+ },
+ {
+ "UniquenessHash": "1d49a12c-2001-fbe8-e111-80da9c0c330f",
+ "TraceID": "CertCleanTestCerts"
+ },
+ {
+ "UniquenessHash": "77982893-1b1e-c8f4-2410-5885f9f9debc",
+ "TraceID": "CertOpenRsaKeySuccess"
+ },
+ {
+ "UniquenessHash": "41f32b3e-24fa-9aea-be99-143d45142d0b",
+ "TraceID": "CertCreateRsaKeySuccess"
+ },
+ {
+ "UniquenessHash": "43fb9236-e276-a71e-ab43-b1b026b31cfd",
+ "TraceID": "CertCreationEventAlreadyCreated"
+ },
{
"UniquenessHash": "86a081de-c71a-7043-b507-672561f5fd36",
"TraceID": "StorageOpenKey"
},
{
- "UniquenessHash": "6fb480dc-d71f-74f2-dc75-559a5591fe3d",
- "TraceID": "CertCapiVerifiedChain"
+ "UniquenessHash": "892901ea-49a8-594b-6e05-edb0fc36be3d",
+ "TraceID": "miTlsInitialize"
},
{
- "UniquenessHash": "2e3530fe-5082-ce8a-7275-87755eb70c41",
- "TraceID": "CertCapiParsedChain"
+ "UniquenessHash": "912c1707-c315-0036-76ca-602ae12a94b7",
+ "TraceID": "miTlsUninitialize"
},
{
- "UniquenessHash": "bc118133-e7f5-68c2-fd22-5dba9202e2eb",
- "TraceID": "CertCapiFormattedChain"
+ "UniquenessHash": "e0e483e0-e15e-e93b-6ec0-cb084e300cb3",
+ "TraceID": "miTlsLogSecret"
},
{
- "UniquenessHash": "827a6a52-50a7-a1f6-8caa-5f1aea644206",
- "TraceID": "CertCapiSign"
+ "UniquenessHash": "fc766c70-8cec-7846-ba14-63bc930b4e06",
+ "TraceID": "miTlsFfiProcessFailed"
},
{
- "UniquenessHash": "d53212c8-2068-d598-a55f-1b238ec86ad1",
- "TraceID": "CertCapiVerify"
+ "UniquenessHash": "0e9054b4-02e7-dad9-6893-dd902ebb0dd4",
+ "TraceID": "miTlsFfiGetHelloSummaryFailed"
},
{
- "UniquenessHash": "b3f755ee-8d5e-ee68-77ce-d28d21c60214",
- "TraceID": "CertWaitForCreationEvent"
+ "UniquenessHash": "76420f88-75d8-6a13-f42b-bea06884e542",
+ "TraceID": "miTlsCertValidationDisabled"
},
{
- "UniquenessHash": "1d49a12c-2001-fbe8-e111-80da9c0c330f",
- "TraceID": "CertCleanTestCerts"
+ "UniquenessHash": "adbd41df-cab6-b314-1ceb-dc00def1c425",
+ "TraceID": "miTlsCertSelected"
},
{
- "UniquenessHash": "77982893-1b1e-c8f4-2410-5885f9f9debc",
- "TraceID": "CertOpenRsaKeySuccess"
+ "UniquenessHash": "0eb36a7a-47b3-271a-054b-94a5ebf6c257",
+ "TraceID": "miTlsUsing0Rtt"
},
{
- "UniquenessHash": "41f32b3e-24fa-9aea-be99-143d45142d0b",
- "TraceID": "CertCreateRsaKeySuccess"
+ "UniquenessHash": "4cb2a299-89dc-7245-b116-4dcc9875d5fe",
+ "TraceID": "miTlsProcess"
},
{
- "UniquenessHash": "43fb9236-e276-a71e-ab43-b1b026b31cfd",
- "TraceID": "CertCreationEventAlreadyCreated"
+ "UniquenessHash": "54a1f582-7b8d-434a-143e-9df24a874f95",
+ "TraceID": "miTlsSend0RttTicket"
},
{
- "UniquenessHash": "a0f9d887-3cc8-3dd3-f2c7-8143878abe6e",
- "TraceID": "SchannelInitialized"
+ "UniquenessHash": "bdbaac9e-6abe-7c57-d354-df78a89838ce",
+ "TraceID": "miTlsFfiProces"
},
{
- "UniquenessHash": "b21a8d0d-c484-ac00-8081-90d5e8de9d1f",
- "TraceID": "SchannelUninitialized"
+ "UniquenessHash": "27d4a0a4-4e32-0043-3d90-166d1b378f92",
+ "TraceID": "miTlsFfiProcessResult"
},
{
- "UniquenessHash": "18d71dfd-c63b-1856-fcfb-f497e885c098",
- "TraceID": "SchannelAch"
+ "UniquenessHash": "cbc269aa-13ca-8f88-d61e-db9403a335de",
+ "TraceID": "miTlsHandshakeComplete"
},
{
- "UniquenessHash": "2f770264-7822-a5c1-4858-e0acff4e209e",
- "TraceID": "SchannelAchCompleteInline"
+ "UniquenessHash": "4833606e-5d9c-82d2-86e1-875d57efdaf6",
+ "TraceID": "miTlsEarlyDataRejected"
},
{
- "UniquenessHash": "c04de4b9-64de-c415-dda2-b07f295f9897",
- "TraceID": "SchannelLogSecret"
+ "UniquenessHash": "18f82502-f22b-ca5d-6393-cdd01c7bd873",
+ "TraceID": "miTlsEarlyDataAccepted"
},
{
- "UniquenessHash": "d1939214-2593-326a-34c8-0b05b89e7468",
- "TraceID": "SchannelContextReset"
+ "UniquenessHash": "717e49dd-7942-4cae-f517-3f001e43e7b5",
+ "TraceID": "miTlsEarlyDataNotAttempted"
},
{
- "UniquenessHash": "799852e0-2f39-43d4-6888-98a33178b844",
- "TraceID": "SchannelHandshakeComplete"
+ "UniquenessHash": "21c32d30-e5c5-164a-e1ee-e9485d64813f",
+ "TraceID": "miTlsEarlyDataAttempted"
},
{
- "UniquenessHash": "4fd0cb41-bb79-5d9a-c799-172bb467970d",
- "TraceID": "SchannelConsumedBytes"
+ "UniquenessHash": "9a6e2c4c-9ed2-e2d4-56d1-f3453c281a20",
+ "TraceID": "miTlsKeySchedule"
},
{
- "UniquenessHash": "eb856414-e192-4e49-572c-18139925d342",
- "TraceID": "SchannelReadHandshakeStart"
+ "UniquenessHash": "a18ddb89-8c56-1236-6421-a14072f160f8",
+ "TraceID": "miTls0RttReadKeyExported"
},
{
- "UniquenessHash": "6c7d08b4-8448-c087-743f-73690c501946",
- "TraceID": "SchannelRead1RttStart"
+ "UniquenessHash": "dfaeb8b5-339e-c0e7-7289-15228d5f084a",
+ "TraceID": "miTlsHandshakeReadKeyExported"
},
{
- "UniquenessHash": "38faedd2-85a9-6145-38fb-11ec25de8777",
- "TraceID": "SchannelWriteHandshakeStart"
+ "UniquenessHash": "9d6d3263-01ca-a734-569a-07f0f9b5d3da",
+ "TraceID": "miTls1RttReadKeyExported"
},
{
- "UniquenessHash": "59d54505-6178-e02b-252e-a09308888444",
- "TraceID": "SchannelWrite1RttStart"
+ "UniquenessHash": "6baedb0e-b86a-72c2-b3ec-341ef8235aa9",
+ "TraceID": "miTls0RttWriteKeyExported"
},
{
- "UniquenessHash": "376c2752-488a-f7aa-91ef-900cfc5c9105",
- "TraceID": "SchannelProducedData"
+ "UniquenessHash": "f42df196-45dc-9a31-96ef-31226467df0e",
+ "TraceID": "miTlsHandshakeWriteKeyExported"
},
{
- "UniquenessHash": "1197fc0e-03e3-58cf-6637-f912c96fa67b",
- "TraceID": "SchannelMissingData"
+ "UniquenessHash": "74e3e2f2-0fb6-e892-57ac-85fcda2a4a7a",
+ "TraceID": "miTls1RttWriteKeyExported"
},
{
- "UniquenessHash": "771d2d3f-b8cd-0a3d-ac59-eac4d476390e",
- "TraceID": "SchannelContextCleaningUp"
+ "UniquenessHash": "d4d7056c-435c-b5b8-900c-f95f770ddb9d",
+ "TraceID": "miTlsHandshakeWriteOffsetSet"
},
{
- "UniquenessHash": "d5458244-ce44-333d-c01e-4739a7e39567",
- "TraceID": "SchannelKeyReady"
+ "UniquenessHash": "dbd24fcc-7265-6088-8693-f8fdfc7030b5",
+ "TraceID": "miTls1RttWriteOffsetSet"
},
{
- "UniquenessHash": "531378ce-be9f-1fcd-1a80-62387ae2a844",
- "TraceID": "SchannelProcessingData_IgnoringTicket"
+ "UniquenessHash": "71ed54f4-e631-7f1d-2d2e-65e1b533d8e5",
+ "TraceID": "miTlsFfiProcesComplete"
},
{
- "UniquenessHash": "892901ea-49a8-594b-6e05-edb0fc36be3d",
- "TraceID": "miTlsInitialize"
+ "UniquenessHash": "0bd9bfa0-b1eb-3e4a-234b-bf10c2013d9c",
+ "TraceID": "miTlsOnCertSelect"
},
{
- "UniquenessHash": "912c1707-c315-0036-76ca-602ae12a94b7",
- "TraceID": "miTlsUninitialize"
+ "UniquenessHash": "36f092f6-9fee-e5ec-bd11-6e3418458161",
+ "TraceID": "miTlsOnNegotiate"
},
{
- "UniquenessHash": "e0e483e0-e15e-e93b-6ec0-cb084e300cb3",
- "TraceID": "miTlsLogSecret"
+ "UniquenessHash": "7f747d9f-de9d-f24e-44e1-a097950c0429",
+ "TraceID": "miTlsProcessServerAlpn"
},
{
- "UniquenessHash": "fc766c70-8cec-7846-ba14-63bc930b4e06",
- "TraceID": "miTlsFfiProcessFailed"
+ "UniquenessHash": "db04d0d6-a7a5-38c6-37a6-fa059a2b11f3",
+ "TraceID": "miTlsOnCertFormat"
},
{
- "UniquenessHash": "0e9054b4-02e7-dad9-6893-dd902ebb0dd4",
- "TraceID": "miTlsFfiGetHelloSummaryFailed"
+ "UniquenessHash": "e175542b-2cfb-6134-82ad-89a84cb3a964",
+ "TraceID": "miTlsOnCertSign"
},
{
- "UniquenessHash": "76420f88-75d8-6a13-f42b-bea06884e542",
- "TraceID": "miTlsCertValidationDisabled"
+ "UniquenessHash": "22fc0283-1a6e-1ee5-1c6e-901b14517e07",
+ "TraceID": "miTlsOnCertVerify"
},
{
- "UniquenessHash": "adbd41df-cab6-b314-1ceb-dc00def1c425",
- "TraceID": "miTlsCertSelected"
+ "UniquenessHash": "deb3fa41-4cad-e7b7-a02c-478a669346bd",
+ "TraceID": "miTlsRecvNewSessionTicket"
},
{
- "UniquenessHash": "0eb36a7a-47b3-271a-054b-94a5ebf6c257",
- "TraceID": "miTlsUsing0Rtt"
+ "UniquenessHash": "71d0a82e-145c-f936-f56e-7dcb4099b96e",
+ "TraceID": "TlsMessage"
+ },
+ {
+ "UniquenessHash": "9eac4540-061f-ff2b-c104-5c1e1b8b22b6",
+ "TraceID": "TlsError"
+ },
+ {
+ "UniquenessHash": "c7b17ffc-7649-6294-b6d0-cf4bbf4bc8cb",
+ "TraceID": "OpenSslAlert"
+ },
+ {
+ "UniquenessHash": "04956959-ecb5-9bea-dd79-ca22765f2c95",
+ "TraceID": "OpenSslHandshakeErrorStr"
},
{
- "UniquenessHash": "4cb2a299-89dc-7245-b116-4dcc9875d5fe",
- "TraceID": "miTlsProcess"
+ "UniquenessHash": "f80224e1-7ca4-27b8-154f-fc7e85e79ec7",
+ "TraceID": "OpenSslHandshakeError"
},
{
- "UniquenessHash": "54a1f582-7b8d-434a-143e-9df24a874f95",
- "TraceID": "miTlsSend0RttTicket"
+ "UniquenessHash": "c279cde0-f02f-b00b-6d26-e4b9b7a7f136",
+ "TraceID": "OpenSslAlpnNegotiationFailure"
},
{
- "UniquenessHash": "bdbaac9e-6abe-7c57-d354-df78a89838ce",
- "TraceID": "miTlsFfiProces"
+ "UniquenessHash": "9db25efa-f88e-4060-209f-1512595e2e48",
+ "TraceID": "OpenSslInvalidAlpnLength"
},
{
- "UniquenessHash": "27d4a0a4-4e32-0043-3d90-166d1b378f92",
- "TraceID": "miTlsFfiProcessResult"
+ "UniquenessHash": "ae3edb31-740c-da1e-7beb-1413f94a5af4",
+ "TraceID": "OpenSslNoMatchingAlpn"
},
{
- "UniquenessHash": "cbc269aa-13ca-8f88-d61e-db9403a335de",
- "TraceID": "miTlsHandshakeComplete"
+ "UniquenessHash": "b75cb1a1-4f18-b079-1f2f-c85b209e0bb2",
+ "TraceID": "OpenSslMissingTransportParameters"
},
{
- "UniquenessHash": "4833606e-5d9c-82d2-86e1-875d57efdaf6",
- "TraceID": "miTlsEarlyDataRejected"
+ "UniquenessHash": "adea8fef-9bdf-e9d9-63f2-64fefaea1bde",
+ "TraceID": "OpenSslHandshakeDataStart"
},
{
- "UniquenessHash": "18f82502-f22b-ca5d-6393-cdd01c7bd873",
- "TraceID": "miTlsEarlyDataAccepted"
+ "UniquenessHash": "eaede67a-124b-3b3f-95ba-363d08546d2a",
+ "TraceID": "OpenSsl1RttDataStart"
},
{
- "UniquenessHash": "717e49dd-7942-4cae-f517-3f001e43e7b5",
- "TraceID": "miTlsEarlyDataNotAttempted"
+ "UniquenessHash": "c4429bfe-e7df-7623-090b-4ab09187da8f",
+ "TraceID": "OpenSslContextReset"
},
{
- "UniquenessHash": "21c32d30-e5c5-164a-e1ee-e9485d64813f",
- "TraceID": "miTlsEarlyDataAttempted"
+ "UniquenessHash": "a02a0e9d-57cd-0abf-1cd9-5a46076919b2",
+ "TraceID": "OpenSslHandshakeComplete"
},
{
- "UniquenessHash": "9a6e2c4c-9ed2-e2d4-56d1-f3453c281a20",
- "TraceID": "miTlsKeySchedule"
+ "UniquenessHash": "e9fe92dd-5582-f430-a385-ab63ebfd22c8",
+ "TraceID": "OpenSslNewEncryptionSecrets"
},
{
- "UniquenessHash": "a18ddb89-8c56-1236-6421-a14072f160f8",
- "TraceID": "miTls0RttReadKeyExported"
+ "UniquenessHash": "286da584-4057-1b9b-c98f-83b7b936af68",
+ "TraceID": "OpenSslAddHandshakeData"
},
{
- "UniquenessHash": "dfaeb8b5-339e-c0e7-7289-15228d5f084a",
- "TraceID": "miTlsHandshakeReadKeyExported"
+ "UniquenessHash": "e1629f75-f460-8951-5138-b0602b8f4db0",
+ "TraceID": "OpenSslContextCreated"
},
{
- "UniquenessHash": "9d6d3263-01ca-a734-569a-07f0f9b5d3da",
- "TraceID": "miTls1RttReadKeyExported"
+ "UniquenessHash": "a241a44d-19e5-3ddd-03b3-2e65b093720f",
+ "TraceID": "OpenSslContextCleaningUp"
},
{
- "UniquenessHash": "6baedb0e-b86a-72c2-b3ec-341ef8235aa9",
- "TraceID": "miTls0RttWriteKeyExported"
+ "UniquenessHash": "cc5e9bc2-359a-36f2-27f3-a319e5aee533",
+ "TraceID": "OpenSsslIgnoringTicket"
},
{
- "UniquenessHash": "f42df196-45dc-9a31-96ef-31226467df0e",
- "TraceID": "miTlsHandshakeWriteKeyExported"
+ "UniquenessHash": "ff332af9-4ba2-95a8-bb2c-c5c729be4ccd",
+ "TraceID": "OpenSslProcessData"
},
{
- "UniquenessHash": "74e3e2f2-0fb6-e892-57ac-85fcda2a4a7a",
- "TraceID": "miTls1RttWriteKeyExported"
+ "UniquenessHash": "7312d23f-2305-b54b-e1da-81597fabe281",
+ "TraceID": "TlsErrorStatus"
},
{
- "UniquenessHash": "d4d7056c-435c-b5b8-900c-f95f770ddb9d",
- "TraceID": "miTlsHandshakeWriteOffsetSet"
+ "UniquenessHash": "a0f9d887-3cc8-3dd3-f2c7-8143878abe6e",
+ "TraceID": "SchannelInitialized"
},
{
- "UniquenessHash": "dbd24fcc-7265-6088-8693-f8fdfc7030b5",
- "TraceID": "miTls1RttWriteOffsetSet"
+ "UniquenessHash": "b21a8d0d-c484-ac00-8081-90d5e8de9d1f",
+ "TraceID": "SchannelUninitialized"
},
{
- "UniquenessHash": "71ed54f4-e631-7f1d-2d2e-65e1b533d8e5",
- "TraceID": "miTlsFfiProcesComplete"
+ "UniquenessHash": "fd2f4dda-2c95-a301-6a5e-8dda859fd5c5",
+ "TraceID": "SchannelAchAsync"
},
{
- "UniquenessHash": "0bd9bfa0-b1eb-3e4a-234b-bf10c2013d9c",
- "TraceID": "miTlsOnCertSelect"
+ "UniquenessHash": "03c8b552-99e5-6c8b-a95f-ba31e7b3149b",
+ "TraceID": "SchannelAchWorkerStart"
},
{
- "UniquenessHash": "36f092f6-9fee-e5ec-bd11-6e3418458161",
- "TraceID": "miTlsOnNegotiate"
+ "UniquenessHash": "a1f31b13-badd-4de3-0620-3c8d413e7d49",
+ "TraceID": "SchannelAch"
},
{
- "UniquenessHash": "7f747d9f-de9d-f24e-44e1-a097950c0429",
- "TraceID": "miTlsProcessServerAlpn"
+ "UniquenessHash": "7a6ea81a-5491-2148-a007-711c5a641acc",
+ "TraceID": "SchannelAchCompleteInline"
},
{
- "UniquenessHash": "db04d0d6-a7a5-38c6-37a6-fa059a2b11f3",
- "TraceID": "miTlsOnCertFormat"
+ "UniquenessHash": "c04de4b9-64de-c415-dda2-b07f295f9897",
+ "TraceID": "SchannelLogSecret"
},
{
- "UniquenessHash": "e175542b-2cfb-6134-82ad-89a84cb3a964",
- "TraceID": "miTlsOnCertSign"
+ "UniquenessHash": "d1939214-2593-326a-34c8-0b05b89e7468",
+ "TraceID": "SchannelContextReset"
},
{
- "UniquenessHash": "22fc0283-1a6e-1ee5-1c6e-901b14517e07",
- "TraceID": "miTlsOnCertVerify"
+ "UniquenessHash": "799852e0-2f39-43d4-6888-98a33178b844",
+ "TraceID": "SchannelHandshakeComplete"
},
{
- "UniquenessHash": "deb3fa41-4cad-e7b7-a02c-478a669346bd",
- "TraceID": "miTlsRecvNewSessionTicket"
+ "UniquenessHash": "4fd0cb41-bb79-5d9a-c799-172bb467970d",
+ "TraceID": "SchannelConsumedBytes"
},
{
- "UniquenessHash": "f5af39c5-d069-02f5-f72f-13e3cc524620",
- "TraceID": "miTlsReadTicket"
+ "UniquenessHash": "eb856414-e192-4e49-572c-18139925d342",
+ "TraceID": "SchannelReadHandshakeStart"
},
{
- "UniquenessHash": "71d0a82e-145c-f936-f56e-7dcb4099b96e",
- "TraceID": "TlsMessage"
+ "UniquenessHash": "6c7d08b4-8448-c087-743f-73690c501946",
+ "TraceID": "SchannelRead1RttStart"
},
{
- "UniquenessHash": "f11702ec-fc18-f5bb-c732-90e621e3356d",
- "TraceID": "CertOpenSslGetProcessAddressFailure"
+ "UniquenessHash": "38faedd2-85a9-6145-38fb-11ec25de8777",
+ "TraceID": "SchannelWriteHandshakeStart"
},
{
- "UniquenessHash": "19716fe5-c9e9-01cf-c8fe-adaa001f1096",
- "TraceID": "DatapathOpenTcpSocketFailedAsync"
+ "UniquenessHash": "59d54505-6178-e02b-252e-a09308888444",
+ "TraceID": "SchannelWrite1RttStart"
},
{
- "UniquenessHash": "e199bbc2-944b-b1c2-6013-67e8818f2e13",
- "TraceID": "DatapathQueryRssScalabilityInfoFailed"
+ "UniquenessHash": "376c2752-488a-f7aa-91ef-900cfc5c9105",
+ "TraceID": "SchannelProducedData"
},
{
- "UniquenessHash": "3d57fa5f-a053-b239-52cb-febd154ffd26",
- "TraceID": "DatapathQueryRssScalabilityInfoFailedAsync"
+ "UniquenessHash": "1197fc0e-03e3-58cf-6637-f912c96fa67b",
+ "TraceID": "SchannelMissingData"
},
{
- "UniquenessHash": "d1b57f51-d0dc-7fe1-82ba-ccde7926e0cc",
- "TraceID": "DatapathOpenUdpSocketFailedAsync"
+ "UniquenessHash": "18fa206f-59b9-158c-7fa9-904ae6cb9663",
+ "TraceID": "SchannelContextCreated"
},
{
- "UniquenessHash": "8703c474-c698-92fe-cb33-28ca924e6b98",
- "TraceID": "DatapathQueryUdpSendMsgFailedAsync"
+ "UniquenessHash": "771d2d3f-b8cd-0a3d-ac59-eac4d476390e",
+ "TraceID": "SchannelContextCleaningUp"
},
{
- "UniquenessHash": "8f820ed1-ce50-5793-0bd4-ae115f172b66",
- "TraceID": "DatapathQueryRecvMaxCoalescedSizeFailedAsync"
+ "UniquenessHash": "d5458244-ce44-333d-c01e-4739a7e39567",
+ "TraceID": "SchannelKeyReady"
},
{
- "UniquenessHash": "b503f2a8-8676-cb38-1cab-733b1b6168c4",
- "TraceID": "DatapathDropEmptyMdl"
+ "UniquenessHash": "8fcfd765-ba83-53f1-a0bc-6992c51d42bd",
+ "TraceID": "SchannelIgnoringTicket"
},
{
- "UniquenessHash": "93ba4ba0-a056-754c-13bd-4d57d0f1d5f4",
- "TraceID": "DatapathDropMissingInfo"
+ "UniquenessHash": "183e91b7-6ad7-7a8b-0d77-94004bde6757",
+ "TraceID": "SchannelProcessingData"
},
{
- "UniquenessHash": "e2a52ac0-8148-8ba4-8ea5-bab2cbf1a43c",
- "TraceID": "DatapathDropTooBig"
+ "UniquenessHash": "64ef2389-7553-24d5-62f5-94fa1ab55eac",
+ "TraceID": "StubTlsCertValidationDisabled"
},
{
- "UniquenessHash": "177e3d8f-353c-329c-6b7c-638649a7d3ef",
- "TraceID": "DatapathDropMdlMapFailure"
+ "UniquenessHash": "ae0cc427-609d-ce4f-004d-6ef2c2d6c540",
+ "TraceID": "StubTlsContextReset"
},
{
- "UniquenessHash": "b940eb8b-74ec-f569-8167-e95ccc36510e",
- "TraceID": "DatapathFragmented"
+ "UniquenessHash": "2ca06c46-059c-c3e2-a6db-dc8f0d6292eb",
+ "TraceID": "StubTlsHandshakeComplete"
},
{
- "UniquenessHash": "a3d48581-00d1-fbbf-3ede-f8e9a4a22187",
- "TraceID": "DatapathDropAllocRecvContextFailure"
+ "UniquenessHash": "27a202b6-2090-aed6-26c8-4b193f0cb901",
+ "TraceID": "StubTlsConsumedData"
},
{
- "UniquenessHash": "9ab36cd5-f082-c444-283c-9b8354ecedb5",
- "TraceID": "DatapathUroExceeded"
+ "UniquenessHash": "8671265f-83a7-8d8f-4fac-ea0d14b9da84",
+ "TraceID": "StubTlsProducedData"
},
{
- "UniquenessHash": "37423b13-b9e3-7961-07d6-137252085127",
- "TraceID": "DatapathUnreachable"
+ "UniquenessHash": "d3788ab1-cacd-d552-e06c-2e7bee8b6da9",
+ "TraceID": "StubTlsContextCreated"
},
{
- "UniquenessHash": "bddd082e-fd86-4e92-2b3f-ed831dad41eb",
- "TraceID": "WindowsKernelLoaded"
+ "UniquenessHash": "16a301c5-8f8d-0d34-6fb9-0a608367097e",
+ "TraceID": "StubTlsUsing0Rtt"
},
{
- "UniquenessHash": "99b1ad83-0cbf-8b42-36e2-86e505bf6b76",
- "TraceID": "WindowsKernelUnloaded"
+ "UniquenessHash": "068a93f4-8ad9-2eae-53e9-44da62c39494",
+ "TraceID": "StubTlsContextCleaningUp"
},
{
- "UniquenessHash": "09622250-6902-8f51-16a4-41a81d9cfc14",
- "TraceID": "WindowsKernelInitialized"
+ "UniquenessHash": "9ca0fd16-2037-7132-3b3f-25691460af7f",
+ "TraceID": "StubTlsRecvNewSessionTicket"
},
{
- "UniquenessHash": "7d3c84e1-4c84-fd6e-19b0-5210f45719fe",
- "TraceID": "WindowsKernelUninitialized"
+ "UniquenessHash": "9b5f99a0-b1b6-bae7-12fd-89f89d1f1667",
+ "TraceID": "StubTlsProcessData"
},
{
"UniquenessHash": "ad38c379-0d77-0135-bf6a-19efa61ee493",
@@ -24526,14 +23527,6 @@
"UniquenessHash": "c14ddd31-b8a1-390e-bce4-3d10b373b5e2",
"TraceID": "TestControlClientCleaningUp"
},
- {
- "UniquenessHash": "f1c6c4be-1cc4-b59c-0a51-d20e49fa8f89",
- "TraceID": "TestControlClientInitialized"
- },
- {
- "UniquenessHash": "24c5bdc8-7fbf-3ec6-489b-b044097afe76",
- "TraceID": "TestControlSecConfigCreated"
- },
{
"UniquenessHash": "90748ce7-a1ac-f056-31f8-9d25493934c4",
"TraceID": "TestControlClientIoctl"
@@ -24571,72 +23564,76 @@
"TraceID": "TestDriverStopped"
},
{
- "UniquenessHash": "214be45a-42ba-44e1-05c2-f82f3200e671",
- "TraceID": "EncodeTPRetrySourceCID"
+ "UniquenessHash": "75b94a49-9bfe-7be0-7756-8f014aeeddba",
+ "TraceID": "TestCaseStart"
},
{
- "UniquenessHash": "cc5e9bc2-359a-36f2-27f3-a319e5aee533",
- "TraceID": "OpenSsslIgnoringTicket"
+ "UniquenessHash": "b79cc8df-4d28-f459-11b2-ba8160512a09",
+ "TraceID": "TestCaseEnd"
},
{
- "UniquenessHash": "8fcfd765-ba83-53f1-a0bc-6992c51d42bd",
- "TraceID": "SchannelIgnoringTicket"
+ "UniquenessHash": "cf26e1f0-583d-ec79-4a49-8e398f9883b0",
+ "TraceID": "TestCaseTStart"
},
{
- "UniquenessHash": "10ce7ee9-cfcc-e364-e24c-71e1913cb472",
- "TraceID": "PerfCountersRundown"
+ "UniquenessHash": "36ce89a9-c16e-d08a-4bea-f8e25c22d2ce",
+ "TraceID": "TestCaseTEnd"
},
{
- "UniquenessHash": "d3788ab1-cacd-d552-e06c-2e7bee8b6da9",
- "TraceID": "StubTlsContextCreated"
+ "UniquenessHash": "3928cc2f-84c2-48ac-845b-40781cf8021b",
+ "TraceID": "TestLogFailure"
},
{
- "UniquenessHash": "e1629f75-f460-8951-5138-b0602b8f4db0",
- "TraceID": "OpenSslContextCreated"
+ "UniquenessHash": "f4248703-23be-e418-2b90-c9670966f154",
+ "TraceID": "TestIgnoreConnectionTimeout"
},
{
- "UniquenessHash": "18fa206f-59b9-158c-7fa9-904ae6cb9663",
- "TraceID": "SchannelContextCreated"
+ "UniquenessHash": "76b54d32-001b-12e0-4e99-d29d2640eaeb",
+ "TraceID": "TestScopeEntry"
},
{
- "UniquenessHash": "77212d61-9925-bec1-4c5b-749d4fff7279",
- "TraceID": "InvalidInitialPackets"
+ "UniquenessHash": "dcfcaf50-a07f-c426-e2fb-f19b77811e65",
+ "TraceID": "TestScopeExit"
},
{
- "UniquenessHash": "946d7a4f-ca9f-b676-8fef-1661da5703cd",
- "TraceID": "ConnDropPacket"
+ "UniquenessHash": "1dfb652d-bf04-b3c5-5037-a1d7659e3d23",
+ "TraceID": "TestHookRegister"
},
{
- "UniquenessHash": "aff4ab67-a70e-f05b-c51d-9b97628c141e",
- "TraceID": "BindingDropPacket"
+ "UniquenessHash": "b00f19a5-597a-64dd-4bab-fa3e383ea688",
+ "TraceID": "TestHookUnregistering"
},
{
- "UniquenessHash": "7b8fcbcd-b097-9b8b-3d56-a2ca2d8b5cb8",
- "TraceID": "ConnDropPacketEx"
+ "UniquenessHash": "35fe1a4b-cb88-2161-ef4b-e6d0c78186f5",
+ "TraceID": "TestHookUnregistered"
},
{
- "UniquenessHash": "262f6b18-033f-5ef9-44eb-b2bebae16084",
- "TraceID": "BindingDropPacketEx"
+ "UniquenessHash": "ccf24f92-4b3c-0f17-5c84-1d454a788837",
+ "TraceID": "TestHookDropPacketRandom"
},
{
- "UniquenessHash": "fe3408e1-1fb0-c1b5-d7d9-61b116db0fe8",
- "TraceID": "SettingDumpPacingDefault"
+ "UniquenessHash": "ce814b3f-616f-bb09-3743-9c2879fd97a4",
+ "TraceID": "TestHookDropPacketSelective"
},
{
- "UniquenessHash": "b6d32b84-af0c-b1cb-5e97-a9fb84980e8d",
- "TraceID": "SettingDumpBidiStreamCount"
+ "UniquenessHash": "28d71381-a26c-3f0b-e2a9-1a97c3be08e2",
+ "TraceID": "TestHookReplaceAddrRecv"
},
{
- "UniquenessHash": "db025b70-a960-32f0-75b0-1cc495602e15",
- "TraceID": "SettingDumpUnidiStreamCount"
+ "UniquenessHash": "5d176d92-2974-c576-9dba-202db86131f2",
+ "TraceID": "TestHookReplaceAddrSend"
},
{
- "UniquenessHash": "49ee2ed0-1b90-a7f2-d8a6-230a287a07b7",
- "TraceID": "WorkerCreated"
+ "UniquenessHash": "861bbb4e-e371-4334-b45d-03199c1cacda",
+ "TraceID": "TestHookDropOldAddrSend"
},
{
- "UniquenessHash": "977ca100-03bb-010a-09ab-0a04d33a7dfd",
- "TraceID": "DatapathDropAllocRecvBufferFailure"
+ "UniquenessHash": "8b50bb5d-c66e-e93c-55cd-253b3af4d510",
+ "TraceID": "TestHookDropLimitAddrRecv"
+ },
+ {
+ "UniquenessHash": "78d1c2fe-fbce-b603-004e-f2026093416c",
+ "TraceID": "TestHookDropLimitAddrSend"
}
]
}
diff --git a/src/perf/bin/appmain.cpp b/src/perf/bin/appmain.cpp
index d97a6e4453..d0c50555d1 100644
--- a/src/perf/bin/appmain.cpp
+++ b/src/perf/bin/appmain.cpp
@@ -34,13 +34,13 @@ QuicUserMain(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[],
_In_ bool KeyboardWait,
- _In_ PerfSelfSignedConfiguration* SelfSignedConfig
+ _In_ const QUIC_CREDENTIAL_CONFIG* SelfSignedCredConfig
) {
EventScope StopEvent {true};
QUIC_STATUS Status;
- Status = QuicMainStart(argc, argv, &StopEvent.Handle, SelfSignedConfig);
+ Status = QuicMainStart(argc, argv, &StopEvent.Handle, SelfSignedCredConfig);
if (QUIC_FAILED(Status)) {
return Status;
}
@@ -66,7 +66,7 @@ QuicKernelMain(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[],
_In_ bool /*KeyboardWait*/,
- _In_ QUIC_SEC_CONFIG_PARAMS* SelfSignedParams
+ _In_ const QUIC_CREDENTIAL_CONFIG* SelfSignedParams
) {
size_t TotalLength = sizeof(argc);
@@ -132,7 +132,7 @@ QuicKernelMain(
return QUIC_STATUS_INVALID_STATE;
}
- if (!DriverClient.Initialize(SelfSignedParams, QUIC_DRIVER_NAME)) {
+ if (!DriverClient.Initialize((QUIC_CERTIFICATE_HASH*)(SelfSignedParams + 1), QUIC_DRIVER_NAME)) {
printf("Intializing Driver Client Failed.\n");
DriverService.Uninitialize();
QUIC_FREE(Data);
@@ -197,8 +197,7 @@ main(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[]
) {
- QUIC_SEC_CONFIG_PARAMS* SelfSignedParams = nullptr;
- PerfSelfSignedConfiguration SelfSignedConfig;
+ const QUIC_CREDENTIAL_CONFIG* SelfSignedCredConfig = nullptr;
QUIC_STATUS RetVal = 0;
bool TestingKernelMode = false;
bool KeyboardWait = false;
@@ -223,33 +222,31 @@ main(
}
}
- SelfSignedParams =
+ SelfSignedCredConfig =
QuicPlatGetSelfSignedCert(
TestingKernelMode ?
QUIC_SELF_SIGN_CERT_MACHINE :
QUIC_SELF_SIGN_CERT_USER);
- if (!SelfSignedParams) {
+ if (!SelfSignedCredConfig) {
printf("Creating self signed certificate failed\n");
RetVal = QUIC_STATUS_INTERNAL_ERROR;
goto Exit;
}
- SelfSignedConfig.SelfSignedParams = SelfSignedParams;
-
if (TestingKernelMode) {
#ifdef _WIN32
printf("Entering kernel mode main\n");
- RetVal = QuicKernelMain(argc, argv, KeyboardWait, SelfSignedParams);
+ RetVal = QuicKernelMain(argc, argv, KeyboardWait, SelfSignedCredConfig);
#else
QUIC_FRE_ASSERT(FALSE);
#endif
} else {
- RetVal = QuicUserMain(argc, argv, KeyboardWait, &SelfSignedConfig);
+ RetVal = QuicUserMain(argc, argv, KeyboardWait, SelfSignedCredConfig);
}
Exit:
- if (SelfSignedParams) {
- QuicPlatFreeSelfSignedCert(SelfSignedParams);
+ if (SelfSignedCredConfig) {
+ QuicPlatFreeSelfSignedCert(SelfSignedCredConfig);
}
QuicPlatformUninitialize();
diff --git a/src/perf/bin/drvmain.cpp b/src/perf/bin/drvmain.cpp
index ebfccca7eb..665f756c03 100644
--- a/src/perf/bin/drvmain.cpp
+++ b/src/perf/bin/drvmain.cpp
@@ -33,7 +33,8 @@ WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUIC_DEVICE_EXTENSION, QuicPerfCtlGetDeviceCo
typedef struct QUIC_DRIVER_CLIENT {
LIST_ENTRY Link;
- PerfSelfSignedConfiguration SelfSignedConfiguration;
+ QUIC_CREDENTIAL_CONFIG SelfSignedCredConfig;
+ QUIC_CERTIFICATE_HASH SelfSignedCertHash;
bool SelfSignedValid;
QUIC_EVENT StopEvent;
WDFREQUEST Request;
@@ -525,7 +526,10 @@ QuicPerfCtlSetSecurityConfig(
_In_ const QUIC_CERTIFICATE_HASH* CertHash
)
{
- Client->SelfSignedConfiguration.SelfSignedSecurityHash = *CertHash;
+ Client->SelfSignedCredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH;
+ Client->SelfSignedCredConfig.Flags = QUIC_CREDENTIAL_FLAG_NONE;
+ Client->SelfSignedCredConfig.CertificateHash = &Client->SelfSignedCertHash;
+ RtlCopyMemory(&Client->SelfSignedCertHash.ShaHash, CertHash, sizeof(QUIC_CERTIFICATE_HASH));
Client->SelfSignedValid = true;
return QUIC_STATUS_SUCCESS;
}
@@ -659,7 +663,7 @@ QuicPerfCtlStart(
(int)Length,
Argv,
&Client->StopEvent,
- &Client->SelfSignedConfiguration);
+ &Client->SelfSignedCredConfig);
delete[] Argv;
return Status;
@@ -758,7 +762,7 @@ QuicPerfCtlEvtIoDeviceControl(
Client,
FunctionCode);
- if (IoControlCode != IOCTL_QUIC_SEC_CONFIG &&
+ if (IoControlCode != IOCTL_QUIC_SET_CERT_HASH &&
!Client->SelfSignedValid) {
Status = STATUS_INVALID_DEVICE_STATE;
QuicTraceEvent(
@@ -769,7 +773,7 @@ QuicPerfCtlEvtIoDeviceControl(
}
switch (IoControlCode) {
- case IOCTL_QUIC_SEC_CONFIG:
+ case IOCTL_QUIC_SET_CERT_HASH:
QUIC_FRE_ASSERT(Params != nullptr);
Status =
QuicPerfCtlSetSecurityConfig(
diff --git a/src/perf/bin/perfioctls.h b/src/perf/bin/perfioctls.h
index 7ad726723c..c464a17cc8 100644
--- a/src/perf/bin/perfioctls.h
+++ b/src/perf/bin/perfioctls.h
@@ -17,7 +17,7 @@
#define IoGetFunctionCodeFromCtlCode( ControlCode ) (\
( ControlCode >> 2) & 0x00000FFF )
-#define IOCTL_QUIC_SEC_CONFIG \
+#define IOCTL_QUIC_SET_CERT_HASH \
QUIC_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_DATA)
#define IOCTL_QUIC_RUN_PERF \
diff --git a/src/perf/lib/HpsClient.cpp b/src/perf/lib/HpsClient.cpp
index 0ce2498e12..3854386ce4 100644
--- a/src/perf/lib/HpsClient.cpp
+++ b/src/perf/lib/HpsClient.cpp
@@ -44,8 +44,8 @@ HpsClient::Init(
return QUIC_STATUS_INVALID_PARAMETER;
}
- if (!Session.IsValid()) {
- return Session.GetInitStatus();
+ if (!Configuration.IsValid()) {
+ return Configuration.GetInitStatus();
}
ActiveProcCount = QuicProcActiveCount();
@@ -160,7 +160,7 @@ HpsClient::Wait(
WriteOutput("Result: %u HPS\n", HPS);
//WriteOutput("Result: %u HPS (%ull create, %ull start, %ull complete)\n",
// HPS, CreatedConnections, StartedConnections, CompletedConnections);
- Session.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
+ Registration.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
return QUIC_STATUS_SUCCESS;
}
@@ -224,7 +224,7 @@ HpsClient::StartConnection(
QUIC_STATUS Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
Handler,
Context,
&Scope.Connection);
@@ -237,21 +237,6 @@ HpsClient::StartConnection(
InterlockedIncrement64((int64_t*)&CreatedConnections);
- uint32_t SecFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- Status =
- MsQuic->SetParam(
- Scope.Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(SecFlags),
- &SecFlags);
- if (QUIC_FAILED(Status)) {
- if (!Shutdown) {
- WriteOutput("SetParam(CONN_CERT_VALIDATION_FLAGS) failed, 0x%x\n", Status);
- }
- return;
- }
-
BOOLEAN Opt = TRUE;
Status =
MsQuic->SetParam(
@@ -303,6 +288,7 @@ HpsClient::StartConnection(
Status =
MsQuic->ConnectionStart(
Scope.Connection,
+ Configuration,
QUIC_ADDRESS_FAMILY_UNSPEC,
Target.get(),
Port);
diff --git a/src/perf/lib/HpsClient.h b/src/perf/lib/HpsClient.h
index 09b6177890..260764e283 100644
--- a/src/perf/lib/HpsClient.h
+++ b/src/perf/lib/HpsClient.h
@@ -82,13 +82,15 @@ class HpsClient : public PerfBase {
HpsWorkerContext Contexts[HPS_MAX_WORKER_COUNT];
MsQuicRegistration Registration;
- MsQuicSession Session {
+ MsQuicConfiguration Configuration {
Registration,
MsQuicAlpn(PERF_ALPN),
MsQuicSettings()
.SetDisconnectTimeoutMs(PERF_DEFAULT_DISCONNECT_TIMEOUT)
.SetIdleTimeoutMs(HPS_DEFAULT_IDLE_TIMEOUT),
- true};
+ MsQuicCredentialConfig(
+ QUIC_CREDENTIAL_FLAG_CLIENT |
+ QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION)};
uint32_t ActiveProcCount;
uint16_t Port {PERF_DEFAULT_PORT};
UniquePtr Target;
diff --git a/src/perf/lib/PerfHelpers.h b/src/perf/lib/PerfHelpers.h
index 0520910f62..0f8bbbf78c 100644
--- a/src/perf/lib/PerfHelpers.h
+++ b/src/perf/lib/PerfHelpers.h
@@ -34,14 +34,6 @@
#include
#endif
-struct PerfSelfSignedConfiguration {
-#ifdef _KERNEL_MODE
- QUIC_CERTIFICATE_HASH SelfSignedSecurityHash;
-#else
- QUIC_SEC_CONFIG_PARAMS* SelfSignedParams;
-#endif
-};
-
#define QUIC_TEST_SESSION_CLOSED 1
extern
@@ -50,7 +42,7 @@ QuicMainStart(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[],
_In_ QUIC_EVENT* StopEvent,
- _In_ PerfSelfSignedConfiguration* SelfSignedConfig
+ _In_ const QUIC_CREDENTIAL_CONFIG* SelfSignedCredConfig
);
extern
@@ -108,7 +100,7 @@ WriteOutput(
#endif
}
-struct PerfSecurityConfig {
+/*struct PerfSecurityConfig {
QUIC_STATUS Initialize(int argc, char** argv, const MsQuicRegistration& Registration, PerfSelfSignedConfiguration* Config) {
uint16_t useSelfSigned = 0;
if (TryGetValue(argc, argv, "selfsign", &useSelfSigned)) {
@@ -173,7 +165,7 @@ struct PerfSecurityConfig {
operator QUIC_SEC_CONFIG*() const { return SecurityConfig; }
QUIC_SEC_CONFIG* SecurityConfig {nullptr};
-};
+};*/
struct CountHelper {
long RefCount;
diff --git a/src/perf/lib/PerfServer.cpp b/src/perf/lib/PerfServer.cpp
index 1710b0ce4c..7348b77a7b 100644
--- a/src/perf/lib/PerfServer.cpp
+++ b/src/perf/lib/PerfServer.cpp
@@ -43,18 +43,12 @@ PerfServer::Init(
return QUIC_STATUS_INVALID_PARAMETER;
}
- if (!Listener.IsValid()) {
- return Listener.GetInitStatus();
+ if (QUIC_FAILED(InitStatus)) {
+ return InitStatus;
}
TryGetValue(argc, argv, "port", &Port);
- QUIC_STATUS Status = SecurityConfig.Initialize(argc, argv, Registration, SelfSignedConfig);
- if (QUIC_FAILED(Status)) {
- PrintHelp();
- return Status;
- }
-
DataBuffer = (QUIC_BUFFER*)QUIC_ALLOC_NONPAGED(sizeof(QUIC_BUFFER) + PERF_DEFAULT_IO_SIZE);
if (!DataBuffer) {
return QUIC_STATUS_OUT_OF_MEMORY;
@@ -80,6 +74,7 @@ PerfServer::Start(
return
Listener.Start(
+ Alpn,
&Address,
[](HQUIC Handle, void* Context, QUIC_LISTENER_EVENT* Event) -> QUIC_STATUS {
return ((PerfServer*)Context)->ListenerCallback(Handle, Event);
@@ -96,7 +91,7 @@ PerfServer::Wait(
} else {
QuicEventWaitForever(*StopEvent);
}
- Session.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
+ Registration.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
return QUIC_STATUS_SUCCESS;
}
@@ -105,6 +100,7 @@ PerfServer::ListenerCallback(
_In_ HQUIC /*ListenerHandle*/,
_Inout_ QUIC_LISTENER_EVENT* Event
) {
+ QUIC_STATUS Status = QUIC_STATUS_NOT_SUPPORTED;
switch (Event->Type) {
case QUIC_LISTENER_EVENT_NEW_CONNECTION: {
BOOLEAN value = TRUE;
@@ -125,11 +121,11 @@ PerfServer::ListenerCallback(
Event);
};
MsQuic->SetCallbackHandler(Event->NEW_CONNECTION.Connection, (void*)Handler, this);
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
+ Status = MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, Configuration);
break;
}
}
- return QUIC_STATUS_SUCCESS;
+ return Status;
}
QUIC_STATUS
diff --git a/src/perf/lib/PerfServer.h b/src/perf/lib/PerfServer.h
index d2d5f68757..abfa22447a 100644
--- a/src/perf/lib/PerfServer.h
+++ b/src/perf/lib/PerfServer.h
@@ -18,9 +18,12 @@
class PerfServer : public PerfBase {
public:
- PerfServer(
- _In_ PerfSelfSignedConfiguration* SelfSignedConfig
- ) : SelfSignedConfig{SelfSignedConfig} { }
+ PerfServer(const QUIC_CREDENTIAL_CONFIG* CredConfig) {
+ InitStatus =
+ Configuration.IsValid() ?
+ Configuration.LoadCredential(CredConfig) :
+ Configuration.GetInitStatus();
+ }
~PerfServer() override {
if (DataBuffer) {
@@ -91,19 +94,18 @@ class PerfServer : public PerfBase {
_In_ HQUIC StreamHandle
);
- MsQuicRegistration Registration;
- MsQuicSession Session {
+ QUIC_STATUS InitStatus;
+ MsQuicRegistration Registration {true};
+ MsQuicAlpn Alpn {PERF_ALPN};
+ MsQuicConfiguration Configuration {
Registration,
- MsQuicAlpn(PERF_ALPN),
+ Alpn,
MsQuicSettings()
.SetPeerBidiStreamCount(PERF_DEFAULT_STREAM_COUNT)
.SetPeerUnidiStreamCount(PERF_DEFAULT_STREAM_COUNT)
.SetDisconnectTimeoutMs(PERF_DEFAULT_DISCONNECT_TIMEOUT)
- .SetIdleTimeoutMs(PERF_DEFAULT_IDLE_TIMEOUT),
- true};
- MsQuicListener Listener {Session};
- PerfSelfSignedConfiguration* SelfSignedConfig;
- PerfSecurityConfig SecurityConfig;
+ .SetIdleTimeoutMs(PERF_DEFAULT_IDLE_TIMEOUT)};
+ MsQuicListener Listener {Registration};
uint16_t Port {PERF_DEFAULT_PORT};
QUIC_EVENT* StopEvent {nullptr};
QUIC_BUFFER* DataBuffer {nullptr};
diff --git a/src/perf/lib/RpsClient.cpp b/src/perf/lib/RpsClient.cpp
index d74ae66867..632e96f215 100644
--- a/src/perf/lib/RpsClient.cpp
+++ b/src/perf/lib/RpsClient.cpp
@@ -50,8 +50,8 @@ RpsClient::Init(
return QUIC_STATUS_INVALID_PARAMETER;
}
- if (!Session.IsValid()) {
- return Session.GetInitStatus();
+ if (!Configuration.IsValid()) {
+ return Configuration.GetInitStatus();
}
const char* target;
@@ -97,14 +97,14 @@ RpsClient::Start(
struct ScopeCleanup {
bool NeedsCleanup {true};
- MsQuicSession& Session;
- ScopeCleanup(MsQuicSession &_Session) : Session(_Session) { }
+ MsQuicRegistration& Registration;
+ ScopeCleanup(MsQuicRegistration &_Registration) : Registration(_Registration) { }
~ScopeCleanup() {
if (NeedsCleanup) {
- Session.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
+ Registration.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
}
}
- } Scope(Session);
+ } Scope(Registration);
QUIC_CONNECTION_CALLBACK_HANDLER Handler =
[](HQUIC Conn, void* Context, QUIC_CONNECTION_EVENT* Event) -> QUIC_STATUS {
@@ -142,7 +142,7 @@ RpsClient::Start(
Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
Handler,
this,
&Connection);
@@ -151,35 +151,7 @@ RpsClient::Start(
return Status;
}
- uint32_t SecFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- Status =
- MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(SecFlags),
- &SecFlags);
- if (QUIC_FAILED(Status)) {
- MsQuic->ConnectionClose(Connection);
- WriteOutput("SetParam(CONN_CERT_VALIDATION_FLAGS) failed, 0x%x\n", Status);
- return Status;
- }
-
- BOOLEAN Opt = FALSE;
- Status =
- MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(Opt),
- &Opt);
- if (QUIC_FAILED(Status)) {
- MsQuic->ConnectionClose(Connection);
- WriteOutput("SetParam(CONN_SEND_BUFFERING) failed, 0x%x\n", Status);
- return Status;
- }
-
- Opt = TRUE;
+ BOOLEAN Opt = TRUE;
Status =
MsQuic->SetParam(
Connection,
@@ -211,6 +183,7 @@ RpsClient::Start(
Status =
MsQuic->ConnectionStart(
Connection,
+ Configuration,
QUIC_ADDRESS_FAMILY_UNSPEC,
Target.get(),
Port);
diff --git a/src/perf/lib/RpsClient.h b/src/perf/lib/RpsClient.h
index a4f6575d0e..df67e1d366 100644
--- a/src/perf/lib/RpsClient.h
+++ b/src/perf/lib/RpsClient.h
@@ -65,14 +65,17 @@ class RpsClient : public PerfBase {
_In_ HQUIC Handle
);
- MsQuicRegistration Registration;
- MsQuicSession Session {
+ MsQuicRegistration Registration {true};
+ MsQuicConfiguration Configuration {
Registration,
MsQuicAlpn(PERF_ALPN),
MsQuicSettings()
.SetDisconnectTimeoutMs(PERF_DEFAULT_DISCONNECT_TIMEOUT)
- .SetIdleTimeoutMs(PERF_DEFAULT_IDLE_TIMEOUT),
- true};
+ .SetIdleTimeoutMs(PERF_DEFAULT_IDLE_TIMEOUT)
+ .SetSendBufferingEnabled(false),
+ MsQuicCredentialConfig(
+ QUIC_CREDENTIAL_FLAG_CLIENT |
+ QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION)};
uint16_t Port {PERF_DEFAULT_PORT};
UniquePtr Target;
uint32_t RunTime {RPS_DEFAULT_RUN_TIME};
diff --git a/src/perf/lib/ThroughputClient.cpp b/src/perf/lib/ThroughputClient.cpp
index 1fed274b38..afa6273f37 100644
--- a/src/perf/lib/ThroughputClient.cpp
+++ b/src/perf/lib/ThroughputClient.cpp
@@ -51,8 +51,8 @@ ThroughputClient::Init(
return QUIC_STATUS_INVALID_PARAMETER;
}
- if (!Session.IsValid()) {
- return Session.GetInitStatus();
+ if (!Configuration.IsValid()) {
+ return Configuration.GetInitStatus();
}
const char* Target = nullptr;
@@ -154,7 +154,7 @@ ThroughputClient::Start(
}
QUIC_STATUS Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
[](HQUIC Handle, void* Context, QUIC_CONNECTION_EVENT* Event) -> QUIC_STATUS {
ConnectionData* ConnData = (ConnectionData*)Context;
return ConnData->Client->
@@ -173,28 +173,17 @@ ThroughputClient::Start(
Shutdown.ConnHandle = ConnData->Connection.Handle;
- uint32_t SecFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- Status =
- MsQuic->SetParam(
- ConnData->Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(SecFlags),
- &SecFlags);
- if (QUIC_FAILED(Status)) {
- WriteOutput("Failed Cert Validation Disable 0x%x\n", Status);
- return Status;
- }
-
if (!UseSendBuffer) {
- BOOLEAN Opt = FALSE;
+ QUIC_SETTINGS Settings{0};
+ Settings.SendBufferingEnabled = FALSE;
+ Settings.IsSet.SendBufferingEnabled = TRUE;
Status =
MsQuic->SetParam(
ConnData->Connection,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(Opt),
- &Opt);
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings);
if (QUIC_FAILED(Status)) {
WriteOutput("Failed Disable Send Buffering 0x%x\n", Status);
return Status;
@@ -275,6 +264,7 @@ ThroughputClient::Start(
Status =
MsQuic->ConnectionStart(
ConnData->Connection,
+ Configuration,
RemoteFamily,
TargetData.get(),
Port);
diff --git a/src/perf/lib/ThroughputClient.h b/src/perf/lib/ThroughputClient.h
index 61c2f295c4..ccf00be2e1 100644
--- a/src/perf/lib/ThroughputClient.h
+++ b/src/perf/lib/ThroughputClient.h
@@ -90,13 +90,15 @@ class ThroughputClient : public PerfBase {
_In_ StreamContext* Context
);
- MsQuicRegistration Registration;
- MsQuicSession Session {
+ MsQuicRegistration Registration {true};
+ MsQuicConfiguration Configuration {
Registration,
MsQuicAlpn(PERF_ALPN),
MsQuicSettings()
.SetIdleTimeoutMs(TPUT_DEFAULT_IDLE_TIMEOUT),
- true};
+ MsQuicCredentialConfig(
+ QUIC_CREDENTIAL_FLAG_CLIENT |
+ QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION)};
QuicPoolAllocator StreamContextAllocator;
QuicPoolAllocator ConnectionDataAllocator;
UniquePtr TargetData;
diff --git a/src/perf/lib/quicmain.cpp b/src/perf/lib/quicmain.cpp
index ffbe4d0b74..a525355473 100644
--- a/src/perf/lib/quicmain.cpp
+++ b/src/perf/lib/quicmain.cpp
@@ -60,7 +60,7 @@ QuicMainStart(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[],
_In_ QUIC_EVENT* StopEvent,
- _In_ PerfSelfSignedConfiguration* SelfSignedConfig
+ _In_ const QUIC_CREDENTIAL_CONFIG* SelfSignedCredConfig
) {
argc--; argv++; // Skip app name
@@ -101,7 +101,7 @@ QuicMainStart(
}
if (ServerMode) {
- TestToRun = new(std::nothrow) PerfServer(SelfSignedConfig);
+ TestToRun = new(std::nothrow) PerfServer(SelfSignedCredConfig);
} else {
diff --git a/src/platform/cert_capi.c b/src/platform/cert_capi.c
index 67c37e5ff5..db765af6f9 100644
--- a/src/platform/cert_capi.c
+++ b/src/platform/cert_capi.c
@@ -402,7 +402,7 @@ QUIC_STATUS
QuicCertLookupHash(
_In_opt_ const QUIC_CERTIFICATE_HASH* CertHash,
_In_opt_z_ const char* Principal,
- _Out_ QUIC_CERT** NewCertificate
+ _Out_ QUIC_CERTIFICATE** NewCertificate
)
{
QUIC_STATUS Status;
@@ -433,7 +433,7 @@ QuicCertLookupHash(
}
Status = QUIC_STATUS_SUCCESS;
- *NewCertificate = (QUIC_CERT*)CertCtx;
+ *NewCertificate = (QUIC_CERTIFICATE*)CertCtx;
Exit:
@@ -448,7 +448,7 @@ QUIC_STATUS
QuicCertLookupHashStore(
_In_ const QUIC_CERTIFICATE_HASH_STORE* CertHashStore,
_In_opt_z_ const char* Principal,
- _Out_ QUIC_CERT** NewCertificate
+ _Out_ QUIC_CERTIFICATE** NewCertificate
)
{
QUIC_STATUS Status;
@@ -488,7 +488,7 @@ QuicCertLookupHashStore(
}
Status = QUIC_STATUS_SUCCESS;
- *NewCertificate = (QUIC_CERT*)CertCtx;
+ *NewCertificate = (QUIC_CERTIFICATE*)CertCtx;
Exit:
@@ -501,41 +501,39 @@ QuicCertLookupHashStore(
QUIC_STATUS
QuicCertCreate(
- _In_ uint32_t Flags,
- _In_opt_ void* CertConfig,
- _In_opt_z_ const char* Principal,
- _Out_ QUIC_CERT** NewCertificate
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _Out_ QUIC_CERTIFICATE** NewCertificate
)
{
QUIC_STATUS Status;
- if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH) {
- if (CertConfig == NULL && Principal == NULL) {
+ if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH) {
+ if (CredConfig->CertificateContext == NULL && CredConfig->Principal == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
} else {
Status =
QuicCertLookupHash(
- (const QUIC_CERTIFICATE_HASH*)CertConfig,
- Principal,
+ CredConfig->CertificateHash,
+ CredConfig->Principal,
NewCertificate);
}
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE) {
- if (CertConfig == NULL) {
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE) {
+ if (CredConfig->CertificateHashStore == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
} else {
Status =
QuicCertLookupHashStore(
- (const QUIC_CERTIFICATE_HASH_STORE*)CertConfig,
- Principal,
+ CredConfig->CertificateHashStore,
+ CredConfig->Principal,
NewCertificate);
}
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT) {
- if (CertConfig == NULL) {
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT) {
+ if (CredConfig->CertificateContext == NULL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
} else {
- *NewCertificate = (QUIC_CERT*)CertConfig;
+ *NewCertificate = (QUIC_CERTIFICATE*)CredConfig->CertificateContext;
Status = QUIC_STATUS_SUCCESS;
}
@@ -548,7 +546,7 @@ QuicCertCreate(
void
QuicCertFree(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
)
{
(void)CertFreeCertificateContext((PCERT_CONTEXT)Certificate);
@@ -591,7 +589,7 @@ QuicCertSelect(
}
_Success_(return != NULL)
-QUIC_CERT*
+QUIC_CERTIFICATE*
QuicCertParseChain(
_In_ size_t ChainBufferLength,
_In_reads_(ChainBufferLength) const BYTE *ChainBuffer
@@ -679,13 +677,13 @@ QuicCertParseChain(
CertCloseStore(TempStore, 0);
}
- return (QUIC_CERT*)LeafCertCtx;
+ return (QUIC_CERTIFICATE*)LeafCertCtx;
}
_Success_(return != 0)
size_t
QuicCertFormat(
- _In_opt_ QUIC_CERT* Certificate,
+ _In_opt_ QUIC_CERTIFICATE* Certificate,
_In_ size_t BufferLength,
_Out_writes_to_(BufferLength, return)
BYTE* Buffer
@@ -842,7 +840,7 @@ QuicCertVerifyCertChainPolicy(
_Success_(return != FALSE)
BOOLEAN
QuicCertValidateChain(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_opt_z_ PCSTR Host,
_In_ uint32_t IgnoreFlags
)
@@ -938,7 +936,7 @@ QuicCertValidateChain(
_Success_(return != NULL)
void*
QuicCertGetPrivateKey(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
)
{
PCCERT_CONTEXT CertCtx = (PCCERT_CONTEXT)Certificate;
@@ -1116,7 +1114,7 @@ QuicCertSign(
_Success_(return != FALSE)
BOOLEAN
QuicCertVerify(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ const UINT16 SignatureAlgorithm,
_In_reads_(CertListToVerifyLength)
const BYTE *CertListToVerify,
diff --git a/src/platform/cert_openssl.c b/src/platform/cert_openssl.c
index 7721bf8847..4e93c6eb45 100644
--- a/src/platform/cert_openssl.c
+++ b/src/platform/cert_openssl.c
@@ -176,7 +176,7 @@ QuicCertLibraryUninitialize(
}
_Success_(return != NULL)
-QUIC_CERT*
+QUIC_CERTIFICATE*
QuicCertSelect(
_In_reads_opt_(ServerNameIndiciationLength)
const char* ServerNameIndiciation,
@@ -200,11 +200,11 @@ QuicCertSelect(
QuicLockRelease(&miPKI.Lock);
- return (QUIC_CERT*)Certificate;
+ return (QUIC_CERTIFICATE*)Certificate;
}
_Success_(return != NULL)
-QUIC_CERT*
+QUIC_CERTIFICATE*
QuicCertParseChain(
_In_ size_t ChainBufferLength,
_In_reads_(ChainBufferLength) const BYTE *ChainBuffer
@@ -220,13 +220,13 @@ QuicCertParseChain(
QuicLockRelease(&miPKI.Lock);
- return (QUIC_CERT*)Certificate;
+ return (QUIC_CERTIFICATE*)Certificate;
}
_Success_(return != 0)
size_t
QuicCertFormat(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ size_t BufferLength,
_Out_writes_to_(BufferLength, return)
BYTE* Buffer
@@ -249,7 +249,7 @@ QuicCertFormat(
_Success_(return != FALSE)
BOOLEAN
QuicCertValidateChain(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_opt_z_ const char* Host,
_In_ uint32_t IgnoreFlags
)
@@ -272,7 +272,7 @@ QuicCertValidateChain(
_Success_(return != FALSE)
BOOLEAN
QuicCertSign(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ const UINT16 SignatureAlgorithm,
_In_reads_(CertListToBeSignedLength)
const BYTE *CertListToBeSigned,
@@ -303,7 +303,7 @@ QuicCertSign(
_Success_(return != FALSE)
BOOLEAN
QuicCertVerify(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ const UINT16 SignatureAlgorithm,
_In_reads_(CertListToBeSignedLength)
const BYTE *CertListToBeSigned,
diff --git a/src/platform/cert_stub.c b/src/platform/cert_stub.c
index 86fd8317ec..8390f5fc34 100644
--- a/src/platform/cert_stub.c
+++ b/src/platform/cert_stub.c
@@ -16,38 +16,36 @@
QUIC_STATUS
QuicCertCreate(
- _In_ uint32_t Flags,
- _In_opt_ void* CertConfig,
- _In_opt_z_ const char* Principal,
- _Out_ QUIC_CERT** NewCertificate
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _Out_ QUIC_CERTIFICATE** NewCertificate
)
{
- if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH) {
- if (CertConfig == NULL && Principal == NULL) {
+ if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH) {
+ if (CredConfig->CertificateHash == NULL && CredConfig->Principal == NULL) {
return QUIC_STATUS_INVALID_PARAMETER;
}
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE) {
- if (CertConfig == NULL) {
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE) {
+ if (CredConfig->CertificateHashStore == NULL) {
return QUIC_STATUS_INVALID_PARAMETER;
}
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT) {
- if (CertConfig == NULL) {
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT) {
+ if (CredConfig->CertificateContext == NULL) {
return QUIC_STATUS_INVALID_PARAMETER;
}
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE) {
- if (CertConfig == NULL) {
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE) {
+ if (CredConfig->CertificateFile == NULL) {
return QUIC_STATUS_INVALID_PARAMETER;
}
} else {
return QUIC_STATUS_INVALID_PARAMETER;
}
- *NewCertificate = (QUIC_CERT*)1;
+ *NewCertificate = (QUIC_CERTIFICATE*)1;
return QUIC_STATUS_SUCCESS;
}
void
QuicCertFree(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
)
{
UNREFERENCED_PARAMETER(Certificate);
@@ -56,7 +54,7 @@ QuicCertFree(
_Success_(return != FALSE)
BOOLEAN
QuicCertSelect(
- _In_opt_ QUIC_CERT* Certificate,
+ _In_opt_ QUIC_CERTIFICATE* Certificate,
_In_reads_(SignatureAlgorithmsLength)
const uint16_t *SignatureAlgorithms,
_In_ size_t SignatureAlgorithmsLength,
@@ -70,7 +68,7 @@ QuicCertSelect(
}
_Success_(return != NULL)
-QUIC_CERT*
+QUIC_CERTIFICATE*
QuicCertParseChain(
_In_ size_t ChainBufferLength,
_In_reads_(ChainBufferLength)
@@ -87,13 +85,13 @@ QuicCertParseChain(
if (ChainBufferLength < SIZEOF_CERT_CHAIN_LIST_LENGTH + CertLength) {
return NULL;
}
- return (QUIC_CERT*)1;
+ return (QUIC_CERTIFICATE*)1;
}
_Success_(return != 0)
size_t
QuicCertFormat(
- _In_opt_ QUIC_CERT* Certificate,
+ _In_opt_ QUIC_CERTIFICATE* Certificate,
_In_ size_t BufferLength,
_Out_writes_to_(BufferLength, return)
uint8_t* Buffer
@@ -111,7 +109,7 @@ QuicCertFormat(
_Success_(return != FALSE)
BOOLEAN
QuicCertValidateChain(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_opt_z_ const char* Host,
_In_ uint32_t IgnoreFlags
)
@@ -125,7 +123,7 @@ QuicCertValidateChain(
_Success_(return != NULL)
void*
QuicCertGetPrivateKey(
- _In_ QUIC_CERT* Certificate
+ _In_ QUIC_CERTIFICATE* Certificate
)
{
UNREFERENCED_PARAMETER(Certificate);
@@ -169,7 +167,7 @@ QuicCertSign(
_Success_(return != FALSE)
BOOLEAN
QuicCertVerify(
- _In_ QUIC_CERT* Certificate,
+ _In_ QUIC_CERTIFICATE* Certificate,
_In_ const uint16_t SignatureAlgorithm,
_In_reads_(CertListToBeSignedLength)
const uint8_t *CertListToBeSigned,
diff --git a/src/platform/platform_internal.h b/src/platform/platform_internal.h
index 3bea8eb607..50d71139de 100644
--- a/src/platform/platform_internal.h
+++ b/src/platform/platform_internal.h
@@ -21,7 +21,7 @@
#include
#include
-#define QUIC_SEC_CONFIG_FLAG_CERTIFICATE_NULL 0xF0000000 // Stub-only special case SEC_CONFIG_FLAG
+#define QUIC_CREDENTIAL_TYPE_NULL ((QUIC_CREDENTIAL_TYPE)0xF0000000) // Stub-only special case type
#ifdef QUIC_FUZZER
#include "msquic_fuzz.h"
diff --git a/src/platform/selfsign_capi.c b/src/platform/selfsign_capi.c
index 9daa88d0e4..a70624f030 100644
--- a/src/platform/selfsign_capi.c
+++ b/src/platform/selfsign_capi.c
@@ -924,23 +924,24 @@ FindOrCreateCertificate(
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG_PARAMS*
+const QUIC_CREDENTIAL_CONFIG*
QuicPlatGetSelfSignedCert(
_In_ QUIC_SELF_SIGN_CERT_TYPE Type
)
{
- QUIC_SEC_CONFIG_PARAMS* Params =
- HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(QUIC_SEC_CONFIG_PARAMS));
+ QUIC_CREDENTIAL_CONFIG* Params =
+ HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(QUIC_CREDENTIAL_CONFIG) + sizeof(QUIC_CERTIFICATE_HASH));
if (Params == NULL) {
return NULL;
}
- Params->Flags = QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT;
- Params->Certificate =
+ Params->Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT;
+ Params->Flags = QUIC_CREDENTIAL_FLAG_NONE;
+ Params->CertificateContext =
FindOrCreateCertificate(
Type == QUIC_SELF_SIGN_CERT_USER,
- Params->Thumbprint);
- if (Params->Certificate == NULL) {
+ (uint8_t*)(Params + 1));
+ if (Params->CertificateContext == NULL) {
HeapFree(GetProcessHeap(), 0, Params);
return NULL;
}
@@ -951,9 +952,9 @@ QuicPlatGetSelfSignedCert(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicPlatFreeSelfSignedCert(
- _In_ QUIC_SEC_CONFIG_PARAMS* Params
+ _In_ const QUIC_CREDENTIAL_CONFIG* Params
)
{
- FreeServerCertificate(Params->Certificate);
- HeapFree(GetProcessHeap(), 0, Params);
+ FreeServerCertificate(Params->CertificateContext);
+ HeapFree(GetProcessHeap(), 0, (void*)Params);
}
diff --git a/src/platform/selfsign_openssl.c b/src/platform/selfsign_openssl.c
index 36201e7b08..da8896f18e 100644
--- a/src/platform/selfsign_openssl.c
+++ b/src/platform/selfsign_openssl.c
@@ -273,8 +273,8 @@ static char* QuicTestPrivateKeyFilename = (char*)"localhost_key.pem";
#define MAX_PATH 50
#endif
-typedef struct QUIC_SEC_CONFIG_PARAMS_INTERNAL {
- QUIC_SEC_CONFIG_PARAMS;
+typedef struct QUIC_CREDENTIAL_CONFIG_INTERNAL {
+ QUIC_CREDENTIAL_CONFIG;
QUIC_CERTIFICATE_FILE CertFile;
#ifdef _WIN32
char TempPath [MAX_PATH];
@@ -284,27 +284,27 @@ typedef struct QUIC_SEC_CONFIG_PARAMS_INTERNAL {
char CertFilepath[MAX_PATH];
char PrivateKeyFilepath[MAX_PATH];
-} QUIC_SEC_CONFIG_PARAMS_INTERNAL;
+} QUIC_CREDENTIAL_CONFIG_INTERNAL;
#define TEMP_DIR_TEMPLATE "/tmp/quictest.XXXXXX"
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG_PARAMS*
+const QUIC_CREDENTIAL_CONFIG*
QuicPlatGetSelfSignedCert(
_In_ QUIC_SELF_SIGN_CERT_TYPE Type
)
{
UNREFERENCED_PARAMETER(Type);
- QUIC_SEC_CONFIG_PARAMS_INTERNAL* Params =
- malloc(sizeof(QUIC_SEC_CONFIG_PARAMS_INTERNAL) + sizeof(TEMP_DIR_TEMPLATE));
+ QUIC_CREDENTIAL_CONFIG_INTERNAL* Params =
+ malloc(sizeof(QUIC_CREDENTIAL_CONFIG_INTERNAL) + sizeof(TEMP_DIR_TEMPLATE));
if (Params == NULL) {
return NULL;
}
QuicZeroMemory(Params, sizeof(*Params));
- Params->Flags = QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE;
- Params->Certificate = &Params->CertFile;
+ Params->Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE;
+ Params->CertificateFile = &Params->CertFile;
Params->CertFile.CertificateFile = Params->CertFilepath;
Params->CertFile.PrivateKeyFile = Params->PrivateKeyFilepath;
@@ -394,7 +394,7 @@ QuicPlatGetSelfSignedCert(
goto Error;
}
- return (QUIC_SEC_CONFIG_PARAMS*)Params;
+ return (QUIC_CREDENTIAL_CONFIG*)Params;
Error:
@@ -410,11 +410,11 @@ QuicPlatGetSelfSignedCert(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicPlatFreeSelfSignedCert(
- _In_ QUIC_SEC_CONFIG_PARAMS* _Params
+ _In_ const QUIC_CREDENTIAL_CONFIG* _Params
)
{
- QUIC_SEC_CONFIG_PARAMS_INTERNAL* Params =
- (QUIC_SEC_CONFIG_PARAMS_INTERNAL*)_Params;
+ QUIC_CREDENTIAL_CONFIG_INTERNAL* Params =
+ (QUIC_CREDENTIAL_CONFIG_INTERNAL*)_Params;
#ifdef _WIN32
DeleteFileA(Params->CertFilepath);
diff --git a/src/platform/selfsign_stub.c b/src/platform/selfsign_stub.c
index c076ef4f67..67d8174ba8 100644
--- a/src/platform/selfsign_stub.c
+++ b/src/platform/selfsign_stub.c
@@ -17,17 +17,17 @@
#endif
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG_PARAMS*
+const QUIC_CREDENTIAL_CONFIG*
QuicPlatGetSelfSignedCert(
_In_ QUIC_SELF_SIGN_CERT_TYPE Type
)
{
UNREFERENCED_PARAMETER(Type);
- QUIC_SEC_CONFIG_PARAMS* Params = malloc(sizeof(QUIC_SEC_CONFIG_PARAMS));
+ QUIC_CREDENTIAL_CONFIG* Params = malloc(sizeof(QUIC_CREDENTIAL_CONFIG));
if (Params != NULL) {
QuicZeroMemory(Params, sizeof(*Params));
- Params->Flags = QUIC_SEC_CONFIG_FLAG_CERTIFICATE_NULL;
+ Params->Type = QUIC_CREDENTIAL_TYPE_NULL;
}
return Params;
}
@@ -35,8 +35,8 @@ QuicPlatGetSelfSignedCert(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicPlatFreeSelfSignedCert(
- _In_ QUIC_SEC_CONFIG_PARAMS* Params
+ _In_ const QUIC_CREDENTIAL_CONFIG* Params
)
{
- free(Params);
+ free((void*)Params);
}
diff --git a/src/platform/tls_mitls.c b/src/platform/tls_mitls.c
index 976e534698..dc4d02ceec 100644
--- a/src/platform/tls_mitls.c
+++ b/src/platform/tls_mitls.c
@@ -44,7 +44,7 @@ const QUIC_PACKET_KEY_TYPE miTlsKeyTypes[2][4] =
};
//
-// Callback for miTLS when a new ticket is ready.
+// Callback for miTLS when extensions are ready.
//
_IRQL_requires_max_(PASSIVE_LEVEL)
_Success_(return != TLS_nego_abort)
@@ -167,25 +167,13 @@ QuicPacketKeyCreate(
//
typedef struct QUIC_SEC_CONFIG {
- //
- // Rundown tracking the clean up of all server security configs.
- //
- QUIC_RUNDOWN_REF* CleanupRundown;
-
- //
- // Reference count to keep credentials alive long enough.
- //
- long RefCount;
-
- //
- // Configuration flags.
- //
- uint32_t Flags;
+ QUIC_CREDENTIAL_TYPE Type;
+ QUIC_CREDENTIAL_FLAGS Flags;
//
// The certificate context, used for signing.
//
- QUIC_CERT* Certificate;
+ QUIC_CERTIFICATE* Certificate;
void* PrivateKey;
//
@@ -196,69 +184,18 @@ typedef struct QUIC_SEC_CONFIG {
} QUIC_SEC_CONFIG;
-//
-// The TLS session.
-//
-typedef struct QUIC_TLS_SESSION {
-
- //
- // Total number of references on the TLS session. Only freed once all
- // references are released.
- //
- long RefCount;
-
- //
- // Lock protecting parallel access to the ticket store.
- //
- QUIC_RW_LOCK TicketStoreLock;
-
- //
- // The in memory ticket store for this session.
- //
- QUIC_HASHTABLE TicketStore;
-
-} QUIC_TLS_SESSION;
-
//
// Contiguous memory representation of a ticket.
//
typedef struct QUIC_TLS_TICKET {
- uint16_t ServerNameLength;
- uint16_t TicketLength;
- uint16_t SessionLength;
- _Field_size_(ServerNameLength + TicketLength + SessionLength)
+ uint32_t TicketLength;
+ uint32_t SessionLength;
+ _Field_size_(TicketLength + SessionLength)
uint8_t Buffer[0];
} QUIC_TLS_TICKET;
-//
-// Entry into the TLS ticket store.
-//
-typedef struct QUIC_TLS_TICKET_ENTRY {
-
- QUIC_HASHTABLE_ENTRY Entry;
- long RefCount;
- QUIC_TLS_TICKET Ticket;
-
-} QUIC_TLS_TICKET_ENTRY;
-
-//
-// Releases a reference on the TLS ticket, and frees it if it was the last ref.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsTicketRelease(
- _In_ QUIC_TLS_TICKET* Ticket
- )
-{
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- QUIC_CONTAINING_RECORD(Ticket, QUIC_TLS_TICKET_ENTRY, Ticket);
- if (InterlockedDecrement(&TicketEntry->RefCount) == 0) {
- QUIC_FREE(TicketEntry);
- }
-}
-
//
// The TLS interface context.
//
@@ -272,12 +209,7 @@ typedef struct QUIC_TLS {
//
// Indicates the client attempted 0-RTT.
//
- BOOLEAN EarlyDataAttempted;
-
- //
- // Flag indicating the server has sent an updated ticket.
- //
- BOOLEAN TicketReady : 1;
+ BOOLEAN EarlyDataAttempted : 1;
//
// Index into the miTlsKeyTypes array.
@@ -285,11 +217,6 @@ typedef struct QUIC_TLS {
uint8_t TlsKeySchedule : 1;
uint8_t TlsKeyScheduleSet : 1;
- //
- // Parent TLS session.
- //
- QUIC_TLS_SESSION* TlsSession;
-
//
// The TLS configuration information and credentials.
//
@@ -320,11 +247,6 @@ typedef struct QUIC_TLS {
//
int32_t CurrentWriterKey;
- //
- // Ticket from the ticket store.
- //
- QUIC_TLS_TICKET* Ticket;
-
//
// Process state for the outstanding process call.
//
@@ -336,7 +258,8 @@ typedef struct QUIC_TLS {
QUIC_CONNECTION* Connection;
QUIC_TLS_PROCESS_COMPLETE_CALLBACK_HANDLER ProcessCompleteCallback;
QUIC_TLS_RECEIVE_TP_CALLBACK_HANDLER ReceiveTPCallback;
- QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK_HANDLER ReceiveResumptionTicketCallback;
+ QUIC_TLS_RECEIVE_TICKET_CALLBACK_HANDLER ReceiveTicketCallback;
+
//
// miTLS Config.
//
@@ -452,457 +375,127 @@ QuicTlsLibraryUninitialize(
TlsFree(miTlsCurrentConnectionIndex);
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSecConfigDelete(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- if (SecurityConfig->PrivateKey != NULL) {
- QuicCertDeletePrivateKey(SecurityConfig->PrivateKey);
- }
- if (SecurityConfig->Certificate != NULL &&
- !(SecurityConfig->Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT)) {
- QuicCertFree(SecurityConfig->Certificate);
- }
- QUIC_RUNDOWN_REF* Rundown = SecurityConfig->CleanupRundown;
- QUIC_FREE(SecurityConfig);
- if (Rundown != NULL) {
- QuicRundownRelease(Rundown);
- }
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicTlsServerSecConfigCreate(
- _Inout_ QUIC_RUNDOWN_REF* Rundown,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
+QuicTlsSecConfigCreate(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
_In_opt_ void* Context,
_In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
)
{
- QUIC_STATUS Status;
- QUIC_SEC_CONFIG* SecurityConfig = NULL;
-
- if (!QuicRundownAcquire(Rundown)) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "Acquire sec config rundown failed");
- Status = QUIC_STATUS_INVALID_STATE;
- goto Error;
- }
-
-#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete).")
- SecurityConfig = QUIC_ALLOC_PAGED(sizeof(QUIC_SEC_CONFIG));
- if (SecurityConfig == NULL) {
- QuicRundownRelease(Rundown);
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- SecurityConfig->CleanupRundown = Rundown;
- SecurityConfig->Flags = Flags;
- SecurityConfig->RefCount = 1;
- SecurityConfig->Certificate = NULL;
- SecurityConfig->PrivateKey = NULL;
-
- Status =
- QuicCertCreate(
- Flags,
- Certificate,
- Principal,
- &SecurityConfig->Certificate);
- if (QUIC_FAILED(Status)) {
- goto Error;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS &&
+ CredConfig->AsyncHandler == NULL) {
+ return QUIC_STATUS_INVALID_PARAMETER;
}
- SecurityConfig->PrivateKey =
- QuicCertGetPrivateKey(SecurityConfig->Certificate);
- if (SecurityConfig->PrivateKey == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_ENABLE_OCSP) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported by this TLS implementation
}
- SecurityConfig->FormatLength =
- (uint16_t)QuicCertFormat(
- SecurityConfig->Certificate,
- sizeof(SecurityConfig->FormatBuffer),
- SecurityConfig->FormatBuffer);
-
- Status = QUIC_STATUS_SUCCESS;
-
- CompletionHandler(
- Context,
- Status,
- SecurityConfig);
- SecurityConfig = NULL;
-
-Error:
-
- if (SecurityConfig != NULL) {
- QuicTlsSecConfigDelete(SecurityConfig);
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported for client (yet)
+ }
+ } else {
+ if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_INVALID_PARAMETER; // Required for server
+ }
}
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsClientSecConfigCreate(
- _In_ uint32_t Flags,
- _Outptr_ QUIC_SEC_CONFIG** ClientConfig
- )
-{
- #pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete).")
+#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete).")
QUIC_SEC_CONFIG* SecurityConfig = QUIC_ALLOC_PAGED(sizeof(QUIC_SEC_CONFIG));
if (SecurityConfig == NULL) {
return QUIC_STATUS_OUT_OF_MEMORY;
}
- QuicZeroMemory(SecurityConfig, sizeof(*SecurityConfig));
- SecurityConfig->Flags = (uint32_t)Flags;
- SecurityConfig->RefCount = 1;
-
- *ClientConfig = SecurityConfig;
- return QUIC_STATUS_SUCCESS;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsSecConfigAddRef(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- InterlockedIncrement(&SecurityConfig->RefCount);
- return SecurityConfig;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-QuicTlsSecConfigRelease(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- if (InterlockedDecrement(&SecurityConfig->RefCount) == 0) {
- QuicTlsSecConfigDelete(SecurityConfig);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionInitialize(
- _Out_ QUIC_TLS_SESSION** NewTlsSession
- )
-{
- QUIC_STATUS Status;
- QUIC_TLS_SESSION* TlsSession = QUIC_ALLOC_PAGED(sizeof(QUIC_TLS_SESSION));
- if (TlsSession == NULL) {
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- if (!QuicHashtableInitializeEx(&TlsSession->TicketStore, QUIC_HASH_MIN_SIZE)) {
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- QuicRwLockInitialize(&TlsSession->TicketStoreLock);
- TlsSession->RefCount = 1;
-
- *NewTlsSession = TlsSession;
- TlsSession = NULL;
-
- Status = QUIC_STATUS_SUCCESS;
-
-Error:
+ SecurityConfig->Type = CredConfig->Type;
+ SecurityConfig->Flags = CredConfig->Flags;
+ SecurityConfig->Certificate = NULL;
+ SecurityConfig->PrivateKey = NULL;
+ SecurityConfig->FormatLength = 0;
- if (TlsSession != NULL) {
- QUIC_FREE(TlsSession);
- }
+ QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
- return Status;
-}
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionFree(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (TlsSession != NULL) {
-
- //
- // Enumerate and free all entries in the table.
- //
- QUIC_HASHTABLE_ENTRY* Entry;
- QUIC_HASHTABLE_ENUMERATOR Enumerator;
- QuicHashtableEnumerateBegin(&TlsSession->TicketStore, &Enumerator);
- while (TRUE) {
- Entry = QuicHashtableEnumerateNext(&TlsSession->TicketStore, &Enumerator);
- if (Entry == NULL) {
- QuicHashtableEnumerateEnd(&TlsSession->TicketStore, &Enumerator);
- break;
- }
- QuicHashtableRemove(&TlsSession->TicketStore, Entry, NULL);
- QUIC_FREE(Entry);
+ if (CredConfig->TicketKey != NULL &&
+ !FFI_mitls_set_sealing_key("AES256-GCM", (uint8_t*)CredConfig->TicketKey, 44)) {
+ QuicTraceEvent(
+ LibraryError,
+ "[ lib] ERROR, %s.",
+ "FFI_mitls_set_sealing_key failed");
+ Status = QUIC_STATUS_INVALID_STATE;
+ goto Error;
}
- QuicHashtableUninitialize(&TlsSession->TicketStore);
- QuicRwLockUninitialize(&TlsSession->TicketStoreLock);
- QUIC_FREE(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_SESSION*
-QuicTlsSessionAddRef(
- _In_ QUIC_TLS_SESSION* TlsSession
- )
-{
- InterlockedIncrement(&TlsSession->RefCount);
- return TlsSession;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionRelease(
- _In_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (InterlockedDecrement(&TlsSession->RefCount) == 0) {
- QuicTlsSessionFree(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionUninitialize(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (TlsSession != NULL) {
- QuicTlsSessionRelease(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionSetTicketKey(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_reads_bytes_(44)
- const void* Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession); // miTLS doesn't actually support sessions.
- if (!FFI_mitls_set_ticket_key("AES256-GCM", (uint8_t*)Buffer, 44)) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "FFI_mitls_set_ticket_key failed");
- return QUIC_STATUS_INVALID_STATE;
- }
- return QUIC_STATUS_SUCCESS;
-}
+ } else {
-//
-// Requires TlsSession->TicketStoreLock to be held (shared or exclusive).
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET_ENTRY*
-QuicTlsSessionLookupTicketEntry(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName,
- _In_ uint32_t TicketHash
- )
-{
- QUIC_HASHTABLE_LOOKUP_CONTEXT Context;
- QUIC_HASHTABLE_ENTRY* Entry =
- QuicHashtableLookup(&TlsSession->TicketStore, TicketHash, &Context);
-
- while (Entry != NULL) {
- QUIC_TLS_TICKET_ENTRY* Temp =
- QUIC_CONTAINING_RECORD(Entry, QUIC_TLS_TICKET_ENTRY, Entry);
- if (Temp->Ticket.ServerNameLength == ServerNameLength &&
- memcmp(Temp->Ticket.Buffer, ServerName, ServerNameLength) == 0) {
- return Temp;
+ if (CredConfig->TicketKey != NULL &&
+ !FFI_mitls_set_ticket_key("AES256-GCM", (uint8_t*)CredConfig->TicketKey, 44)) {
+ QuicTraceEvent(
+ LibraryError,
+ "[ lib] ERROR, %s.",
+ "FFI_mitls_set_ticket_key failed");
+ Status = QUIC_STATUS_INVALID_STATE;
+ goto Error;
}
- Entry = QuicHashtableLookupNext(&TlsSession->TicketStore, &Context);
- }
-
- return NULL;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionInsertTicketEntry(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ QUIC_TLS_TICKET_ENTRY* NewTicketEntry
- )
-{
- uint32_t TicketHash =
- QuicHashSimple(
- NewTicketEntry->Ticket.ServerNameLength,
- NewTicketEntry->Ticket.Buffer);
- QuicRwLockAcquireExclusive(&TlsSession->TicketStoreLock);
+ Status = QuicCertCreate(CredConfig, &SecurityConfig->Certificate);
+ if (QUIC_FAILED(Status)) {
+ goto Error;
+ }
- //
- // Since we only allow one entry per server name, we need to see if there
- // is already a ticket in the store, and if so, remove it.
- //
- QUIC_TLS_TICKET_ENTRY* OldTicketEntry =
- QuicTlsSessionLookupTicketEntry(
- TlsSession,
- NewTicketEntry->Ticket.ServerNameLength,
- (const char*)NewTicketEntry->Ticket.Buffer,
- TicketHash);
+ SecurityConfig->PrivateKey =
+ QuicCertGetPrivateKey(SecurityConfig->Certificate);
+ if (SecurityConfig->PrivateKey == NULL) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
- if (OldTicketEntry != NULL) {
- QuicHashtableRemove(
- &TlsSession->TicketStore, &OldTicketEntry->Entry, NULL);
+ SecurityConfig->FormatLength =
+ (uint16_t)QuicCertFormat(
+ SecurityConfig->Certificate,
+ sizeof(SecurityConfig->FormatBuffer),
+ SecurityConfig->FormatBuffer);
}
- //
- // Add the new ticket to the store.
- //
- QuicHashtableInsert(
- &TlsSession->TicketStore,
- &NewTicketEntry->Entry,
- TicketHash,
- NULL);
-
- QuicRwLockReleaseExclusive(&TlsSession->TicketStoreLock);
+ CompletionHandler(
+ CredConfig,
+ Context,
+ Status,
+ SecurityConfig);
+ SecurityConfig = NULL;
- if (OldTicketEntry != NULL) {
- //
- // Release the old ticket outside the lock.
- //
- QuicTlsTicketRelease(&OldTicketEntry->Ticket);
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ Status = QUIC_STATUS_PENDING;
+ } else {
+ Status = QUIC_STATUS_SUCCESS;
}
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET*
-QuicTlsSessionGetTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName
- )
-{
- uint32_t TicketHash =
- QuicHashSimple(ServerNameLength, (const uint8_t*)ServerName);
- QuicRwLockAcquireShared(&TlsSession->TicketStoreLock);
-
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- QuicTlsSessionLookupTicketEntry(
- TlsSession, ServerNameLength, ServerName, TicketHash);
+Error:
- if (TicketEntry != NULL) {
- InterlockedIncrement(&TicketEntry->RefCount);
+ if (SecurityConfig != NULL) {
+ QuicTlsSecConfigDelete(SecurityConfig);
}
- QuicRwLockReleaseShared(&TlsSession->TicketStoreLock);
-
- return TicketEntry == NULL ? NULL : &TicketEntry->Ticket;
+ return Status;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionAddTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const uint8_t * const Buffer
+void
+QuicTlsSecConfigDelete(
+ __drv_freesMem(ServerConfig) _Frees_ptr_ _In_
+ QUIC_SEC_CONFIG* SecurityConfig
)
{
- const QUIC_TLS_TICKET* const Ticket = (const QUIC_TLS_TICKET* const)Buffer;
-
- if (BufferLength < sizeof(QUIC_TLS_TICKET)) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
-
- uint32_t ExpectedBufferLength =
- sizeof(QUIC_TLS_TICKET) +
- Ticket->ServerNameLength +
- Ticket->TicketLength +
- Ticket->SessionLength;
-
- if (BufferLength < ExpectedBufferLength) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
-
- size_t TicketEntryLength =
- sizeof(QUIC_TLS_TICKET_ENTRY) +
- Ticket->ServerNameLength +
- Ticket->TicketLength +
- Ticket->SessionLength;
-
-#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (TLS Session is cleaned up).")
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- (QUIC_TLS_TICKET_ENTRY*)QUIC_ALLOC_PAGED(TicketEntryLength);
- if (TicketEntry == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_TICKET_ENTRY",
- TicketEntryLength);
- return QUIC_STATUS_OUT_OF_MEMORY;
+ if (SecurityConfig->PrivateKey != NULL) {
+ QuicCertDeletePrivateKey(SecurityConfig->PrivateKey);
}
-
- TicketEntry->RefCount = 1; // 1 for the store.
- memcpy(&TicketEntry->Ticket, Ticket, ExpectedBufferLength);
-
- QuicTlsSessionInsertTicketEntry(TlsSession, TicketEntry);
-
- return QUIC_STATUS_SUCCESS;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET*
-QuicTlsSessionCreateTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_z_ const char* ServerName,
- _In_ const mitls_ticket* miTlsTicket
- )
-{
- uint16_t ServerNameLength = (uint16_t)strlen(ServerName);
-
- size_t TicketEntryLength =
- sizeof(QUIC_TLS_TICKET_ENTRY) +
- ServerNameLength +
- miTlsTicket->ticket_len +
- miTlsTicket->session_len;
-
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- (QUIC_TLS_TICKET_ENTRY*)QUIC_ALLOC_PAGED(TicketEntryLength);
- if (TicketEntry == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_TICKET_ENTRY",
- TicketEntryLength);
- return NULL;
+ if (SecurityConfig->Certificate != NULL &&
+ (SecurityConfig->Type != QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT)) {
+ QuicCertFree(SecurityConfig->Certificate);
}
-
- TicketEntry->RefCount = 2; // 1 for the store, 1 for the return.
- TicketEntry->Ticket.ServerNameLength = ServerNameLength;
- TicketEntry->Ticket.TicketLength = (uint16_t)miTlsTicket->ticket_len;
- TicketEntry->Ticket.SessionLength = (uint16_t)miTlsTicket->session_len;
- memcpy(TicketEntry->Ticket.Buffer, ServerName, ServerNameLength);
- memcpy(TicketEntry->Ticket.Buffer + ServerNameLength, miTlsTicket->ticket, miTlsTicket->ticket_len);
- memcpy(TicketEntry->Ticket.Buffer + ServerNameLength + miTlsTicket->ticket_len, miTlsTicket->session, miTlsTicket->session_len);
-
- QuicTlsSessionInsertTicketEntry(TlsSession, TicketEntry);
-
- return &TicketEntry->Ticket;
+ QUIC_FREE(SecurityConfig);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -918,6 +511,7 @@ QuicTlsInitialize(
QUIC_DBG_ASSERT(Config != NULL);
QUIC_DBG_ASSERT(NewTlsContext != NULL);
+ QUIC_DBG_ASSERT(Config->SecConfig != NULL);
UNREFERENCED_PARAMETER(State);
TlsSetValue(miTlsCurrentConnectionIndex, Config->Connection);
@@ -939,13 +533,12 @@ QuicTlsInitialize(
// Initialize internal variables.
//
TlsContext->IsServer = Config->IsServer;
- TlsContext->TlsSession = QuicTlsSessionAddRef(Config->TlsSession);
- TlsContext->SecConfig = QuicTlsSecConfigAddRef(Config->SecConfig);
+ TlsContext->SecConfig = Config->SecConfig;
TlsContext->CurrentReaderKey = -1;
TlsContext->CurrentWriterKey = -1;
TlsContext->Connection = Config->Connection;
TlsContext->ProcessCompleteCallback = Config->ProcessCompleteCallback;
- TlsContext->ReceiveResumptionTicketCallback = Config->ReceiveResumptionCallback;
+ TlsContext->ReceiveTicketCallback = Config->ReceiveResumptionCallback;
TlsContext->ReceiveTPCallback = Config->ReceiveTPCallback;
TlsContext->Extensions[0].ext_type = TLS_EXTENSION_TYPE_APPLICATION_LAYER_PROTOCOL_NEGOTIATION;
@@ -970,6 +563,8 @@ QuicTlsInitialize(
if (Config->IsServer) {
+ QUIC_DBG_ASSERT(Config->ResumptionTicketBuffer == NULL);
+
TlsContext->miTlsConfig.is_server = TRUE;
TlsContext->miTlsConfig.callback_state = TlsContext;
@@ -1011,31 +606,32 @@ QuicTlsInitialize(
}
memcpy((char*)TlsContext->SNI, Config->ServerName, ServerNameLength + 1);
- //
- // Look up a 0-RTT ticket from TlsSession ticket store.
- //
- TlsContext->Ticket =
- QuicTlsSessionGetTicket(
- TlsContext->TlsSession,
- (uint16_t)ServerNameLength,
- Config->ServerName);
-
- if (TlsContext->Ticket != NULL) {
+ if (Config->ResumptionTicketBuffer != NULL) {
QuicTraceLogConnVerbose(
miTlsUsing0Rtt,
TlsContext->Connection,
"Using 0-RTT ticket.");
- TlsContext->miTlsTicket.ticket_len = TlsContext->Ticket->TicketLength;
- TlsContext->miTlsTicket.ticket =
- TlsContext->Ticket->Buffer + TlsContext->Ticket->ServerNameLength;
+ QUIC_TLS_TICKET* SerializedTicket =
+ (QUIC_TLS_TICKET*)Config->ResumptionTicketBuffer;
+ if (SerializedTicket->SessionLength + SerializedTicket->TicketLength
+ != Config->ResumptionTicketLength - sizeof(QUIC_TLS_TICKET)) {
+ QuicTraceEvent(
+ TlsError,
+ "[ tls][%p] ERROR, %s.",
+ TlsContext->Connection,
+ "0-RTT ticket is corrupt");
+ } else {
+ TlsContext->miTlsTicket.ticket_len = SerializedTicket->TicketLength;
+ TlsContext->miTlsTicket.ticket = SerializedTicket->Buffer;
- TlsContext->miTlsTicket.session_len = TlsContext->Ticket->SessionLength;
- TlsContext->miTlsTicket.session =
- TlsContext->miTlsTicket.ticket + TlsContext->Ticket->TicketLength;
+ TlsContext->miTlsTicket.session_len = SerializedTicket->SessionLength;
+ TlsContext->miTlsTicket.session =
+ SerializedTicket->Buffer + SerializedTicket->TicketLength;
- TlsContext->miTlsConfig.server_ticket = &TlsContext->miTlsTicket;
+ TlsContext->miTlsConfig.server_ticket = &TlsContext->miTlsTicket;
+ }
}
}
@@ -1071,11 +667,9 @@ QuicTlsInitialize(
Error:
if (QUIC_FAILED(Status)) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
if (TlsContext->SNI) {
QUIC_FREE(TlsContext->SNI);
}
- QuicTlsSessionRelease(TlsContext->TlsSession);
QUIC_FREE(TlsContext);
}
@@ -1094,12 +688,13 @@ QuicTlsUninitialize(
FFI_mitls_quic_free(TlsContext->miTlsState);
- if (TlsContext->Ticket != NULL) {
- QuicTlsTicketRelease(TlsContext->Ticket);
- }
-
- if (TlsContext->SecConfig != NULL) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
+ if (TlsContext->miTlsTicket.ticket != NULL) {
+ QUIC_TLS_TICKET* SerializedTicket =
+ CONTAINING_RECORD(
+ TlsContext->miTlsTicket.ticket,
+ QUIC_TLS_TICKET,
+ Buffer);
+ QUIC_FREE(SerializedTicket);
}
if (TlsContext->SNI != NULL) {
@@ -1110,7 +705,6 @@ QuicTlsUninitialize(
QUIC_FREE(TlsContext->Extensions[1].ext_data);
}
- QuicTlsSessionRelease(TlsContext->TlsSession);
QUIC_FREE(TlsContext);
}
}
@@ -1149,15 +743,6 @@ QuicTlsReset(
}
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsGetSecConfig(
- _In_ QUIC_TLS* TlsContext
- )
-{
- return QuicTlsSecConfigAddRef(TlsContext->SecConfig);
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_TLS_RESULT_FLAGS
QuicTlsProcessData(
@@ -1176,23 +761,23 @@ QuicTlsProcessData(
TlsSetValue(miTlsCurrentConnectionIndex, TlsContext->Connection);
- //
- // Validate buffer lengths.
- //
- if (TlsContext->BufferLength + *BufferLength > QUIC_TLS_MAX_MESSAGE_LENGTH) {
- ResultFlags = QUIC_TLS_RESULT_ERROR;
- QuicTraceEvent(
- TlsError,
- "[ tls][%p] ERROR, %s.",
- TlsContext->Connection,
- "TLS buffer too big");
- goto Error;
- }
-
TlsContext->State = State;
if (DataType == QUIC_TLS_CRYPTO_DATA) {
+ //
+ // Validate buffer lengths.
+ //
+ if (TlsContext->BufferLength + *BufferLength > QUIC_TLS_MAX_MESSAGE_LENGTH) {
+ ResultFlags = QUIC_TLS_RESULT_ERROR;
+ QuicTraceEvent(
+ TlsError,
+ "[ tls][%p] ERROR, %s.",
+ TlsContext->Connection,
+ "TLS buffer too big");
+ goto Error;
+ }
+
if (*BufferLength) {
QuicTraceLogConnVerbose(
miTlsProcess,
@@ -1226,12 +811,11 @@ QuicTlsProcessData(
ResultFlags = QuicTlsProcessDataComplete(TlsContext, &ConsumedBytes);
*BufferLength = ConsumedBytes;
}
+
} else {
QUIC_DBG_ASSERT(DataType == QUIC_TLS_TICKET_DATA);
QUIC_DBG_ASSERT(TlsContext->IsServer);
- QUIC_DBG_ASSERT((*BufferLength > 0 && Buffer != NULL) ||
- (*BufferLength == 0 && Buffer == NULL));
QuicTraceLogConnVerbose(
miTlsSend0RttTicket,
@@ -1402,10 +986,10 @@ QuicTlsProcessDataComplete(
ResultFlags |= QUIC_TLS_RESULT_ERROR;
break;
}
- QUIC_FRE_ASSERT(TicketLen <= UINT16_MAX);
- if (!TlsContext->ReceiveResumptionTicketCallback(
+ QUIC_FRE_ASSERT(TicketLen <= UINT32_MAX);
+ if (!TlsContext->ReceiveTicketCallback(
TlsContext->Connection,
- (uint16_t)TicketLen, Ticket)) {
+ (uint32_t)TicketLen, Ticket)) {
//
// QUIC or the app rejected the resumption ticket.
// Abandon the early data and continue the handshake.
@@ -1599,10 +1183,6 @@ QuicTlsProcessDataComplete(
"Consumed %u bytes",
BufferOffset);
- if (TlsContext->TicketReady) {
- ResultFlags |= QUIC_TLS_RESULT_TICKET;
- }
-
return ResultFlags;
}
@@ -1681,7 +1261,6 @@ QuicTlsOnCertSelect(
//
SecurityConfig = TlsContext->SecConfig;
QUIC_DBG_ASSERT(SecurityConfig != NULL);
- QUIC_DBG_ASSERT(TlsContext->TlsSession != NULL);
//
// Select a matching signature algorithm for the certificate.
@@ -1963,9 +1542,9 @@ QuicTlsOnCertVerify(
"OnCertVerify");
int Result = 0;
- QUIC_CERT* Certificate = NULL;
+ QUIC_CERTIFICATE* Certificate = NULL;
- if (TlsContext->SecConfig->Flags & QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION) {
+ if (TlsContext->SecConfig->Flags & QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION) {
QuicTraceLogConnWarning(
miTlsCertValidationDisabled,
TlsContext->Connection,
@@ -2038,77 +1617,40 @@ QuicTlsOnTicketReady(
(uint32_t)Ticket->session_len,
ServerNameIndication);
- //
- // Release any previous ticket.
- //
- if (TlsContext->Ticket != NULL) {
- QuicTlsTicketRelease(TlsContext->Ticket);
- }
-
- //
- // Add new ticket to TlsSession ticket store.
- //
- TlsContext->Ticket =
- QuicTlsSessionCreateTicket(
- TlsContext->TlsSession,
- ServerNameIndication,
- Ticket);
+ QUIC_DBG_ASSERT(Ticket->ticket_len + Ticket->session_len <= UINT32_MAX);
+ QUIC_DBG_ASSERT(Ticket->ticket_len + Ticket->session_len >= Ticket->ticket_len);
- if (TlsContext->Ticket != NULL) {
- TlsContext->TicketReady = TRUE;
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsReadTicket(
- _In_ QUIC_TLS* TlsContext,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- uint8_t* Buffer
- )
-{
- QUIC_STATUS Status;
-
- if (!TlsContext->TicketReady) {
- Status = QUIC_STATUS_INVALID_STATE;
- goto Exit;
- }
-
- uint32_t TicketBufferLength =
+ uint32_t TotalSize =
sizeof(QUIC_TLS_TICKET) +
- TlsContext->Ticket->ServerNameLength +
- TlsContext->Ticket->TicketLength +
- TlsContext->Ticket->SessionLength;
+ (uint32_t)(Ticket->ticket_len + Ticket->session_len);
- if (*BufferLength < TicketBufferLength) {
- *BufferLength = TicketBufferLength;
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- goto Exit;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Exit;
+ QUIC_TLS_TICKET *SerializedTicket = QUIC_ALLOC_NONPAGED(TotalSize);
+ if (SerializedTicket == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "QUIC_TLS_TICKET",
+ TotalSize);
+ return;
}
- QuicTraceLogConnVerbose(
- miTlsReadTicket,
- TlsContext->Connection,
- "Ticket (%u bytes) read.",
- TicketBufferLength);
-
+ SerializedTicket->TicketLength = (uint32_t)Ticket->ticket_len;
+ SerializedTicket->SessionLength = (uint32_t)Ticket->session_len;
QuicCopyMemory(
- Buffer,
- TlsContext->Ticket,
- TicketBufferLength);
- *BufferLength = TicketBufferLength;
-
- Status = QUIC_STATUS_SUCCESS;
+ SerializedTicket->Buffer,
+ Ticket->ticket,
+ SerializedTicket->TicketLength);
+ QuicCopyMemory(
+ SerializedTicket->Buffer + SerializedTicket->TicketLength,
+ Ticket->session,
+ SerializedTicket->SessionLength);
-Exit:
+ (void)TlsContext->ReceiveTicketCallback(
+ TlsContext->Connection,
+ TotalSize,
+ (uint8_t*)SerializedTicket);
- return Status;
+ QUIC_FREE(SerializedTicket);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
diff --git a/src/platform/tls_openssl.c b/src/platform/tls_openssl.c
index 41adefc4ed..d45bf2e321 100644
--- a/src/platform/tls_openssl.c
+++ b/src/platform/tls_openssl.c
@@ -22,34 +22,12 @@
uint16_t QuicTlsTPHeaderSize = 0;
-//
-// TLS session object.
-//
-
-typedef struct QUIC_TLS_SESSION {
-
- uint32_t Reserved;
-
-} QUIC_TLS_SESSION;
-
//
// The QUIC sec config object. Created once per listener on server side and
// once per connection on client side.
//
typedef struct QUIC_SEC_CONFIG {
- //
- // The sec config rundown object passed by MsQuic during sec config
- // creation.
- //
-
- QUIC_RUNDOWN_REF* CleanupRundown;
-
- //
- // Ref count.
- //
-
- long RefCount;
//
// The SSL context associated with the sec config.
@@ -65,11 +43,6 @@ typedef struct QUIC_SEC_CONFIG {
typedef struct QUIC_TLS {
- //
- // TlsSession - The TLS session object that this context belong to.
- //
- QUIC_TLS_SESSION* TlsSession;
-
//
// The TLS configuration information and credentials.
//
@@ -386,12 +359,6 @@ QuicTlsDecrypt(
_In_ const EVP_CIPHER *Aead
);
-static
-void
-QuicTlsSecConfigDelete(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- );
-
QUIC_STATUS
QuicTlsLibraryInitialize(
void
@@ -665,238 +632,43 @@ SSL_QUIC_METHOD OpenSslQuicCallbacks = {
};
QUIC_STATUS
-QuicTlsServerSecConfigCreate(
- _Inout_ QUIC_RUNDOWN_REF* Rundown,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
+QuicTlsSecConfigCreate(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
_In_opt_ void* Context,
_In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
)
{
- UNREFERENCED_PARAMETER(Principal);
- QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
- int Ret = 0;
- QUIC_SEC_CONFIG* SecurityConfig = NULL;
- QUIC_CERTIFICATE_FILE* CertFile = Certificate;
- uint32_t SSLOpts = 0;
-
- //
- // We only allow PEM formatted cert files.
- //
-
- if (Flags != QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Flags,
- "Invalid sec config flags");
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- if (CertFile == NULL) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "CertFile unspecified");
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- if (!QuicRundownAcquire(Rundown)) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "Failed to acquire sec config rundown");
- Status = QUIC_STATUS_INVALID_STATE;
- goto Exit;
- }
-
- //
- // Create a security config.
- //
-
- SecurityConfig = QuicAlloc(sizeof(QUIC_SEC_CONFIG));
- if (SecurityConfig == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_SEC_CONFIG",
- sizeof(QUIC_SEC_CONFIG));
- QuicRundownRelease(Rundown);
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Exit;
- }
-
- SecurityConfig->CleanupRundown = Rundown;
-
- //
- // Initial ref.
- //
-
- SecurityConfig->RefCount = 1;
-
- //
- // Create the a SSL context for the security config.
- //
-
- SecurityConfig->SSLCtx = SSL_CTX_new(TLS_method());
- if (SecurityConfig->SSLCtx == NULL) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_new failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS &&
+ CredConfig->AsyncHandler == NULL) {
+ return QUIC_STATUS_INVALID_PARAMETER;
}
- //
- // Configure the SSL context with the defaults.
- //
-
- SSLOpts = (SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS) |
- SSL_OP_SINGLE_ECDH_USE |
- SSL_OP_CIPHER_SERVER_PREFERENCE |
- SSL_OP_NO_ANTI_REPLAY;
-
- SSL_CTX_set_options(SecurityConfig->SSLCtx, SSLOpts);
- SSL_CTX_clear_options(SecurityConfig->SSLCtx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
-
- Ret =
- SSL_CTX_set_ciphersuites(
- SecurityConfig->SSLCtx,
- QUIC_TLS_DEFAULT_SSL_CIPHERS);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_set_ciphersuites failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_ENABLE_OCSP) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported by this TLS implementation
}
- Ret =
- SSL_CTX_set1_groups_list(
- SecurityConfig->SSLCtx,
- QUIC_TLS_DEFAULT_SSL_CURVES);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_set1_groups_list failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
+ if (CredConfig->TicketKey != NULL) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not currently supported
}
- SSL_CTX_set_mode(SecurityConfig->SSLCtx, SSL_MODE_RELEASE_BUFFERS);
-
- SSL_CTX_set_min_proto_version(SecurityConfig->SSLCtx, TLS1_3_VERSION);
- SSL_CTX_set_max_proto_version(SecurityConfig->SSLCtx, TLS1_3_VERSION);
-
- SSL_CTX_set_alpn_select_cb(SecurityConfig->SSLCtx, QuicTlsAlpnSelectCallback, NULL);
-
- SSL_CTX_set_default_verify_paths(SecurityConfig->SSLCtx);
-
- //
- // Set the server certs.
- //
+ QUIC_CERTIFICATE_FILE* CertFile = CredConfig->CertificateFile;
- Ret =
- SSL_CTX_use_PrivateKey_file(
- SecurityConfig->SSLCtx,
- CertFile->PrivateKeyFile,
- SSL_FILETYPE_PEM);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_use_PrivateKey_file failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
- }
-
- Ret =
- SSL_CTX_use_certificate_chain_file(
- SecurityConfig->SSLCtx,
- CertFile->CertificateFile);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_use_certificate_chain_file failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
- }
-
- Ret = SSL_CTX_check_private_key(SecurityConfig->SSLCtx);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_check_private_key failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
- }
-
- SSL_CTX_set_max_early_data(SecurityConfig->SSLCtx, UINT32_MAX);
- SSL_CTX_set_quic_method(SecurityConfig->SSLCtx, &OpenSslQuicCallbacks);
- SSL_CTX_set_client_hello_cb(SecurityConfig->SSLCtx, QuicTlsClientHelloCallback, NULL);
-
- //
- // Invoke completion inline.
- //
-
- CompletionHandler(Context, Status, SecurityConfig);
-
- Status = QUIC_STATUS_SUCCESS;
- SecurityConfig = NULL;
-
-Exit:
-
- if (SecurityConfig != NULL) {
- QuicTlsSecConfigDelete(SecurityConfig);
- SecurityConfig = NULL;
- }
-
- return Status;
-}
-
-static
-void
-QuicTlsSecConfigDelete(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- QUIC_RUNDOWN_REF* Rundown = SecurityConfig->CleanupRundown;
-
- if (SecurityConfig->SSLCtx != NULL) {
- SSL_CTX_free(SecurityConfig->SSLCtx);
- SecurityConfig->SSLCtx = NULL;
- }
-
- QuicFree(SecurityConfig);
- SecurityConfig = NULL;
-
- if (Rundown != NULL) {
- QuicRundownRelease(Rundown);
- Rundown = NULL;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported for client (yet)
+ }
+ } else {
+ if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_INVALID_PARAMETER; // Required for server
+ } else if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Only support file currently
+ } else if (CertFile == NULL ||
+ CertFile->CertificateFile == NULL ||
+ CertFile->PrivateKeyFile == NULL) {
+ return QUIC_STATUS_INVALID_PARAMETER;
+ }
}
-}
-QUIC_STATUS
-QuicTlsClientSecConfigCreate(
- _In_ uint32_t Flags,
- _Outptr_ QUIC_SEC_CONFIG** ClientConfig
- )
-{
- UNREFERENCED_PARAMETER(Flags);
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
int Ret = 0;
QUIC_SEC_CONFIG* SecurityConfig = NULL;
@@ -908,20 +680,16 @@ QuicTlsClientSecConfigCreate(
SecurityConfig = QuicAlloc(sizeof(QUIC_SEC_CONFIG));
if (SecurityConfig == NULL) {
QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "SecurityConfig alloc failed");
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "QUIC_SEC_CONFIG",
+ sizeof(QUIC_SEC_CONFIG));
Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Exit;
}
- QuicZeroMemory(SecurityConfig, sizeof(*SecurityConfig));
- SecurityConfig->RefCount = 1;
-
//
- // Create a SSL context for the security config.
- // LINUX_TODO: Check if it's better to make this context global and shared
- // across all client connections.
+ // Create the a SSL context for the security config.
//
SecurityConfig->SSLCtx = SSL_CTX_new(TLS_method());
@@ -936,7 +704,7 @@ QuicTlsClientSecConfigCreate(
}
//
- // Configure the SSL defaults.
+ // Configure the SSL context with the defaults.
//
Ret = SSL_CTX_set_min_proto_version(SecurityConfig->SSLCtx, TLS1_3_VERSION);
@@ -961,29 +729,35 @@ QuicTlsClientSecConfigCreate(
goto Exit;
}
- Ret = SSL_CTX_set_default_verify_paths(SecurityConfig->SSLCtx);
+ Ret =
+ SSL_CTX_set_ciphersuites(
+ SecurityConfig->SSLCtx,
+ QUIC_TLS_DEFAULT_SSL_CIPHERS);
if (Ret != 1) {
QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
ERR_get_error(),
- "SSL_CTX_set_default_verify_paths failed");
+ "SSL_CTX_set_ciphersuites failed");
Status = QUIC_STATUS_TLS_ERROR;
goto Exit;
}
- Ret = SSL_CTX_set_ciphersuites(SecurityConfig->SSLCtx, QUIC_TLS_DEFAULT_SSL_CIPHERS);
+ Ret = SSL_CTX_set_default_verify_paths(SecurityConfig->SSLCtx);
if (Ret != 1) {
QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
ERR_get_error(),
- "SSL_CTX_set_ciphersuites failed");
+ "SSL_CTX_set_default_verify_paths failed");
Status = QUIC_STATUS_TLS_ERROR;
goto Exit;
}
- Ret = SSL_CTX_set1_groups_list(SecurityConfig->SSLCtx, QUIC_TLS_DEFAULT_SSL_CURVES);
+ Ret =
+ SSL_CTX_set1_groups_list(
+ SecurityConfig->SSLCtx,
+ QUIC_TLS_DEFAULT_SSL_CURVES);
if (Ret != 1) {
QuicTraceEvent(
LibraryErrorStatus,
@@ -1005,135 +779,129 @@ QuicTlsClientSecConfigCreate(
goto Exit;
}
- //
- // Cert related config.
- //
-
- BOOLEAN VerifyServerCertificate = TRUE; // !(Flags & QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION);
- if (!VerifyServerCertificate) {
- SSL_CTX_set_verify(SecurityConfig->SSLCtx, SSL_VERIFY_PEER, NULL);
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
+ BOOLEAN VerifyServerCertificate = TRUE; // !(Flags & QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION);
+ if (!VerifyServerCertificate) {
+ SSL_CTX_set_verify(SecurityConfig->SSLCtx, SSL_VERIFY_PEER, NULL);
+ } else {
+ SSL_CTX_set_verify_depth(SecurityConfig->SSLCtx, QUIC_TLS_DEFAULT_VERIFY_DEPTH);
+
+ if (QuicOpenSslClientTrustedCert != NULL) {
+ //
+ // LINUX_TODO: This is a hack to set a client side trusted cert in order
+ // to verify server cert. Fix this once MsQuic formally supports
+ // passing TLS related config from APP layer to TAL.
+ //
+
+ /*Ret =
+ SSL_CTX_load_verify_locations(
+ SecurityConfig->SSLCtx,
+ QuicOpenSslClientTrustedCert,
+ NULL);
+ if (Ret != 1) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ ERR_get_error(),
+ "SSL_CTX_load_verify_locations failed");
+ Status = QUIC_STATUS_TLS_ERROR;
+ goto Exit;
+ }*/
+ }
+ }
} else {
- SSL_CTX_set_verify_depth(SecurityConfig->SSLCtx, QUIC_TLS_DEFAULT_VERIFY_DEPTH);
+ SSL_CTX_set_options(
+ SecurityConfig->SSLCtx,
+ (SSL_OP_ALL & ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS) |
+ SSL_OP_SINGLE_ECDH_USE |
+ SSL_OP_CIPHER_SERVER_PREFERENCE |
+ SSL_OP_NO_ANTI_REPLAY);
+ SSL_CTX_clear_options(SecurityConfig->SSLCtx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+ SSL_CTX_set_mode(SecurityConfig->SSLCtx, SSL_MODE_RELEASE_BUFFERS);
- if (QuicOpenSslClientTrustedCert == NULL) {
- SSL_CTX_set_default_verify_paths(SecurityConfig->SSLCtx);
- } else {
- //
- // LINUX_TODO: This is a hack to set a client side trusted cert in order
- // to verify server cert. Fix this once MsQuic formally supports
- // passing TLS related config from APP layer to TAL.
- //
-
- /*Ret =
- SSL_CTX_load_verify_locations(
- SecurityConfig->SSLCtx,
- QuicOpenSslClientTrustedCert,
- NULL);
- if (Ret != 1) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- ERR_get_error(),
- "SSL_CTX_load_verify_locations failed");
- Status = QUIC_STATUS_TLS_ERROR;
- goto Exit;
- }*/
+ SSL_CTX_set_alpn_select_cb(SecurityConfig->SSLCtx, QuicTlsAlpnSelectCallback, NULL);
+
+ //
+ // Set the server certs.
+ //
+
+ Ret =
+ SSL_CTX_use_PrivateKey_file(
+ SecurityConfig->SSLCtx,
+ CertFile->PrivateKeyFile,
+ SSL_FILETYPE_PEM);
+ if (Ret != 1) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ ERR_get_error(),
+ "SSL_CTX_use_PrivateKey_file failed");
+ Status = QUIC_STATUS_TLS_ERROR;
+ goto Exit;
}
+
+ Ret =
+ SSL_CTX_use_certificate_chain_file(
+ SecurityConfig->SSLCtx,
+ CertFile->CertificateFile);
+ if (Ret != 1) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ ERR_get_error(),
+ "SSL_CTX_use_certificate_chain_file failed");
+ Status = QUIC_STATUS_TLS_ERROR;
+ goto Exit;
+ }
+
+ Ret = SSL_CTX_check_private_key(SecurityConfig->SSLCtx);
+ if (Ret != 1) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ ERR_get_error(),
+ "SSL_CTX_check_private_key failed");
+ Status = QUIC_STATUS_TLS_ERROR;
+ goto Exit;
+ }
+
+ SSL_CTX_set_max_early_data(SecurityConfig->SSLCtx, UINT32_MAX);
+ SSL_CTX_set_client_hello_cb(SecurityConfig->SSLCtx, QuicTlsClientHelloCallback, NULL);
}
- *ClientConfig = SecurityConfig;
+ //
+ // Invoke completion inline.
+ //
+
+ CompletionHandler(CredConfig, Context, Status, SecurityConfig);
SecurityConfig = NULL;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ Status = QUIC_STATUS_PENDING;
+ } else {
+ Status = QUIC_STATUS_SUCCESS;
+ }
+
Exit:
if (SecurityConfig != NULL) {
QuicTlsSecConfigDelete(SecurityConfig);
- SecurityConfig = NULL;
}
return Status;
}
-inline
-QUIC_SEC_CONFIG*
-QuicTlsSecConfigAddRef(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- InterlockedIncrement(&SecurityConfig->RefCount);
- return SecurityConfig;
-}
-
void
-QUIC_API
-QuicTlsSecConfigRelease(
+QuicTlsSecConfigDelete(
_In_ QUIC_SEC_CONFIG* SecurityConfig
)
{
- if (InterlockedDecrement(&SecurityConfig->RefCount) == 0) {
- QuicTlsSecConfigDelete(SecurityConfig);
- SecurityConfig = NULL;
- }
-}
-
-QUIC_STATUS
-QuicTlsSessionInitialize(
- _Out_ QUIC_TLS_SESSION** NewTlsSession
- )
-{
- *NewTlsSession = QuicAlloc(sizeof(QUIC_TLS_SESSION));
- if (*NewTlsSession == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_SESSION",
- sizeof(QUIC_TLS_SESSION));
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
- return QUIC_STATUS_SUCCESS;
-}
-
-void
-QuicTlsSessionUninitialize(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (TlsSession != NULL) {
- QUIC_FREE(TlsSession);
- TlsSession = NULL;
+ if (SecurityConfig->SSLCtx != NULL) {
+ SSL_CTX_free(SecurityConfig->SSLCtx);
+ SecurityConfig->SSLCtx = NULL;
}
-}
-
-QUIC_STATUS
-QuicTlsSessionSetTicketKey(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_reads_bytes_(44)
- const void* Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession);
- UNREFERENCED_PARAMETER(Buffer);
- //
- // LINUX_TODO.
- //
- return QUIC_STATUS_SUCCESS;
-}
-QUIC_STATUS
-QuicTlsSessionAddTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const uint8_t * const Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession);
- UNREFERENCED_PARAMETER(BufferLength);
- UNREFERENCED_PARAMETER(Buffer);
- //
- // LINUX_TODO.
- //
- return QUIC_STATUS_SUCCESS;
+ QuicFree(SecurityConfig);
}
QUIC_STATUS
@@ -1161,9 +929,8 @@ QuicTlsInitialize(
QuicZeroMemory(TlsContext, sizeof(QUIC_TLS));
TlsContext->Connection = Config->Connection;
- TlsContext->TlsSession = Config->TlsSession;
TlsContext->IsServer = Config->IsServer;
- TlsContext->SecConfig = QuicTlsSecConfigAddRef(Config->SecConfig);
+ TlsContext->SecConfig = Config->SecConfig;
TlsContext->AlpnBufferLength = Config->AlpnBufferLength;
TlsContext->AlpnBuffer = Config->AlpnBuffer;
TlsContext->ReceiveTPCallback = Config->ReceiveTPCallback;
@@ -1269,11 +1036,6 @@ QuicTlsUninitialize(
TlsContext->Connection,
"Cleaning up");
- if (TlsContext->SecConfig != NULL) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
- TlsContext->SecConfig = NULL;
- }
-
if (TlsContext->SNI != NULL) {
QUIC_FREE(TlsContext->SNI);
TlsContext->SNI = NULL;
@@ -1348,14 +1110,6 @@ QuicTlsReset(
return;
}
-QUIC_SEC_CONFIG*
-QuicTlsGetSecConfig(
- _In_ QUIC_TLS* TlsContext
- )
-{
- return QuicTlsSecConfigAddRef(TlsContext->SecConfig);
-}
-
QUIC_TLS_RESULT_FLAGS
QuicTlsProcessData(
_In_ QUIC_TLS* TlsContext,
@@ -1564,19 +1318,6 @@ QuicTlsProcessDataComplete(
return QUIC_TLS_RESULT_ERROR;
}
-QUIC_STATUS
-QuicTlsReadTicket(
- _In_ QUIC_TLS* TlsContext,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength) uint8_t* Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsContext);
- UNREFERENCED_PARAMETER(BufferLength);
- UNREFERENCED_PARAMETER(Buffer);
- return QUIC_STATUS_INVALID_STATE;
-}
-
QUIC_STATUS
QuicTlsParamSet(
_In_ QUIC_TLS* TlsContext,
diff --git a/src/platform/tls_schannel.c b/src/platform/tls_schannel.c
index ff42b6e8ce..1b7cdb5a3e 100644
--- a/src/platform/tls_schannel.c
+++ b/src/platform/tls_schannel.c
@@ -228,37 +228,26 @@ const WORD TlsHandshake_ClientHello = 0x01;
const WORD TlsHandshake_EncryptedExtensions = 0x08;
typedef struct QUIC_SEC_CONFIG {
- BOOLEAN IsServer : 1;
- LONG RefCount;
-} QUIC_SEC_CONFIG;
-typedef struct QUIC_SERVER_SEC_CONFIG {
- QUIC_SEC_CONFIG;
- QUIC_RUNDOWN_REF* CleanupRundown;
-#ifdef _KERNEL_MODE
//
- // Async call context.
+ // Acquired credential handle.
//
- SspiAsyncContext* SspiContext;
-#endif
+ CredHandle CredentialHandle;
+
//
- // Acquired credential handle.
+ // Credential flags used to acquire the handle.
//
- CredHandle CertificateHandle;
-} QUIC_SERVER_SEC_CONFIG;
+ QUIC_CREDENTIAL_FLAGS Flags;
+
+} QUIC_SEC_CONFIG;
-// allocate this internally and cast to the sec_config type
-typedef struct QUIC_CLIENT_SEC_CONFIG {
- QUIC_SEC_CONFIG;
+typedef struct QUIC_ACH_CONTEXT {
//
- // Credential handle as obtained from AcquireCredentialsHandle.
+ // Credential flags used to acquire the handle.
//
- CredHandle SchannelHandle;
-} QUIC_CLIENT_SEC_CONFIG;
+ QUIC_CREDENTIAL_CONFIG CredConfig;
-#ifdef _KERNEL_MODE
-typedef struct QUIC_ACHA_CONTEXT {
//
// Context for the completion callback.
//
@@ -269,6 +258,12 @@ typedef struct QUIC_ACHA_CONTEXT {
//
QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionCallback;
+#ifdef _KERNEL_MODE
+ //
+ // Async call context.
+ //
+ SspiAsyncContext* SspiContext;
+
//
// Principal string, stored here to ensure it's alive as long as the async
// call needs it.
@@ -276,33 +271,37 @@ typedef struct QUIC_ACHA_CONTEXT {
UNICODE_STRING Principal;
//
- // Certificate hash used to find the server certificate.
+ // Used to wait on the async callback, when in synchronous mode.
+ //
+ KEVENT CompletionEvent;
+
+ //
+ // The status received from the completion callback.
+ //
+ NTSTATUS CompletionStatus;
+#endif
+
+ //
+ // CredConfig certificate hash used to find the server certificate.
//
SCHANNEL_CERT_HASH_STORE CertHash;
//
// Security config to pass back to the caller.
//
- QUIC_SERVER_SEC_CONFIG* SecConfig;
+ QUIC_SEC_CONFIG* SecConfig;
//
- // Holds the credentials configuration for the lifetime of the async call.
+ // Holds the credentials configuration for the lifetime of the ACH call.
//
SCH_CREDENTIALS Credentials;
//
- // Holds TLS configuration for the lifetime of the async call.
+ // Holds TLS configuration for the lifetime of the ACH call.
//
TLS_PARAMETERS TlsParameters;
-} QUIC_ACHA_CONTEXT;
-#endif
-
-typedef struct QUIC_TLS_SESSION {
-
- uint32_t Reserved;
-
-} QUIC_TLS_SESSION;
+} QUIC_ACH_CONTEXT;
typedef struct _SEC_BUFFER_WORKSPACE {
@@ -335,9 +334,6 @@ typedef struct QUIC_TLS {
BOOLEAN PeerTransportParamsReceived : 1;
BOOLEAN HandshakeKeyRead : 1;
BOOLEAN ApplicationKeyRead : 1;
- BOOLEAN TicketReceived : 1;
-
- QUIC_TLS_SESSION* TlsSession;
//
// Cached server name indication.
@@ -368,6 +364,7 @@ typedef struct QUIC_TLS {
//
QUIC_CONNECTION* Connection;
QUIC_TLS_RECEIVE_TP_CALLBACK_HANDLER ReceiveTPCallback;
+ QUIC_TLS_RECEIVE_TICKET_CALLBACK_HANDLER ReceiveTicketCallback;
//
// Workspace for sec buffers pass into ISC/ASC.
@@ -408,6 +405,161 @@ BCRYPT_ALG_HANDLE QUIC_AES_ECB_ALG_HANDLE = BCRYPT_AES_ECB_ALG_HANDLE;
BCRYPT_ALG_HANDLE QUIC_AES_GCM_ALG_HANDLE = BCRYPT_AES_GCM_ALG_HANDLE;
#endif
+#ifndef _KERNEL_MODE
+
+QUIC_STATUS
+QuicTlsUtf8ToWideChar(
+ _In_z_ const char* const Input,
+ _Outptr_result_z_ PWSTR* Output
+ )
+{
+ QUIC_DBG_ASSERT(Input != NULL);
+ QUIC_DBG_ASSERT(Output != NULL);
+
+ DWORD Error = NO_ERROR;
+ PWSTR Buffer = NULL;
+ int Size =
+ MultiByteToWideChar(
+ CP_UTF8,
+ MB_ERR_INVALID_CHARS,
+ Input,
+ -1,
+ NULL,
+ 0);
+ if (Size == 0) {
+ Error = GetLastError();
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Error,
+ "Get wchar string size");
+ goto Error;
+ }
+
+ Buffer = QUIC_ALLOC_NONPAGED(sizeof(WCHAR) * Size);
+ if (Buffer == NULL) {
+ Error = ERROR_NOT_ENOUGH_MEMORY;
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "wchar string",
+ sizeof(WCHAR) * Size);
+ goto Error;
+ }
+
+ Size =
+ MultiByteToWideChar(
+ CP_UTF8,
+ MB_ERR_INVALID_CHARS,
+ Input,
+ -1,
+ Buffer,
+ Size);
+ if (Size == 0) {
+ Error = GetLastError();
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Error,
+ "Convert string to wchar");
+ goto Error;
+ }
+
+ *Output = Buffer;
+ Buffer = NULL;
+
+Error:
+
+ if (Buffer != NULL) {
+ QUIC_FREE(Buffer);
+ }
+
+ return HRESULT_FROM_WIN32(Error);
+}
+
+#else
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+QUIC_STATUS
+QuicTlsUtf8ToUnicodeString(
+ _In_z_ const char* Input,
+ _Inout_ PUNICODE_STRING Output
+ )
+{
+ QUIC_DBG_ASSERT(Input != NULL);
+ QUIC_DBG_ASSERT(Output != NULL);
+
+ QUIC_STATUS Status;
+ ULONG RequiredSize = 0;
+ PWSTR UnicodeString = NULL;
+
+ size_t InputLength = strnlen_s(Input, QUIC_MAX_SNI_LENGTH + 1);
+ if (InputLength == QUIC_MAX_SNI_LENGTH + 1) {
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+ InputLength++;
+
+ Status =
+ RtlUTF8ToUnicodeN(
+ UnicodeString,
+ RequiredSize,
+ &RequiredSize,
+ Input,
+ (ULONG) InputLength);
+ if (!NT_SUCCESS(Status)) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "Get unicode string size");
+ goto Error;
+ }
+
+ UnicodeString = QUIC_ALLOC_NONPAGED(RequiredSize);
+ if (UnicodeString == NULL) {
+ QuicTraceEvent(
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "unicode string",
+ RequiredSize);
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
+ goto Error;
+ }
+
+ Status =
+ RtlUTF8ToUnicodeN(
+ UnicodeString,
+ RequiredSize,
+ &RequiredSize,
+ Input,
+ (ULONG) InputLength);
+ if (!NT_SUCCESS(Status)) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "Convert string to unicode");
+ goto Error;
+ }
+
+ QUIC_DBG_ASSERT(Output->Buffer == NULL);
+ Output->Buffer = UnicodeString;
+ UnicodeString = NULL;
+
+ Output->MaximumLength = (USHORT)RequiredSize;
+ Output->Length = Output->MaximumLength - sizeof(WCHAR);
+
+Error:
+ if (UnicodeString != NULL) {
+ QUIC_FREE(UnicodeString);
+ UnicodeString = NULL;
+ }
+ return Status;
+}
+
+#endif
+
QUIC_STATUS
QuicTlsLibraryInitialize(
void
@@ -582,205 +734,67 @@ QuicTlsLibraryUninitialize(
"[ tls] Library uninitialized");
}
-#ifndef _KERNEL_MODE
-QUIC_STATUS
-QuicTlsUtf8ToWideChar(
- _In_z_ const char* const Input,
- _Outptr_result_z_ PWSTR* Output
+_IRQL_requires_max_(DISPATCH_LEVEL)
+__drv_allocatesMem(Mem)
+_Must_inspect_result_
+_Success_(return != NULL)
+QUIC_ACH_CONTEXT*
+QuicTlsAllocateAchContext(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
+ _In_opt_ void* Context,
+ _In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER Callback
)
{
- QUIC_DBG_ASSERT(Input != NULL);
- QUIC_DBG_ASSERT(Output != NULL);
-
- DWORD Error = NO_ERROR;
- PWSTR Buffer = NULL;
- int Size =
- MultiByteToWideChar(
- CP_UTF8,
- MB_ERR_INVALID_CHARS,
- Input,
- -1,
- NULL,
- 0);
- if (Size == 0) {
- Error = GetLastError();
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Error,
- "Get wchar string size");
- goto Error;
- }
-
- Buffer = QUIC_ALLOC_NONPAGED(sizeof(WCHAR) * Size);
- if (Buffer == NULL) {
- Error = ERROR_NOT_ENOUGH_MEMORY;
+ QUIC_ACH_CONTEXT* AchContext = QUIC_ALLOC_NONPAGED(sizeof(QUIC_ACH_CONTEXT));
+ if (AchContext == NULL) {
QuicTraceEvent(
AllocFailure,
"Allocation of '%s' failed. (%llu bytes)",
- "wchar string",
- sizeof(WCHAR) * Size);
- goto Error;
- }
-
- Size =
- MultiByteToWideChar(
- CP_UTF8,
- MB_ERR_INVALID_CHARS,
- Input,
- -1,
- Buffer,
- Size);
- if (Size == 0) {
- Error = GetLastError();
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Error,
- "Convert string to wchar");
- goto Error;
- }
-
- *Output = Buffer;
- Buffer = NULL;
-
-Error:
-
- if (Buffer != NULL) {
- QUIC_FREE(Buffer);
+ "QUIC_ACH_CONTEXT",
+ sizeof(QUIC_ACH_CONTEXT));
+ } else {
+ RtlZeroMemory(AchContext, sizeof(*AchContext));
+ AchContext->CredConfig = *CredConfig;
+ AchContext->CompletionContext = Context;
+ AchContext->CompletionCallback = Callback;
+ AchContext->Credentials.pTlsParameters = &AchContext->TlsParameters;
+ AchContext->Credentials.cTlsParameters = 1;
+#ifdef _KERNEL_MODE
+ if (!(AchContext->CredConfig.Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS)) {
+ KeInitializeEvent(&AchContext->CompletionEvent, NotificationEvent, FALSE);
+ }
+#endif
}
- return HRESULT_FROM_WIN32(Error);
+ return AchContext;
}
-#endif
-#ifdef _KERNEL_MODE
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsUtf8ToUnicodeString(
- _In_z_ const char* Input,
- _Inout_ PUNICODE_STRING Output
+void
+QuicTlsFreeAchContext(
+ _In_ QUIC_ACH_CONTEXT* AchContext
)
{
- QUIC_DBG_ASSERT(Input != NULL);
- QUIC_DBG_ASSERT(Output != NULL);
-
- QUIC_STATUS Status;
- ULONG RequiredSize = 0;
- PWSTR UnicodeString = NULL;
-
- size_t InputLength = strnlen_s(Input, QUIC_MAX_SNI_LENGTH + 1);
- if (InputLength == QUIC_MAX_SNI_LENGTH + 1) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
- InputLength++;
-
- Status =
- RtlUTF8ToUnicodeN(
- UnicodeString,
- RequiredSize,
- &RequiredSize,
- Input,
- (ULONG) InputLength);
- if (!NT_SUCCESS(Status)) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Status,
- "Get unicode string size");
- goto Error;
- }
-
- UnicodeString = QUIC_ALLOC_NONPAGED(RequiredSize);
- if (UnicodeString == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "unicode string",
- RequiredSize);
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- Status =
- RtlUTF8ToUnicodeN(
- UnicodeString,
- RequiredSize,
- &RequiredSize,
- Input,
- (ULONG) InputLength);
- if (!NT_SUCCESS(Status)) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Status,
- "Convert string to unicode");
- goto Error;
+#ifdef _KERNEL_MODE
+ if (AchContext->Principal.Buffer != NULL) {
+ QUIC_FREE(AchContext->Principal.Buffer);
+ RtlZeroMemory(&AchContext->Principal, sizeof(AchContext->Principal));
}
-
- QUIC_DBG_ASSERT(Output->Buffer == NULL);
- Output->Buffer = UnicodeString;
- UnicodeString = NULL;
-
- Output->MaximumLength = (USHORT)RequiredSize;
- Output->Length = Output->MaximumLength - sizeof(WCHAR);
-
-Error:
- if (UnicodeString != NULL) {
- QUIC_FREE(UnicodeString);
- UnicodeString = NULL;
+ if (AchContext->SspiContext != NULL) {
+ SspiFreeAsyncContext(AchContext->SspiContext);
}
- return Status;
-}
-
-_IRQL_requires_max_(DISPATCH_LEVEL)
-QUIC_STATUS
-QuicTlsAllocateAchaContext(
- _In_ void* Context,
- _In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER Callback,
- _In_ QUIC_SERVER_SEC_CONFIG* Config,
- _Out_ QUIC_ACHA_CONTEXT** AchaContext
- )
-{
- QUIC_DBG_ASSERT(AchaContext != NULL);
-
- QUIC_ACHA_CONTEXT* NewAchaContext = QUIC_ALLOC_NONPAGED(sizeof(QUIC_ACHA_CONTEXT));
- if (NewAchaContext == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_ACHA_CONTEXT",
- sizeof(QUIC_ACHA_CONTEXT));
- return QUIC_STATUS_OUT_OF_MEMORY;
+#endif
+ if (AchContext->SecConfig != NULL) {
+ QuicTlsSecConfigDelete(AchContext->SecConfig);
}
-
- RtlZeroMemory(NewAchaContext, sizeof(*NewAchaContext));
- NewAchaContext->CompletionContext = Context;
- NewAchaContext->CompletionCallback = Callback;
- NewAchaContext->SecConfig = Config;
- *AchaContext = NewAchaContext;
-
- return QUIC_STATUS_SUCCESS;
+ QUIC_FREE(AchContext);
}
-void
-QuicTlsFreeAchaContext(
- _In_ QUIC_ACHA_CONTEXT* AchaContext
- )
-{
- if (AchaContext->Principal.Buffer != NULL) {
- QUIC_FREE(AchaContext->Principal.Buffer);
- RtlZeroMemory(&AchaContext->Principal, sizeof(AchaContext->Principal));
- }
- QUIC_FREE(AchaContext);
-}
+#ifdef _KERNEL_MODE
void
QuicTlsSspiNotifyCallback(
- _In_ SspiAsyncContext* Handle,
- _In_opt_ void* CallbackData
+ _In_ SspiAsyncContext* Handle,
+ _In_opt_ void* CallbackData
)
{
if (CallbackData == NULL) {
@@ -790,273 +804,275 @@ QuicTlsSspiNotifyCallback(
"NULL CallbackData to QuicTlsSspiNotifyCallback");
return;
}
- QUIC_ACHA_CONTEXT* Context = CallbackData;
- QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionCallback = Context->CompletionCallback;
- void* CompletionContext = Context->CompletionContext;
- QUIC_SEC_CONFIG* SecConfig = (QUIC_SEC_CONFIG*)Context->SecConfig;
+ QUIC_ACH_CONTEXT* AchContext = CallbackData;
+ BOOLEAN IsAsync = !!(AchContext->CredConfig.Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS);
+ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionCallback = AchContext->CompletionCallback;
+ void* CompletionContext = AchContext->CompletionContext;
+ QUIC_SEC_CONFIG* SecConfig = AchContext->SecConfig;
+ AchContext->SecConfig = NULL;
SECURITY_STATUS Status = SspiGetAsyncCallStatus(Handle);
- QuicTlsFreeAchaContext(Context);
+ AchContext->CompletionStatus = SecStatusToQuicStatus(Status);
+ QUIC_CREDENTIAL_CONFIG CredConfig = AchContext->CredConfig;
+ if (IsAsync) {
+ QuicTlsFreeAchContext(AchContext);
+ }
if (Status != SEC_E_OK) {
QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
Status,
"Completion for SspiAcquireCredentialsHandleAsyncW");
- CompletionCallback(CompletionContext, SecStatusToQuicStatus(Status), NULL);
- QuicTlsSecConfigRelease(SecConfig); // *MUST* be last call to prevent crash in platform cleanup.
+ CompletionCallback(&CredConfig, CompletionContext, SecStatusToQuicStatus(Status), NULL);
+ QuicTlsSecConfigDelete(SecConfig); // *MUST* be last call to prevent crash in platform cleanup.
} else {
- CompletionCallback(CompletionContext, QUIC_STATUS_SUCCESS, SecConfig);
+ CompletionCallback(&CredConfig, CompletionContext, QUIC_STATUS_SUCCESS, SecConfig);
+ }
+ if (!IsAsync) {
+ KeSetEvent(&AchContext->CompletionEvent, IO_NO_INCREMENT, FALSE);
}
}
-//
-// Used by QuicTlsServerSecConfigCreate and QuicTlsInitialize
-//
const static UNICODE_STRING QuicTlsPackageName = RTL_CONSTANT_STRING(L"Schannel");
-#endif
+typedef struct TLS_WORKER_CONTEXT {
+ NTSTATUS CompletionStatus;
+ QUIC_ACH_CONTEXT* AchContext;
+} TLS_WORKER_CONTEXT;
-_IRQL_requires_max_(PASSIVE_LEVEL)
+_IRQL_requires_same_
void
-QuicTlsServerSecConfigDelete(
- __drv_freesMem(ServerConfig) _Frees_ptr_ _In_ QUIC_SERVER_SEC_CONFIG* ServerConfig
+QuicTlsAchHelper(
+ _In_ TLS_WORKER_CONTEXT* ThreadContext
)
{
- QUIC_DBG_ASSERT(ServerConfig->IsServer == TRUE);
-#ifdef _KERNEL_MODE
- if (ServerConfig->SspiContext != NULL) {
- SspiFreeAsyncContext(ServerConfig->SspiContext);
- }
- if (SecIsValidHandle(&ServerConfig->CertificateHandle)) {
- FreeCredentialsHandle(&ServerConfig->CertificateHandle);
+ QUIC_ACH_CONTEXT* AchContext = ThreadContext->AchContext;
+ BOOLEAN IsClient = !!(AchContext->CredConfig.Flags & QUIC_CREDENTIAL_FLAG_CLIENT);
+ BOOLEAN IsAsync = !!(AchContext->CredConfig.Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS);
+
+ QuicTraceLogVerbose(
+ SchannelAchAsync,
+ "[ tls] Calling SspiAcquireCredentialsHandleAsyncW");
+
+ SECURITY_STATUS SecStatus =
+ SspiAcquireCredentialsHandleAsyncW(
+ AchContext->SspiContext,
+ IsClient ? NULL : &AchContext->Principal,
+ (PSECURITY_STRING)&QuicTlsPackageName,
+ IsClient ? SECPKG_CRED_OUTBOUND : SECPKG_CRED_INBOUND,
+ NULL,
+ &AchContext->Credentials,
+ NULL,
+ NULL,
+ &AchContext->SecConfig->CredentialHandle,
+ NULL);
+ if (SecStatus != SEC_E_OK) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ SecStatus,
+ "SspiAcquireCredentialsHandleAsyncW");
+ ThreadContext->CompletionStatus = SecStatusToQuicStatus(SecStatus);
+
+ } else {
+ if (IsAsync) {
+ ThreadContext->CompletionStatus = QUIC_STATUS_PENDING;
+ ThreadContext->AchContext = NULL;
+ } else {
+ KeWaitForSingleObject(&AchContext->CompletionEvent, Executive, KernelMode, FALSE, NULL);
+ ThreadContext->CompletionStatus = AchContext->CompletionStatus;
+ }
}
-#endif
+}
- QUIC_RUNDOWN_REF* Rundown = ServerConfig->CleanupRundown;
- QUIC_DBG_ASSERT(Rundown != NULL);
- QUIC_FREE(ServerConfig);
- QuicRundownRelease(Rundown);
+_Function_class_(KSTART_ROUTINE)
+_IRQL_requires_same_
+void
+QuicTlsAchWorker(
+ _In_ void* Context
+ )
+{
+ TLS_WORKER_CONTEXT* ThreadContext = Context;
+ QuicTlsAchHelper(ThreadContext);
+ PsTerminateSystemThread(STATUS_SUCCESS);
}
+#endif
+
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicTlsServerSecConfigCreate(
- _Inout_ QUIC_RUNDOWN_REF* Rundown,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _When_(Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH, _In_)
- _When_(Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE, _In_)
- _When_(Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT, _In_)
- _When_(Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_NONE, _In_opt_)
- void* Certificate,
- _When_(Flags& QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH, _In_opt_z_)
- _When_(Flags& QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE, _In_opt_z_)
- _When_(Flags& QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT, _In_opt_z_)
- _When_(Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_NONE, _In_z_)
- const char* Principal,
+QuicTlsSecConfigCreate(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
_In_opt_ void* Context,
_In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
)
{
+ QUIC_DBG_ASSERT(CredConfig && CompletionHandler);
+
SECURITY_STATUS SecStatus;
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+ BOOLEAN IsClient = !!(CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT);
- if (CompletionHandler == NULL) {
- return QUIC_STATUS_INVALID_PARAMETER;
+ if (CredConfig->TicketKey != NULL) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not currently supported
}
- if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT) {
- if (Certificate == NULL) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
- } else if ((Flags & (QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH | QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE)) == 0) {
- if (Principal == NULL) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
- }
-
- if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_FILE) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
+#ifndef _KERNEL_MODE
+ PCERT_CONTEXT CertContext = NULL;
- if (Certificate == NULL && Principal == NULL) {
- return QUIC_STATUS_INVALID_PARAMETER;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ return QUIC_STATUS_NOT_SUPPORTED;
}
+#endif
- QUIC_DBG_ASSERT(Rundown != NULL);
- if (!QuicRundownAcquire(Rundown)) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "Acquire SecConfig rundown");
- return QUIC_STATUS_INVALID_STATE;
- }
+ if (IsClient) {
-#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete)")
- QUIC_SERVER_SEC_CONFIG* Config = QUIC_ALLOC_NONPAGED(sizeof(QUIC_SERVER_SEC_CONFIG));
- if (Config == NULL) {
- QuicRundownRelease(Rundown);
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_SERVER_SEC_CONFIG",
- sizeof(QUIC_SERVER_SEC_CONFIG));
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Client certificates not supported yet.
+ }
- RtlZeroMemory(Config, sizeof(QUIC_SERVER_SEC_CONFIG));
- SecInvalidateHandle(&Config->CertificateHandle);
- Config->CleanupRundown = Rundown;
- Config->RefCount = 1;
- Config->IsServer = TRUE;
+ } else {
+ switch (CredConfig->Type) {
+ case QUIC_CREDENTIAL_TYPE_NONE:
+ return QUIC_STATUS_INVALID_PARAMETER; // Server requires a certificate.
+ case QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH:
+ case QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE:
+#ifndef _KERNEL_MODE
+ case QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT:
+#endif
+ if (CredConfig->CertificateContext == NULL && CredConfig->Principal == NULL) {
+ return QUIC_STATUS_INVALID_PARAMETER;
+ }
+ break;
#ifdef _KERNEL_MODE
- QUIC_ACHA_CONTEXT* AchaContext = NULL;
- Status = QuicTlsAllocateAchaContext(Context, CompletionHandler, Config, &AchaContext);
- if (QUIC_FAILED(Status)) {
- goto Error;
- }
-
- PSCH_CREDENTIALS Credentials = &AchaContext->Credentials;
- Credentials->pTlsParameters = &AchaContext->TlsParameters;
- Credentials->cTlsParameters = 1;
-#else
- SCH_CREDENTIALS LocalCredentials = { 0 };
- TLS_PARAMETERS LocalTlsParameters = { 0 };
- PSCH_CREDENTIALS Credentials = &LocalCredentials;
- Credentials->pTlsParameters = &LocalTlsParameters;
- Credentials->cTlsParameters = 1;
+ case QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT:
#endif
-
- //
- // Initialize user/kernel-common configuration.
- //
- Credentials->dwVersion = SCH_CREDENTIALS_VERSION;
- Credentials->pTlsParameters->grbitDisabledProtocols = (DWORD) ~SP_PROT_TLS1_3_SERVER;
- Credentials->pTlsParameters->cAlpnIds = 0;
- Credentials->pTlsParameters->rgstrAlpnIds = NULL; // QUIC manages all the ALPN matching.
- Credentials->pTlsParameters->cDisabledCrypto = 0;
- //
- // TODO: Disallow AES_CCM_8 algorithm, which are undefined in the QUIC-TLS spec.
- //
- Credentials->pTlsParameters->pDisabledCrypto = NULL;
- Credentials->dwFlags |= SCH_CRED_NO_SYSTEM_MAPPER;
-
- //
- // This flag disables known-weak crypto algorithms.
- //
- Credentials->dwFlags |= SCH_USE_STRONG_CRYPTO;
-
- if (Flags & QUIC_SEC_CONFIG_FLAG_ENABLE_OCSP) {
- Credentials->dwFlags |= SCH_CRED_SNI_ENABLE_OCSP;
+ case QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE:
+ default:
+ return QUIC_STATUS_NOT_SUPPORTED;
+ }
}
- //
- // Kernel mode-only APIs and configuration.
- //
-#ifdef _KERNEL_MODE
+ QUIC_ACH_CONTEXT* AchContext =
+ QuicTlsAllocateAchContext(
+ CredConfig,
+ Context,
+ CompletionHandler);
+ if (AchContext == NULL) {
+ return QUIC_STATUS_OUT_OF_MEMORY;
+ }
- Config->SspiContext = SspiCreateAsyncContext();
- if (Config->SspiContext == NULL) {
+#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete)")
+ AchContext->SecConfig = QUIC_ALLOC_NONPAGED(sizeof(QUIC_SEC_CONFIG));
+ if (AchContext->SecConfig == NULL) {
QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "SspiCreateAsyncContext");
+ AllocFailure,
+ "Allocation of '%s' failed. (%llu bytes)",
+ "QUIC_SEC_CONFIG",
+ sizeof(QUIC_SEC_CONFIG));
Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Error;
}
- SecStatus =
- SspiSetAsyncNotifyCallback(
- Config->SspiContext,
- QuicTlsSspiNotifyCallback,
- AchaContext);
- if (SecStatus != SEC_E_OK) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- SecStatus,
- "SspiSetAsyncNotifyCallback");
- Status = SecStatusToQuicStatus(SecStatus);
- goto Error;
- }
+ RtlZeroMemory(AchContext->SecConfig, sizeof(QUIC_SEC_CONFIG));
+ SecInvalidateHandle(&AchContext->SecConfig->CredentialHandle);
+ AchContext->SecConfig->Flags = CredConfig->Flags;
+ PSCH_CREDENTIALS Credentials = &AchContext->Credentials;
+
+ Credentials->dwVersion = SCH_CREDENTIALS_VERSION;
+ Credentials->dwFlags |= SCH_USE_STRONG_CRYPTO;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION) {
+ Credentials->dwFlags |= SCH_CRED_MANUAL_CRED_VALIDATION;
+ }
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_ENABLE_OCSP) {
+ Credentials->dwFlags |= SCH_CRED_SNI_ENABLE_OCSP;
+ }
+ if (IsClient) {
+ Credentials->dwFlags |= SCH_CRED_NO_DEFAULT_CREDS;
+ Credentials->pTlsParameters->grbitDisabledProtocols = (DWORD)~SP_PROT_TLS1_3_CLIENT;
+ } else {
+ Credentials->dwFlags |= SCH_CRED_NO_SYSTEM_MAPPER;
+ Credentials->pTlsParameters->grbitDisabledProtocols = (DWORD)~SP_PROT_TLS1_3_SERVER;
+ }
//
- // Set the parameters and then call ACHA.
+ // TODO: Disallow AES_CCM_8 algorithm, which are undefined in the QUIC-TLS spec.
//
- if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH) {
- if (Certificate == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
- QUIC_CERTIFICATE_HASH* CertHash = Certificate;
- AchaContext->CertHash.dwLength = sizeof(AchaContext->CertHash);
- AchaContext->CertHash.dwFlags |= SCH_MACHINE_CERT_HASH;
- AchaContext->CertHash.hProv = 0;
+
+#ifdef _KERNEL_MODE
+ if (IsClient) {
+ //
+ // Nothing supported for client right now.
+ //
+
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH) {
+ QUIC_DBG_ASSERT(CredConfig->CertificateHash != NULL);
+
+ QUIC_CERTIFICATE_HASH* CertHash = CredConfig->CertificateHash;
+ AchContext->CertHash.dwLength = sizeof(AchContext->CertHash);
+ AchContext->CertHash.dwFlags |= SCH_MACHINE_CERT_HASH;
+ AchContext->CertHash.hProv = 0;
RtlCopyMemory(
- AchaContext->CertHash.ShaHash,
+ AchContext->CertHash.ShaHash,
CertHash->ShaHash,
- sizeof(AchaContext->CertHash.ShaHash));
+ sizeof(AchContext->CertHash.ShaHash));
//
// Assume the Machine MY store if unspecified.
//
- RtlCopyMemory(AchaContext->CertHash.pwszStoreName, L"MY", sizeof(L"MY"));
+ RtlCopyMemory(AchContext->CertHash.pwszStoreName, L"MY", sizeof(L"MY"));
Credentials->cCreds = 1;
- Credentials->paCred = (PVOID)&AchaContext->CertHash;
+ Credentials->paCred = (PVOID)&AchContext->CertHash;
Credentials->dwCredFormat = SCH_CRED_FORMAT_CERT_HASH_STORE;
Credentials->dwFlags |= SCH_MACHINE_CERT_HASH;
- } else if (Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE) {
- if (Certificate == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Error;
- }
- QUIC_CERTIFICATE_HASH_STORE* CertHashStore = Certificate;
-
- AchaContext->CertHash.dwLength = sizeof(AchaContext->CertHash);
- AchaContext->CertHash.dwFlags |= CertHashStore->Flags;
- AchaContext->CertHash.hProv = 0;
+ } else if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH_STORE) {
+ QUIC_DBG_ASSERT(CredConfig->CertificateHashStore != NULL);
+ QUIC_CERTIFICATE_HASH_STORE* CertHashStore = CredConfig->CertificateHashStore;
+ AchContext->CertHash.dwLength = sizeof(AchContext->CertHash);
+ if (CertHashStore->Flags & QUIC_CERTIFICATE_HASH_STORE_FLAG_MACHINE_STORE) {
+ AchContext->CertHash.dwFlags |= SCH_MACHINE_CERT_HASH;
+ }
RtlCopyMemory(
- AchaContext->CertHash.ShaHash,
+ AchContext->CertHash.ShaHash,
&(CertHashStore->ShaHash),
- sizeof(AchaContext->CertHash.ShaHash));
+ sizeof(AchContext->CertHash.ShaHash));
#pragma warning(push)
#pragma warning(disable:6387) // Parameter 3 is allowed to be NULL when the value isn't wanted.
#pragma warning(disable:6385) // SAL ignores the annotations on strnlen_s because of the (ULONG) cast. Probably.
Status =
RtlUTF8ToUnicodeN(
- AchaContext->CertHash.pwszStoreName,
- sizeof(AchaContext->CertHash.pwszStoreName),
+ AchContext->CertHash.pwszStoreName,
+ sizeof(AchContext->CertHash.pwszStoreName),
NULL,
CertHashStore->StoreName,
- (ULONG) strnlen_s(
+ (ULONG)strnlen_s(
CertHashStore->StoreName,
sizeof(CertHashStore->StoreName)));
#pragma warning(pop)
if (!NT_SUCCESS(Status)) {
QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Status,
- "Convert cert store name to unicode");
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "Convert cert store name to unicode");
goto Error;
}
Credentials->cCreds = 1;
- Credentials->paCred = (PVOID)&AchaContext->CertHash;
+ Credentials->paCred = (PVOID)&AchContext->CertHash;
Credentials->dwCredFormat = SCH_CRED_FORMAT_CERT_HASH_STORE;
Credentials->dwFlags |= SCH_MACHINE_CERT_HASH;
- } else if (Principal != NULL) {
+ } else if (CredConfig->Principal != NULL) {
//
// No certificate hashes present, only use Principal.
//
- Credentials->cCreds = 0;
- Credentials->paCred = NULL;
+
} else {
Status = QUIC_STATUS_INVALID_PARAMETER;
QuicTraceEvent(
@@ -1066,9 +1082,9 @@ QuicTlsServerSecConfigCreate(
goto Error;
}
- if (Principal != NULL) {
+ if (CredConfig->Principal != NULL) {
- Status = QuicTlsUtf8ToUnicodeString(Principal, &AchaContext->Principal);
+ Status = QuicTlsUtf8ToUnicodeString(CredConfig->Principal, &AchContext->Principal);
if (!NT_SUCCESS(Status)) {
QuicTraceEvent(
LibraryErrorStatus,
@@ -1080,203 +1096,137 @@ QuicTlsServerSecConfigCreate(
Credentials->dwFlags |= SCH_CRED_SNI_CREDENTIAL;
}
+#else
- SecStatus =
- SspiAcquireCredentialsHandleAsyncW(
- Config->SspiContext,
- &AchaContext->Principal,
- (PUNICODE_STRING) &QuicTlsPackageName,
- SECPKG_CRED_INBOUND,
- NULL,
- &AchaContext->Credentials,
- NULL,
- NULL,
- &Config->CertificateHandle,
- NULL);
- if (SecStatus != SEC_E_OK) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- SecStatus,
- "SspiAcquireCredentialsHandleAsyncW");
- Status = SecStatusToQuicStatus(SecStatus);
- goto Error;
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE) {
+ Status = QuicCertCreate(CredConfig, &CertContext);
+ if (QUIC_FAILED(Status)) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "QuicCertCreate");
+ goto Error;
+ }
+
+ Credentials->cCreds = 1;
+ Credentials->paCred = &CertContext;
+
+ } else {
+ QUIC_DBG_ASSERT(IsClient);
+ Credentials->cCreds = 0;
+ Credentials->paCred = NULL;
}
+#endif
+
+#ifdef _KERNEL_MODE
- Status = QUIC_STATUS_PENDING;
- AchaContext = NULL;
-#else
//
- // User mode-only APIs and configuration.
+ // Kernel-mode only code path.
//
- TimeStamp CredExpiration;
- PCERT_CONTEXT CertContext = NULL;
-
- Status =
- QuicCertCreate(
- Flags,
- Certificate,
- Principal,
- &CertContext);
- if (QUIC_FAILED(Status)) {
+ AchContext->SspiContext = SspiCreateAsyncContext();
+ if (AchContext->SspiContext == NULL) {
QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Status,
- "QuicCertCreate");
+ LibraryError,
+ "[ lib] ERROR, %s.",
+ "SspiCreateAsyncContext");
+ Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Error;
}
- Credentials->cCreds = 1;
- Credentials->paCred = &CertContext;
-
- QuicTraceLogVerbose(
- SchannelAch,
- "[ tls] Calling ACH to create server security config");
-
SecStatus =
- AcquireCredentialsHandleW(
- NULL,
- UNISP_NAME_W,
- SECPKG_CRED_INBOUND,
- NULL,
- Credentials,
- NULL,
- NULL,
- &Config->CertificateHandle,
- &CredExpiration);
+ SspiSetAsyncNotifyCallback(
+ AchContext->SspiContext,
+ QuicTlsSspiNotifyCallback,
+ AchContext);
if (SecStatus != SEC_E_OK) {
QuicTraceEvent(
LibraryErrorStatus,
"[ lib] ERROR, %u, %s.",
SecStatus,
- "AcquireCredentialsHandleW");
+ "SspiSetAsyncNotifyCallback");
Status = SecStatusToQuicStatus(SecStatus);
goto Error;
}
- //
- // In user mode, call the completion in-line.
- //
QuicTraceLogVerbose(
- SchannelAchCompleteInline,
- "[ tls] Invoking security config completion callback, 0x%x",
- SecStatus);
- CompletionHandler(Context, SecStatusToQuicStatus(SecStatus), (QUIC_SEC_CONFIG*)Config);
- Status = QUIC_STATUS_PENDING;
-#endif
-
- //
- // The completion handler will return the context to caller, so we can clear it here.
- //
- Config = NULL;
-
-Error:
-
- if (Config != NULL) {
- QuicTlsServerSecConfigDelete(Config);
- Config = NULL;
- }
-
-#ifdef _KERNEL_MODE
- if (AchaContext != NULL) {
- QuicTlsFreeAchaContext(AchaContext);
- }
-#else
- if (CertContext != NULL && CertContext != Certificate) {
- CertFreeCertificateContext(CertContext);
- }
-#endif
-
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsClientSecConfigDelete(
- __drv_freesMem(ClientConfig) _Frees_ptr_ _In_ QUIC_CLIENT_SEC_CONFIG* ClientConfig
- )
-{
- QUIC_DBG_ASSERT(ClientConfig->IsServer == FALSE);
-
- if (SecIsValidHandle(&ClientConfig->SchannelHandle)) {
- FreeCredentialsHandle(&ClientConfig->SchannelHandle);
- SecInvalidateHandle(&ClientConfig->SchannelHandle);
- }
-
- QUIC_FREE(ClientConfig);
-}
+ SchannelAchWorkerStart,
+ "[ tls] Starting ACH worker");
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsClientSecConfigCreate(
- _In_ uint32_t Flags,
- _Outptr_ QUIC_SEC_CONFIG** ClientConfig
- )
-{
- TimeStamp CredExpiration;
- TLS_PARAMETERS TlsParameters = { 0 };
- SCH_CREDENTIALS SchannelCred = { 0 };
- SECURITY_STATUS SecStatus;
- QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+ TLS_WORKER_CONTEXT ThreadContext = { STATUS_SUCCESS, AchContext };
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
+ //
+ // For schannel resumption to work, we have to call the client side
+ // of this from a SYSTEM thread.
+ //
+ HANDLE ThreadHandle;
+ Status =
+ PsCreateSystemThread(
+ &ThreadHandle,
+ THREAD_ALL_ACCESS,
+ NULL,
+ NULL,
+ NULL,
+ QuicTlsAchWorker,
+ &ThreadContext);
+ if (QUIC_FAILED(Status)) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "PsCreateSystemThread(QuicTlsAchWorker)");
+ goto Error;
+ }
+ void* Thread = NULL;
+ Status =
+ ObReferenceObjectByHandle(
+ ThreadHandle,
+ THREAD_ALL_ACCESS,
+ *PsThreadType,
+ KernelMode,
+ &Thread,
+ NULL);
+ NtClose(ThreadHandle);
+ if (QUIC_FAILED(Status)) {
+ QuicTraceEvent(
+ LibraryErrorStatus,
+ "[ lib] ERROR, %u, %s.",
+ Status,
+ "ObReferenceObjectByHandle(QuicTlsAchWorker)");
+ goto Error;
+ }
+ KeWaitForSingleObject(Thread, Executive, KernelMode, FALSE, NULL);
+ ObDereferenceObject(Thread);
- if (ClientConfig == NULL) {
- return QUIC_STATUS_INVALID_PARAMETER;
+ } else {
+ //
+ // For schannel to successfully load the certificate (even a machine
+ // one), this needs to be on the caller's thread.
+ //
+ QuicTlsAchHelper(&ThreadContext);
}
- QUIC_CLIENT_SEC_CONFIG* Config = QUIC_ALLOC_PAGED(sizeof(QUIC_CLIENT_SEC_CONFIG));
- if (Config == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_CLIENT_SEC_CONFIG", sizeof(QUIC_CLIENT_SEC_CONFIG));
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
+ Status = ThreadContext.CompletionStatus;
+ AchContext = ThreadContext.AchContext;
- SecInvalidateHandle(&Config->SchannelHandle);
- Config->IsServer = FALSE;
- Config->RefCount = 1;
+#else // !_KERNEL_MODE
- SchannelCred.dwFlags = SCH_CRED_NO_DEFAULT_CREDS;
- SchannelCred.dwFlags |= SCH_USE_STRONG_CRYPTO;
- if (Flags & QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION) {
- SchannelCred.dwFlags |= SCH_CRED_MANUAL_CRED_VALIDATION;
- } else if (Flags != 0) {
- //
- // TODO - Schannel support for direct passthrough for certificate ignore
- // flags (Flags variable).
- //
- SchannelCred.dwFlags |= SCH_CRED_MANUAL_CRED_VALIDATION;
- }
+ QuicTraceLogVerbose(
+ SchannelAch,
+ "[ tls] Calling AcquireCredentialsHandleW");
- TlsParameters.grbitDisabledProtocols = (DWORD) ~SP_PROT_TLS1_3_CLIENT;
- TlsParameters.cAlpnIds = 0;
- TlsParameters.rgstrAlpnIds = NULL; // Only used on server.
- TlsParameters.cDisabledCrypto = 0;
- //
- // TODO: Disallow AES_CCM_8 algorithm, which are undefined in the QUIC-TLS spec.
- //
- TlsParameters.pDisabledCrypto = NULL;
- SchannelCred.cTlsParameters = 1;
- SchannelCred.pTlsParameters = &TlsParameters;
- SchannelCred.dwVersion = SCH_CREDENTIALS_VERSION;
-#ifdef _KERNEL_MODE
- PSECURITY_STRING PackageName = (PSECURITY_STRING) &QuicTlsPackageName;
-#else
- WCHAR* PackageName = UNISP_NAME_W;
-#endif
SecStatus =
AcquireCredentialsHandleW(
NULL,
- PackageName,
- SECPKG_CRED_OUTBOUND,
+ UNISP_NAME_W,
+ IsClient ? SECPKG_CRED_OUTBOUND : SECPKG_CRED_INBOUND,
NULL,
- &SchannelCred,
+ Credentials,
NULL,
NULL,
- &Config->SchannelHandle,
- &CredExpiration);
+ &AchContext->SecConfig->CredentialHandle,
+ NULL);
if (SecStatus != SEC_E_OK) {
QuicTraceEvent(
LibraryErrorStatus,
@@ -1284,104 +1234,54 @@ QuicTlsClientSecConfigCreate(
SecStatus,
"AcquireCredentialsHandleW");
Status = SecStatusToQuicStatus(SecStatus);
- QUIC_DBG_ASSERT(QUIC_FAILED(Status));
goto Error;
}
- *ClientConfig = (QUIC_SEC_CONFIG*)Config;
- Config = NULL;
- Status = QUIC_STATUS_SUCCESS;
-
-Error:
- if (Config != NULL) {
- QuicTlsClientSecConfigDelete(Config);
+ QuicTraceLogVerbose(
+ SchannelAchCompleteInline,
+ "[ tls] Invoking security config completion callback inline, 0x%x",
+ Status);
+
+ CompletionHandler(
+ CredConfig,
+ Context,
+ Status,
+ AchContext->SecConfig);
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ Status = QUIC_STATUS_PENDING;
+ } else {
+ Status = QUIC_STATUS_SUCCESS;
}
+ AchContext->SecConfig = NULL;
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsSecConfigAddRef(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- InterlockedIncrement(&SecurityConfig->RefCount);
- return SecurityConfig;
-}
+#endif // _KERNEL_MODE
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-QuicTlsSecConfigRelease(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- if (InterlockedDecrement(&SecurityConfig->RefCount) == 0) {
+Error:
- if (SecurityConfig->IsServer) {
- QuicTlsServerSecConfigDelete((QUIC_SERVER_SEC_CONFIG*)SecurityConfig);
- } else {
- QuicTlsClientSecConfigDelete((QUIC_CLIENT_SEC_CONFIG*)SecurityConfig);
- }
+#ifndef _KERNEL_MODE
+ if (CertContext != NULL && CertContext != CredConfig->CertificateContext) {
+ CertFreeCertificateContext(CertContext);
}
-}
+#endif
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionInitialize(
- _Out_ QUIC_TLS_SESSION** NewTlsSession
- )
-{
- *NewTlsSession = QUIC_ALLOC_NONPAGED(sizeof(QUIC_TLS_SESSION));
- if (*NewTlsSession == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_SESSION",
- sizeof(QUIC_TLS_SESSION));
- return QUIC_STATUS_OUT_OF_MEMORY;
+ if (AchContext != NULL) {
+ QuicTlsFreeAchContext(AchContext);
}
- return QUIC_STATUS_SUCCESS;
+
+ return Status;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
void
-QuicTlsSessionUninitialize(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
+QuicTlsSecConfigDelete(
+ __drv_freesMem(ServerConfig) _Frees_ptr_ _In_ QUIC_SEC_CONFIG* ServerConfig
)
{
- if (TlsSession != NULL) {
- QUIC_FREE(TlsSession);
+ if (SecIsValidHandle(&ServerConfig->CredentialHandle)) {
+ FreeCredentialsHandle(&ServerConfig->CredentialHandle);
}
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionSetTicketKey(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_reads_bytes_(44)
- const void* Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession);
- UNREFERENCED_PARAMETER(Buffer);
- return QUIC_STATUS_NOT_SUPPORTED;
-}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionAddTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const uint8_t * const Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession);
- UNREFERENCED_PARAMETER(BufferLength);
- UNREFERENCED_PARAMETER(Buffer);
- return QUIC_STATUS_NOT_SUPPORTED;
+ QUIC_FREE(ServerConfig);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -1401,7 +1301,19 @@ QuicTlsInitialize(
const size_t TlsSize = sizeof(QUIC_TLS) + (size_t)AppProtocolsSize;
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
- QUIC_TLS* TlsContext = QUIC_ALLOC_NONPAGED(TlsSize);
+ QUIC_TLS* TlsContext = NULL;
+
+ if (Config->IsServer != !(Config->SecConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT)) {
+ QuicTraceEvent(
+ TlsError,
+ "[ tls][%p] ERROR, %s.",
+ Config->Connection,
+ "Mismatched SEC_CONFIG IsServer state");
+ Status = QUIC_STATUS_INVALID_PARAMETER;
+ goto Error;
+ }
+
+ TlsContext = QUIC_ALLOC_NONPAGED(TlsSize);
if (TlsContext == NULL) {
QuicTraceEvent(
AllocFailure,
@@ -1417,10 +1329,11 @@ QuicTlsInitialize(
SecInvalidateHandle(&TlsContext->SchannelContext);
TlsContext->IsServer = Config->IsServer;
- TlsContext->TlsSession = Config->TlsSession;
TlsContext->Connection = Config->Connection;
TlsContext->ReceiveTPCallback = Config->ReceiveTPCallback;
+ TlsContext->ReceiveTicketCallback = Config->ReceiveResumptionCallback;
TlsContext->SNI = Config->ServerName;
+ TlsContext->SecConfig = Config->SecConfig;
QuicTraceLogConnVerbose(
SchannelContextCreated,
@@ -1445,12 +1358,10 @@ QuicTlsInitialize(
TlsContext->TransportParams->BufferSize =
(uint16_t)(Config->LocalTPLength - FIELD_OFFSET(SEND_GENERIC_TLS_EXTENSION, Buffer));
- //
- // Associate the existing security config with this TLS context.
- //
- TlsContext->SecConfig = QuicTlsSecConfigAddRef(Config->SecConfig);
-
State->EarlyDataState = QUIC_TLS_EARLY_DATA_UNSUPPORTED; // 0-RTT not currently supported.
+ if (Config->ResumptionTicketBuffer != NULL) {
+ QUIC_FREE(Config->ResumptionTicketBuffer);
+ }
Status = QUIC_STATUS_SUCCESS;
*NewTlsContext = TlsContext;
@@ -1458,9 +1369,6 @@ QuicTlsInitialize(
Error:
if (TlsContext) {
- if (TlsContext->SecConfig != NULL) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
- }
QUIC_FREE(TlsContext);
}
return Status;
@@ -1508,9 +1416,6 @@ QuicTlsUninitialize(
"Cleaning up");
QuicTlsResetSchannel(TlsContext);
- if (TlsContext->SecConfig != NULL) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
- }
if (TlsContext->TransportParams != NULL) {
QUIC_FREE(TlsContext->TransportParams);
}
@@ -1535,15 +1440,6 @@ QuicTlsReset(
QuicTlsResetSchannel(TlsContext);
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsGetSecConfig(
- _In_ QUIC_TLS* TlsContext
- )
-{
- return QuicTlsSecConfigAddRef(TlsContext->SecConfig);
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_TLS_RESULT_FLAGS
QuicTlsWriteDataToSchannel(
@@ -1738,12 +1634,11 @@ QuicTlsWriteDataToSchannel(
SECURITY_STATUS SecStatus;
if (TlsContext->IsServer) {
- QUIC_SERVER_SEC_CONFIG* SecConfig = (QUIC_SERVER_SEC_CONFIG*)TlsContext->SecConfig;
- QUIC_DBG_ASSERT(SecConfig->IsServer == TRUE);
+ QUIC_DBG_ASSERT(!(TlsContext->SecConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT));
SecStatus =
AcceptSecurityContext(
- &SecConfig->CertificateHandle,
+ &TlsContext->SecConfig->CredentialHandle,
SecIsValidHandle(&TlsContext->SchannelContext) ? &TlsContext->SchannelContext : NULL,
&InSecBufferDesc,
ContextReq,
@@ -1754,12 +1649,11 @@ QuicTlsWriteDataToSchannel(
NULL); // FYI, used for client authentication certificate.
} else {
- QUIC_CLIENT_SEC_CONFIG* SecConfig = (QUIC_CLIENT_SEC_CONFIG*)TlsContext->SecConfig;
- QUIC_DBG_ASSERT(SecConfig->IsServer == FALSE);
+ QUIC_DBG_ASSERT(TlsContext->SecConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT);
SecStatus =
InitializeSecurityContextW(
- &SecConfig->SchannelHandle,
+ &TlsContext->SecConfig->CredentialHandle,
SecIsValidHandle(&TlsContext->SchannelContext) ? &TlsContext->SchannelContext : NULL,
TargetServerName, // Only set to non-null on client initial.
ContextReq,
@@ -2230,7 +2124,10 @@ QuicTlsProcessData(
// We need to wait for the handshake to be complete before setting
// the flag, since we don't know if we've received the ticket yet.
//
- TlsContext->TicketReceived = TRUE;
+ (void)TlsContext->ReceiveTicketCallback(
+ TlsContext->Connection,
+ 0,
+ NULL);
}
QuicTraceLogConnVerbose(
@@ -2279,26 +2176,6 @@ QuicTlsProcessDataComplete(
return QUIC_TLS_RESULT_ERROR;
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsReadTicket(
- _In_ QUIC_TLS* TlsContext,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- uint8_t* Buffer
- )
-{
- BufferLength = 0;
- if (TlsContext->TicketReceived) {
- if (Buffer == NULL) {
- return QUIC_STATUS_BUFFER_TOO_SMALL;
- } else {
- return QUIC_STATUS_SUCCESS;
- }
- }
- return QUIC_STATUS_INVALID_STATE;
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicTlsParamSet(
diff --git a/src/platform/tls_stub.c b/src/platform/tls_stub.c
index a5198e6c24..235413f987 100644
--- a/src/platform/tls_stub.c
+++ b/src/platform/tls_stub.c
@@ -188,71 +188,11 @@ typedef struct QUIC_KEY {
uint64_t Secret;
} QUIC_KEY;
-typedef struct QUIC_TLS_SESSION {
-
- //
- // Total number of references on the TLS session. Only freed once all
- // references are released.
- //
- long RefCount;
-
- //
- // Lock protecting parallel access to the ticket store.
- //
- QUIC_RW_LOCK TicketStoreLock;
-
- //
- // The in memory ticket store for this session.
- //
- QUIC_HASHTABLE TicketStore;
-
-} QUIC_TLS_SESSION;
-
-//
-// Contiguous memory representation of a ticket.
-//
-typedef struct QUIC_TLS_TICKET {
-
- uint16_t ServerNameLength;
- uint16_t TicketLength;
- _Field_size_(ServerNameLength + TicketLength)
- uint8_t Buffer[0];
-
-} QUIC_TLS_TICKET;
-
-//
-// Entry into the TLS ticket store.
-//
-typedef struct QUIC_TLS_TICKET_ENTRY {
-
- QUIC_HASHTABLE_ENTRY Entry;
- long RefCount;
- QUIC_TLS_TICKET Ticket;
-
-} QUIC_TLS_TICKET_ENTRY;
-
-//
-// Releases a reference on the TLS ticket, and frees it if it was the last ref.
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsTicketRelease(
- _In_ QUIC_TLS_TICKET* Ticket
- )
-{
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- QUIC_CONTAINING_RECORD(Ticket, QUIC_TLS_TICKET_ENTRY, Ticket);
- if (InterlockedDecrement(&TicketEntry->RefCount) == 0) {
- QUIC_FREE(TicketEntry);
- }
-}
-
typedef struct QUIC_SEC_CONFIG {
- QUIC_RUNDOWN_REF* CleanupRundown;
- long RefCount;
- uint32_t Flags;
- QUIC_CERT* Certificate;
+ QUIC_CREDENTIAL_TYPE Type;
+ QUIC_CREDENTIAL_FLAGS Flags;
+ QUIC_CERTIFICATE* Certificate;
uint16_t FormatLength;
uint8_t FormatBuffer[SIZEOF_CERT_CHAIN_LIST_LENGTH];
@@ -262,27 +202,26 @@ typedef struct QUIC_TLS {
BOOLEAN IsServer : 1;
BOOLEAN EarlyDataAttempted : 1;
- BOOLEAN TicketReady : 1;
QUIC_FAKE_TLS_MESSAGE_TYPE LastMessageType; // Last message sent.
- QUIC_TLS_SESSION* TlsSession;
QUIC_SEC_CONFIG* SecConfig;
QUIC_CONNECTION* Connection;
QUIC_TLS_RECEIVE_TP_CALLBACK_HANDLER ReceiveTPCallback;
- QUIC_TLS_RECEIVE_RESUMPTION_CALLBACK_HANDLER ReceiveResumptionCallback;
+ QUIC_TLS_RECEIVE_TICKET_CALLBACK_HANDLER ReceiveTicketCallback;
uint16_t AlpnBufferLength;
const uint8_t* AlpnBuffer;
const char* SNI;
+ const uint8_t* ResumptionTicketBuffer;
+ uint32_t ResumptionTicketLength;
+
const uint8_t* LocalTPBuffer;
uint32_t LocalTPLength;
- QUIC_TLS_TICKET* Ticket;
-
} QUIC_TLS;
char
@@ -336,74 +275,77 @@ QuicTlsLibraryUninitialize(
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
-QuicTlsServerSecConfigCreate(
- _Inout_ QUIC_RUNDOWN_REF* Rundown,
- _In_ QUIC_SEC_CONFIG_FLAGS Flags,
- _In_opt_ void* Certificate,
- _In_opt_z_ const char* Principal,
+QuicTlsSecConfigCreate(
+ _In_ const QUIC_CREDENTIAL_CONFIG* CredConfig,
_In_opt_ void* Context,
_In_ QUIC_SEC_CONFIG_CREATE_COMPLETE_HANDLER CompletionHandler
)
{
- QUIC_STATUS Status;
- QUIC_SEC_CONFIG* SecurityConfig = NULL;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS &&
+ CredConfig->AsyncHandler == NULL) {
+ return QUIC_STATUS_INVALID_PARAMETER;
+ }
- if (!QuicRundownAcquire(Rundown)) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "Failed to acquire sec config rundown");
- Status = QUIC_STATUS_INVALID_STATE;
- goto Error;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_ENABLE_OCSP) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported by this TLS implementation
+ }
+
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT) {
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_NOT_SUPPORTED; // Not supported for client (yet)
+ }
+ } else {
+ if (CredConfig->Type == QUIC_CREDENTIAL_TYPE_NONE) {
+ return QUIC_STATUS_INVALID_PARAMETER; // Required for server
+ }
}
+ QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+
#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete)")
- SecurityConfig = QUIC_ALLOC_PAGED(sizeof(QUIC_SEC_CONFIG));
+ QUIC_SEC_CONFIG* SecurityConfig = QUIC_ALLOC_PAGED(sizeof(QUIC_SEC_CONFIG));
if (SecurityConfig == NULL) {
- QuicRundownRelease(Rundown);
Status = QUIC_STATUS_OUT_OF_MEMORY;
goto Error;
}
- SecurityConfig->CleanupRundown = Rundown;
- SecurityConfig->RefCount = 1;
- SecurityConfig->Flags = Flags;
+ QuicZeroMemory(SecurityConfig, sizeof(QUIC_SEC_CONFIG));
+ SecurityConfig->Type = CredConfig->Type;
+ SecurityConfig->Flags = CredConfig->Flags;
- if ((uint32_t)Flags == QUIC_SEC_CONFIG_FLAG_CERTIFICATE_NULL) {
- goto Format; // Using NULL certificate (stub-only).
- } else {
- Status =
- QuicCertCreate(
- Flags,
- Certificate,
- Principal,
- &SecurityConfig->Certificate);
- if (QUIC_FAILED(Status)) {
- goto Error;
+ if (!(CredConfig->Flags & QUIC_CREDENTIAL_FLAG_CLIENT)) {
+ if (CredConfig->Type != QUIC_CREDENTIAL_TYPE_NONE &&
+ CredConfig->Type != QUIC_CREDENTIAL_TYPE_NULL) {
+ Status = QuicCertCreate(CredConfig, &SecurityConfig->Certificate);
+ if (QUIC_FAILED(Status)) {
+ goto Error;
+ }
}
- }
-Format:
-
- SecurityConfig->FormatLength =
- (uint16_t)QuicCertFormat(
- SecurityConfig->Certificate,
- sizeof(SecurityConfig->FormatBuffer),
- SecurityConfig->FormatBuffer);
-
- Status = QUIC_STATUS_SUCCESS;
+ SecurityConfig->FormatLength =
+ (uint16_t)QuicCertFormat(
+ SecurityConfig->Certificate,
+ sizeof(SecurityConfig->FormatBuffer),
+ SecurityConfig->FormatBuffer);
+ }
CompletionHandler(
+ CredConfig,
Context,
Status,
SecurityConfig);
SecurityConfig = NULL;
+ if (CredConfig->Flags & QUIC_CREDENTIAL_FLAG_LOAD_ASYNCHRONOUS) {
+ Status = QUIC_STATUS_PENDING;
+ } else {
+ Status = QUIC_STATUS_SUCCESS;
+ }
+
Error:
if (SecurityConfig != NULL) {
QUIC_FREE(SecurityConfig);
- QuicRundownRelease(Rundown);
}
return Status;
@@ -412,370 +354,14 @@ QuicTlsServerSecConfigCreate(
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicTlsSecConfigDelete(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
+ __drv_freesMem(ServerConfig) _Frees_ptr_ _In_
+ QUIC_SEC_CONFIG* SecurityConfig
)
{
- if (!(SecurityConfig->Flags & QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT)) {
+ if (SecurityConfig->Type != QUIC_CREDENTIAL_TYPE_CERTIFICATE_CONTEXT) {
QuicCertFree(SecurityConfig->Certificate);
}
- QUIC_RUNDOWN_REF* Rundown = SecurityConfig->CleanupRundown;
QUIC_FREE(SecurityConfig);
- if (Rundown != NULL) {
- QuicRundownRelease(Rundown);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsClientSecConfigCreate(
- _In_ uint32_t Flags,
- _Outptr_ QUIC_SEC_CONFIG** ClientConfig
- )
-{
- #pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (QuicTlsSecConfigDelete)")
- QUIC_SEC_CONFIG* SecurityConfig = QUIC_ALLOC_PAGED(sizeof(QUIC_SEC_CONFIG));
- if (SecurityConfig == NULL) {
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
-
- QuicZeroMemory(SecurityConfig, sizeof(*SecurityConfig));
- SecurityConfig->Flags = (uint32_t)Flags;
- SecurityConfig->RefCount = 1;
-
- *ClientConfig = SecurityConfig;
-
- return QUIC_STATUS_SUCCESS;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsSecConfigAddRef(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- InterlockedIncrement(&SecurityConfig->RefCount);
- return SecurityConfig;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QUIC_API
-QuicTlsSecConfigRelease(
- _In_ QUIC_SEC_CONFIG* SecurityConfig
- )
-{
- if (InterlockedDecrement(&SecurityConfig->RefCount) == 0) {
- QuicTlsSecConfigDelete(SecurityConfig);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionInitialize(
- _Out_ QUIC_TLS_SESSION** NewTlsSession
- )
-{
- QUIC_STATUS Status;
- QUIC_TLS_SESSION* TlsSession = QUIC_ALLOC_PAGED(sizeof(QUIC_TLS_SESSION));
- if (TlsSession == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_SESSION",
- sizeof(QUIC_TLS_SESSION));
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- if (!QuicHashtableInitializeEx(&TlsSession->TicketStore, QUIC_HASH_MIN_SIZE)) {
- Status = QUIC_STATUS_OUT_OF_MEMORY;
- goto Error;
- }
-
- QuicRwLockInitialize(&TlsSession->TicketStoreLock);
- TlsSession->RefCount = 1;
-
- *NewTlsSession = TlsSession;
- TlsSession = NULL;
-
- Status = QUIC_STATUS_SUCCESS;
-
-Error:
-
- if (TlsSession != NULL) {
- QUIC_FREE(TlsSession);
- }
-
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionFree(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (TlsSession != NULL) {
-
- //
- // Enumerate and free all entries in the table.
- //
- QUIC_HASHTABLE_ENTRY* Entry;
- QUIC_HASHTABLE_ENUMERATOR Enumerator;
- QuicHashtableEnumerateBegin(&TlsSession->TicketStore, &Enumerator);
- while (TRUE) {
- Entry = QuicHashtableEnumerateNext(&TlsSession->TicketStore, &Enumerator);
- if (Entry == NULL) {
- QuicHashtableEnumerateEnd(&TlsSession->TicketStore, &Enumerator);
- break;
- }
- QuicHashtableRemove(&TlsSession->TicketStore, Entry, NULL);
- QUIC_FREE(Entry);
- }
-
- QuicHashtableUninitialize(&TlsSession->TicketStore);
- QuicRwLockUninitialize(&TlsSession->TicketStoreLock);
- QUIC_FREE(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_SESSION*
-QuicTlsSessionAddRef(
- _In_ QUIC_TLS_SESSION* TlsSession
- )
-{
- InterlockedIncrement(&TlsSession->RefCount);
- return TlsSession;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionRelease(
- _In_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (InterlockedDecrement(&TlsSession->RefCount) == 0) {
- QuicTlsSessionFree(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionUninitialize(
- _In_opt_ QUIC_TLS_SESSION* TlsSession
- )
-{
- if (TlsSession != NULL) {
- QuicTlsSessionRelease(TlsSession);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionSetTicketKey(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_reads_bytes_(44)
- const void* Buffer
- )
-{
- UNREFERENCED_PARAMETER(TlsSession);
- UNREFERENCED_PARAMETER(Buffer);
- return QUIC_STATUS_SUCCESS;
-}
-
-//
-// Requires TlsSession->TicketStoreLock to be held (shared or exclusive).
-//
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET_ENTRY*
-QuicTlsSessionLookupTicketEntry(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName,
- _In_ uint32_t TicketHash
- )
-{
- QUIC_HASHTABLE_LOOKUP_CONTEXT Context;
- QUIC_HASHTABLE_ENTRY* Entry =
- QuicHashtableLookup(&TlsSession->TicketStore, TicketHash, &Context);
-
- while (Entry != NULL) {
- QUIC_TLS_TICKET_ENTRY* Temp =
- QUIC_CONTAINING_RECORD(Entry, QUIC_TLS_TICKET_ENTRY, Entry);
- if (Temp->Ticket.ServerNameLength == ServerNameLength &&
- memcmp(Temp->Ticket.Buffer, ServerName, ServerNameLength) == 0) {
- return Temp;
- }
- Entry = QuicHashtableLookupNext(&TlsSession->TicketStore, &Context);
- }
-
- return NULL;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-void
-QuicTlsSessionInsertTicketEntry(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ QUIC_TLS_TICKET_ENTRY* NewTicketEntry
- )
-{
- uint32_t TicketHash =
- QuicHashSimple(
- NewTicketEntry->Ticket.ServerNameLength,
- NewTicketEntry->Ticket.Buffer);
-
- QuicRwLockAcquireExclusive(&TlsSession->TicketStoreLock);
-
- //
- // Since we only allow one entry per server name, we need to see if there
- // is already a ticket in the store, and if so, remove it.
- //
- QUIC_TLS_TICKET_ENTRY* OldTicketEntry =
- QuicTlsSessionLookupTicketEntry(
- TlsSession,
- NewTicketEntry->Ticket.ServerNameLength,
- (const char*)NewTicketEntry->Ticket.Buffer,
- TicketHash);
-
- if (OldTicketEntry != NULL) {
- QuicHashtableRemove(
- &TlsSession->TicketStore, &OldTicketEntry->Entry, NULL);
- }
-
- //
- // Add the new ticket to the store.
- //
- QuicHashtableInsert(
- &TlsSession->TicketStore,
- &NewTicketEntry->Entry,
- TicketHash,
- NULL);
-
- QuicRwLockReleaseExclusive(&TlsSession->TicketStoreLock);
-
- if (OldTicketEntry != NULL) {
- //
- // Release the old ticket outside the lock.
- //
- QuicTlsTicketRelease(&OldTicketEntry->Ticket);
- }
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET*
-QuicTlsSessionGetTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint16_t ServerNameLength,
- _In_reads_(ServerNameLength)
- const char* ServerName
- )
-{
- uint32_t TicketHash =
- QuicHashSimple(ServerNameLength, (const uint8_t*)ServerName);
-
- QuicRwLockAcquireShared(&TlsSession->TicketStoreLock);
-
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- QuicTlsSessionLookupTicketEntry(
- TlsSession, ServerNameLength, ServerName, TicketHash);
-
- if (TicketEntry != NULL) {
- InterlockedIncrement(&TicketEntry->RefCount);
- }
-
- QuicRwLockReleaseShared(&TlsSession->TicketStoreLock);
-
- return TicketEntry == NULL ? NULL : &TicketEntry->Ticket;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsSessionAddTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_ uint32_t BufferLength,
- _In_reads_bytes_(BufferLength)
- const uint8_t * const Buffer
- )
-{
- const QUIC_TLS_TICKET* const Ticket = (const QUIC_TLS_TICKET* const)Buffer;
-
- if (BufferLength < sizeof(QUIC_TLS_TICKET)) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
-
- uint32_t ExpectedBufferLength =
- sizeof(QUIC_TLS_TICKET) +
- Ticket->ServerNameLength +
- Ticket->TicketLength;
-
- if (BufferLength < ExpectedBufferLength) {
- return QUIC_STATUS_INVALID_PARAMETER;
- }
-
- size_t TicketEntryLength =
- sizeof(QUIC_TLS_TICKET_ENTRY) +
- Ticket->ServerNameLength +
- Ticket->TicketLength;
-
-#pragma prefast(suppress: __WARNING_6014, "Memory is correctly freed (TLS Session is cleaned up).")
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- (QUIC_TLS_TICKET_ENTRY*)QUIC_ALLOC_PAGED(TicketEntryLength);
- if (TicketEntry == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_TICKET_ENTRY",
- TicketEntryLength);
- return QUIC_STATUS_OUT_OF_MEMORY;
- }
-
- TicketEntry->RefCount = 1; // 1 for the store.
- memcpy(&TicketEntry->Ticket, Ticket, ExpectedBufferLength);
-
- QuicTlsSessionInsertTicketEntry(TlsSession, TicketEntry);
-
- return QUIC_STATUS_SUCCESS;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_TLS_TICKET*
-QuicTlsSessionCreateTicket(
- _In_ QUIC_TLS_SESSION* TlsSession,
- _In_z_ const char* ServerName,
- _In_ uint16_t TicketLength,
- _In_reads_bytes_(TicketLength)
- const uint8_t* Ticket
- )
-{
- uint16_t ServerNameLength = (uint16_t)strlen(ServerName);
-
- size_t TicketEntryLength =
- sizeof(QUIC_TLS_TICKET_ENTRY) +
- ServerNameLength +
- TicketLength;
-
- QUIC_TLS_TICKET_ENTRY* TicketEntry =
- (QUIC_TLS_TICKET_ENTRY*)QUIC_ALLOC_PAGED(TicketEntryLength);
- if (TicketEntry == NULL) {
- QuicTraceEvent(
- AllocFailure,
- "Allocation of '%s' failed. (%llu bytes)",
- "QUIC_TLS_TICKET_ENTRY",
- TicketEntryLength);
- return NULL;
- }
-
- TicketEntry->RefCount = 2; // 1 for the store, 1 for the return.
- TicketEntry->Ticket.ServerNameLength = ServerNameLength;
- TicketEntry->Ticket.TicketLength = TicketLength;
- memcpy(TicketEntry->Ticket.Buffer, ServerName, ServerNameLength);
- memcpy(TicketEntry->Ticket.Buffer + ServerNameLength, Ticket, TicketLength);
-
- QuicTlsSessionInsertTicketEntry(TlsSession, TicketEntry);
-
- return &TicketEntry->Ticket;
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -804,15 +390,14 @@ QuicTlsInitialize(
QuicZeroMemory(TlsContext, sizeof(QUIC_TLS));
TlsContext->IsServer = Config->IsServer;
- TlsContext->TlsSession = QuicTlsSessionAddRef(Config->TlsSession);
TlsContext->AlpnBufferLength = Config->AlpnBufferLength;
TlsContext->AlpnBuffer = Config->AlpnBuffer;
TlsContext->LocalTPBuffer = Config->LocalTPBuffer;
TlsContext->LocalTPLength = Config->LocalTPLength;
- TlsContext->SecConfig = QuicTlsSecConfigAddRef(Config->SecConfig);
+ TlsContext->SecConfig = Config->SecConfig;
TlsContext->Connection = Config->Connection;
TlsContext->ReceiveTPCallback = Config->ReceiveTPCallback;
- TlsContext->ReceiveResumptionCallback = Config->ReceiveResumptionCallback;
+ TlsContext->ReceiveTicketCallback = Config->ReceiveResumptionCallback;
QuicTraceLogConnVerbose(
StubTlsContextCreated,
@@ -832,25 +417,6 @@ QuicTlsInitialize(
goto Error;
}
- if (!TlsContext->IsServer) {
- //
- // Look up a 0-RTT ticket from TlsSession ticket store.
- //
- TlsContext->Ticket =
- QuicTlsSessionGetTicket(
- TlsContext->TlsSession,
- (uint16_t)ServerNameLength,
- Config->ServerName);
-
- if (TlsContext->Ticket != NULL) {
-
- QuicTraceLogConnVerbose(
- StubTlsUsing0Rtt,
- TlsContext->Connection,
- "Using 0-RTT ticket.");
- }
- }
-
TlsContext->SNI = QUIC_ALLOC_PAGED(ServerNameLength + 1);
if (TlsContext->SNI == NULL) {
QuicTraceEvent(
@@ -864,13 +430,21 @@ QuicTlsInitialize(
memcpy((char*)TlsContext->SNI, Config->ServerName, ServerNameLength + 1);
}
+ TlsContext->ResumptionTicketLength = Config->ResumptionTicketLength;
+ TlsContext->ResumptionTicketBuffer = Config->ResumptionTicketBuffer;
+ if (TlsContext->ResumptionTicketBuffer != NULL) {
+ QuicTraceLogConnVerbose(
+ StubTlsUsing0Rtt,
+ TlsContext->Connection,
+ "Using 0-RTT ticket.");
+ }
+
*NewTlsContext = TlsContext;
Status = QUIC_STATUS_SUCCESS;
Error:
if (QUIC_FAILED(Status)) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
if (TlsContext->SNI) {
QUIC_FREE(TlsContext->SNI);
}
@@ -894,12 +468,8 @@ QuicTlsUninitialize(
TlsContext->Connection,
"Cleaning up");
- if (TlsContext->Ticket != NULL) {
- QuicTlsTicketRelease(TlsContext->Ticket);
- }
-
- if (TlsContext->SecConfig != NULL) {
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
+ if (TlsContext->ResumptionTicketBuffer != NULL) {
+ QUIC_FREE(TlsContext->ResumptionTicketBuffer);
}
if (TlsContext->SNI != NULL) {
@@ -910,7 +480,6 @@ QuicTlsUninitialize(
QUIC_FREE(TlsContext->LocalTPBuffer);
}
- QuicTlsSessionRelease(TlsContext->TlsSession);
QUIC_FREE(TlsContext);
}
}
@@ -930,15 +499,6 @@ QuicTlsReset(
TlsContext->LastMessageType = QUIC_TLS_MESSAGE_INVALID;
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_SEC_CONFIG*
-QuicTlsGetSecConfig(
- _In_ QUIC_TLS* TlsContext
- )
-{
- return QuicTlsSecConfigAddRef(TlsContext->SecConfig);
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicTlsServerProcess(
@@ -991,7 +551,7 @@ QuicTlsServerProcess(
}
case TlsExt_SessionTicket: {
TlsContext->EarlyDataAttempted = TRUE;
- if (TlsContext->ReceiveResumptionCallback(
+ if (TlsContext->ReceiveTicketCallback(
TlsContext->Connection,
ExtLength,
((QUIC_TLS_SESSION_TICKET_EXT*)ExtList)->Ticket)) {
@@ -1158,7 +718,6 @@ QuicTlsServerProcess(
TlsContext->Connection,
"Handshake complete");
- QuicTlsSecConfigRelease(TlsContext->SecConfig);
TlsContext->SecConfig = NULL;
*ResultFlags |= QUIC_TLS_RESULT_READ_KEY_UPDATED;
@@ -1253,19 +812,19 @@ QuicTlsClientProcess(
memcpy(ALPN->AlpnList, TlsContext->AlpnBuffer, TlsContext->AlpnBufferLength);
ExtListLength += 6 + TlsContext->AlpnBufferLength;
- if (TlsContext->Ticket != NULL) {
+ if (TlsContext->ResumptionTicketBuffer != NULL) {
TlsContext->EarlyDataAttempted = TRUE;
QUIC_TLS_SESSION_TICKET_EXT* Ticket =
(QUIC_TLS_SESSION_TICKET_EXT*)
(ClientMessage->CLIENT_INITIAL.ExtList + ExtListLength);
TlsWriteUint16(Ticket->ExtType, TlsExt_SessionTicket);
- TlsWriteUint16(Ticket->ExtLen, TlsContext->Ticket->TicketLength);
+ TlsWriteUint16(Ticket->ExtLen, (uint16_t)TlsContext->ResumptionTicketLength);
memcpy(
Ticket->Ticket,
- TlsContext->Ticket->Buffer + TlsContext->Ticket->ServerNameLength,
- TlsContext->Ticket->TicketLength);
- ExtListLength += 4 + TlsContext->Ticket->TicketLength;
+ TlsContext->ResumptionTicketBuffer,
+ TlsContext->ResumptionTicketLength);
+ ExtListLength += 4 + (uint16_t)TlsContext->ResumptionTicketLength;
} else {
TlsContext->EarlyDataAttempted = FALSE;
}
@@ -1371,14 +930,14 @@ QuicTlsClientProcess(
ExtListLength -= ExtLength + 4;
}
- if (TlsContext->SecConfig->Flags & QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION) {
+ if (TlsContext->SecConfig->Flags & QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION) {
QuicTraceLogConnWarning(
StubTlsCertValidationDisabled,
TlsContext->Connection,
"Certificate validation disabled!");
} else {
- QUIC_CERT* ServerCert =
+ QUIC_CERTIFICATE* ServerCert =
QuicCertParseChain(
ServerMessage->SERVER_HANDSHAKE.CertificateLength,
ServerMessage->SERVER_HANDSHAKE.Certificate);
@@ -1474,34 +1033,16 @@ QuicTlsClientProcess(
QuicTraceLogConnVerbose(
StubTlsRecvNewSessionTicket,
TlsContext->Connection,
- "Received new ticket. ticket_len:%u session_len:%u for %s",
- (uint32_t)ServerMessageLength,
- (uint32_t)0,
+ "Received new ticket. ticket_len:%u for %s",
+ ServerMessageLength,
TlsContext->SNI);
QUIC_FRE_ASSERT(ServerMessageLength < UINT16_MAX);
- //
- // Release any previous ticket.
- //
- if (TlsContext->Ticket != NULL) {
- QuicTlsTicketRelease(TlsContext->Ticket);
- }
-
- //
- // Add new ticket to TlsSession ticket store.
- //
- TlsContext->Ticket =
- QuicTlsSessionCreateTicket(
- TlsContext->TlsSession,
- TlsContext->SNI,
- (uint16_t)ServerMessageLength,
- ServerMessage->TICKET.Ticket);
-
- if (TlsContext->Ticket != NULL) {
- TlsContext->TicketReady = TRUE;
- *ResultFlags |= QUIC_TLS_RESULT_TICKET;
- }
+ (void)TlsContext->ReceiveTicketCallback(
+ TlsContext->Connection,
+ ServerMessageLength,
+ ServerMessage->TICKET.Ticket);
DrainLength = (uint16_t)ServerMessageLength + 4;
break;
@@ -1536,7 +1077,7 @@ QuicTlsHasValidMessageToProcess(
return TRUE;
}
- if (BufferLength < 7) {
+ if (BufferLength < 4) {
QuicTraceEvent(
TlsError,
"[ tls][%p] ERROR, %s.",
@@ -1655,57 +1196,6 @@ QuicTlsProcessDataComplete(
return QUIC_TLS_RESULT_ERROR;
}
-_IRQL_requires_max_(PASSIVE_LEVEL)
-QUIC_STATUS
-QuicTlsReadTicket(
- _In_ QUIC_TLS* TlsContext,
- _Inout_ uint32_t* BufferLength,
- _Out_writes_bytes_opt_(*BufferLength)
- uint8_t* Buffer
- )
-{
- QUIC_STATUS Status;
-
- if (!TlsContext->TicketReady) {
- Status = QUIC_STATUS_INVALID_STATE;
- goto Exit;
- }
-
- uint32_t TicketBufferLength =
- sizeof(QUIC_TLS_TICKET) +
- TlsContext->Ticket->ServerNameLength +
- TlsContext->Ticket->TicketLength;
-
- if (*BufferLength < TicketBufferLength) {
- *BufferLength = TicketBufferLength;
- Status = QUIC_STATUS_BUFFER_TOO_SMALL;
- goto Exit;
- }
-
- if (Buffer == NULL) {
- Status = QUIC_STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- QuicTraceLogConnVerbose(
- StubTlsReadTicket,
- TlsContext->Connection,
- "Ticket (%u bytes) read.",
- TicketBufferLength);
-
- QuicCopyMemory(
- Buffer,
- TlsContext->Ticket,
- TicketBufferLength);
- *BufferLength = TicketBufferLength;
-
- Status = QUIC_STATUS_SUCCESS;
-
-Exit:
-
- return Status;
-}
-
_IRQL_requires_max_(PASSIVE_LEVEL)
QUIC_STATUS
QuicTlsParamSet(
diff --git a/src/platform/unittest/TlsTest.cpp b/src/platform/unittest/TlsTest.cpp
index 105257cb2f..a070636fa6 100644
--- a/src/platform/unittest/TlsTest.cpp
+++ b/src/platform/unittest/TlsTest.cpp
@@ -12,10 +12,6 @@
#include "TlsTest.cpp.clog.h"
#endif
-const uint32_t CertValidationIgnoreFlags =
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID;
-
const uint16_t UnknownCaError = 48;
const uint32_t DefaultFragmentSize = 1200;
@@ -26,41 +22,42 @@ const uint8_t MultiAlpn[] = { 1, 'C', 1, 'A', 1, 'B' };
struct TlsTest : public ::testing::TestWithParam
{
protected:
- QUIC_RUNDOWN_REF SecConfigRundown;
- QUIC_EVENT SecConfigDoneEvent;
- QUIC_SEC_CONFIG* SecConfig;
- static QUIC_SEC_CONFIG_PARAMS* SelfSignedCertParams;
+ QUIC_SEC_CONFIG* ServerSecConfig {nullptr};
+ QUIC_SEC_CONFIG* ClientSecConfig {nullptr};
+ QUIC_SEC_CONFIG* ClientSecConfigNoCertValidation {nullptr};
+ static const QUIC_CREDENTIAL_CONFIG* SelfSignedCertParams;
- TlsTest() :
- SecConfig(nullptr)
- {
- QuicRundownInitialize(&SecConfigRundown);
- QuicEventInitialize(&SecConfigDoneEvent, FALSE, FALSE);
- }
+ TlsTest() { }
~TlsTest()
{
- QuicEventUninitialize(SecConfigDoneEvent);
- if (SecConfig != nullptr) {
- QuicTlsSecConfigRelease(SecConfig);
+ if (ClientSecConfigNoCertValidation) {
+ QuicTlsSecConfigDelete(ClientSecConfigNoCertValidation);
+ ClientSecConfigNoCertValidation = nullptr;
+ }
+ if (ClientSecConfig) {
+ QuicTlsSecConfigDelete(ClientSecConfig);
+ ClientSecConfig = nullptr;
+ }
+ if (ServerSecConfig) {
+ QuicTlsSecConfigDelete(ServerSecConfig);
+ ServerSecConfig = nullptr;
}
- QuicRundownReleaseAndWait(&SecConfigRundown);
- QuicRundownUninitialize(&SecConfigRundown);
}
_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
static void
QUIC_API
OnSecConfigCreateComplete(
+ _In_ const QUIC_CREDENTIAL_CONFIG* /* CredConfig */,
_In_opt_ void* Context,
_In_ QUIC_STATUS Status,
_In_opt_ QUIC_SEC_CONFIG* SecConfig
)
{
- TlsTest* pThis = (TlsTest*)Context;
VERIFY_QUIC_SUCCESS(Status);
- pThis->SecConfig = SecConfig;
- QuicEventSet(pThis->SecConfigDoneEvent);
+ ASSERT_NE(nullptr, SecConfig);
+ *(QUIC_SEC_CONFIG**)Context = SecConfig;
}
static void SetUpTestSuite()
@@ -78,37 +75,54 @@ struct TlsTest : public ::testing::TestWithParam
void SetUp() override
{
VERIFY_QUIC_SUCCESS(
- QuicTlsServerSecConfigCreate(
- &SecConfigRundown,
- (QUIC_SEC_CONFIG_FLAGS)SelfSignedCertParams->Flags,
- SelfSignedCertParams->Certificate,
- SelfSignedCertParams->Principal,
- this,
+ QuicTlsSecConfigCreate(
+ SelfSignedCertParams,
+ &ServerSecConfig,
OnSecConfigCreateComplete));
- ASSERT_TRUE(QuicEventWaitWithTimeout(SecConfigDoneEvent, 5000));
- }
+ ASSERT_NE(nullptr, ServerSecConfig);
- void TearDown() override
- {
- QuicTlsSecConfigRelease(SecConfig);
- SecConfig = nullptr;
+ QUIC_CREDENTIAL_CONFIG ClientCredConfig = {
+ QUIC_CREDENTIAL_TYPE_NONE,
+ QUIC_CREDENTIAL_FLAG_CLIENT,
+ NULL,
+ NULL
+ };
+ VERIFY_QUIC_SUCCESS(
+ QuicTlsSecConfigCreate(
+ &ClientCredConfig,
+ &ClientSecConfig,
+ OnSecConfigCreateComplete));
+ ASSERT_NE(nullptr, ClientSecConfig);
+
+ ClientCredConfig.Flags |= QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION;
+ VERIFY_QUIC_SUCCESS(
+ QuicTlsSecConfigCreate(
+ &ClientCredConfig,
+ &ClientSecConfigNoCertValidation,
+ OnSecConfigCreateComplete));
+ ASSERT_NE(nullptr, ClientSecConfigNoCertValidation);
}
- struct TlsSession
+ void TearDown() override
{
- QUIC_TLS_SESSION* Ptr;
- TlsSession() : Ptr(nullptr) {
- EXPECT_EQ(QUIC_STATUS_SUCCESS, QuicTlsSessionInitialize(&Ptr));
+ if (ClientSecConfigNoCertValidation) {
+ QuicTlsSecConfigDelete(ClientSecConfigNoCertValidation);
+ ClientSecConfigNoCertValidation = nullptr;
}
- ~TlsSession() {
- QuicTlsSessionUninitialize(Ptr);
+ if (ClientSecConfig) {
+ QuicTlsSecConfigDelete(ClientSecConfig);
+ ClientSecConfig = nullptr;
}
- };
+ if (ServerSecConfig) {
+ QuicTlsSecConfigDelete(ServerSecConfig);
+ ServerSecConfig = nullptr;
+ }
+ }
struct TlsContext
{
QUIC_TLS* Ptr;
- QUIC_SEC_CONFIG* ClientConfig;
+ QUIC_SEC_CONFIG* SecConfig;
QUIC_EVENT ProcessCompleteEvent;
QUIC_TLS_PROCESS_STATE State;
@@ -119,7 +133,7 @@ struct TlsTest : public ::testing::TestWithParam
TlsContext() :
Ptr(nullptr),
- ClientConfig(nullptr),
+ SecConfig(nullptr),
Connected(false) {
QuicEventInitialize(&ProcessCompleteEvent, FALSE, FALSE);
QuicZeroMemory(&State, sizeof(State));
@@ -129,19 +143,18 @@ struct TlsTest : public ::testing::TestWithParam
~TlsContext() {
QuicTlsUninitialize(Ptr);
- if (ClientConfig != nullptr) {
- QuicTlsSecConfigRelease(ClientConfig);
- }
QuicEventUninitialize(ProcessCompleteEvent);
QUIC_FREE(State.Buffer);
for (uint8_t i = 0; i < QUIC_PACKET_KEY_COUNT; ++i) {
QuicPacketKeyFree(State.ReadKeys[i]);
QuicPacketKeyFree(State.WriteKeys[i]);
}
+ if (ResumptionTicket.Buffer) {
+ QUIC_FREE(ResumptionTicket.Buffer);
+ }
}
void InitializeServer(
- TlsSession& Session,
const QUIC_SEC_CONFIG* SecConfig,
bool MultipleAlpns = false,
uint16_t TPLen = 64
@@ -149,7 +162,6 @@ struct TlsTest : public ::testing::TestWithParam
{
QUIC_TLS_CONFIG Config = {0};
Config.IsServer = TRUE;
- Config.TlsSession = Session.Ptr;
Config.SecConfig = (QUIC_SEC_CONFIG*)SecConfig;
UNREFERENCED_PARAMETER(MultipleAlpns); // The server must always send back the negotiated ALPN.
Config.AlpnBuffer = Alpn;
@@ -160,6 +172,7 @@ struct TlsTest : public ::testing::TestWithParam
Config.Connection = (QUIC_CONNECTION*)this;
Config.ProcessCompleteCallback = OnProcessComplete;
Config.ReceiveTPCallback = OnRecvQuicTP;
+ Config.ReceiveResumptionCallback = OnRecvTicketServer;
State.NegotiatedAlpn = Alpn;
VERIFY_QUIC_SUCCESS(
@@ -170,15 +183,14 @@ struct TlsTest : public ::testing::TestWithParam
}
void InitializeClient(
- TlsSession& Session,
QUIC_SEC_CONFIG* SecConfig,
bool MultipleAlpns = false,
- uint16_t TPLen = 64
+ uint16_t TPLen = 64,
+ QUIC_BUFFER* Ticket = nullptr
)
{
QUIC_TLS_CONFIG Config = {0};
Config.IsServer = FALSE;
- Config.TlsSession = Session.Ptr;
Config.SecConfig = SecConfig;
Config.AlpnBuffer = MultipleAlpns ? MultiAlpn : Alpn;
Config.AlpnBufferLength = MultipleAlpns ? sizeof(MultiAlpn) : sizeof(Alpn);
@@ -188,7 +200,13 @@ struct TlsTest : public ::testing::TestWithParam
Config.Connection = (QUIC_CONNECTION*)this;
Config.ProcessCompleteCallback = OnProcessComplete;
Config.ReceiveTPCallback = OnRecvQuicTP;
+ Config.ReceiveResumptionCallback = OnRecvTicketClient;
Config.ServerName = "localhost";
+ if (Ticket) {
+ Config.ResumptionTicketBuffer = Ticket->Buffer;
+ Config.ResumptionTicketLength = Ticket->Length;
+ Ticket->Buffer = nullptr;
+ }
VERIFY_QUIC_SUCCESS(
QuicTlsInitialize(
@@ -197,16 +215,6 @@ struct TlsTest : public ::testing::TestWithParam
&Ptr));
}
- void InitializeClient(
- TlsSession& Session,
- bool MultipleAlpns = false,
- uint32_t CertFlags = CertValidationIgnoreFlags
- )
- {
- QuicTlsClientSecConfigCreate(CertFlags, &ClientConfig);
- InitializeClient(Session, ClientConfig, MultipleAlpns);
- }
-
private:
static
@@ -251,7 +259,8 @@ struct TlsTest : public ::testing::TestWithParam
_In_reads_bytes_(*BufferLength)
const uint8_t * Buffer,
_In_ uint32_t * BufferLength,
- _In_ bool ExpectError
+ _In_ bool ExpectError,
+ _In_ QUIC_TLS_DATA_TYPE DataType
)
{
QuicEventReset(ProcessCompleteEvent);
@@ -259,14 +268,18 @@ struct TlsTest : public ::testing::TestWithParam
EXPECT_TRUE(Buffer != nullptr || *BufferLength == 0);
if (Buffer != nullptr) {
EXPECT_EQ(BufferKey, State.ReadKey);
- *BufferLength = GetCompleteTlsMessagesLength(Buffer, *BufferLength);
- if (*BufferLength == 0) return (QUIC_TLS_RESULT_FLAGS)0;
+ if (DataType != QUIC_TLS_TICKET_DATA) {
+ *BufferLength = GetCompleteTlsMessagesLength(Buffer, *BufferLength);
+ if (*BufferLength == 0) return (QUIC_TLS_RESULT_FLAGS)0;
+ }
}
+ std::cout << "Processing " << *BufferLength << " bytes of type " << DataType << std::endl;
+
auto Result =
QuicTlsProcessData(
Ptr,
- QUIC_TLS_CRYPTO_DATA,
+ DataType,
Buffer,
BufferLength,
&State);
@@ -289,22 +302,22 @@ struct TlsTest : public ::testing::TestWithParam
const uint8_t * Buffer,
_In_ uint32_t BufferLength,
_In_ uint32_t FragmentSize,
- _In_ bool ExpectError
+ _In_ bool ExpectError,
+ _In_ QUIC_TLS_DATA_TYPE DataType
)
{
uint32_t Result = 0;
uint32_t ConsumedBuffer = FragmentSize;
uint32_t Count = 1;
- while (BufferLength != 0 && !(Result & QUIC_TLS_RESULT_ERROR)) {
-
+ do {
if (BufferLength < FragmentSize) {
FragmentSize = BufferLength;
ConsumedBuffer = FragmentSize;
}
- //std::cout << "Processing fragment of " << FragmentSize << " bytes" << std::endl;
+ //std::cout << "Processing fragment of " << FragmentSize << " bytes of type " << DataType << std::endl;
- Result |= (uint32_t)ProcessData(BufferKey, Buffer, &ConsumedBuffer, ExpectError);
+ Result |= (uint32_t)ProcessData(BufferKey, Buffer, &ConsumedBuffer, ExpectError, DataType);
if (ConsumedBuffer > 0) {
Buffer += ConsumedBuffer;
@@ -312,19 +325,23 @@ struct TlsTest : public ::testing::TestWithParam
} else {
ConsumedBuffer = FragmentSize * ++Count;
ConsumedBuffer = min(ConsumedBuffer, BufferLength);
- };
- }
+ }
+
+ } while (BufferLength != 0 && !(Result & QUIC_TLS_RESULT_ERROR));
return (QUIC_TLS_RESULT_FLAGS)Result;
}
public:
+ QUIC_BUFFER ResumptionTicket {0, nullptr};
+
QUIC_TLS_RESULT_FLAGS
ProcessData(
_Inout_ QUIC_TLS_PROCESS_STATE* PeerState,
_In_ uint32_t FragmentSize = DefaultFragmentSize,
- _In_ bool ExpectError = false
+ _In_ bool ExpectError = false,
+ _In_ QUIC_TLS_DATA_TYPE DataType = QUIC_TLS_CRYPTO_DATA
)
{
if (PeerState == nullptr) {
@@ -332,12 +349,12 @@ struct TlsTest : public ::testing::TestWithParam
// Special case for client hello/initial.
//
uint32_t Zero = 0;
- return ProcessData(QUIC_PACKET_KEY_INITIAL, nullptr, &Zero, ExpectError);
+ return ProcessData(QUIC_PACKET_KEY_INITIAL, nullptr, &Zero, ExpectError, DataType);
}
uint32_t Result = 0;
- while (PeerState->BufferLength != 0 && !(Result & QUIC_TLS_RESULT_ERROR)) {
+ do {
uint16_t BufferLength;
QUIC_PACKET_KEY_TYPE PeerWriteKey;
@@ -369,14 +386,16 @@ struct TlsTest : public ::testing::TestWithParam
PeerState->Buffer,
BufferLength,
FragmentSize,
- ExpectError);
+ ExpectError,
+ DataType);
PeerState->BufferLength -= BufferLength;
QuicMoveMemory(
PeerState->Buffer,
PeerState->Buffer + BufferLength,
PeerState->BufferLength);
- }
+
+ } while (PeerState->BufferLength != 0 && !(Result & QUIC_TLS_RESULT_ERROR));
return (QUIC_TLS_RESULT_FLAGS)Result;
}
@@ -403,6 +422,38 @@ struct TlsTest : public ::testing::TestWithParam
UNREFERENCED_PARAMETER(TPBuffer);
return TRUE;
}
+
+ static BOOLEAN
+ OnRecvTicketServer(
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t TicketLength,
+ _In_reads_(TicketLength) const uint8_t* Ticket
+ )
+ {
+ UNREFERENCED_PARAMETER(Connection);
+ UNREFERENCED_PARAMETER(TicketLength);
+ UNREFERENCED_PARAMETER(Ticket);
+ return TRUE;
+ }
+
+ static BOOLEAN
+ OnRecvTicketClient(
+ _In_ QUIC_CONNECTION* Connection,
+ _In_ uint32_t TicketLength,
+ _In_reads_(TicketLength) const uint8_t* Ticket
+ )
+ {
+ auto Context = (TlsContext*)Connection;
+ if (Context->ResumptionTicket.Buffer == nullptr) {
+ Context->ResumptionTicket.Buffer =
+ (uint8_t*)QUIC_ALLOC_NONPAGED(TicketLength);
+ QuicCopyMemory(
+ Context->ResumptionTicket.Buffer,
+ Ticket,
+ TicketLength);
+ }
+ return TRUE;
+ }
};
struct PacketKey
@@ -488,9 +539,12 @@ struct TlsTest : public ::testing::TestWithParam
DoHandshake(
TlsContext& ServerContext,
TlsContext& ClientContext,
- uint32_t FragmentSize = DefaultFragmentSize
+ uint32_t FragmentSize = DefaultFragmentSize,
+ bool SendResumptionTicket = false
)
{
+ std::cout << "==DoHandshake==" << std::endl;
+
auto Result = ClientContext.ProcessData(nullptr);
ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
@@ -505,6 +559,13 @@ struct TlsTest : public ::testing::TestWithParam
Result = ServerContext.ProcessData(&ClientContext.State, FragmentSize);
ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
+
+ if (SendResumptionTicket) {
+ Result = ServerContext.ProcessData(&ClientContext.State, FragmentSize, false, QUIC_TLS_TICKET_DATA);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+
+ Result = ClientContext.ProcessData(&ServerContext.State, FragmentSize);
+ }
}
int64_t
@@ -569,167 +630,143 @@ struct TlsTest : public ::testing::TestWithParam
}
};
-QUIC_SEC_CONFIG_PARAMS* TlsTest::SelfSignedCertParams = nullptr;
+const QUIC_CREDENTIAL_CONFIG* TlsTest::SelfSignedCertParams = nullptr;
TEST_F(TlsTest, Initialize)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
}
TEST_F(TlsTest, Handshake)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext);
+}
+
+#ifndef QUIC_DISABLE_0RTT_TESTS
+TEST_F(TlsTest, HandshakeResumption)
+{
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext, DefaultFragmentSize, true);
+
+ ASSERT_NE(nullptr, ClientContext.ResumptionTicket.Buffer);
+
+ TlsContext ServerContext2, ClientContext2;
+ ServerContext2.InitializeServer(ServerSecConfig);
+ ClientContext2.InitializeClient(ClientSecConfigNoCertValidation, false, 64, &ClientContext.ResumptionTicket);
+ DoHandshake(ServerContext2, ClientContext2);
}
+#endif
TEST_F(TlsTest, HandshakeMultiAlpnServer)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig, true);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig, true);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext);
}
TEST_F(TlsTest, HandshakeMultiAlpnClient)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession, true);
- DoHandshake(ServerContext, ClientContext);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation, true);
+ DoHandshake(ServerContext, ClientContext);
}
TEST_F(TlsTest, HandshakeMultiAlpnBoth)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig, true);
- ClientContext.InitializeClient(ClientSession, true);
- DoHandshake(ServerContext, ClientContext);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig, true);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation, true);
+ DoHandshake(ServerContext, ClientContext);
}
TEST_F(TlsTest, HandshakeFragmented)
{
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext, 200);
- }
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext, 200);
}
TEST_F(TlsTest, HandshakesSerial)
{
- // Server fails to decrypt message during second handshake with shared ClientSession.
- // Server still fail to decrypt second handshake with separate ClientSessions.
- // Server still fails to decrypt when using the same ServerContext again.
- // passes with different ServerContexts.
- TlsSession ServerSession, ClientSession/*, ClientSession2*/;
- QUIC_SEC_CONFIG* ClientSecConfig = nullptr;
- VERIFY_QUIC_SUCCESS(
- QuicTlsClientSecConfigCreate(
- CertValidationIgnoreFlags,
- &ClientSecConfig));
{
TlsContext ServerContext, ClientContext1;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext1.InitializeClient(ClientSession, ClientSecConfig);
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext1.InitializeClient(ClientSecConfigNoCertValidation);
DoHandshake(ServerContext, ClientContext1);
}
{
TlsContext ServerContext, ClientContext2;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext2.InitializeClient(ClientSession, ClientSecConfig);
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext2.InitializeClient(ClientSecConfigNoCertValidation);
DoHandshake(ServerContext, ClientContext2);
}
- QuicTlsSecConfigRelease(ClientSecConfig);
}
TEST_F(TlsTest, HandshakesInterleaved)
{
- TlsSession ServerSession, ClientSession;
- QUIC_SEC_CONFIG* ClientSecConfig = nullptr;
- VERIFY_QUIC_SUCCESS(
- QuicTlsClientSecConfigCreate(
- CertValidationIgnoreFlags,
- &ClientSecConfig));
- {
- TlsContext ServerContext1, ServerContext2, ClientContext1, ClientContext2;
- ServerContext1.InitializeServer(ServerSession, SecConfig);
- ClientContext1.InitializeClient(ClientSession, ClientSecConfig);
- ServerContext2.InitializeServer(ServerSession, SecConfig);
- ClientContext2.InitializeClient(ClientSession, ClientSecConfig);
+ TlsContext ServerContext1, ServerContext2, ClientContext1, ClientContext2;
+ ServerContext1.InitializeServer(ServerSecConfig);
+ ClientContext1.InitializeClient(ClientSecConfigNoCertValidation);
+ ServerContext2.InitializeServer(ServerSecConfig);
+ ClientContext2.InitializeClient(ClientSecConfigNoCertValidation);
- auto Result = ClientContext1.ProcessData(nullptr);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ auto Result = ClientContext1.ProcessData(nullptr);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- Result = ClientContext2.ProcessData(nullptr);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ Result = ClientContext2.ProcessData(nullptr);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- Result = ServerContext1.ProcessData(&ClientContext1.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- ASSERT_NE(nullptr, ServerContext1.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ Result = ServerContext1.ProcessData(&ClientContext1.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ ASSERT_NE(nullptr, ServerContext1.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- Result = ServerContext2.ProcessData(&ClientContext2.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- ASSERT_NE(nullptr, ServerContext2.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ Result = ServerContext2.ProcessData(&ClientContext2.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ ASSERT_NE(nullptr, ServerContext2.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- Result = ClientContext1.ProcessData(&ServerContext1.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
- ASSERT_NE(nullptr, ClientContext1.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ Result = ClientContext1.ProcessData(&ServerContext1.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
+ ASSERT_NE(nullptr, ClientContext1.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- Result = ClientContext2.ProcessData(&ServerContext2.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
- ASSERT_NE(nullptr, ClientContext2.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ Result = ClientContext2.ProcessData(&ServerContext2.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
+ ASSERT_NE(nullptr, ClientContext2.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- Result = ServerContext1.ProcessData(&ClientContext1.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
+ Result = ServerContext1.ProcessData(&ClientContext1.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
- Result = ServerContext2.ProcessData(&ClientContext2.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
- }
- QuicTlsSecConfigRelease(ClientSecConfig);
+ Result = ServerContext2.ProcessData(&ClientContext2.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_COMPLETE);
}
TEST_F(TlsTest, CertificateError)
{
- TlsSession ServerSession, ClientSession;
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfig);
{
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession, false, 0);
- {
- auto Result = ClientContext.ProcessData(nullptr);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ auto Result = ClientContext.ProcessData(nullptr);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- Result = ServerContext.ProcessData(&ClientContext.State);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
- ASSERT_NE(nullptr, ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ Result = ServerContext.ProcessData(&ClientContext.State);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_DATA);
+ ASSERT_NE(nullptr, ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- Result = ClientContext.ProcessData(&ServerContext.State, DefaultFragmentSize, true);
- ASSERT_TRUE(Result & QUIC_TLS_RESULT_ERROR);
- ASSERT_EQ(ClientContext.State.AlertCode, UnknownCaError);
- }
+ Result = ClientContext.ProcessData(&ServerContext.State, DefaultFragmentSize, true);
+ ASSERT_TRUE(Result & QUIC_TLS_RESULT_ERROR);
+ ASSERT_EQ(ClientContext.State.AlertCode, UnknownCaError);
}
}
@@ -737,199 +774,188 @@ TEST_P(TlsTest, One1RttKey)
{
bool PNE = GetParam();
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext);
-
- PacketKey ServerKey(ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- PacketKey ClientKey(ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]);
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext);
- uint8_t Header[32] = { 1, 2, 3, 4 };
- uint64_t PacketNumber = 0;
- uint8_t Buffer[1000] = { 0 };
-
- ASSERT_TRUE(
- ServerKey.Encrypt(
- sizeof(Header),
- Header,
- PacketNumber,
- sizeof(Buffer),
- Buffer));
+ PacketKey ServerKey(ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ PacketKey ClientKey(ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]);
- if (PNE) {
- uint8_t Mask[16];
+ uint8_t Header[32] = { 1, 2, 3, 4 };
+ uint64_t PacketNumber = 0;
+ uint8_t Buffer[1000] = { 0 };
- ASSERT_TRUE(
- ServerKey.ComputeHpMask(
- Buffer,
- Mask));
+ ASSERT_TRUE(
+ ServerKey.Encrypt(
+ sizeof(Header),
+ Header,
+ PacketNumber,
+ sizeof(Buffer),
+ Buffer));
- for (uint32_t i = 0; i < sizeof(Mask); i++) {
- Header[i] ^= Mask[i];
- }
+ if (PNE) {
+ uint8_t Mask[16];
- ASSERT_TRUE(
- ClientKey.ComputeHpMask(
- Buffer,
- Mask));
+ ASSERT_TRUE(
+ ServerKey.ComputeHpMask(
+ Buffer,
+ Mask));
- for (uint32_t i = 0; i < sizeof(Mask); i++) {
- Header[i] ^= Mask[i];
- }
+ for (uint32_t i = 0; i < sizeof(Mask); i++) {
+ Header[i] ^= Mask[i];
}
ASSERT_TRUE(
- ClientKey.Decrypt(
- sizeof(Header),
- Header,
- PacketNumber,
- sizeof(Buffer),
- Buffer));
+ ClientKey.ComputeHpMask(
+ Buffer,
+ Mask));
+
+ for (uint32_t i = 0; i < sizeof(Mask); i++) {
+ Header[i] ^= Mask[i];
+ }
}
+
+ ASSERT_TRUE(
+ ClientKey.Decrypt(
+ sizeof(Header),
+ Header,
+ PacketNumber,
+ sizeof(Buffer),
+ Buffer));
}
TEST_P(TlsTest, KeyUpdate)
{
-
bool PNE = GetParam();
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext);
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext);
- QUIC_PACKET_KEY* UpdateWriteKey = nullptr, *UpdateReadKey = nullptr;
+ QUIC_PACKET_KEY* UpdateWriteKey = nullptr, *UpdateReadKey = nullptr;
- VERIFY_QUIC_SUCCESS(
- QuicPacketKeyUpdate(
- ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT],
- &UpdateWriteKey));
- VERIFY_QUIC_SUCCESS(
- QuicPacketKeyUpdate(
- ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT],
- &UpdateReadKey));
-
- if (PNE) {
- //
- // If PNE is enabled, copy the header keys to the new packet
- // key structs.
- //
- UpdateWriteKey->HeaderKey = ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey;
- ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey = NULL;
-
- UpdateReadKey->HeaderKey = ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey;
- ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey = NULL;
- }
+ VERIFY_QUIC_SUCCESS(
+ QuicPacketKeyUpdate(
+ ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT],
+ &UpdateWriteKey));
+ VERIFY_QUIC_SUCCESS(
+ QuicPacketKeyUpdate(
+ ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT],
+ &UpdateReadKey));
+
+ if (PNE) {
+ //
+ // If PNE is enabled, copy the header keys to the new packet
+ // key structs.
+ //
+ UpdateWriteKey->HeaderKey = ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey;
+ ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey = NULL;
+
+ UpdateReadKey->HeaderKey = ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey;
+ ClientContext.State.ReadKeys[QUIC_PACKET_KEY_1_RTT]->HeaderKey = NULL;
+ }
- PacketKey ServerKey(UpdateWriteKey);
- PacketKey ClientKey(UpdateReadKey);
+ PacketKey ServerKey(UpdateWriteKey);
+ PacketKey ClientKey(UpdateReadKey);
- uint8_t Header[32] = { 1, 2, 3, 4 };
- uint64_t PacketNumber = 0;
- uint8_t Buffer[1000] = { 0 };
+ uint8_t Header[32] = { 1, 2, 3, 4 };
+ uint64_t PacketNumber = 0;
+ uint8_t Buffer[1000] = { 0 };
- ASSERT_TRUE(
- ServerKey.Encrypt(
- sizeof(Header),
- Header,
- PacketNumber,
- sizeof(Buffer),
- Buffer));
-
- if (PNE) {
- uint8_t Mask[16];
+ ASSERT_TRUE(
+ ServerKey.Encrypt(
+ sizeof(Header),
+ Header,
+ PacketNumber,
+ sizeof(Buffer),
+ Buffer));
- ASSERT_TRUE(
- ServerKey.ComputeHpMask(
- Buffer,
- Mask));
-
- for (uint32_t i = 0; i < sizeof(Mask); i++) {
- Header[i] ^= Mask[i];
- }
+ if (PNE) {
+ uint8_t Mask[16];
- ASSERT_TRUE(
- ClientKey.ComputeHpMask(
- Buffer,
- Mask));
+ ASSERT_TRUE(
+ ServerKey.ComputeHpMask(
+ Buffer,
+ Mask));
- for (uint32_t i = 0; i < sizeof(Mask); i++) {
- Header[i] ^= Mask[i];
- }
+ for (uint32_t i = 0; i < sizeof(Mask); i++) {
+ Header[i] ^= Mask[i];
}
ASSERT_TRUE(
- ClientKey.Decrypt(
- sizeof(Header),
- Header,
- PacketNumber,
- sizeof(Buffer),
- Buffer));
+ ClientKey.ComputeHpMask(
+ Buffer,
+ Mask));
- QuicPacketKeyFree(UpdateWriteKey);
- QuicPacketKeyFree(UpdateReadKey);
+ for (uint32_t i = 0; i < sizeof(Mask); i++) {
+ Header[i] ^= Mask[i];
+ }
}
+
+ ASSERT_TRUE(
+ ClientKey.Decrypt(
+ sizeof(Header),
+ Header,
+ PacketNumber,
+ sizeof(Buffer),
+ Buffer));
+
+ QuicPacketKeyFree(UpdateWriteKey);
+ QuicPacketKeyFree(UpdateReadKey);
}
TEST_P(TlsTest, PacketEncryptionPerf)
{
-
bool PNE = GetParam();
- TlsSession ServerSession, ClientSession;
- {
- TlsContext ServerContext, ClientContext;
- ServerContext.InitializeServer(ServerSession, SecConfig);
- ClientContext.InitializeClient(ClientSession);
- DoHandshake(ServerContext, ClientContext);
+ TlsContext ServerContext, ClientContext;
+ ServerContext.InitializeServer(ServerSecConfig);
+ ClientContext.InitializeClient(ClientSecConfigNoCertValidation);
+ DoHandshake(ServerContext, ClientContext);
- PacketKey ServerKey(ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
+ PacketKey ServerKey(ServerContext.State.WriteKeys[QUIC_PACKET_KEY_1_RTT]);
- const uint64_t LoopCount = 10000;
- uint16_t BufferSizes[] =
- {
- 4,
- 16,
- 64,
- 256,
- 600,
- 1000,
- 1200,
- 1450,
- //8000,
- //65000
- };
+ const uint64_t LoopCount = 10000;
+ uint16_t BufferSizes[] =
+ {
+ 4,
+ 16,
+ 64,
+ 256,
+ 600,
+ 1000,
+ 1200,
+ 1450,
+ //8000,
+ //65000
+ };
#ifdef _WIN32
- HANDLE CurrentThread = GetCurrentThread();
- DWORD ProcNumber = GetCurrentProcessorNumber();
- DWORD_PTR OldAffinityMask =
- SetThreadAffinityMask(CurrentThread, (DWORD_PTR)1 << (DWORD_PTR)ProcNumber);
- SetThreadPriority(CurrentThread, THREAD_PRIORITY_HIGHEST);
+ HANDLE CurrentThread = GetCurrentThread();
+ DWORD ProcNumber = GetCurrentProcessorNumber();
+ DWORD_PTR OldAffinityMask =
+ SetThreadAffinityMask(CurrentThread, (DWORD_PTR)1 << (DWORD_PTR)ProcNumber);
+ SetThreadPriority(CurrentThread, THREAD_PRIORITY_HIGHEST);
#endif
- for (uint8_t i = 0; i < ARRAYSIZE(BufferSizes); ++i) {
- int64_t elapsedMicroseconds =
- PNE == 0 ?
- DoEncryption(ServerKey, BufferSizes[i], LoopCount) :
- DoEncryptionWithPNE(ServerKey, BufferSizes[i], LoopCount);
+ for (uint8_t i = 0; i < ARRAYSIZE(BufferSizes); ++i) {
+ int64_t elapsedMicroseconds =
+ PNE == 0 ?
+ DoEncryption(ServerKey, BufferSizes[i], LoopCount) :
+ DoEncryptionWithPNE(ServerKey, BufferSizes[i], LoopCount);
- std::cout << elapsedMicroseconds / 1000 << "." << (int)(elapsedMicroseconds % 1000) <<
- " milliseconds elapsed encrypting "
- << BufferSizes[i] << " bytes " << LoopCount << " times" << std::endl;
- }
+ std::cout << elapsedMicroseconds / 1000 << "." << (int)(elapsedMicroseconds % 1000) <<
+ " milliseconds elapsed encrypting "
+ << BufferSizes[i] << " bytes " << LoopCount << " times" << std::endl;
+ }
#ifdef _WIN32
- SetThreadPriority(CurrentThread, THREAD_PRIORITY_NORMAL);
- SetThreadAffinityMask(CurrentThread, OldAffinityMask);
+ SetThreadPriority(CurrentThread, THREAD_PRIORITY_NORMAL);
+ SetThreadAffinityMask(CurrentThread, OldAffinityMask);
#endif
- }
}
uint64_t LockedCounter(
diff --git a/src/test/MsQuicTests.h b/src/test/MsQuicTests.h
index f5e2ee559a..a1b0418cfe 100644
--- a/src/test/MsQuicTests.h
+++ b/src/test/MsQuicTests.h
@@ -13,8 +13,7 @@
//#define QUIC_COMPARTMENT_TESTS 1
-extern MsQuicRegistration* Registration;
-extern QUIC_SEC_CONFIG* SecurityConfig;
+extern QUIC_CREDENTIAL_CONFIG SelfSignedCredConfig;
#ifdef __cplusplus
extern "C" {
@@ -29,11 +28,10 @@ void QuicTestUninitialize();
void QuicTestValidateApi();
void QuicTestValidateRegistration();
-void QuicTestValidateSession();
+void QuicTestValidateConfiguration();
void QuicTestValidateListener();
void QuicTestValidateConnection();
void QuicTestValidateStream(bool Connect);
-void QuicTestValidateServerSecConfig(void* CertContext, QUIC_CERTIFICATE_HASH_STORE* CertHashStore, char* Principal);
void QuicTestGetPerfCounters();
//
@@ -68,7 +66,7 @@ QuicTestConnect(
_In_ bool ServerStatelessRetry,
_In_ bool ClientUsesOldVersion,
_In_ bool MultipleALPNs,
- _In_ bool AsyncSecConfig,
+ _In_ bool AsyncConfiguration,
_In_ bool MultiPacketClientInitial,
_In_ bool SessionResumption,
_In_ uint8_t RandomLossPercentage // 0 to 100
@@ -327,14 +325,14 @@ static const GUID QUIC_TEST_DEVICE_INSTANCE =
// IOCTL Interface
//
-#define IOCTL_QUIC_SEC_CONFIG \
+#define IOCTL_QUIC_SET_CERT_HASH \
QUIC_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_DATA)
// QUIC_CERTIFICATE_HASH
#define IOCTL_QUIC_RUN_VALIDATE_REGISTRATION \
QUIC_CTL_CODE(2, METHOD_BUFFERED, FILE_WRITE_DATA)
-#define IOCTL_QUIC_RUN_VALIDATE_SESSION \
+#define IOCTL_QUIC_RUN_VALIDATE_CONFIGURATION \
QUIC_CTL_CODE(3, METHOD_BUFFERED, FILE_WRITE_DATA)
#define IOCTL_QUIC_RUN_VALIDATE_LISTENER \
@@ -386,7 +384,7 @@ typedef struct {
uint8_t ServerStatelessRetry;
uint8_t ClientUsesOldVersion;
uint8_t MultipleALPNs;
- uint8_t AsyncSecConfig;
+ uint8_t AsyncConfiguration;
uint8_t MultiPacketClientInitial;
uint8_t SessionResumption;
uint8_t RandomLossPercentage;
@@ -428,9 +426,7 @@ typedef struct {
QUIC_CTL_CODE(18, METHOD_BUFFERED, FILE_WRITE_DATA)
// uint8_t - EnableKeepAlive
-#define IOCTL_QUIC_RUN_VALIDATE_SECCONFIG \
- QUIC_CTL_CODE(19, METHOD_BUFFERED, FILE_WRITE_DATA)
- // QUIC_CERTIFICATE_HASH_STORE
+// 19 - Deprecated
#define IOCTL_QUIC_RUN_CONNECT_UNREACHABLE \
QUIC_CTL_CODE(20, METHOD_BUFFERED, FILE_WRITE_DATA)
diff --git a/src/test/bin/quic_gtest.cpp b/src/test/bin/quic_gtest.cpp
index 3dda1b7d8d..bee58c3ba6 100644
--- a/src/test/bin/quic_gtest.cpp
+++ b/src/test/bin/quic_gtest.cpp
@@ -13,15 +13,14 @@
bool TestingKernelMode = false;
bool PrivateTestLibrary = false;
const MsQuicApi* MsQuic;
-MsQuicRegistration* Registration;
-QUIC_SEC_CONFIG_PARAMS* SelfSignedCertParams;
-QUIC_SEC_CONFIG* SecurityConfig;
+QUIC_CREDENTIAL_CONFIG SelfSignedCredConfig;
QuicDriverClient DriverClient;
extern "C" _IRQL_requires_max_(PASSIVE_LEVEL) void QuicTraceRundown(void) { }
class QuicTestEnvironment : public ::testing::Environment {
QuicDriverService DriverService;
+ const QUIC_CREDENTIAL_CONFIG* SelfSignedCertParams;
public:
void SetUp() override {
QuicPlatformSystemLoad();
@@ -45,14 +44,12 @@ class QuicTestEnvironment : public ::testing::Environment {
}
ASSERT_TRUE(DriverService.Initialize(DriverName, DependentDriverNames));
ASSERT_TRUE(DriverService.Start());
- ASSERT_TRUE(DriverClient.Initialize(SelfSignedCertParams, DriverName));
+ ASSERT_TRUE(DriverClient.Initialize((QUIC_CERTIFICATE_HASH*)(SelfSignedCertParams + 1), DriverName));
} else {
printf("Initializing for User Mode tests\n");
MsQuic = new MsQuicApi();
ASSERT_TRUE(QUIC_SUCCEEDED(MsQuic->GetInitStatus()));
- Registration = new MsQuicRegistration("MsQuicBVT");
- ASSERT_TRUE(QUIC_SUCCEEDED(Registration->GetInitStatus()));
- ASSERT_TRUE(LoadSecConfig());
+ memcpy(&SelfSignedCredConfig, SelfSignedCertParams, sizeof(QUIC_CREDENTIAL_CONFIG));
QuicTestInitialize();
}
}
@@ -62,44 +59,12 @@ class QuicTestEnvironment : public ::testing::Environment {
DriverService.Uninitialize();
} else {
QuicTestUninitialize();
- MsQuic->SecConfigDelete(SecurityConfig);
- delete Registration;
delete MsQuic;
}
QuicPlatFreeSelfSignedCert(SelfSignedCertParams);
QuicPlatformUninitialize();
QuicPlatformSystemUnload();
}
- _Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
- static void
- QUIC_API
- GetSecConfigComplete(
- _In_opt_ void* Context,
- _In_ QUIC_STATUS /* Status */,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
- )
- {
- _Analysis_assume_(Context);
- auto Event = (QUIC_EVENT*)Context;
- SecurityConfig = SecConfig;
- QuicEventSet(*Event);
- }
- bool LoadSecConfig() {
- QUIC_EVENT Event;
- QuicEventInitialize(&Event, FALSE, FALSE);
- if (QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- *Registration,
- (QUIC_SEC_CONFIG_FLAGS)SelfSignedCertParams->Flags,
- SelfSignedCertParams->Certificate,
- SelfSignedCertParams->Principal,
- &Event,
- GetSecConfigComplete))) {
- QuicEventWaitForever(Event);
- }
- QuicEventUninitialize(Event);
- return SecurityConfig != nullptr;
- }
};
//
@@ -183,21 +148,6 @@ TEST(ParameterValidation, ValidateRegistration) {
}
}
-#if _WIN32
-TEST(ParameterValidation, ValidateServerSecConfig) {
- TestLogger Logger("QuicTestValidateServerSecConfig");
- if (TestingKernelMode) {
- // Not currently supported, since certs are in user store.
- GTEST_SKIP_(":Unsupported in kernel mode");
- } else {
- QUIC_CERTIFICATE_HASH_STORE CertHashStore = { QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE };
- memcpy(CertHashStore.ShaHash, SelfSignedCertParams->Thumbprint, sizeof(CertHashStore.ShaHash));
- memcpy(CertHashStore.StoreName, "My", 2);
- QuicTestValidateServerSecConfig(SelfSignedCertParams->Certificate, &CertHashStore, "localhost");
- }
-}
-#endif // _WIN32
-
TEST(ParameterValidation, ValidateGetPerfCounters) {
TestLogger Logger("QuicTestGetPerfCounters");
if (TestingKernelMode) {
@@ -207,12 +157,12 @@ TEST(ParameterValidation, ValidateGetPerfCounters) {
}
}
-TEST(ParameterValidation, ValidateSession) {
- TestLogger Logger("QuicTestValidateSession");
+TEST(ParameterValidation, ValidateConfiguration) {
+ TestLogger Logger("QuicTestValidateConfiguration");
if (TestingKernelMode) {
- ASSERT_TRUE(DriverClient.Run(IOCTL_QUIC_RUN_VALIDATE_SESSION));
+ ASSERT_TRUE(DriverClient.Run(IOCTL_QUIC_RUN_VALIDATE_CONFIGURATION));
} else {
- QuicTestValidateSession();
+ QuicTestValidateConfiguration();
}
}
@@ -360,7 +310,7 @@ TEST_P(WithHandshakeArgs1, Connect) {
(uint8_t)GetParam().ServerStatelessRetry,
0, // ClientUsesOldVersion
(uint8_t)GetParam().MultipleALPNs,
- 0, // AsyncSecConfig
+ 0, // AsyncConfiguration
(uint8_t)GetParam().MultiPacketClientInitial,
(uint8_t)GetParam().SessionResumption,
0 // RandomLossPercentage
@@ -372,7 +322,7 @@ TEST_P(WithHandshakeArgs1, Connect) {
GetParam().ServerStatelessRetry,
false, // ClientUsesOldVersion
GetParam().MultipleALPNs,
- false, // AsyncSecConfig
+ false, // AsyncConfiguration
GetParam().MultiPacketClientInitial,
GetParam().SessionResumption,
0); // RandomLossPercentage
@@ -387,7 +337,7 @@ TEST_P(WithHandshakeArgs2, OldVersion) {
(uint8_t)GetParam().ServerStatelessRetry,
1, // ClientUsesOldVersion
0, // MultipleALPNs
- 0, // AsyncSecConfig
+ 0, // AsyncConfiguration
0, // MultiPacketClientInitial
0, // SessionResumption
0 // RandomLossPercentage
@@ -399,7 +349,7 @@ TEST_P(WithHandshakeArgs2, OldVersion) {
GetParam().ServerStatelessRetry,
false, // ClientUsesOldVersion
false, // MultipleALPNs
- false, // AsyncSecConfig
+ false, // AsyncConfiguration
false, // MultiPacketClientInitial
false, // SessionResumption
0); // RandomLossPercentage
@@ -414,7 +364,7 @@ TEST_P(WithHandshakeArgs3, AsyncSecurityConfig) {
(uint8_t)GetParam().ServerStatelessRetry,
0, // ClientUsesOldVersion
(uint8_t)GetParam().MultipleALPNs,
- 1, // AsyncSecConfig
+ 1, // AsyncConfiguration
0, // MultiPacketClientInitial
0, // SessionResumption
0 // RandomLossPercentage
@@ -426,7 +376,7 @@ TEST_P(WithHandshakeArgs3, AsyncSecurityConfig) {
GetParam().ServerStatelessRetry,
false, // ClientUsesOldVersion
GetParam().MultipleALPNs,
- true, // AsyncSecConfig
+ true, // AsyncConfiguration
false, // MultiPacketClientInitial
false, // SessionResumption
0); // RandomLossPercentage
@@ -451,7 +401,7 @@ TEST_P(WithHandshakeArgs4, RandomLoss) {
(uint8_t)GetParam().ServerStatelessRetry,
0, // ClientUsesOldVersion
0, // MultipleALPNs
- 0, // AsyncSecConfig
+ 0, // AsyncConfiguration
(uint8_t)GetParam().MultiPacketClientInitial,
(uint8_t)GetParam().SessionResumption,
GetParam().RandomLossPercentage
@@ -463,7 +413,7 @@ TEST_P(WithHandshakeArgs4, RandomLoss) {
GetParam().ServerStatelessRetry,
false, // ClientUsesOldVersion
false, // MultipleALPNs,
- false, // AsyncSecConfig
+ false, // AsyncConfiguration
GetParam().MultiPacketClientInitial,
GetParam().SessionResumption,
GetParam().RandomLossPercentage);
diff --git a/src/test/bin/winkernel/control.cpp b/src/test/bin/winkernel/control.cpp
index 7e37c679e4..cf5e8da266 100644
--- a/src/test/bin/winkernel/control.cpp
+++ b/src/test/bin/winkernel/control.cpp
@@ -18,10 +18,8 @@
#endif
const MsQuicApi* MsQuic;
-MsQuicRegistration* Registration;
-QUIC_SEC_CONFIG* SecurityConfig;
-
-QUIC_SEC_CONFIG_CREATE_COMPLETE QuicTestSecConfigCreated;
+QUIC_CREDENTIAL_CONFIG SelfSignedCredConfig;
+QUIC_CERTIFICATE_HASH SelfSignedCertHash;
#ifdef PRIVATE_LIBRARY
DECLARE_CONST_UNICODE_STRING(QuicTestCtlDeviceName, L"\\Device\\" QUIC_DRIVER_NAME_PRIVATE);
@@ -45,8 +43,6 @@ WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUIC_DEVICE_EXTENSION, QuicTestCtlGetDeviceCo
typedef struct QUIC_TEST_CLIENT
{
LIST_ENTRY Link;
- QUIC_SEC_CONFIG* SecurityConfig;
- KEVENT SecConfigComplete;
bool TestFailure;
} QUIC_TEST_CLIENT;
@@ -264,20 +260,6 @@ QuicTestCtlEvtFileCreate(
}
RtlZeroMemory(Client, sizeof(QUIC_TEST_CLIENT));
- KeInitializeEvent(&Client->SecConfigComplete, NotificationEvent, FALSE);
-
- Registration = new MsQuicRegistration("MsQuicBVT");
- if (Registration == nullptr) {
- break;
- }
- if (QUIC_FAILED(Registration->GetInitStatus())) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Registration->GetInitStatus(),
- "RegistrationOpen");
- break;
- }
//
// Insert into the client list
@@ -342,17 +324,7 @@ QuicTestCtlEvtFileCleanup(
"[test] Client %p cleaning up",
Client);
- //
- // Delete the security configuration.
- //
- if (Client->SecurityConfig != nullptr) {
- MsQuic->SecConfigDelete(Client->SecurityConfig);
- SecurityConfig = nullptr;
- }
-
- delete Registration;
- Registration = nullptr;
-
+ SelfSignedCredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
QuicTestClient = nullptr;
}
@@ -392,105 +364,6 @@ QuicTestCtlEvtIoCanceled(
WdfRequestComplete(Request, Status);
}
-NTSTATUS
-QuicTestCtlSetSecurityConfig(
- _Inout_ QUIC_TEST_CLIENT* Client,
- _In_ const QUIC_CERTIFICATE_HASH* CertHash
- )
-{
- QUIC_CERTIFICATE_HASH_STORE CertHashStore = { QUIC_CERTIFICATE_HASH_STORE_FLAG_MACHINE_STORE, { 0 }, "My" };
- RtlCopyMemory(&CertHashStore.ShaHash, CertHash, sizeof(QUIC_CERTIFICATE_HASH));
-
- //
- // Create the security configuration (async).
- //
- NTSTATUS Status =
- MsQuic->SecConfigCreate(
- *Registration,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE,
- &CertHashStore,
- nullptr,
- Client,
- QuicTestSecConfigCreated);
- if (QUIC_FAILED(Status)) {
- QuicTraceEvent(
- LibraryErrorStatus,
- "[ lib] ERROR, %u, %s.",
- Status,
- "SecConfigCreate");
- goto Error;
- }
-
- //
- // Wait for security configuration to be completed.
- //
- KeWaitForSingleObject(&Client->SecConfigComplete, Executive, KernelMode, FALSE, NULL);
- if (Client->SecurityConfig == nullptr) {
- QuicTraceEvent(
- LibraryError,
- "[ lib] ERROR, %s.",
- "SecConfigCreate failed to get certificate");
- Status = QUIC_STATUS_INVALID_STATE;
- goto Error;
- }
-
- SecurityConfig = Client->SecurityConfig;
- Status = QUIC_STATUS_SUCCESS;
-
- QuicTraceLogInfo(
- TestControlClientInitialized,
- "[test] Client %p set security config and initialized",
- Client);
-
-Error:
-
- return Status;
-}
-
-_IRQL_requires_max_(PASSIVE_LEVEL)
-_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
-void
-QUIC_API
-QuicTestSecConfigCreated(
- _In_opt_ void* Context,
- _In_ QUIC_STATUS Status,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
- )
-/*++
-
-Routine Description:
-
- QuicTestSecConfigCreated is the completion callback for the
- SecConfigCreate call in DriverEntry.
-
-Arguments:
-
- Context - The application context pointer passed to SecConfigCreate.
-
- Status - The completion status.
-
- SecurityConfig - The security configuration, if successful.
-
-Return Value:
-
- None
-
---*/
-{
- QUIC_TEST_CLIENT* Client = (QUIC_TEST_CLIENT*)Context;
- QUIC_FRE_ASSERT(Client != nullptr);
-
- QuicTraceLogInfo(
- TestControlSecConfigCreated,
- "[test] SecConfigCreated: 0x%x",
- Status);
-
- NT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
-
- Client->SecurityConfig = SecConfig;
- KeSetEvent(&Client->SecConfigComplete, IO_NO_INCREMENT, FALSE);
-}
-
size_t QUIC_IOCTL_BUFFER_SIZES[] =
{
0,
@@ -662,8 +535,8 @@ QuicTestCtlEvtIoDeviceControl(
Client,
FunctionCode);
- if (IoControlCode != IOCTL_QUIC_SEC_CONFIG &&
- Client->SecurityConfig == nullptr) {
+ if (IoControlCode != IOCTL_QUIC_SET_CERT_HASH &&
+ SelfSignedCredConfig.Type == QUIC_CREDENTIAL_TYPE_NONE) {
Status = STATUS_INVALID_DEVICE_STATE;
QuicTraceEvent(
LibraryError,
@@ -674,19 +547,20 @@ QuicTestCtlEvtIoDeviceControl(
switch (IoControlCode) {
- case IOCTL_QUIC_SEC_CONFIG:
+ case IOCTL_QUIC_SET_CERT_HASH:
QUIC_FRE_ASSERT(Params != nullptr);
- Status =
- QuicTestCtlSetSecurityConfig(
- Client,
- &Params->CertHash);
+ SelfSignedCredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH;
+ SelfSignedCredConfig.Flags = QUIC_CREDENTIAL_FLAG_NONE;
+ SelfSignedCredConfig.CertificateHash = &SelfSignedCertHash;
+ RtlCopyMemory(&SelfSignedCertHash.ShaHash, &Params->CertHash, sizeof(QUIC_CERTIFICATE_HASH));
+ Status = QUIC_STATUS_SUCCESS;
break;
case IOCTL_QUIC_RUN_VALIDATE_REGISTRATION:
QuicTestCtlRun(QuicTestValidateRegistration());
break;
- case IOCTL_QUIC_RUN_VALIDATE_SESSION:
- QuicTestCtlRun(QuicTestValidateSession());
+ case IOCTL_QUIC_RUN_VALIDATE_CONFIGURATION:
+ QuicTestCtlRun(QuicTestValidateConfiguration());
break;
case IOCTL_QUIC_RUN_VALIDATE_LISTENER:
QuicTestCtlRun(QuicTestValidateListener());
@@ -739,7 +613,7 @@ QuicTestCtlEvtIoDeviceControl(
Params->Params1.ServerStatelessRetry != 0,
Params->Params1.ClientUsesOldVersion != 0,
Params->Params1.MultipleALPNs != 0,
- Params->Params1.AsyncSecConfig != 0,
+ Params->Params1.AsyncConfiguration != 0,
Params->Params1.MultiPacketClientInitial != 0,
Params->Params1.SessionResumption != 0,
Params->Params1.RandomLossPercentage
@@ -772,14 +646,6 @@ QuicTestCtlEvtIoDeviceControl(
QuicTestCtlRun(QuicTestConnectAndIdle(Params->EnableKeepAlive != 0));
break;
- case IOCTL_QUIC_RUN_VALIDATE_SECCONFIG:
- //
- // Make the string for Schannel
- //
- QUIC_FRE_ASSERT(Params != nullptr);
- QuicTestCtlRun(QuicTestValidateServerSecConfig(nullptr, &Params->CertHashStore, "localhost"));
- break;
-
case IOCTL_QUIC_RUN_CONNECT_UNREACHABLE:
QUIC_FRE_ASSERT(Params != nullptr);
QuicTestCtlRun(QuicTestConnectUnreachable(Params->Family));
diff --git a/src/test/lib/ApiTest.cpp b/src/test/lib/ApiTest.cpp
index f0c13081cf..eb1430bc14 100644
--- a/src/test/lib/ApiTest.cpp
+++ b/src/test/lib/ApiTest.cpp
@@ -34,12 +34,12 @@ void QuicTestValidateRegistration()
MsQuic->RegistrationClose(nullptr);
}
-void QuicTestValidateSession()
+void QuicTestValidateConfiguration()
{
- MsQuicRegistration TestReg;
- TEST_TRUE(TestReg.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
- HQUIC Session = nullptr;
+ HQUIC LocalConfiguration = nullptr;
QUIC_SETTINGS EmptySettings{0};
@@ -62,13 +62,13 @@ void QuicTestValidateSession()
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
&GoodAlpn,
1,
nullptr,
+ 0,
+ nullptr,
nullptr));
//
@@ -76,65 +76,65 @@ void QuicTestValidateSession()
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SessionOpen(
- nullptr,
- 0,
+ MsQuic->ConfigurationOpen(
nullptr,
&GoodAlpn,
1,
nullptr,
- &Session));
+ 0,
+ nullptr,
+ &LocalConfiguration));
//
// Null settings.
//
TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
&GoodAlpn,
1,
nullptr,
- &Session));
+ 0,
+ nullptr,
+ &LocalConfiguration));
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
+ MsQuic->ConfigurationClose(
+ LocalConfiguration);
+ LocalConfiguration = nullptr;
//
// Empty settings.
//
TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
- sizeof(EmptySettings),
- &EmptySettings,
+ MsQuic->ConfigurationOpen(
+ Registration,
&GoodAlpn,
1,
+ &EmptySettings,
+ sizeof(EmptySettings),
nullptr,
- &Session));
+ &LocalConfiguration));
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
+ MsQuic->ConfigurationClose(
+ LocalConfiguration);
+ LocalConfiguration = nullptr;
//
// Good settings.
//
TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
- sizeof(GoodSettings),
- &GoodSettings,
+ MsQuic->ConfigurationOpen(
+ Registration,
&GoodAlpn,
1,
+ &GoodSettings,
+ sizeof(GoodSettings),
nullptr,
- &Session));
+ &LocalConfiguration));
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
+ MsQuic->ConfigurationClose(
+ LocalConfiguration);
+ LocalConfiguration = nullptr;
//
// Invalid settings - TODO
@@ -145,59 +145,59 @@ void QuicTestValidateSession()
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SessionOpen(
- TestReg,
- 0,
+ MsQuic->ConfigurationOpen(
+ Registration,
nullptr,
+ 0,
nullptr,
0,
nullptr,
- &Session));
+ &LocalConfiguration));
//
// Empty ALPN.
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
&EmptyAlpn,
1,
nullptr,
- &Session));
+ 0,
+ nullptr,
+ &LocalConfiguration));
//
// 255-byte ALPN.
//
TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
&LongAlpn,
1,
nullptr,
- &Session));
+ 0,
+ nullptr,
+ &LocalConfiguration));
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
+ MsQuic->ConfigurationClose(
+ LocalConfiguration);
+ LocalConfiguration = nullptr;
//
// 256-byte ALPN.
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
&TooLongAlpn,
1,
nullptr,
- &Session));
+ 0,
+ nullptr,
+ &LocalConfiguration));
//
// Multiple ALPNs
@@ -207,92 +207,22 @@ void QuicTestValidateSession()
{ sizeof("alpn2") - 1, (uint8_t*)"alpn2" }
};
TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
- 0,
- nullptr,
+ MsQuic->ConfigurationOpen(
+ Registration,
TwoAlpns,
2,
nullptr,
- &Session));
-
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
-
- //
- // Can't call SessionClose with invalid values as MsQuic asserts
- // (on purpose).
- //
-
- TEST_QUIC_SUCCEEDED(
- MsQuic->SessionOpen(
- TestReg,
0,
nullptr,
- &GoodAlpn,
- 1,
- nullptr,
- &Session));
-
- uint8_t TicketKey[44] = {0};
-
- //
- // NULL Ticket.
- //
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SetParam(
- Session,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- 0,
- NULL));
+ &LocalConfiguration));
- //
- // Invalid length.
- //
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SetParam(
- Session,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- 0,
- TicketKey));
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SetParam(
- Session,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- 1,
- TicketKey));
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SetParam(
- Session,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- sizeof(TicketKey) - 1,
- TicketKey));
+ MsQuic->ConfigurationClose(
+ LocalConfiguration);
+ LocalConfiguration = nullptr;
-#ifndef QUIC_DISABLE_0RTT_TESTS
//
- // Valid 0-RTT ticket encryption key.
+ // TODO - ConfigurationLoad?
//
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Session,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY,
- sizeof(TicketKey),
- TicketKey));
-#endif
-
- MsQuic->SessionClose(
- Session);
- Session = nullptr;
}
static
@@ -310,8 +240,11 @@ DummyListenerCallback(
void QuicTestValidateListener()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest");
+ MsQuicConfiguration LocalConfiguration(Registration, Alpn);
+ TEST_TRUE(LocalConfiguration.IsValid());
HQUIC Listener = nullptr;
@@ -321,13 +254,13 @@ void QuicTestValidateListener()
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ListenerOpen(
- Session,
+ Registration,
nullptr,
nullptr,
&Listener));
//
- // Null session.
+ // Null registration.
//
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
@@ -343,7 +276,7 @@ void QuicTestValidateListener()
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ListenerOpen(
- Session,
+ Registration,
DummyListenerCallback,
nullptr,
nullptr));
@@ -353,7 +286,7 @@ void QuicTestValidateListener()
//
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session,
+ Registration,
DummyListenerCallback,
nullptr,
&Listener));
@@ -363,6 +296,8 @@ void QuicTestValidateListener()
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerStart(
Listener,
+ Alpn,
+ Alpn.Length(),
nullptr));
MsQuic->ListenerClose(Listener);
@@ -373,7 +308,7 @@ void QuicTestValidateListener()
//
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session,
+ Registration,
DummyListenerCallback,
nullptr,
&Listener));
@@ -381,6 +316,8 @@ void QuicTestValidateListener()
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerStart(
Listener,
+ Alpn,
+ Alpn.Length(),
nullptr));
MsQuic->ListenerClose(Listener);
@@ -391,7 +328,7 @@ void QuicTestValidateListener()
//
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session,
+ Registration,
DummyListenerCallback,
nullptr,
&Listener));
@@ -399,12 +336,16 @@ void QuicTestValidateListener()
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerStart(
Listener,
+ Alpn,
+ Alpn.Length(),
nullptr));
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_STATE,
MsQuic->ListenerStart(
Listener,
+ Alpn,
+ Alpn.Length(),
nullptr));
MsQuic->ListenerClose(Listener);
@@ -415,7 +356,7 @@ void QuicTestValidateListener()
//
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session,
+ Registration,
DummyListenerCallback,
nullptr,
&Listener));
@@ -505,7 +446,7 @@ ResumptionFailConnectionCallback(
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerFailSendResumeCallback(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -514,25 +455,41 @@ ListenerFailSendResumeCallback(
//
// Validate sending the resumption ticket fails
//
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_STATE,
+ QUIC_STATUS Status =
MsQuic->ConnectionSendResumptionTicket(
ConnectionHandle,
QUIC_SEND_RESUMPTION_FLAG_NONE,
0,
- nullptr));
+ nullptr);
+ if (Status != QUIC_STATUS_INVALID_STATE) {
+ TEST_FAILURE(
+ "ConnectionSendResumptionTicket has unexpected error! Expected 0x%x, actual 0x%x",
+ QUIC_STATUS_INVALID_STATE,
+ Status);
+ return false;
+ }
MsQuic->SetCallbackHandler(ConnectionHandle, (void*)ResumptionFailConnectionCallback, Listener->Context);
QuicEventSet(*(QUIC_EVENT*)Listener->Context);
+ return true;
}
#endif
void QuicTestValidateConnection()
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetServerResumptionLevel(QUIC_SERVER_RESUME_ONLY);
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ Settings.SetIdleTimeoutMs(1000);
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
//
// Null out-parameter.
@@ -540,7 +497,7 @@ void QuicTestValidateConnection()
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
nullptr));
@@ -553,14 +510,14 @@ void QuicTestValidateConnection()
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionOpen(
- Session,
+ Registration,
nullptr,
nullptr,
&Connection.Handle));
}
//
- // Null session parameter.
+ // Null registration parameter.
//
{
ConnectionScope Connection;
@@ -580,6 +537,7 @@ void QuicTestValidateConnection()
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionStart(
nullptr,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
"localhost",
4433));
@@ -591,7 +549,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -600,6 +558,7 @@ void QuicTestValidateConnection()
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
127,
"localhost",
4433));
@@ -612,7 +571,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -621,6 +580,7 @@ void QuicTestValidateConnection()
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
nullptr,
4433));
@@ -633,7 +593,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -642,6 +602,7 @@ void QuicTestValidateConnection()
QUIC_STATUS_INVALID_PARAMETER,
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
"localhost",
0));
@@ -654,7 +615,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -662,6 +623,7 @@ void QuicTestValidateConnection()
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
"localhost",
4433));
@@ -679,6 +641,7 @@ void QuicTestValidateConnection()
QUIC_STATUS_INVALID_STATE,
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
"localhost",
4433));
@@ -694,7 +657,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -706,6 +669,7 @@ void QuicTestValidateConnection()
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_INET,
"localhost",
4433);
@@ -718,7 +682,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -754,7 +718,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -788,7 +752,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -812,7 +776,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -843,7 +807,7 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
DummyConnectionCallback,
nullptr,
&Connection.Handle));
@@ -890,10 +854,10 @@ void QuicTestValidateConnection()
//
#ifndef QUIC_DISABLE_0RTT_TESTS
{
- TestListener MyListener(Session, ListenerFailSendResumeCallback);
+ TestListener MyListener(Registration, ListenerFailSendResumeCallback, ServerConfiguration);
TEST_TRUE(MyListener.IsValid());
- TEST_QUIC_SUCCEEDED(MyListener.Start());
+ TEST_QUIC_SUCCEEDED(MyListener.Start(Alpn, Alpn.Length()));
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(MyListener.GetLocalAddr(ServerLocalAddr));
@@ -908,23 +872,15 @@ void QuicTestValidateConnection()
ConnectionScope Connection;
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
AutoShutdownConnectionCallback,
nullptr,
&Connection.Handle));
- const uint64_t IdleTimeout = 1000;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Connection.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
- sizeof(IdleTimeout),
- &IdleTimeout));
-
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -940,22 +896,15 @@ void QuicTestValidateConnection()
//
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
AutoShutdownConnectionCallback,
&Event,
&Connection.Handle));
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Connection.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
- sizeof(IdleTimeout),
- &IdleTimeout));
-
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -972,22 +921,15 @@ void QuicTestValidateConnection()
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
AutoShutdownConnectionCallback,
nullptr,
&Connection.Handle));
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Connection.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
- sizeof(IdleTimeout),
- &IdleTimeout));
-
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Connection.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -1008,7 +950,7 @@ void QuicTestValidateConnection()
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerAcceptCallback(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -1019,8 +961,9 @@ ListenerAcceptCallback(
if (*NewConnection == nullptr || !(*NewConnection)->IsValid()) {
TEST_FAILURE("Failed to accept new TestConnection.");
delete *NewConnection;
- MsQuic->ConnectionClose(ConnectionHandle);
+ return false;
}
+ return true;
}
_Function_class_(QUIC_STREAM_CALLBACK)
@@ -1051,29 +994,37 @@ DummyStreamCallback(
void QuicTestValidateStream(bool Connect)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetPeerBidiStreamCount(32);
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
QUIC_BUFFER Buffers[1] = {};
//
- // Force the Client, Server, and Listener to clean up before the Session and Registration.
+ // Force the Client, Server, and Listener to clean up before the Registration.
//
{
- TestListener MyListener(Session, ListenerAcceptCallback);
+ TestListener MyListener(Registration, ListenerAcceptCallback, ServerConfiguration);
TEST_TRUE(MyListener.IsValid());
UniquePtr Server;
MyListener.Context = &Server;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
if (Connect) {
- TEST_QUIC_SUCCEEDED(MyListener.Start());
+ TEST_QUIC_SUCCEEDED(MyListener.Start(Alpn, Alpn.Length()));
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(MyListener.GetLocalAddr(ServerLocalAddr));
@@ -1082,6 +1033,7 @@ void QuicTestValidateStream(bool Connect)
//
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -1414,139 +1366,6 @@ class SecConfigTestContext {
}
};
-void static
-QuicTestValidateSecConfig(
- _In_ SecConfigTestContext* ctxt,
- _In_ QUIC_STATUS Status,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
- )
-{
- TEST_QUIC_STATUS(ctxt->Expected, Status);
-
- if (ctxt->Expected == QUIC_STATUS_SUCCESS) {
- TEST_TRUE(SecConfig != nullptr);
- }
-
- ctxt->Failed = false;
-}
-
-_Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
-void static
-QUIC_API
-QuicTestSecConfigCreateComplete(
- _In_opt_ void* Context,
- _In_ QUIC_STATUS Status,
- _In_opt_ QUIC_SEC_CONFIG* SecConfig
- )
-{
- _Analysis_assume_(Context != NULL);
- SecConfigTestContext* ctxt = (SecConfigTestContext*) Context;
-
- ctxt->Failed = true;
- QuicTestValidateSecConfig(ctxt, Status, SecConfig);
-
- //
- // If SecurityConfig is non-null, Delete the security config.
- //
- if (SecurityConfig != nullptr) {
- MsQuic->SecConfigDelete(SecConfig);
- }
-
- //
- // Finally, signal event in Context to allow test to continue.
- //
- QuicEventSet(ctxt->Event);
-}
-
-void QuicTestValidateServerSecConfig(void* CertContext, QUIC_CERTIFICATE_HASH_STORE* CertHashStore, char* Principal)
-{
- MsQuicRegistration TestReg;
- TEST_TRUE(TestReg.IsValid());
-
- SecConfigTestContext TestContext;
-
- //
- // Test null inputs.
- //
- TEST_QUIC_STATUS(
- QUIC_STATUS_INVALID_PARAMETER,
- MsQuic->SecConfigCreate(
- TestReg,
- QUIC_SEC_CONFIG_FLAG_NONE,
- nullptr, // Certificate
- nullptr, // Principal
- &TestContext,
- QuicTestSecConfigCreateComplete));
-
- if (CertContext != nullptr) {
- //
- // Test certificate context.
- //
- TestContext.Expected = QUIC_STATUS_SUCCESS;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- TestReg,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_CONTEXT,
- CertContext, // Certificate
- nullptr, // Principal
- &TestContext,
- QuicTestSecConfigCreateComplete));
-
- TEST_TRUE(QuicEventWaitWithTimeout(TestContext.Event, TestWaitTimeout));
- TEST_FALSE(TestContext.Failed);
- }
-
- if (Principal != nullptr) {
- //
- // Test certificate principal.
- //
- TestContext.Expected = QUIC_STATUS_SUCCESS;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- TestReg,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH,
- nullptr, // Certificate
- Principal, // Principal
- &TestContext,
- QuicTestSecConfigCreateComplete));
-
- TEST_TRUE(QuicEventWaitWithTimeout(TestContext.Event, TestWaitTimeout));
- TEST_FALSE(TestContext.Failed);
- }
-
- if (CertHashStore != nullptr) {
- //
- // Test certificate hash.
- //
- TEST_QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- TestReg,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH,
- &CertHashStore->ShaHash, // Certificate
- nullptr, // Principal
- &TestContext,
- QuicTestSecConfigCreateComplete));
-
- TEST_TRUE(QuicEventWaitWithTimeout(TestContext.Event, TestWaitTimeout));
- TEST_FALSE(TestContext.Failed);
-
- //
- // Test certificate hash + store.
- //
- TEST_QUIC_SUCCEEDED(
- MsQuic->SecConfigCreate(
- TestReg,
- QUIC_SEC_CONFIG_FLAG_CERTIFICATE_HASH_STORE,
- CertHashStore, // Certificate
- nullptr, // Principal
- &TestContext,
- QuicTestSecConfigCreateComplete));
-
- TEST_TRUE(QuicEventWaitWithTimeout(TestContext.Event, TestWaitTimeout));
- TEST_FALSE(TestContext.Failed);
- }
-}
-
void
QuicTestGetPerfCounters()
{
diff --git a/src/test/lib/BasicTest.cpp b/src/test/lib/BasicTest.cpp
index efcf09095d..c5f4690496 100644
--- a/src/test/lib/BasicTest.cpp
+++ b/src/test/lib/BasicTest.cpp
@@ -16,168 +16,197 @@
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerDoNothingCallback(
_In_ TestListener* /* Listener */,
_In_ HQUIC /* ConnectionHandle */
)
{
TEST_FAILURE("This callback should never be called!");
+ return false;
}
void QuicTestCreateListener()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, nullptr);
+ TEST_TRUE(Listener.IsValid());
+ }
+
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ {
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
}
}
void QuicTestStartListener()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest");
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, Alpn.Length()));
}
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QuicAddr LocalAddress(QUIC_ADDRESS_FAMILY_UNSPEC);
- TEST_QUIC_SUCCEEDED(Listener.Start(&LocalAddress.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, Alpn.Length(), &LocalAddress.SockAddr));
}
}
void QuicTestStartListenerMultiAlpns()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest1", "MsQuicTest2"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest1", "MsQuicTest2");
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, Alpn.Length()));
}
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QuicAddr LocalAddress(QUIC_ADDRESS_FAMILY_UNSPEC);
- TEST_QUIC_SUCCEEDED(Listener.Start(&LocalAddress.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, Alpn.Length(), &LocalAddress.SockAddr));
}
}
void QuicTestStartListenerImplicit(_In_ int Family)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest");
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QuicAddr LocalAddress(Family == 4 ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6);
- TEST_QUIC_SUCCEEDED(Listener.Start(&LocalAddress.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, Alpn.Length(), &LocalAddress.SockAddr));
}
}
void QuicTestStartTwoListeners()
{
- MsQuicSession Session1(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session1.IsValid());
- MsQuicSession Session2(*Registration, "MsQuicTest2");
- TEST_TRUE(Session2.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn1("MsQuicTest");
+ MsQuicConfiguration ServerConfiguration1(Registration, Alpn1, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration1.IsValid());
+ MsQuicAlpn Alpn2("MsQuicTest2");
+ MsQuicConfiguration ServerConfiguration2(Registration, Alpn2, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration2.IsValid());
{
- TestListener Listener1(Session1.Handle, ListenerDoNothingCallback);
+ TestListener Listener1(Registration, ListenerDoNothingCallback, ServerConfiguration1);
TEST_TRUE(Listener1.IsValid());
- TEST_QUIC_SUCCEEDED(Listener1.Start());
+ TEST_QUIC_SUCCEEDED(Listener1.Start(Alpn1, Alpn1.Length()));
QuicAddr LocalAddress;
TEST_QUIC_SUCCEEDED(Listener1.GetLocalAddr(LocalAddress));
- TestListener Listener2(Session2.Handle, ListenerDoNothingCallback);
+ TestListener Listener2(Registration, ListenerDoNothingCallback, ServerConfiguration2);
TEST_TRUE(Listener2.IsValid());
- TEST_QUIC_SUCCEEDED(Listener2.Start(&LocalAddress.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener2.Start(Alpn2, Alpn2.Length(), &LocalAddress.SockAddr));
}
}
void QuicTestStartTwoListenersSameALPN()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
- MsQuicSession Session2(*Registration, MsQuicAlpn("MsQuicTest", "MsQuicTest2"));
- TEST_TRUE(Session2.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn1("MsQuicTest");
+ MsQuicConfiguration ServerConfiguration1(Registration, Alpn1, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration1.IsValid());
+ MsQuicAlpn Alpn2("MsQuicTest", "MsQuicTest2");
+ MsQuicConfiguration ServerConfiguration2(Registration, Alpn2, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration2.IsValid());
{
//
// Both try to listen on the same, single ALPN
//
- TestListener Listener1(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener1(Registration, ListenerDoNothingCallback, ServerConfiguration1);
TEST_TRUE(Listener1.IsValid());
- TEST_QUIC_SUCCEEDED(Listener1.Start());
+ TEST_QUIC_SUCCEEDED(Listener1.Start(Alpn1, Alpn1.Length()));
QuicAddr LocalAddress;
TEST_QUIC_SUCCEEDED(Listener1.GetLocalAddr(LocalAddress));
- TestListener Listener2(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener2(Registration, ListenerDoNothingCallback, ServerConfiguration1);
TEST_TRUE(Listener2.IsValid());
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_STATE,
- Listener2.Start(&LocalAddress.SockAddr));
+ Listener2.Start(Alpn1, Alpn1.Length(), &LocalAddress.SockAddr));
}
{
//
// First listener on two ALPNs and second overlaps one of those.
//
- TestListener Listener1(Session2.Handle, ListenerDoNothingCallback);
+ TestListener Listener1(Registration, ListenerDoNothingCallback, ServerConfiguration2);
TEST_TRUE(Listener1.IsValid());
- TEST_QUIC_SUCCEEDED(Listener1.Start());
+ TEST_QUIC_SUCCEEDED(Listener1.Start(Alpn2, Alpn2.Length()));
QuicAddr LocalAddress;
TEST_QUIC_SUCCEEDED(Listener1.GetLocalAddr(LocalAddress));
- TestListener Listener2(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener2(Registration, ListenerDoNothingCallback, ServerConfiguration1);
TEST_TRUE(Listener2.IsValid());
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_STATE,
- Listener2.Start(&LocalAddress.SockAddr));
+ Listener2.Start(Alpn1, Alpn1.Length(), &LocalAddress.SockAddr));
}
{
//
// First listener on one ALPN and second with two (one that overlaps).
//
- TestListener Listener1(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener1(Registration, ListenerDoNothingCallback, ServerConfiguration1);
TEST_TRUE(Listener1.IsValid());
- TEST_QUIC_SUCCEEDED(Listener1.Start());
+ TEST_QUIC_SUCCEEDED(Listener1.Start(Alpn1, Alpn1.Length()));
QuicAddr LocalAddress;
TEST_QUIC_SUCCEEDED(Listener1.GetLocalAddr(LocalAddress));
- TestListener Listener2(Session2.Handle, ListenerDoNothingCallback);
+ TestListener Listener2(Registration, ListenerDoNothingCallback, ServerConfiguration2);
TEST_TRUE(Listener2.IsValid());
TEST_QUIC_STATUS(
QUIC_STATUS_INVALID_STATE,
- Listener2.Start(&LocalAddress.SockAddr));
+ Listener2.Start(Alpn2, Alpn2.Length(), &LocalAddress.SockAddr));
}
}
void QuicTestStartListenerExplicit(_In_ int Family)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest");
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerDoNothingCallback);
+ TestListener Listener(Registration, ListenerDoNothingCallback, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
@@ -185,7 +214,7 @@ void QuicTestStartListenerExplicit(_In_ int Family)
QUIC_STATUS Status = QUIC_STATUS_ADDRESS_IN_USE;
while (Status == QUIC_STATUS_ADDRESS_IN_USE) {
LocalAddress.IncrementPort();
- Status = Listener.Start(&LocalAddress.SockAddr);
+ Status = Listener.Start(Alpn, Alpn.Length(), &LocalAddress.SockAddr);
}
TEST_QUIC_SUCCEEDED(Status);
}
@@ -193,22 +222,22 @@ void QuicTestStartListenerExplicit(_In_ int Family)
void QuicTestCreateConnection()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
{
- TestConnection Connection(Session);
+ TestConnection Connection(Registration);
TEST_TRUE(Connection.IsValid());
}
}
void QuicTestBindConnectionImplicit(_In_ int Family)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
{
- TestConnection Connection(Session);
+ TestConnection Connection(Registration);
TEST_TRUE(Connection.IsValid());
QuicAddr LocalAddress(Family == 4 ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6);
@@ -218,11 +247,11 @@ void QuicTestBindConnectionImplicit(_In_ int Family)
void QuicTestBindConnectionExplicit(_In_ int Family)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
{
- TestConnection Connection(Session);
+ TestConnection Connection(Registration);
TEST_TRUE(Connection.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
diff --git a/src/test/lib/DataTest.cpp b/src/test/lib/DataTest.cpp
index 2b53bf9ffc..e5933fbcf4 100644
--- a/src/test/lib/DataTest.cpp
+++ b/src/test/lib/DataTest.cpp
@@ -64,6 +64,8 @@ struct PingStats
QUIC_EVENT CompletionEvent;
+ QUIC_BUFFER* ResumptionTicket {nullptr};
+
PingStats(
uint64_t _PayloadLength,
uint32_t _ConnectionCount,
@@ -94,6 +96,9 @@ struct PingStats
~PingStats() {
QuicEventUninitialize(CompletionEvent);
QuicZeroMemory(&CompletionEvent, sizeof(CompletionEvent));
+ if (ResumptionTicket) {
+ QUIC_FREE(ResumptionTicket);
+ }
}
};
@@ -233,7 +238,7 @@ ConnectionAcceptPingStream(
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerAcceptPingConnection(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -245,8 +250,7 @@ ListenerAcceptPingConnection(
if (Connection == nullptr || !(Connection)->IsValid()) {
TEST_FAILURE("Failed to accept new TestConnection.");
delete Connection;
- MsQuic->ConnectionClose(ConnectionHandle);
- return;
+ return false;
}
Connection->SetAutoDelete();
@@ -272,18 +276,20 @@ ListenerAcceptPingConnection(
Stats->StreamCount,
Stats->PayloadLength);
}
+
+ return true;
}
TestConnection*
NewPingConnection(
- _In_ MsQuicSession& Session,
+ _In_ MsQuicRegistration& Registration,
_In_ PingStats* ClientStats,
_In_ bool UseSendBuffer
)
{
TestScopeLogger logScope(__FUNCTION__);
- auto Connection = new(std::nothrow) TestConnection(Session, ConnectionAcceptPingStream);
+ auto Connection = new(std::nothrow) TestConnection(Registration, ConnectionAcceptPingStream);
if (Connection == nullptr || !(Connection)->IsValid()) {
TEST_FAILURE("Failed to create new TestConnection.");
delete Connection;
@@ -302,6 +308,9 @@ NewPingConnection(
Connection->Context = new(std::nothrow) PingConnState(ClientStats, Connection);
Connection->SetShutdownCompleteCallback(PingConnectionShutdown);
Connection->SetExpectedResumed(ClientStats->ZeroRtt);
+ if (ClientStats->ResumptionTicket) {
+ Connection->SetResumptionTicket(ClientStats->ResumptionTicket);
+ }
Connection->SetPriorityScheme(
ClientStats->FifoScheduling ?
@@ -345,6 +354,17 @@ QuicTestConnectAndPing(
PingStats ServerStats(Length, ConnectionCount, TotalStreamCount, FifoScheduling, UnidirectionalStreams, ServerInitiatedStreams, ClientZeroRtt && !ServerRejectZeroRtt, false, QUIC_STATUS_SUCCESS);
PingStats ClientStats(Length, ConnectionCount, TotalStreamCount, FifoScheduling, UnidirectionalStreams, ServerInitiatedStreams, ClientZeroRtt && !ServerRejectZeroRtt);
+ if (ServerRejectZeroRtt) {
+ //
+ // TODO: Validate new connections don't do 0-RTT
+ //
+ }
+
+ MsQuicRegistration Registration(true);
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
if (ClientZeroRtt) {
Settings.SetServerResumptionLevel(QUIC_SERVER_RESUME_AND_ZERORTT);
@@ -353,22 +373,37 @@ QuicTestConnectAndPing(
Settings.SetPeerBidiStreamCount(TotalStreamCount);
Settings.SetPeerUnidiStreamCount(TotalStreamCount);
}
+ Settings.SetSendBufferingEnabled(UseSendBuffer);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings, true);
- TEST_TRUE(Session.IsValid());
+ MsQuicCredentialConfig GoodServerConfig(SelfSignedCredConfig);
+#ifndef QUIC_DISABLE_0RTT_TESTS
+ uint8_t GoodTicketKey[44] = {0};
+ GoodServerConfig.TicketKey = GoodTicketKey;
- if (ServerRejectZeroRtt) {
- uint8_t NewTicketKey[44] = {1};
- //
- // TODO: Validate new connections don't do 0-RTT
- //
- TEST_QUIC_SUCCEEDED(Session.SetTlsTicketKey(NewTicketKey));
- }
+ MsQuicCredentialConfig BadServerConfig(SelfSignedCredConfig);
+ uint8_t BadTicketKey[44] = {1};
+ BadServerConfig.TicketKey = BadTicketKey;
+#endif
+
+ MsQuicConfiguration GoodServerConfiguration(Registration, Alpn, Settings, GoodServerConfig);
+ TEST_TRUE(GoodServerConfiguration.IsValid());
+
+#ifndef QUIC_DISABLE_0RTT_TESTS
+ MsQuicConfiguration BadServerConfiguration(Registration, Alpn, Settings, BadServerConfig);
+ TEST_TRUE(BadServerConfiguration.IsValid());
+#endif
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
if (ClientZeroRtt) {
- bool Success;
- QuicTestPrimeResumption(Session, QuicAddrFamily, Success);
- if (!Success) {
+ QuicTestPrimeResumption(
+ Registration,
+ GoodServerConfiguration,
+ ClientConfiguration,
+ &ClientStats.ResumptionTicket);
+ if (!ClientStats.ResumptionTicket) {
return;
}
}
@@ -376,18 +411,21 @@ QuicTestConnectAndPing(
StatelessRetryHelper RetryHelper(ServerStatelessRetry);
{
- TestListener Listener(Session.Handle, ListenerAcceptPingConnection, false, UseSendBuffer);
+ TestListener Listener(
+ Registration,
+ ListenerAcceptPingConnection,
+#ifndef QUIC_DISABLE_0RTT_TESTS
+ ServerRejectZeroRtt ? BadServerConfiguration : GoodServerConfiguration
+#else
+ GoodServerConfiguration
+#endif
+ );
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
- if (ServerRejectZeroRtt) {
- uint8_t NewTicketKey[44] = {0};
- TEST_QUIC_SUCCEEDED(Session.SetTlsTicketKey(NewTicketKey));
- }
-
Listener.Context = &ServerStats;
TestConnection** ConnAlloc = new(std::nothrow) TestConnection*[ConnectionCount];
@@ -400,7 +438,7 @@ QuicTestConnectAndPing(
for (uint32_t i = 0; i < ClientStats.ConnectionCount; ++i) {
Connections.get()[i] =
NewPingConnection(
- Session,
+ Registration,
&ClientStats,
UseSendBuffer);
if (Connections.get()[i] == nullptr) {
@@ -432,6 +470,7 @@ QuicTestConnectAndPing(
}
TEST_QUIC_SUCCEEDED(
Connections.get()[i]->Start(
+ ClientConfiguration,
QuicAddrFamily,
ClientZeroRtt ? QUIC_LOCALHOST_FOR_AF(QuicAddrFamily) : nullptr,
ServerLocalAddr.GetPort()));
@@ -462,46 +501,54 @@ QuicTestServerDisconnect(
PingStats ServerStats(UINT64_MAX - 1, 1, 1, TRUE, TRUE, TRUE, FALSE, TRUE, QUIC_STATUS_CONNECTION_TIMEOUT);
PingStats ClientStats(UINT64_MAX - 1, 1, 1, TRUE, TRUE, TRUE, FALSE, TRUE);
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(10000);
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ TestListener Listener(Registration, ListenerAcceptPingConnection, ServerConfiguration);
+ TEST_TRUE(Listener.IsValid());
+ Listener.Context = &ServerStats;
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
+
+ QuicAddr ServerLocalAddr;
+ TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
- TestListener Listener(Session.Handle, ListenerAcceptPingConnection);
- TEST_TRUE(Listener.IsValid());
- Listener.Context = &ServerStats;
- TEST_QUIC_SUCCEEDED(Listener.Start());
-
- QuicAddr ServerLocalAddr;
- TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
-
- {
- TestConnection* Client =
- NewPingConnection(
- Session,
- &ClientStats,
- FALSE);
- if (Client == nullptr) {
- return;
- }
- TEST_QUIC_SUCCEEDED(Client->SetPeerUnidiStreamCount(1));
+ TestConnection* Client =
+ NewPingConnection(
+ Registration,
+ &ClientStats,
+ FALSE);
+ if (Client == nullptr) {
+ return;
+ }
+ TEST_QUIC_SUCCEEDED(Client->SetPeerUnidiStreamCount(1));
- TEST_QUIC_SUCCEEDED(
- Client->Start(
- QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
- QUIC_LOCALHOST_FOR_AF(
- QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
- ServerLocalAddr.GetPort()));
+ TEST_QUIC_SUCCEEDED(
+ Client->Start(
+ ClientConfiguration,
+ QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
+ QUIC_LOCALHOST_FOR_AF(
+ QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
+ ServerLocalAddr.GetPort()));
- QuicSleep(500); // Sleep for a little bit.
+ QuicSleep(500); // Sleep for a little bit.
- Client->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
- }
+ Client->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
}
- } // Scope exit waits on Session closure, which waits for connection closures.
+ }
}
_Function_class_(STREAM_SHUTDOWN_CALLBACK)
@@ -535,7 +582,7 @@ ConnectionAcceptAndIgnoreStream(
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerAcceptConnectionAndStreams(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -547,9 +594,10 @@ ListenerAcceptConnectionAndStreams(
TEST_FAILURE("Failed to accept new TestConnection.");
delete *AcceptContext->NewConnection;
*AcceptContext->NewConnection = nullptr;
- MsQuic->ConnectionClose(ConnectionHandle);
+ return false;
}
QuicEventSet(AcceptContext->NewConnectionReady);
+ return true;
}
void
@@ -567,86 +615,101 @@ QuicTestClientDisconnect(
PingStats ClientStats(UINT64_MAX - 1, 1, 1, TRUE, TRUE, FALSE, FALSE, TRUE,
StopListenerFirst ? QUIC_STATUS_CONNECTION_TIMEOUT : QUIC_STATUS_ABORTED);
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(10000);
Settings.SetPeerUnidiStreamCount(1);
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ TestListener Listener(Registration, ListenerAcceptConnectionAndStreams, ServerConfiguration);
+ TEST_TRUE(Listener.IsValid());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
- {
- TestListener Listener(Session.Handle, ListenerAcceptConnectionAndStreams);
- TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
-
- QuicAddr ServerLocalAddr;
- TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
-
- TestConnection* Client;
- {
- UniquePtr Server;
- ServerAcceptContext ServerAcceptCtx((TestConnection**)&Server);
- Listener.Context = &ServerAcceptCtx;
-
- Client =
- NewPingConnection(
- Session,
- &ClientStats,
- false);
- if (Client == nullptr) {
- return;
- }
+ QuicAddr ServerLocalAddr;
+ TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
- Client->SetExpectedTransportCloseStatus(ClientStats.ExpectedCloseStatus);
- TEST_QUIC_SUCCEEDED(Client->SetDisconnectTimeout(1000)); // ms
+ TestConnection* Client;
+ {
+ UniquePtr Server;
+ ServerAcceptContext ServerAcceptCtx((TestConnection**)&Server);
+ Listener.Context = &ServerAcceptCtx;
- if (!SendPingBurst(
- Client,
- ClientStats.StreamCount,
- ClientStats.PayloadLength)) {
- return;
- }
+ Client =
+ NewPingConnection(
+ Registration,
+ &ClientStats,
+ false);
+ if (Client == nullptr) {
+ return;
+ }
- TEST_QUIC_SUCCEEDED(
- Client->Start(
- QUIC_ADDRESS_FAMILY_INET,
- QUIC_LOCALHOST_FOR_AF(QUIC_ADDRESS_FAMILY_INET),
- ServerLocalAddr.GetPort()));
+ Client->SetExpectedTransportCloseStatus(ClientStats.ExpectedCloseStatus);
+ TEST_QUIC_SUCCEEDED(Client->SetDisconnectTimeout(1000)); // ms
- if (!Client->WaitForConnectionComplete()) {
- return;
- }
- TEST_TRUE(Client->GetIsConnected());
+ if (!SendPingBurst(
+ Client,
+ ClientStats.StreamCount,
+ ClientStats.PayloadLength)) {
+ return;
+ }
- TEST_NOT_EQUAL(nullptr, Server);
- if (!Server->WaitForConnectionComplete()) {
- return;
- }
- TEST_TRUE(Server->GetIsConnected());
+ TEST_QUIC_SUCCEEDED(
+ Client->Start(
+ ClientConfiguration,
+ QUIC_ADDRESS_FAMILY_INET,
+ QUIC_LOCALHOST_FOR_AF(QUIC_ADDRESS_FAMILY_INET),
+ ServerLocalAddr.GetPort()));
- if (StopListenerFirst) {
- Listener.Stop();
- }
+ if (!Client->WaitForConnectionComplete()) {
+ return;
+ }
+ TEST_TRUE(Client->GetIsConnected());
- QuicSleep(15); // Sleep for just a bit.
+ TEST_NOT_EQUAL(nullptr, Server);
+ if (!Server->WaitForConnectionComplete()) {
+ return;
+ }
+ TEST_TRUE(Server->GetIsConnected());
- Server->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
+ if (StopListenerFirst) {
+ Listener.Stop();
}
- (void)Client->WaitForShutdownComplete();
+ QuicSleep(15); // Sleep for just a bit.
+
+ Server->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
}
- } // Scope exit waits on Session closure, which waits for connection closures.
+
+ (void)Client->WaitForShutdownComplete();
+ }
}
struct AbortiveTestContext {
AbortiveTestContext(
+ _In_ HQUIC ServerConfiguration,
_In_ bool ServerParam,
_In_ QUIC_ABORTIVE_TRANSFER_FLAGS FlagsParam,
_In_ uint32_t ExpectedErrorParam,
_In_ QUIC_STREAM_SHUTDOWN_FLAGS ShutdownFlagsParam) :
- Flags(FlagsParam), ShutdownFlags(ShutdownFlagsParam), ExpectedError(ExpectedErrorParam), TestResult(0), Server(ServerParam)
+ ServerConfiguration(ServerConfiguration),
+ Flags(FlagsParam),
+ ShutdownFlags(ShutdownFlagsParam),
+ ExpectedError(ExpectedErrorParam),
+ TestResult(0),
+ Server(ServerParam)
{ }
+ HQUIC ServerConfiguration;
EventScope ConnectedEvent;
EventScope StreamEvent;
EventScope TestEvent;
@@ -761,7 +824,7 @@ QuicAbortiveConnectionHandler(
case QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED:
MsQuic->SetCallbackHandler(
Event->PEER_STREAM_STARTED.Stream,
- (void*) QuicAbortiveStreamHandler,
+ (void*)QuicAbortiveStreamHandler,
Context);
if (TestContext->Server &&
@@ -798,6 +861,10 @@ QuicAbortiveConnectionHandler(
case QUIC_CONNECTION_EVENT_DATAGRAM_RECEIVED:
__fallthrough;
case QUIC_CONNECTION_EVENT_DATAGRAM_SEND_STATE_CHANGED:
+ __fallthrough;
+ case QUIC_CONNECTION_EVENT_RESUMED:
+ __fallthrough;
+ case QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED:
return QUIC_STATUS_SUCCESS;
default:
TEST_FAILURE(
@@ -820,13 +887,12 @@ QuicAbortiveListenerHandler(
_Inout_ QUIC_LISTENER_EVENT* Event
)
{
- AbortiveTestContext* TestContext = (AbortiveTestContext*) Context;
+ AbortiveTestContext* TestContext = (AbortiveTestContext*)Context;
switch (Event->Type) {
case QUIC_LISTENER_EVENT_NEW_CONNECTION:
TestContext->Conn.Handle = Event->NEW_CONNECTION.Connection;
MsQuic->SetCallbackHandler(TestContext->Conn.Handle, (void*) QuicAbortiveConnectionHandler, Context);
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- return QUIC_STATUS_SUCCESS;
+ return MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, TestContext->ServerConfiguration);
default:
TEST_FAILURE(
"Invalid listener event! Context: 0x%p, Event: %d",
@@ -843,9 +909,19 @@ QuicAbortiveTransfers(
)
{
uint32_t TimeoutMs = 500;
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
/*
Test Cases:
* Sender closes the stream before data has even been sent.
@@ -862,8 +938,6 @@ QuicAbortiveTransfers(
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
QuicBufferScope Buffer(SendLength);
- uint32_t StreamCountType = (Flags.UnidirectionalStream) ?
- QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT : QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT;
QUIC_STREAM_SHUTDOWN_FLAGS ShutdownFlags;
switch (Flags.ShutdownDirection) {
case ShutdownBoth:
@@ -881,12 +955,12 @@ QuicAbortiveTransfers(
}
{
- AbortiveTestContext ClientContext(false, Flags, ExpectedError, ShutdownFlags), ServerContext(true, Flags, ExpectedError, ShutdownFlags);
+ AbortiveTestContext ClientContext(nullptr, false, Flags, ExpectedError, ShutdownFlags), ServerContext(ServerConfiguration, true, Flags, ExpectedError, ShutdownFlags);
ListenerScope Listener;
QUIC_STATUS Status =
MsQuic->ListenerOpen(
- Session,
+ Registration,
QuicAbortiveListenerHandler,
&ServerContext,
&Listener.Handle);
@@ -895,7 +969,7 @@ QuicAbortiveTransfers(
return;
}
- Status = MsQuic->ListenerStart(Listener.Handle, nullptr);
+ Status = MsQuic->ListenerStart(Listener.Handle, Alpn, Alpn.Length(), nullptr);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("MsQuic->ListenerStart failed, 0x%x.", Status);
@@ -920,7 +994,7 @@ QuicAbortiveTransfers(
//
Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
QuicAbortiveConnectionHandler,
&ClientContext,
&ClientContext.Conn.Handle);
@@ -929,24 +1003,10 @@ QuicAbortiveTransfers(
return;
}
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID;
- Status =
- MsQuic->SetParam(
- ClientContext.Conn.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags);
- if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status);
- return;
- }
-
Status =
MsQuic->ConnectionStart(
ClientContext.Conn.Handle,
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort());
@@ -993,15 +1053,23 @@ QuicAbortiveTransfers(
}
if (!Flags.DelayStreamCreation) {
+ QUIC_SETTINGS Settings{0};
+ if (Flags.UnidirectionalStream) {
+ Settings.PeerUnidiStreamCount = StreamCount;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ } else {
+ Settings.PeerBidiStreamCount = StreamCount;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ }
Status =
MsQuic->SetParam(
ServerContext.Conn.Handle,
QUIC_PARAM_LEVEL_CONNECTION,
- StreamCountType,
- sizeof(StreamCount),
- &StreamCount);
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings);
if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_PEER_*DI_STREAM_COUNT(%d) failed, 0x%x", StreamCountType, Status);
+ TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_SETTINGS failed, 0x%x", Status);
return;
}
}
@@ -1041,15 +1109,23 @@ QuicAbortiveTransfers(
}
if (Flags.DelayStreamCreation) {
+ QUIC_SETTINGS Settings{0};
+ if (Flags.UnidirectionalStream) {
+ Settings.PeerUnidiStreamCount = StreamCount;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ } else {
+ Settings.PeerBidiStreamCount = StreamCount;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ }
Status =
MsQuic->SetParam(
ServerContext.Conn.Handle,
QUIC_PARAM_LEVEL_CONNECTION,
- StreamCountType,
- sizeof(StreamCount),
- &StreamCount);
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings);
if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_PEER_*DI_STREAM_COUNT(%d) failed, 0x%x", StreamCountType, Status);
+ TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_SETTINGS failed, 0x%x", Status);
return;
}
}
@@ -1114,11 +1190,18 @@ QuicAbortiveTransfers(
struct RecvResumeTestContext {
RecvResumeTestContext(
+ _In_ HQUIC ServerConfiguration,
_In_ bool ServerParam,
_In_ QUIC_RECEIVE_RESUME_SHUTDOWN_TYPE ShutdownTypeParam,
_In_ QUIC_RECEIVE_RESUME_TYPE PauseTypeParam) :
- ShutdownType(ShutdownTypeParam), PauseType(PauseTypeParam), TestResult((uint32_t)QUIC_STATUS_INTERNAL_ERROR), Server(ServerParam), ReceiveCallbackCount(0)
+ ServerConfiguration(ServerConfiguration),
+ ShutdownType(ShutdownTypeParam),
+ PauseType(PauseTypeParam),
+ TestResult((uint32_t)QUIC_STATUS_INTERNAL_ERROR),
+ Server(ServerParam),
+ ReceiveCallbackCount(0)
{ }
+ HQUIC ServerConfiguration;
EventScope ConnectedEvent;
EventScope StreamEvent;
EventScope TestEvent;
@@ -1263,7 +1346,7 @@ QuicRecvResumeConnectionHandler(
case QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED:
MsQuic->SetCallbackHandler(
Event->PEER_STREAM_STARTED.Stream,
- (void*) QuicRecvResumeStreamHandler,
+ (void*)QuicRecvResumeStreamHandler,
Context);
TestContext->Stream.Handle = Event->PEER_STREAM_STARTED.Stream;
QuicEventSet(TestContext->StreamEvent.Handle);
@@ -1286,6 +1369,10 @@ QuicRecvResumeConnectionHandler(
case QUIC_CONNECTION_EVENT_DATAGRAM_RECEIVED:
__fallthrough;
case QUIC_CONNECTION_EVENT_DATAGRAM_SEND_STATE_CHANGED:
+ __fallthrough;
+ case QUIC_CONNECTION_EVENT_RESUMED:
+ __fallthrough;
+ case QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED:
return QUIC_STATUS_SUCCESS;
default:
TEST_FAILURE(
@@ -1308,13 +1395,12 @@ QuicRecvResumeListenerHandler(
_Inout_ QUIC_LISTENER_EVENT* Event
)
{
- RecvResumeTestContext* TestContext = (RecvResumeTestContext*) Context;
+ RecvResumeTestContext* TestContext = (RecvResumeTestContext*)Context;
switch (Event->Type) {
case QUIC_LISTENER_EVENT_NEW_CONNECTION:
TestContext->Conn.Handle = Event->NEW_CONNECTION.Connection;
MsQuic->SetCallbackHandler(TestContext->Conn.Handle, (void*) QuicRecvResumeConnectionHandler, Context);
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- return QUIC_STATUS_SUCCESS;
+ return MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, TestContext->ServerConfiguration);
default:
TEST_FAILURE(
"Invalid listener event! Context: 0x%p, Event: %d",
@@ -1335,14 +1421,24 @@ QuicTestReceiveResume(
)
{
uint32_t TimeoutMs = 500;
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
uint32_t SendSize = SendBytes;
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
QuicBufferScope Buffer(SendSize);
- RecvResumeTestContext ServerContext(true, ShutdownType, PauseType), ClientContext(false, ShutdownType, PauseType);
+ RecvResumeTestContext ServerContext(ServerConfiguration, true, ShutdownType, PauseType), ClientContext(nullptr, false, ShutdownType, PauseType);
ServerContext.ConsumeBufferAmount = ConsumeBytes;
{
@@ -1352,7 +1448,7 @@ QuicTestReceiveResume(
ListenerScope Listener;
QUIC_STATUS Status =
MsQuic->ListenerOpen(
- Session,
+ Registration,
QuicRecvResumeListenerHandler,
&ServerContext,
&Listener.Handle);
@@ -1361,7 +1457,7 @@ QuicTestReceiveResume(
return;
}
- Status = MsQuic->ListenerStart(Listener.Handle, nullptr);
+ Status = MsQuic->ListenerStart(Listener.Handle, Alpn, Alpn.Length(), nullptr);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("MsQuic->ListenerStart failed, 0x%x.", Status);
return;
@@ -1385,7 +1481,7 @@ QuicTestReceiveResume(
//
Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
QuicRecvResumeConnectionHandler,
&ClientContext,
&ClientContext.Conn.Handle);
@@ -1394,24 +1490,10 @@ QuicTestReceiveResume(
return;
}
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID;
- Status =
- MsQuic->SetParam(
- ClientContext.Conn.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags);
- if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status);
- return;
- }
-
Status =
MsQuic->ConnectionStart(
ClientContext.Conn.Handle,
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort());
@@ -1429,17 +1511,18 @@ QuicTestReceiveResume(
return;
}
- uint32_t StreamCount = 1;
- uint16_t ParamType = QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT;
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerUnidiStreamCount = 1;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
Status =
MsQuic->SetParam(
ServerContext.Conn.Handle,
QUIC_PARAM_LEVEL_CONNECTION,
- ParamType,
- sizeof(ParamType),
- &StreamCount);
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings);
if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT failed, 0x%x", Status);
+ TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_SETTINGS failed, 0x%x", Status);
return;
}
@@ -1601,12 +1684,22 @@ QuicTestReceiveResumeNoData(
)
{
uint32_t TimeoutMs = 500;
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
- RecvResumeTestContext ServerContext(true, ShutdownType, ReturnConsumedBytes), ClientContext(false, ShutdownType, ReturnConsumedBytes);
+ RecvResumeTestContext ServerContext(ServerConfiguration, true, ShutdownType, ReturnConsumedBytes), ClientContext(nullptr, false, ShutdownType, ReturnConsumedBytes);
ServerContext.ShutdownOnly = true;
{
@@ -1616,7 +1709,7 @@ QuicTestReceiveResumeNoData(
ListenerScope Listener;
QUIC_STATUS Status =
MsQuic->ListenerOpen(
- Session,
+ Registration,
QuicRecvResumeListenerHandler,
&ServerContext,
&Listener.Handle);
@@ -1625,7 +1718,7 @@ QuicTestReceiveResumeNoData(
return;
}
- Status = MsQuic->ListenerStart(Listener.Handle, nullptr);
+ Status = MsQuic->ListenerStart(Listener.Handle, Alpn, Alpn.Length(), nullptr);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("MsQuic->ListenerStart failed, 0x%x.", Status);
return;
@@ -1649,7 +1742,7 @@ QuicTestReceiveResumeNoData(
//
Status =
MsQuic->ConnectionOpen(
- Session,
+ Registration,
QuicRecvResumeConnectionHandler,
&ClientContext,
&ClientContext.Conn.Handle);
@@ -1658,24 +1751,10 @@ QuicTestReceiveResumeNoData(
return;
}
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID;
- Status =
- MsQuic->SetParam(
- ClientContext.Conn.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags);
- if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam(CERT_VALIDATION_FLAGS) failed, 0x%x.", Status);
- return;
- }
-
Status =
MsQuic->ConnectionStart(
ClientContext.Conn.Handle,
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort());
@@ -1693,17 +1772,18 @@ QuicTestReceiveResumeNoData(
return;
}
- uint32_t StreamCount = 1;
- uint16_t ParamType = QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT;
+ QUIC_SETTINGS Settings{ 0 };
+ Settings.PeerUnidiStreamCount = 1;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
Status =
MsQuic->SetParam(
ServerContext.Conn.Handle,
QUIC_PARAM_LEVEL_CONNECTION,
- ParamType,
- sizeof(ParamType),
- &StreamCount);
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings);
if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT failed, 0x%x", Status);
+ TEST_FAILURE("MsQuic->SetParam QUIC_PARAM_CONN_SETTINGS failed, 0x%x", Status);
return;
}
diff --git a/src/test/lib/DatagramTest.cpp b/src/test/lib/DatagramTest.cpp
index 81497f6a36..ebb7f076ca 100644
--- a/src/test/lib/DatagramTest.cpp
+++ b/src/test/lib/DatagramTest.cpp
@@ -28,7 +28,7 @@ struct ServerAcceptContext {
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerAcceptConnection(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -40,11 +40,11 @@ ListenerAcceptConnection(
TEST_FAILURE("Failed to accept new TestConnection.");
delete *AcceptContext->NewConnection;
*AcceptContext->NewConnection = nullptr;
- MsQuic->ConnectionClose(ConnectionHandle);
- } else {
- (*AcceptContext->NewConnection)->SetHasRandomLoss(Listener->GetHasRandomLoss());
+ return false;
}
+ (*AcceptContext->NewConnection)->SetHasRandomLoss(Listener->GetHasRandomLoss());
QuicEventSet(AcceptContext->NewConnectionReady);
+ return true;
}
void
@@ -53,26 +53,32 @@ QuicTestDatagramNegotiation(
_In_ bool DatagramReceiveEnabled
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetDatagramReceiveEnabled(true); // Always enabled on client.
- MsQuicSession ClientSession(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(ClientSession.IsValid());
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
Settings.SetDatagramReceiveEnabled(DatagramReceiveEnabled);
- MsQuicSession ServerSession(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(ServerSession.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
uint8_t RawBuffer[] = "datagram";
QUIC_BUFFER DatagramBuffer = { sizeof(RawBuffer), RawBuffer };
{
- TestListener Listener(ServerSession.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -81,7 +87,7 @@ QuicTestDatagramNegotiation(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(ClientSession);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_TRUE(Client.GetDatagramSendEnabled()); // Datagrams start as enabled
@@ -96,6 +102,7 @@ QuicTestDatagramNegotiation(
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -145,11 +152,20 @@ QuicTestDatagramSend(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetDatagramReceiveEnabled(true);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
uint8_t RawBuffer[] = "datagram";
QUIC_BUFFER DatagramBuffer = { sizeof(RawBuffer), RawBuffer };
@@ -157,12 +173,12 @@ QuicTestDatagramSend(
SelectiveLossHelper LossHelper;
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -171,13 +187,14 @@ QuicTestDatagramSend(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_TRUE(Client.GetDatagramSendEnabled());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
diff --git a/src/test/lib/EventTest.cpp b/src/test/lib/EventTest.cpp
index c2a9c503e9..6f47ddcea1 100644
--- a/src/test/lib/EventTest.cpp
+++ b/src/test/lib/EventTest.cpp
@@ -17,9 +17,6 @@
#define QUIC_EVENT_ACTION_SHUTDOWN_CONNECTION 1
#define QUIC_EVENT_ACTION_SHUTDOWN_STREAM 2
-#define RESUMPTION_BUFFER_LENGTH 2048
-uint8_t SerializedResumptionStorage[sizeof(QUIC_BUFFER) + RESUMPTION_BUFFER_LENGTH];
-
struct StreamEventValidator {
bool Success;
bool Optional;
@@ -116,15 +113,18 @@ struct ConnEventValidator {
struct ConnValidator {
HQUIC Handle;
+ HQUIC Configuration;
ConnEventValidator** ExpectedEvents;
uint32_t CurrentEvent;
QUIC_EVENT Complete;
- ConnValidator() :
- Handle(nullptr), ExpectedEvents(nullptr), CurrentEvent(0) {
+ ConnValidator(HQUIC Configuration = nullptr) :
+ Handle(nullptr), Configuration(Configuration),
+ ExpectedEvents(nullptr), CurrentEvent(0) {
QuicEventInitialize(&Complete, TRUE, FALSE);
}
- ConnValidator(ConnEventValidator** expectedEvents) :
- Handle(nullptr), ExpectedEvents(expectedEvents), CurrentEvent(0) {
+ ConnValidator(ConnEventValidator** expectedEvents, HQUIC Configuration = nullptr) :
+ Handle(nullptr), Configuration(Configuration),
+ ExpectedEvents(expectedEvents), CurrentEvent(0) {
QuicEventInitialize(&Complete, TRUE, FALSE);
}
~ConnValidator() {
@@ -263,8 +263,10 @@ ListenerEventValidatorCallback(
Event->NEW_CONNECTION.Connection,
(void *)ConnValidatorCallback,
Validator);
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- return QUIC_STATUS_SUCCESS;
+ return
+ MsQuic->ConnectionSetConfiguration(
+ Event->NEW_CONNECTION.Connection,
+ Validator->Configuration);
}
_IRQL_requires_max_(PASSIVE_LEVEL)
@@ -273,7 +275,7 @@ QUIC_STATUS
QUIC_API
ListenerEventResumptionCallback(
_In_ HQUIC /* Listener */,
- _In_opt_ void* /*Context*/,
+ _In_opt_ void* Context,
_Inout_ QUIC_LISTENER_EVENT* Event
)
{
@@ -282,17 +284,28 @@ ListenerEventResumptionCallback(
(void *)ConnServerResumptionCallback,
nullptr);
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- return QUIC_STATUS_SUCCESS;
+ return
+ MsQuic->ConnectionSetConfiguration(
+ Event->NEW_CONNECTION.Connection,
+ (HQUIC)Context);
}
void
QuicTestValidateConnectionEvents1(
- _In_ HQUIC Session,
+ _In_ MsQuicRegistration& Registration,
_In_ HQUIC Listener,
_In_ QuicAddr& ServerLocalAddr
)
{
+ TestScopeLogger ScopeLogger(__FUNCTION__);
+
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig(QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION);
+ MsQuicConfiguration ClientConfiguration(Registration, "MsQuicTest", ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
ConnValidator Client(
new(std::nothrow) ConnEventValidator* [4] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
@@ -302,43 +315,29 @@ QuicTestValidateConnectionEvents1(
}
);
ConnValidator Server(
- new(std::nothrow) ConnEventValidator* [5] {
+ new(std::nothrow) ConnEventValidator* [6] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true), // This comes AFTER shutdown in miTLS
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true), // This comes AFTER shutdown in miTLS
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
- }
+ },
+ ServerConfiguration
);
MsQuic->SetContext(Listener, &Server);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
ConnValidatorCallback,
&Client,
&Client.Handle));
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags));
- uint16_t StreamCount = 0; // Temp Work around.
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(StreamCount),
- &StreamCount));
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Client.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -350,15 +349,25 @@ QuicTestValidateConnectionEvents1(
void
QuicTestValidateConnectionEvents2(
- _In_ HQUIC Session,
+ _In_ MsQuicRegistration& Registration,
_In_ HQUIC Listener,
_In_ QuicAddr& ServerLocalAddr
)
{
+ TestScopeLogger ScopeLogger(__FUNCTION__);
+
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig(QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION);
+ MsQuicConfiguration ClientConfiguration(Registration, "MsQuicTest", ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
ConnValidator Client(
- new(std::nothrow) ConnEventValidator* [5] {
+ new(std::nothrow) ConnEventValidator* [6] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED, 0, true), // TODO - Schannel does resumption regardless
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
@@ -370,37 +379,22 @@ QuicTestValidateConnectionEvents2(
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, QUIC_EVENT_ACTION_SHUTDOWN_CONNECTION),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
- }
+ },
+ ServerConfiguration
);
MsQuic->SetContext(Listener, &Server);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
ConnValidatorCallback,
&Client,
&Client.Handle));
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags));
- uint16_t StreamCount = 0; // Temp Work around.
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(StreamCount),
- &StreamCount));
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Client.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -410,13 +404,34 @@ QuicTestValidateConnectionEvents2(
TEST_TRUE(QuicEventWaitWithTimeout(Server.Complete, 1000));
}
-/*void
+void
QuicTestValidateConnectionEvents3(
- _In_ MsQuicSession& Session,
+ _In_ MsQuicRegistration& Registration,
_In_ HQUIC Listener,
_In_ QuicAddr& ServerLocalAddr
)
{
+ TestScopeLogger ScopeLogger(__FUNCTION__);
+
+ MsQuicSettings Settings;
+ Settings.SetServerResumptionLevel(QUIC_SERVER_RESUME_ONLY);
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig(QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION);
+ MsQuicConfiguration ClientConfiguration(Registration, "MsQuicTest", ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+
+ QUIC_BUFFER* ResumptionTicket = nullptr;
+ QuicTestPrimeResumption(
+ Registration,
+ ServerConfiguration,
+ ClientConfiguration,
+ &ResumptionTicket);
+ if (!ResumptionTicket) {
+ return;
+ }
+
ConnValidator Client(
new(std::nothrow) ConnEventValidator* [4] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
@@ -426,77 +441,24 @@ QuicTestValidateConnectionEvents3(
}
);
ConnValidator Server(
- new(std::nothrow) ConnEventValidator* [7] {
+ new(std::nothrow) ConnEventValidator* [8] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_RESUMED, 0, true),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_RESUMED, 0, true),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, false, true),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true, true), // This comes AFTER shutdown in miTLS
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true, true), // This comes AFTER shutdown in miTLS
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
- }
+ },
+ ServerConfiguration
);
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- uint16_t StreamCount = 0; // Temp Work around.
- QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
- QUIC_SERVER_RESUMPTION_LEVEL Level = QUIC_SERVER_RESUME_ONLY;
- QUIC_BUFFER* ResumptionBuffer = (QUIC_BUFFER*) SerializedResumptionStorage;
- ResumptionBuffer->Length = RESUMPTION_BUFFER_LENGTH;
- ResumptionBuffer->Buffer = SerializedResumptionStorage + sizeof(QUIC_BUFFER);
-
- //
- // Create a connection just to get a resumption ticket.
- //
- MsQuic->SetCallbackHandler(Listener, (void*)ListenerEventResumptionCallback, nullptr);
- Status =
- MsQuic->SetParam(
- Session.Handle,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_SERVER_RESUMPTION_LEVEL,
- sizeof(Level),
- &Level);
- TEST_QUIC_SUCCEEDED(Status);
-
- TestConnection FirstConnection(Session, nullptr);
- FirstConnection.SetCertValidationFlags(CertFlags);
- FirstConnection.SetPeerBidiStreamCount(StreamCount);
- FirstConnection.Start(
- QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
- QUIC_LOCALHOST_FOR_AF(QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
- QuicAddrGetPort(&ServerLocalAddr.SockAddr));
- FirstConnection.WaitForConnectionComplete();
- int i = 0;
- do {
- QuicSleep(100);
- Status =
- FirstConnection.GetResumptionTicket(
- ResumptionBuffer->Buffer,
- &ResumptionBuffer->Length);
- } while (Status != QUIC_STATUS_SUCCESS && i++ < 10);
- TEST_QUIC_SUCCEEDED(Status);
- FirstConnection.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
- FirstConnection.WaitForShutdownComplete();
-
- //
- // Set up the listener for the actual test now.
- //
- MsQuic->SetCallbackHandler(Listener, (void*)ListenerEventValidatorCallback, &Server);
-
- Level = QUIC_SERVER_NO_RESUME;
- Status =
- MsQuic->SetParam(
- Session.Handle,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_SERVER_RESUMPTION_LEVEL,
- sizeof(Level),
- &Level);
- TEST_QUIC_SUCCEEDED(Status);
+ MsQuic->SetContext(Listener, &Server);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session.Handle,
+ Registration,
ConnValidatorCallback,
&Client,
&Client.Handle));
@@ -504,49 +466,39 @@ QuicTestValidateConnectionEvents3(
MsQuic->SetParam(
Client.Handle,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags));
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(StreamCount),
- &StreamCount));
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_SESSION,
- QUIC_PARAM_SESSION_ADD_RESUMPTION_STATE,
- ResumptionBuffer->Length,
- ResumptionBuffer->Buffer));
+ QUIC_PARAM_CONN_RESUMPTION_STATE,
+ ResumptionTicket->Length,
+ ResumptionTicket->Buffer));
+ QUIC_FREE(ResumptionTicket);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Client.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
QuicAddrGetPort(&ServerLocalAddr.SockAddr)));
TEST_TRUE(QuicEventWaitWithTimeout(Client.Complete, 2000));
TEST_TRUE(QuicEventWaitWithTimeout(Server.Complete, 1000));
-}*/
+}
void QuicTestValidateConnectionEvents()
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), true);
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration(true);
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
{ // Listener Scope
ListenerScope Listener;
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session.Handle,
+ Registration,
ListenerEventValidatorCallback,
nullptr,
&Listener.Handle));
- TEST_QUIC_SUCCEEDED(MsQuic->ListenerStart(Listener.Handle, nullptr));
+ TEST_QUIC_SUCCEEDED(MsQuic->ListenerStart(Listener.Handle, Alpn, Alpn.Length(), nullptr));
QuicAddr ServerLocalAddr;
uint32_t ServerLocalAddrSize = sizeof(ServerLocalAddr.SockAddr);
@@ -558,10 +510,10 @@ void QuicTestValidateConnectionEvents()
&ServerLocalAddrSize,
&ServerLocalAddr.SockAddr));
- QuicTestValidateConnectionEvents1(Session.Handle, Listener.Handle, ServerLocalAddr);
- QuicTestValidateConnectionEvents2(Session.Handle, Listener.Handle, ServerLocalAddr);
+ QuicTestValidateConnectionEvents1(Registration, Listener.Handle, ServerLocalAddr);
+ QuicTestValidateConnectionEvents2(Registration, Listener.Handle, ServerLocalAddr);
#ifndef QUIC_DISABLE_0RTT_TESTS
- //QuicTestValidateConnectionEvents3(Session, Listener.Handle, ServerLocalAddr);
+ QuicTestValidateConnectionEvents3(Registration, Listener.Handle, ServerLocalAddr);
#endif
} // Listener Scope
@@ -569,41 +521,33 @@ void QuicTestValidateConnectionEvents()
void
QuicTestValidateStreamEvents1(
+ _In_ MsQuicRegistration& Registration,
_In_ HQUIC Listener,
_In_ QuicAddr& ServerLocalAddr
)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), true);
- TEST_TRUE(Session.IsValid());
+ TestScopeLogger ScopeLogger(__FUNCTION__);
+
+ MsQuicSettings Settings;
+ Settings.SetPeerBidiStreamCount(1);
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig(QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION);
+ MsQuicConfiguration ClientConfiguration(Registration, "MsQuicTest", ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{ // Connections scope
- ConnValidator Client, Server;
+ ConnValidator Client, Server(ServerConfiguration);
MsQuic->SetContext(Listener, &Server);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
ConnValidatorCallback,
&Client,
&Client.Handle));
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags));
- uint16_t StreamCount = 0; // Temp Work around.
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(StreamCount),
- &StreamCount));
{ // Stream scope
@@ -627,11 +571,12 @@ QuicTestValidateStreamEvents1(
});
Client.SetExpectedEvents(
- new(std::nothrow) ConnEventValidator* [6] {
+ new(std::nothrow) ConnEventValidator* [7] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE, 0, true),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED, 0, true), // TODO - Schannel does resumption regardless
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
});
@@ -665,6 +610,7 @@ QuicTestValidateStreamEvents1(
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Client.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -679,41 +625,33 @@ QuicTestValidateStreamEvents1(
void
QuicTestValidateStreamEvents2(
+ _In_ MsQuicRegistration& Registration,
_In_ HQUIC Listener,
_In_ QuicAddr& ServerLocalAddr
)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), true);
- TEST_TRUE(Session.IsValid());
+ TestScopeLogger ScopeLogger(__FUNCTION__);
+
+ MsQuicSettings Settings;
+ Settings.SetPeerBidiStreamCount(1);
+ MsQuicConfiguration ServerConfiguration(Registration, "MsQuicTest", Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig(QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION);
+ MsQuicConfiguration ClientConfiguration(Registration, "MsQuicTest", ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{ // Connections scope
- ConnValidator Client, Server;
+ ConnValidator Client, Server(ServerConfiguration);
MsQuic->SetContext(Listener, &Server);
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionOpen(
- Session.Handle,
+ Registration,
ConnValidatorCallback,
&Client,
&Client.Handle));
- uint32_t CertFlags =
- QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertFlags),
- &CertFlags));
- uint16_t StreamCount = 0; // Temp Work around.
- TEST_QUIC_SUCCEEDED(
- MsQuic->SetParam(
- Client.Handle,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(StreamCount),
- &StreamCount));
{ // Stream scope
@@ -727,20 +665,22 @@ QuicTestValidateStreamEvents2(
});
Client.SetExpectedEvents(
- new(std::nothrow) ConnEventValidator* [7] {
+ new(std::nothrow) ConnEventValidator* [8] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE, 0, true),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, QUIC_EVENT_ACTION_SHUTDOWN_CONNECTION),
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_STREAMS_AVAILABLE, 0, true),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED, 0, true), // TODO - Schannel does resumption regardless
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
});
Server.SetExpectedEvents(
- new(std::nothrow) ConnEventValidator* [5] {
+ new(std::nothrow) ConnEventValidator* [6] {
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_DATAGRAM_STATE_CHANGED),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED),
- new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true), // This comes AFTER shutdown in miTLS
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT),
+ new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_CONNECTED, 0, true), // This comes AFTER shutdown in miTLS
new(std::nothrow) ConnEventValidator(QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE),
nullptr
});
@@ -760,6 +700,7 @@ QuicTestValidateStreamEvents2(
TEST_QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Client.Handle,
+ ClientConfiguration,
QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -774,22 +715,21 @@ QuicTestValidateStreamEvents2(
void QuicTestValidateStreamEvents()
{
- MsQuicSettings Settings;
- Settings.SetPeerBidiStreamCount(1);
+ MsQuicRegistration Registration(true);
+ TEST_TRUE(Registration.IsValid());
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings, true);
- TEST_TRUE(Session.IsValid());
+ MsQuicAlpn Alpn("MsQuicTest");
{ // Listener Scope
ListenerScope Listener;
TEST_QUIC_SUCCEEDED(
MsQuic->ListenerOpen(
- Session.Handle,
+ Registration,
ListenerEventValidatorCallback,
nullptr,
&Listener.Handle));
- TEST_QUIC_SUCCEEDED(MsQuic->ListenerStart(Listener.Handle, nullptr));
+ TEST_QUIC_SUCCEEDED(MsQuic->ListenerStart(Listener.Handle, Alpn, Alpn.Length(), nullptr));
QuicAddr ServerLocalAddr;
uint32_t ServerLocalAddrSize = sizeof(ServerLocalAddr.SockAddr);
@@ -801,8 +741,8 @@ void QuicTestValidateStreamEvents()
&ServerLocalAddrSize,
&ServerLocalAddr.SockAddr));
- QuicTestValidateStreamEvents1(Listener.Handle, ServerLocalAddr);
- QuicTestValidateStreamEvents2(Listener.Handle, ServerLocalAddr);
+ QuicTestValidateStreamEvents1(Registration, Listener.Handle, ServerLocalAddr);
+ QuicTestValidateStreamEvents2(Registration, Listener.Handle, ServerLocalAddr);
} // Listener Scope
}
diff --git a/src/test/lib/HandshakeTest.cpp b/src/test/lib/HandshakeTest.cpp
index 3215f29e53..ea2b79fd3d 100644
--- a/src/test/lib/HandshakeTest.cpp
+++ b/src/test/lib/HandshakeTest.cpp
@@ -33,54 +33,55 @@ void QuicTestUninitialize()
void
QuicTestPrimeResumption(
- MsQuicSession& Session,
- QUIC_ADDRESS_FAMILY Family,
- bool& Success
+ _In_ MsQuicRegistration& Registration,
+ _In_ MsQuicConfiguration& ServerConfiguration,
+ _In_ MsQuicConfiguration& ClientConfiguration,
+ _Out_ QUIC_BUFFER** ResumptionTicket
)
{
TestScopeLogger logScope("PrimeResumption");
- Success = false;
+ *ResumptionTicket = nullptr;
struct PrimeResumption {
- _Function_class_(NEW_CONNECTION_CALLBACK) static void
+ _Function_class_(NEW_CONNECTION_CALLBACK) static bool
ListenerAccept(_In_ TestListener* /* Listener */, _In_ HQUIC ConnectionHandle) {
auto NewConnection = new(std::nothrow) TestConnection(ConnectionHandle);
if (NewConnection == nullptr || !NewConnection->IsValid()) {
TEST_FAILURE("Failed to accept new TestConnection.");
delete NewConnection;
- MsQuic->ConnectionClose(ConnectionHandle);
- } else {
- NewConnection->SetAutoDelete();
+ return false;
}
+ NewConnection->SetAutoDelete();
+ return true;
}
};
- TestListener Listener(Session, PrimeResumption::ListenerAccept);
+ TestListener Listener(Registration, PrimeResumption::ListenerAccept, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- QuicAddr ServerLocalAddr(Family);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ QuicAddr ServerLocalAddr;
+ TEST_QUIC_SUCCEEDED(Listener.Start("MsQuicTest"));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
- Family,
- QUIC_LOCALHOST_FOR_AF(Family),
+ ClientConfiguration,
+ QuicAddrGetFamily(&ServerLocalAddr.SockAddr),
+ QUIC_LOCALHOST_FOR_AF(QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
ServerLocalAddr.GetPort()));
- if (!Client.WaitForConnectionComplete()) {
- return;
- }
- TEST_TRUE(Client.GetIsConnected());
- if (!Client.WaitForZeroRttTicket()) {
- return;
+ if (Client.WaitForConnectionComplete()) {
+ TEST_TRUE(Client.GetIsConnected());
+ *ResumptionTicket = Client.WaitForResumptionTicket();
+ if (*ResumptionTicket == nullptr) {
+ TEST_FAILURE("Failed to prime resumption ticket.");
+ }
}
- Session.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
- }
- Success = true;
+ Registration.Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
+ }
}
struct ServerAcceptContext {
@@ -97,7 +98,7 @@ struct ServerAcceptContext {
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerAcceptConnection(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -109,11 +110,11 @@ ListenerAcceptConnection(
TEST_FAILURE("Failed to accept new TestConnection.");
delete *AcceptContext->NewConnection;
*AcceptContext->NewConnection = nullptr;
- MsQuic->ConnectionClose(ConnectionHandle);
- } else {
- (*AcceptContext->NewConnection)->SetHasRandomLoss(Listener->GetHasRandomLoss());
+ return false;
}
+ (*AcceptContext->NewConnection)->SetHasRandomLoss(Listener->GetHasRandomLoss());
QuicEventSet(AcceptContext->NewConnectionReady);
+ return true;
}
void
@@ -122,12 +123,18 @@ QuicTestConnect(
_In_ bool ServerStatelessRetry,
_In_ bool ClientUsesOldVersion,
_In_ bool MultipleALPNs,
- _In_ bool AsyncSecConfig,
+ _In_ bool AsyncConfiguration,
_In_ bool MultiPacketClientInitial,
_In_ bool SessionResumption,
_In_ uint8_t RandomLossPercentage
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn1("MsQuicTest");
+ MsQuicAlpn Alpn2("MsQuicTest2", "MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetPeerBidiStreamCount(4);
if (RandomLossPercentage != 0) {
@@ -140,17 +147,21 @@ QuicTestConnect(
Settings.SetServerResumptionLevel(QUIC_SERVER_RESUME_ONLY);
}
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
- MsQuicSession Session2(*Registration, MsQuicAlpn("MsQuicTest2", "MsQuicTest"), Settings);
- TEST_TRUE(Session2.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn2, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
- QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn1, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
+ QUIC_BUFFER* ResumptionTicket = nullptr;
if (SessionResumption) {
- bool Success;
- QuicTestPrimeResumption(Session, QuicAddrFamily, Success);
- if (!Success) {
+ QuicTestPrimeResumption(
+ Registration,
+ ServerConfiguration,
+ ClientConfiguration,
+ &ResumptionTicket);
+ if (!ResumptionTicket) {
return;
}
}
@@ -159,16 +170,18 @@ QuicTestConnect(
PrivateTransportHelper TpHelper(MultiPacketClientInitial);
RandomLossHelper LossHelper(RandomLossPercentage);
+ QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
+
{
TestListener Listener(
- MultipleALPNs ? Session2.Handle : Session.Handle,
+ Registration,
ListenerAcceptConnection,
- AsyncSecConfig);
+ (AsyncConfiguration ? (HQUIC)nullptr : (HQUIC)ServerConfiguration));
TEST_TRUE(Listener.IsValid());
Listener.SetHasRandomLoss(RandomLossPercentage != 0);
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(MultipleALPNs ? Alpn2 : Alpn1, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -177,7 +190,7 @@ QuicTestConnect(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
Client.SetHasRandomLoss(RandomLossPercentage != 0);
@@ -192,23 +205,26 @@ QuicTestConnect(
}
if (SessionResumption) {
+ Client.SetResumptionTicket(ResumptionTicket);
+ QUIC_FREE(ResumptionTicket);
Client.SetExpectedResumed(true);
}
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
- if (AsyncSecConfig) {
+ if (AsyncConfiguration) {
if (!QuicEventWaitWithTimeout(ServerAcceptCtx.NewConnectionReady, TestWaitTimeout)) {
TEST_FAILURE("Timed out waiting for server accept.");
} else if (Server == nullptr) {
TEST_FAILURE("Failed to accept server connection.");
} else {
TEST_QUIC_SUCCEEDED(
- Server->SetSecurityConfig(SecurityConfig));
+ Server->SetConfiguration(ServerConfiguration));
}
}
@@ -273,33 +289,39 @@ QuicTestNatPortRebind(
_In_ int Family
)
{
- MsQuicSettings Settings;
- Settings.SetIdleTimeoutMs(10000);
+ MsQuicRegistration Registration(true);
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
-
{
UniquePtr Server;
ServerAcceptContext ServerAcceptCtx((TestConnection**)&Server);
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -360,33 +382,42 @@ QuicTestNatAddrRebind(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(10000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
-
{
UniquePtr Server;
ServerAcceptContext ServerAcceptCtx((TestConnection**)&Server);
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -448,19 +479,28 @@ QuicTestPathValidationTimeout(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(10000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -469,11 +509,12 @@ QuicTestPathValidationTimeout(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -517,19 +558,28 @@ QuicTestChangeMaxStreamID(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(10000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
@@ -539,11 +589,12 @@ QuicTestChangeMaxStreamID(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -593,16 +644,25 @@ QuicTestConnectAndIdle(
_In_ bool EnableKeepAlive
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(3000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
@@ -613,7 +673,7 @@ QuicTestConnectAndIdle(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
if (!EnableKeepAlive) {
@@ -622,6 +682,7 @@ QuicTestConnectAndIdle(
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QUIC_ADDRESS_FAMILY_UNSPEC,
QUIC_LOCALHOST_FOR_AF(
QuicAddrGetFamily(&ServerLocalAddr.SockAddr)),
@@ -679,18 +740,31 @@ QuicTestConnectUnreachable(
_In_ int Family
)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicSettings Settings;
+ Settings.SetIdleTimeoutMs(3000);
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
Client.SetExpectedTransportCloseStatus(QUIC_STATUS_UNREACHABLE);
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
TestUdpPortBase - 1));
@@ -708,16 +782,25 @@ QuicTestVersionNegotiation(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(3000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
@@ -729,7 +812,7 @@ QuicTestVersionNegotiation(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
@@ -738,6 +821,7 @@ QuicTestVersionNegotiation(
Client.SetExpectedTransportCloseStatus(QUIC_STATUS_VER_NEG_ERROR);
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -759,18 +843,25 @@ QuicTestConnectBadAlpn(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(3000);
- MsQuicSession GoodSession(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(GoodSession.IsValid());
- MsQuicSession BadSession(*Registration, MsQuicAlpn("BadALPN"), Settings); // Incorrect ALPN
- TEST_TRUE(BadSession.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, "BanALPN", Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(GoodSession.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
@@ -782,12 +873,13 @@ QuicTestConnectBadAlpn(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(BadSession);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
Client.SetExpectedTransportCloseStatus(QUIC_STATUS_ALPN_NEG_FAILURE);
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -809,16 +901,25 @@ QuicTestConnectBadSni(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(3000);
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
@@ -829,15 +930,16 @@ QuicTestConnectBadSni(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
QuicAddr RemoteAddr(Family == 4 ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6, true);
TEST_QUIC_SUCCEEDED(Client.SetRemoteAddr(RemoteAddr));
- Client.SetExpectedTransportCloseStatus(QUIC_STATUS_INTERNAL_ERROR);
+ Client.SetExpectedTransportCloseStatus(QUIC_STATUS_CONNECTION_REFUSED);
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
Family == 4 ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6,
"badlocalhost",
ServerLocalAddr.GetPort()));
@@ -856,7 +958,7 @@ QuicTestConnectBadSni(
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
ListenerRejectConnection(
_In_ TestListener* /* Listener */,
_In_ HQUIC ConnectionHandle
@@ -866,11 +968,11 @@ ListenerRejectConnection(
if (Connection == nullptr || !Connection->IsValid()) {
TEST_FAILURE("Failed to accept new TestConnection.");
delete Connection;
- MsQuic->ConnectionClose(ConnectionHandle);
- } else {
- Connection->SetAutoDelete();
- Connection->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, QUIC_TEST_SPECIAL_ERROR);
+ return false;
}
+ Connection->SetAutoDelete();
+ Connection->Shutdown(QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, QUIC_TEST_SPECIAL_ERROR);
+ return true;
}
void
@@ -878,37 +980,45 @@ QuicTestConnectServerRejected(
_In_ int Family
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
Settings.SetIdleTimeoutMs(3000);
+ Settings.SetSendBufferingEnabled(true);
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerRejectConnection, true);
+ TestListener Listener(Registration, ListenerRejectConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
- TEST_QUIC_SUCCEEDED(Listener.Start());
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn));
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr;
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
Client.SetExpectedTransportCloseStatus(QUIC_STATUS_USER_CANCELED);
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
- if (!Client.WaitForConnectionComplete()) {
+ if (!Client.WaitForShutdownComplete()) {
return;
}
-
- TEST_FALSE(Client.GetIsConnected());
- TEST_TRUE(Client.GetTransportClosed());
}
}
}
@@ -923,21 +1033,30 @@ QuicTestKeyUpdate(
_In_ bool ServerKeyUpdate
)
{
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
MsQuicSettings Settings;
if (UseKeyUpdateBytes) {
Settings.SetMaxBytesPerKey(KeyUpdateBytes);
}
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"), Settings);
- TEST_TRUE(Session.IsValid());
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, Settings, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, Settings, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -946,11 +1065,12 @@ QuicTestKeyUpdate(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
@@ -1042,16 +1162,25 @@ QuicTestCidUpdate(
_In_ uint16_t Iterations
)
{
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- TEST_TRUE(Session.IsValid());
+ MsQuicRegistration Registration;
+ TEST_TRUE(Registration.IsValid());
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ TEST_TRUE(ServerConfiguration.IsValid());
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ TEST_TRUE(ClientConfiguration.IsValid());
{
- TestListener Listener(Session.Handle, ListenerAcceptConnection);
+ TestListener Listener(Registration, ListenerAcceptConnection, ServerConfiguration);
TEST_TRUE(Listener.IsValid());
QUIC_ADDRESS_FAMILY QuicAddrFamily = (Family == 4) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_INET6;
QuicAddr ServerLocalAddr(QuicAddrFamily);
- TEST_QUIC_SUCCEEDED(Listener.Start(&ServerLocalAddr.SockAddr));
+ TEST_QUIC_SUCCEEDED(Listener.Start(Alpn, &ServerLocalAddr.SockAddr));
TEST_QUIC_SUCCEEDED(Listener.GetLocalAddr(ServerLocalAddr));
{
@@ -1060,11 +1189,12 @@ QuicTestCidUpdate(
Listener.Context = &ServerAcceptCtx;
{
- TestConnection Client(Session);
+ TestConnection Client(Registration);
TEST_TRUE(Client.IsValid());
TEST_QUIC_SUCCEEDED(
Client.Start(
+ ClientConfiguration,
QuicAddrFamily,
QUIC_LOCALHOST_FOR_AF(QuicAddrFamily),
ServerLocalAddr.GetPort()));
diff --git a/src/test/lib/QuicDrill.cpp b/src/test/lib/QuicDrill.cpp
index a40b7cc9a6..c0f032db95 100644
--- a/src/test/lib/QuicDrill.cpp
+++ b/src/test/lib/QuicDrill.cpp
@@ -74,14 +74,14 @@ QuicDrillTestVarIntEncoder(
_IRQL_requires_max_(PASSIVE_LEVEL)
_Function_class_(NEW_CONNECTION_CALLBACK)
static
-void
+bool
QuicDrillConnectionCallbackHandler(
_In_ TestListener* /* Listener */,
- _In_ HQUIC ConnectionHandle
+ _In_ HQUIC /* ConnectionHandle */
)
{
TEST_FAILURE("Quic Drill listener received an unexpected event!");
- MsQuic->ConnectionClose(ConnectionHandle);
+ return false;
}
struct DrillSender {
@@ -222,22 +222,37 @@ QuicDrillInitialPacketFailureTest(
QuicAddr ServerAddress(QuicAddrFamily);
DrillSender Sender;
- MsQuicSession Session(*Registration, MsQuicAlpn("MsQuicTest"));
- if (!Session.IsValid()) {
- TEST_FAILURE("Session not valid!");
- goto Failure;
+ MsQuicRegistration Registration;
+ if (!Registration.IsValid()) {
+ TEST_FAILURE("Registration not valid!");
+ return false;
+ }
+
+ MsQuicAlpn Alpn("MsQuicTest");
+
+ MsQuicConfiguration ServerConfiguration(Registration, Alpn, SelfSignedCredConfig);
+ if (!ServerConfiguration.IsValid()) {
+ TEST_FAILURE("ServerConfiguration not valid!");
+ return false;
+ }
+
+ MsQuicCredentialConfig ClientCredConfig;
+ MsQuicConfiguration ClientConfiguration(Registration, Alpn, ClientCredConfig);
+ if (!ClientConfiguration.IsValid()) {
+ TEST_FAILURE("ClientConfiguration not valid!");
+ return false;
}
{
//
// Start the server.
//
- TestListener Listener(Session.Handle, QuicDrillConnectionCallbackHandler);
+ TestListener Listener(Registration, QuicDrillConnectionCallbackHandler, ServerConfiguration);
- Status = Listener.Start(&ServerAddress.SockAddr);
+ Status = Listener.Start(Alpn, &ServerAddress.SockAddr);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("ListenerStart failed, 0x%x.", Status);
- goto Failure;
+ return false;
}
//
@@ -246,7 +261,7 @@ QuicDrillInitialPacketFailureTest(
Status = Listener.GetLocalAddr(ServerAddress);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("MsQuic->GetParam failed, 0x%x.", Status);
- goto Failure;
+ return false;
}
Status =
@@ -257,7 +272,7 @@ QuicDrillInitialPacketFailureTest(
ServerAddress.SockAddr.Ipv4.sin_port :
ServerAddress.SockAddr.Ipv6.sin6_port);
if (QUIC_FAILED(Status)) {
- goto Failure;
+ return false;
}
DrillBuffer PacketBuffer = InitialPacketDescriptor.write();
@@ -265,7 +280,7 @@ QuicDrillInitialPacketFailureTest(
Status = Listener.GetStatistics(Stats);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("Get Listener statistics before test failed, 0x%x.", Status);
- goto Failure;
+ return false;
}
DroppedPacketsBefore = Stats.Binding.Recv.DroppedPackets;
@@ -274,7 +289,7 @@ QuicDrillInitialPacketFailureTest(
//
Status = Sender.Send(&PacketBuffer);
if (QUIC_FAILED(Status)) {
- goto Failure;
+ return false;
}
//
@@ -285,7 +300,7 @@ QuicDrillInitialPacketFailureTest(
Status = Listener.GetStatistics(Stats);
if (QUIC_FAILED(Status)) {
TEST_FAILURE("Get Listener statistics after test failed, 0x%x.", Status);
- goto Failure;
+ return false;
}
DroppedPacketsAfter = Stats.Binding.Recv.DroppedPackets;
@@ -297,14 +312,11 @@ QuicDrillInitialPacketFailureTest(
TEST_FAILURE(
"DroppedPacketsAfter - DroppedPacketsBefore (%d) not equal to 1",
DroppedPacketsAfter - DroppedPacketsBefore);
- goto Failure;
+ return false;
}
}
- return true;
-Failure:
-
- return false;
+ return true;
}
#define VALID_CID_LENGTH_SHORT 8
diff --git a/src/test/lib/TestConnection.cpp b/src/test/lib/TestConnection.cpp
index 0a47b962b8..070167f66d 100644
--- a/src/test/lib/TestConnection.cpp
+++ b/src/test/lib/TestConnection.cpp
@@ -31,23 +31,17 @@ TestConnection::TestConnection(
QuicEventInitialize(&EventConnectionComplete, TRUE, FALSE);
QuicEventInitialize(&EventPeerClosed, TRUE, FALSE);
QuicEventInitialize(&EventShutdownComplete, TRUE, FALSE);
+ QuicEventInitialize(&EventResumptionTicketReceived, TRUE, FALSE);
if (QuicConnection == nullptr) {
TEST_FAILURE("Invalid handle passed into TestConnection.");
} else {
MsQuic->SetCallbackHandler(QuicConnection, (void*)QuicConnectionHandler, this);
}
-
- //
- // Test code uses self-signed certificates, so we cannot validate the root.
- //
- SetCertValidationFlags(
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID);
}
TestConnection::TestConnection(
- _In_ MsQuicSession& Session,
+ _In_ MsQuicRegistration& Registration,
_In_opt_ NEW_STREAM_CALLBACK_HANDLER NewStreamCallbackHandler
) :
QuicConnection(nullptr),
@@ -63,10 +57,11 @@ TestConnection::TestConnection(
QuicEventInitialize(&EventConnectionComplete, TRUE, FALSE);
QuicEventInitialize(&EventPeerClosed, TRUE, FALSE);
QuicEventInitialize(&EventShutdownComplete, TRUE, FALSE);
+ QuicEventInitialize(&EventResumptionTicketReceived, TRUE, FALSE);
QUIC_STATUS Status =
MsQuic->ConnectionOpen(
- Session.Handle,
+ Registration,
QuicConnectionHandler,
this,
&QuicConnection);
@@ -74,25 +69,23 @@ TestConnection::TestConnection(
TEST_FAILURE("MsQuic->ConnectionOpen failed, 0x%x.", Status);
QuicConnection = nullptr;
}
-
- //
- // Test code uses self-signed certificates, so we cannot validate the root.
- //
- SetCertValidationFlags(
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID);
}
TestConnection::~TestConnection()
{
MsQuic->ConnectionClose(QuicConnection);
+ QuicEventUninitialize(EventResumptionTicketReceived);
QuicEventUninitialize(EventShutdownComplete);
QuicEventUninitialize(EventPeerClosed);
QuicEventUninitialize(EventConnectionComplete);
+ if (ResumptionTicket) {
+ QUIC_FREE(ResumptionTicket);
+ }
}
QUIC_STATUS
TestConnection::Start(
+ _In_ HQUIC Configuration,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_opt_z_ const char* ServerName,
_In_ uint16_t ServerPort // Host byte order
@@ -102,6 +95,7 @@ TestConnection::Start(
if (QUIC_SUCCEEDED(
Status = MsQuic->ConnectionStart(
QuicConnection,
+ Configuration,
Family,
ServerName,
ServerPort))) {
@@ -158,22 +152,16 @@ TestConnection::WaitForConnectionComplete()
return true;
}
-bool
-TestConnection::WaitForZeroRttTicket()
+QUIC_BUFFER*
+TestConnection::WaitForResumptionTicket()
{
- const uint32_t MaxTryCount = 1 + GetWaitTimeout() / 100;
- uint32_t TryCount = 0;
- while (TryCount++ < MaxTryCount) {
- if (HasNewZeroRttTicket()) {
- break;
- }
- QuicSleep(100);
+ if (!QuicEventWaitWithTimeout(EventResumptionTicketReceived, GetWaitTimeout())) {
+ TEST_FAILURE("WaitForResumptionTicket timed out after %u ms.", GetWaitTimeout());
+ return nullptr;
}
- if (TryCount == MaxTryCount) {
- TEST_FAILURE("WaitForZeroRttTicket failed.");
- return false;
- }
- return true;
+ auto Ticket = ResumptionTicket;
+ ResumptionTicket = nullptr;
+ return Ticket;
}
bool
@@ -384,56 +372,59 @@ TestConnection::SetRemoteAddr(
&remoteAddr.SockAddr);
}
-uint64_t
-TestConnection::GetIdleTimeout()
+QUIC_SETTINGS
+TestConnection::GetSettings() const
{
- uint64_t value;
+ QUIC_SETTINGS value;
uint32_t valueSize = sizeof(value);
QUIC_STATUS Status =
MsQuic->GetParam(
QuicConnection,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
+ QUIC_PARAM_CONN_SETTINGS,
&valueSize,
&value);
if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_IDLE_TIMEOUT) failed, 0x%x.", Status);
+ TEST_FAILURE("MsQuic->GetParam(CONN_SETTINGS) failed, 0x%x.", Status);
}
return value;
}
QUIC_STATUS
-TestConnection::SetIdleTimeout(
- uint64_t value
+TestConnection::SetSettings(
+ _In_ const QUIC_SETTINGS& value
)
{
return
MsQuic->SetParam(
QuicConnection,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
+ QUIC_PARAM_CONN_SETTINGS,
sizeof(value),
&value);
}
+uint64_t
+TestConnection::GetIdleTimeout()
+{
+ return GetSettings().IdleTimeoutMs;
+}
+
+QUIC_STATUS
+TestConnection::SetIdleTimeout(
+ uint64_t value
+ )
+{
+ QUIC_SETTINGS Settings{0};
+ Settings.IdleTimeoutMs = value;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+ return SetSettings(Settings);
+}
+
uint32_t
TestConnection::GetDisconnectTimeout()
{
- uint32_t value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_DISCONNECT_TIMEOUT,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_DISCONNECT_TIMEOUT) failed, 0x%x.", Status);
- }
- return value;
+ return GetSettings().DisconnectTimeoutMs;
}
QUIC_STATUS
@@ -441,32 +432,16 @@ TestConnection::SetDisconnectTimeout(
uint32_t value
)
{
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_DISCONNECT_TIMEOUT,
- sizeof(value),
- &value);
+ QUIC_SETTINGS Settings{0};
+ Settings.DisconnectTimeoutMs = value;
+ Settings.IsSet.DisconnectTimeoutMs = TRUE;
+ return SetSettings(Settings);
}
uint16_t
TestConnection::GetPeerBidiStreamCount()
{
- uint16_t value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_PEER_BIDI_STREAM_COUNT) failed, 0x%x.", Status);
- }
- return value;
+ return GetSettings().PeerBidiStreamCount;
}
QUIC_STATUS
@@ -474,32 +449,16 @@ TestConnection::SetPeerBidiStreamCount(
uint16_t value
)
{
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(value),
- &value);
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerBidiStreamCount = value;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ return SetSettings(Settings);
}
uint16_t
TestConnection::GetPeerUnidiStreamCount()
{
- uint16_t value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_PEER_UNIDI_STREAM_COUNT) failed, 0x%x.", Status);
- }
- return value;
+ return GetSettings().PeerUnidiStreamCount;
}
QUIC_STATUS
@@ -507,13 +466,10 @@ TestConnection::SetPeerUnidiStreamCount(
uint16_t value
)
{
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT,
- sizeof(value),
- &value);
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerUnidiStreamCount = value;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ return SetSettings(Settings);
}
uint16_t
@@ -572,56 +528,10 @@ TestConnection::GetStatistics()
return value;
}
-uint32_t
-TestConnection::GetCertValidationFlags()
-{
- BOOLEAN value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_CERT_VALIDATION_FLAGS) failed, 0x%x.", Status);
- }
- return value;
-}
-
-QUIC_STATUS
-TestConnection::SetCertValidationFlags(
- uint32_t value
- )
-{
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(value),
- &value);
-}
-
bool
TestConnection::GetUseSendBuffer()
{
- BOOLEAN value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_SEND_BUFFERING) failed, 0x%x.", Status);
- }
- return value != FALSE;
+ return GetSettings().SendBufferingEnabled;
}
QUIC_STATUS
@@ -629,33 +539,16 @@ TestConnection::SetUseSendBuffer(
bool value
)
{
- BOOLEAN bValue = value ? TRUE : FALSE;
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(bValue),
- &bValue);
+ QUIC_SETTINGS Settings{0};
+ Settings.SendBufferingEnabled = value ? TRUE : FALSE;
+ Settings.IsSet.SendBufferingEnabled = TRUE;
+ return SetSettings(Settings);
}
uint32_t
TestConnection::GetKeepAlive()
{
- uint32_t value;
- uint32_t valueSize = sizeof(value);
- QUIC_STATUS Status =
- MsQuic->GetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_KEEP_ALIVE,
- &valueSize,
- &value);
- if (QUIC_FAILED(Status)) {
- value = 0;
- TEST_FAILURE("MsQuic->GetParam(CONN_KEEP_ALIVE) failed, 0x%x.", Status);
- }
- return value;
+ return GetSettings().KeepAliveIntervalMs;
}
QUIC_STATUS
@@ -663,13 +556,10 @@ TestConnection::SetKeepAlive(
uint32_t value
)
{
- return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_KEEP_ALIVE,
- sizeof(value),
- &value);
+ QUIC_SETTINGS Settings{0};
+ Settings.KeepAliveIntervalMs = value;
+ Settings.IsSet.KeepAliveIntervalMs = TRUE;
+ return SetSettings(Settings);
}
bool
@@ -793,46 +683,28 @@ TestConnection::SetPriorityScheme(
}
QUIC_STATUS
-TestConnection::SetSecurityConfig(
- QUIC_SEC_CONFIG* value
+TestConnection::SetConfiguration(
+ HQUIC value
)
{
return
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEC_CONFIG,
- sizeof(value),
- &value);
-}
-
-bool
-TestConnection::HasNewZeroRttTicket()
-{
- uint32_t ResumptionStateLength = 0;
- return
- QUIC_STATUS_BUFFER_TOO_SMALL ==
- MsQuic->GetParam(
+ MsQuic->ConnectionSetConfiguration(
QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_RESUMPTION_STATE,
- &ResumptionStateLength,
- nullptr);
+ value);
}
QUIC_STATUS
-TestConnection::GetResumptionTicket(
- uint8_t* Buffer,
- uint32_t* BufferLength
- )
+TestConnection::SetResumptionTicket(
+ const QUIC_BUFFER* NewResumptionTicket
+ ) const
{
return
- MsQuic->GetParam(
+ MsQuic->SetParam(
QuicConnection,
QUIC_PARAM_LEVEL_CONNECTION,
QUIC_PARAM_CONN_RESUMPTION_STATE,
- BufferLength,
- Buffer);
+ NewResumptionTicket->Length,
+ NewResumptionTicket->Buffer);
}
QUIC_STATUS
@@ -940,6 +812,22 @@ TestConnection::HandleConnectionEvent(
}
break;
+ case QUIC_CONNECTION_EVENT_RESUMPTION_TICKET_RECEIVED:
+ ResumptionTicket =
+ (QUIC_BUFFER*)
+ QUIC_ALLOC_NONPAGED(
+ sizeof(QUIC_BUFFER) +
+ Event->RESUMPTION_TICKET_RECEIVED.ResumptionTicketLength);
+ if (ResumptionTicket) {
+ ResumptionTicket->Buffer = (uint8_t*)(ResumptionTicket + 1);
+ ResumptionTicket->Length = Event->RESUMPTION_TICKET_RECEIVED.ResumptionTicketLength;
+ QuicCopyMemory(
+ ResumptionTicket->Buffer,
+ Event->RESUMPTION_TICKET_RECEIVED.ResumptionTicket,
+ Event->RESUMPTION_TICKET_RECEIVED.ResumptionTicketLength);
+ QuicEventSet(EventResumptionTicketReceived);
+ }
+
default:
break;
}
diff --git a/src/test/lib/TestConnection.h b/src/test/lib/TestConnection.h
index 4d4b15569d..a504a32677 100644
--- a/src/test/lib/TestConnection.h
+++ b/src/test/lib/TestConnection.h
@@ -72,10 +72,13 @@ class TestConnection
QUIC_EVENT EventConnectionComplete;
QUIC_EVENT EventPeerClosed;
QUIC_EVENT EventShutdownComplete;
+ QUIC_EVENT EventResumptionTicketReceived;
NEW_STREAM_CALLBACK_HANDLER NewStreamCallback;
CONN_SHUTDOWN_COMPLETE_CALLBACK_HANDLER ShutdownCompleteCallback;
+ QUIC_BUFFER* ResumptionTicket {nullptr};
+
uint32_t DatagramsSent;
uint32_t DatagramsCanceled;
uint32_t DatagramsSuspectLost;
@@ -110,7 +113,7 @@ class TestConnection
);
TestConnection(
- _In_ MsQuicSession& Session,
+ _In_ MsQuicRegistration& Registration,
_In_opt_ NEW_STREAM_CALLBACK_HANDLER NewStreamCallbackHandler = nullptr
);
@@ -122,6 +125,7 @@ class TestConnection
QUIC_STATUS
Start(
+ _In_ HQUIC Configuration,
_In_ QUIC_ADDRESS_FAMILY Family,
_In_opt_z_ const char* ServerName,
_In_ uint16_t ServerPort // Host byte order
@@ -150,7 +154,7 @@ class TestConnection
bool WaitForConnectionComplete();
- bool WaitForZeroRttTicket();
+ QUIC_BUFFER* WaitForResumptionTicket();
bool WaitForShutdownComplete();
@@ -202,6 +206,9 @@ class TestConnection
// Parameters
//
+ QUIC_SETTINGS GetSettings() const;
+ QUIC_STATUS SetSettings(_In_ const QUIC_SETTINGS& value);
+
QUIC_STATUS ForceKeyUpdate();
QUIC_STATUS ForceCidUpdate();
@@ -235,9 +242,6 @@ class TestConnection
QUIC_STATISTICS GetStatistics();
- uint32_t GetCertValidationFlags();
- QUIC_STATUS SetCertValidationFlags(uint32_t value);
-
bool GetUseSendBuffer();
QUIC_STATUS SetUseSendBuffer(bool value);
@@ -255,8 +259,7 @@ class TestConnection
QUIC_STREAM_SCHEDULING_SCHEME GetPriorityScheme();
QUIC_STATUS SetPriorityScheme(QUIC_STREAM_SCHEDULING_SCHEME value);
- QUIC_STATUS SetSecurityConfig(QUIC_SEC_CONFIG* value);
+ QUIC_STATUS SetConfiguration(HQUIC value);
- bool HasNewZeroRttTicket();
- QUIC_STATUS GetResumptionTicket(uint8_t* Buffer, uint32_t* BufferLength);
+ QUIC_STATUS SetResumptionTicket(const QUIC_BUFFER* ResumptionTicket) const;
};
diff --git a/src/test/lib/TestHelpers.h b/src/test/lib/TestHelpers.h
index a9bdaea4a9..a7c90657d3 100644
--- a/src/test/lib/TestHelpers.h
+++ b/src/test/lib/TestHelpers.h
@@ -53,11 +53,19 @@ InterlockedSubtract64(
return InterlockedExchangeAdd64(Addend, -Value) - Value;
}
+//
+// Helper function to get a resumption ticket.
+//
+// TODO - Schannel currently requires the same configurations to be used for
+// resumption to work. Once this is fixed, we shouldn't need to pass in any
+// input parameters to make this work.
+//
void
QuicTestPrimeResumption(
- MsQuicSession& Session,
- QUIC_ADDRESS_FAMILY Family,
- bool& Success
+ _In_ MsQuicRegistration& Registration,
+ _In_ MsQuicConfiguration& ServerConfiguration,
+ _In_ MsQuicConfiguration& ClientConfiguration,
+ _Out_ QUIC_BUFFER** ResumptionTicket
);
struct StatelessRetryHelper
diff --git a/src/test/lib/TestListener.cpp b/src/test/lib/TestListener.cpp
index 4737ebde6c..1c5b4fa198 100644
--- a/src/test/lib/TestListener.cpp
+++ b/src/test/lib/TestListener.cpp
@@ -18,19 +18,19 @@
volatile int64_t NextConnID = 0x10000;
TestListener::TestListener(
- _In_ HQUIC SessionHandle,
+ _In_ HQUIC Registration,
_In_ NEW_CONNECTION_CALLBACK_HANDLER NewConnectionCallbackHandler,
- _In_ bool AsyncSecConfig,
- _In_ bool UseSendBuffer
+ _In_opt_ HQUIC Configuration
) :
QuicListener(nullptr),
- FilterConnections(false), SetSecConfig(!AsyncSecConfig),
- UseSendBuffer(UseSendBuffer), NewConnectionCallback(NewConnectionCallbackHandler),
+ QuicConfiguration(Configuration),
+ FilterConnections(false),
+ NewConnectionCallback(NewConnectionCallbackHandler),
Context(nullptr)
{
QUIC_STATUS Status =
MsQuic->ListenerOpen(
- SessionHandle,
+ Registration,
QuicListenerHandler,
this,
&QuicListener);
@@ -47,12 +47,17 @@ TestListener::~TestListener()
QUIC_STATUS
TestListener::Start(
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR * LocalAddress
)
{
return
MsQuic->ListenerStart(
QuicListener,
+ AlpnBuffers,
+ AlpnBufferCount,
LocalAddress);
}
@@ -116,8 +121,7 @@ TestListener::HandleListenerEvent(
QUIC_LOCALHOST_FOR_AF(QUIC_ADDRESS_FAMILY_INET6),
Event->NEW_CONNECTION.Info->ServerName,
Event->NEW_CONNECTION.Info->ServerNameLength) != 0) {
- Status = QUIC_STATUS_NOT_SUPPORTED; // We don't fail the test, just reject the connection.
- break;
+ break; // We don't fail the test, just reject the connection.
}
if (Event->NEW_CONNECTION.Connection == nullptr) {
@@ -126,40 +130,26 @@ TestListener::HandleListenerEvent(
break;
}
- if (FilterConnections) {
+ if (FilterConnections ||
+ !NewConnectionCallback(
+ this,
+ Event->NEW_CONNECTION.Connection)) {
Status = QUIC_STATUS_CONNECTION_REFUSED;
break;
}
- if (SetSecConfig) {
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- Status = QUIC_STATUS_SUCCESS;
- } else {
- Status = QUIC_STATUS_PENDING; // The SecConfig will be set later.
- }
-
- BOOLEAN Opt = UseSendBuffer;
- Status =
- MsQuic->SetParam(
- Event->NEW_CONNECTION.Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(Opt),
- &Opt);
- if (QUIC_FAILED(Status)) {
- TEST_FAILURE("MsQuic->SetParam(CONN_SEND_BUFFERING) failed, 0x%x.", Status);
+ if (QuicConfiguration) {
+ Status =
+ MsQuic->ConnectionSetConfiguration(
+ Event->NEW_CONNECTION.Connection,
+ QuicConfiguration);
+ if (QUIC_FAILED(Status)) {
+ TEST_FAILURE("MsQuic->ConnectionSetConfiguration failed, 0x%x.", Status);
+ break;
+ }
}
- if (SetSecConfig) {
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
- Status = QUIC_STATUS_SUCCESS;
- } else {
- Status = QUIC_STATUS_PENDING; // The SecConfig will be set later.
- }
-
- NewConnectionCallback(
- this,
- Event->NEW_CONNECTION.Connection);
+ Status = QUIC_STATUS_SUCCESS;
break;
}
diff --git a/src/test/lib/TestListener.h b/src/test/lib/TestListener.h
index 170e6f68b5..17f5c574b6 100644
--- a/src/test/lib/TestListener.h
+++ b/src/test/lib/TestListener.h
@@ -12,11 +12,12 @@
class TestListener;
//
-// Callback for processing incoming connections.
+// Callback for processing incoming connections. Returns true if the connection
+// is accepted.
//
typedef
_Function_class_(NEW_CONNECTION_CALLBACK)
-void
+bool
(NEW_CONNECTION_CALLBACK)(
_In_ TestListener* Listener,
_In_ HQUIC ConnectionHandle
@@ -30,11 +31,10 @@ typedef NEW_CONNECTION_CALLBACK *NEW_CONNECTION_CALLBACK_HANDLER;
class TestListener
{
HQUIC QuicListener;
+ HQUIC QuicConfiguration;
- bool FilterConnections : 1;
- bool SetSecConfig : 1;
- bool UseSendBuffer : 1;
- bool HasRandomLoss : 1;
+ bool FilterConnections : 1;
+ bool HasRandomLoss : 1;
NEW_CONNECTION_CALLBACK_HANDLER NewConnectionCallback;
@@ -61,10 +61,9 @@ class TestListener
public:
TestListener(
- _In_ HQUIC SessionHandle,
+ _In_ HQUIC Registration,
_In_ NEW_CONNECTION_CALLBACK_HANDLER NewConnectionCallbackHandler,
- _In_ bool AsyncSecConfig = false,
- _In_ bool UseSendBuffer = true
+ _In_opt_ HQUIC Configuration
);
~TestListener();
@@ -73,9 +72,21 @@ class TestListener
QUIC_STATUS
Start(
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
_In_opt_ const QUIC_ADDR * LocalAddress = nullptr
);
+ QUIC_STATUS
+ Start(
+ _In_ const MsQuicAlpn& Alpn,
+ _In_opt_ const QUIC_ADDR * LocalAddress = nullptr
+ )
+ {
+ return Start(Alpn, Alpn.Length(), LocalAddress);
+ }
+
void Stop();
//
diff --git a/src/test/lib/precomp.h b/src/test/lib/precomp.h
index 406b03f07d..54581e0aec 100644
--- a/src/test/lib/precomp.h
+++ b/src/test/lib/precomp.h
@@ -5,6 +5,12 @@
--*/
+//
+// Test code defaults to disabling certificate validation.
+//
+#define QUIC_DEFAULT_CLIENT_CRED_FLAGS \
+ (QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION)
+
#ifndef _KERNEL_MODE
#include
#endif
diff --git a/src/tools/attack/packet_writer.cpp b/src/tools/attack/packet_writer.cpp
index bd3e9d78a0..728352de3b 100644
--- a/src/tools/attack/packet_writer.cpp
+++ b/src/tools/attack/packet_writer.cpp
@@ -19,21 +19,6 @@
#define VERIFY_QUIC_SUCCESS(result, ...) \
if (QUIC_FAILED(result)) { printf(#result " failed.\n"); exit(0); }
-const uint32_t CertValidationIgnoreFlags =
- QUIC_CERTIFICATE_FLAG_IGNORE_UNKNOWN_CA |
- QUIC_CERTIFICATE_FLAG_IGNORE_CERTIFICATE_CN_INVALID;
-
-struct TlsSession
-{
- QUIC_TLS_SESSION* Ptr;
- TlsSession() : Ptr(nullptr) {
- VERIFY_QUIC_SUCCESS(QuicTlsSessionInitialize(&Ptr));
- }
- ~TlsSession() {
- QuicTlsSessionUninitialize(Ptr);
- }
-};
-
struct TlsContext
{
QUIC_TLS* Ptr;
@@ -42,7 +27,7 @@ struct TlsContext
QUIC_EVENT ProcessCompleteEvent;
uint8_t AlpnListBuffer[256];
- TlsContext(TlsSession& Session, _In_z_ const char* Alpn, _In_z_ const char* Sni) :
+ TlsContext(_In_z_ const char* Alpn, _In_z_ const char* Sni) :
Ptr(nullptr), SecConfig(nullptr) {
AlpnListBuffer[0] = (uint8_t)strlen(Alpn);
@@ -53,12 +38,17 @@ struct TlsContext
State.Buffer = (uint8_t*)QUIC_ALLOC_NONPAGED(8000);
State.BufferAllocLength = 8000;
+ QUIC_CREDENTIAL_CONFIG CredConfig = {
+ QUIC_CREDENTIAL_TYPE_NONE,
+ QUIC_CREDENTIAL_FLAG_CLIENT & QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION,
+ NULL,
+ NULL
+ };
VERIFY_QUIC_SUCCESS(
- QuicTlsClientSecConfigCreate(
- CertValidationIgnoreFlags, &SecConfig));
+ QuicTlsSecConfigCreate(
+ &CredConfig, &SecConfig, OnSecConfigCreateComplete));
QUIC_CONNECTION Connection = {0};
- ((QUIC_HANDLE*)&Connection)->Type = QUIC_HANDLE_TYPE_CONNECTION_SERVER;
QUIC_TRANSPORT_PARAMETERS TP = {0};
TP.Flags |= QUIC_TP_FLAG_INITIAL_MAX_DATA;
@@ -77,12 +67,11 @@ struct TlsContext
QUIC_TLS_CONFIG Config = {0};
Config.IsServer = FALSE;
- Config.TlsSession = Session.Ptr;
Config.SecConfig = SecConfig;
Config.AlpnBuffer = AlpnListBuffer;
Config.AlpnBufferLength = AlpnListBuffer[0] + 1;
Config.LocalTPBuffer =
- QuicCryptoTlsEncodeTransportParameters(&Connection, &TP, &Config.LocalTPLength);
+ QuicCryptoTlsEncodeTransportParameters(&Connection, FALSE, &TP, NULL, &Config.LocalTPLength);
if (!Config.LocalTPBuffer) {
printf("Failed to encode transport parameters!\n");
}
@@ -101,7 +90,7 @@ struct TlsContext
~TlsContext() {
QuicTlsUninitialize(Ptr);
if (SecConfig) {
- QuicTlsSecConfigRelease(SecConfig);
+ QuicTlsSecConfigDelete(SecConfig);
}
QuicEventUninitialize(ProcessCompleteEvent);
QUIC_FREE(State.Buffer);
@@ -113,6 +102,19 @@ struct TlsContext
private:
+ _Function_class_(QUIC_SEC_CONFIG_CREATE_COMPLETE)
+ static void
+ QUIC_API
+ OnSecConfigCreateComplete(
+ _In_ const QUIC_CREDENTIAL_CONFIG* /* CredConfig */,
+ _In_opt_ void* Context,
+ _In_ QUIC_STATUS /* Status */,
+ _In_opt_ QUIC_SEC_CONFIG* SecConfig
+ )
+ {
+ *(QUIC_SEC_CONFIG**)Context = SecConfig;
+ }
+
QUIC_TLS_RESULT_FLAGS
ProcessData(
_In_reads_bytes_(*BufferLength)
@@ -229,23 +231,20 @@ PacketWriter::WriteInitialCryptoFrame(
uint8_t* Buffer
)
{
- TlsSession Session;
- {
- TlsContext ClientContext(Session, Alpn, Sni);
- ClientContext.ProcessData();
+ TlsContext ClientContext(Alpn, Sni);
+ ClientContext.ProcessData();
- QUIC_CRYPTO_EX Frame = {
- 0, ClientContext.State.BufferLength, ClientContext.State.Buffer
- };
+ QUIC_CRYPTO_EX Frame = {
+ 0, ClientContext.State.BufferLength, ClientContext.State.Buffer
+ };
- if (!QuicCryptoFrameEncode(
- &Frame,
- Offset,
- BufferLength,
- Buffer)) {
- printf("QuicCryptoFrameEncode failure!\n");
- exit(0);
- }
+ if (!QuicCryptoFrameEncode(
+ &Frame,
+ Offset,
+ BufferLength,
+ Buffer)) {
+ printf("QuicCryptoFrameEncode failure!\n");
+ exit(0);
}
}
diff --git a/src/tools/dbg/configuration.cpp b/src/tools/dbg/configuration.cpp
new file mode 100644
index 0000000000..73ea1c115e
--- /dev/null
+++ b/src/tools/dbg/configuration.cpp
@@ -0,0 +1,33 @@
+/*++
+
+ Copyright (c) Microsoft Corporation.
+ Licensed under the MIT License.
+
+Abstract:
+
+ QUIC Debugger Extension Command 'configuration'. This command handles state
+ specific to a single QUIC Configuration.
+
+--*/
+
+#include "quictypes.h"
+
+EXT_COMMAND(
+ quicconfiguration,
+ "Shows all information about a Configuration",
+ "{;e,r;addr;The address of the Configuration}"
+ )
+{
+ Configuration Configuration(GetUnnamedArgU64(0));
+
+ Dml("\nSESSION (raw)\n"
+ "\n"
+ "\tALPN %s\n"
+ "\tRegistration 0x%I64X\n",
+ Configuration.Addr,
+ Configuration.GetAlpns().Data,
+ Configuration.GetRegistration(),
+ Configuration.GetRegistration());
+
+ Dml("\n");
+}
diff --git a/src/tools/dbg/dbg.vcxproj b/src/tools/dbg/dbg.vcxproj
index f114e30927..0e140beea0 100644
--- a/src/tools/dbg/dbg.vcxproj
+++ b/src/tools/dbg/dbg.vcxproj
@@ -24,6 +24,7 @@
+
@@ -32,7 +33,6 @@
-
diff --git a/src/tools/dbg/dump.cpp b/src/tools/dbg/dump.cpp
index 220aaab4b7..e1c2952e5b 100644
--- a/src/tools/dbg/dump.cpp
+++ b/src/tools/dbg/dump.cpp
@@ -35,32 +35,18 @@ EXT_COMMAND(
Registration.Addr,
Registration.GetAppName().Data);
- auto Sessions = Registration.GetSessions();
+ auto Connections = Registration.GetConnections();
while (!CheckControlC()) {
- ULONG64 SessAddr = Sessions.Next();
- if (SessAddr == 0) {
+ ULONG64 ConnAddr = Connections.Next();
+ if (ConnAddr == 0) {
break;
}
- auto Session = Session::FromLink(SessAddr);
- Dml(" Sess 0x%I64X \"%s\"\n",
- Session.Addr,
- Session.Addr,
- Session.GetAlpns().Data);
-
- auto Connections = Session.GetConnections();
- while (!CheckControlC()) {
- ULONG64 ConnAddr = Connections.Next();
- if (ConnAddr == 0) {
- break;
- }
-
- auto Connection = Connection::FromSessionLink(ConnAddr);
- Dml(" Conn 0x%I64X %s\n",
- Connection.Addr,
- Connection.Addr,
- Connection.TypeStr());
- }
+ auto Connection = Connection::FromRegistrationLink(ConnAddr);
+ Dml(" Conn 0x%I64X %s\n",
+ Connection.Addr,
+ Connection.Addr,
+ Connection.TypeStr());
}
}
diff --git a/src/tools/dbg/listener.cpp b/src/tools/dbg/listener.cpp
index 0a24123f93..88106d4541 100644
--- a/src/tools/dbg/listener.cpp
+++ b/src/tools/dbg/listener.cpp
@@ -19,19 +19,20 @@ EXT_COMMAND(
)
{
Listener Listener(GetUnnamedArgU64(0));
- Session Session(Listener.GetSession());
+ Registration Registration(Listener.GetRegistration());
Dml("\nLISTENER (raw)\n"
"\n"
"\tWildCard %s\n"
- "\tSession 0x%I64X\t\"%s\"\n"
+ "\tAlpns %s\n"
+ "\tSession 0x%I64X\n"
"\tBinding 0x%I64X\n"
"\tLocalAddress %s\n\n",
Listener.Addr,
Listener.WildCard() ? "true" : "false",
- Session.Addr,
- Session.Addr,
- Session.GetAlpns().Data,
+ Listener.GetAlpns().Data,
+ Registration.Addr,
+ Registration.Addr,
Listener.GetBinding(),
Listener.GetBinding(),
Listener.GetLocalAddress().IpString);
diff --git a/src/tools/dbg/quic.def b/src/tools/dbg/quic.def
index 5e7e544bbe..399805b3f8 100644
--- a/src/tools/dbg/quic.def
+++ b/src/tools/dbg/quic.def
@@ -15,6 +15,7 @@ EXPORTS
quicanalyze
quicbinding
+ quicconfiguration
quicconn
quicconnection
quicdump
@@ -25,6 +26,5 @@ EXPORTS
quiclistener
quicpacket
quicregistration
- quicsession
quicstream
quicworker
diff --git a/src/tools/dbg/quicdbg.h b/src/tools/dbg/quicdbg.h
index 9ce317928c..53700b3fda 100644
--- a/src/tools/dbg/quicdbg.h
+++ b/src/tools/dbg/quicdbg.h
@@ -57,6 +57,7 @@ class EXT_CLASS : public ExtExtension {
EXT_COMMAND_METHOD(quicanalyze);
EXT_COMMAND_METHOD(quicbinding);
+ EXT_COMMAND_METHOD(quicconfiguration);
EXT_COMMAND_METHOD(quicconn);
EXT_COMMAND_METHOD(quicconnection);
EXT_COMMAND_METHOD(quicdump);
@@ -67,7 +68,6 @@ class EXT_CLASS : public ExtExtension {
EXT_COMMAND_METHOD(quiclistener);
EXT_COMMAND_METHOD(quicpacket);
EXT_COMMAND_METHOD(quicregistration);
- EXT_COMMAND_METHOD(quicsession);
EXT_COMMAND_METHOD(quicstream);
EXT_COMMAND_METHOD(quicworker);
diff --git a/src/tools/dbg/quictypes.h b/src/tools/dbg/quictypes.h
index c5f1b62499..5bfb74bedd 100644
--- a/src/tools/dbg/quictypes.h
+++ b/src/tools/dbg/quictypes.h
@@ -18,7 +18,7 @@
typedef enum QUIC_HANDLE_TYPE {
QUIC_HANDLE_TYPE_REGISTRATION,
- QUIC_HANDLE_TYPE_SESSION,
+ QUIC_HANDLE_TYPE_CONFIGURATION,
QUIC_HANDLE_TYPE_LISTENER,
QUIC_HANDLE_TYPE_CONNECTION_CLIENT,
QUIC_HANDLE_TYPE_CONNECTION_SERVER,
@@ -70,7 +70,7 @@ typedef union QUIC_STREAM_FLAGS {
} QUIC_STREAM_FLAGS;
typedef union QUIC_CONNECTION_STATE {
- UINT32 Flags;
+ uint32_t Flags;
struct {
BOOLEAN Allocated : 1; // Allocated. Used for Debugging.
BOOLEAN Initialized : 1; // Initialized successfully. Used for Debugging.
@@ -81,14 +81,20 @@ typedef union QUIC_CONNECTION_STATE {
BOOLEAN AppClosed : 1; // Application (not transport) closed connection.
BOOLEAN HandleShutdown : 1; // Shutdown callback delivered for handle.
BOOLEAN HandleClosed : 1; // Handle closed by application layer.
- BOOLEAN Uninitialized : 1; // Uninitialize started/completed. Used for Debugging.
+ BOOLEAN Uninitialized : 1; // Uninitialize started/completed.
BOOLEAN Freed : 1; // Freed. Used for Debugging.
//
// Indicates whether packet number encryption is enabled or not for the
// connection.
//
- BOOLEAN HeaderProtectionEnabled : 1;
+ BOOLEAN HeaderProtectionEnabled : 1; // TODO - Remove since it's not used
+
+ //
+ // Indicates that 1-RTT encryption has been configured/negotiated to be
+ // disabled.
+ //
+ BOOLEAN Disable1RttEncrytion : 1;
//
// Indicates whether the current 'owner' of the connection is internal
@@ -98,6 +104,12 @@ typedef union QUIC_CONNECTION_STATE {
//
BOOLEAN ExternalOwner : 1;
+ //
+ // Indicate the connection is currently in the registration's list of
+ // connections and needs to be removed.
+ //
+ BOOLEAN Registered : 1;
+
//
// This flag indicates the client has gotten response from the server.
// The response could either be a Retry or server Initial packet. Once
@@ -135,6 +147,11 @@ typedef union QUIC_CONNECTION_STATE {
//
BOOLEAN RemoteAddressSet : 1;
+ //
+ // Indicates the peer transport parameters variable has been set.
+ //
+ BOOLEAN PeerTransportParameterValid : 1;
+
//
// Indicates the connection needs to queue onto a new worker thread.
//
@@ -151,24 +168,33 @@ typedef union QUIC_CONNECTION_STATE {
BOOLEAN SendShutdownCompleteNotif : 1;
//
- // Indicates whether send requests should be buffered.
+ // Indicates whether this connection shares bindings with others.
//
- BOOLEAN UseSendBuffer : 1;
+ BOOLEAN ShareBinding : 1;
//
- // Indicates whether pacing logic is enabled for sending.
+ // Indicates the TestTransportParameter variable has been set by the app.
//
- BOOLEAN UsePacing : 1;
+ BOOLEAN TestTransportParameterSet : 1;
//
- // Indicates whether this connection shares bindings with others.
+ // Indicates the connection is using the round robin stream scheduling
+ // scheme.
//
- BOOLEAN ShareBinding : 1;
+ BOOLEAN UseRoundRobinStreamScheduling : 1;
//
- // Indicate the TestTransportParameter variable has been set by the app.
+ // Indicates that this connection has resumption enabled and needs to
+ // keep the TLS state and transport parameters until it is done sending
+ // resumption tickets.
//
- BOOLEAN TestTransportParameterSet : 1;
+ BOOLEAN ResumptionEnabled : 1;
+
+ //
+ // Indicates that an app close from a non worker thread is in progress.
+ // Received by the QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE event.
+ //
+ BOOLEAN AppCloseInProgress: 1;
#ifdef QuicVerifierEnabledByAddr
//
@@ -418,8 +444,8 @@ struct QuicHandle : Struct {
switch (Type()) {
case QUIC_HANDLE_TYPE_REGISTRATION:
return "REGISTRATION";
- case QUIC_HANDLE_TYPE_SESSION:
- return "SESSION";
+ case QUIC_HANDLE_TYPE_CONFIGURATION:
+ return "CONFIGURATION";
case QUIC_HANDLE_TYPE_LISTENER:
return "LISTENER";
case QUIC_HANDLE_TYPE_CONNECTION_CLIENT:
@@ -436,8 +462,8 @@ struct QuicHandle : Struct {
switch (Type()) {
case QUIC_HANDLE_TYPE_REGISTRATION:
return "registration";
- case QUIC_HANDLE_TYPE_SESSION:
- return "session";
+ case QUIC_HANDLE_TYPE_CONFIGURATION:
+ return "congifuration";
case QUIC_HANDLE_TYPE_LISTENER:
return "listener";
case QUIC_HANDLE_TYPE_CONNECTION_CLIENT:
@@ -891,6 +917,7 @@ typedef enum QUIC_API_TYPE {
QUIC_API_TYPE_CONN_CLOSE,
QUIC_API_TYPE_CONN_SHUTDOWN,
QUIC_API_TYPE_CONN_START,
+ QUIC_API_TYPE_CONN_SET_CONFIGURATION,
QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET,
QUIC_API_TYPE_STRM_CLOSE,
@@ -923,6 +950,8 @@ struct ApiCall : Struct {
return "API_CONN_SHUTDOWN";
case QUIC_API_TYPE_CONN_START:
return "API_CONN_START";
+ case QUIC_API_TYPE_CONN_SET_CONFIGURATION:
+ return "API_TYPE_CONN_SET_CONFIGURATION";
case QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET:
return "QUIC_API_TYPE_CONN_SEND_RESUMPTION_TICKET";
case QUIC_API_TYPE_STRM_CLOSE:
@@ -1037,8 +1066,8 @@ struct Connection : Struct {
Connection(ULONG64 Addr) : Struct("msquic!QUIC_CONNECTION", Addr) { }
- static Connection FromSessionLink(ULONG64 LinkAddr) {
- return Connection(LinkEntryToType(LinkAddr, "msquic!QUIC_CONNECTION", "SessionLink"));
+ static Connection FromRegistrationLink(ULONG64 LinkAddr) {
+ return Connection(LinkEntryToType(LinkAddr, "msquic!QUIC_CONNECTION", "RegistrationLink"));
}
static Connection FromWorkerLink(ULONG64 LinkAddr) {
@@ -1148,8 +1177,8 @@ struct Listener : Struct {
return ReadType("WildCard") != 0;
}
- ULONG64 GetSession() {
- return ReadPointer("Session");
+ ULONG64 GetRegistration() {
+ return ReadPointer("Registration");
}
ULONG64 GetBinding() {
@@ -1159,6 +1188,39 @@ struct Listener : Struct {
IpAddress GetLocalAddress() {
return IpAddress(AddrOf("LocalAddress"));
}
+
+ ULONG64 GetRawAlpnList() {
+ return AddrOf("AlpnList");
+ }
+
+ USHORT GetAlpnListLength() {
+ return ReadType("AlpnListLength");
+ }
+
+ String GetAlpns() {
+ ULONG64 AlpnList = GetRawAlpnList();
+ USHORT AlpnListLength = GetAlpnListLength();
+
+ String Str;
+ ULONG StrOffset = 0;
+ while (AlpnListLength != 0) {
+ UINT8 Length;
+ ReadTypeAtAddr(AlpnList, &Length);
+ AlpnList++;
+ AlpnListLength--;
+
+ ULONG cbRead;
+ ReadMemory(AlpnList, Str.Data + StrOffset, Length, &cbRead);
+ AlpnList += Length;
+ AlpnListLength -= Length;
+ StrOffset += Length + 1;
+ Str.Data[StrOffset] = ',';
+ }
+
+ Str.Data[StrOffset - 1] = 0;
+
+ return Str;
+ }
};
struct Worker : Struct {
@@ -1213,22 +1275,18 @@ struct WorkerPool : Struct {
}
};
-struct Session : Struct {
+struct Configuration : Struct {
- Session(ULONG64 Addr) : Struct("msquic!QUIC_SESSION", Addr) { }
+ Configuration(ULONG64 Addr) : Struct("msquic!QUIC_CONFIGURATION", Addr) { }
- static Session FromLink(ULONG64 LinkAddr) {
- return Session(LinkEntryToType(LinkAddr, "msquic!QUIC_SESSION", "Link"));
+ static Configuration FromLink(ULONG64 LinkAddr) {
+ return Configuration(LinkEntryToType(LinkAddr, "msquic!QUIC_CONFIGURATION", "Link"));
}
ULONG64 GetRegistration() {
return ReadPointer("Registration");
}
- LinkedList GetConnections() {
- return LinkedList(AddrOf("Connections"));
- }
-
ULONG64 GetRawAlpnList() {
return AddrOf("AlpnList");
}
@@ -1275,8 +1333,12 @@ struct Registration : Struct {
return WorkerPool(ReadPointer("WorkerPool"));
}
- LinkedList GetSessions() {
- return LinkedList(AddrOf("Sessions"));
+ LinkedList GetConfigurations() {
+ return LinkedList(AddrOf("Configurations"));
+ }
+
+ LinkedList GetConnections() {
+ return LinkedList(AddrOf("Connections"));
}
String GetAppName() {
diff --git a/src/tools/dbg/registration.cpp b/src/tools/dbg/registration.cpp
index fe9d671b14..558181cb54 100644
--- a/src/tools/dbg/registration.cpp
+++ b/src/tools/dbg/registration.cpp
@@ -27,21 +27,21 @@ EXT_COMMAND(
Registration.Addr,
Registration.GetAppName().Data);
- Dml("\nSESSIONS\n"
+ Dml("\nCONFIGURATIONS\n"
"\n");
- auto Sessions = Registration.GetSessions();
+ auto Configurations = Registration.GetConfigurations();
while (!CheckControlC()) {
- ULONG64 LinkAddr = Sessions.Next();
+ ULONG64 LinkAddr = Configurations.Next();
if (LinkAddr == 0) {
break;
}
- auto Session = Session::FromLink(LinkAddr);
- Dml("\t0x%I64X\t\"%s\"\n",
- Session.Addr,
- Session.Addr,
- Session.GetAlpns().Data);
+ auto Configuration = Configuration::FromLink(LinkAddr);
+ Dml("\t0x%I64X\t\"%s\"\n",
+ Configuration.Addr,
+ Configuration.Addr,
+ Configuration.GetAlpns().Data);
}
Dml("\nWORKERS\n"
@@ -56,5 +56,21 @@ EXT_COMMAND(
Workers.GetWorker(i).StateStr());
}
+ Dml("\nCONNECTIONS\n"
+ "\n");
+
+ auto Connections = Registration.GetConnections();
+ while (!CheckControlC()) {
+ ULONG64 LinkAddr = Connections.Next();
+ if (LinkAddr == 0) {
+ break;
+ }
+
+ auto Connection = Connection::FromRegistrationLink(LinkAddr);
+ Dml("\t0x%I64X\n",
+ Connection.Addr,
+ Connection.Addr);
+ }
+
Dml("\n");
}
diff --git a/src/tools/dbg/session.cpp b/src/tools/dbg/session.cpp
deleted file mode 100644
index affd394375..0000000000
--- a/src/tools/dbg/session.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*++
-
- Copyright (c) Microsoft Corporation.
- Licensed under the MIT License.
-
-Abstract:
-
- QUIC Debugger Extension Command 'session'. This command handles state
- specific to a single QUIC Session.
-
---*/
-
-#include "quictypes.h"
-
-EXT_COMMAND(
- quicsession,
- "Shows all information about a Session",
- "{;e,r;addr;The address of the Session}"
- )
-{
- Session Session(GetUnnamedArgU64(0));
-
- Dml("\nSESSION (raw)\n"
- "\n"
- "\tALPN %s\n"
- "\tRegistration 0x%I64X\n",
- Session.Addr,
- Session.GetAlpns().Data,
- Session.GetRegistration(),
- Session.GetRegistration());
-
- Dml("\nCONNECTIONS\n"
- "\n");
-
- bool HasAtLeastOne = false;
- auto Connections = Session.GetConnections();
- while (true) {
- ULONG64 LinkAddr = Connections.Next();
- if (LinkAddr == 0) {
- break;
- }
-
- auto Connection = Connection::FromSessionLink(LinkAddr);
- Dml("\t0x%I64X\n",
- Connection.Addr,
- Connection.Addr);
- HasAtLeastOne = true;
- }
-
- if (!HasAtLeastOne) {
- Dml("\tNone\n");
- }
-
- Dml("\n");
-}
diff --git a/src/tools/etw/library.c b/src/tools/etw/library.c
index dae7297c0f..0bedde3b56 100644
--- a/src/tools/etw/library.c
+++ b/src/tools/etw/library.c
@@ -52,13 +52,13 @@ void ExecuteSummaryCommand(void)
" Objects\n" \
" Registration --\n" \
" Worker %u\n" \
- " Session --\n" \
+ " Configuration --\n" \
" Listener %u\n" \
" Connection %u\n" \
" Stream %u\n" \
" Binding %u\n" \
;
-
+
printf(
FormatStr2,
Workers.NextId - 1,
diff --git a/src/tools/etw/trace.c b/src/tools/etw/trace.c
index ba4b948958..6d69b409f1 100644
--- a/src/tools/etw/trace.c
+++ b/src/tools/etw/trace.c
@@ -70,11 +70,10 @@ const char* ApiTypeStr[] = {
"GET_PARAM",
"REGISTRATION_OPEN",
"REGISTRATION_CLOSE",
- "SEC_CONFIG_CREATE",
- "SEC_CONFIG_DELETE",
- "SESSION_OPEN",
- "SESSION_CLOSE",
- "SESSION_SHUTDOWN",
+ "REGISTRATION_SHUTDOWN",
+ "CONFIGURATION_OPEN",
+ "CONFIGURATION_CLOSE",
+ "CONFIGURATION_LOAD_CREDENTIAL",
"LISTENER_OPEN",
"LISTENER_CLOSE",
"LISTENER_START",
@@ -83,6 +82,7 @@ const char* ApiTypeStr[] = {
"CONNECTION_CLOSE",
"CONNECTION_SHUTDOWN",
"CONNECTION_START",
+ "CONNECTION_SET_CONFIGURATION",
"CONNECTION_SEND_RESUMPTION_TICKET",
"STREAM_OPEN",
"STREAM_CLOSE",
@@ -90,7 +90,8 @@ const char* ApiTypeStr[] = {
"STREAM_SHUTDOWN",
"STREAM_SEND",
"STREAM_RECEIVE_COMPLETE",
- "STREAM_RECEIVE_SET_ENABLED"
+ "STREAM_RECEIVE_SET_ENABLED",
+ "DATAGRAM_SEND"
};
QUIC_STATIC_ASSERT(ARRAYSIZE(ApiTypeStr) == QUIC_API_COUNT, "Keep the count in sync with array");
diff --git a/src/tools/etwlib/MsQuicEventCollection.h b/src/tools/etwlib/MsQuicEventCollection.h
index 82fa256205..d62bdd1d91 100644
--- a/src/tools/etwlib/MsQuicEventCollection.h
+++ b/src/tools/etwlib/MsQuicEventCollection.h
@@ -139,8 +139,9 @@ enum QuicApiType {
QuicApiGetParam,
QuicApiRegistrationOpen,
QuicApiRegistrationClose,
- QuicApiSecConfigCreate,
- QuicApiSecConfigDelete,
+ QuicApiConfigurationOpen,
+ QuicApiConfigurationClose,
+ QuicApiConfigurationLoadCredential,
QuicApiSessionOpen,
QuicApiSessionClose,
QuicApiSessionShutdown,
@@ -152,13 +153,15 @@ enum QuicApiType {
QuicApiConnectionClose,
QuicApiConnectionShutdown,
QuicApiConnectionStart,
+ QuicApiConnectionSendResumptionTicket,
QuicApiStreamOpen,
QuicApiStreamClose,
QuicApiStreamStart,
QuicApiStreamShutdown,
QuicApiStreamSend,
QuicApiStreamReceiveComplete,
- QuicApiStreamReceiveSetEnabled
+ QuicApiStreamReceiveSetEnabled,
+ QuicApiDatagramSend
};
//
diff --git a/src/tools/interop/interop.cpp b/src/tools/interop/interop.cpp
index a8682388dd..2ef0bc6752 100644
--- a/src/tools/interop/interop.cpp
+++ b/src/tools/interop/interop.cpp
@@ -29,8 +29,6 @@ uint32_t InitialVersion = 0;
bool RunSerially = false;
bool TestFailed = false; // True if any test failed
-const BOOLEAN UseSendBuffering = FALSE;
-const uint32_t CertificateValidationFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
const uint32_t RandomReservedVersion = 168430090ul; // Random reserved version to force VN.
const uint8_t RandomTransportParameterPayload[2345] = {0};
QUIC_PRIVATE_TRANSPORT_PARAMETER RandomTransportParameter = {
@@ -337,6 +335,7 @@ class InteropStream {
};
class InteropConnection {
+ HQUIC Configuration;
HQUIC Connection;
std::vector Streams;
QUIC_EVENT ConnectionComplete;
@@ -349,7 +348,8 @@ class InteropConnection {
bool Connected : 1;
bool Resumed : 1;
bool ReceivedQuackAck : 1;
- InteropConnection(HQUIC Session, bool VerNeg = false, bool LargeTP = false) :
+ InteropConnection(HQUIC Configuration, bool VerNeg = false, bool LargeTP = false) :
+ Configuration(Configuration),
Connection(nullptr),
NegotiatedAlpn(nullptr),
VersionUnsupported(false),
@@ -364,32 +364,10 @@ class InteropConnection {
VERIFY_QUIC_SUCCESS(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
InteropConnection::ConnectionCallback,
this,
&Connection));
- VERIFY_QUIC_SUCCESS(
- MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertificateValidationFlags),
- &CertificateValidationFlags));
- VERIFY_QUIC_SUCCESS(
- MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(UseSendBuffering),
- &UseSendBuffering));
- uint64_t IdleTimeoutMs = WaitTimeoutMs;
- VERIFY_QUIC_SUCCESS(
- MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
- sizeof(IdleTimeoutMs),
- &IdleTimeoutMs));
if (VerNeg) {
VERIFY_QUIC_SUCCESS(
MsQuic->SetParam(
@@ -432,29 +410,36 @@ class InteropConnection {
delete [] NegotiatedAlpn;
}
bool SetKeepAlive(uint32_t KeepAliveMs) {
+ QUIC_SETTINGS Settings{0};
+ Settings.KeepAliveIntervalMs = KeepAliveMs;
+ Settings.IsSet.KeepAliveIntervalMs = TRUE;
return
QUIC_SUCCEEDED(
MsQuic->SetParam(
Connection,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_KEEP_ALIVE,
- sizeof(KeepAliveMs),
- &KeepAliveMs));
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings));
}
bool SetDisconnectTimeout(uint32_t TimeoutMs) {
+ QUIC_SETTINGS Settings{0};
+ Settings.DisconnectTimeoutMs = TimeoutMs;
+ Settings.IsSet.DisconnectTimeoutMs = TRUE;
return
QUIC_SUCCEEDED(
MsQuic->SetParam(
Connection,
QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_DISCONNECT_TIMEOUT,
- sizeof(TimeoutMs),
- &TimeoutMs));
+ QUIC_PARAM_CONN_SETTINGS,
+ sizeof(Settings),
+ &Settings));
}
bool ConnectToServer(const char* ServerName, uint16_t ServerPort) {
if (QUIC_SUCCEEDED(
MsQuic->ConnectionStart(
Connection,
+ Configuration,
QUIC_ADDRESS_FAMILY_UNSPEC,
ServerName,
ServerPort))) {
@@ -706,6 +691,10 @@ RunInteropTest(
Settings.IsSet.PeerUnidiStreamCount = TRUE;
Settings.InitialRttMs = 50; // Be more aggressive with RTT for interop testing
Settings.IsSet.InitialRttMs = TRUE;
+ Settings.SendBufferingEnabled = FALSE;
+ Settings.IsSet.SendBufferingEnabled = TRUE;
+ Settings.IdleTimeoutMs = WaitTimeoutMs;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
if (Feature == KeyUpdate) {
Settings.MaxBytesPerKey = 10; // Force a key update after every 10 bytes sent
Settings.IsSet.MaxBytesPerKey = TRUE;
@@ -724,20 +713,29 @@ RunInteropTest(
AlpnCount = ARRAYSIZE(HandshakeAlpns);
}
- HQUIC Session;
+ HQUIC Configuration;
VERIFY_QUIC_SUCCESS(
- MsQuic->SessionOpen(
+ MsQuic->ConfigurationOpen(
Registration,
- sizeof(Settings),
- &Settings,
Alpns,
AlpnCount,
+ &Settings,
+ sizeof(Settings),
nullptr,
- &Session));
+ &Configuration));
+
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION;
+
+ VERIFY_QUIC_SUCCESS(
+ MsQuic->ConfigurationLoadCredential(
+ Configuration,
+ &CredConfig));
switch (Feature) {
case VersionNegotiation: {
- InteropConnection Connection(Session, true);
+ InteropConnection Connection(Configuration, true);
if (Connection.ConnectToServer(Endpoint.ServerName, Port)) {
Connection.GetQuicVersion(QuicVersionUsed);
Connection.GetNegotiatedAlpn(NegotiatedAlpn);
@@ -760,13 +758,13 @@ RunInteropTest(
case StatelessRetry:
case PostQuantum: {
if (Feature == Resumption) {
- InteropConnection Connection(Session);
+ InteropConnection Connection(Configuration);
if (!Connection.ConnectToServer(Endpoint.ServerName, Port) ||
!Connection.WaitForTicket()) {
break;
}
}
- InteropConnection Connection(Session, false, Feature == PostQuantum);
+ InteropConnection Connection(Configuration, false, Feature == PostQuantum);
if (Connection.ConnectToServer(Endpoint.ServerName, Port)) {
Connection.GetQuicVersion(QuicVersionUsed);
Connection.GetNegotiatedAlpn(NegotiatedAlpn);
@@ -792,13 +790,13 @@ RunInteropTest(
case StreamData:
case ZeroRtt: {
if (Feature == ZeroRtt) {
- InteropConnection Connection(Session);
+ InteropConnection Connection(Configuration);
if (!Connection.ConnectToServer(Endpoint.ServerName, Port) ||
!Connection.WaitForTicket()) {
break;
}
}
- InteropConnection Connection(Session, false);
+ InteropConnection Connection(Configuration, false);
if (Connection.SendHttpRequests(false) &&
Connection.ConnectToServer(Endpoint.ServerName, Port) &&
Connection.WaitForHttpResponses()) {
@@ -814,7 +812,7 @@ RunInteropTest(
}
case KeyUpdate: {
- InteropConnection Connection(Session);
+ InteropConnection Connection(Configuration);
if (Connection.SetKeepAlive(50) &&
Connection.ConnectToServer(Endpoint.ServerName, Port)) {
Connection.GetQuicVersion(QuicVersionUsed);
@@ -832,7 +830,7 @@ RunInteropTest(
}
case CidUpdate: {
- InteropConnection Connection(Session);
+ InteropConnection Connection(Configuration);
if (Connection.ConnectToServer(Endpoint.ServerName, Port)) {
Connection.GetQuicVersion(QuicVersionUsed);
Connection.GetNegotiatedAlpn(NegotiatedAlpn);
@@ -851,7 +849,7 @@ RunInteropTest(
}
case NatRebinding: {
- InteropConnection Connection(Session);
+ InteropConnection Connection(Configuration);
if (Connection.ConnectToServer(Endpoint.ServerName, Port)) {
Connection.GetQuicVersion(QuicVersionUsed);
Connection.GetNegotiatedAlpn(NegotiatedAlpn);
@@ -870,7 +868,7 @@ RunInteropTest(
}
case Datagram: {
- InteropConnection Connection(Session, false);
+ InteropConnection Connection(Configuration, false);
if (Connection.SendQuack() &&
Connection.ConnectToServer(Endpoint.ServerName, Port) &&
Connection.WaitForQuackAck()) {
@@ -881,7 +879,7 @@ RunInteropTest(
}
}
- MsQuic->SessionClose(Session);
+ MsQuic->ConfigurationClose(Configuration); // TODO - Wait on connection
if (CustomUrlPath && !Success) {
//
diff --git a/src/tools/interopserver/InteropServer.cpp b/src/tools/interopserver/InteropServer.cpp
index b113689c55..2ce39f6583 100644
--- a/src/tools/interopserver/InteropServer.cpp
+++ b/src/tools/interopserver/InteropServer.cpp
@@ -12,7 +12,7 @@
#include "InteropServer.h"
const QUIC_API_TABLE* MsQuic;
-QUIC_SEC_CONFIG* SecurityConfig;
+HQUIC Configuration;
const char* RootFolderPath;
const char* UploadFolderPath;
@@ -32,7 +32,7 @@ PrintUsage()
printf("Usage:\n");
printf(" quicinteropserver -listen: -root:"
- " [-thumbprint:] [-name:]"
+ " [-thumbprint:]"
" [-file: AND -key:]"
" [-port:<####> (def:%u)] [-retry:<0/1> (def:%u)]"
" [-upload:]\n\n",
@@ -90,41 +90,31 @@ main(
return -1;
}
- const char* CertThumbprint = nullptr;
- const char* CertName = nullptr;
- const char* CertFile = nullptr;
- const char* CertKeyFile = nullptr;
- if (TryGetValue(argc, argv, "thumbprint", &CertThumbprint)) {
- SecurityConfig = GetSecConfigForThumbprint(MsQuic, Registration, CertThumbprint);
- if (SecurityConfig == nullptr) {
- printf("Failed to find certificate from thumbprint:'%s'.\n", CertThumbprint);
- return -1;
- }
- } else if (TryGetValue(argc, argv, "name", &CertName)) {
- SecurityConfig = GetSecConfigForSNI(MsQuic, Registration, CertName);
- if (SecurityConfig == nullptr) {
- printf("Failed to find certificate from name:'%s'.\n", CertName);
- return -1;
- }
- } else if (TryGetValue(argc, argv, "file", &CertFile) &&
- TryGetValue(argc, argv, "key", &CertKeyFile)) {
- SecurityConfig = GetSecConfigForFile(MsQuic, Registration, CertKeyFile, CertFile);
- if (SecurityConfig == nullptr) {
- printf("Failed to find certificate from file:'%s'.\n", CertFile);
- return -1;
- }
- } else {
- printf("Missing arg loading server certificate!\n");
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerBidiStreamCount = MAX_HTTP_REQUESTS_PER_CONNECTION;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ Settings.PeerUnidiStreamCount = 1; // We allow 1 unidirectional stream, just for interop tests.
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ Settings.InitialRttMs = 50; // Be more aggressive with RTT for interop testing
+ Settings.IsSet.InitialRttMs = TRUE;
+
+ Configuration = GetServerConfigurationFromArgs(argc, argv, MsQuic, Registration, SupportedALPNs, ARRAYSIZE(SupportedALPNs), &Settings, sizeof(Settings));
+ if (!Configuration) {
+ printf("Failed to load configuration from args!\n");
return -1;
}
{
- HttpSession Session(Registration, SupportedALPNs, ARRAYSIZE(SupportedALPNs), &ListenAddr);
+ HttpServer Server(Registration, SupportedALPNs, ARRAYSIZE(SupportedALPNs), &ListenAddr);
printf("Press Enter to exit.\n\n");
getchar();
}
- MsQuic->SecConfigDelete(SecurityConfig);
+ FreeServerConfiguration(MsQuic, Configuration);
+ MsQuic->RegistrationShutdown(
+ Registration,
+ QUIC_CONNECTION_SHUTDOWN_FLAG_NONE,
+ 0);
MsQuic->RegistrationClose(Registration);
MsQuicClose(MsQuic);
diff --git a/src/tools/interopserver/InteropServer.h b/src/tools/interopserver/InteropServer.h
index 25ae3376f1..e5b1984328 100644
--- a/src/tools/interopserver/InteropServer.h
+++ b/src/tools/interopserver/InteropServer.h
@@ -10,7 +10,7 @@
#include
extern const QUIC_API_TABLE* MsQuic;
-extern QUIC_SEC_CONFIG* SecurityConfig;
+extern HQUIC Configuration;
const QUIC_BUFFER QuackBuffer = { sizeof("quack") - 1, (uint8_t*)"quack" };
const QUIC_BUFFER QuackAckBuffer = { sizeof("quack-ack") - 1, (uint8_t*)"quack-ack" };
@@ -225,16 +225,24 @@ struct DatagramConnection {
};
struct HttpServer {
- HttpServer(HQUIC Session, const QUIC_ADDR* LocalAddress) {
+ HttpServer(
+ _In_ HQUIC Registration,
+ _In_reads_(AlpnBufferCount) _Pre_defensive_
+ const QUIC_BUFFER* const AlpnBuffers,
+ _In_range_(>, 0) uint32_t AlpnBufferCount,
+ const QUIC_ADDR* LocalAddress) {
+
EXIT_ON_FAILURE(
MsQuic->ListenerOpen(
- Session,
+ Registration,
QuicCallbackHandler,
this,
&QuicListener));
EXIT_ON_FAILURE(
MsQuic->ListenerStart(
QuicListener,
+ AlpnBuffers,
+ AlpnBufferCount,
LocalAddress));
}
~HttpServer() {
@@ -252,56 +260,14 @@ struct HttpServer {
_Inout_ QUIC_LISTENER_EVENT* Event
) {
if (Event->Type == QUIC_LISTENER_EVENT_NEW_CONNECTION) {
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
if (Event->NEW_CONNECTION.Info->NegotiatedAlpnLength >= 6 &&
!memcmp(Event->NEW_CONNECTION.Info->NegotiatedAlpn, "siduck", 6)) {
new DatagramConnection(Event->NEW_CONNECTION.Connection);
} else {
new HttpConnection(Event->NEW_CONNECTION.Connection);
}
- return QUIC_STATUS_SUCCESS;
+ return MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, Configuration);
}
return QUIC_STATUS_NOT_SUPPORTED;
}
};
-
-struct HttpSession {
- HttpSession(
- HQUIC Registration,
- _In_reads_(AlpnBufferCount) _Pre_defensive_
- const QUIC_BUFFER* const AlpnBuffers,
- _In_range_(>, 0) uint32_t AlpnBufferCount,
- const QUIC_ADDR* LocalAddress) {
-
- QUIC_SETTINGS Settings{0};
- Settings.PeerBidiStreamCount = MAX_HTTP_REQUESTS_PER_CONNECTION;
- Settings.IsSet.PeerBidiStreamCount = TRUE;
- Settings.PeerUnidiStreamCount = 1; // We allow 1 unidirectional stream, just for interop tests.
- Settings.IsSet.PeerUnidiStreamCount = TRUE;
- Settings.InitialRttMs = 50; // Be more aggressive with RTT for interop testing
- Settings.IsSet.InitialRttMs = TRUE;
-
- EXIT_ON_FAILURE(
- MsQuic->SessionOpen(
- Registration,
- sizeof(Settings),
- &Settings,
- AlpnBuffers,
- AlpnBufferCount,
- nullptr,
- &Session));
-
- Server = new HttpServer(Session, LocalAddress);
- }
- ~HttpSession() {
- delete Server;
- MsQuic->SessionShutdown(
- Session,
- QUIC_CONNECTION_SHUTDOWN_FLAG_NONE,
- 0);
- MsQuic->SessionClose(Session);
- }
-private:
- HQUIC Session;
- HttpServer* Server;
-};
diff --git a/src/tools/ip/quicip.h b/src/tools/ip/quicip.h
index f0e200c22d..f6af05f1d0 100644
--- a/src/tools/ip/quicip.h
+++ b/src/tools/ip/quicip.h
@@ -32,7 +32,7 @@ typedef struct QUIC_IP_LOOKUP {
BOOLEAN Success;
QUIC_STATUS Status;
const QUIC_API_TABLE* MsQuic;
- HQUIC Session;
+ HQUIC Configuration;
HQUIC Connection;
QUIC_ADDR* LocalAdrress;
QUIC_ADDR* PublicAddress;
@@ -141,26 +141,31 @@ MsQuicGetPublicIPEx(
Settings.PeerUnidiStreamCount = 1;
Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_CLIENT;
+ if (Unsecure) {
+ CredConfig.Flags |= QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION;
+ }
+
QUIC_IP_LOOKUP Context = {
FALSE, QUIC_STATUS_SUCCESS, MsQuic, NULL, NULL, LocalAddress, PublicAddress
};
- if (QUIC_FAILED(Context.Status = Context.MsQuic->SessionOpen(Registration, sizeof(Settings), &Settings, &Alpn, 1, NULL, &Context.Session))) {
- QUIC_PRINTF("SessionOpen failed, 0x%x!\n", Context.Status);
+ if (QUIC_FAILED(Context.Status = Context.MsQuic->ConfigurationOpen(Registration, &Alpn, 1, &Settings, sizeof(Settings), NULL, &Context.Configuration))) {
+ QUIC_PRINTF("ConfigurationOpen failed, 0x%x!\n", Context.Status);
goto Error;
}
- if (QUIC_FAILED(Context.Status = Context.MsQuic->ConnectionOpen(Context.Session, ClientConnectionCallback, &Context, &Context.Connection))) {
- QUIC_PRINTF("ConnectionOpen failed, 0x%x!\n", Context.Status);
+ if (QUIC_FAILED(Context.Status = Context.MsQuic->ConfigurationLoadCredential(Context.Configuration, &CredConfig))) {
+ QUIC_PRINTF("ConfigurationLoadCredential failed, 0x%x!\n", Context.Status);
goto Error;
}
- if (Unsecure) {
- const uint32_t CertificateValidationFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- if (QUIC_FAILED(Context.Status = Context.MsQuic->SetParam(Context.Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, sizeof(CertificateValidationFlags), &CertificateValidationFlags))) {
- QUIC_PRINTF("SetParam(CONN_CERT_VALIDATION_FLAGS) failed, 0x%x!\n", Context.Status);
- goto Error;
- }
+ if (QUIC_FAILED(Context.Status = Context.MsQuic->ConnectionOpen(Registration, ClientConnectionCallback, &Context, &Context.Connection))) {
+ QUIC_PRINTF("ConnectionOpen failed, 0x%x!\n", Context.Status);
+ goto Error;
}
if (QUIC_ADDRESS_FAMILY_UNSPEC != QuicAddrGetFamily(LocalAddress)) {
@@ -173,17 +178,19 @@ MsQuicGetPublicIPEx(
Context.Status = QUIC_IP_DEFAULT_STATUS;
QUIC_STATUS Status; // Don't use Context.Status as it might overwrite real error on success.
- if (QUIC_FAILED(Status = Context.MsQuic->ConnectionStart(Context.Connection, QuicAddrGetFamily(LocalAddress), Target, UdpPort))) {
+ if (QUIC_FAILED(Status = Context.MsQuic->ConnectionStart(Context.Connection, Context.Configuration, QuicAddrGetFamily(LocalAddress), Target, UdpPort))) {
Context.Status = Status;
QUIC_PRINTF("ConnectionStart failed, 0x%x!\n", Context.Status);
Context.MsQuic->ConnectionClose(Context.Connection);
goto Error;
}
+ // TODO - Wait on connection shutdown
+
Error:
- if (Context.Session) {
- Context.MsQuic->SessionClose(Context.Session); // Waits on all connections to be cleaned up.
+ if (Context.Configuration) {
+ Context.MsQuic->ConfigurationClose(Context.Configuration);
}
return Context.Success ? QUIC_STATUS_SUCCESS : Context.Status;
diff --git a/src/tools/ip/server/quicipserver.cpp b/src/tools/ip/server/quicipserver.cpp
index c8390f125d..c77ede8e75 100644
--- a/src/tools/ip/server/quicipserver.cpp
+++ b/src/tools/ip/server/quicipserver.cpp
@@ -24,8 +24,7 @@ const uint64_t IdleTimeoutMs = 2000;
const QUIC_API_TABLE* MsQuic;
HQUIC Registration;
-HQUIC Session;
-QUIC_SEC_CONFIG* SecurityConfig;
+HQUIC Configuration;
extern "C" void QuicTraceRundown(void) { }
@@ -130,15 +129,16 @@ ServerListenerCallback(
_Inout_ QUIC_LISTENER_EVENT* Event
)
{
+ QUIC_STATUS Status = QUIC_STATUS_NOT_SUPPORTED;
switch (Event->Type) {
case QUIC_LISTENER_EVENT_NEW_CONNECTION:
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
MsQuic->SetCallbackHandler(Event->NEW_CONNECTION.Connection, (void*)ServerConnectionCallback, nullptr);
+ Status = MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, Configuration);
break;
default:
break;
}
- return QUIC_STATUS_SUCCESS;
+ return Status;
}
void
@@ -150,56 +150,35 @@ RunServer(
QUIC_STATUS Status;
HQUIC Listener = nullptr;
+ QUIC_SETTINGS Settings{0};
+ Settings.IdleTimeoutMs = IdleTimeoutMs;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+
QUIC_ADDR Address = {};
QuicAddrSetFamily(&Address, QUIC_ADDRESS_FAMILY_UNSPEC);
QuicAddrSetPort(&Address, UdpPort);
- QUIC_SEC_CONFIG_PARAMS* SelfSignedCertParams = nullptr;
- const char* Cert;
- const char* KeyFile;
- if (GetValue(argc, argv, "selfsign")) {
- SelfSignedCertParams = QuicPlatGetSelfSignedCert(QUIC_SELF_SIGN_CERT_USER);
- if (!SelfSignedCertParams) {
- printf("Failed to create platform self signed certificate\n");
- return;
- }
-
- SecurityConfig = GetSecConfigForSelfSigned(MsQuic, Registration, SelfSignedCertParams);
- if (!SecurityConfig) {
- printf("Failed to create security config for self signed certificate\n");
- QuicPlatFreeSelfSignedCert(SelfSignedCertParams);
- return;
- }
- } else if (TryGetValue(argc, argv, "cert_hash", &Cert)) {
- const char* StoreName = "My";
- QUIC_CERTIFICATE_HASH_STORE_FLAGS Flags = QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE;
- if (GetValue(argc, argv, "machine")) {
- Flags |= QUIC_CERTIFICATE_HASH_STORE_FLAG_MACHINE_STORE;
- }
- TryGetValue(argc, argv, "cert_store", &StoreName);
- SecurityConfig = GetSecConfigForThumbprintAndStore(MsQuic, Registration, Flags, Cert, StoreName);
- if (SecurityConfig == nullptr) {
- printf("Failed to load certificate from hash!\n");
- return;
- }
- } else if (TryGetValue(argc, argv, "cert_file", &Cert) &&
- TryGetValue(argc, argv, "key_file", &KeyFile)) {
- SecurityConfig = GetSecConfigForFile(MsQuic, Registration, KeyFile, Cert);
- if (SecurityConfig == nullptr) {
- printf("Failed to load certificate from file!\n");
- return;
- }
- } else {
- printf("Must specify 'selfsign', '-cert_hash' or 'cert_file'!\n");
+ Configuration =
+ GetServerConfigurationFromArgs(
+ argc,
+ argv,
+ MsQuic,
+ Registration,
+ &Alpn,
+ 1,
+ &Settings,
+ sizeof(Settings));
+ if (!Configuration) {
+ printf("Failed to load configuration from args!\n");
return;
}
- if (QUIC_FAILED(Status = MsQuic->ListenerOpen(Session, ServerListenerCallback, nullptr, &Listener))) {
+ if (QUIC_FAILED(Status = MsQuic->ListenerOpen(Registration, ServerListenerCallback, nullptr, &Listener))) {
printf("ListenerOpen failed, 0x%x!\n", Status);
goto Error;
}
- if (QUIC_FAILED(Status = MsQuic->ListenerStart(Listener, &Address))) {
+ if (QUIC_FAILED(Status = MsQuic->ListenerStart(Listener, &Alpn, 1, &Address))) {
printf("ListenerStart failed, 0x%x!\n", Status);
goto Error;
}
@@ -212,9 +191,8 @@ RunServer(
if (Listener != nullptr) {
MsQuic->ListenerClose(Listener);
}
- MsQuic->SecConfigDelete(SecurityConfig);
- if (SelfSignedCertParams) {
- QuicPlatFreeSelfSignedCert(SelfSignedCertParams);
+ if (Configuration) {
+ FreeServerConfiguration(MsQuic, Configuration);
}
}
@@ -227,10 +205,6 @@ main(
{
QuicPlatformSystemLoad();
- QUIC_SETTINGS Settings{0};
- Settings.IdleTimeoutMs = IdleTimeoutMs;
- Settings.IsSet.IdleTimeoutMs = TRUE;
-
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
if (QUIC_FAILED(Status = QuicPlatformInitialize())) {
printf("QuicPlatformInitialize failed, 0x%x!\n", Status);
@@ -248,19 +222,11 @@ main(
goto Error;
}
- if (QUIC_FAILED(Status = MsQuic->SessionOpen(Registration, sizeof(Settings), &Settings, &Alpn, 1, nullptr, &Session))) {
- printf("SessionOpen failed, 0x%x!\n", Status);
- goto Error;
- }
-
RunServer(argc, argv);
Error:
if (MsQuic != nullptr) {
- if (Session != nullptr) {
- MsQuic->SessionClose(Session); // Waits on all connections to be cleaned up.
- }
if (Registration != nullptr) {
MsQuic->RegistrationClose(Registration);
}
diff --git a/src/tools/ping/Client.cpp b/src/tools/ping/Client.cpp
index c1494f0f8a..286ad30e61 100644
--- a/src/tools/ping/Client.cpp
+++ b/src/tools/ping/Client.cpp
@@ -14,28 +14,67 @@
#include "QuicPing.h"
+struct QuicConfigurationPtr {
+ HQUIC Handle {nullptr};
+ ~QuicConfigurationPtr() { MsQuic->ConfigurationClose(Handle); }
+};
+
void QuicPingClientRun()
{
PingTracker Tracker;
bool Timeout = true;
{
QUIC_SETTINGS Settings{0};
+ Settings.IdleTimeoutMs = PingConfig.IdleTimeout;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+ Settings.DisconnectTimeoutMs = PingConfig.DisconnectTimeout;
+ Settings.IsSet.DisconnectTimeoutMs = TRUE;
+ Settings.DatagramReceiveEnabled = TRUE;
+ Settings.IsSet.DatagramReceiveEnabled = TRUE;
+ if (!PingConfig.UseSendBuffer) {
+ Settings.SendBufferingEnabled = FALSE;
+ Settings.IsSet.SendBufferingEnabled = TRUE;
+ }
+ if (!PingConfig.UsePacing) {
+ Settings.PacingEnabled = FALSE;
+ Settings.IsSet.PacingEnabled = TRUE;
+ }
if (PingConfig.MaxBytesPerKey != UINT64_MAX) {
Settings.MaxBytesPerKey = PingConfig.MaxBytesPerKey;
Settings.IsSet.MaxBytesPerKey = TRUE;
}
+ if (PingConfig.PeerBidirStreamCount != 0) {
+ Settings.PeerBidiStreamCount = PingConfig.PeerBidirStreamCount;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ }
+ if (PingConfig.PeerUnidirStreamCount != 0) {
+ Settings.PeerUnidiStreamCount = PingConfig.PeerUnidirStreamCount;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ }
- QuicSession Session;
+ QuicConfigurationPtr ClientConfiguration;
if (QUIC_FAILED(
- MsQuic->SessionOpen(
+ MsQuic->ConfigurationOpen(
Registration,
- sizeof(Settings),
- &Settings,
&PingConfig.ALPN,
1,
- NULL,
- &Session.Handle))) {
- printf("MsQuic->SessionOpen failed!\n");
+ &Settings,
+ sizeof(Settings),
+ nullptr,
+ &ClientConfiguration.Handle))) {
+ printf("MsQuic->ConfigurationOpen failed!\n");
+ return;
+ }
+
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_CLIENT | QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION;
+ if (QUIC_FAILED(
+ MsQuic->ConfigurationLoadCredential(
+ ClientConfiguration.Handle,
+ &CredConfig))) {
+ printf("MsQuic->ConfigurationLoadCredential failed!\n");
return;
}
@@ -44,7 +83,6 @@ void QuicPingClientRun()
Connections[i] =
new PingConnection(
&Tracker,
- Session.Handle,
PingConfig.ConnectionCount == 1);
if (!Connections[i]) {
printf("Failed to open a connection!\n");
@@ -62,14 +100,14 @@ void QuicPingClientRun()
// Start connecting to the remote server.
//
for (uint32_t i = 0; i < PingConfig.ConnectionCount; i++) {
- Connections[i]->Connect();
+ Connections[i]->Connect(ClientConfiguration.Handle);
}
delete[] Connections;
if (Tracker.Wait(PingConfig.Client.WaitTimeout)) {
printf("Cancelling remaining connections.\n");
- Session.Cancel();
+ MsQuic->RegistrationShutdown(Registration, QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
Timeout = false; // Connections didn't hit idle timeout. They were cancelled.
}
}
diff --git a/src/tools/ping/PingConnection.cpp b/src/tools/ping/PingConnection.cpp
index 589a3e83c3..011f4d8a85 100644
--- a/src/tools/ping/PingConnection.cpp
+++ b/src/tools/ping/PingConnection.cpp
@@ -13,7 +13,6 @@
PingConnection::PingConnection(
_In_ PingTracker* Tracker,
- _In_ HQUIC Session,
_In_ bool DumpResumption
) :
Tracker(Tracker), QuicConnection(nullptr), DumpResumption(DumpResumption),
@@ -24,7 +23,7 @@ PingConnection::PingConnection(
if (QUIC_FAILED(
MsQuic->ConnectionOpen(
- Session,
+ Registration,
QuicCallbackHandler,
this,
&QuicConnection))) {
@@ -59,117 +58,15 @@ PingConnection::Initialize(
{
this->IsServer = isServer;
- if (!PingConfig.UseSendBuffer) {
- BOOLEAN Opt = FALSE;
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_BUFFERING,
- sizeof(Opt),
- &Opt))) {
- printf("MsQuic->SetParam (SEND_BUFFERING) failed!\n");
- return false;
- }
- }
-
- if (!PingConfig.UsePacing) {
- BOOLEAN Opt = FALSE;
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_SEND_PACING,
- sizeof(Opt),
- &Opt))) {
- printf("MsQuic->SetParam (SEND_PACING) failed!\n");
- return false;
- }
- }
-
- {
- BOOLEAN Enabled = TRUE;
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_DATAGRAM_RECEIVE_ENABLED,
- sizeof(Enabled),
- &Enabled))) {
- printf("MsQuic->SetParam (DATAGRAMS) failed!\n");
- return false;
- }
- }
-
if (!IsServer) {
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_DISCONNECT_TIMEOUT,
- sizeof(uint32_t),
- &PingConfig.DisconnectTimeout))) {
- printf("Failed to set the disconnect timeout!\n");
- return false;
- }
-
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_IDLE_TIMEOUT,
- sizeof(uint64_t),
- &PingConfig.IdleTimeout))) {
- printf("Failed to set the idle timeout!\n");
- return false;
- }
-
- uint32_t SecFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(SecFlags),
- &SecFlags))) {
- printf("Failed to set the cert validation flags!\n");
- return false;
- }
-
- if (PingConfig.PeerBidirStreamCount != 0) {
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT,
- sizeof(uint16_t),
- &PingConfig.PeerBidirStreamCount))) {
- printf("Failed to set the peer max bidi stream count!\n");
- return false;
- }
- }
-
- if (PingConfig.PeerUnidirStreamCount != 0) {
- if (QUIC_FAILED(
- MsQuic->SetParam(
- QuicConnection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT,
- sizeof(uint16_t),
- &PingConfig.PeerUnidirStreamCount))) {
- printf("Failed to set the peer max uni stream count!\n");
- return false;
- }
- }
-
- if (PingConfig.Client.ResumeToken &&
+ /*if (PingConfig.Client.ResumeToken &&
!SetResumptionState(
MsQuic,
QuicConnection,
PingConfig.Client.ResumeToken)) {
printf("Failed to set the resumption token!\n");
return false;
- }
+ }*/
if (PingConfig.Client.Version &&
QUIC_FAILED(
@@ -243,7 +140,7 @@ PingConnection::QueueDatagram(
}
bool
-PingConnection::Connect() {
+PingConnection::Connect(_In_ HQUIC ClientConfiguration) {
if (QuicAddrGetFamily(&PingConfig.LocalIpAddr) != QUIC_ADDRESS_FAMILY_UNSPEC) {
MsQuic->SetParam(
QuicConnection,
@@ -267,6 +164,7 @@ PingConnection::Connect() {
if (QUIC_FAILED(
MsQuic->ConnectionStart(
QuicConnection,
+ ClientConfiguration,
QuicAddrGetFamily(&PingConfig.Client.RemoteIpAddr),
PingConfig.Client.Target,
QuicAddrGetPort(&PingConfig.Client.RemoteIpAddr)))) {
diff --git a/src/tools/ping/PingConnection.h b/src/tools/ping/PingConnection.h
index 068e6d8ae7..48cc331da2 100644
--- a/src/tools/ping/PingConnection.h
+++ b/src/tools/ping/PingConnection.h
@@ -110,7 +110,6 @@ struct PingConnection {
//
PingConnection(
_In_ PingTracker* Tracker,
- _In_ HQUIC Session,
_In_ bool DumpResumption
);
@@ -135,7 +134,7 @@ struct PingConnection {
//
// Starts the connection handshake to the server.
//
- bool Connect();
+ bool Connect(_In_ HQUIC ClientConfiguration);
//
// Called by the child stream when it's done cleaning up.
diff --git a/src/tools/ping/QuicPing.cpp b/src/tools/ping/QuicPing.cpp
index 3ee64127d7..01b3f9e676 100644
--- a/src/tools/ping/QuicPing.cpp
+++ b/src/tools/ping/QuicPing.cpp
@@ -13,7 +13,7 @@
const QUIC_API_TABLE* MsQuic;
HQUIC Registration;
-QUIC_SEC_CONFIG* SecurityConfig;
+HQUIC Configuration;
QUIC_PING_CONFIG PingConfig;
extern "C" void QuicTraceRundown(void) { }
@@ -223,67 +223,53 @@ ParseServerCommand(
return;
}
- QUIC_SEC_CONFIG_PARAMS* selfSignedCertParams = nullptr;
-
- uint16_t useSelfSigned = 0;
- if (!TryGetValue(argc, argv, "selfsign", &useSelfSigned)) {
+ PingConfig.ConnectionCount = 0;
+ ParseCommonCommands(argc, argv);
-#if _WIN32
- const char* certThumbprint;
- if (!TryGetValue(argc, argv, "thumbprint", &certThumbprint)) {
- printf("Must specify -thumbprint: for server mode.\n");
- return;
- }
- const char* certStoreName;
- if (!TryGetValue(argc, argv, "cert_store", &certStoreName)) {
- SecurityConfig = GetSecConfigForThumbprint(MsQuic, Registration, certThumbprint);
- if (SecurityConfig == nullptr) {
- printf("Failed to create security configuration for thumbprint:'%s'.\n", certThumbprint);
- return;
- }
- } else {
- uint32_t machineCert = 0;
- TryGetValue(argc, argv, "machine_cert", &machineCert);
- QUIC_CERTIFICATE_HASH_STORE_FLAGS flags =
- machineCert ? QUIC_CERTIFICATE_HASH_STORE_FLAG_MACHINE_STORE : QUIC_CERTIFICATE_HASH_STORE_FLAG_NONE;
-
- SecurityConfig = GetSecConfigForThumbprintAndStore(MsQuic, Registration, flags, certThumbprint, certStoreName);
- if (SecurityConfig == nullptr) {
- printf(
- "Failed to create security configuration for thumbprint:'%s' and store: '%s'.\n",
- certThumbprint,
- certStoreName);
- return;
- }
- }
-#else
- // TODO - Support getting sec config on Linux.
- printf("Loading sec config on Linux unsupported right now.\n");
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerBidiStreamCount = PingConfig.PeerBidirStreamCount;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+ Settings.PeerUnidiStreamCount = PingConfig.PeerUnidirStreamCount;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ Settings.DisconnectTimeoutMs = PingConfig.DisconnectTimeout;
+ Settings.IsSet.DisconnectTimeoutMs = TRUE;
+ Settings.IdleTimeoutMs = PingConfig.IdleTimeout;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+ Settings.DatagramReceiveEnabled = TRUE;
+ Settings.IsSet.DatagramReceiveEnabled = TRUE;
+ if (!PingConfig.UseSendBuffer) {
+ Settings.SendBufferingEnabled = FALSE;
+ Settings.IsSet.SendBufferingEnabled = TRUE;
+ }
+ if (!PingConfig.UsePacing) {
+ Settings.PacingEnabled = FALSE;
+ Settings.IsSet.PacingEnabled = TRUE;
+ }
+ if (PingConfig.MaxBytesPerKey != UINT64_MAX) {
+ Settings.MaxBytesPerKey = PingConfig.MaxBytesPerKey;
+ Settings.IsSet.MaxBytesPerKey = TRUE;
+ }
+ Settings.ServerResumptionLevel = QUIC_SERVER_RESUME_ONLY;
+ Settings.IsSet.ServerResumptionLevel = TRUE;
+
+ Configuration =
+ GetServerConfigurationFromArgs(
+ argc,
+ argv,
+ MsQuic,
+ Registration,
+ &PingConfig.ALPN,
+ 1,
+ &Settings,
+ sizeof(Settings));
+ if (!Configuration) {
+ printf("Failed to load configuration from args.\n");
return;
-#endif
- } else {
- selfSignedCertParams = QuicPlatGetSelfSignedCert(QUIC_SELF_SIGN_CERT_USER);
- if (!selfSignedCertParams) {
- printf("Failed to create platform self signed certificate\n");
- return;
- }
-
- SecurityConfig = GetSecConfigForSelfSigned(MsQuic, Registration, selfSignedCertParams);
- if (!SecurityConfig) {
- printf("Failed to create security config for self signed certificate\n");
- QuicPlatFreeSelfSignedCert(selfSignedCertParams);
- return;
- }
}
- PingConfig.ConnectionCount = 0;
- ParseCommonCommands(argc, argv);
QuicPingServerRun();
- MsQuic->SecConfigDelete(SecurityConfig);
- if (selfSignedCertParams) {
- QuicPlatFreeSelfSignedCert(selfSignedCertParams);
- }
+ FreeServerConfiguration(MsQuic, Configuration);
}
void
diff --git a/src/tools/ping/QuicPing.h b/src/tools/ping/QuicPing.h
index a27d8e06ad..1a3fdaf6e9 100644
--- a/src/tools/ping/QuicPing.h
+++ b/src/tools/ping/QuicPing.h
@@ -23,9 +23,9 @@ extern const QUIC_API_TABLE* MsQuic;
extern HQUIC Registration;
//
-// Security configuration for server.
+// Configuration for server.
//
-extern QUIC_SEC_CONFIG* SecurityConfig;
+extern HQUIC Configuration;
//
// Raw byte buffer for sending.
@@ -149,16 +149,6 @@ typedef struct QUIC_PING_CONFIG {
extern QUIC_PING_CONFIG PingConfig;
-struct QuicSession
-{
- HQUIC Handle;
- QuicSession() : Handle(nullptr) {}
- ~QuicSession() { if (Handle != nullptr) { MsQuic->SessionClose(Handle); } }
- void Cancel() {
- MsQuic->SessionShutdown(Handle, QUIC_CONNECTION_SHUTDOWN_FLAG_SILENT, 0);
- }
-};
-
struct PingSendRequest {
QUIC_SEND_FLAGS Flags;
diff --git a/src/tools/ping/Server.cpp b/src/tools/ping/Server.cpp
index 0787185e4e..7866dae1e3 100644
--- a/src/tools/ping/Server.cpp
+++ b/src/tools/ping/Server.cpp
@@ -25,10 +25,10 @@ struct PingServer {
}
}
- bool Start(HQUIC Session) {
+ bool Start() {
if (QUIC_FAILED(
MsQuic->ListenerOpen(
- Session,
+ Registration,
QuicCallbackHandler,
this,
&QuicListener))) {
@@ -38,6 +38,8 @@ struct PingServer {
if (QUIC_FAILED(
MsQuic->ListenerStart(
QuicListener,
+ &PingConfig.ALPN,
+ 1,
&PingConfig.LocalIpAddr))) {
printf("MsQuic->ListenerStart failed!\n");
}
@@ -52,7 +54,13 @@ struct PingServer {
case QUIC_LISTENER_EVENT_NEW_CONNECTION: {
auto Connection = new PingConnection(&Tracker, Event->NEW_CONNECTION.Connection);
if (Connection != NULL) {
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
+ QUIC_STATUS Status =
+ MsQuic->ConnectionSetConfiguration(
+ Event->NEW_CONNECTION.Connection,
+ Configuration);
+ if (QUIC_FAILED(Status)) {
+ delete Connection;
+ }
if (!Connection->Initialize(true)) {
delete Connection;
}
@@ -78,39 +86,9 @@ struct PingServer {
void QuicPingServerRun()
{
- QUIC_SETTINGS Settings{0};
- Settings.PeerBidiStreamCount = PingConfig.PeerBidirStreamCount;
- Settings.IsSet.PeerBidiStreamCount = TRUE;
- Settings.PeerUnidiStreamCount = PingConfig.PeerUnidirStreamCount;
- Settings.IsSet.PeerUnidiStreamCount = TRUE;
- Settings.DisconnectTimeoutMs = PingConfig.DisconnectTimeout;
- Settings.IsSet.DisconnectTimeoutMs = TRUE;
- Settings.IdleTimeoutMs = PingConfig.IdleTimeout;
- Settings.IsSet.IdleTimeoutMs = TRUE;
- if (PingConfig.MaxBytesPerKey != UINT64_MAX) {
- Settings.MaxBytesPerKey = PingConfig.MaxBytesPerKey;
- Settings.IsSet.MaxBytesPerKey = TRUE;
- }
- Settings.ServerResumptionLevel = QUIC_SERVER_RESUME_ONLY;
- Settings.IsSet.ServerResumptionLevel = TRUE;
-
- QuicSession Session;
- if (QUIC_FAILED(
- MsQuic->SessionOpen(
- Registration,
- sizeof(Settings),
- &Settings,
- &PingConfig.ALPN,
- 1,
- NULL,
- &Session.Handle))) {
- printf("MsQuic->SessionOpen failed!\n");
- return;
- }
-
{
PingServer Server;
- if (!Server.Start(Session.Handle)) {
+ if (!Server.Start()) {
printf("Failed to start the listener!\n");
return;
}
@@ -132,5 +110,5 @@ void QuicPingServerRun()
}
}
- Session.Cancel();
+ MsQuic->RegistrationShutdown(Registration, QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
}
diff --git a/src/tools/post/post.cpp b/src/tools/post/post.cpp
index 0c14c60a0b..e1f1dcf96c 100644
--- a/src/tools/post/post.cpp
+++ b/src/tools/post/post.cpp
@@ -37,7 +37,6 @@ const QUIC_BUFFER ALPNs[] = {
};
const QUIC_API_TABLE* MsQuic;
-const uint32_t CertificateValidationFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
uint16_t Port = 4433;
const char* ServerName = "localhost";
const char* FilePath = nullptr;
@@ -143,19 +142,24 @@ main(
QuicEventInitialize(&SendReady, FALSE, FALSE);
HQUIC Registration = nullptr;
- HQUIC Session = nullptr;
+ HQUIC Configuration = nullptr;
HQUIC Connection = nullptr;
HQUIC Stream = nullptr;
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION | QUIC_CREDENTIAL_FLAG_CLIENT;
+
EXIT_ON_FAILURE(MsQuicOpen(&MsQuic));
const QUIC_REGISTRATION_CONFIG RegConfig = { "post", QUIC_EXECUTION_PROFILE_LOW_LATENCY };
EXIT_ON_FAILURE(MsQuic->RegistrationOpen(&RegConfig, &Registration));
- EXIT_ON_FAILURE(MsQuic->SessionOpen(Registration, 0, NULL, ALPNs, ARRAYSIZE(ALPNs), nullptr, &Session));
- EXIT_ON_FAILURE(MsQuic->ConnectionOpen(Session, ConnectionHandler, nullptr, &Connection));
- EXIT_ON_FAILURE(MsQuic->SetParam(Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, sizeof(CertificateValidationFlags), &CertificateValidationFlags));
+ EXIT_ON_FAILURE(MsQuic->ConfigurationOpen(Registration, ALPNs, ARRAYSIZE(ALPNs), nullptr, 0, nullptr, &Configuration));
+ EXIT_ON_FAILURE(MsQuic->ConfigurationLoadCredential(Configuration, &CredConfig));
+ EXIT_ON_FAILURE(MsQuic->ConnectionOpen(Registration, ConnectionHandler, nullptr, &Connection));
EXIT_ON_FAILURE(MsQuic->StreamOpen(Connection, QUIC_STREAM_OPEN_FLAG_UNIDIRECTIONAL, StreamHandler, nullptr, &Stream));
EXIT_ON_FAILURE(MsQuic->StreamStart(Stream, QUIC_STREAM_START_FLAG_ASYNC));
- EXIT_ON_FAILURE(MsQuic->ConnectionStart(Connection, QUIC_ADDRESS_FAMILY_UNSPEC, ServerName, Port));
+ EXIT_ON_FAILURE(MsQuic->ConnectionStart(Connection, Configuration, QUIC_ADDRESS_FAMILY_UNSPEC, ServerName, Port));
printf("POST '%s' to %s:%hu\n", FileName, ServerName, Port);
@@ -181,7 +185,7 @@ main(
SendBuffer.Length = 0;
} while (!TransferCanceled && !EndOfFile);
- MsQuic->SessionClose(Session);
+ MsQuic->ConfigurationClose(Configuration);
MsQuic->RegistrationClose(Registration);
MsQuicClose(MsQuic);
diff --git a/src/tools/reach/reach.cpp b/src/tools/reach/reach.cpp
index 7979f1674c..36c9ff8453 100644
--- a/src/tools/reach/reach.cpp
+++ b/src/tools/reach/reach.cpp
@@ -31,24 +31,30 @@ HQUIC Registration;
extern "C" void QuicTraceRundown(void) { }
+struct ConnectionContext {
+ bool GotConnected;
+ QUIC_EVENT Complete;
+};
+
_IRQL_requires_max_(PASSIVE_LEVEL)
_Function_class_(QUIC_CONNECTION_CALLBACK)
QUIC_STATUS
QUIC_API
ConnectionHandler(
_In_ HQUIC Connection,
- _In_opt_ void* Context,
+ _In_opt_ void* _Context,
_Inout_ QUIC_CONNECTION_EVENT* Event
)
{
- bool* GotConnected = (bool*)Context;
+ auto Context = (ConnectionContext*)_Context;
switch (Event->Type) {
case QUIC_CONNECTION_EVENT_CONNECTED:
- *GotConnected = true;
+ Context->GotConnected = true;
MsQuic->ConnectionShutdown(Connection, QUIC_CONNECTION_SHUTDOWN_FLAG_NONE, 0);
break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE:
MsQuic->ConnectionClose(Connection);
+ QuicEventSet(Context->Complete);
break;
case QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED:
return QUIC_STATUS_NOT_SUPPORTED;
@@ -58,21 +64,38 @@ ConnectionHandler(
return QUIC_STATUS_SUCCESS;
}
-QUIC_THREAD_CALLBACK(TestReachability, Context)
+QUIC_THREAD_CALLBACK(TestReachability, _Alpn)
{
QUIC_BUFFER Alpn;
- Alpn.Buffer = (uint8_t*)Context;
- Alpn.Length = (uint32_t)strlen((char*)Context);
+ Alpn.Buffer = (uint8_t*)_Alpn;
+ Alpn.Length = (uint32_t)strlen((char*)_Alpn);
+
+ QUIC_SETTINGS Settings{0};
+ Settings.PeerUnidiStreamCount = 100;
+ Settings.IsSet.PeerUnidiStreamCount = TRUE;
+ Settings.IdleTimeoutMs = 10 * 1000;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+
+ HQUIC Configuration = nullptr;
+ if (QUIC_FAILED(MsQuic->ConfigurationOpen(Registration, &Alpn, 1, &Settings, sizeof(Settings), nullptr, &Configuration))) {
+ printf("ConfigurationOpen failed.\n");
+ exit(1);
+ }
- HQUIC Session = nullptr;
- if (QUIC_FAILED(MsQuic->SessionOpen(Registration, 0, NULL, &Alpn, 1, nullptr, &Session))) {
- printf("SessionOpen failed.\n");
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_CLIENT; // TODO - Disable certificate validation?
+
+ if (QUIC_FAILED(MsQuic->ConfigurationLoadCredential(Configuration, &CredConfig))) {
+ printf("ConfigurationOpen failed.\n");
exit(1);
}
+ ConnectionContext Context = { false };
+ QuicEventInitialize(&Context.Complete, TRUE, FALSE);
+
HQUIC Connection = nullptr;
- bool GotConnected = false;
- if (QUIC_FAILED(MsQuic->ConnectionOpen(Session, ConnectionHandler, &GotConnected, &Connection))) {
+ if (QUIC_FAILED(MsQuic->ConnectionOpen(Registration, ConnectionHandler, &Context, &Connection))) {
printf("ConnectionOpen failed.\n");
exit(1);
}
@@ -82,29 +105,19 @@ QUIC_THREAD_CALLBACK(TestReachability, Context)
exit(1);
}
- uint16_t StreamCount = 100;
- if (QUIC_FAILED(MsQuic->SetParam(Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT, sizeof(StreamCount), &StreamCount))) {
- printf("SetParam QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT failed.\n");
- exit(1);
- }
-
- uint64_t IdleTimeoutMs = 10 * 1000;
- if (QUIC_FAILED(MsQuic->SetParam(Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_IDLE_TIMEOUT, sizeof(IdleTimeoutMs), &IdleTimeoutMs))) {
- printf("SetParam QUIC_PARAM_CONN_IDLE_TIMEOUT failed.\n");
- exit(1);
- }
-
- if (QUIC_FAILED(MsQuic->ConnectionStart(Connection, QUIC_ADDRESS_FAMILY_UNSPEC, ServerName, Port))) {
+ if (QUIC_FAILED(MsQuic->ConnectionStart(Connection, Configuration, QUIC_ADDRESS_FAMILY_UNSPEC, ServerName, Port))) {
printf("ConnectionStart failed.\n");
exit(1);
}
- MsQuic->SessionClose(Session);
+ MsQuic->ConfigurationClose(Configuration);
+ QuicEventWaitForever(Context.Complete);
+ QuicEventUninitialize(Context.Complete);
- if (GotConnected) {
- printf(" %6s reachable\n", (char*)Context);
+ if (Context.GotConnected) {
+ printf(" %6s reachable\n", (char*)_Alpn);
} else {
- printf(" %6s unreachable\n", (char*)Context);
+ printf(" %6s unreachable\n", (char*)_Alpn);
}
QUIC_THREAD_RETURN(0);
diff --git a/src/tools/sample/sample.cpp b/src/tools/sample/sample.cpp
index 06c86c6a6a..009d5c8f08 100644
--- a/src/tools/sample/sample.cpp
+++ b/src/tools/sample/sample.cpp
@@ -9,7 +9,10 @@
--*/
-#include
+#include
+#include
+#include
+#include
const QUIC_REGISTRATION_CONFIG RegConfig = { "quicsample", QUIC_EXECUTION_PROFILE_LOW_LATENCY };
const QUIC_BUFFER Alpn = { sizeof("sample") - 1, (uint8_t*)"sample" };
@@ -19,19 +22,65 @@ const uint32_t SendBufferLength = 100;
const QUIC_API_TABLE* MsQuic;
HQUIC Registration;
-HQUIC Session;
-QUIC_SEC_CONFIG* SecurityConfig;
+HQUIC Configuration;
-extern "C" void QuicTraceRundown(void) { }
+void PrintUsage()
+{
+ printf(
+ "\n"
+ "quicsample runs a simple client or server.\n"
+ "\n"
+ "Usage:\n"
+ "\n"
+ " quicinterop.exe -client -target:<...> [-unsecure]\n"
+ " quicinterop.exe -server -cert_hash:<...> or (-cert_file:<...> and -key_file:<...>)\n"
+ );
+}
-void
-PrintUsage()
+_Ret_maybenull_ _Null_terminated_ const char*
+GetValue(
+ _In_ int argc,
+ _In_reads_(argc) _Null_terminated_ char* argv[],
+ _In_z_ const char* name
+ )
{
- printf("\nquicsample runs a simple client or server.\n\n");
+ const size_t nameLen = strlen(name);
+ for (int i = 0; i < argc; i++) {
+ if (_strnicmp(argv[i] + 1, name, nameLen) == 0) {
+ return argv[i] + 1 + nameLen + 1;
+ }
+ }
+ return nullptr;
+}
- printf("Usage:\n");
- printf(" quicinterop.exe -client -target:<...> [-unsecure]\n");
- printf(" quicinterop.exe -server -cert_hash:<...> or (-cert_file:<...> and -key_file:<...>)\n");
+uint8_t DecodeHexChar(char c)
+{
+ if (c >= '0' && c <= '9') return c - '0';
+ if (c >= 'A' && c <= 'F') return 10 + c - 'A';
+ if (c >= 'a' && c <= 'f') return 10 + c - 'a';
+ return 0;
+}
+
+uint32_t
+DecodeHexBuffer(
+ _In_z_ const char* HexBuffer,
+ _In_ uint32_t OutBufferLen,
+ _Out_writes_to_(OutBufferLen, return)
+ uint8_t* OutBuffer
+ )
+{
+ uint32_t HexBufferLen = (uint32_t)strlen(HexBuffer) / 2;
+ if (HexBufferLen > OutBufferLen) {
+ return 0;
+ }
+
+ for (uint32_t i = 0; i < HexBufferLen; i++) {
+ OutBuffer[i] =
+ (DecodeHexChar(HexBuffer[i * 2]) << 4) |
+ DecodeHexChar(HexBuffer[i * 2 + 1]);
+ }
+
+ return HexBufferLen;
}
void
@@ -39,7 +88,7 @@ ServerSend(
_In_ HQUIC Stream
)
{
- auto SendBufferRaw = QUIC_ALLOC_PAGED(sizeof(QUIC_BUFFER) + SendBufferLength);
+ auto SendBufferRaw = malloc(sizeof(QUIC_BUFFER) + SendBufferLength);
if (SendBufferRaw == nullptr) {
printf("SendBuffer allocation failed!\n");
MsQuic->StreamShutdown(Stream, QUIC_STREAM_SHUTDOWN_FLAG_ABORT, 0);
@@ -55,7 +104,7 @@ ServerSend(
QUIC_STATUS Status;
if (QUIC_FAILED(Status = MsQuic->StreamSend(Stream, SendBuffer, 1, QUIC_SEND_FLAG_FIN, SendBuffer))) {
printf("StreamSend failed, 0x%x!\n", Status);
- QUIC_FREE(SendBufferRaw);
+ free(SendBufferRaw);
MsQuic->StreamShutdown(Stream, QUIC_STREAM_SHUTDOWN_FLAG_ABORT, 0);
}
}
@@ -72,7 +121,7 @@ ServerStreamCallback(
{
switch (Event->Type) {
case QUIC_STREAM_EVENT_SEND_COMPLETE:
- QUIC_FREE(Event->SEND_COMPLETE.ClientContext);
+ free(Event->SEND_COMPLETE.ClientContext);
printf("[strm][%p] Data sent\n", Stream);
break;
case QUIC_STREAM_EVENT_RECEIVE:
@@ -112,8 +161,10 @@ ServerConnectionCallback(
MsQuic->ConnectionSendResumptionTicket(Connection, QUIC_SEND_RESUMPTION_FLAG_NONE, 0, NULL);
break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT:
+ printf("[conn][%p] Shutdown by transport, 0x%x\n", Connection, Event->SHUTDOWN_INITIATED_BY_TRANSPORT.Status);
+ break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER:
- printf("[conn][%p] Shutdown\n", Connection);
+ printf("[conn][%p] Shutdown by peer, 0x%llu\n", Connection, (unsigned long long)Event->SHUTDOWN_INITIATED_BY_PEER.ErrorCode);
break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE:
printf("[conn][%p] All done\n", Connection);
@@ -122,7 +173,6 @@ ServerConnectionCallback(
case QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED:
printf("[strm][%p] Peer started\n", Event->PEER_STREAM_STARTED.Stream);
MsQuic->SetCallbackHandler(Event->PEER_STREAM_STARTED.Stream, (void*)ServerStreamCallback, nullptr);
- MsQuic->ConnectionSendResumptionTicket(Connection, QUIC_SEND_RESUMPTION_FLAG_NONE, 0, NULL);
break;
case QUIC_CONNECTION_EVENT_RESUMED:
printf("[conn][%p] Connection resumed!\n", Connection);
@@ -143,15 +193,83 @@ ServerListenerCallback(
_Inout_ QUIC_LISTENER_EVENT* Event
)
{
+ QUIC_STATUS Status = QUIC_STATUS_NOT_SUPPORTED;
switch (Event->Type) {
case QUIC_LISTENER_EVENT_NEW_CONNECTION:
- Event->NEW_CONNECTION.SecurityConfig = SecurityConfig;
MsQuic->SetCallbackHandler(Event->NEW_CONNECTION.Connection, (void*)ServerConnectionCallback, nullptr);
+ Status = MsQuic->ConnectionSetConfiguration(Event->NEW_CONNECTION.Connection, Configuration);
break;
default:
break;
}
- return QUIC_STATUS_SUCCESS;
+ return Status;
+}
+
+typedef struct QUIC_CREDENTIAL_CONFIG_HELPER {
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ union {
+ QUIC_CERTIFICATE_HASH CertHash;
+ QUIC_CERTIFICATE_HASH_STORE CertHashStore;
+ QUIC_CERTIFICATE_FILE CertFile;
+ };
+} QUIC_CREDENTIAL_CONFIG_HELPER;
+
+bool
+ServerLoadConfiguration(
+ _In_ int argc,
+ _In_reads_(argc) _Null_terminated_ char* argv[]
+ )
+{
+ QUIC_SETTINGS Settings{0};
+ Settings.IdleTimeoutMs = IdleTimeoutMs;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+ Settings.ServerResumptionLevel = QUIC_SERVER_RESUME_AND_ZERORTT;
+ Settings.IsSet.ServerResumptionLevel = TRUE;
+ Settings.PeerBidiStreamCount = 1;
+ Settings.IsSet.PeerBidiStreamCount = TRUE;
+
+ QUIC_CREDENTIAL_CONFIG_HELPER Config;
+ memset(&Config, 0, sizeof(Config));
+ Config.CredConfig.Flags = QUIC_CREDENTIAL_FLAG_NONE;
+
+ const char* Cert;
+ const char* KeyFile;
+ if ((Cert = GetValue(argc, argv, "cert_hash")) != nullptr) {
+ uint32_t CertHashLen =
+ DecodeHexBuffer(
+ Cert,
+ sizeof(Config.CertHash.ShaHash),
+ Config.CertHash.ShaHash);
+ if (CertHashLen != sizeof(Config.CertHash.ShaHash)) {
+ return false;
+ }
+ Config.CredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_HASH;
+ Config.CredConfig.CertificateHash = &Config.CertHash;
+
+ } else if ((Cert = GetValue(argc, argv, "cert_file")) != nullptr &&
+ (KeyFile = GetValue(argc, argv, "key_file")) != nullptr) {
+ Config.CertFile.CertificateFile = (char*)Cert;
+ Config.CertFile.PrivateKeyFile = (char*)KeyFile;
+ Config.CredConfig.Type = QUIC_CREDENTIAL_TYPE_CERTIFICATE_FILE;
+ Config.CredConfig.CertificateFile = &Config.CertFile;
+
+ } else {
+ printf("Must specify '-cert_hash' or 'cert_file' and 'key_file'!\n");
+ return false;
+ }
+
+ QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+ if (QUIC_FAILED(Status = MsQuic->ConfigurationOpen(Registration, &Alpn, 1, &Settings, sizeof(Settings), nullptr, &Configuration))) {
+ printf("ConfigurationOpen failed, 0x%x!\n", Status);
+ return false;
+ }
+
+ if (QUIC_FAILED(Status = MsQuic->ConfigurationLoadCredential(Configuration, &Config.CredConfig))) {
+ printf("ConfigurationLoadCredential failed, 0x%x!\n", Status);
+ return false;
+ }
+
+ return true;
}
void
@@ -167,32 +285,16 @@ RunServer(
QuicAddrSetFamily(&Address, QUIC_ADDRESS_FAMILY_UNSPEC);
QuicAddrSetPort(&Address, UdpPort);
- const char* Cert;
- const char* KeyFile;
- if (TryGetValue(argc, argv, "cert_hash", &Cert)) {
- SecurityConfig = GetSecConfigForThumbprint(MsQuic, Registration, Cert);
- if (SecurityConfig == nullptr) {
- printf("Failed to load certificate from hash!\n");
- return;
- }
- } else if (TryGetValue(argc, argv, "cert_file", &Cert) &&
- TryGetValue(argc, argv, "key_file", &KeyFile)) {
- SecurityConfig = GetSecConfigForFile(MsQuic, Registration, KeyFile, Cert);
- if (SecurityConfig == nullptr) {
- printf("Failed to load certificate from file!\n");
- return;
- }
- } else {
- printf("Must specify '-cert_hash' or 'cert_file'!\n");
+ if (!ServerLoadConfiguration(argc, argv)) {
return;
}
- if (QUIC_FAILED(Status = MsQuic->ListenerOpen(Session, ServerListenerCallback, nullptr, &Listener))) {
+ if (QUIC_FAILED(Status = MsQuic->ListenerOpen(Registration, ServerListenerCallback, nullptr, &Listener))) {
printf("ListenerOpen failed, 0x%x!\n", Status);
goto Error;
}
- if (QUIC_FAILED(Status = MsQuic->ListenerStart(Listener, &Address))) {
+ if (QUIC_FAILED(Status = MsQuic->ListenerStart(Listener, &Alpn, 1, &Address))) {
printf("ListenerStart failed, 0x%x!\n", Status);
goto Error;
}
@@ -205,7 +307,6 @@ RunServer(
if (Listener != nullptr) {
MsQuic->ListenerClose(Listener);
}
- MsQuic->SecConfigDelete(SecurityConfig);
}
_IRQL_requires_max_(DISPATCH_LEVEL)
@@ -220,7 +321,7 @@ ClientStreamCallback(
{
switch (Event->Type) {
case QUIC_STREAM_EVENT_SEND_COMPLETE:
- QUIC_FREE(Event->SEND_COMPLETE.ClientContext);
+ free(Event->SEND_COMPLETE.ClientContext);
printf("[strm][%p] Data sent\n", Stream);
break;
case QUIC_STREAM_EVENT_RECEIVE:
@@ -264,7 +365,7 @@ ClientSend(
goto Error;
}
- SendBufferRaw = (uint8_t*)QUIC_ALLOC_PAGED(sizeof(QUIC_BUFFER) + SendBufferLength);
+ SendBufferRaw = (uint8_t*)malloc(sizeof(QUIC_BUFFER) + SendBufferLength);
if (SendBufferRaw == nullptr) {
printf("SendBuffer allocation failed!\n");
Status = QUIC_STATUS_OUT_OF_MEMORY;
@@ -279,7 +380,7 @@ ClientSend(
if (QUIC_FAILED(Status = MsQuic->StreamSend(Stream, SendBuffer, 1, QUIC_SEND_FLAG_FIN, SendBuffer))) {
printf("StreamSend failed, 0x%x!\n", Status);
- QUIC_FREE(SendBufferRaw);
+ free(SendBufferRaw);
goto Error;
}
@@ -306,8 +407,10 @@ ClientConnectionCallback(
ClientSend(Connection);
break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_TRANSPORT:
+ printf("[conn][%p] Shutdown by transport, 0x%x\n", Connection, Event->SHUTDOWN_INITIATED_BY_TRANSPORT.Status);
+ break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_INITIATED_BY_PEER:
- printf("[conn][%p] Shutdown\n", Connection);
+ printf("[conn][%p] Shutdown by peer, 0x%llu\n", Connection, (unsigned long long)Event->SHUTDOWN_INITIATED_BY_PEER.ErrorCode);
break;
case QUIC_CONNECTION_EVENT_SHUTDOWN_COMPLETE:
printf("[conn][%p] All done\n", Connection);
@@ -328,53 +431,73 @@ ClientConnectionCallback(
return QUIC_STATUS_SUCCESS;
}
+bool
+ClientLoadConfiguration(
+ bool Unsecure
+ )
+{
+ QUIC_SETTINGS Settings{0};
+ Settings.IdleTimeoutMs = IdleTimeoutMs;
+ Settings.IsSet.IdleTimeoutMs = TRUE;
+
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ memset(&CredConfig, 0, sizeof(CredConfig));
+ CredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
+ CredConfig.Flags = QUIC_CREDENTIAL_FLAG_CLIENT;
+ if (Unsecure) {
+ CredConfig.Flags |= QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION;
+ }
+
+ QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+ if (QUIC_FAILED(Status = MsQuic->ConfigurationOpen(Registration, &Alpn, 1, &Settings, sizeof(Settings), nullptr, &Configuration))) {
+ printf("ConfigurationOpen failed, 0x%x!\n", Status);
+ return false;
+ }
+
+ if (QUIC_FAILED(Status = MsQuic->ConfigurationLoadCredential(Configuration, &CredConfig))) {
+ printf("ConfigurationLoadCredential failed, 0x%x!\n", Status);
+ return false;
+ }
+
+ return true;
+}
+
void
RunClient(
_In_ int argc,
_In_reads_(argc) _Null_terminated_ char* argv[]
)
{
+ if (!ClientLoadConfiguration(GetValue(argc, argv, "unsecure"))) {
+ return;
+ }
+
QUIC_STATUS Status;
const char* ResumptionTicketString = nullptr;
HQUIC Connection = nullptr;
- if (QUIC_FAILED(Status = MsQuic->ConnectionOpen(Session, ClientConnectionCallback, nullptr, &Connection))) {
+ if (QUIC_FAILED(Status = MsQuic->ConnectionOpen(Registration, ClientConnectionCallback, nullptr, &Connection))) {
printf("ConnectionOpen failed, 0x%x!\n", Status);
goto Error;
}
- if (TryGetValue(argc, argv, "ticket", &ResumptionTicketString) && ResumptionTicketString != nullptr) {
+ if ((ResumptionTicketString = GetValue(argc, argv, "ticket")) != nullptr) {
uint8_t ResumptionTicket[1024];
- uint16_t TicketLength = (uint16_t)DecodeHexBuffer(ResumptionTicketString, sizeof(ResumptionTicket), ResumptionTicket);
- if (QUIC_FAILED(Status = MsQuic->SetParam(
- Connection,
- QUIC_PARAM_LEVEL_CONNECTION,
- QUIC_PARAM_CONN_RESUMPTION_STATE,
- TicketLength,
- ResumptionTicket))) {
+ uint16_t TicketLength = (uint16_t)DecodeHexBuffer(ResumptionTicketString, sizeof(ResumptionTicket), ResumptionTicket);
+ if (QUIC_FAILED(Status = MsQuic->SetParam(Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_RESUMPTION_STATE, TicketLength, ResumptionTicket))) {
printf("SetParam(QUIC_PARAM_CONN_RESUMPTION_TICKET) failed, 0x%x!\n", Status);
goto Error;
}
}
- if (GetValue(argc, argv, "unsecure")) {
- const uint32_t CertificateValidationFlags = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- if (QUIC_FAILED(Status = MsQuic->SetParam(
- Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS,
- sizeof(CertificateValidationFlags), &CertificateValidationFlags))) {
- printf("SetParam(QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS) failed, 0x%x!\n", Status);
- goto Error;
- }
- }
-
const char* Target;
- if (!TryGetValue(argc, argv, "target", &Target)) {
+ if ((Target = GetValue(argc, argv, "target")) == nullptr) {
printf("Must specify '-target' argument!\n");
goto Error;
}
printf("[conn][%p] Connecting...\n", Connection);
- if (QUIC_FAILED(Status = MsQuic->ConnectionStart(Connection, QUIC_ADDRESS_FAMILY_UNSPEC, Target, UdpPort))) {
+ if (QUIC_FAILED(Status = MsQuic->ConnectionStart(Connection, Configuration, QUIC_ADDRESS_FAMILY_UNSPEC, Target, UdpPort))) {
printf("ConnectionStart failed, 0x%x!\n", Status);
goto Error;
}
@@ -393,23 +516,7 @@ main(
_In_reads_(argc) _Null_terminated_ char* argv[]
)
{
- QuicPlatformSystemLoad();
-
- QUIC_SETTINGS Settings{0};
- Settings.IdleTimeoutMs = IdleTimeoutMs;
- Settings.IsSet.IdleTimeoutMs = TRUE;
- Settings.ServerResumptionLevel = QUIC_SERVER_RESUME_AND_ZERORTT;
- Settings.IsSet.ServerResumptionLevel = TRUE;
- Settings.PeerBidiStreamCount = 1;
- Settings.IsSet.PeerBidiStreamCount = TRUE;
-
QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
- if (QUIC_FAILED(Status = QuicPlatformInitialize())) {
- printf("QuicPlatformInitialize failed, 0x%x!\n", Status);
- QuicPlatformSystemUnload();
- return Status;
- }
-
if (QUIC_FAILED(Status = MsQuicOpen(&MsQuic))) {
printf("MsQuicOpen failed, 0x%x!\n", Status);
goto Error;
@@ -420,13 +527,7 @@ main(
goto Error;
}
- if (QUIC_FAILED(Status = MsQuic->SessionOpen(Registration, sizeof(Settings), &Settings, &Alpn, 1, nullptr, &Session))) {
- printf("SessionOpen failed, 0x%x!\n", Status);
- goto Error;
- }
-
- if (GetValue(argc, argv, "help") ||
- GetValue(argc, argv, "?")) {
+ if (GetValue(argc, argv, "help") || GetValue(argc, argv, "?")) {
PrintUsage();
} else if (GetValue(argc, argv, "client")) {
RunClient(argc, argv);
@@ -439,8 +540,8 @@ main(
Error:
if (MsQuic != nullptr) {
- if (Session != nullptr) {
- MsQuic->SessionClose(Session); // Waits on all connections to be cleaned up.
+ if (Configuration != nullptr) {
+ MsQuic->ConfigurationClose(Configuration);
}
if (Registration != nullptr) {
MsQuic->RegistrationClose(Registration);
@@ -448,8 +549,5 @@ main(
MsQuicClose(MsQuic);
}
- QuicPlatformUninitialize();
- QuicPlatformSystemUnload();
-
return (int)Status;
}
diff --git a/src/tools/spin/spinquic.cpp b/src/tools/spin/spinquic.cpp
index d6a3c34c24..8b67bfd1e2 100644
--- a/src/tools/spin/spinquic.cpp
+++ b/src/tools/spin/spinquic.cpp
@@ -17,7 +17,11 @@
#define QUIC_API_ENABLE_INSECURE_FEATURES 1 // Needed for disabling 1-RTT encryption
#include
-#define ASSERT_ON_FAILURE(x) QUIC_FRE_ASSERT(QUIC_SUCCEEDED(x))
+#define ASSERT_ON_FAILURE(x) \
+ do { \
+ QUIC_STATUS _STATUS; \
+ QUIC_FRE_ASSERT(QUIC_SUCCEEDED((_STATUS = x))); \
+ } while (0)
#define ASSERT_ON_NOT(x) QUIC_FRE_ASSERT(x)
template
@@ -86,8 +90,10 @@ class SpinQuicWatchdog {
static uint64_t StartTimeMs;
static const QUIC_API_TABLE* MsQuic;
static HQUIC Registration;
-static QUIC_SEC_CONFIG* GlobalSecurityConfig;
-static std::vector Sessions;
+static HQUIC ServerConfiguration;
+static std::vector ClientConfigurations;
+static QUIC_BUFFER* Alpns;
+static uint32_t AlpnCount;
const uint32_t MaxBufferSizes[] = { 0, 1, 2, 32, 50, 256, 500, 1000, 1024, 1400, 5000, 10000, 64000, 10000000 };
static const size_t BufferCount = ARRAYSIZE(MaxBufferSizes);
@@ -103,7 +109,6 @@ typedef enum {
SpinQuicAPICallStreamSend,
SpinQuicAPICallStreamShutdown,
SpinQuicAPICallStreamClose,
- SpinQuicAPICallSetParamSession,
SpinQuicAPICallSetParamConnection,
SpinQuicAPICallGetParamConnection,
SpinQuicAPICallGetParamStream,
@@ -250,12 +255,6 @@ QUIC_STATUS QUIC_API SpinQuicHandleConnectionEvent(HQUIC Connection, void * /* C
return QUIC_STATUS_SUCCESS;
}
-void QUIC_API SpinQuicGetSecConfigComplete(_In_opt_ void *Context, _In_ QUIC_STATUS /* Status */, _In_opt_ QUIC_SEC_CONFIG *SecConfig)
-{
- GlobalSecurityConfig = SecConfig;
- QuicEventSet(*(QUIC_EVENT*)Context);
-}
-
QUIC_STATUS QUIC_API SpinQuicServerHandleListenerEvent(HQUIC /* Listener */, void* Context , QUIC_LISTENER_EVENT* Event)
{
auto& Connections = *(LockableVector*)(Context);
@@ -265,8 +264,14 @@ QUIC_STATUS QUIC_API SpinQuicServerHandleListenerEvent(HQUIC /* Listener */, voi
if (!GetRandom(20)) {
return QUIC_STATUS_CONNECTION_REFUSED;
}
- Event->NEW_CONNECTION.SecurityConfig = GlobalSecurityConfig;
MsQuic->SetCallbackHandler(Event->NEW_CONNECTION.Connection, (void*)SpinQuicHandleConnectionEvent, nullptr);
+ QUIC_STATUS Status =
+ MsQuic->ConnectionSetConfiguration(
+ Event->NEW_CONNECTION.Connection,
+ ServerConfiguration);
+ if (QUIC_FAILED(Status)) {
+ return Status;
+ }
auto ctx = new SpinQuicConnection(Event->NEW_CONNECTION.Connection);
if (ctx == nullptr) {
return QUIC_STATUS_OUT_OF_MEMORY;
@@ -325,23 +330,6 @@ struct SetParamHelper {
}
};
-void SpinQuicSetRandomSesssioParam(HQUIC Session)
-{
- SetParamHelper Helper(QUIC_PARAM_LEVEL_SESSION);
- uint8_t TlsTicket[44];
-
- switch (GetRandom(2)) {
- case QUIC_PARAM_SESSION_TLS_TICKET_KEY: // uint8_t[44]
- QuicRandom(sizeof(TlsTicket), TlsTicket);
- Helper.SetPtr(QUIC_PARAM_SESSION_TLS_TICKET_KEY, TlsTicket, sizeof(TlsTicket));
- break;
- default:
- break;
- }
-
- Helper.Apply(Session);
-}
-
void SpinQuicSetRandomConnectionParam(HQUIC Connection)
{
SetParamHelper Helper(QUIC_PARAM_LEVEL_CONNECTION);
@@ -354,48 +342,27 @@ void SpinQuicSetRandomConnectionParam(HQUIC Connection)
break; // TODO - Add support here
case QUIC_PARAM_CONN_REMOTE_ADDRESS: // QUIC_ADDR
break; // Get Only
- case QUIC_PARAM_CONN_IDLE_TIMEOUT: // uint64_t - milliseconds
- Helper.SetUint64(QUIC_PARAM_CONN_IDLE_TIMEOUT, GetRandom(20000));
- break;
- case QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT: // uint16_t
- Helper.SetUint16(QUIC_PARAM_CONN_PEER_BIDI_STREAM_COUNT, (uint16_t)GetRandom(50000));
- break;
- case QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT: // uint16_t
- Helper.SetUint16(QUIC_PARAM_CONN_PEER_UNIDI_STREAM_COUNT, (uint16_t)GetRandom(50000));
- break;
- case QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT: // uint16_t
- break; // Get Only
- case QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT: // uint16_t
+ case QUIC_PARAM_CONN_IDEAL_PROCESSOR: // uint16_t
break; // Get Only
- case QUIC_PARAM_CONN_CLOSE_REASON_PHRASE: // char[]
- Helper.SetPtr(QUIC_PARAM_CONN_CLOSE_REASON_PHRASE, "ABCDEFGHI\x00\x00\x00\x00\x00", 10);
+ case QUIC_PARAM_CONN_SETTINGS: // QUIC_SETTINGS
+ // TODO
break;
case QUIC_PARAM_CONN_STATISTICS: // QUIC_STATISTICS
break; // Get Only
case QUIC_PARAM_CONN_STATISTICS_PLAT: // QUIC_STATISTICS
break; // Get Only
- case QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS: // uint32_t
- Helper.SetUint32(QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION);
- break;
- case QUIC_PARAM_CONN_KEEP_ALIVE: // uint32_t - milliseconds
- Helper.SetUint32(QUIC_PARAM_CONN_KEEP_ALIVE, GetRandom(200));
- break;
- case QUIC_PARAM_CONN_DISCONNECT_TIMEOUT: // uint32_t - milliseconds
- Helper.SetUint32(QUIC_PARAM_CONN_DISCONNECT_TIMEOUT, GetRandom(200));
- break;
- case QUIC_PARAM_CONN_SEND_BUFFERING: // uint8_t (BOOLEAN)
- Helper.SetUint8(QUIC_PARAM_CONN_SEND_BUFFERING, (uint8_t)GetRandom(2));
- break;
- case QUIC_PARAM_CONN_SEND_PACING: // uint8_t (BOOLEAN)
- Helper.SetUint8(QUIC_PARAM_CONN_SEND_PACING, (uint8_t)GetRandom(2));
- break;
case QUIC_PARAM_CONN_SHARE_UDP_BINDING: // uint8_t (BOOLEAN)
Helper.SetUint8(QUIC_PARAM_CONN_SHARE_UDP_BINDING, (uint8_t)GetRandom(2));
break;
- case QUIC_PARAM_CONN_IDEAL_PROCESSOR: // uint16_t
+ case QUIC_PARAM_CONN_LOCAL_BIDI_STREAM_COUNT: // uint16_t
+ break; // Get Only
+ case QUIC_PARAM_CONN_LOCAL_UNIDI_STREAM_COUNT: // uint16_t
break; // Get Only
case QUIC_PARAM_CONN_MAX_STREAM_IDS: // uint64_t[4]
break; // Get Only
+ case QUIC_PARAM_CONN_CLOSE_REASON_PHRASE: // char[]
+ Helper.SetPtr(QUIC_PARAM_CONN_CLOSE_REASON_PHRASE, "ABCDEFGHI\x00\x00\x00\x00\x00", 10);
+ break;
case QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME: // QUIC_STREAM_SCHEDULING_SCHEME
Helper.SetUint32(QUIC_PARAM_CONN_STREAM_SCHEDULING_SCHEME, GetRandom(QUIC_STREAM_SCHEDULING_SCHEME_COUNT));
break;
@@ -407,6 +374,9 @@ void SpinQuicSetRandomConnectionParam(HQUIC Connection)
case QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION: // uint8_t (BOOLEAN)
Helper.SetUint8(QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION, (uint8_t)GetRandom(2));
break;
+ case QUIC_PARAM_CONN_RESUMPTION_STATE: // uint8_t[]
+ // TODO
+ break;
default:
break;
}
@@ -417,7 +387,7 @@ void SpinQuicSetRandomConnectionParam(HQUIC Connection)
const uint32_t ParamCounts[] = {
QUIC_PARAM_GLOBAL_LOAD_BALACING_MODE + 1,
QUIC_PARAM_REGISTRATION_CID_PREFIX + 1,
- QUIC_PARAM_SESSION_TLS_TICKET_KEY + 1,
+ 0,
QUIC_PARAM_LISTENER_STATS + 1,
QUIC_PARAM_CONN_DISABLE_1RTT_ENCRYPTION + 1,
0,
@@ -463,7 +433,7 @@ void Spin(LockableVector& Connections, std::vector* Listeners = nu
QUIC_ADDR sockAddr = { 0 };
QuicAddrSetFamily(&sockAddr, GetRandom(2) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_UNSPEC);
QuicAddrSetPort(&sockAddr, GetRandomFromVector(Settings.Ports));
- MsQuic->ListenerStart(Listener, &sockAddr);
+ MsQuic->ListenerStart(Listener, &Alpns[GetRandom(AlpnCount)], 1, &sockAddr);
}
} else {
for (auto &Listener : *Listeners) {
@@ -487,14 +457,9 @@ void Spin(LockableVector& Connections, std::vector* Listeners = nu
if (ctx == nullptr) continue;
HQUIC Connection;
- HQUIC Session = GetRandomFromVector(Sessions);
- QUIC_STATUS Status = MsQuic->ConnectionOpen(Session, SpinQuicHandleConnectionEvent, ctx, &Connection);
+ QUIC_STATUS Status = MsQuic->ConnectionOpen(Registration, SpinQuicHandleConnectionEvent, ctx, &Connection);
if (QUIC_SUCCEEDED(Status)) {
ctx->Set(Connection);
- if (GetRandom(2)) {
- uint32_t DisableCertValidation = QUIC_CERTIFICATE_FLAG_DISABLE_CERT_VALIDATION;
- MsQuic->SetParam(Connection, QUIC_PARAM_LEVEL_CONNECTION, QUIC_PARAM_CONN_CERT_VALIDATION_FLAGS, sizeof(uint32_t), &DisableCertValidation);
- }
Connections.push_back(Connection);
} else {
delete ctx;
@@ -504,7 +469,8 @@ void Spin(LockableVector& Connections, std::vector* Listeners = nu
case SpinQuicAPICallConnectionStart: {
auto Connection = Connections.TryGetRandom();
BAIL_ON_NULL_CONNECTION(Connection);
- MsQuic->ConnectionStart(Connection, QUIC_ADDRESS_FAMILY_INET, Settings.ServerName, GetRandomFromVector(Settings.Ports));
+ HQUIC Configuration = GetRandomFromVector(ClientConfigurations);
+ MsQuic->ConnectionStart(Connection, Configuration, QUIC_ADDRESS_FAMILY_INET, Settings.ServerName, GetRandomFromVector(Settings.Ports));
break;
}
case SpinQuicAPICallConnectionShutdown: {
@@ -579,11 +545,6 @@ void Spin(LockableVector& Connections, std::vector* Listeners = nu
MsQuic->StreamClose(Stream);
break;
}
- case SpinQuicAPICallSetParamSession: {
- auto Session = GetRandomFromVector(Sessions);
- SpinQuicSetRandomSesssioParam(Session);
- break;
- }
case SpinQuicAPICallSetParamConnection: {
auto Connection = Connections.TryGetRandom();
BAIL_ON_NULL_CONNECTION(Connection);
@@ -639,35 +600,44 @@ QUIC_THREAD_CALLBACK(ServerSpin, Context)
// Setup
//
- auto SelfSignedCertParams = QuicPlatGetSelfSignedCert(QUIC_SELF_SIGN_CERT_USER);
- ASSERT_ON_NOT(SelfSignedCertParams);
+ QUIC_SETTINGS QuicSettings{0};
+ QuicSettings.PeerBidiStreamCount = GetRandom((uint16_t)10);
+ QuicSettings.IsSet.PeerBidiStreamCount = TRUE;
+ QuicSettings.PeerUnidiStreamCount = GetRandom((uint16_t)10);
+ QuicSettings.IsSet.PeerUnidiStreamCount = TRUE;
+ // TODO - Randomize more of the settings.
- QUIC_EVENT Event;
- QuicEventInitialize(&Event, FALSE, FALSE);
ASSERT_ON_FAILURE(
- MsQuic->SecConfigCreate(
+ MsQuic->ConfigurationOpen(
Registration,
- (QUIC_SEC_CONFIG_FLAGS)SelfSignedCertParams->Flags,
- SelfSignedCertParams->Certificate,
- SelfSignedCertParams->Principal,
- &Event,
- SpinQuicGetSecConfigComplete));
- QuicEventWaitForever(Event);
- QuicEventUninitialize(Event);
+ Alpns,
+ AlpnCount,
+ &QuicSettings,
+ sizeof(QuicSettings),
+ nullptr,
+ &ServerConfiguration));
+
+ ASSERT_ON_NOT(ServerConfiguration);
- ASSERT_ON_NOT(GlobalSecurityConfig);
+ auto CredConfig = QuicPlatGetSelfSignedCert(QUIC_SELF_SIGN_CERT_USER);
+ ASSERT_ON_NOT(CredConfig);
+
+ ASSERT_ON_FAILURE(
+ MsQuic->ConfigurationLoadCredential(
+ ServerConfiguration,
+ CredConfig));
std::vector Listeners;
- for (auto &session : Sessions) {
+ for (uint32_t i = 0; i < AlpnCount; ++i) {
for (auto &pt : Settings.Ports) {
HQUIC Listener;
- ASSERT_ON_FAILURE(MsQuic->ListenerOpen(session, SpinQuicServerHandleListenerEvent, &Connections, &Listener));
+ ASSERT_ON_FAILURE(MsQuic->ListenerOpen(Registration, SpinQuicServerHandleListenerEvent, &Connections, &Listener));
QUIC_ADDR sockAddr = { 0 };
QuicAddrSetFamily(&sockAddr, GetRandom(2) ? QUIC_ADDRESS_FAMILY_INET : QUIC_ADDRESS_FAMILY_UNSPEC);
QuicAddrSetPort(&sockAddr, pt);
- ASSERT_ON_FAILURE(MsQuic->ListenerStart(Listener, &sockAddr));
+ ASSERT_ON_FAILURE(MsQuic->ListenerStart(Listener, &Alpns[i], 1, &sockAddr));
Listeners.push_back(Listener);
}
}
@@ -698,8 +668,8 @@ QUIC_THREAD_CALLBACK(ServerSpin, Context)
delete SpinQuicConnection::Get(Connection);
}
- MsQuic->SecConfigDelete(GlobalSecurityConfig);
- QuicPlatFreeSelfSignedCert(SelfSignedCertParams);
+ MsQuic->ConfigurationClose(ServerConfiguration);
+ QuicPlatFreeSelfSignedCert(CredConfig);
QUIC_THREAD_RETURN(0);
}
@@ -870,6 +840,23 @@ main(int argc, char **argv)
ASSERT_ON_FAILURE(MsQuic->RegistrationOpen(&RegConfig, &Registration));
+ Alpns = (QUIC_BUFFER*)malloc(sizeof(QUIC_BUFFER) * SessionCount);
+ ASSERT_ON_NOT(Alpns);
+ AlpnCount = SessionCount;
+
+ for (uint32_t j = 0; j < SessionCount; j++) {
+ Alpns[j].Length = (uint32_t)strlen(Settings.AlpnPrefix);
+ if (j != 0) {
+ Alpns[j].Length++;
+ }
+ Alpns[j].Buffer = (uint8_t*)malloc(Alpns[j].Length);
+ ASSERT_ON_NOT(Alpns[j].Buffer);
+ memcpy(Alpns[j].Buffer, Settings.AlpnPrefix, Alpns[j].Length);
+ if (j != 0) {
+ Alpns[j].Buffer[Alpns[j].Length-1] = (uint8_t)j;
+ }
+ }
+
QUIC_SETTINGS QuicSettings{0};
QuicSettings.PeerBidiStreamCount = GetRandom((uint16_t)10);
QuicSettings.IsSet.PeerBidiStreamCount = TRUE;
@@ -877,32 +864,18 @@ main(int argc, char **argv)
QuicSettings.IsSet.PeerUnidiStreamCount = TRUE;
// TODO - Randomize more of the settings.
- if (SessionCount == 1) {
- QUIC_BUFFER AlpnBuffer;
- AlpnBuffer.Length = (uint32_t)strlen(Settings.AlpnPrefix);
- AlpnBuffer.Buffer = (uint8_t*)Settings.AlpnPrefix;
-
- HQUIC Session;
- ASSERT_ON_FAILURE(MsQuic->SessionOpen(Registration, sizeof(QuicSettings), &QuicSettings, &AlpnBuffer, 1, nullptr, &Session));
- Sessions.push_back(Session);
-
- } else {
- QUIC_BUFFER AlpnBuffer;
- AlpnBuffer.Length = (uint32_t)strlen(Settings.AlpnPrefix) + 1; // You can't have more than 2^8 SessionCount. :)
- AlpnBuffer.Buffer = (uint8_t*)malloc(AlpnBuffer.Length);
- ASSERT_ON_NOT(AlpnBuffer.Buffer);
- memcpy(AlpnBuffer.Buffer, Settings.AlpnPrefix, AlpnBuffer.Length);
+ QUIC_CREDENTIAL_CONFIG CredConfig;
+ QuicZeroMemory(&CredConfig, sizeof(CredConfig));
+ CredConfig.Type = QUIC_CREDENTIAL_TYPE_NONE;
+ CredConfig.Flags =
+ QUIC_CREDENTIAL_FLAG_CLIENT |
+ QUIC_CREDENTIAL_FLAG_NO_CERTIFICATE_VALIDATION; // TODO - Randomize cert validation flag
- for (uint32_t j = 0; j < SessionCount; j++) {
-
- AlpnBuffer.Buffer[AlpnBuffer.Length-1] = (uint8_t)j;
-
- HQUIC Session;
- ASSERT_ON_FAILURE(MsQuic->SessionOpen(Registration, sizeof(QuicSettings), &QuicSettings, &AlpnBuffer, 1, nullptr, &Session));
- Sessions.push_back(Session);
- }
-
- free(AlpnBuffer.Buffer);
+ for (uint32_t j = 0; j < AlpnCount; j++) {
+ HQUIC Configuration;
+ ASSERT_ON_FAILURE(MsQuic->ConfigurationOpen(Registration, &Alpns[j], 1, &QuicSettings, sizeof(QuicSettings), nullptr, &Configuration));
+ ASSERT_ON_FAILURE(MsQuic->ConfigurationLoadCredential(Configuration, &CredConfig));
+ ClientConfigurations.push_back(Configuration);
}
QUIC_THREAD Threads[2];
@@ -944,11 +917,16 @@ main(int argc, char **argv)
// Clean up
//
- while (Sessions.size() > 0) {
- auto Session = Sessions.back();
- Sessions.pop_back();
- MsQuic->SessionClose(Session);
+ while (ClientConfigurations.size() > 0) {
+ auto Configuration = ClientConfigurations.back();
+ ClientConfigurations.pop_back();
+ MsQuic->ConfigurationClose(Configuration);
+ }
+
+ for (uint32_t j = 0; j < AlpnCount; j++) {
+ free(Alpns[j].Buffer);
}
+ free(Alpns);
MsQuic->RegistrationClose(Registration);
Registration = nullptr;