diff --git a/sysutils/Makefile b/sysutils/Makefile index 66f118d826cf..1fcf8d5a8940 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -1,1596 +1,1597 @@ COMMENT = System utilities SUBDIR += 3dm SUBDIR += 3mux SUBDIR += 44bsd-more SUBDIR += 915resolution SUBDIR += LPRng SUBDIR += LPRngTool SUBDIR += R-cran-fs SUBDIR += R-cran-processx SUBDIR += R-cran-ps SUBDIR += R-cran-xopen SUBDIR += UEFITool SUBDIR += abduco SUBDIR += abgx360 SUBDIR += accounts-qml-module SUBDIR += accountsservice SUBDIR += acerhdf-kmod SUBDIR += acfgfs SUBDIR += acltool SUBDIR += acpi_call SUBDIR += acpica-tools SUBDIR += acts SUBDIR += adtool SUBDIR += afbinit SUBDIR += afflib SUBDIR += afio SUBDIR += agedu SUBDIR += ah-tty SUBDIR += aimage SUBDIR += aird SUBDIR += alfio SUBDIR += am-utils SUBDIR += amazon-ssm-agent SUBDIR += amdmsrtweaker SUBDIR += amrstat SUBDIR += amtc SUBDIR += anacron SUBDIR += and SUBDIR += android-file-transfer SUBDIR += android-file-transfer-qt5 SUBDIR += angrysearch SUBDIR += ansible SUBDIR += ansible-iocage SUBDIR += ansible-kld SUBDIR += ansible-sshjail SUBDIR += ansible-sysrc SUBDIR += ansible2 SUBDIR += anvil SUBDIR += apache-mesos SUBDIR += apachetop SUBDIR += apcctrl SUBDIR += apcpwr SUBDIR += apcupsd SUBDIR += aptly SUBDIR += arcconf SUBDIR += archivemount SUBDIR += ascpu SUBDIR += asfsm SUBDIR += asmctl SUBDIR += asmem SUBDIR += asmon SUBDIR += asusoled SUBDIR += atf-fvp SUBDIR += atf-master SUBDIR += atf-rk3328 SUBDIR += atf-rk3399 SUBDIR += atf-sun50i_a64 SUBDIR += atf-sun50i_h6 SUBDIR += atitvout SUBDIR += atop SUBDIR += auto-admin SUBDIR += autojump SUBDIR += automount SUBDIR += automounter SUBDIR += autopsy SUBDIR += avfs SUBDIR += azure-agent SUBDIR += b2sum SUBDIR += b43-fwcutter SUBDIR += backuppc SUBDIR += backuppc-devel SUBDIR += backuppc4 SUBDIR += backupuser SUBDIR += bacula11-client SUBDIR += bacula11-client-static SUBDIR += bacula11-docs SUBDIR += bacula11-server SUBDIR += bacula9-client SUBDIR += bacula9-client-static SUBDIR += bacula9-docs SUBDIR += bacula9-server SUBDIR += baloo-widgets SUBDIR += bamf SUBDIR += bareos-client SUBDIR += bareos-server SUBDIR += bareos-traymonitor SUBDIR += bareos17-client SUBDIR += bareos17-client-static SUBDIR += bareos17-server SUBDIR += bareos18-client SUBDIR += bareos18-server SUBDIR += bareos18-traymonitor SUBDIR += bareos19-client SUBDIR += bareos19-server SUBDIR += bareos19-traymonitor SUBDIR += barrier SUBDIR += bashtop SUBDIR += bastille SUBDIR += batmon SUBDIR += batterycat SUBDIR += battmond SUBDIR += battray SUBDIR += bchunk SUBDIR += beadm SUBDIR += beadm-devel SUBDIR += beats6 SUBDIR += beats7 SUBDIR += bfs SUBDIR += bhyve-firmware SUBDIR += bhyve-rc + SUBDIR += bhyve+ SUBDIR += biosfont SUBDIR += bkpupsd SUBDIR += bksh SUBDIR += boot-extract SUBDIR += boxbackup-devel SUBDIR += bpytop SUBDIR += brasero SUBDIR += brename SUBDIR += brut SUBDIR += bsd-splash-changer SUBDIR += bsdconfig SUBDIR += bsdcrashtar SUBDIR += bsdfan SUBDIR += bsdhwmon SUBDIR += bsdinfo SUBDIR += bsdisks SUBDIR += bsdstats SUBDIR += bstack SUBDIR += btsixad SUBDIR += bulk_extractor SUBDIR += burp SUBDIR += burp-devel SUBDIR += busybox SUBDIR += bvm SUBDIR += byobu SUBDIR += catfish SUBDIR += cbsd SUBDIR += cbsd-mq-api SUBDIR += cbsd-mq-router SUBDIR += ccd2iso SUBDIR += cciss_vol_status SUBDIR += ccze SUBDIR += cdargs SUBDIR += cdbkup SUBDIR += cdeploy SUBDIR += cdircmp SUBDIR += cdrdao SUBDIR += cdrkit SUBDIR += cdroot SUBDIR += cdrtools SUBDIR += cfengine SUBDIR += cfengine-devel SUBDIR += cfengine-masterfiles SUBDIR += cfengine-masterfiles-devel SUBDIR += cfengine-masterfiles310 SUBDIR += cfengine-masterfiles311 SUBDIR += cfengine-masterfiles315 SUBDIR += cfengine-masterfiles316 SUBDIR += cfengine-masterfiles317 SUBDIR += cfengine-masterfiles318 SUBDIR += cfengine310 SUBDIR += cfengine311 SUBDIR += cfengine315 SUBDIR += cfengine316 SUBDIR += cfengine317 SUBDIR += cfengine318 SUBDIR += chaoskube SUBDIR += checkrestart SUBDIR += chezmoi SUBDIR += chgrep SUBDIR += choria SUBDIR += chyves SUBDIR += cinnamon-control-center SUBDIR += cinnamon-settings-daemon SUBDIR += ciso SUBDIR += ciso-maker SUBDIR += ck4up SUBDIR += clean SUBDIR += clockspeed SUBDIR += clone SUBDIR += clonehdd SUBDIR += cloudabi-utils SUBDIR += clsync SUBDIR += cluster-glue SUBDIR += cmdwatch SUBDIR += cmocka SUBDIR += cmockery2 SUBDIR += cmogstored SUBDIR += cmospwd SUBDIR += colorize SUBDIR += conan SUBDIR += confctl SUBDIR += conky SUBDIR += conky-awesome SUBDIR += conman SUBDIR += consolehm SUBDIR += consolekit2 SUBDIR += consul SUBDIR += consul-alerts SUBDIR += consul-replicate SUBDIR += consul_exporter SUBDIR += container-diff SUBDIR += containerd SUBDIR += contractor SUBDIR += copytape SUBDIR += coreos-ct SUBDIR += coreutils SUBDIR += cpdup SUBDIR += cpu-x SUBDIR += cpuburn SUBDIR += cpuid SUBDIR += cpuid2cpuflags SUBDIR += cpulimit SUBDIR += cpupdate SUBDIR += cramfs SUBDIR += crashme SUBDIR += crate SUBDIR += cronic SUBDIR += cronolog SUBDIR += cronolog-devel SUBDIR += ctop SUBDIR += currtime SUBDIR += cw SUBDIR += czkawka SUBDIR += daa2iso SUBDIR += dae SUBDIR += daemonize SUBDIR += daemontools SUBDIR += daemontools-encore SUBDIR += daggy SUBDIR += damager SUBDIR += dar SUBDIR += datadog-agent SUBDIR += datadog-integrations SUBDIR += dateutils SUBDIR += dc3dd SUBDIR += dcfldd SUBDIR += dd_rescue SUBDIR += ddpt SUBDIR += ddrescue SUBDIR += debhelper SUBDIR += debootstrap SUBDIR += deltarpm SUBDIR += deltup SUBDIR += desktop-installer SUBDIR += detox SUBDIR += devcpu-data SUBDIR += devstat SUBDIR += dfc SUBDIR += di SUBDIR += digdag SUBDIR += dim SUBDIR += dirdiff SUBDIR += direnv SUBDIR += direvent SUBDIR += dirvish SUBDIR += discus SUBDIR += diskcheckd SUBDIR += diskimage-tools SUBDIR += diskonaut SUBDIR += diskscrub SUBDIR += disktype SUBDIR += dmg2img SUBDIR += dmidecode SUBDIR += dnf SUBDIR += docker SUBDIR += docker-compose SUBDIR += docker-credential-pass SUBDIR += docker-machine SUBDIR += docker-registry SUBDIR += doctl SUBDIR += doinkd SUBDIR += dolly SUBDIR += downtimed SUBDIR += dsbbatmon SUBDIR += dsbdriverd SUBDIR += dsblogoutmgr SUBDIR += dsbmc SUBDIR += dsbmc-cli SUBDIR += dsbmd SUBDIR += dsbsu SUBDIR += dsbwrtsysctl SUBDIR += dtc SUBDIR += dtpstree SUBDIR += dtrace-toolkit SUBDIR += du2ps SUBDIR += dua-cli SUBDIR += duf SUBDIR += duff SUBDIR += dunst SUBDIR += dupd SUBDIR += duplicity SUBDIR += duply SUBDIR += dupmerge SUBDIR += dvd+rw-tools SUBDIR += dvdbackup SUBDIR += dvdimagecmp SUBDIR += dvdisaster SUBDIR += dvdvideo SUBDIR += dvtm SUBDIR += dwatch SUBDIR += dwatch-gource SUBDIR += dwatch-json SUBDIR += dwatch-pwsnoop SUBDIR += e2fsprogs SUBDIR += e2tools SUBDIR += ebsnvme-id SUBDIR += ec2-scripts SUBDIR += eclat SUBDIR += edid-decode SUBDIR += edk2 SUBDIR += eject SUBDIR += eksctl SUBDIR += endian SUBDIR += enteruser SUBDIR += entr SUBDIR += env4801 SUBDIR += envconsul SUBDIR += epazote SUBDIR += etc_os-release SUBDIR += etcmerge SUBDIR += etcupdate SUBDIR += ethname SUBDIR += evhz SUBDIR += evisum SUBDIR += evtviewer SUBDIR += exa SUBDIR += exfat-utils SUBDIR += extipl SUBDIR += ezjail SUBDIR += f2 SUBDIR += f3 SUBDIR += facter SUBDIR += fanout SUBDIR += fatback SUBDIR += fcode-utils SUBDIR += fconfig SUBDIR += fcron SUBDIR += fd SUBDIR += fdupes SUBDIR += fetchlog SUBDIR += ffs2recov SUBDIR += file SUBDIR += filedupe SUBDIR += filelight SUBDIR += fileprune SUBDIR += fileschanged SUBDIR += filetype SUBDIR += filevercmp SUBDIR += filewatcherd SUBDIR += finfo SUBDIR += firstboot-freebsd-update SUBDIR += firstboot-growfs SUBDIR += firstboot-pkgs SUBDIR += flasher SUBDIR += flashrom SUBDIR += flexbackup SUBDIR += flock SUBDIR += flog SUBDIR += flowgger SUBDIR += fluent-bit SUBDIR += fluxengine SUBDIR += fonteditfs SUBDIR += foremost SUBDIR += fortunelock SUBDIR += fpart SUBDIR += fpc-syslog SUBDIR += fpc-users SUBDIR += fpc-utmp SUBDIR += fpc-uuid SUBDIR += frand SUBDIR += freebsd-snapshot SUBDIR += freecolor SUBDIR += freedt SUBDIR += freeipmi SUBDIR += freesbie SUBDIR += froxlor SUBDIR += fsbackup SUBDIR += fsc SUBDIR += fsearch SUBDIR += fselect SUBDIR += fstyp SUBDIR += fswatch-mon SUBDIR += ftwin SUBDIR += fusefs-afuse SUBDIR += fusefs-bindfs SUBDIR += fusefs-chironfs SUBDIR += fusefs-cryptofs SUBDIR += fusefs-curlftpfs SUBDIR += fusefs-encfs SUBDIR += fusefs-exfat SUBDIR += fusefs-ext2 SUBDIR += fusefs-funionfs SUBDIR += fusefs-fusepak SUBDIR += fusefs-gitfs SUBDIR += fusefs-hfsfuse SUBDIR += fusefs-httpdirfs SUBDIR += fusefs-httpfs SUBDIR += fusefs-ifuse SUBDIR += fusefs-jmtpfs SUBDIR += fusefs-libs SUBDIR += fusefs-libs3 SUBDIR += fusefs-lkl SUBDIR += fusefs-mhddfs SUBDIR += fusefs-mp3fs SUBDIR += fusefs-ntfs SUBDIR += fusefs-ntfs-compression SUBDIR += fusefs-pod SUBDIR += fusefs-rar2fs SUBDIR += fusefs-s3backer SUBDIR += fusefs-s3fs SUBDIR += fusefs-sandboxfs SUBDIR += fusefs-securefs SUBDIR += fusefs-simple-mtpfs SUBDIR += fusefs-smbnetfs SUBDIR += fusefs-sqlfs SUBDIR += fusefs-squashfuse SUBDIR += fusefs-sshfs SUBDIR += fusefs-unionfs SUBDIR += fusefs-unreliablefs SUBDIR += fusefs-webdavfs SUBDIR += fusefs-xfuse SUBDIR += fusefs-zip SUBDIR += fvcool SUBDIR += fwup SUBDIR += g15daemon SUBDIR += gaffitter SUBDIR += ganglia-monitor-core SUBDIR += ganglia-webfrontend SUBDIR += gapcmon SUBDIR += garcon SUBDIR += gather SUBDIR += gconf-editor SUBDIR += gdisk SUBDIR += gdmap SUBDIR += gdu SUBDIR += genisoimage SUBDIR += geomWatch SUBDIR += getdelta SUBDIR += geteltorito SUBDIR += getssl SUBDIR += gigolo SUBDIR += gitwatch SUBDIR += gkfreq SUBDIR += gkleds2 SUBDIR += gkrellflynn SUBDIR += gkrellm-trayicons SUBDIR += gkrellm2 SUBDIR += gkrelltop SUBDIR += gksu SUBDIR += glogg SUBDIR += glow SUBDIR += gnome-control-center SUBDIR += gnome-power-manager SUBDIR += gnome-settings-daemon SUBDIR += gnome-system-monitor SUBDIR += gnome_subr SUBDIR += go-btfs SUBDIR += go-wtf SUBDIR += goaccess SUBDIR += goawk SUBDIR += gobi_loader SUBDIR += gomi SUBDIR += gomplate SUBDIR += google-compute-engine-oslogin SUBDIR += gotop SUBDIR += gpart SUBDIR += graffer SUBDIR += graveman SUBDIR += graylog SUBDIR += grub2-bhyve SUBDIR += grub2-efi SUBDIR += grub2-pcbsd SUBDIR += gsh SUBDIR += gsmartcontrol SUBDIR += gstopd SUBDIR += gstreamer1-plugins-cdio SUBDIR += gtk-imonc SUBDIR += hardlink SUBDIR += hare SUBDIR += hared SUBDIR += hatop SUBDIR += hcloud SUBDIR += hdrecover SUBDIR += healthd SUBDIR += heirloom SUBDIR += helm SUBDIR += helmfile SUBDIR += herbe SUBDIR += hexpeek SUBDIR += hextools SUBDIR += hexyl SUBDIR += hfsexplorer SUBDIR += hfsutils SUBDIR += hid-tools SUBDIR += highlnk SUBDIR += hilite SUBDIR += host-setup SUBDIR += hostctl SUBDIR += hourglass SUBDIR += hpacucli SUBDIR += hploscripts SUBDIR += hptcli SUBDIR += hs-cputype SUBDIR += hstr SUBDIR += htop SUBDIR += httplog SUBDIR += hw-probe SUBDIR += hwstat SUBDIR += i2c-tools SUBDIR += i7z SUBDIR += iat SUBDIR += iichid SUBDIR += immortal SUBDIR += incron SUBDIR += inotify-tools SUBDIR += installwatch SUBDIR += intel-nvmupdate SUBDIR += intel-pcm SUBDIR += intel-pcm-devel SUBDIR += intel-undervolt SUBDIR += inxi SUBDIR += ioc SUBDIR += iocage SUBDIR += iocage-devel SUBDIR += iocell SUBDIR += iograph SUBDIR += iohyve SUBDIR += ioping SUBDIR += ipa SUBDIR += ipad_charge SUBDIR += ipdbtools SUBDIR += ipfs-go SUBDIR += ipfs-go-fs-repo-migrations SUBDIR += ipget SUBDIR += ipmitool SUBDIR += ipsc SUBDIR += isc-cron SUBDIR += isomaster SUBDIR += istatserver SUBDIR += istio SUBDIR += jadm SUBDIR += jail-primer SUBDIR += jail_exporter SUBDIR += jailadmin SUBDIR += jaildaemon SUBDIR += jailme SUBDIR += jailrc SUBDIR += jailutils SUBDIR += javaservicewrapper SUBDIR += jdiskreport SUBDIR += jdupes SUBDIR += jest SUBDIR += jkill SUBDIR += jobd SUBDIR += jps SUBDIR += jruls SUBDIR += jstest-gtk SUBDIR += jtop SUBDIR += jtopen SUBDIR += jvmtop SUBDIR += k3b SUBDIR += k4dirstat SUBDIR += k8temp SUBDIR += k9s SUBDIR += kbackup SUBDIR += kcron SUBDIR += kdeadmin SUBDIR += kdebugsettings SUBDIR += kdf SUBDIR += kdialog SUBDIR += keyboard-daemon SUBDIR += keyd SUBDIR += kf5-baloo SUBDIR += kf5-kwallet SUBDIR += kfloppy SUBDIR += khelpcenter SUBDIR += kiconvtool SUBDIR += kio-fuse SUBDIR += kldfind SUBDIR += kldpatch SUBDIR += kops SUBDIR += krename SUBDIR += kshutdown SUBDIR += ksystemlog SUBDIR += kubectl SUBDIR += kvmclock-kmod SUBDIR += lava SUBDIR += lbl-cf SUBDIR += lbl-hf SUBDIR += lcdproc SUBDIR += ldap-account-manager SUBDIR += ldapvi SUBDIR += ledit SUBDIR += less SUBDIR += lfm SUBDIR += libcdio SUBDIR += libcdio-paranoia SUBDIR += libchk SUBDIR += libcpuid SUBDIR += libdnf SUBDIR += libfvde SUBDIR += libg15 SUBDIR += libg15render SUBDIR += libgksu SUBDIR += libieee1284 SUBDIR += libretto-config SUBDIR += libsunacl SUBDIR += libsysstat SUBDIR += libudisks SUBDIR += liburcu SUBDIR += lineak-defaultplugin SUBDIR += lineak-xosdplugin SUBDIR += lineakd SUBDIR += linrename SUBDIR += linux-c7-dosfstools SUBDIR += linux-c7-lttng-ust SUBDIR += linux-c7-numactl-libs SUBDIR += linux-c7-userspace-rcu SUBDIR += linux-miniconda-installer SUBDIR += linux-rkbin SUBDIR += linuxfdisk SUBDIR += lizardfs SUBDIR += lmmon SUBDIR += lmon SUBDIR += lnav SUBDIR += lockfile-progs SUBDIR += loganalyzer SUBDIR += logrotate SUBDIR += logstalgia SUBDIR += logstash-forwarder SUBDIR += logstash6 SUBDIR += logstash7 SUBDIR += logtool SUBDIR += logwatch SUBDIR += lookat SUBDIR += lr SUBDIR += lsblk SUBDIR += lscpu SUBDIR += lsd SUBDIR += lsof SUBDIR += lsop SUBDIR += lsyncd SUBDIR += ltfs SUBDIR += ltrace SUBDIR += lttng-tools SUBDIR += lttng-ust SUBDIR += luckybackup SUBDIR += lxinput SUBDIR += lxqt-admin SUBDIR += lxqt-config SUBDIR += lxqt-policykit SUBDIR += lxqt-powermanagement SUBDIR += lxqt-qtplugin SUBDIR += lxsplit SUBDIR += lxtask SUBDIR += lxterminal SUBDIR += mac_nonet SUBDIR += mac_rtprio SUBDIR += mackerel-agent SUBDIR += magicrescue SUBDIR += manck SUBDIR += mapchan SUBDIR += mapdir SUBDIR += massadmin SUBDIR += mate-control-center SUBDIR += mate-polkit SUBDIR += mate-power-manager SUBDIR += mate-settings-daemon SUBDIR += mate-system-monitor SUBDIR += mbgtools SUBDIR += mcelog SUBDIR += mcfly SUBDIR += mcollective SUBDIR += mcollective-actionpolicy-auth SUBDIR += mcollective-nettest-agent SUBDIR += mcollective-nettest-client SUBDIR += mcollective-nettest-common SUBDIR += mcollective-nrpe-agent SUBDIR += mcollective-nrpe-client SUBDIR += mcollective-nrpe-common SUBDIR += mcollective-puppet-agent SUBDIR += mcollective-puppet-client SUBDIR += mcollective-puppet-common SUBDIR += mcollective-service-agent SUBDIR += mcollective-service-client SUBDIR += mcollective-service-common SUBDIR += mcollective-shell-agent SUBDIR += mcollective-shell-client SUBDIR += mcron SUBDIR += mcweject SUBDIR += mdf2iso SUBDIR += megacli SUBDIR += megarc SUBDIR += memdump SUBDIR += memfetch SUBDIR += memtest86 SUBDIR += memtest86+ SUBDIR += memtester SUBDIR += metalog SUBDIR += mfid SUBDIR += mgeupsd SUBDIR += minikube SUBDIR += minimunin SUBDIR += minipot SUBDIR += minipro SUBDIR += minirsyslogd SUBDIR += mixer SUBDIR += mkdesktop SUBDIR += mkfwimage SUBDIR += mkjail SUBDIR += mkntpwd SUBDIR += mmc-utils SUBDIR += mmve SUBDIR += mnrpes SUBDIR += modman SUBDIR += modules SUBDIR += mog SUBDIR += monit SUBDIR += monitord SUBDIR += monitorix SUBDIR += moosefs2-cgi SUBDIR += moosefs2-cgiserv SUBDIR += moosefs2-chunkserver SUBDIR += moosefs2-cli SUBDIR += moosefs2-client SUBDIR += moosefs2-master SUBDIR += moosefs2-metalogger SUBDIR += moosefs2-netdump SUBDIR += moosefs3-cgi SUBDIR += moosefs3-cgiserv SUBDIR += moosefs3-chunkserver SUBDIR += moosefs3-cli SUBDIR += moosefs3-client SUBDIR += moosefs3-master SUBDIR += moosefs3-metalogger SUBDIR += moosefs3-netdump SUBDIR += moreutils SUBDIR += most SUBDIR += mountsmb2 SUBDIR += mping SUBDIR += mptd SUBDIR += msiklm SUBDIR += msktutil SUBDIR += mstflint SUBDIR += mstflint-lite SUBDIR += msyslog SUBDIR += mtm SUBDIR += mtpfs SUBDIR += mtxorbd SUBDIR += multitail SUBDIR += munin-common SUBDIR += munin-contrib SUBDIR += munin-master SUBDIR += munin-node SUBDIR += muse SUBDIR += mxkill SUBDIR += mybashburn SUBDIR += myrescue SUBDIR += n98-magerun SUBDIR += nagios-statd SUBDIR += namefix SUBDIR += nbosd SUBDIR += ncdu SUBDIR += ndmpd SUBDIR += neofetch SUBDIR += netevent SUBDIR += nfcutils SUBDIR += nfs-over-tls SUBDIR += nitrogen SUBDIR += nix SUBDIR += nmrpflash SUBDIR += no-login SUBDIR += node_exporter SUBDIR += nomad SUBDIR += nomad-pot-driver SUBDIR += npadmin SUBDIR += nq SUBDIR += nrg2iso SUBDIR += nss_ndb SUBDIR += nsysctl SUBDIR += ntfy SUBDIR += nut SUBDIR += nut-devel SUBDIR += nvclock SUBDIR += nvimpager SUBDIR += nvme-cli SUBDIR += nvramtool SUBDIR += oak SUBDIR += obliterate SUBDIR += oc SUBDIR += odo SUBDIR += ods2 SUBDIR += ohmu SUBDIR += omnibackup SUBDIR += onefetch SUBDIR += opa SUBDIR += open SUBDIR += opencorsairlink SUBDIR += opendircolors SUBDIR += openipmi SUBDIR += opensbi SUBDIR += openseachest SUBDIR += openshift-install SUBDIR += openupsd SUBDIR += openzfs SUBDIR += openzfs-kmod SUBDIR += osinfo-db-tools SUBDIR += p5-App-Regather SUBDIR += p5-App-RunCron SUBDIR += p5-App-ZFSCurses SUBDIR += p5-BSD-Jail-Object SUBDIR += p5-BSD-Process SUBDIR += p5-BSD-Sysctl SUBDIR += p5-BSD-getloadavg SUBDIR += p5-BackupPC-XS SUBDIR += p5-Brackup SUBDIR += p5-Dir-Purge SUBDIR += p5-File-BackupCopy SUBDIR += p5-File-Cmp SUBDIR += p5-File-DirCompare SUBDIR += p5-File-Listing SUBDIR += p5-File-Log SUBDIR += p5-File-Next SUBDIR += p5-File-Rename SUBDIR += p5-File-Signature SUBDIR += p5-File-Stat-Bits SUBDIR += p5-File-Stat-ModeString SUBDIR += p5-File-Tee SUBDIR += p5-File-Which SUBDIR += p5-Filesys-Df SUBDIR += p5-Filesys-DfPortable SUBDIR += p5-Filesys-DiskFree SUBDIR += p5-Filesys-DiskSpace SUBDIR += p5-Filesys-DiskUsage SUBDIR += p5-Filesys-Statvfs SUBDIR += p5-Filesys-ZFS SUBDIR += p5-Filesys-ZFS-Stat SUBDIR += p5-Fuse SUBDIR += p5-Fuse-Simple SUBDIR += p5-Giovanni SUBDIR += p5-Iterator-File SUBDIR += p5-Lchown SUBDIR += p5-Linux-Cpuinfo SUBDIR += p5-Log-Colorize-Helper SUBDIR += p5-Log-Syslog-Constants SUBDIR += p5-Log-Syslog-Fast SUBDIR += p5-MogileFS-Client SUBDIR += p5-MogileFS-Network SUBDIR += p5-MogileFS-Server SUBDIR += p5-MogileFS-Utils SUBDIR += p5-Monitor-Simple SUBDIR += p5-Plugtools SUBDIR += p5-Plugtools-Plugins-HomeOU SUBDIR += p5-Probe-Perl SUBDIR += p5-Proc-PidUtil SUBDIR += p5-Proc-ProcessTable-Colorizer SUBDIR += p5-Proc-ProcessTable-InfoString SUBDIR += p5-Proc-ProcessTable-Match SUBDIR += p5-Proc-ProcessTable-ncps SUBDIR += p5-Proclet SUBDIR += p5-Quota SUBDIR += p5-Rex SUBDIR += p5-Samba-SIDhelper SUBDIR += p5-Schedule-At SUBDIR += p5-Schedule-Cron SUBDIR += p5-Schedule-Cron-Events SUBDIR += p5-Schedule-Load SUBDIR += p5-Schedule-Match SUBDIR += p5-Shell-Command SUBDIR += p5-Stat-lsMode SUBDIR += p5-Sys-CpuLoad SUBDIR += p5-Sys-Filesystem SUBDIR += p5-Sys-Gamin SUBDIR += p5-Sys-Group-GIDhelper SUBDIR += p5-Sys-HostIP SUBDIR += p5-Sys-Hostname-FQDN SUBDIR += p5-Sys-Hostname-Long SUBDIR += p5-Sys-Load SUBDIR += p5-Sys-Syslog SUBDIR += p5-Sys-User-UIDhelper SUBDIR += p5-Sysadm-Install SUBDIR += p5-SyslogScan SUBDIR += p5-Tail-Stat SUBDIR += p5-Tie-Syslog SUBDIR += p5-Ubic SUBDIR += p5-Unix-ConfigFile SUBDIR += p5-Unix-Lsof SUBDIR += p5-Unix-Mknod SUBDIR += p5-Unix-Processors SUBDIR += p5-Unix-Syslog SUBDIR += p5-User SUBDIR += p5-arclog SUBDIR += p5-reslog SUBDIR += packer SUBDIR += packmule SUBDIR += pacman SUBDIR += paicc SUBDIR += paladin SUBDIR += pam_mount SUBDIR += pam_xdg SUBDIR += panicmail SUBDIR += parafly SUBDIR += parallel SUBDIR += parkverbot SUBDIR += pass-otp SUBDIR += pass-update SUBDIR += password-store SUBDIR += passwordsafe SUBDIR += patchelf SUBDIR += pax-utils SUBDIR += pbimaker SUBDIR += pc-networkmanager SUBDIR += pcapfix SUBDIR += pciutils SUBDIR += pcpustat SUBDIR += pdixtract SUBDIR += pdumpfs SUBDIR += pear-Cache SUBDIR += pear-Cache_Lite SUBDIR += pear-File SUBDIR += pear-File_Find SUBDIR += pear-File_Fstab SUBDIR += pear-File_Gettext SUBDIR += pear-Horde_Log SUBDIR += pear-Horde_Vfs SUBDIR += pear-I18Nv2 SUBDIR += pear-Log SUBDIR += pear-Translation2 SUBDIR += pecl-proctitle SUBDIR += pefs-kmod SUBDIR += perp SUBDIR += personality SUBDIR += pesign SUBDIR += pfetch SUBDIR += pflogx SUBDIR += pfstat SUBDIR += pftables SUBDIR += pftop SUBDIR += php73-fileinfo SUBDIR += php73-posix SUBDIR += php74-fileinfo SUBDIR += php74-posix SUBDIR += php80-fileinfo SUBDIR += php80-posix SUBDIR += phybs SUBDIR += pick SUBDIR += pidof SUBDIR += pies SUBDIR += pipemeter SUBDIR += plasma-pass SUBDIR += plasma5-discover SUBDIR += plasma5-drkonqi SUBDIR += plasma5-kde-cli-tools SUBDIR += plasma5-kinfocenter SUBDIR += plasma5-kmenuedit SUBDIR += plasma5-ksysguard SUBDIR += plasma5-libksysguard SUBDIR += plasma5-plasma-disks SUBDIR += plasma5-plasma-systemmonitor SUBDIR += plasma5-polkit-kde-agent-1 SUBDIR += plasma5-powerdevil SUBDIR += plasma5-systemsettings SUBDIR += plconfig SUBDIR += pmt SUBDIR += pnscan SUBDIR += polkit SUBDIR += polkit-gnome SUBDIR += polkit-qt SUBDIR += pot SUBDIR += potnet SUBDIR += powerdxx SUBDIR += powerman SUBDIR += powermon SUBDIR += pp SUBDIR += pprotectd SUBDIR += prips SUBDIR += procenv SUBDIR += procmap SUBDIR += progsreiserfs SUBDIR += pslist SUBDIR += psmisc SUBDIR += pstack SUBDIR += pstacku SUBDIR += pstree SUBDIR += puppet-lint SUBDIR += puppet-mode.el SUBDIR += puppet6 SUBDIR += puppet7 SUBDIR += puppetserver6 SUBDIR += puppetserver7 SUBDIR += pv SUBDIR += pwd_unmkdb SUBDIR += pwgen SUBDIR += pwol SUBDIR += pwsafe SUBDIR += pxattr SUBDIR += pxp-agent SUBDIR += py-ansible-base SUBDIR += py-ansible-core SUBDIR += py-ansible-lint SUBDIR += py-ansible-runner SUBDIR += py-azure-cli SUBDIR += py-azure-cli-acr SUBDIR += py-azure-cli-base SUBDIR += py-azure-cli-core SUBDIR += py-azure-cli-telemetry SUBDIR += py-bitrot SUBDIR += py-borgmatic SUBDIR += py-cron-descriptor SUBDIR += py-croniter SUBDIR += py-dict-toolbox SUBDIR += py-diffoscope SUBDIR += py-dirsync SUBDIR += py-distro SUBDIR += py-dlipower SUBDIR += py-docker SUBDIR += py-drmaa SUBDIR += py-execnet SUBDIR += py-filelike SUBDIR += py-filelock SUBDIR += py-focker SUBDIR += py-glances SUBDIR += py-google-compute-engine SUBDIR += py-hared SUBDIR += py-hcloud SUBDIR += py-honcho SUBDIR += py-hpilo SUBDIR += py-iowait SUBDIR += py-jailconf SUBDIR += py-leviathan SUBDIR += py-liquidctl SUBDIR += py-mitogen SUBDIR += py-mqttwarn SUBDIR += py-nagiosplugin SUBDIR += py-packet-python SUBDIR += py-pkginfo SUBDIR += py-ploy SUBDIR += py-ploy_ezjail SUBDIR += py-plumbum SUBDIR += py-power SUBDIR += py-psutil SUBDIR += py-psutil121 SUBDIR += py-ptyprocess SUBDIR += py-py-cpuinfo SUBDIR += py-python-consul SUBDIR += py-python-consul2 SUBDIR += py-python-crontab SUBDIR += py-python-nomad SUBDIR += py-pytsk SUBDIR += py-pywatchman SUBDIR += py-pyznap SUBDIR += py-qmk SUBDIR += py-queuelib SUBDIR += py-ranger SUBDIR += py-rdiff-backup SUBDIR += py-resolve-march-native SUBDIR += py-salt SUBDIR += py-scandir SUBDIR += py-scarab SUBDIR += py-supervisor SUBDIR += py-tarsnapper SUBDIR += py-tmuxp SUBDIR += py-upt SUBDIR += py-upt-cpan SUBDIR += py-upt-freebsd SUBDIR += py-upt-pypi SUBDIR += py-upt-rubygems SUBDIR += py-uptime SUBDIR += py-zdaemon SUBDIR += py-zfs-autobackup SUBDIR += pydf SUBDIR += qchroot SUBDIR += qdirstat SUBDIR += qjail SUBDIR += qjail54 SUBDIR += qlogtools SUBDIR += qsudo SUBDIR += qt5-qtdiag SUBDIR += qt5-qtpaths SUBDIR += qt5-qtplugininfo SUBDIR += qtpass SUBDIR += quickjail SUBDIR += quicksynergy SUBDIR += racktables SUBDIR += radeontool SUBDIR += radeontop SUBDIR += radmind SUBDIR += rainbarf SUBDIR += raincoat SUBDIR += rcadm SUBDIR += rclean SUBDIR += rcm SUBDIR += rdate SUBDIR += rdup SUBDIR += read-edid SUBDIR += recoverdm SUBDIR += reed SUBDIR += reggae SUBDIR += rej SUBDIR += relaxconf SUBDIR += rename SUBDIR += renameutils SUBDIR += reoback SUBDIR += reptyr SUBDIR += respond SUBDIR += rest-server SUBDIR += restic SUBDIR += retail SUBDIR += rex SUBDIR += rhc SUBDIR += riak-cs SUBDIR += rinse SUBDIR += rmlint SUBDIR += rocr SUBDIR += roct SUBDIR += rovclock SUBDIR += rpi-firmware SUBDIR += rset SUBDIR += rsfetch SUBDIR += rshim-user-space SUBDIR += rsnapshot SUBDIR += rsyncbackup SUBDIR += rsyncrypto SUBDIR += rsyslog8 SUBDIR += rtsx-kmod SUBDIR += rtty SUBDIR += rubygem-backup SUBDIR += rubygem-bolt SUBDIR += rubygem-bosh-gen SUBDIR += rubygem-bundler SUBDIR += rubygem-bundler1 SUBDIR += rubygem-bundler_ext SUBDIR += rubygem-capistrano SUBDIR += rubygem-capistrano-ext SUBDIR += rubygem-capistrano-harrow SUBDIR += rubygem-chef SUBDIR += rubygem-chef-api SUBDIR += rubygem-chef-bin SUBDIR += rubygem-chef-config SUBDIR += rubygem-chef-config15 SUBDIR += rubygem-chef-dk SUBDIR += rubygem-chef-telemetry SUBDIR += rubygem-chef-utils SUBDIR += rubygem-chef-utils15 SUBDIR += rubygem-chef-vault SUBDIR += rubygem-chef-zero SUBDIR += rubygem-chef15 SUBDIR += rubygem-choria-mcorpc-support SUBDIR += rubygem-facter SUBDIR += rubygem-fluent-mixin-plaintextformatter SUBDIR += rubygem-fluent-plugin-config-expander SUBDIR += rubygem-fluent-plugin-file-alternative SUBDIR += rubygem-fluent-plugin-tail-asis SUBDIR += rubygem-fluentd SUBDIR += rubygem-fssm SUBDIR += rubygem-god SUBDIR += rubygem-guard SUBDIR += rubygem-guard-compat SUBDIR += rubygem-guard-cucumber SUBDIR += rubygem-guard-livereload SUBDIR += rubygem-guard-minitest SUBDIR += rubygem-guard-rspec SUBDIR += rubygem-hammer_cli SUBDIR += rubygem-hammer_cli_foreman SUBDIR += rubygem-hammer_cli_foreman_bootdisk SUBDIR += rubygem-hammer_cli_foreman_salt SUBDIR += rubygem-hammer_cli_foreman_ssh SUBDIR += rubygem-hiera SUBDIR += rubygem-hiera-eyaml SUBDIR += rubygem-hiera-file SUBDIR += rubygem-hieracles SUBDIR += rubygem-httplog SUBDIR += rubygem-itamae SUBDIR += rubygem-librarian-puppet SUBDIR += rubygem-license-acceptance SUBDIR += rubygem-log4r SUBDIR += rubygem-logify SUBDIR += rubygem-mogilefs-client SUBDIR += rubygem-mothra SUBDIR += rubygem-murder SUBDIR += rubygem-ohai SUBDIR += rubygem-ohai15 SUBDIR += rubygem-parallel SUBDIR += rubygem-puppet_forge SUBDIR += rubygem-puppetfile-resolver SUBDIR += rubygem-puppetserver-ca SUBDIR += rubygem-r10k SUBDIR += rubygem-rubyipmi SUBDIR += rubygem-serverspec SUBDIR += rubygem-shellany SUBDIR += rubygem-smart_proxy_chef SUBDIR += rubygem-smart_proxy_dynflow SUBDIR += rubygem-smart_proxy_remote_execution_ssh SUBDIR += rubygem-smart_proxy_salt SUBDIR += rubygem-specinfra SUBDIR += rubygem-sys-admin SUBDIR += rubygem-sys-cpu SUBDIR += rubygem-sys-filesystem SUBDIR += rubygem-sys-host SUBDIR += rubygem-sys-proctable SUBDIR += rubygem-sys-uname SUBDIR += rubygem-sys-uptime SUBDIR += rubygem-syslog-logger SUBDIR += rubygem-teamocil SUBDIR += rubygem-tmuxinator SUBDIR += rubygem-vagrant-bhyve SUBDIR += rubygem-vagrant-mutate SUBDIR += rubygem-vagrant-vbguest SUBDIR += rubygem-vagrant_cloud SUBDIR += rubygem-vmstat SUBDIR += rubygem-win32-file SUBDIR += rubygem-win32-file-security SUBDIR += rubygem-win32-file-stat SUBDIR += rubygem-winrm SUBDIR += rubygem-winrm-elevated SUBDIR += rubygem-winrm-fs SUBDIR += rubygem-yell SUBDIR += rundeck2 SUBDIR += rundeck3 SUBDIR += runit SUBDIR += runit-faster SUBDIR += runj SUBDIR += runwhen SUBDIR += rush SUBDIR += rw SUBDIR += s-tui SUBDIR += s6 SUBDIR += s6-rc SUBDIR += safe-rm SUBDIR += safecat SUBDIR += safecopy SUBDIR += samdruckerclientshell SUBDIR += samefile SUBDIR += samesame SUBDIR += sample SUBDIR += sanoid SUBDIR += sanoid-devel SUBDIR += sas2ircu SUBDIR += sas3ircu SUBDIR += savelogs SUBDIR += scalpel SUBDIR += scan_ffs SUBDIR += scanbuttond SUBDIR += scanmem SUBDIR += scct SUBDIR += schedutils SUBDIR += schilyutils SUBDIR += screen SUBDIR += screenfetch SUBDIR += screenfetch-nox11 SUBDIR += screenie SUBDIR += scterc SUBDIR += sd-agent SUBDIR += sdparm SUBDIR += seatd SUBDIR += seatools SUBDIR += sec SUBDIR += sensu-go SUBDIR += serf SUBDIR += setcdboot SUBDIR += setsid SUBDIR += sg3_utils SUBDIR += shim SUBDIR += shlock SUBDIR += shmcat SUBDIR += showbeastie SUBDIR += shuf SUBDIR += siegfried SUBDIR += signon-kwallet-extension SUBDIR += signon-plugin-oauth2 SUBDIR += signon-qt5 SUBDIR += signon-ui SUBDIR += slack SUBDIR += sleuthkit SUBDIR += slst SUBDIR += slurm-wlm SUBDIR += smart SUBDIR += smartmontools SUBDIR += smenu SUBDIR += smp_utils SUBDIR += snap SUBDIR += snapraid SUBDIR += snmp_exporter SUBDIR += snooze SUBDIR += sockaddr SUBDIR += socket SUBDIR += socklog SUBDIR += solaar SUBDIR += spcm SUBDIR += spindown SUBDIR += spinner SUBDIR += spiped SUBDIR += squashfs-tools SUBDIR += ssd_report SUBDIR += sshsudo SUBDIR += ssync SUBDIR += stalepid SUBDIR += stanchion SUBDIR += stepsync SUBDIR += storcli SUBDIR += stow SUBDIR += stowES SUBDIR += stress SUBDIR += stressdisk SUBDIR += superiotool SUBDIR += swapd SUBDIR += swapexd SUBDIR += swapmon SUBDIR += swapusage SUBDIR += sweeper SUBDIR += symlinks SUBDIR += symon SUBDIR += synergy SUBDIR += sysctlbyname-improved-kmod SUBDIR += sysctlinfo-kmod SUBDIR += sysgather SUBDIR += sysinfo SUBDIR += syslinux SUBDIR += syslog-ng SUBDIR += syslogger SUBDIR += sysrc SUBDIR += sysvbanner SUBDIR += tai64nfrac SUBDIR += tarsnap SUBDIR += tarsnap-gui SUBDIR += tarsnap-periodic SUBDIR += tartarus SUBDIR += tbku SUBDIR += tclsyslog SUBDIR += tcplist SUBDIR += tdir SUBDIR += tealdeer SUBDIR += tenshi SUBDIR += terraform SUBDIR += terraform-docs SUBDIR += terraform-provider-gridscale SUBDIR += terraform-provider-vultr SUBDIR += terraform-switcher SUBDIR += terragrunt SUBDIR += testdisk SUBDIR += tflint SUBDIR += thefish SUBDIR += timelimit SUBDIR += timemon SUBDIR += tiramisu SUBDIR += titlefix SUBDIR += tkdvd SUBDIR += tlsdate SUBDIR += tm SUBDIR += tmate SUBDIR += tmate-ssh-server SUBDIR += tmpreaper SUBDIR += tmpwatch SUBDIR += tmux SUBDIR += tmux-mem-cpu-load SUBDIR += tmux23 SUBDIR += topless SUBDIR += torque SUBDIR += toshctl SUBDIR += toybox SUBDIR += tracker SUBDIR += tracker-miners SUBDIR += tracker3 SUBDIR += tree SUBDIR += triton SUBDIR += trueos-libqt5 SUBDIR += ts SUBDIR += tty-clock SUBDIR += ttyd SUBDIR += ttyload SUBDIR += tuptime SUBDIR += turbostat SUBDIR += tw_cli SUBDIR += twmn SUBDIR += tzdialog SUBDIR += u-boot-a13-olinuxino SUBDIR += u-boot-a64-olinuxino SUBDIR += u-boot-bananapi SUBDIR += u-boot-bananapim2 SUBDIR += u-boot-beaglebone SUBDIR += u-boot-chip SUBDIR += u-boot-clearfog SUBDIR += u-boot-cubieboard SUBDIR += u-boot-cubieboard2 SUBDIR += u-boot-cubox-hummingboard SUBDIR += u-boot-duovero SUBDIR += u-boot-firefly-rk3399 SUBDIR += u-boot-imx-serial-loader SUBDIR += u-boot-master SUBDIR += u-boot-nanopi-a64 SUBDIR += u-boot-nanopi-m1plus SUBDIR += u-boot-nanopi-neo SUBDIR += u-boot-nanopi-neo-air SUBDIR += u-boot-nanopi-neo2 SUBDIR += u-boot-nanopi-r4s SUBDIR += u-boot-olimex-a20-som-evb SUBDIR += u-boot-olinuxino-lime SUBDIR += u-boot-olinuxino-lime2 SUBDIR += u-boot-olinuxino-lime2-emmc SUBDIR += u-boot-orangepi-one SUBDIR += u-boot-orangepi-pc SUBDIR += u-boot-orangepi-pc-plus SUBDIR += u-boot-orangepi-pc2 SUBDIR += u-boot-orangepi-plus-2e SUBDIR += u-boot-orangepi-r1 SUBDIR += u-boot-orangepi-zero SUBDIR += u-boot-orangepi-zero-plus SUBDIR += u-boot-pandaboard SUBDIR += u-boot-pcduino3 SUBDIR += u-boot-pine-h64 SUBDIR += u-boot-pine64 SUBDIR += u-boot-pine64-lts SUBDIR += u-boot-pinebook SUBDIR += u-boot-pinebookpro SUBDIR += u-boot-qemu-arm SUBDIR += u-boot-qemu-arm64 SUBDIR += u-boot-qemu-riscv64 SUBDIR += u-boot-riotboard SUBDIR += u-boot-rock-pi-4 SUBDIR += u-boot-rock64 SUBDIR += u-boot-rockpro64 SUBDIR += u-boot-rpi SUBDIR += u-boot-rpi-0-w SUBDIR += u-boot-rpi-arm64 SUBDIR += u-boot-rpi2 SUBDIR += u-boot-rpi3 SUBDIR += u-boot-rpi3-32 SUBDIR += u-boot-rpi4 SUBDIR += u-boot-sifive-fu540 SUBDIR += u-boot-sinovoip-bpi-m3 SUBDIR += u-boot-sopine SUBDIR += u-boot-sopine-spi SUBDIR += u-boot-tools SUBDIR += u-boot-utilite SUBDIR += u-boot-wandboard SUBDIR += ua SUBDIR += ucspi-ipc SUBDIR += ucspi-proxy SUBDIR += ucspi-ssl SUBDIR += ucspi-tcp SUBDIR += ucspi-unix SUBDIR += udfclient SUBDIR += uefi-edk2-bhyve SUBDIR += uefi-edk2-bhyve-csm SUBDIR += uefi-edk2-qemu SUBDIR += ufetch SUBDIR += ufs_copy SUBDIR += uhidd SUBDIR += uif2iso SUBDIR += unetbootin SUBDIR += unieject SUBDIR += uniutils SUBDIR += unquote SUBDIR += unstow SUBDIR += upower SUBDIR += upsdaemon SUBDIR += uptimed SUBDIR += usb_modeswitch SUBDIR += usbhid-dump SUBDIR += usbtop SUBDIR += usbutils SUBDIR += uschedule SUBDIR += userinfo SUBDIR += userlist SUBDIR += usermatic SUBDIR += usermin SUBDIR += userneu SUBDIR += userneu-devel SUBDIR += usrinfo SUBDIR += utcount SUBDIR += vagrant SUBDIR += vbetool SUBDIR += vchanger SUBDIR += vcp SUBDIR += vector SUBDIR += videogen SUBDIR += vii SUBDIR += vils SUBDIR += vimpager SUBDIR += virt-what SUBDIR += virtualmin SUBDIR += vivid SUBDIR += vm-bhyve SUBDIR += vmdktool SUBDIR += vmtouch SUBDIR += vobcopy SUBDIR += volman SUBDIR += vordog SUBDIR += vpnc-scripts SUBDIR += vttest SUBDIR += vzvol SUBDIR += wait_on SUBDIR += watchfolder SUBDIR += watchman SUBDIR += watchmen SUBDIR += webjob SUBDIR += webmin SUBDIR += weedit SUBDIR += wemux SUBDIR += whatpix SUBDIR += whowatch SUBDIR += wiimms SUBDIR += wimlib SUBDIR += wmapmload SUBDIR += wmbluecpu SUBDIR += wmbsdbatt SUBDIR += wmcube SUBDIR += wmdiskmon SUBDIR += wmflame SUBDIR += wmmemfree SUBDIR += wmmemload SUBDIR += wmscript SUBDIR += wmtop SUBDIR += wmupmon SUBDIR += worldtools SUBDIR += wuzzah SUBDIR += x86info SUBDIR += xbatt SUBDIR += xbattbar SUBDIR += xcdroast SUBDIR += xcpustate SUBDIR += xdu SUBDIR += xe SUBDIR += xe-guest-utilities SUBDIR += xen-guest-tools SUBDIR += xen-tools SUBDIR += xfburn SUBDIR += xfce4-battery-plugin SUBDIR += xfce4-bsdcpufreq-plugin SUBDIR += xfce4-cpugraph-plugin SUBDIR += xfce4-diskperf-plugin SUBDIR += xfce4-fsguard-plugin SUBDIR += xfce4-genmon-plugin SUBDIR += xfce4-mount-plugin SUBDIR += xfce4-netload-plugin SUBDIR += xfce4-places-plugin SUBDIR += xfce4-power-manager SUBDIR += xfce4-settings SUBDIR += xfce4-systemload-plugin SUBDIR += xfce4-wavelan-plugin SUBDIR += xfsm SUBDIR += xfsprogs SUBDIR += xin SUBDIR += xjobs SUBDIR += xmbmon SUBDIR += xorriso SUBDIR += xosview SUBDIR += xpipe SUBDIR += xstow SUBDIR += xsysstats SUBDIR += xvidcap SUBDIR += yadm SUBDIR += yank SUBDIR += z SUBDIR += zap SUBDIR += zbackup SUBDIR += zeitgeist SUBDIR += zellij SUBDIR += zeroer SUBDIR += zetaback SUBDIR += zetaback-devel SUBDIR += zfs-periodic SUBDIR += zfs-replicate SUBDIR += zfs-snap-diff SUBDIR += zfs-snapshot-clean SUBDIR += zfs-snapshot-mgmt SUBDIR += zfs-stats SUBDIR += zfs-stats-lite SUBDIR += zfsnap SUBDIR += zfsnap2 SUBDIR += zfstools SUBDIR += zidrav SUBDIR += zisofs-tools SUBDIR += znapzend SUBDIR += zogftw SUBDIR += zoxide SUBDIR += zrep SUBDIR += zrepl SUBDIR += zsd SUBDIR += zsm SUBDIR += ztop SUBDIR += zxfer .include diff --git a/sysutils/bhyve+/Makefile b/sysutils/bhyve+/Makefile new file mode 100644 index 000000000000..266129c8bf7c --- /dev/null +++ b/sysutils/bhyve+/Makefile @@ -0,0 +1,90 @@ +PORTNAME= bhyve+ +PORTVERSION= 0.1.0 +CATEGORIES= sysutils + +MAINTAINER= pali.gabor@gmail.com +COMMENT= BHyVe with unofficial extensions + +LICENSE= BSD2CLAUSE + +ONLY_FOR_ARCHS= amd64 +USES= kmod uidfix + +.include + +SRCS= ${SRC_BASE}/sys/modules/vmm \ + ${SRC_BASE}/sys/amd64/vmm \ + ${SRC_BASE}/lib/libvmmapi \ + ${SRC_BASE}/usr.sbin/bhyve \ + ${SRC_BASE}/usr.sbin/bhyvectl \ + ${SRC_BASE}/usr.sbin/bhyveload \ + ${SRC_BASE}/share/mk + +.for _src in ${SRCS} +. if !exists(${_src}) && empty(IGNORE) +IGNORE+= requires bhyve and vmm source files in ${_src} +. endif +.endfor + +USE_GITHUB= yes +GH_ACCOUNT= conclusiveeng +GH_PROJECT= lib9p +GH_TAGNAME= 7ef466772108856ee3e093735033232a6f1a3f04 + +USE_LDCONFIG= yes + +.if 1100000 <= ${OSVERSION} && ${OSVERSION} < 1200000 +EXTRA_PATCHES= ${PATCHDIR}/freebsd-11 +.elif 1200000 <= ${OSVERSION} && ${OSVERSION} < 1300000 +EXTRA_PATCHES= ${PATCHDIR}/freebsd-12 +.elif 1300000 <= ${OSVERSION} +EXTRA_PATCHES= ${PATCHDIR}/freebsd-13 +.else +. if empty(IGNORE) +IGNORE+= cannot build: unsupported system +. endif +.endif + +WRKSRC= ${WRKDIR} + +_LINKS= sys/cam/ctl \ + sys/dev/e1000 \ + sys/dev/mii \ + sys/dev/usb/controller \ + sys/amd64/include \ + sys/x86/include \ + stand/userboot + +post-extract: + @${MKDIR} ${WRKSRC}/contrib + @cd ${WRKSRC} && ${LN} -s ../${GH_PROJECT}-${GH_TAGNAME} contrib/lib9p +.for _link in ${_LINKS} + @${MKDIR} $$(dirname ${WRKSRC}/${_link}) + @cd ${WRKSRC} && ${LN} -s ${SRC_BASE}/${_link} ${_link} +.endfor +.for _src in ${SRCS} + @cd ${_src} && ${COPYTREE_SHARE} . ${WRKDIR}/${_src:S/${SRC_BASE}//1} +.endfor + @cd ${FILESDIR} && ${COPYTREE_SHARE} kernconf ${WRKSRC} + +do-build: + @cd ${WRKSRC}/contrib/lib9p && \ + ${MAKE} SRCTOP=${WRKSRC} SYSDIR=${SRC_BASE}/sys LIB9PDIR= +.for _src in ${SRCS} +. if exists(${_src}/Makefile) + @cd ${WRKSRC}/${_src:S/${SRC_BASE}//1} && \ + ${MAKE} SRCTOP=${WRKSRC} SYSDIR=${SRC_BASE}/sys DEBUG_FLAGS=-g \ + MK_CTF=yes KERNBUILDDIR=${WRKSRC}/kernconf +. endif +.endfor + +do-install: + ${INSTALL_LIB} ${WRKSRC}/contrib/lib9p/lib9p.so.1.1 ${STAGEDIR}${PREFIX}/lib + ${INSTALL_LIB} ${WRKSRC}/lib/libvmmapi/libvmmapi.so.5.1 ${STAGEDIR}${PREFIX}/lib +.for _bin in bhyve bhyveload bhyvectl + ${INSTALL_PROGRAM} ${WRKSRC}/usr.sbin/${_bin}/${_bin} ${STAGEDIR}${PREFIX}/sbin + ${INSTALL_MAN} ${WRKSRC}/usr.sbin/${_bin}/${_bin}.8.gz ${STAGEDIR}${PREFIX}/man/man8 +.endfor + ${INSTALL_KLD} ${WRKSRC}/sys/modules/vmm/vmm.ko ${STAGEDIR}${KMODDIR} + +.include diff --git a/sysutils/bhyve+/distinfo b/sysutils/bhyve+/distinfo new file mode 100644 index 000000000000..2c17bd4508cf --- /dev/null +++ b/sysutils/bhyve+/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1630740589 +SHA256 (conclusiveeng-lib9p-0.1.0-7ef466772108856ee3e093735033232a6f1a3f04_GH0.tar.gz) = 309c8dfc8cc6ff0ab72af6fa36fb0b7dd26c90bfeac0e11ef39344bf64cc2147 +SIZE (conclusiveeng-lib9p-0.1.0-7ef466772108856ee3e093735033232a6f1a3f04_GH0.tar.gz) = 145598 diff --git a/sysutils/bhyve+/files/freebsd-11/patch-bhyve-shelp b/sysutils/bhyve+/files/freebsd-11/patch-bhyve-shelp new file mode 100644 index 000000000000..8f2bc12fa573 --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-11/patch-bhyve-shelp @@ -0,0 +1,79 @@ +--- usr.sbin/bhyve/pci_emul.c.orig 2021-08-21 23:52:31 UTC ++++ usr.sbin/bhyve/pci_emul.c +@@ -237,6 +237,17 @@ done: + return (error); + } + ++void ++pci_print_supported_devices() ++{ ++ struct pci_devemu **pdpp, *pdp; ++ ++ SET_FOREACH(pdpp, pci_devemu_set) { ++ pdp = *pdpp; ++ printf("%s\n", pdp->pe_emu); ++ } ++} ++ + static int + pci_valid_pba_offset(struct pci_devinst *pi, uint64_t offset) + { +--- usr.sbin/bhyve/pci_emul.h.orig 2021-08-21 23:54:47 UTC ++++ usr.sbin/bhyve/pci_emul.h +@@ -235,6 +235,7 @@ int pci_msix_table_bar(struct pci_devins + int pci_msix_pba_bar(struct pci_devinst *pi); + int pci_msi_maxmsgnum(struct pci_devinst *pi); + int pci_parse_slot(char *opt); ++void pci_print_supported_devices(); + void pci_populate_msicap(struct msicap *cap, int msgs, int nextptr); + int pci_emul_add_msixcap(struct pci_devinst *pi, int msgnum, int barnum); + int pci_emul_msix_twrite(struct pci_devinst *pi, uint64_t offset, int size, +diff --git a/bhyve.8.orig b/bhyve.8 +index 32392c9..0d4b16f 100644 +--- usr.sbin/bhyve/bhyve.8.orig ++++ usr.sbin/bhyve/bhyve.8 +@@ -47,7 +47,11 @@ + .Op Fl l Ar lpcdev Ns Op , Ns Ar conf + .Op Fl m Ar memsize Ns Op Ar K|k|M|m|G|g|T|t + .Op Fl p Ar vcpu:hostcpu +-.Op Fl s Ar slot,emulation Ns Op , Ns Ar conf ++.Oo Fl s ++.Sm off ++.Cm help | Ar slot,emulation Ns Op , Ns Ar conf ++.Sm on ++.Oc + .Op Fl U Ar uuid + .Ar vmname + .Sh DESCRIPTION +@@ -157,7 +161,7 @@ to + .Em hostcpu . + .It Fl P + Force the guest virtual CPU to exit when a PAUSE instruction is detected. +-.It Fl s Ar slot,emulation Ns Op , Ns Ar conf ++.It Fl s Op Ar help|slot,emulation Ns Op , Ns Ar conf + Configure a virtual PCI slot and function. + .Pp + .Nm +@@ -166,6 +170,8 @@ slots on the bus. + There are 32 available slots, with the option of providing up to 8 functions + per slot. + .Bl -tag -width 10n ++.It Ar help ++print a list of supported PCI devices. + .It Ar slot + .Ar pcislot[:function] + .Ar bus:pcislot:function +--- usr.sbin/bhyve/bhyverun.c.orig 2021-08-21 23:52:19 UTC ++++ usr.sbin/bhyve/bhyverun.c +@@ -1058,7 +1058,10 @@ main(int argc, char *argv[]) + } + break; + case 's': +- if (pci_parse_slot(optarg) != 0) ++ if (strncmp(optarg, "help", strlen(optarg)) == 0) { ++ pci_print_supported_devices(); ++ exit(0); ++ } else if (pci_parse_slot(optarg) != 0) + exit(4); + else + break; diff --git a/sysutils/bhyve+/files/freebsd-11/patch-virtio-9p b/sysutils/bhyve+/files/freebsd-11/patch-virtio-9p new file mode 100644 index 000000000000..1f98ebb69ddf --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-11/patch-virtio-9p @@ -0,0 +1,385 @@ +--- usr.sbin/bhyve/Makefile.orig 2021-08-20 16:08:36 UTC ++++ usr.sbin/bhyve/Makefile +@@ -3,6 +3,7 @@ + # + + .include ++CFLAGS+=-I${SRCTOP}/contrib/lib9p + CFLAGS+=-I${SRCTOP}/sys + + PROG= bhyve +@@ -37,6 +38,7 @@ SRCS= \ + pci_irq.c \ + pci_lpc.c \ + pci_passthru.c \ ++ pci_virtio_9p.c \ + pci_virtio_block.c \ + pci_virtio_console.c \ + pci_virtio_net.c \ +@@ -63,7 +65,8 @@ SRCS= \ + .PATH: ${BHYVE_SYSDIR}/sys/amd64/vmm + SRCS+= vmm_instruction_emul.c + +-LIBADD= vmmapi md pthread z ++LIBADD= md pthread z sbuf casper cap_pwd cap_grp ++LDADD+= ../../contrib/lib9p/lib9p.so.1.1 ../../lib/libvmmapi/libvmmapi.so.5.1 + + .if ${MK_INET_SUPPORT} != "no" + CFLAGS+=-DINET +--- usr.sbin/bhyve/pci_virtio_9p.c.orig 2021-08-20 16:11:13 UTC ++++ usr.sbin/bhyve/pci_virtio_9p.c +@@ -0,0 +1,344 @@ ++/*- ++ * Copyright (c) 2015 iXsystems Inc. ++ * Copyright (c) 2017-2018 Jakub Klama ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer ++ * in this position and unchanged. ++ * 2. Redistributions in binary form must reproduce the above copyright ++ * notice, this list of conditions and the following disclaimer in the ++ * documentation and/or other materials provided with the distribution. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++ * SUCH DAMAGE. ++ */ ++ ++/* ++ * VirtIO filesystem passthrough using 9p protocol. ++ */ ++ ++#include ++__FBSDID("$FreeBSD$"); ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "bhyverun.h" ++#include "pci_emul.h" ++#include "virtio.h" ++ ++#define VT9P_MAX_IOV 128 ++#define VT9P_RINGSZ 256 ++#define VT9P_MAXTAGSZ 256 ++#define VT9P_CONFIGSPACESZ (VT9P_MAXTAGSZ + sizeof(uint16_t)) ++ ++static int pci_vt9p_debug; ++#define DPRINTF(params) if (pci_vt9p_debug) printf params ++#define WPRINTF(params) printf params ++ ++/* ++ * Per-device softc ++ */ ++struct pci_vt9p_softc { ++ struct virtio_softc vsc_vs; ++ struct vqueue_info vsc_vq; ++ pthread_mutex_t vsc_mtx; ++ uint64_t vsc_cfg; ++ uint64_t vsc_features; ++ char * vsc_rootpath; ++ struct pci_vt9p_config * vsc_config; ++ struct l9p_backend * vsc_fs_backend; ++ struct l9p_server * vsc_server; ++ struct l9p_connection * vsc_conn; ++}; ++ ++struct pci_vt9p_request { ++ struct pci_vt9p_softc * vsr_sc; ++ struct iovec * vsr_iov; ++ size_t vsr_niov; ++ size_t vsr_respidx; ++ size_t vsr_iolen; ++ uint16_t vsr_idx; ++}; ++ ++struct pci_vt9p_config { ++ uint16_t tag_len; ++ char tag[0]; ++} __attribute__((packed)); ++ ++static int pci_vt9p_send(struct l9p_request *, const struct iovec *, ++ const size_t, const size_t, void *); ++static void pci_vt9p_drop(struct l9p_request *, const struct iovec *, size_t, ++ void *); ++static void pci_vt9p_reset(void *); ++static void pci_vt9p_notify(void *, struct vqueue_info *); ++static int pci_vt9p_cfgread(void *, int, int, uint32_t *); ++static void pci_vt9p_neg_features(void *, uint64_t); ++ ++static struct virtio_consts vt9p_vi_consts = { ++ "vt9p", /* our name */ ++ 1, /* we support 1 virtqueue */ ++ VT9P_CONFIGSPACESZ, /* config reg size */ ++ pci_vt9p_reset, /* reset */ ++ pci_vt9p_notify, /* device-wide qnotify */ ++ pci_vt9p_cfgread, /* read virtio config */ ++ NULL, /* write virtio config */ ++ pci_vt9p_neg_features, /* apply negotiated features */ ++ (1 << 0), /* our capabilities */ ++}; ++ ++ ++static void ++pci_vt9p_reset(void *vsc) ++{ ++ struct pci_vt9p_softc *sc; ++ ++ sc = vsc; ++ ++ DPRINTF(("vt9p: device reset requested !\n")); ++ vi_reset_dev(&sc->vsc_vs); ++} ++ ++static void ++pci_vt9p_neg_features(void *vsc, uint64_t negotiated_features) ++{ ++ struct pci_vt9p_softc *sc = vsc; ++ ++ sc->vsc_features = negotiated_features; ++} ++ ++static int ++pci_vt9p_cfgread(void *vsc, int offset, int size, uint32_t *retval) ++{ ++ struct pci_vt9p_softc *sc = vsc; ++ void *ptr; ++ ++ ptr = (uint8_t *)sc->vsc_config + offset; ++ memcpy(retval, ptr, size); ++ return (0); ++} ++ ++static int ++pci_vt9p_get_buffer(struct l9p_request *req, struct iovec *iov, size_t *niov, ++ void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ size_t n = preq->vsr_niov - preq->vsr_respidx; ++ ++ memcpy(iov, preq->vsr_iov + preq->vsr_respidx, ++ n * sizeof(struct iovec)); ++ *niov = n; ++ return (0); ++} ++ ++static int ++pci_vt9p_send(struct l9p_request *req, const struct iovec *iov, ++ const size_t niov, const size_t iolen, void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ struct pci_vt9p_softc *sc = preq->vsr_sc; ++ ++ preq->vsr_iolen = iolen; ++ ++ pthread_mutex_lock(&sc->vsc_mtx); ++ vq_relchain(&sc->vsc_vq, preq->vsr_idx, preq->vsr_iolen); ++ vq_endchains(&sc->vsc_vq, 1); ++ pthread_mutex_unlock(&sc->vsc_mtx); ++ free(preq); ++ return (0); ++} ++ ++static void ++pci_vt9p_drop(struct l9p_request *req, const struct iovec *iov, size_t niov, ++ void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ struct pci_vt9p_softc *sc = preq->vsr_sc; ++ ++ pthread_mutex_lock(&sc->vsc_mtx); ++ vq_relchain(&sc->vsc_vq, preq->vsr_idx, 0); ++ vq_endchains(&sc->vsc_vq, 1); ++ pthread_mutex_unlock(&sc->vsc_mtx); ++ free(preq); ++} ++ ++static void ++pci_vt9p_notify(void *vsc, struct vqueue_info *vq) ++{ ++ struct iovec iov[VT9P_MAX_IOV]; ++ struct pci_vt9p_softc *sc; ++ struct pci_vt9p_request *preq; ++ uint16_t idx, n, i; ++ uint16_t flags[VT9P_MAX_IOV]; ++ ++ sc = vsc; ++ ++ while (vq_has_descs(vq)) { ++ n = vq_getchain(vq, &idx, iov, VT9P_MAX_IOV, flags); ++ preq = calloc(1, sizeof(struct pci_vt9p_request)); ++ preq->vsr_sc = sc; ++ preq->vsr_idx = idx; ++ preq->vsr_iov = iov; ++ preq->vsr_niov = n; ++ preq->vsr_respidx = 0; ++ ++ /* Count readable descriptors */ ++ for (i = 0; i < n; i++) { ++ if (flags[i] & VRING_DESC_F_WRITE) ++ break; ++ ++ preq->vsr_respidx++; ++ } ++ ++ for (int i = 0; i < n; i++) { ++ DPRINTF(("vt9p: vt9p_notify(): desc%d base=%p, " ++ "len=%zu, flags=0x%04x\r\n", i, iov[i].iov_base, ++ iov[i].iov_len, flags[i])); ++ } ++ ++ l9p_connection_recv(sc->vsc_conn, iov, preq->vsr_respidx, preq); ++ } ++} ++ ++ ++static int ++pci_vt9p_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) ++{ ++ struct pci_vt9p_softc *sc; ++ char *opt; ++ char *sharename = NULL; ++ char *rootpath = NULL; ++ int rootfd; ++ bool ro = false; ++ cap_rights_t rootcap; ++ ++ if (opts == NULL) { ++ printf("virtio-9p: share name and path required\n"); ++ return (1); ++ } ++ ++ while ((opt = strsep(&opts, ",")) != NULL) { ++ if (strchr(opt, '=') != NULL) { ++ if (sharename != NULL) { ++ printf("virtio-9p: more than one share name given\n"); ++ return (1); ++ } ++ ++ sharename = strsep(&opt, "="); ++ rootpath = opt; ++ continue; ++ } ++ ++ if (strcmp(opt, "ro") == 0) { ++ DPRINTF(("read-only mount requested\r\n")); ++ ro = true; ++ continue; ++ } ++ ++ printf("virtio-9p: invalid option '%s'\n", opt); ++ return (1); ++ } ++ ++ if (strlen(sharename) > VT9P_MAXTAGSZ) { ++ printf("virtio-9p: share name too long\n"); ++ return (1); ++ } ++ ++ rootfd = open(rootpath, O_DIRECTORY); ++ if (rootfd < 0) ++ return (-1); ++ ++ sc = calloc(1, sizeof(struct pci_vt9p_softc)); ++ sc->vsc_config = calloc(1, sizeof(struct pci_vt9p_config) + ++ VT9P_MAXTAGSZ); ++ ++ pthread_mutex_init(&sc->vsc_mtx, NULL); ++ ++ cap_rights_init(&rootcap, ++ CAP_LOOKUP, CAP_ACL_CHECK, CAP_ACL_DELETE, CAP_ACL_GET, ++ CAP_ACL_SET, CAP_READ, CAP_WRITE, CAP_SEEK, CAP_FSTAT, ++ CAP_CREATE, CAP_FCHMODAT, CAP_FCHOWNAT, CAP_FTRUNCATE, ++ CAP_LINKAT_SOURCE, CAP_LINKAT_TARGET, CAP_MKDIRAT, CAP_MKNODAT, ++ CAP_PREAD, CAP_PWRITE, CAP_RENAMEAT_SOURCE, CAP_RENAMEAT_TARGET, ++ CAP_SEEK, CAP_SYMLINKAT, CAP_UNLINKAT, CAP_EXTATTR_DELETE, ++ CAP_EXTATTR_GET, CAP_EXTATTR_LIST, CAP_EXTATTR_SET, ++ CAP_FUTIMES, CAP_FSTATFS, CAP_FSYNC, CAP_FPATHCONF); ++ ++ if (cap_rights_limit(rootfd, &rootcap) != 0) ++ return (1); ++ ++ sc->vsc_config->tag_len = (uint16_t)strlen(sharename); ++ memcpy(sc->vsc_config->tag, sharename, sc->vsc_config->tag_len); ++ ++ if (l9p_backend_fs_init(&sc->vsc_fs_backend, rootfd, ro) != 0) { ++ errno = ENXIO; ++ return (1); ++ } ++ ++ if (l9p_server_init(&sc->vsc_server, sc->vsc_fs_backend) != 0) { ++ errno = ENXIO; ++ return (1); ++ } ++ ++ if (l9p_connection_init(sc->vsc_server, &sc->vsc_conn) != 0) { ++ errno = EIO; ++ return (1); ++ } ++ ++ sc->vsc_conn->lc_msize = L9P_MAX_IOV * PAGE_SIZE; ++ sc->vsc_conn->lc_lt.lt_get_response_buffer = pci_vt9p_get_buffer; ++ sc->vsc_conn->lc_lt.lt_send_response = pci_vt9p_send; ++ sc->vsc_conn->lc_lt.lt_drop_response = pci_vt9p_drop; ++ ++ vi_softc_linkup(&sc->vsc_vs, &vt9p_vi_consts, sc, pi, &sc->vsc_vq); ++ sc->vsc_vs.vs_mtx = &sc->vsc_mtx; ++ sc->vsc_vq.vq_qsize = VT9P_RINGSZ; ++ ++ /* initialize config space */ ++ pci_set_cfgdata16(pi, PCIR_DEVICE, VIRTIO_DEV_9P); ++ pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR); ++ pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_STORAGE); ++ pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_TYPE_9P); ++ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR); ++ ++ if (vi_intr_init(&sc->vsc_vs, 1, fbsdrun_virtio_msix())) ++ return (1); ++ vi_set_io_bar(&sc->vsc_vs, 0); ++ ++ return (0); ++} ++ ++struct pci_devemu pci_de_v9p = { ++ .pe_emu = "virtio-9p", ++ .pe_init = pci_vt9p_init, ++ .pe_barwrite = vi_pci_write, ++ .pe_barread = vi_pci_read ++}; ++PCI_EMUL_SET(pci_de_v9p); +--- usr.sbin/bhyve/virtio.h.orig 2021-08-20 16:20:49 UTC ++++ usr.sbin/bhyve/virtio.h +@@ -215,6 +215,7 @@ struct vring_used { + #define VIRTIO_DEV_BLOCK 0x1001 + #define VIRTIO_DEV_RANDOM 0x1005 + #define VIRTIO_DEV_CONSOLE 0x1003 ++#define VIRTIO_DEV_9P 0x1009 + + /* + * PCI config space constants. diff --git a/sysutils/bhyve+/files/freebsd-11/patch-vtd-fix b/sysutils/bhyve+/files/freebsd-11/patch-vtd-fix new file mode 100644 index 000000000000..a5f2ce648941 --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-11/patch-vtd-fix @@ -0,0 +1,211 @@ +--- sys/amd64/vmm/intel/vtd.c ++++ sys/amd64/vmm/intel/vtd.c +@@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$"); + * Architecture Spec, September 2008. + */ + ++#define VTD_DRHD_INCLUDE_PCI_ALL(Flags) (((Flags) >> 0) & 0x1) ++ + /* Section 10.4 "Register Descriptions" */ + struct vtdmap { + volatile uint32_t version; +@@ -116,10 +118,11 @@ struct domain { + static SLIST_HEAD(, domain) domhead; + + #define DRHD_MAX_UNITS 8 +-static int drhd_num; +-static struct vtdmap *vtdmaps[DRHD_MAX_UNITS]; +-static int max_domains; +-typedef int (*drhd_ident_func_t)(void); ++static ACPI_DMAR_HARDWARE_UNIT *drhds[DRHD_MAX_UNITS]; ++static int drhd_num; ++static struct vtdmap *vtdmaps[DRHD_MAX_UNITS]; ++static int max_domains; ++typedef int (*drhd_ident_func_t)(void); + + static uint64_t root_table[PAGE_SIZE / sizeof(uint64_t)] __aligned(4096); + static uint64_t ctx_tables[256][PAGE_SIZE / sizeof(uint64_t)] __aligned(4096); +@@ -175,6 +178,69 @@ domain_id(void) + return (id); + } + ++static struct vtdmap * ++vtd_device_scope(uint16_t rid) ++{ ++ int i, remaining, pathremaining; ++ char *end, *pathend; ++ struct vtdmap *vtdmap; ++ ACPI_DMAR_HARDWARE_UNIT *drhd; ++ ACPI_DMAR_DEVICE_SCOPE *device_scope; ++ ACPI_DMAR_PCI_PATH *path; ++ ++ for (i = 0; i < drhd_num; i++) { ++ drhd = drhds[i]; ++ ++ if (VTD_DRHD_INCLUDE_PCI_ALL(drhd->Flags)) { ++ /* ++ * From Intel VT-d arch spec, version 3.0: ++ * If a DRHD structure with INCLUDE_PCI_ALL flag Set is reported ++ * for a Segment, it must be enumerated by BIOS after all other ++ * DRHD structures for the same Segment. ++ */ ++ vtdmap = vtdmaps[i]; ++ return(vtdmap); ++ } ++ ++ end = (char *)drhd + drhd->Header.Length; ++ remaining = drhd->Header.Length - sizeof(ACPI_DMAR_HARDWARE_UNIT); ++ while (remaining > sizeof(ACPI_DMAR_DEVICE_SCOPE)) { ++ device_scope = (ACPI_DMAR_DEVICE_SCOPE *)(end - remaining); ++ remaining -= device_scope->Length; ++ ++ switch (device_scope->EntryType){ ++ /* 0x01 and 0x02 are PCI device entries */ ++ case 0x01: ++ case 0x02: ++ break; ++ default: ++ continue; ++ } ++ ++ if (PCI_RID2BUS(rid) != device_scope->Bus) ++ continue; ++ ++ pathend = (char *)device_scope + device_scope->Length; ++ pathremaining = device_scope->Length - sizeof(ACPI_DMAR_DEVICE_SCOPE); ++ while (pathremaining >= sizeof(ACPI_DMAR_PCI_PATH)) { ++ path = (ACPI_DMAR_PCI_PATH *)(pathend - pathremaining); ++ pathremaining -= sizeof(ACPI_DMAR_PCI_PATH); ++ ++ if (PCI_RID2SLOT(rid) != path->Device) ++ continue; ++ if (PCI_RID2FUNC(rid) != path->Function) ++ continue; ++ ++ vtdmap = vtdmaps[i]; ++ return (vtdmap); ++ } ++ } ++ } ++ ++ /* No matching scope */ ++ return (NULL); ++} ++ + static void + vtd_wbflush(struct vtdmap *vtdmap) + { +@@ -240,7 +306,7 @@ vtd_translation_disable(struct vtdmap *vtdmap) + static int + vtd_init(void) + { +- int i, units, remaining; ++ int i, units, remaining, tmp; + struct vtdmap *vtdmap; + vm_paddr_t ctx_paddr; + char *end, envname[32]; +@@ -291,8 +357,9 @@ vtd_init(void) + break; + + drhd = (ACPI_DMAR_HARDWARE_UNIT *)hdr; +- vtdmaps[units++] = (struct vtdmap *)PHYS_TO_DMAP(drhd->Address); +- if (units >= DRHD_MAX_UNITS) ++ drhds[units] = drhd; ++ vtdmaps[units] = (struct vtdmap *)PHYS_TO_DMAP(drhd->Address); ++ if (++units >= DRHD_MAX_UNITS) + break; + remaining -= hdr->Length; + } +@@ -302,12 +369,18 @@ vtd_init(void) + + skip_dmar: + drhd_num = units; +- vtdmap = vtdmaps[0]; + +- if (VTD_CAP_CM(vtdmap->cap) != 0) +- panic("vtd_init: invalid caching mode"); ++ max_domains = 64 * 1024; /* maximum valid value */ ++ for (i = 0; i < drhd_num; i++){ ++ vtdmap = vtdmaps[i]; ++ ++ if (VTD_CAP_CM(vtdmap->cap) != 0) ++ panic("vtd_init: invalid caching mode"); + +- max_domains = vtd_max_domains(vtdmap); ++ /* take most compatible (minimum) value */ ++ if ((tmp = vtd_max_domains(vtdmap)) < max_domains) ++ max_domains = tmp; ++ } + + /* + * Set up the root-table to point to the context-entry tables +@@ -373,7 +446,6 @@ vtd_add_device(void *arg, uint16_t rid) + struct vtdmap *vtdmap; + uint8_t bus; + +- vtdmap = vtdmaps[0]; + bus = PCI_RID2BUS(rid); + ctxp = ctx_tables[bus]; + pt_paddr = vtophys(dom->ptp); +@@ -385,6 +457,10 @@ vtd_add_device(void *arg, uint16_t rid) + (uint16_t)(ctxp[idx + 1] >> 8)); + } + ++ if ((vtdmap = vtd_device_scope(rid)) == NULL) ++ panic("vtd_add_device: device %x is not in scope for " ++ "any DMA remapping unit", rid); ++ + /* + * Order is important. The 'present' bit is set only after all fields + * of the context pointer are initialized. +@@ -568,8 +644,6 @@ vtd_create_domain(vm_paddr_t maxaddr) + if (drhd_num <= 0) + panic("vtd_create_domain: no dma remapping hardware available"); + +- vtdmap = vtdmaps[0]; +- + /* + * Calculate AGAW. + * Section 3.4.2 "Adjusted Guest Address Width", Architecture Spec. +@@ -594,7 +668,14 @@ vtd_create_domain(vm_paddr_t maxaddr) + pt_levels = 2; + sagaw = 30; + addrwidth = 0; +- tmp = VTD_CAP_SAGAW(vtdmap->cap); ++ ++ tmp = ~0; ++ for (i = 0; i < drhd_num; i++) { ++ vtdmap = vtdmaps[i]; ++ /* take most compatible value */ ++ tmp &= VTD_CAP_SAGAW(vtdmap->cap); ++ } ++ + for (i = 0; i < 5; i++) { + if ((tmp & (1 << i)) != 0 && sagaw >= agaw) + break; +@@ -606,8 +687,8 @@ vtd_create_domain(vm_paddr_t maxaddr) + } + + if (i >= 5) { +- panic("vtd_create_domain: SAGAW 0x%lx does not support AGAW %d", +- VTD_CAP_SAGAW(vtdmap->cap), agaw); ++ panic("vtd_create_domain: SAGAW 0x%x does not support AGAW %d", ++ tmp, agaw); + } + + dom = malloc(sizeof(struct domain), M_VTD, M_ZERO | M_WAITOK); +@@ -634,7 +715,12 @@ vtd_create_domain(vm_paddr_t maxaddr) + * There is not any code to deal with the demotion at the moment + * so we disable superpage mappings altogether. + */ +- dom->spsmask = VTD_CAP_SPS(vtdmap->cap); ++ dom->spsmask = ~0; ++ for (i = 0; i < drhd_num; i++) { ++ vtdmap = vtdmaps[i]; ++ /* take most compatible value */ ++ dom->spsmask &= VTD_CAP_SPS(vtdmap->cap); ++ } + #endif + + SLIST_INSERT_HEAD(&domhead, dom, next); + diff --git a/sysutils/bhyve+/files/freebsd-12/patch-virtio-9p b/sysutils/bhyve+/files/freebsd-12/patch-virtio-9p new file mode 100644 index 000000000000..6799fd986342 --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-12/patch-virtio-9p @@ -0,0 +1,416 @@ +--- usr.sbin/bhyve/bhyve.8.orig 2021-08-19 22:38:50 UTC ++++ usr.sbin/bhyve/bhyve.8 +@@ -242,6 +242,8 @@ Virtio network interface. + Virtio block storage interface. + .It Li virtio-scsi + Virtio SCSI interface. ++.It Li virtio-9p ++Virtio 9p (VirtFS) interface. + .It Li virtio-rnd + Virtio RNG interface. + .It Li virtio-console +@@ -327,6 +329,19 @@ are: + .It Li iid= Ns Ar IID + Initiator ID to use when sending requests to specified CTL port. + The default value is 0. ++.El ++.Pp ++9P devices: ++.Bl -tag -width 10n ++.It Pa sharename=/path/to/share[,9p-device-options] ++.El ++.Pp ++The ++.Ar 9p-device-options ++are: ++.Bl -tag -width 10n ++.It Li ro ++Expose the share in read-only mode. + .El + .Pp + TTY devices: +--- usr.sbin/bhyve/Makefile.orig 2021-08-19 23:00:57 UTC ++++ usr.sbin/bhyve/Makefile +@@ -3,6 +3,7 @@ + # + + .include ++CFLAGS+=-I${SRCTOP}/contrib/lib9p + CFLAGS+=-I${SRCTOP}/sys + .PATH: ${SRCTOP}/sys/cam/ctl + +@@ -43,6 +44,7 @@ SRCS= \ + pci_lpc.c \ + pci_nvme.c \ + pci_passthru.c \ ++ pci_virtio_9p.c \ + pci_virtio_block.c \ + pci_virtio_console.c \ + pci_virtio_net.c \ +@@ -71,7 +73,8 @@ SRCS= \ + .PATH: ${BHYVE_SYSDIR}/sys/amd64/vmm + SRCS+= vmm_instruction_emul.c + +-LIBADD= vmmapi md pthread z util sbuf cam ++LIBADD= md pthread z util sbuf cam casper cap_pwd cap_grp ++LDADD= ../../contrib/lib9p/lib9p.so.1.1 ../../lib/libvmmapi/libvmmapi.so.5.1 + + .if ${MK_INET_SUPPORT} != "no" + CFLAGS+=-DINET +--- usr.sbin/bhyve/pci_virtio_9p.c.orig 2021-08-19 22:44:10 UTC ++++ usr.sbin/bhyve/pci_virtio_9p.c +@@ -0,0 +1,344 @@ ++/*- ++ * Copyright (c) 2015 iXsystems Inc. ++ * Copyright (c) 2017-2018 Jakub Klama ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer ++ * in this position and unchanged. ++ * 2. Redistributions in binary form must reproduce the above copyright ++ * notice, this list of conditions and the following disclaimer in the ++ * documentation and/or other materials provided with the distribution. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++ * SUCH DAMAGE. ++ */ ++ ++/* ++ * VirtIO filesystem passthrough using 9p protocol. ++ */ ++ ++#include ++__FBSDID("$FreeBSD$"); ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "bhyverun.h" ++#include "pci_emul.h" ++#include "virtio.h" ++ ++#define VT9P_MAX_IOV 128 ++#define VT9P_RINGSZ 256 ++#define VT9P_MAXTAGSZ 256 ++#define VT9P_CONFIGSPACESZ (VT9P_MAXTAGSZ + sizeof(uint16_t)) ++ ++static int pci_vt9p_debug; ++#define DPRINTF(params) if (pci_vt9p_debug) printf params ++#define WPRINTF(params) printf params ++ ++/* ++ * Per-device softc ++ */ ++struct pci_vt9p_softc { ++ struct virtio_softc vsc_vs; ++ struct vqueue_info vsc_vq; ++ pthread_mutex_t vsc_mtx; ++ uint64_t vsc_cfg; ++ uint64_t vsc_features; ++ char * vsc_rootpath; ++ struct pci_vt9p_config * vsc_config; ++ struct l9p_backend * vsc_fs_backend; ++ struct l9p_server * vsc_server; ++ struct l9p_connection * vsc_conn; ++}; ++ ++struct pci_vt9p_request { ++ struct pci_vt9p_softc * vsr_sc; ++ struct iovec * vsr_iov; ++ size_t vsr_niov; ++ size_t vsr_respidx; ++ size_t vsr_iolen; ++ uint16_t vsr_idx; ++}; ++ ++struct pci_vt9p_config { ++ uint16_t tag_len; ++ char tag[0]; ++} __attribute__((packed)); ++ ++static int pci_vt9p_send(struct l9p_request *, const struct iovec *, ++ const size_t, const size_t, void *); ++static void pci_vt9p_drop(struct l9p_request *, const struct iovec *, size_t, ++ void *); ++static void pci_vt9p_reset(void *); ++static void pci_vt9p_notify(void *, struct vqueue_info *); ++static int pci_vt9p_cfgread(void *, int, int, uint32_t *); ++static void pci_vt9p_neg_features(void *, uint64_t); ++ ++static struct virtio_consts vt9p_vi_consts = { ++ "vt9p", /* our name */ ++ 1, /* we support 1 virtqueue */ ++ VT9P_CONFIGSPACESZ, /* config reg size */ ++ pci_vt9p_reset, /* reset */ ++ pci_vt9p_notify, /* device-wide qnotify */ ++ pci_vt9p_cfgread, /* read virtio config */ ++ NULL, /* write virtio config */ ++ pci_vt9p_neg_features, /* apply negotiated features */ ++ (1 << 0), /* our capabilities */ ++}; ++ ++ ++static void ++pci_vt9p_reset(void *vsc) ++{ ++ struct pci_vt9p_softc *sc; ++ ++ sc = vsc; ++ ++ DPRINTF(("vt9p: device reset requested !\n")); ++ vi_reset_dev(&sc->vsc_vs); ++} ++ ++static void ++pci_vt9p_neg_features(void *vsc, uint64_t negotiated_features) ++{ ++ struct pci_vt9p_softc *sc = vsc; ++ ++ sc->vsc_features = negotiated_features; ++} ++ ++static int ++pci_vt9p_cfgread(void *vsc, int offset, int size, uint32_t *retval) ++{ ++ struct pci_vt9p_softc *sc = vsc; ++ void *ptr; ++ ++ ptr = (uint8_t *)sc->vsc_config + offset; ++ memcpy(retval, ptr, size); ++ return (0); ++} ++ ++static int ++pci_vt9p_get_buffer(struct l9p_request *req, struct iovec *iov, size_t *niov, ++ void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ size_t n = preq->vsr_niov - preq->vsr_respidx; ++ ++ memcpy(iov, preq->vsr_iov + preq->vsr_respidx, ++ n * sizeof(struct iovec)); ++ *niov = n; ++ return (0); ++} ++ ++static int ++pci_vt9p_send(struct l9p_request *req, const struct iovec *iov, ++ const size_t niov, const size_t iolen, void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ struct pci_vt9p_softc *sc = preq->vsr_sc; ++ ++ preq->vsr_iolen = iolen; ++ ++ pthread_mutex_lock(&sc->vsc_mtx); ++ vq_relchain(&sc->vsc_vq, preq->vsr_idx, preq->vsr_iolen); ++ vq_endchains(&sc->vsc_vq, 1); ++ pthread_mutex_unlock(&sc->vsc_mtx); ++ free(preq); ++ return (0); ++} ++ ++static void ++pci_vt9p_drop(struct l9p_request *req, const struct iovec *iov, size_t niov, ++ void *arg) ++{ ++ struct pci_vt9p_request *preq = req->lr_aux; ++ struct pci_vt9p_softc *sc = preq->vsr_sc; ++ ++ pthread_mutex_lock(&sc->vsc_mtx); ++ vq_relchain(&sc->vsc_vq, preq->vsr_idx, 0); ++ vq_endchains(&sc->vsc_vq, 1); ++ pthread_mutex_unlock(&sc->vsc_mtx); ++ free(preq); ++} ++ ++static void ++pci_vt9p_notify(void *vsc, struct vqueue_info *vq) ++{ ++ struct iovec iov[VT9P_MAX_IOV]; ++ struct pci_vt9p_softc *sc; ++ struct pci_vt9p_request *preq; ++ uint16_t idx, n, i; ++ uint16_t flags[VT9P_MAX_IOV]; ++ ++ sc = vsc; ++ ++ while (vq_has_descs(vq)) { ++ n = vq_getchain(vq, &idx, iov, VT9P_MAX_IOV, flags); ++ preq = calloc(1, sizeof(struct pci_vt9p_request)); ++ preq->vsr_sc = sc; ++ preq->vsr_idx = idx; ++ preq->vsr_iov = iov; ++ preq->vsr_niov = n; ++ preq->vsr_respidx = 0; ++ ++ /* Count readable descriptors */ ++ for (i = 0; i < n; i++) { ++ if (flags[i] & VRING_DESC_F_WRITE) ++ break; ++ ++ preq->vsr_respidx++; ++ } ++ ++ for (int i = 0; i < n; i++) { ++ DPRINTF(("vt9p: vt9p_notify(): desc%d base=%p, " ++ "len=%zu, flags=0x%04x\r\n", i, iov[i].iov_base, ++ iov[i].iov_len, flags[i])); ++ } ++ ++ l9p_connection_recv(sc->vsc_conn, iov, preq->vsr_respidx, preq); ++ } ++} ++ ++ ++static int ++pci_vt9p_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts) ++{ ++ struct pci_vt9p_softc *sc; ++ char *opt; ++ char *sharename = NULL; ++ char *rootpath = NULL; ++ int rootfd; ++ bool ro = false; ++ cap_rights_t rootcap; ++ ++ if (opts == NULL) { ++ printf("virtio-9p: share name and path required\n"); ++ return (1); ++ } ++ ++ while ((opt = strsep(&opts, ",")) != NULL) { ++ if (strchr(opt, '=') != NULL) { ++ if (sharename != NULL) { ++ printf("virtio-9p: more than one share name given\n"); ++ return (1); ++ } ++ ++ sharename = strsep(&opt, "="); ++ rootpath = opt; ++ continue; ++ } ++ ++ if (strcmp(opt, "ro") == 0) { ++ DPRINTF(("read-only mount requested\r\n")); ++ ro = true; ++ continue; ++ } ++ ++ printf("virtio-9p: invalid option '%s'\n", opt); ++ return (1); ++ } ++ ++ if (strlen(sharename) > VT9P_MAXTAGSZ) { ++ printf("virtio-9p: share name too long\n"); ++ return (1); ++ } ++ ++ rootfd = open(rootpath, O_DIRECTORY); ++ if (rootfd < 0) ++ return (-1); ++ ++ sc = calloc(1, sizeof(struct pci_vt9p_softc)); ++ sc->vsc_config = calloc(1, sizeof(struct pci_vt9p_config) + ++ VT9P_MAXTAGSZ); ++ ++ pthread_mutex_init(&sc->vsc_mtx, NULL); ++ ++ cap_rights_init(&rootcap, ++ CAP_LOOKUP, CAP_ACL_CHECK, CAP_ACL_DELETE, CAP_ACL_GET, ++ CAP_ACL_SET, CAP_READ, CAP_WRITE, CAP_SEEK, CAP_FSTAT, ++ CAP_CREATE, CAP_FCHMODAT, CAP_FCHOWNAT, CAP_FTRUNCATE, ++ CAP_LINKAT_SOURCE, CAP_LINKAT_TARGET, CAP_MKDIRAT, CAP_MKNODAT, ++ CAP_PREAD, CAP_PWRITE, CAP_RENAMEAT_SOURCE, CAP_RENAMEAT_TARGET, ++ CAP_SEEK, CAP_SYMLINKAT, CAP_UNLINKAT, CAP_EXTATTR_DELETE, ++ CAP_EXTATTR_GET, CAP_EXTATTR_LIST, CAP_EXTATTR_SET, ++ CAP_FUTIMES, CAP_FSTATFS, CAP_FSYNC, CAP_FPATHCONF); ++ ++ if (cap_rights_limit(rootfd, &rootcap) != 0) ++ return (1); ++ ++ sc->vsc_config->tag_len = (uint16_t)strlen(sharename); ++ memcpy(sc->vsc_config->tag, sharename, sc->vsc_config->tag_len); ++ ++ if (l9p_backend_fs_init(&sc->vsc_fs_backend, rootfd, ro) != 0) { ++ errno = ENXIO; ++ return (1); ++ } ++ ++ if (l9p_server_init(&sc->vsc_server, sc->vsc_fs_backend) != 0) { ++ errno = ENXIO; ++ return (1); ++ } ++ ++ if (l9p_connection_init(sc->vsc_server, &sc->vsc_conn) != 0) { ++ errno = EIO; ++ return (1); ++ } ++ ++ sc->vsc_conn->lc_msize = L9P_MAX_IOV * PAGE_SIZE; ++ sc->vsc_conn->lc_lt.lt_get_response_buffer = pci_vt9p_get_buffer; ++ sc->vsc_conn->lc_lt.lt_send_response = pci_vt9p_send; ++ sc->vsc_conn->lc_lt.lt_drop_response = pci_vt9p_drop; ++ ++ vi_softc_linkup(&sc->vsc_vs, &vt9p_vi_consts, sc, pi, &sc->vsc_vq); ++ sc->vsc_vs.vs_mtx = &sc->vsc_mtx; ++ sc->vsc_vq.vq_qsize = VT9P_RINGSZ; ++ ++ /* initialize config space */ ++ pci_set_cfgdata16(pi, PCIR_DEVICE, VIRTIO_DEV_9P); ++ pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR); ++ pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_STORAGE); ++ pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_TYPE_9P); ++ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR); ++ ++ if (vi_intr_init(&sc->vsc_vs, 1, fbsdrun_virtio_msix())) ++ return (1); ++ vi_set_io_bar(&sc->vsc_vs, 0); ++ ++ return (0); ++} ++ ++struct pci_devemu pci_de_v9p = { ++ .pe_emu = "virtio-9p", ++ .pe_init = pci_vt9p_init, ++ .pe_barwrite = vi_pci_write, ++ .pe_barread = vi_pci_read ++}; ++PCI_EMUL_SET(pci_de_v9p); +--- usr.sbin/bhyve/virtio.h.orig 2021-08-19 22:41:21 UTC ++++ usr.sbin/bhyve/virtio.h +@@ -216,6 +216,7 @@ struct vring_used { + #define VIRTIO_DEV_CONSOLE 0x1003 + #define VIRTIO_DEV_RANDOM 0x1005 + #define VIRTIO_DEV_SCSI 0x1008 ++#define VIRTIO_DEV_9P 0x1009 + + /* + * PCI config space constants. diff --git a/sysutils/bhyve+/files/freebsd-13/patch-custom-libs b/sysutils/bhyve+/files/freebsd-13/patch-custom-libs new file mode 100644 index 000000000000..aa5772dc0511 --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-13/patch-custom-libs @@ -0,0 +1,21 @@ +--- usr.sbin/bhyve/Makefile.orig 2021-09-04 02:15:16.364660000 +0200 ++++ usr.sbin/bhyve/Makefile 2021-09-04 02:21:26.014446000 +0200 +@@ -3,7 +3,7 @@ + # + + .include +-CFLAGS+=-I${.CURDIR}/../../contrib/lib9p ++CFLAGS+=-I${SRCTOP}/contrib/lib9p + CFLAGS+=-I${SRCTOP}/sys + .PATH: ${SRCTOP}/sys/cam/ctl + +@@ -83,7 +83,8 @@ + .PATH: ${BHYVE_SYSDIR}/sys/amd64/vmm + SRCS+= vmm_instruction_emul.c + +-LIBADD= vmmapi md pthread z util sbuf cam 9p ++LIBADD= md pthread z util sbuf cam ++LDADD= ../../contrib/lib9p/lib9p.so.1.1 ../../lib/libvmmapi/libvmmapi.so.5.1 + + .if ${MK_CASPER} != "no" + LIBADD+= casper diff --git a/sysutils/bhyve+/files/freebsd-13/patch-lib9p b/sysutils/bhyve+/files/freebsd-13/patch-lib9p new file mode 100644 index 000000000000..97f2fd5b00a7 --- /dev/null +++ b/sysutils/bhyve+/files/freebsd-13/patch-lib9p @@ -0,0 +1,12 @@ +--- share/mk/src.libnames.mk.orig 2021-09-04 10:14:17.407288000 +0200 ++++ share/mk/src.libnames.mk 2021-09-04 10:15:27.832153000 +0200 +@@ -245,6 +245,9 @@ + # 2nd+ order consumers. Auto-generating this would be better. + _DP_80211= sbuf bsdxml + _DP_9p= sbuf ++.if ${MK_CASPER} != "no" ++_DP_9p+= casper cap_pwd cap_grp ++.endif + _DP_archive= z bz2 lzma bsdxml zstd + _DP_zstd= pthread + .if ${MK_BLACKLIST} != "no" diff --git a/sysutils/bhyve+/files/kernconf/opt_acpi.h b/sysutils/bhyve+/files/kernconf/opt_acpi.h new file mode 100644 index 000000000000..2a4ebae95886 --- /dev/null +++ b/sysutils/bhyve+/files/kernconf/opt_acpi.h @@ -0,0 +1,2 @@ +#define ACPI_DMAR 1 +#define DEV_ACPI 1 diff --git a/sysutils/bhyve+/files/kernconf/opt_bhyve_snapshot.h b/sysutils/bhyve+/files/kernconf/opt_bhyve_snapshot.h new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/sysutils/bhyve+/files/kernconf/opt_ddb.h b/sysutils/bhyve+/files/kernconf/opt_ddb.h new file mode 100644 index 000000000000..79d95ae3ad8d --- /dev/null +++ b/sysutils/bhyve+/files/kernconf/opt_ddb.h @@ -0,0 +1 @@ +#define DDB_CTF 1 diff --git a/sysutils/bhyve+/files/kernconf/opt_global.h b/sysutils/bhyve+/files/kernconf/opt_global.h new file mode 100644 index 000000000000..3c736873d19c --- /dev/null +++ b/sysutils/bhyve+/files/kernconf/opt_global.h @@ -0,0 +1,3 @@ +#define KDB 1 +#define SMP 1 +#define KDTRACE_HOOKS 1 diff --git a/sysutils/bhyve+/files/patch-lib9p b/sysutils/bhyve+/files/patch-lib9p new file mode 100644 index 000000000000..f48b6a8efa91 --- /dev/null +++ b/sysutils/bhyve+/files/patch-lib9p @@ -0,0 +1,24 @@ +--- contrib/lib9p/Makefile.orig 2021-01-08 21:21:39.000000000 UTC ++++ contrib/lib9p/Makefile +@@ -5,7 +5,7 @@ + .include + + LIB= 9p +-SHLIB_MAJOR= 1 ++SHLIB_MAJOR= 1.1 + SRCS= pack.c \ + connection.c \ + request.c log.c \ +@@ -23,11 +23,9 @@ + LIBADD= sbuf + + .if ${MK_CASPER} != "no" +-LIBADD+= libcasper libcap_pwd libcap_grp ++LIBADD+= casper cap_pwd cap_grp + CFLAGS+= -DWITH_CASPER + .endif +- +-SUBDIR= example + + cscope: .PHONY + cd ${.CURDIR}; cscope -buq $$(find . -name '*.[ch]' -print) diff --git a/sysutils/bhyve+/files/patch-libvmmapi b/sysutils/bhyve+/files/patch-libvmmapi new file mode 100644 index 000000000000..16f14a57bf9a --- /dev/null +++ b/sysutils/bhyve+/files/patch-libvmmapi @@ -0,0 +1,33 @@ +--- lib/libvmmapi/Makefile.orig 2021-09-04 01:05:23.110816000 UTC ++++ lib/libvmmapi/Makefile +@@ -6,6 +6,7 @@ + INCS= vmmapi.h + + WARNS?= 2 ++SHLIB_MAJOR?= 5.1 + + LIBADD= util + +--- usr.sbin/bhyvectl/Makefile.orig 2021-09-04 02:33:12.704720000 +0200 ++++ usr.sbin/bhyvectl/Makefile 2021-09-04 02:34:28.740202000 +0200 +@@ -8,7 +8,8 @@ + + MAN= bhyvectl.8 + +-LIBADD= vmmapi util ++LIBADD= util ++LDADD= ../../lib/libvmmapi/libvmmapi.so.5.1 + + WARNS?= 3 + +--- usr.sbin/bhyveload/Makefile.orig 2021-09-04 02:33:20.942548000 +0200 ++++ usr.sbin/bhyveload/Makefile 2021-09-04 02:35:58.712996000 +0200 +@@ -5,7 +5,7 @@ + MAN= bhyveload.8 + PACKAGE= bhyve + +-LIBADD= vmmapi ++LDADD= ../../lib/libvmmapi/libvmmapi.so.5.1 + + WARNS?= 3 + diff --git a/sysutils/bhyve+/files/patch-msi-x-mappings b/sysutils/bhyve+/files/patch-msi-x-mappings new file mode 100644 index 000000000000..4c8f453abbbb --- /dev/null +++ b/sysutils/bhyve+/files/patch-msi-x-mappings @@ -0,0 +1,132 @@ +--- usr.sbin/bhyve/pci_emul.h.orig 2021-08-19 23:00:57 UTC ++++ usr.sbin/bhyve/pci_emul.h +@@ -146,6 +146,7 @@ struct pci_devinst { + struct msix_table_entry *table; /* allocated at runtime */ + void *pba_page; + int pba_page_offset; ++ void *table_page; + } pi_msix; + + void *pi_arg; /* devemu-private data */ +--- usr.sbin/bhyve/pci_passthru.c.orig 2021-08-19 23:00:57 UTC ++++ usr.sbin/bhyve/pci_passthru.c +@@ -324,13 +324,14 @@ msix_table_read(struct passthru_softc *sc, uint64_t of + return (data); + } + ++ /* Should make this an assert. */ + if (offset < pi->pi_msix.table_offset) + return (-1); + + offset -= pi->pi_msix.table_offset; + index = offset / MSIX_TABLE_ENTRY_SIZE; + if (index >= pi->pi_msix.table_count) +- return (-1); ++ goto readbar; + + entry = &pi->pi_msix.table[index]; + entry_offset = offset % MSIX_TABLE_ENTRY_SIZE; +@@ -357,6 +358,33 @@ msix_table_read(struct passthru_softc *sc, uint64_t of + } + + return (data); ++ ++readbar: ++ if (pi->pi_msix.table_page != NULL && offset < 4096) { ++ switch(size) { ++ case 1: ++ src8 = (uint8_t *)(pi->pi_msix.table_page + offset); ++ data = *src8; ++ break; ++ case 2: ++ src16 = (uint16_t *)(pi->pi_msix.table_page + offset); ++ data = *src16; ++ break; ++ case 4: ++ src32 = (uint32_t *)(pi->pi_msix.table_page + offset); ++ data = *src32; ++ break; ++ case 8: ++ src64 = (uint64_t *)(pi->pi_msix.table_page + offset); ++ data = *src64; ++ break; ++ default: ++ return (-1); ++ } ++ return (data); ++ } ++ ++ return (-1); + } + + static void +@@ -403,13 +431,14 @@ msix_table_write(struct vmctx *ctx, int vcpu, struct p + return; + } + ++ /* Should make this an assert. */ + if (offset < pi->pi_msix.table_offset) + return; + + offset -= pi->pi_msix.table_offset; + index = offset / MSIX_TABLE_ENTRY_SIZE; + if (index >= pi->pi_msix.table_count) +- return; ++ goto writebar; + + entry = &pi->pi_msix.table[index]; + entry_offset = offset % MSIX_TABLE_ENTRY_SIZE; +@@ -432,6 +461,31 @@ msix_table_write(struct vmctx *ctx, int vcpu, struct p + entry->msg_data, entry->vector_control); + } + } ++ ++writebar: ++ if (pi->pi_msix.table_page != NULL && offset < 4096) { ++ switch(size) { ++ case 1: ++ dest8 = (uint8_t *)(pi->pi_msix.table_page + offset); ++ *dest8 = data; ++ break; ++ case 2: ++ dest16 = (uint16_t *)(pi->pi_msix.table_page + offset); ++ *dest16 = data; ++ break; ++ case 4: ++ dest32 = (uint32_t *)(pi->pi_msix.table_page + offset); ++ *dest32 = data; ++ break; ++ case 8: ++ dest64 = (uint64_t *)(pi->pi_msix.table_page + offset); ++ *dest64 = data; ++ break; ++ default: ++ break; ++ } ++ return; ++ } + } + + static int +@@ -466,6 +520,21 @@ init_msix_table(struct vmctx *ctx, struct passthru_sof + idx = pi->pi_msix.table_bar; + start = pi->pi_bar[idx].addr; + remaining = pi->pi_bar[idx].size; ++ ++ /* ++ * Some device (against better documentation of the spec) ++ * are mapping other usable address space into the same page ++ * as the end of the MSI-X tables. ++ * At least Intel AX200 being one of them apparently. ++ * Map the page and fall back to it for any reads/writes outside ++ * the MSI-X table in msix_table_{read,write}. ++ */ ++ pi->pi_msix.table_page = mmap(NULL, 4096, PROT_READ | PROT_WRITE, ++ MAP_SHARED, memfd, sc->psc_bar[idx].addr + table_offset); ++ if (pi->pi_msix.table_page == MAP_FAILED) { ++ warn("Failed to map table page for MSI-X on %d/%d/%d", b, s, f); ++ return (-1); ++ } + + if (pi->pi_msix.pba_bar == pi->pi_msix.table_bar) { + pba_offset = pi->pi_msix.pba_offset; diff --git a/sysutils/bhyve+/pkg-descr b/sysutils/bhyve+/pkg-descr new file mode 100644 index 000000000000..b19a5c1e5766 --- /dev/null +++ b/sysutils/bhyve+/pkg-descr @@ -0,0 +1,4 @@ +A patched version of BHyVe, the BSD Hypervisor from the base system +that includes features and fixes that are not yet officially there. + +WWW: https://github.com/pgj/freebsd-bhyve-plus-port diff --git a/sysutils/bhyve+/pkg-plist b/sysutils/bhyve+/pkg-plist new file mode 100644 index 000000000000..4744907bb592 --- /dev/null +++ b/sysutils/bhyve+/pkg-plist @@ -0,0 +1,9 @@ +sbin/bhyve +sbin/bhyvectl +sbin/bhyveload +lib/lib9p.so.1.1 +lib/libvmmapi.so.5.1 +man/man8/bhyve.8.gz +man/man8/bhyvectl.8.gz +man/man8/bhyveload.8.gz +/%%KMODDIR%%/vmm.ko