collect state before and after

Catalin-Emil Fetoiu committed Apr 5, 2024 at 15:09 UTC 7c6b84f25551e714895de017dc9181dc1c8c23c1
1 file changed +103 -92
diagnostics/collect-networking-logs.ps1
+103 -92
@@ -5,6 +5,104 @@ Param (
5 [switch]$RestartWslReproMode = $false
6 )
7
8 +function Collect-WindowsNetworkState {
9 +
10 + param (
11 + $ReproStep
12 + )
13 +
14 + # Collect host networking state relevant for WSL
15 + # Using a try/catch for commands below, as some of them do not exist on all OS versions
16 +
17 + try
18 + {
19 + Get-NetAdapter -includeHidden | select Name,ifIndex,NetLuid,InterfaceGuid,Status,MacAddress,MtuSize,InterfaceType,Hidden,HardwareInterface,ConnectorPresent,MediaType,PhysicalMediaType | Out-File -FilePath "$folder/Get-NetAdapter_$ReproStep.log" -Append
20 + }
21 + catch {}
22 +
23 + try
24 + {
25 + Get-NetIPConfiguration -All -Detailed | Out-File -FilePath "$folder/Get-NetIPConfiguration_$ReproStep.log" -Append
26 + }
27 + catch {}
28 +
29 + try
30 + {
31 + Get-NetRoute | Out-File -FilePath "$folder/Get-NetRoute_$ReproStep.log" -Append
32 + }
33 + catch {}
34 +
35 + try
36 + {
37 + Get-NetFirewallHyperVVMCreator | Out-File -FilePath "$folder/Get-NetFirewallHyperVVMCreator_$ReproStep.log" -Append
38 + }
39 + catch {}
40 +
41 + try
42 + {
43 + Get-NetFirewallHyperVVMSetting -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVVMSetting_ActiveStore_$ReproStep.log" -Append
44 + }
45 + catch {}
46 +
47 + try
48 + {
49 + Get-NetFirewallHyperVProfile -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVProfile_ActiveStore_$ReproStep.log" -Append
50 + }
51 + catch {}
52 +
53 + try
54 + {
55 + Get-NetFirewallHyperVRule -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVRule_ActiveStore_$ReproStep.log" -Append
56 + }
57 + catch {}
58 +
59 + try
60 + {
61 + Get-NetFirewallRule -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallRule_ActiveStore_$ReproStep.log" -Append
62 + }
63 + catch {}
64 +
65 + try
66 + {
67 + Get-NetFirewallProfile -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallProfile_ActiveStore_$ReproStep.log" -Append
68 + }
69 + catch {}
70 +
71 + try
72 + {
73 + Get-NetFirewallHyperVPort | Out-File -FilePath "$folder/Get-NetFirewallHyperVPort_$ReproStep.log" -Append
74 + }
75 + catch {}
76 +
77 + try
78 + {
79 + & hnsdiag.exe list all 2>&1 > $folder/hnsdiag_list_all_"$ReproStep".log
80 + }
81 + catch {}
82 +
83 + try
84 + {
85 + & hnsdiag.exe list endpoints -df 2>&1 > $folder/hnsdiag_list_endpoints_"$ReproStep".log
86 + }
87 + catch {}
88 +
89 + try
90 + {
91 + foreach ($port in Get-NetFirewallHyperVPort)
92 + {
93 + & vfpctrl.exe /port $port.PortName /get-port-state 2>&1 > "$folder/vfp-port-$($port.PortName)-get-port-state_$ReproStep.log"
94 + & vfpctrl.exe /port $port.PortName /list-rule 2>&1 > "$folder/vfp-port-$($port.PortName)-list-rule_$ReproStep.log"
95 + }
96 + }
97 + catch {}
98 +
99 + try
100 + {
101 + & vfpctrl.exe /list-vmswitch-port 2>&1 > $folder/vfpctrl_list_vmswitch_port_"$ReproStep".log
102 + }
103 + catch {}
104 +}
105 +
106 $folder = "WslNetworkingLogs-" + (Get-Date -Format "yyyy-MM-dd_HH-mm-ss")
107 mkdir -p $folder
108
@@ -41,9 +139,11 @@ if (Test-Path $wslconfig)
139 Copy-Item $wslconfig $folder
140 }
141
44 -# Collect Linux network state before the repro
142 +# Collect Linux & Windows network state before the repro
143 & wsl.exe -u root -e $networkingBashScript 2>&1 > $folder/linux_network_configuration_before.log
144
145 +Collect-WindowsNetworkState "before_repro"
146 +
147 if ($RestartWslReproMode)
148 {
149 # The WSL HNS network is created once per boot. Resetting it to collect network creation logs.
@@ -153,99 +253,10 @@ finally
253 wpr.exe -stop $folder/logs.etl 2>&1 >> $wprOutputLog
254 }
255
156 -# Collect Linux network state after the repro
256 +# Collect Linux & Windows network state after the repro
257 & wsl.exe -u root -e $networkingBashScript 2>&1 > $folder/linux_network_configuration_after.log
258
159 -# Collect host networking state relevant for WSL
160 -# Using a try/catch for commands below, as some of them do not exist on all OS versions
161 -
162 -try
163 -{
164 - Get-NetAdapter -includeHidden | select Name,ifIndex,NetLuid,InterfaceGuid,Status,MacAddress,MtuSize,InterfaceType,Hidden,HardwareInterface,ConnectorPresent,MediaType,PhysicalMediaType | Out-File -FilePath "$folder/Get-NetAdapter.log" -Append
165 -}
166 -catch {}
167 -
168 -try
169 -{
170 - Get-NetIPConfiguration -All -Detailed | Out-File -FilePath "$folder/Get-NetIPConfiguration.log" -Append
171 -}
172 -catch {}
173 -
174 -try
175 -{
176 - Get-NetRoute | Out-File -FilePath "$folder/Get-NetRoute.log" -Append
177 -}
178 -catch {}
179 -
180 -try
181 -{
182 - Get-NetFirewallHyperVVMCreator | Out-File -FilePath "$folder/Get-NetFirewallHyperVVMCreator.log" -Append
183 -}
184 -catch {}
185 -
186 -try
187 -{
188 - Get-NetFirewallHyperVVMSetting -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVVMSetting_ActiveStore.log" -Append
189 -}
190 -catch {}
191 -
192 -try
193 -{
194 - Get-NetFirewallHyperVProfile -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVProfile_ActiveStore.log" -Append
195 -}
196 -catch {}
197 -
198 -try
199 -{
200 - Get-NetFirewallHyperVRule -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallHyperVRule_ActiveStore.log" -Append
201 -}
202 -catch {}
203 -
204 -try
205 -{
206 - Get-NetFirewallRule -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallRule_ActiveStore.log" -Append
207 -}
208 -catch {}
209 -
210 -try
211 -{
212 - Get-NetFirewallProfile -PolicyStore ActiveStore | Out-File -FilePath "$folder/Get-NetFirewallProfile_ActiveStore.log" -Append
213 -}
214 -catch {}
215 -
216 -try
217 -{
218 - Get-NetFirewallHyperVPort | Out-File -FilePath "$folder/Get-NetFirewallHyperVPort.log" -Append
219 -}
220 -catch {}
221 -
222 -try
223 -{
224 - & hnsdiag.exe list all 2>&1 > $folder/hnsdiag_list_all.log
225 -}
226 -catch {}
227 -
228 -try
229 -{
230 - & hnsdiag.exe list endpoints -df 2>&1 > $folder/hnsdiag_list_endpoints.log
231 -}
232 -catch {}
233 -
234 -try
235 -{
236 - foreach ($port in Get-NetFirewallHyperVPort)
237 - {
238 - & vfpctrl.exe /port $port.PortName /get-port-state 2>&1 > "$folder/vfp-port-$($port.PortName)-get-port-state.log"
239 - & vfpctrl.exe /port $port.PortName /list-rule 2>&1 > "$folder/vfp-port-$($port.PortName)-list-rule.log"
240 - }
241 -}
242 -catch {}
243 -
244 -try
245 -{
246 - & vfpctrl.exe /list-vmswitch-port 2>&1 > $folder/vfpctrl_list_vmswitch_port.log
247 -}
248 -catch {}
259 +Collect-WindowsNetworkState "after_repro"
260
261 try
262 {