2021-06-15 18:44:43 +03:00
|
|
|
# Copyright (c) Microsoft Corporation
|
|
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
##
|
|
|
|
## Initialize parameters
|
|
|
|
##
|
2022-07-08 22:58:56 +03:00
|
|
|
$source_directory="."
|
2022-04-21 01:59:17 +03:00
|
|
|
|
|
|
|
# The following files should be installed on all platforms.
|
2022-07-08 22:58:56 +03:00
|
|
|
[System.Collections.ArrayList]$built_runtime_files=@(
|
2022-04-21 01:59:17 +03:00
|
|
|
"bpftool.exe",
|
2023-02-22 04:34:44 +03:00
|
|
|
"bpftool.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"ebpf-all.guid",
|
|
|
|
"ebpf-printk.guid",
|
|
|
|
"EbpfApi.dll",
|
2023-02-22 04:34:44 +03:00
|
|
|
"EbpfApi.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"EbpfCore.sys",
|
2023-02-22 04:34:44 +03:00
|
|
|
"EbpfCore.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"ebpfforwindows.wprp",
|
|
|
|
"ebpfnetsh.dll",
|
2023-02-22 04:34:44 +03:00
|
|
|
"ebpfnetsh.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"ebpfsvc.exe",
|
2023-02-22 04:34:44 +03:00
|
|
|
"ebpfsvc.pdb",
|
2022-07-08 22:58:56 +03:00
|
|
|
"export_program_info.exe",
|
2023-02-22 04:34:44 +03:00
|
|
|
"export_program_info.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"MSVCP140D.dll",
|
|
|
|
"NetEbpfExt.sys",
|
2023-02-22 04:34:44 +03:00
|
|
|
"NetEbpfExt.pdb",
|
2022-07-01 01:08:02 +03:00
|
|
|
"net-ebpf-ext.guid",
|
2022-04-21 01:59:17 +03:00
|
|
|
"ucrtbased.dll",
|
|
|
|
"VCRUNTIME140_1D.dll",
|
|
|
|
"VCRUNTIME140D.dll")
|
|
|
|
|
2022-07-08 22:58:56 +03:00
|
|
|
[System.Collections.ArrayList]$source_msi_files=@(
|
2022-09-28 20:07:57 +03:00
|
|
|
"ebpf-for-windows-{version}.msi")
|
2022-07-08 22:58:56 +03:00
|
|
|
|
|
|
|
[System.Collections.ArrayList]$source_script_files=@(
|
|
|
|
"scripts\common.psm1",
|
|
|
|
"scripts\install_ebpf.psm1",
|
|
|
|
"scripts\setup-ebpf.ps1")
|
|
|
|
|
2022-04-21 01:59:17 +03:00
|
|
|
# The following files are only needed for testing and debugging.
|
2022-07-08 22:58:56 +03:00
|
|
|
[System.Collections.ArrayList]$built_test_files=@(
|
2022-04-21 01:59:17 +03:00
|
|
|
"api_test.exe",
|
|
|
|
"api_test.pdb",
|
|
|
|
"bindmonitor.o",
|
|
|
|
"bindmonitor_ringbuf.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"bindmonitor_ringbuf_um.dll",
|
|
|
|
"bindmonitor_ringbuf_um.pdb",
|
|
|
|
"bindmonitor_ringbuf.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"bindmonitor_tailcall.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"bindmonitor_tailcall_um.dll",
|
|
|
|
"bindmonitor_tailcall_um.pdb",
|
|
|
|
"bindmonitor_tailcall.sys",
|
|
|
|
"bindmonitor_um.dll",
|
|
|
|
"bindmonitor_um.pdb",
|
|
|
|
"bindmonitor.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"bpf.o",
|
|
|
|
"bpf_call.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"bpf_call_um.dll",
|
|
|
|
"bpf_call_um.pdb",
|
|
|
|
"bpf_call.sys",
|
|
|
|
"bpf_um.dll",
|
|
|
|
"bpf_um.pdb",
|
|
|
|
"bpf.sys",
|
|
|
|
"bpftool_tests.exe",
|
|
|
|
"bpftool_tests.pdb",
|
2023-04-26 00:00:44 +03:00
|
|
|
"cgroup_count_connect4.o",
|
|
|
|
"cgroup_count_connect4_um.dll",
|
|
|
|
"cgroup_count_connect4_um.pdb",
|
|
|
|
"cgroup_count_connect4.sys",
|
|
|
|
"cgroup_count_connect6.o",
|
|
|
|
"cgroup_count_connect6_um.dll",
|
|
|
|
"cgroup_count_connect6_um.pdb",
|
|
|
|
"cgroup_count_connect6.sys",
|
2023-05-02 03:50:34 +03:00
|
|
|
"cgroup_mt_connect4.o",
|
|
|
|
"cgroup_mt_connect4_um.dll",
|
|
|
|
"cgroup_mt_connect4_um.pdb",
|
|
|
|
"cgroup_mt_connect4.sys",
|
|
|
|
"cgroup_mt_connect6.o",
|
|
|
|
"cgroup_mt_connect6_um.dll",
|
|
|
|
"cgroup_mt_connect6_um.pdb",
|
|
|
|
"cgroup_mt_connect6.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"cgroup_sock_addr.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"cgroup_sock_addr_um.dll",
|
|
|
|
"cgroup_sock_addr_um.pdb",
|
|
|
|
"cgroup_sock_addr.sys",
|
2023-03-16 02:48:01 +03:00
|
|
|
"cgroup_sock_addr2.o",
|
|
|
|
"cgroup_sock_addr2_um.dll",
|
|
|
|
"cgroup_sock_addr2_um.pdb",
|
|
|
|
"cgroup_sock_addr2.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"decap_permit_packet.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"decap_permit_packet_um.dll",
|
|
|
|
"decap_permit_packet_um.pdb",
|
|
|
|
"decap_permit_packet.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"divide_by_zero.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"divide_by_zero_um.dll",
|
|
|
|
"divide_by_zero_um.pdb",
|
|
|
|
"divide_by_zero.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"droppacket.o",
|
2023-02-22 04:34:44 +03:00
|
|
|
"droppacket.sys",
|
2022-04-23 03:13:46 +03:00
|
|
|
"droppacket_um.dll",
|
|
|
|
"droppacket_um.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"droppacket_unsafe.o",
|
2023-04-26 00:00:44 +03:00
|
|
|
"ebpf_stress_tests_km.exe",
|
|
|
|
"ebpf_stress_tests_km.pdb",
|
|
|
|
"ebpf_stress_tests_um.exe",
|
|
|
|
"ebpf_stress_tests_um.pdb",
|
2023-02-22 04:34:44 +03:00
|
|
|
"empty_um.dll",
|
2022-04-21 01:59:17 +03:00
|
|
|
"encap_reflect_packet.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"encap_reflect_packet_um.dll",
|
|
|
|
"encap_reflect_packet_um.pdb",
|
|
|
|
"encap_reflect_packet.sys",
|
2023-02-22 04:34:44 +03:00
|
|
|
"invalid_maps1_um.dll",
|
|
|
|
"invalid_maps2_um.dll",
|
|
|
|
"invalid_maps3_um.dll",
|
|
|
|
"invalid_helpers_um.dll",
|
2022-04-21 01:59:17 +03:00
|
|
|
"map.o",
|
|
|
|
"map_in_map.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"map_in_map_um.dll",
|
|
|
|
"map_in_map_um.pdb",
|
|
|
|
"map_in_map.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"map_in_map_v2.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"map_in_map_v2_um.dll",
|
|
|
|
"map_in_map_v2_um.pdb",
|
|
|
|
"map_in_map_v2.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"map_reuse.o",
|
|
|
|
"map_reuse_2.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"map_reuse_2_um.dll",
|
|
|
|
"map_reuse_2_um.pdb",
|
|
|
|
"map_reuse_2.sys",
|
|
|
|
"map_reuse_um.dll",
|
|
|
|
"map_reuse_um.pdb",
|
|
|
|
"map_reuse.sys",
|
|
|
|
"map_um.dll",
|
|
|
|
"map_um.pdb",
|
|
|
|
"map.sys",
|
2022-05-19 05:12:31 +03:00
|
|
|
"pidtgid.o",
|
|
|
|
"pidtgid.sys",
|
2023-04-07 03:12:44 +03:00
|
|
|
"port_leak.exe",
|
|
|
|
"port_leak.pdb",
|
2022-06-10 02:17:39 +03:00
|
|
|
"port_quota.exe",
|
|
|
|
"port_quota.pdb",
|
2022-04-21 01:59:17 +03:00
|
|
|
"printk.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"printk_legacy.o",
|
2023-02-22 04:34:44 +03:00
|
|
|
"printk_legacy.sys",
|
2022-04-23 03:13:46 +03:00
|
|
|
"printk_legacy_um.dll",
|
|
|
|
"printk_legacy_um.pdb",
|
|
|
|
"printk_um.dll",
|
|
|
|
"printk_um.pdb",
|
|
|
|
"printk.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"printk_unsafe.o",
|
|
|
|
"reflect_packet.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"reflect_packet_um.dll",
|
|
|
|
"reflect_packet_um.pdb",
|
|
|
|
"reflect_packet.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"run_tests.bat",
|
|
|
|
"sample_ebpf_ext.sys",
|
|
|
|
"sample_ext_app.exe",
|
|
|
|
"sample_ext_app.pdb",
|
|
|
|
"socket_tests.exe",
|
|
|
|
"socket_tests.pdb",
|
|
|
|
"sockops.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"sockops_um.dll",
|
|
|
|
"sockops_um.pdb",
|
|
|
|
"sockops.sys",
|
|
|
|
"tail_call.o",
|
|
|
|
"tail_call_bad.o",
|
|
|
|
"tail_call_bad_um.dll",
|
|
|
|
"tail_call_bad_um.pdb",
|
|
|
|
"tail_call_bad.sys",
|
|
|
|
"tail_call_map.o",
|
|
|
|
"tail_call_map_um.dll",
|
|
|
|
"tail_call_map_um.pdb",
|
|
|
|
"tail_call_map.sys",
|
|
|
|
"tail_call_multiple.o",
|
|
|
|
"tail_call_multiple_um.dll",
|
|
|
|
"tail_call_multiple_um.pdb",
|
|
|
|
"tail_call_multiple.sys",
|
|
|
|
"tail_call_um.dll",
|
|
|
|
"tail_call_um.pdb",
|
|
|
|
"tail_call.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"test_sample_ebpf.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"test_sample_ebpf_um.dll",
|
|
|
|
"test_sample_ebpf_um.pdb",
|
|
|
|
"test_sample_ebpf.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"test_utility_helpers.o",
|
2022-04-23 03:13:46 +03:00
|
|
|
"test_utility_helpers_um.dll",
|
|
|
|
"test_utility_helpers_um.pdb",
|
|
|
|
"test_utility_helpers.sys",
|
2022-04-21 01:59:17 +03:00
|
|
|
"unit_tests.exe",
|
2022-09-19 19:16:45 +03:00
|
|
|
"unit_tests.pdb",
|
|
|
|
"xdp_tests.exe",
|
|
|
|
"xdp_tests.pdb")
|
2022-04-21 01:59:17 +03:00
|
|
|
|
2022-07-08 22:58:56 +03:00
|
|
|
[System.Collections.ArrayList]$built_files= $built_runtime_files
|
|
|
|
[System.Collections.ArrayList]$source_files= $source_script_files
|
2021-06-15 18:44:43 +03:00
|
|
|
$destination_directory="C:\Temp"
|
|
|
|
$error.clear()
|
|
|
|
$vm="Windows 10 dev environment"
|
|
|
|
|
|
|
|
##
|
|
|
|
## Process command-line options
|
|
|
|
##
|
|
|
|
foreach ($arg in $args) {
|
|
|
|
switch -regex ($arg) {
|
|
|
|
{ @("-h", "--help") -contains $_ }
|
|
|
|
{
|
|
|
|
Write-Host @'
|
|
|
|
|
|
|
|
OVERVIEW:
|
|
|
|
|
|
|
|
Copies eBPF framework files into a temp directory on the local machine or into a VM
|
|
|
|
|
2023-02-02 02:13:25 +03:00
|
|
|
$ deploy-ebpf [--dir="..."] [-h] [-l[=path]] [-m] [-t] [--vm="..."]
|
2021-06-15 18:44:43 +03:00
|
|
|
|
|
|
|
OPTIONS:
|
2022-07-08 22:58:56 +03:00
|
|
|
--dir Specifies the source directory path, which defaults to "."
|
2021-06-15 18:44:43 +03:00
|
|
|
-h, --help Print this help message.
|
2022-07-08 22:58:56 +03:00
|
|
|
-m, --msi Copies MSI instead of individual files
|
2021-06-15 18:44:43 +03:00
|
|
|
-l, --local Copies files to the local temp directory instead of into a VM
|
2022-04-21 01:59:17 +03:00
|
|
|
-t, --test Includes files needed only for testing and debugging
|
2021-06-15 18:44:43 +03:00
|
|
|
--vm Specifies the VM name, which defaults to "Windows 10 dev environment"
|
|
|
|
|
|
|
|
'@
|
|
|
|
exit 0
|
|
|
|
}
|
2022-07-08 22:58:56 +03:00
|
|
|
"--dir=*"
|
|
|
|
{
|
|
|
|
$source_directory=($arg -split "=")[1];
|
|
|
|
break
|
|
|
|
}
|
2021-06-15 18:44:43 +03:00
|
|
|
"--vm=*"
|
|
|
|
{
|
|
|
|
$vm=($arg -split "=")[1];
|
|
|
|
break
|
|
|
|
}
|
2023-02-02 02:13:25 +03:00
|
|
|
"^(?:-l|--list)(?:=(.+))?$"
|
2021-06-15 18:44:43 +03:00
|
|
|
{
|
2023-02-02 02:13:25 +03:00
|
|
|
if ($matches[1]) {
|
|
|
|
$destination_directory = $matches[1]
|
|
|
|
}
|
2021-06-15 18:44:43 +03:00
|
|
|
Clear-Variable -name vm
|
|
|
|
break
|
|
|
|
}
|
2022-07-08 22:58:56 +03:00
|
|
|
{ @("-m", "--msi") -contains $_ }
|
|
|
|
{
|
|
|
|
$built_files= @()
|
|
|
|
$source_directory= "build\setup"
|
|
|
|
$source_files= $source_msi_files
|
|
|
|
break
|
|
|
|
}
|
2022-04-21 01:59:17 +03:00
|
|
|
{ @("-t", "--test") -contains $_ }
|
|
|
|
{
|
2022-07-08 22:58:56 +03:00
|
|
|
$built_files= $built_runtime_files + $built_test_files
|
2022-04-21 01:59:17 +03:00
|
|
|
break
|
|
|
|
}
|
2021-06-15 18:44:43 +03:00
|
|
|
default
|
|
|
|
{
|
|
|
|
Write-Error "unknown option: $arg"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-28 20:07:57 +03:00
|
|
|
$build_directory="$PSScriptRoot"
|
2021-06-15 18:44:43 +03:00
|
|
|
if ($vm -eq $null) {
|
|
|
|
Write-Host "Copying files from `"$build_directory`" to `"$destination_directory`""
|
|
|
|
|
|
|
|
foreach ( $file in $built_files ) {
|
|
|
|
$source_path = "$build_directory\$file"
|
|
|
|
$destination_path = "$destination_directory\$file"
|
2023-02-02 02:13:25 +03:00
|
|
|
$destination_full_directory = Split-Path $destination_path
|
2022-07-08 22:58:56 +03:00
|
|
|
Write-Host " $source_path -> $destination_path"
|
2023-02-02 02:13:25 +03:00
|
|
|
if (! (Test-Path $destination_full_directory)) {
|
|
|
|
New-Item -Type Directory $destination_full_directory -ErrorAction Stop | Write-Verbose
|
2021-06-15 18:44:43 +03:00
|
|
|
}
|
2023-02-02 02:13:25 +03:00
|
|
|
Copy-Item "$source_path" -Destination "$destination_path" -ErrorAction Stop
|
2021-06-15 18:44:43 +03:00
|
|
|
}
|
2022-07-08 22:58:56 +03:00
|
|
|
|
|
|
|
Write-Host "Copying files from `"$source_directory`" to `"$destination_directory`""
|
|
|
|
foreach ( $file in $source_files ) {
|
|
|
|
$source_path = "$source_directory\$file"
|
|
|
|
$destination_path = "$destination_directory\$file"
|
2023-02-02 02:13:25 +03:00
|
|
|
$destination_full_directory = Split-Path $destination_path
|
2022-07-08 22:58:56 +03:00
|
|
|
Write-Host " $source_path -> $destination_path"
|
2023-02-02 02:13:25 +03:00
|
|
|
if (! (Test-Path $destination_full_directory)) {
|
|
|
|
New-Item -Type Directory $destination_full_directory -ErrorAction Stop | Write-Verbose
|
2022-07-08 22:58:56 +03:00
|
|
|
}
|
2023-02-02 02:13:25 +03:00
|
|
|
Copy-Item "$source_path" -Destination "$destination_path" -ErrorAction Stop
|
2021-06-15 18:44:43 +03:00
|
|
|
}
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
|
|
$principal = New-Object Security.Principal.WindowsPrincipal $identity
|
|
|
|
if (! $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
|
|
|
|
Write-Host "This command must be run as Administrator to deploy files into a VM"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2022-10-25 00:35:41 +03:00
|
|
|
Enable-VMIntegrationService -VMName $vm -Name "Guest Service Interface"
|
2021-06-15 18:44:43 +03:00
|
|
|
if (! $?) {
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
Write-Host "Copying files from `"$build_directory`" to `"$destination_directory`" in VM `"$vm`"..."
|
|
|
|
|
|
|
|
foreach ( $file in $built_files ) {
|
|
|
|
$source_path = "$build_directory\$file"
|
|
|
|
$destination_path = "$destination_directory\$file"
|
2022-07-08 22:58:56 +03:00
|
|
|
Write-Host " $source_path -> $destination_path"
|
2021-06-15 18:44:43 +03:00
|
|
|
Copy-VMFile "$vm" -SourcePath "$source_path" -DestinationPath "$destination_path" -CreateFullPath -FileSource Host -Force
|
|
|
|
if (! $?) {
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-07-08 22:58:56 +03:00
|
|
|
Write-Host "Copying files from `"$source_directory`" to `"$destination_directory`" in VM `"$vm`"..."
|
|
|
|
|
|
|
|
foreach ( $file in $source_files ) {
|
|
|
|
$source_path = "$source_directory\$file"
|
|
|
|
$destination_path = "$destination_directory\$file"
|
|
|
|
Write-Host " $source_path -> $destination_path"
|
|
|
|
Copy-VMFile "$vm" -SourcePath "$source_path" -DestinationPath "$destination_path" -CreateFullPath -FileSource Host -Force
|
|
|
|
if (! $?) {
|
|
|
|
exit 1
|
|
|
|
}
|
2021-06-15 18:44:43 +03:00
|
|
|
}
|