* Remove QUIC_USE_RAW_DATAPATH (logic only)
* move logic to core side
* remove QUIC_USE_RAW_DATAPATH from test
* fix googletest version and add last line
* replace from flag to function call
* fix build error
* fix build/test issues
* implement CxPlatResolveRoute for normal socket
* add Getter of Datapath feature
* fix build issues
* adopt comments
* adopt comment and fix kernel build error
* fix kernel build error
* more fix for kernel build
* Unify datapath
* DatapathTest partially work
* just unify build of both normal socket and xdp
* SOCKET: RAW{...Socket{BASE{addr}}}, DATAPATH: XDP{RAW{DATAPATH*}} <-> DATAPATH{RAW*, BASE{callbacks}}
* tmp
* add preview_feature flag back
* refactoring CxPlatIsRouteReady
* fix linux code check
* adjust func names
* fix comments
* fix IsRouteReady and clean ifdef for _KERNEL_MODE
* kernel build error
* Set RouteResolved for Rx
* fix more tests
* move global definition in header file
* kernel to avoid calling helper function
* move QuitTestIsFeatureSupported after RegistrationOpen
* supress warning
* remove QuitTestIsFeatureSupported from quic_gtest as it doesn't work as expected by dependency of MsQuicLib.Datapath
* remove raw feature check as much as possible
* ifdef for UseQTIP visibility
* tmp
* tmp
* fix merge side effects
* all tests passed
* fix tests in msquicplatformtest
* fix tcp with duonic
* update clog
* use xdp v1
* WIP cleanup
* refactoring CXPLAT_SEND_DATA
* remove mangling and function pointer
* remove unnecessary change in test
* fix comments
* cleanup
* move logic to _winuser
* use dummy raw datapath for uwp build
* dummy raw
* remove double free
* fix comments
* update dummy func
* fix perf run for TCP
* partially fix comments
* fix build error for uwp and remove duplicate variable in raw socket
* set socket before start receiving
* add dummy to clog
* add clog files for dummy
* fix dependency for cargo on windows
* remove dummy clog files
* remove AuxSocket
* add pwsh for cargo setup
* clog fix
* add include dir for cargo
* [WIP] fix cargo and qtip
* fix clog, qtip, rename private raw functions and cleanup
* experiment to avoid write overflow
* use Config->Route->DatapathType for data allocation
* more strict if conditions
* fix comments
* fix uwp build
* fix clog and artifact name
* fix back xdp dependency
* Simply build automation
* missed one
* apply unification to linux and remove QUIC_USE_XDP flag
* move types to any platform
* add abstruction layer for linux
* add clog
* add clog dependencies
* fix CodeCheck issues
* remove xdp specific artifact dir name and always install xdp deps
* add docs
* More Fixes for XDP in automation (mostly OneBranch)
---------
Co-authored-by: Nick Banks <nibanks@microsoft.com>
## Description
QTIP (QUIC over TCP): A variant of QUIC with TCP headers instead of UDP headers. This is different from a TCP tunnel in that it does not use TCP’s retransmission and congestion control logic: it simply uses TCP headers (and a few pure TCP SYN and RST packets with no QUIC payload) to masquerade as TCP traffic.
Client Side:
1. When the initial packet is passed down to raw datapath, we cache the send and send a SYN instead.
2. When SYN+ACK is received, we send an ACK and then resume the initial packet and construct a RST to be sent later (because at this moment we know what sequence and ACK numbers to use).
3. When the first data packet is received, we will know what sequence number and ACK number to use. The ACK number after handshake is always acking the peer's SYN+ACK. The sequence number is always ISN+2, where ISN+1 is reserved for RST. By doing so, all data packets are retransmissions but still in window.
4. When the QUIC connection is shut down, the cached RST is sent.
Server side:
1. Statelessly respond to all SYN/FIN received.
2. When the first data packet is received, it's identical to 3.
* Test perf log grabbing
* Fix
* Try more logging
* Try to see if stopping logs is failing
* Remove copies
* 1 more fix
* Move log stop to its own task
* Add way to force iterations
* Add way to cancel logs
* Remove some unnecessary changes
* Enhance performance logging capabilities
Use the existing log scripts to perform logging, allow perf pipeline to log any supported log profile
* Fixup log profile
* Fix script root
* Fix cleanup
* A bit more logging, mainly to figure out why robocopy failed. And fix local
* Fix remote
* Another client and server fix
* Fix runs
* Disable prints
* Extra new line..
* 1 more log fix
* Remove stub TLS
We were only using stub TLS to be compatible with ASAN. Now that OpenSSL and Asan work together, we can remove stub TLS and reduce our TLS scope.
* Fail build if throughput up test has a 5% or more performance drop
* Allow tests to finish, write failures at end
* Move thesholds to json files
* Fail loopback on regressions to, but use larger threshold
* Fix arguments
* Actual print failures at end
* Fix all negative regressions not counting
* Print more
* Slightly different output
* Fix not triggering
Co-authored-by: Nick Banks <nibanks@microsoft.com>
* Combine loopback and remote into a single script.
By doing this, we make things much easier for PGO
* Fix perf pipeline
* Fix tools lookup
* Update PGO
New performance driver is custom built specifically for performance, rather then using quicping.
Also will be compatible with server mode, and baseline support is part of this commit.
Perf Tests can now run either locally or cross systems. A setup has been created to make this work automatically on AZP.
Additionally, machine name is now published, along with other smaller code changes.