MsQuic v2.5.0
What's Changed
Breaking Changes
- Renamed "openssl" build flags to "quictls" to better represent it's using the quictls fork
- No Run-time Breaking changes
Notable Changes
- Beta Windows XDP Support
- Multiple Receive API Support
- Refactored the Event Queue abstraction to support External App-driven execution
- Support exposing Handshake TTL to application
- Support setting TypeOfService/TrafficClass on connections
- Support flag to enable not setting ideal processor on worker threads
- Support Thread Affinity for Execution Config
- Support for New Listener Callback for DoS Mode
- Support app-owned receive buffers
- Support Connection Pool API over XDP
- Support for both Qtip and UDP simultaneously
- Prunable Pool Allocator to garbage collect lookaside list memory
- Align XDP Queues with RSS Better
- Increase MaximumDepth of lookaside lists to 1024 to improve performance
- Expose TLS Group through MsQuic API
- Added RttVariance to connection statistics
- Lots of Rust API improvements
- Various improvements for OneBranch (internal) builds
- Lots of automation fixes and improvements
- Various improvements to secnetperf
- Documentation improvements
Full PR List
- Fix Artifact Upload for Recv Fuzzing Tests by @nibanks in #4429
- Multiple Receive API Support by @nibanks in #4182
- Add instructions for publishing Linux packages by @csujedihy in #4430
- add sleep to flush unnecesaly operations (test fix) by @ami-GS in #4432
- Implement support for Exp. Boost + Refactor secnetperf.ps1 for better usability. by @ProjectsByJackHe in #4423
- Fix package distribution. Specify OS explicitly by @ami-GS in #4434
- remove unnecessary dependencies by @ami-GS in #4438
- Fix log permission to upload by linux XDP by @ami-GS in #4437
- Fix HPS test on WSK by @ProjectsByJackHe in #4440
- Wrap StreamMultiReceive by preview feature by @ami-GS in #4441
- Fix azure pipeline build by @ami-GS in #4444
- Lock OperQ before checking content by @ami-GS in #4446
- Add ref option to workflow dispatch by @ProjectsByJackHe in #4454
- Delete Prepare Machine and Checkout from Linux Package Testing by @liveans in #4456
- Publish package to more distros and refactoring by @ami-GS in #4455
- Make rpm package for x86_64 by @ami-GS in #4459
- Add option to configure TCP execution context by @ProjectsByJackHe in #4458
- Fix the Enums for the WPA Plugin by @nibanks in #4461
- set include_dest value in #4460
- Fix Time64Distro Packaging on GH Actions by @liveans in #4463
- Update WPA Plugin Stream Lifetime Table by @nibanks in #4467
- Remove invalid characters from logfile names on non-Windows by @anrossi in #4469
- Integrate Cross Platform Linux Packaging Tester by @liveans in #4466
- Socket Errors are Asynchronous by @nibanks in #4483
- Revert CancelDatapathIo Call Order by @nibanks in #4485
- Implement LowLat mode in TCP by @ProjectsByJackHe in #4465
- Refactoring Azure pipeline for publishing package by @ami-GS in #4464
- Handle error from RawDataPathInitialize by @ami-GS in #4385
- Log QUIC_TLS_SECRETS on all TestConnections and write to disk on cleanup by @anrossi in #4349
- Use Rundown Protection for TCP Send Completions by @nibanks in #4510
- Avoid treat atomic alignment warning as error for Android X86 by @st-jliu in #4487
- Return void for CxPlatSocketSend by @nibanks in #4516
- Add flag to not set ideal proc on worker threads by @ThadHouse in #4511
- Make GetParam return INVALID_STATE error when TLS has been cleaned up by @anrossi in #4518
- Treat CxPlatWorker as a full object by @ThadHouse in #4492
- Correctly set output in_pktinfo on unix platforms by @ThadHouse in #4524
- CxPlatTimespecToUs:Microsecond time conversion overflow on 32-bit unix platforms by @noah-hwang in #4529
- Fix kqueue CSPLAT_SQE Type by @ThadHouse in #4527
- Disable port sharing mechanisms when running in single processor mode by @ThadHouse in #4528
- Change public headers to support msh3 by @talregev in #4525
- Update WPA Plugin Installation Steps by @nibanks in #4530
- Do not exit gracefully in error cases by @ProjectsByJackHe in #4488
- Fix test failures from #4518 by @anrossi in #4519
- Fix ETW Manifest Typo by @nibanks in #4532
- Prunable Pool Allocator by @nibanks in #4517
- Add a method to reject a TCP connection by @ThadHouse in #4536
- Add global internal param to get default datapath worker pool by @ThadHouse in #4535
- Fill out remote and local addresses on TCP server connection by @ThadHouse in #4537
- Fix Linux Send Complete Status by @nibanks in #4538
- Improve Thread Creation Logic by @nibanks in #4531
- Better Support for Disabling Pool Allocations by @nibanks in #4539
- Set TCP listener created sockets to non blocking by @ThadHouse in #4541
- Remove Unnecessary Unit Conversion by @nibanks in #4543
- Set SO_REUSEADDR on epoll tcp listener sockets by @ThadHouse in #4544
- Fix .NET containers by @liveans in #4545
- Change the CXPLAT LARGE IO BUFFER SIZE to 0xFFE3 on unix platforms. by @noah-hwang in #4556
- Use Private Nuget Feed for OneBranch by @nibanks in #4557
- Zero out memory from PacketNumber in QuicBindingPreprocessPacket by @nibanks in #4560
- Don't Access Volatile Variables Directly by @nibanks in #4561
- Add Alpine packaging and testing github action workflow by @liveans in #4554
- Update Release Docs by @nibanks in #4572
- Update Down Level Tests to Latest Release Versions by @nibanks in #4573
- Publish NuGet Packages Automatically by @nibanks in #4576
- Fix typo from #4576 by @nibanks in #4582
- Add prereqs to publishing alpine package docs by @liveans in #4584
- Add Helper Complete Jobs by @nibanks in #4585
- Align XDP Queues with RSS Better by @nibanks in #4484
- Support for SecNetPerf Variables to be in Units of CPU Count by @nibanks in #4588
- trigger netperf when xdp json changes by @mtfriesen in #4591
- Move
quic_callback
to msquic by @ProjectsByJackHe in #4594 - add barrier missing between producer submit and needpoke check by @mtfriesen in #4593
- Max RPS NetPerf Test by @nibanks in #4589
- Remove the L from unevaluated string literals. by @BillyONeal in #4609
- simplify export include dir cmake code by @talregev in #4575
- Update Alpine Release Docs by @liveans in #4617
- Fix crash issue on Samsung phone A217M when send big payload size by @URNOTCharlotte in #4621
- Locate
mc.exe
at configuration time by @redbaron in #4623 - Delegate build environment configuration with QUIC_EXTERNAL_TOOLCHAIN by @redbaron in #4625
- Add quic_callback as a netperf dep by @ProjectsByJackHe in #4626
- Don't Share Previous IRQL for Dispatch RW Locks by @nibanks in #4632
- Kernel Assert Callbacks at PASSIVE by @nibanks in #4631
- Update MacOS version as macos-12 was deprecated. by @ami-GS in #4645
- Update Execution Docs by @nibanks in #4640
- Support Thread Affinity for Execution Config by @nibanks in #4614
- Improve version deployment documentation by @anrossi in #4646
- export platform by @talregev in #4574
- Expose TTL (on handshake) to applications by @ProjectsByJackHe in #4602
- Generate DotNet for new Statistics field (TTL) by @ProjectsByJackHe in #4651
- Extract common member variables by @ami-GS in #4656
- freeing pIfTable later for potential memory leak by @ami-GS in #4655
- Remove hardcoded endpoint by @ami-GS in #4657
- merge winkernel and dummy datapath by @ami-GS in #4650
- Standard SecNetPerf Scenarios by @nibanks in #4607
- Enable Raw datapath from kernel mode test by @ami-GS in #4669
- Pass Through Disable AIA Flag by @nibanks in #4674
- Publish packages for Fedora 41 by @sillyotter in #4686
- Add wbemuuid dependency for external test by @talregev in #4687
- Fix OneBranch Build of msquictest by @nibanks in #4688
- Update test-down-level.yml for new Releases by @nibanks in #4689
- Replacing panics with
Result
returns, and adds platform-specific status codes by @masa-koz in #4690 - Refactor: Add namespace, enable sanitize builds by @talregev in #4692
- Update Alpine Release doc by @liveans in #4699
- potential memory leak without setting Status by @ami-GS in #4702
- Restrict MaxOperationsPerDrain to Greater Than Zero by @nibanks in #4706
- Add alias by @talregev in #4704
- Add feature flags for static builds by @masa-koz in #4691
- Run fmt and clippy for rust code by @youyuanwu in #4712
- Add conversion method for Addr by @masa-koz in #4716
- added unique pointer for connection by @gaurav2699 in #4718
- Changes to trigger wan perf test run manually by @vgmahajanshetty in #4719
- Change ci that it can run from other repos by @talregev in #4703
- Add repo var to all other ci jobs by @talregev in #4721
- Use global API table instead of each handle's having table ptr by @masa-koz in #4708
- Simplify cmake config chainloading by @dg0yt in #4727
- Export msquic include install dir by @dg0yt in #4725
- Add missing event structures by @masa-koz in #4731
- Fix Path Classifiers in CodeQL YML by @nibanks in #4733
- Add preview API feature by @masa-koz in #4730
- Refactor lib.rs by @masa-koz in #4729
- Updated ACK_FREQUENCY according to draft-ietf-quic-ack-frequency-10 by @gaurav2699 in #4670
- Add schannel feature by @masa-koz in #4735
- Event Queue Completion Refactor by @nibanks in #4732
- Fix priority operation flaky test by @ami-GS in #4615
- Auto generate rust bindings using rust bindgen by @youyuanwu in #4723
- More use of CMAKE_INSTALL_<...>DIR by @dg0yt in #4738
- Provide namespaced CMake targets by @dg0yt in #4737
- Possibility for datagrams to be dropped when not able to send by @iiztp in #4320
- Fix comparing SYSTEM_PROCESSOR with win32. by @BillyONeal in #4374
- [Expose TTL Follow up PR] move version logic to platform_xyz instead of datapath by @ProjectsByJackHe in #4740
- Implement Error and ErrorCode for Rust by @youyuanwu in #4743
- suppress invalid-unevaluated-string for AppleClang 16 by @wkgcass in #4744
- Disable Matrix Fail Fast for Cargo Action by @nibanks in #4745
- Added support for using UCRT nuget package by @gaurav2699 in #4759
- Rust: Migrate to use ffi QUIC_API_TABLE by @youyuanwu in #4756
- Update override image tag for stress CI by @ProjectsByJackHe in #4769
- Rust: Rename QUIC_ERROR to QUIC_STATUS by @youyuanwu in #4765
- Change the value of MaximumDepth of lookaside list to 1024 to improve performance by @vgmahajanshetty in #4771
- Replace all stale refs by @ProjectsByJackHe in #4773
- Delete .NET 8.0 from pipeline by @liveans in #4775
- Add netperf capability to collect CPU traces on Azure by @ProjectsByJackHe in #4774
- Fix wrong instruction in sample.md by @TKONIY in #4792
- Rust: Rename Error to Status by @youyuanwu in #4791
- datapath_winuser: query RioDispatch only if we are using Rio by @jianye-chen in #4793
- Relax TLS Unit Test Checks by @nibanks in #4797
- Add lab cpu traces by @ProjectsByJackHe in #4798
- Add support for setting TypeOfService/TrafficClass on connections by @anrossi in #4757
- Correctly initialize the ip address when setting QUIC_ADDR to the loopback address by @sm-msft in #4794
- Optimize searching for packets in the LostPackets list to see if they… by @vgmahajanshetty in #4806
- added oldnames.lib in test files by @gaurav2699 in #4805
- Remove ubuntu-20.04 from GitHub Actions by @nibanks in #4808
- Rust: ConnectionEvent enum by @youyuanwu in #4786
- Consume XDP v1.1 Release by @ami-GS in #4652
- Require powershell 7.2 for scripts susceptible to be run manually by @guhetier in #4811
- Updates for Kernel Solution for 32-bit Builds by @nibanks in #4816
- Fix Release-Build Failure on Debian Bookworm by @ddritzenhoff in #4828
- Remove Older, Unsupported Release by @nibanks in #4817
- Rust: StreamEvent enum by @youyuanwu in #4815
- Add a mode to the receive buffer to handle external buffers by @guhetier in #4758
- Rust: ListenerEvent enum by @youyuanwu in #4831
- Add option to specify test filters on workflow dispatch by @ProjectsByJackHe in #4833
- changed kernel solution from x86 to win32 by @gaurav2699 in #4847
- Added QUIC_API to test and tools code by @gaurav2699 in #4850
- Remove Extra Keep Alive set in ConnectionStart by @anrossi in #4849
- Win32 apicall by @gaurav2699 in #4851
- Rust: Refactor GetParam by @youyuanwu in #4853
- Rust: BufferRef type by @youyuanwu in #4838
- Update windbg and etw plugins by @guhetier in #4863
- Ignore documentation in code coverage by @guhetier in #4837
- Rust: Support preview apis in ffi generated code by @youyuanwu in #4859
- Receive buffer documentation by @guhetier in #4836
- Disable Android on 24.04 by @nibanks in #4869
- Rust: Settings type by @youyuanwu in #4839
- Initialize processor info memory to prevent garbage values by @nibanks in #4871
- Rust: Move rust code to a single folder by @youyuanwu in #4858
- Fix Windows Loader Flags by @nibanks in #4883
- Allow non-System32 DLL Loads for Sanitizer Builds by @nibanks in #4886
- Key Update Crash on Allocation Failure by @nibanks in #4447
- Wait for Dumps by @nibanks in #4887
- Optimize QuicStreamSetUpdateMaxStreams by @guhetier in #4852
- Upload logs on cancellation as well by @ProjectsByJackHe in #4891
- Add New Listener Callback for DoS Mode by @vgmahajanshetty in #4868
- Add "delay" and "delayType" options to secnetperf tool by @sm-msft in #4807
- task_3717_DotNetChanges: Changes in CS files by @vgmahajanshetty in #4893
- Rust: RegistrationConfig and CredentialConfig types by @youyuanwu in #4881
- Add app-owned buffers user documentation by @guhetier in #4872
- Fix Some Synchronization Issues in Receive Fuzzer by @nibanks in #4894
- Add support for MsQuic Logging on Azure Netperf by @ProjectsByJackHe in #4915
- Rust: Safe Api for callbacks by @youyuanwu in #4882
- Rust: Update cargo edition and dependencies by @youyuanwu in #4919
- Enable Android on 24.04 with openssl3 by @vgmahajanshetty in #4916
- Onboard ws2025 Tests by @nibanks in #4898
- Rust: Implement various bitflags enums by @youyuanwu in #4918
- Enable Linux Interop Testing by @nibanks in #4925
- Document usage of stream priority set param by @ProjectsByJackHe in #4921
- Refactor CxPlat Pool Abstraction by @nibanks in #4929
- Add Linux Release Tests by @nibanks in #4934
- Rust: Enable server client test on nix by @youyuanwu in #4936
- Move Pools to Global Per Proc by @nibanks in #4935
- Add XDP Code Coverage Support by @nibanks in #4945
- Avoid reuse of a global buffer between test cases by @guhetier in #4937
- Implement Connection Pool API by @anrossi in #4832
- Fix flakiness in ConnectionPriorityTest3 by @guhetier in #4946
- Update send buffering documentation by @guhetier in #4947
- Avoid calling QuicSendWriteFrames whith only the path challenge flag by @guhetier in #4949
- Document Supported Architectures by @nibanks in #4954
- Rust: Support linking pre-installed msquic lib by @youyuanwu in #4950
- Add support for both Qtip and UDP traffic for Server Listeners. by @ProjectsByJackHe in #4803
- Fix data corruption in receive buffer by @guhetier in #4956
- Update README.md with a "reach out" message by @guhetier in #4926
- Add QUIC stream event documentation and other event related doc updates by @sm-msft in #4960
- Add Cibir tests to Connection Pool tests by @anrossi in #4952
- Rust: Change open api signature for handles by @youyuanwu in #4962
- Refactor State Isolation into Partitions by @nibanks in #4943
- Add documentation for QTIP in Settings/QUIC Settings by @ProjectsByJackHe in #4961
- Update docs and gitignore after publishing Alpine package from v2.4.8 by @ManickaP in #4971
- Add log level parameter to BVT workflow and Log Certutil errors by @anrossi in #4970
- Epoll TCP accept load balancing and code clean up by @csujedihy in #4977
- Avoid Batching of Packets with Different Keys by @vgmahajanshetty in #4973
- Rust: Fix rust ci build by @youyuanwu in #4979
- Update documentation to clarify API ordering constraints by @guhetier in #4967
- Rust: Add get stream id API by @youyuanwu in #4978
- Update StreamShutdown documentation by @imorlxs in #4984
- Change Formatting of QUIC Version Trace by @nibanks in #4986
- Disable Parallel Builds for Rust on Windows by @nibanks in #4988
- Update Release Docs for Cargo Publish by @nibanks in #4989
- Add ConnectionOpenInPartition by @nibanks in #4987
- Increase Kernel Test Timeout to 120 Minutes by @nibanks in #4991
- RecvBuffer simplifications [1/N] by @guhetier in #4895
- Fix non-Preview Builds by @nibanks in #4998
- Document the lifetime of the QUIC_BUFFER array in receive events by @guhetier in #5000
- Try An Environmental Variable to Disable Rust Parallel Builds on Windows by @nibanks in #4999
- Fix secnetperf calling some cxplat functions twice by @csujedihy in #5001
- Publish a PR comment when rust bindings need to be updated by @guhetier in #4992
- Print out when test cases are skipped by @anrossi in #5002
- Fix a race condition in TCP epoll code by @csujedihy in #4993
- Update build documentation by @mtfriesen in #5008
- Temporarily Disable the Flaky ConnectValidClientCertificate Test on windows-2025 GitHub Runner by @nibanks in #5009
- Fix a double free when secnetperf statically linking to msquic by @csujedihy in #5004
- Hotfix: add support for building on ubuntu 20.04 by @ProjectsByJackHe in #5010
- Update build-reuse-unix.yml by @ProjectsByJackHe in #5012
- Fix a memory corruption in secnetperf by @csujedihy in #5014
- Refactor Platform Worker Pool Initialization by @nibanks in #4990
- Prevent duplicate definitions of CXPLAT_DBG_ASSERT by @nhorman in #5016
- Missing QUIC_SUCCEEDED in secnetperf main by @csujedihy in #5013
- Disable SIGPIPE signal on epoll TCP send by @csujedihy in #5017
- Refactor TCP Security Config for Reuse on Client Connections by @nibanks in #5015
- Follow up to event documentation updates by @sm-msft in #4969
- Delete TCP C++ Copy/Move Functions by @nibanks in #5022
- Fix Socket Context Initialize Code Paths by @nibanks in #5021
- Sum Throughput Rates Across Streams/Connections by @nibanks in #5023
- Set linger socket option to prevent TIME_WAIT for HPS scenario to work repeatedly by @csujedihy in #5026
- Introduce breaking change to inform users of openssl->quictls naming changes by @nhorman in #4985
- Rust: disable cmake-rs --parallel option on windows by @youyuanwu in #5033
- Fix the QUIC_HANDSHAKE_INFO Test to Allow for Future Versions to Grow Size by @nibanks in #5032
- Print connections and stream number for more useful throughput data by @imorlxs in #5037
- Avoid passing incompatible argument to ninja in build.ps1 by @mtfriesen in #5038
- Remove Support for quictls v1.1 by @nibanks in #5031
- Few mscodehub Pipeline Cleanups by @nibanks in #5039
- Shutdown Connections on QuicTestHandshakeSpecificLossPatterns Exit by @nibanks in #5025
- Fix Recent ADO YAML Break by @nibanks in #5041
- Updates the Ubuntu 22.04 Docker File Dependency by @nibanks in #5019
- A Few More ADO Clean Ups by @nibanks in #5043
- Additional ADO Subpressions for quictls by @nibanks in #5044
- Remove quictls UWP Nuget Package Download by @nibanks in #5045
- Fix Recent BabelTrace Issues on Ubuntu by @nibanks in #5047
- More ADO NuGet Pipeline Fixes by @nibanks in #5046
- RecvBuffer simplifications [2/N] by @guhetier in #4975
- Always use host silo for ETW registration by @csujedihy in #5049
- Remove Harden Runner by @anrossi in #5055
- Prevent the receive completion operation queued if unnecessary by @masa-koz in #4900
- Global Execution Context Renames by @nibanks in #5056
- Update Down Level Tests to Latest by @nibanks in #5060
- Expose TLS Group through MsQuic API by @nibanks in #5030
- Randomize Base Address in Kernel Projects by @nibanks in #5063
- Increase Retry Limit for Key/CID Update Tests by @nibanks in #5067
- Revert Recent Large Retry by @nibanks in #5068
- Add liburing to ubuntu 22.04 and 24.04 Docker images by @mtfriesen in #5069
- Clean up the Ubuntu build excludes by @nibanks in #5066
- RecvBuffer simplifications [3/N] by @guhetier in #5062
- gamecore: allow non-system32 DLLs to be loaded by @jianye-chen in #5075
- Allow update-sidecar to run on newer framework versions by @mtfriesen in #5076
- Upload rust binding diff as an artifact by @guhetier in #5077
- Added RttVariance to connection statistics. by @jarnovanderlinden in #5070
- Refactor Global Execution Config Flags by @nibanks in #5059
- Remove duplicate inline.c definitions for clang/Linux by @mtfriesen in #5074
- Double free bugfix in Secnetperf by @ProjectsByJackHe in #5081
- Readme Tweaks by @nibanks in #5083
- External Execution Interface by @nibanks in #4616
- Update XDP to latest prerelease, dedupdupduplicate xdp install/uninstall by @mtfriesen in #5085
- Update quictls to 3.1.7 on main branch by @anrossi in #5082
- always collect Get-NetView in secnetperf by @mtfriesen in #5088
- Add XDP Interop Test by @nibanks in #5089
- Fix Rebind for Raw Datapath by @nibanks in #5090
- Refactor Receive Fuzzer by @nibanks in #5087
- Remove DataIndication Queuing from Kernel Datapath by @nibanks in #5091
- Revert to XDP version 1.1 (official) by @mtfriesen in #5096
- Match casing in Dockerfile FROM commands by @anrossi in #5099
- Fix SecNetPerf SendBuffering Config by @nibanks in #5100
New Contributors
- @noah-hwang made their first contribution in #4529
- @BillyONeal made their first contribution in #4609
- @URNOTCharlotte made their first contribution in #4621
- @redbaron made their first contribution in #4623
- @masa-koz made their first contribution in #4690
- @youyuanwu made their first contribution in #4712
- @vgmahajanshetty made their first contribution in #4719
- @dg0yt made their first contribution in #4727
- @iiztp made their first contribution in #4320
- @wkgcass made their first contribution in #4744
- @TKONIY made their first contribution in #4792
- @sm-msft made their first contribution in #4794
- @guhetier made their first contribution in #4811
- @ddritzenhoff made their first contribution in #4828
- @imorlxs made their first contribution in #4984
- @nhorman made their first contribution in #5016
Full Changelog: v2.4.11...v2.5.0