diff --git a/scripts/config_test_vm.psm1 b/scripts/config_test_vm.psm1 index a4c0da626c..29aac55f44 100644 --- a/scripts/config_test_vm.psm1 +++ b/scripts/config_test_vm.psm1 @@ -711,21 +711,44 @@ function Initialize-NetworkInterfaces { [Parameter(Mandatory=$false)][bool] $ExecuteOnVM = $false, [Parameter(Mandatory=$false)] $VMList = @(), [Parameter(Mandatory=$true)][string] $TestWorkingDirectory, - [Parameter(Mandatory=$false)][bool] $VMIsRemote = $false + [Parameter(Mandatory=$false)][bool] $VMIsRemote = $false, + [Parameter(Mandatory=$false)][bool] $KmTracing = $false, + [Parameter(Mandatory=$false)][string] $KmTraceType = "file" ) $commandScriptBlock = { param([Parameter(Mandatory=$true)] [string] $WorkingDirectory, - [Parameter(Mandatory=$true)][string] $LogFileName) + [Parameter(Mandatory=$true)][string] $LogFileName, + [Parameter(Mandatory=$true)][bool] $KmTracing, + [Parameter(Mandatory=$true)][string] $KmTraceType) + $traceStarted = $false Push-Location $WorkingDirectory - Import-Module .\common.psm1 -ArgumentList ($LogFileName) -Force -WarningAction SilentlyContinue - Write-Log "Installing DuoNic driver" - .\duonic.ps1 -Install -NumNicPairs 2 - Set-NetAdapterAdvancedProperty duo? -DisplayName Checksum -RegistryValue 0 - Pop-Location + try { + Import-Module .\common.psm1 -ArgumentList ($LogFileName) -Force -WarningAction SilentlyContinue + if ($KmTracing) { + Import-Module .\tracing_utils.psm1 -ArgumentList ($LogFileName, $WorkingDirectory) -Force -WarningAction SilentlyContinue + Start-WPRTrace -TraceType $KmTraceType -FailOnError + $traceStarted = $true + } + Write-Log "Installing DuoNic driver" + $LASTEXITCODE = 0 + .\duonic.ps1 -Install -NumNicPairs 2 + if ($LASTEXITCODE -ne 0) { + throw "DuoNic installation failed with exit code $LASTEXITCODE." + } + Set-NetAdapterAdvancedProperty duo? -DisplayName Checksum -RegistryValue 0 + } finally { + try { + if ($traceStarted) { + Stop-WPRTrace -FileName "initialize_network_interfaces" + } + } finally { + Pop-Location + } + } } - $argumentList = @($TestWorkingDirectory, $LogFileName) + $argumentList = @($TestWorkingDirectory, $LogFileName, $KmTracing, $KmTraceType) if ($ExecuteOnVM) { # Execute on VMs. diff --git a/scripts/setup_ebpf_cicd_tests.ps1 b/scripts/setup_ebpf_cicd_tests.ps1 index cfb57dd40b..16ae57846f 100644 --- a/scripts/setup_ebpf_cicd_tests.ps1 +++ b/scripts/setup_ebpf_cicd_tests.ps1 @@ -114,6 +114,8 @@ $Job = Start-Job -ScriptBlock { -VMList $VMList ` -TestWorkingDirectory $(if ($ExecuteOnVM) { "C:\ebpf" } else { $WorkingDirectory }) ` -VMIsRemote:$VMIsRemote ` + -KmTracing $KmTracing ` + -KmTraceType $KmTraceType ` -ErrorAction Stop Write-Log "Network interfaces initialized" diff --git a/scripts/tracing_utils.psm1 b/scripts/tracing_utils.psm1 index 9a7591ad23..1560f2c639 100644 --- a/scripts/tracing_utils.psm1 +++ b/scripts/tracing_utils.psm1 @@ -28,7 +28,8 @@ function Start-WPRTrace { [Parameter(Mandatory=$false)] [string] $TraceType = "file", [Parameter(Mandatory=$false)] [string] $WprpFileName = "ebpfforwindows.wprp", [Parameter(Mandatory=$false)] [string] $TracingProfileName = "EbpfForWindows-Networking", - [Parameter(Mandatory=$false)] [int] $TimeoutSeconds = 60 + [Parameter(Mandatory=$false)] [int] $TimeoutSeconds = 60, + [Parameter(Mandatory=$false)] [switch] $FailOnError ) try { @@ -58,9 +59,15 @@ function Start-WPRTrace { Write-Log "Successfully started trace" } else { Write-Log "Failed to start trace with exit code $exitCode" + if ($FailOnError) { + throw "Failed to start WPR trace with exit code $exitCode." + } } } catch { Write-Log "Exception starting WPR trace: $_" -ForegroundColor Red + if ($FailOnError) { + throw + } } }