diff --git a/docs/porting-notes.md b/docs/porting-notes.md
new file mode 100644
index 0000000..f1d25a5
--- /dev/null
+++ b/docs/porting-notes.md
@@ -0,0 +1,105 @@
+
+## 2026-11-11T11:42:59-03:00 staging
+```sh
+stage: headers + skeletons
+```
+
+## 2026-11-11T11:43:18-03:00 staging
+```sh
+stage: headers + skeletons
+```
+
+## 2026-11-11T11:51:34-03:00 staging
+```sh
+stage: headers + skeletons
+```
+
+## 2026-11-11T11:52:34-03:00 staging
+```sh
+stage: headers + skeletons
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf.c -> pfsrc/pf.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_ioctl.c -> pfsrc/pf_ioctl.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_norm.c -> pfsrc/pf_norm.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_if.c -> pfsrc/pf_if.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_lb.c -> pfsrc/pf_lb.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_ruleset.c -> pfsrc/pf_ruleset.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_table.c -> pfsrc/pf_table.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_osfp.c -> pfsrc/pf_osfp.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/pf_syncookies.c -> pfsrc/pf_syncookies.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/radix.c -> compat/radix.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/rtable.c -> compat/rtable.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c crypto/sha2.c -> compat/sha2.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/ifq.c -> pfsrc/ifq.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/hfsc.c -> pfsrc/hfsc.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/fq_codel.c -> pfsrc/fq_codel.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c net/if_pflog.c -> pfsrc/if_pflog.c.c (includes→pfk.h; struct renames; sa_len nulled)
+```
+
+## 2026-11-11T12:08:01-03:00 staging
+```sh
+port_c netinet/ip_divert.c -> pfsrc/ip_divert.c (includes→pfk.h; struct renames; sa_len nulled)
+```
diff --git a/lab/cloud-init/meta-data.tmpl b/lab/cloud-init/meta-data.tmpl
new file mode 100644
index 0000000..9ff0e35
--- /dev/null
+++ b/lab/cloud-init/meta-data.tmpl
@@ -0,0 +1,2 @@
+instance-id: pflab-@VM@-v3
+local-hostname: @VM@
diff --git a/lab/cloud-init/network-config.cli.tmpl b/lab/cloud-init/network-config.cli.tmpl
new file mode 100644
index 0000000..c5c59dd
--- /dev/null
+++ b/lab/cloud-init/network-config.cli.tmpl
@@ -0,0 +1,14 @@
+# cloud-init network config v2 — pftest-cli. mgmt dhcp gives DNS only
+# (use-routes:false); default route goes through pf0 so LAN->WAN traffic
+# exercises pf forwarding. Rendered by scripts/vm-create.sh.
+version: 2
+ethernets:
+ mgmt:
+ match: {macaddress: "@CLI_MAC_MGMT@"}
+ dhcp4: true
+ dhcp4-overrides: {use-routes: false}
+ lan:
+ match: {macaddress: "@CLI_MAC_LAN@"}
+ addresses: [@CLI@]
+ routes:
+ - {to: default, via: @CLI_GW@}
diff --git a/lab/cloud-init/network-config.gw2.tmpl b/lab/cloud-init/network-config.gw2.tmpl
new file mode 100644
index 0000000..f5cfa9b
--- /dev/null
+++ b/lab/cloud-init/network-config.gw2.tmpl
@@ -0,0 +1,13 @@
+# cloud-init network config v2 — pftest-gw2. No mgmt NIC (contract):
+# pf-wan2 + pf-wan only, forwards between them (ip_forward set in user-data);
+# default via pf0 so the guest itself has egress for package installs.
+version: 2
+ethernets:
+ wan2:
+ match: {macaddress: "@GW2_MAC_WAN2@"}
+ addresses: [@GW2_WAN2@]
+ wan:
+ match: {macaddress: "@GW2_MAC_WAN@"}
+ addresses: [@GW2_WAN@]
+ routes:
+ - {to: default, via: @PF0_WAN_IP@}
diff --git a/lab/cloud-init/network-config.pf0.tmpl b/lab/cloud-init/network-config.pf0.tmpl
new file mode 100644
index 0000000..c5764b7
--- /dev/null
+++ b/lab/cloud-init/network-config.pf0.tmpl
@@ -0,0 +1,16 @@
+# cloud-init network config v2 — pftest-pf0. mgmt=dhcp on default net,
+# data ifaces static (lab/ips.env). Rendered by scripts/vm-create.sh.
+version: 2
+ethernets:
+ mgmt:
+ match: {macaddress: "@PF0_MAC_MGMT@"}
+ dhcp4: true
+ lan:
+ match: {macaddress: "@PF0_MAC_LAN@"}
+ addresses: [@PF0_LAN@]
+ wan:
+ match: {macaddress: "@PF0_MAC_WAN@"}
+ addresses: [@PF0_WAN@]
+ wan2:
+ match: {macaddress: "@PF0_MAC_WAN2@"}
+ addresses: [@PF0_WAN2@]
diff --git a/lab/cloud-init/network-config.srv.tmpl b/lab/cloud-init/network-config.srv.tmpl
new file mode 100644
index 0000000..aa74ae5
--- /dev/null
+++ b/lab/cloud-init/network-config.srv.tmpl
@@ -0,0 +1,15 @@
+# cloud-init network config v2 — pftest-srv. mgmt dhcp gives DNS only;
+# default via pf0 (SRV_GW); 10.0.3.0/24 pinned via gw2 so the srv->gw2
+# path is exercised through gw forwarding instead of pf0's own link.
+version: 2
+ethernets:
+ mgmt:
+ match: {macaddress: "@SRV_MAC_MGMT@"}
+ dhcp4: true
+ dhcp4-overrides: {use-routes: false}
+ wan:
+ match: {macaddress: "@SRV_MAC_WAN@"}
+ addresses: [@SRV@]
+ routes:
+ - {to: default, via: @SRV_GW@}
+ - {to: 10.0.3.0/24, via: @GW2_WAN_IP@}
diff --git a/lab/cloud-init/user-data.tmpl b/lab/cloud-init/user-data.tmpl
new file mode 100644
index 0000000..8c67210
--- /dev/null
+++ b/lab/cloud-init/user-data.tmpl
@@ -0,0 +1,23 @@
+#cloud-config
+# Rendered per VM by scripts/vm-create.sh (tokens: @...@).
+hostname: @VM@
+manage_etc_hosts: true
+ssh_pwauth: true
+users:
+ - name: root
+ lock_passwd: false
+ ssh_authorized_keys:
+ - @SSH_PUBKEY@
+chpasswd:
+ expire: false
+ users:
+ - name: root
+ password: "@ROOT_PASS@"
+ type: text
+packages: @LAB_PACKAGES@
+runcmd:
+ - echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/00-pflab.conf
+ - sysctl -q -p /etc/sysctl.d/00-pflab.conf
+ - "printf '@ROOT_PASS@\\n@ROOT_PASS@\\n' | passwd root >/dev/null 2>&1 || true"
+@RUNCMD_EXTRA@
+ - touch /run/pf-lab-ready
diff --git a/lab/domains/pftest-cli.xml.tmpl b/lab/domains/pftest-cli.xml.tmpl
new file mode 100644
index 0000000..c2e726c
--- /dev/null
+++ b/lab/domains/pftest-cli.xml.tmpl
@@ -0,0 +1,49 @@
+
+ @NAME@
+ @VM_MEM_MB@
+ @VM_VCPUS@
+
+
+ hvm
+
+@KERNELBLOCK@
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lab/domains/pftest-gw2.xml.tmpl b/lab/domains/pftest-gw2.xml.tmpl
new file mode 100644
index 0000000..b411e16
--- /dev/null
+++ b/lab/domains/pftest-gw2.xml.tmpl
@@ -0,0 +1,50 @@
+
+
+ @NAME@
+ @VM_MEM_MB@
+ @VM_VCPUS@
+
+
+ hvm
+
+@KERNELBLOCK@
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lab/domains/pftest-pf0.xml.tmpl b/lab/domains/pftest-pf0.xml.tmpl
new file mode 100644
index 0000000..96c3835
--- /dev/null
+++ b/lab/domains/pftest-pf0.xml.tmpl
@@ -0,0 +1,59 @@
+
+ @NAME@
+ @VM_MEM_MB@
+ @VM_VCPUS@
+
+
+ hvm
+
+@KERNELBLOCK@
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lab/domains/pftest-srv.xml.tmpl b/lab/domains/pftest-srv.xml.tmpl
new file mode 100644
index 0000000..2a8817c
--- /dev/null
+++ b/lab/domains/pftest-srv.xml.tmpl
@@ -0,0 +1,49 @@
+
+ @NAME@
+ @VM_MEM_MB@
+ @VM_VCPUS@
+
+
+ hvm
+
+@KERNELBLOCK@
+
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lab/ips.env b/lab/ips.env
new file mode 100644
index 0000000..7f86f92
--- /dev/null
+++ b/lab/ips.env
@@ -0,0 +1,68 @@
+# PF-on-Linux VM lab topology — single source of truth.
+# Consumed by scripts/lab-lib.sh (sourced as shell). VM aliases: pf0 cli srv gw2
+# (domain names are pftest-). Hypervisor host "deb" runs everything.
+
+DEB=192.168.1.242
+DEB_USER=root
+
+# --- addressing (contract) ---
+PF0_MGMT=dhcp # default-net NAT 192.168.122.0/24 (dhcp)
+PF0_LAN=10.0.1.1/24
+PF0_WAN=10.0.2.1/24
+PF0_WAN2=10.0.3.1/24
+CLI=10.0.1.10/24
+CLI_GW=10.0.1.1
+SRV=10.0.2.20/24
+SRV_GW=10.0.2.1
+GW2_WAN2=10.0.3.2/24
+GW2_WAN=10.0.2.2/24 # gw2 ip_forward=1 forwards wan2<->wan
+
+# IPs that laptop `ssh pf0|cli|srv|gw2` (ProxyJump via deb) and nested ssh use.
+PF0_SSH=10.0.1.1
+CLI_SSH=10.0.1.10
+SRV_SSH=10.0.2.20
+GW2_SSH=10.0.3.2 # reachable from deb via pf-wan2 bridge IP
+
+# --- libvirt networks ---
+MGMT_NET=default # start+autostart; NAT, dhcp
+NET_PF_LAN=pf-lan # 10.0.1.0/24, forward=none
+NET_PF_WAN=pf-wan
+NET_PF_WAN2=pf-wan2
+# Host-side bridge addresses (NOT used by any guest; let deb route to VMs).
+PF_LAN_HOSTIP=10.0.1.254
+PF_WAN_HOSTIP=10.0.2.254
+PF_WAN2_HOSTIP=10.0.3.254
+PF_NET_PREFIX=255.255.255.0
+
+# --- domain sizing ---
+VM_VCPUS=2
+VM_MEM_MB=1024
+
+# --- MACs (match blocks in network-config templates) ---
+PF0_MAC_MGMT=52:54:00:aa:00:01
+PF0_MAC_LAN=52:54:00:aa:00:02
+PF0_MAC_WAN=52:54:00:aa:00:03
+PF0_MAC_WAN2=52:54:00:aa:00:04
+CLI_MAC_MGMT=52:54:00:bb:00:01
+CLI_MAC_LAN=52:54:00:bb:00:02
+SRV_MAC_MGMT=52:54:00:cc:00:01
+SRV_MAC_WAN=52:54:00:cc:00:02
+GW2_MAC_WAN=52:54:00:dd:00:01
+GW2_MAC_WAN2=52:54:00:dd:00:02
+
+# --- root creds / packages (cloud-init) ---
+ROOT_PASS=pftest
+LAB_PACKAGES='[iperf3, tcpdump, python3, py3-scapy, bash]'
+
+# --- paths ---
+IMG_DIR=/var/lib/libvirt/images
+BASE_IMG=$IMG_DIR/alpine-base.qcow2 # immutable; per-VM disks back onto it
+SEED_DIR=/var/lib/libvirt/pflab/seeds # cloud-init dirs + seed.iso per VM
+DEPLOY_DIR=/var/lib/pflab/deploy # vm-deploy.sh landing zone (on deb)
+BOOT_DIR=/var/lib/pflab/boot # --pf0-kernel artifacts (on deb)
+LAB_KEY_DEB=/root/.ssh/pflab_ed # keypair injected into VM authorized_keys
+LAB_KEY_LAPTOP=$HOME/.ssh/pflab_ed
+LAPTOP_SSH_FRAG=$HOME/.ssh/config.d/pflab
+
+# Laptop source image fetched by scripts/fetch-sources.sh (see vendorize.sh style).
+BASE_SRC_REL=_vendor/images/alpine-3.22-x86_64-cloud.qcow2
diff --git a/module/..module-common.o.cmd b/module/..module-common.o.cmd
new file mode 100644
index 0000000..40a0cc8
--- /dev/null
+++ b/module/..module-common.o.cmd
@@ -0,0 +1,1143 @@
+savedcmd_.module-common.o := gcc -Wp,-MMD,./..module-common.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -DMODULE -DKBUILD_BASENAME='".module_common"' -DKBUILD_MODNAME='".module_common.o"' -D__KBUILD_MODNAME=.module_common.o -c -o .module-common.o /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module-common.c ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module .module-common.o
+
+source_.module-common.o := /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module-common.c
+
+deps_.module-common.o := \
+ $(wildcard include/config/UNWINDER_ORC) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/TRACING) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ $(wildcard include/config/KPROBES) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build-salt.h \
+ $(wildcard include/config/BUILD_SALT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elfnote.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elfnote-lto.h \
+ $(wildcard include/config/LTO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vermagic.h \
+ $(wildcard include/config/PREEMPT_BUILD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/utsrelease.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vermagic.h \
+ $(wildcard include/config/M586TSC) \
+ $(wildcard include/config/M586MMX) \
+ $(wildcard include/config/MATOM) \
+ $(wildcard include/config/M686) \
+ $(wildcard include/config/MPENTIUMII) \
+ $(wildcard include/config/MPENTIUMIII) \
+ $(wildcard include/config/MPENTIUMM) \
+ $(wildcard include/config/MPENTIUM4) \
+ $(wildcard include/config/MK6) \
+ $(wildcard include/config/MK7) \
+ $(wildcard include/config/MCRUSOE) \
+ $(wildcard include/config/MEFFICEON) \
+ $(wildcard include/config/MCYRIXIII) \
+ $(wildcard include/config/MVIAC3_2) \
+ $(wildcard include/config/MVIAC7) \
+ $(wildcard include/config/MGEODEGX1) \
+ $(wildcard include/config/MGEODE_LX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_header.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/orc_hash.h \
+
+.module-common.o: $(deps_.module-common.o)
+
+$(deps_.module-common.o):
+
+.module-common.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool)
diff --git a/module/.Module.symvers.cmd b/module/.Module.symvers.cmd
new file mode 100644
index 0000000..4c09105
--- /dev/null
+++ b/module/.Module.symvers.cmd
@@ -0,0 +1 @@
+savedcmd_Module.symvers := /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/mod/modpost -M -o Module.symvers -n -T modules.order -i /home/lgcosta/lab/linux_kernel/linux-7.3.4/Module.symvers -e
diff --git a/module/.modules.order.cmd b/module/.modules.order.cmd
new file mode 100644
index 0000000..550cebe
--- /dev/null
+++ b/module/.modules.order.cmd
@@ -0,0 +1 @@
+savedcmd_modules.order := { echo pf.o; :; } > modules.order
diff --git a/module/.pf.ko.cmd b/module/.pf.ko.cmd
new file mode 100644
index 0000000..be8d3a3
--- /dev/null
+++ b/module/.pf.ko.cmd
@@ -0,0 +1 @@
+savedcmd_pf.ko := ld -r -m elf_x86_64 --fatal-warnings -z noexecstack --no-warn-rwx-segments --build-id=sha1 --force-group-allocation -T /home/lgcosta/lab/linux_kernel/linux-7.3.4/scripts/module.lds -o pf.ko pf.o pf.mod.o .module-common.o
diff --git a/module/.pf.mod.cmd b/module/.pf.mod.cmd
new file mode 100644
index 0000000..1713f5e
--- /dev/null
+++ b/module/.pf.mod.cmd
@@ -0,0 +1 @@
+savedcmd_pf.mod := printf '%s\n' pfsrc/pfk_mod.o pfsrc/pfk_hooks.o compat/pfk_mbuf.o compat/pfk_kern.o compat/pfk_if.o compat/pfk_xmit.o compat/siphash.o compat/toeplitz.o | awk '!x[$$0]++ { print("./"$$0) }' > pf.mod
diff --git a/module/.pf.mod.o.cmd b/module/.pf.mod.o.cmd
new file mode 100644
index 0000000..b61e7bd
--- /dev/null
+++ b/module/.pf.mod.o.cmd
@@ -0,0 +1,1117 @@
+savedcmd_pf.mod.o := gcc -Wp,-MMD,./.pf.mod.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -DMODULE -DKBUILD_BASENAME='"pf.mod"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pf.mod.o pf.mod.c ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module pf.mod.o
+
+source_pf.mod.o := pf.mod.c
+
+deps_pf.mod.o := \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/TRACING) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ $(wildcard include/config/KPROBES) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export-internal.h \
+ $(wildcard include/config/PARISC) \
+
+pf.mod.o: $(deps_pf.mod.o)
+
+$(deps_pf.mod.o):
+
+pf.mod.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool)
diff --git a/module/.pf.o.cmd b/module/.pf.o.cmd
new file mode 100644
index 0000000..7161ee8
--- /dev/null
+++ b/module/.pf.o.cmd
@@ -0,0 +1,3 @@
+savedcmd_pf.o := ld -m elf_x86_64 --fatal-warnings -z noexecstack --no-warn-rwx-segments -r -o pf.o @pf.mod ; /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --prefix=16 --orc --retpoline --rethunk --static-call --uaccess --link --module pf.o
+
+pf.o: $(wildcard /home/lgcosta/lab/linux_kernel/linux-7.3.4/tools/objtool/objtool)
diff --git a/module/Makefile b/module/Makefile
new file mode 100644
index 0000000..94395ec
--- /dev/null
+++ b/module/Makefile
@@ -0,0 +1,17 @@
+# PF-on-Linux kernel module build (out-of-tree)
+# Build: make -C /path/to/linux-7.3.4 M=$PWD (or scripts/build-module.sh)
+ccflags-y := -I$(src)/include -I$(src)/include/compat -DPFLINUX=1 \
+ -Wno-declaration-after-statement
+
+# M1 skeleton set — staged engine files (pf.c, pf_ioctl.c, ...) are added
+# per plan tasks T7b/T10/T11/T12; keep list explicit (no wildcards).
+pf-objs := pfsrc/pfk_mod.o pfsrc/pfk_hooks.o \
+ compat/pfk_mbuf.o compat/pfk_kern.o compat/pfk_if.o compat/pfk_xmit.o \
+ compat/siphash.o compat/toeplitz.o
+# staged BSD sources (uncomment as ported):
+# pf-objs += compat/sha2.o compat/sha1.o compat/siphash.o compat/toeplitz.o
+# pf-objs += compat/radix.o compat/rtable.o
+# pf-objs += pfsrc/pf.o pfsrc/pf_ioctl.o pfsrc/pf_norm.o pfsrc/pf_if.o pfsrc/pf_lb.o
+# pf-objs += pfsrc/pf_ruleset.o pfsrc/pf_table.o pfsrc/pf_osfp.o pfsrc/pf_syncookies.o
+
+obj-m := pf.o
diff --git a/module/compat/.pfk_if.o.cmd b/module/compat/.pfk_if.o.cmd
new file mode 100644
index 0000000..a2e1427
--- /dev/null
+++ b/module/compat/.pfk_if.o.cmd
@@ -0,0 +1,1820 @@
+savedcmd_compat/pfk_if.o := gcc -Wp,-MMD,compat/.pfk_if.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_if"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_if.o compat/pfk_if.c
+
+source_compat/pfk_if.o := compat/pfk_if.c
+
+deps_compat/pfk_if.o := \
+ $(wildcard include/config/IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+
+compat/pfk_if.o: $(deps_compat/pfk_if.o)
+
+$(deps_compat/pfk_if.o):
diff --git a/module/compat/.pfk_kern.o.cmd b/module/compat/.pfk_kern.o.cmd
new file mode 100644
index 0000000..b9d7464
--- /dev/null
+++ b/module/compat/.pfk_kern.o.cmd
@@ -0,0 +1,1820 @@
+savedcmd_compat/pfk_kern.o := gcc -Wp,-MMD,compat/.pfk_kern.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_kern"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_kern.o compat/pfk_kern.c
+
+source_compat/pfk_kern.o := compat/pfk_kern.c
+
+deps_compat/pfk_kern.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+
+compat/pfk_kern.o: $(deps_compat/pfk_kern.o)
+
+$(deps_compat/pfk_kern.o):
diff --git a/module/compat/.pfk_mbuf.o.cmd b/module/compat/.pfk_mbuf.o.cmd
new file mode 100644
index 0000000..9fa091b
--- /dev/null
+++ b/module/compat/.pfk_mbuf.o.cmd
@@ -0,0 +1,1820 @@
+savedcmd_compat/pfk_mbuf.o := gcc -Wp,-MMD,compat/.pfk_mbuf.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_mbuf"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_mbuf.o compat/pfk_mbuf.c
+
+source_compat/pfk_mbuf.o := compat/pfk_mbuf.c
+
+deps_compat/pfk_mbuf.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+
+compat/pfk_mbuf.o: $(deps_compat/pfk_mbuf.o)
+
+$(deps_compat/pfk_mbuf.o):
diff --git a/module/compat/.pfk_xmit.o.cmd b/module/compat/.pfk_xmit.o.cmd
new file mode 100644
index 0000000..284b3a6
--- /dev/null
+++ b/module/compat/.pfk_xmit.o.cmd
@@ -0,0 +1,1820 @@
+savedcmd_compat/pfk_xmit.o := gcc -Wp,-MMD,compat/.pfk_xmit.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_xmit"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/pfk_xmit.o compat/pfk_xmit.c
+
+source_compat/pfk_xmit.o := compat/pfk_xmit.c
+
+deps_compat/pfk_xmit.o := \
+ $(wildcard include/config/IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+
+compat/pfk_xmit.o: $(deps_compat/pfk_xmit.o)
+
+$(deps_compat/pfk_xmit.o):
diff --git a/module/compat/.siphash.o.cmd b/module/compat/.siphash.o.cmd
new file mode 100644
index 0000000..6e51308
--- /dev/null
+++ b/module/compat/.siphash.o.cmd
@@ -0,0 +1,1820 @@
+savedcmd_compat/siphash.o := gcc -Wp,-MMD,compat/.siphash.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"siphash"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/siphash.o compat/siphash.c
+
+source_compat/siphash.o := compat/siphash.c
+
+deps_compat/siphash.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+
+compat/siphash.o: $(deps_compat/siphash.o)
+
+$(deps_compat/siphash.o):
diff --git a/module/compat/.toeplitz.o.cmd b/module/compat/.toeplitz.o.cmd
new file mode 100644
index 0000000..9662164
--- /dev/null
+++ b/module/compat/.toeplitz.o.cmd
@@ -0,0 +1,1822 @@
+savedcmd_compat/toeplitz.o := gcc -Wp,-MMD,compat/.toeplitz.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"toeplitz"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o compat/toeplitz.o compat/toeplitz.c
+
+source_compat/toeplitz.o := compat/toeplitz.c
+
+deps_compat/toeplitz.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crypto.h \
+
+compat/toeplitz.o: $(deps_compat/toeplitz.o)
+
+$(deps_compat/toeplitz.o):
diff --git a/module/compat/pfk_if.c b/module/compat/pfk_if.c
new file mode 100644
index 0000000..96c29f8
--- /dev/null
+++ b/module/compat/pfk_if.c
@@ -0,0 +1,387 @@
+/*
+ * PF-on-Linux ifnet/address registry (ISC 2026).
+ * Maintains BSD-flavored struct pfk_ifnet views over net_device, refreshed
+ * address snapshots, egress tracking, and name/index lookups. All ops under
+ * NET_LOCK (read for lookups, write for list mutation) except notifier which
+ * uses its own spinlock + work.
+ */
+#include
+
+static DEFINE_IDR(pfk_ifnet_idr);
+static DEFINE_SPINLOCK(pfk_ifnet_lock);
+static struct pfk_ifnet *pfk_egress;
+
+static void pfk_ifnet_release(struct rcu_head *rhp)
+{
+ struct pfk_ifnet *ifp = container_of(rhp, struct pfk_ifnet, rcu);
+
+ pfk_if_free(ifp);
+}
+
+static struct pfk_ifnet *
+pfk_ifnet_new(struct net_device *dev)
+{
+ struct pfk_ifnet *ifp = kzalloc(sizeof(*ifp), GFP_KERNEL);
+
+ if (!ifp)
+ return NULL;
+ strscpy(ifp->if_xname, dev->name, sizeof(ifp->if_xname));
+ ifp->if_index = dev->ifindex;
+ ifp->dev = dev;
+ ifp->alive = 1;
+ INIT_LIST_HEAD(&ifp->link);
+ ifp->if_type = IFT_OTHER;
+ switch (dev->type) {
+ case ARPHRD_ETHER: ifp->if_type = IFT_ETHER; break;
+ case ARPHRD_LOOPBACK: ifp->if_type = IFT_LOOP; break;
+ case ARPHRD_PPP: ifp->if_type = IFT_PPPOINT; break;
+ case ARPHRD_SIT: case ARPHRD_TUNNEL: case ARPHRD_IP6GRE:
+ ifp->if_type = IFT_GIF; break;
+ }
+ return ifp;
+}
+
+static int
+pfk_dev_flags_bsd(struct net_device *dev)
+{
+ int f = 0;
+
+ if (dev->flags & IFF_UP) f |= PFIFF_UP;
+ if (dev->flags & IFF_BROADCAST) f |= PFIFF_BROADCAST;
+ if (dev->flags & IFF_DEBUG) f |= PFIFF_DEBUG;
+ if (dev->flags & IFF_LOOPBACK) f |= PFIFF_LOOPBACK;
+ if (dev->flags & IFF_POINTOPOINT) f |= PFIFF_POINTOPOINT;
+ if (netif_running(dev)) f |= PFIFF_RUNNING;
+ if (dev->flags & IFF_PROMISC) f |= PFIFF_PROMISC;
+ if (dev->flags & IFF_ALLMULTI) f |= PFIFF_ALLMULTI;
+ if (dev->flags & IFF_MULTICAST) f |= PFIFF_MULTICAST;
+ if (!netif_running(dev)) f |= PFIFF_RESOLVE;
+ return f;
+}
+
+void
+pfk_if_refresh(struct pfk_ifnet *ifp)
+{
+ ifp->if_mtu = ifp->dev->mtu;
+ ifp->if_flags = pfk_dev_flags_bsd(ifp->dev);
+ /* address snapshot: rebuild list from Linux in_ifaddr/inet6_ifaddr */
+ pfk_if_addrlist_refresh(ifp);
+}
+
+struct pfk_ifnet *
+pfk_ifp_byindex(int idx)
+{
+ struct pfk_ifnet *ifp;
+
+ if (idx <= 0)
+ return NULL;
+ ifp = idr_find(&pfk_ifnet_idr, idx);
+ return ifp && ifp->alive ? ifp : NULL;
+}
+
+struct pfk_ifnet *
+pfk_ifp_bydev(struct net_device *dev)
+{
+ return dev ? pfk_ifp_byindex(dev->ifindex) : NULL;
+}
+
+struct pfk_ifnet *
+pfk_ifp_byname(const char *name)
+{
+ struct net_device *dev;
+ struct pfk_ifnet *ifp;
+
+ dev = dev_get_by_name(&init_net, name);
+ if (!dev)
+ return NULL;
+ ifp = pfk_ifp_bydev(dev);
+ dev_put(dev);
+ return ifp;
+}
+
+void
+pfk_if_stats(struct pfk_ifnet *ifp, struct pfk_if_data *out)
+{
+ memset(out, 0, sizeof(*out));
+ out->ifi_ibytes = ifp->dev->stats.rx_bytes;
+ out->ifi_obytes = ifp->dev->stats.tx_bytes;
+}
+
+/* -------- address snapshots -------- */
+static struct pfk_ifaddr *
+pfkifa_new(struct pfk_ifnet *ifp, int family)
+{
+ struct pfk_ifaddr *ifa = kzalloc(sizeof(*ifa), GFP_KERNEL);
+
+ if (!ifa)
+ return NULL;
+ ifa->ifa_ifp = ifp;
+ ifa->dev = ifp->dev;
+ ifa->family = family;
+ ifa->ifa_refcnt = 1;
+ ifa->ifa_addr = (struct sockaddr *)&ifa->ifa_addr_storage;
+ return ifa;
+}
+
+int
+pfk_if_addrlist_refresh(struct pfk_ifnet *ifp)
+{
+ struct pfk_ifaddr *ifa, *next;
+ struct net_device *dev = ifp->dev;
+
+ /* free old */
+ for (ifa = ifp->if_addrlist; ifa; ifa = next) {
+ next = ifa->ifa_next;
+ kfree(ifa);
+ }
+ ifp->if_addrlist = NULL;
+
+ rcu_read_lock();
+ /* IPv4 */
+ {
+ struct in_device *idev = __in_dev_get_rcu(dev);
+ struct in_ifaddr *ifa4;
+
+ if (idev)
+ for (ifa4 = rcu_dereference(idev->ifa_list); ifa4;
+ ifa4 = rcu_dereference(ifa4->ifa_next)) {
+ ifa = pfkifa_new(ifp, AF_INET);
+ if (!ifa)
+ continue;
+ ifa->addr4 = ifa4->ifa_address;
+ ifa->ifa_addr->sa_family = AF_INET;
+ {
+ struct sockaddr_in *sin =
+ sintosa(ifa->ifa_addr);
+ sin->sin_addr.s_addr = ifa4->ifa_address;
+ sin->sin_family = AF_INET;
+ }
+ ifa->ifa_next = ifp->if_addrlist;
+ ifp->if_addrlist = ifa;
+ }
+ }
+ /* IPv6 */
+#if IS_ENABLED(CONFIG_IPV6)
+ {
+ struct inet6_dev *idev6 = __in6_dev_get(dev);
+ struct inet6_ifaddr *ifa6;
+
+ if (idev6)
+ list_for_each_entry(ifa6, &idev6->addr_list, if_list) {
+ ifa = pfkifa_new(ifp, AF_INET6);
+ if (!ifa)
+ continue;
+ ifa->addr6 = ifa6->addr;
+ ifa->scope = ifa6->scope;
+ ifa->ifa_addr->sa_family = AF_INET6;
+ {
+ struct sockaddr_in6 *sin6 =
+ sin6tosa(ifa->ifa_addr);
+ sin6->sin6_family = AF_INET6;
+ sin6->sin6_addr = ifa6->addr;
+ }
+ ifa->ifa_next = ifp->if_addrlist;
+ ifp->if_addrlist = ifa;
+ }
+ }
+#endif
+ rcu_read_unlock();
+ return 0;
+}
+
+struct pfk_ifaddr *
+pfk_ifwithaddr(const struct sockaddr *sa)
+{
+ struct pfk_ifnet *ifp;
+ struct pfk_ifaddr *ifa;
+
+ for (ifp = pfk_if_first(); ifp; ifp = pfk_if_next(ifp)) {
+ for (ifa = ifp->if_addrlist; ifa; ifa = ifa->ifa_next) {
+ if (ifa->family != sa->sa_family)
+ continue;
+ if (sa->sa_family == AF_INET &&
+ ifa->addr4 == sintosa(sa)->sin_addr.s_addr)
+ return ifa;
+ if (sa->sa_family == AF_INET6 &&
+ !memcmp(&ifa->addr6, &sin6tosa(sa)->sin6_addr,
+ sizeof(struct in6_addr)))
+ return ifa;
+ }
+ }
+ return NULL;
+}
+
+void
+pfk_if_free(struct pfk_ifnet *ifp)
+{
+ struct pfk_ifaddr *ifa, *next;
+
+ for (ifa = ifp->if_addrlist; ifa; ifa = next) {
+ next = ifa->ifa_next;
+ kfree(ifa);
+ }
+ kfree(ifp);
+}
+
+/* -------- netdev events -------- */
+static int
+pfk_netdev_event(struct notifier_block *nb, unsigned long ev, void *ptr)
+{
+ struct net_device *dev = netdev_notifier_info_to_dev(ptr);
+ struct pfk_ifnet *ifp;
+ unsigned long flags;
+
+ switch (ev) {
+ case NETDEV_REGISTER:
+ ifp = pfk_ifnet_new(dev);
+ if (!ifp)
+ return NOTIFY_DONE;
+ pfk_if_refresh(ifp);
+ spin_lock_irqsave(&pfk_ifnet_lock, flags);
+ if (idr_find(&pfk_ifnet_idr, dev->ifindex))
+ idr_remove(&pfk_ifnet_idr, dev->ifindex);
+ if (idr_alloc(&pfk_ifnet_idr, ifp, dev->ifindex,
+ dev->ifindex + 1, GFP_ATOMIC) < 0) {
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+ kfree(ifp);
+ return NOTIFY_DONE;
+ }
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+ break;
+ case NETDEV_UNREGISTER:
+ spin_lock_irqsave(&pfk_ifnet_lock, flags);
+ ifp = idr_find(&pfk_ifnet_idr, dev->ifindex);
+ if (ifp) {
+ ifp->alive = 0;
+ idr_remove(&pfk_ifnet_idr, dev->ifindex);
+ call_rcu(&ifp->rcu, pfk_ifnet_release);
+ }
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+ break;
+ case NETDEV_CHANGE:
+ case NETDEV_CHANGENAME:
+ case NETDEV_CHANGEMTU:
+ ifp = pfk_ifp_bydev(dev);
+ if (ifp)
+ pfk_if_refresh(ifp);
+ break;
+ case NETDEV_DOWN:
+ case NETDEV_UP: {
+ ifp = pfk_ifp_bydev(dev);
+ if (ifp)
+ pfk_if_refresh(ifp);
+ pfk_egress_refresh();
+ break;
+ }
+ }
+ pfk_egress_refresh();
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block pfk_netdev_nb = {
+ .notifier_call = pfk_netdev_event,
+};
+
+/* -------- egress -------- */
+void
+pfk_egress_refresh(void)
+{
+ struct pfk_ifnet *ifp = NULL;
+ struct net_device *dev;
+
+ /* PFLINUX: default route lookup for 0.0.0.0 via FIB */
+ rcu_read_lock();
+ dev = ip_rt_get_default_dev(&init_net); /* helper, P1 export */
+ rcu_read_unlock();
+ ifp = pfk_ifp_bydev(dev);
+ if (ifp)
+ ifp->if_xflags |= 0x00000001; /* BSD IFFX_EGRESS value */
+ pfk_egress = ifp;
+}
+
+struct pfk_ifnet *
+pfk_egress_if(void)
+{
+ return pfk_egress;
+}
+
+/* -------- iteration -------- */
+struct pfk_ifnet *
+pfk_if_first(void)
+{
+ int id = -1;
+
+ return pfk_if_next_from(&id);
+}
+/* callers keep id on stack; helper returns next or NULL */
+struct pfk_ifnet *
+pfk_if_next_from(int *idp)
+{
+ struct pfk_ifnet *ifp;
+ unsigned long flags;
+
+ spin_lock_irqsave(&pfk_ifnet_lock, flags);
+ ifp = idr_get_next(&pfk_ifnet_idr, idp);
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+ if (ifp)
+ (*idp)++;
+ return ifp && ifp->alive ? ifp : (ifp ? pfk_if_next_from(idp) : NULL);
+}
+
+struct pfk_ifnet *
+pfk_if_next(struct pfk_ifnet *ifp)
+{
+ int id = ifp ? ifp->if_index : -1;
+
+ return pfk_if_next_from(&id);
+}
+
+int
+pfk_if_init(void)
+{
+ struct net_device *dev;
+ int err;
+
+ err = register_netdevice_notifier(&pfk_netdev_nb);
+ if (err)
+ return err;
+ /* populate existing devices */
+ rtnl_lock();
+ for_each_netdev(&init_net, dev) {
+ struct pfk_ifnet *ifp = pfk_ifnet_new(dev);
+ unsigned long flags;
+
+ if (!ifp)
+ continue;
+ spin_lock_irqsave(&pfk_ifnet_lock, flags);
+ if (!idr_find(&pfk_ifnet_idr, dev->ifindex))
+ idr_alloc(&pfk_ifnet_idr, ifp, dev->ifindex,
+ dev->ifindex + 1, GFP_KERNEL);
+ else
+ ifp = NULL; /* already tracked by notifier */
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+ if (ifp)
+ pfk_if_refresh(ifp);
+ }
+ rtnl_unlock();
+ pfk_egress_refresh();
+ return 0;
+}
+
+void
+pfk_if_exit(void)
+{
+ struct pfk_ifnet *ifp;
+ int id = -1;
+ unsigned long flags;
+
+ unregister_netdevice_notifier(&pfk_netdev_nb);
+ spin_lock_irqsave(&pfk_ifnet_lock, flags);
+ while ((ifp = idr_get_next(&pfk_ifnet_idr, &id)) != NULL) {
+ ifp->alive = 0;
+ idr_remove(&pfk_ifnet_idr, id);
+ kfree(ifp);
+ id = -1;
+ }
+ spin_unlock_irqrestore(&pfk_ifnet_lock, flags);
+}
diff --git a/module/compat/pfk_kern.c b/module/compat/pfk_kern.c
new file mode 100644
index 0000000..7d0c6ce
--- /dev/null
+++ b/module/compat/pfk_kern.c
@@ -0,0 +1,332 @@
+/*
+ * PF-on-Linux kernel API compatibility (log/lock/malloc/pool/timeout/tsleep)
+ * ISC (c) 2026 PF-on-Linux contributors
+ */
+#include
+
+/* ---------------- logging ---------------- */
+void
+pfk_log(int level, const char *fmt, ...)
+{
+ char buf[512];
+ va_list ap;
+
+ if (level < 0 || level > LOG_DEBUG)
+ level = LOG_INFO;
+ va_start(ap, fmt);
+ vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ switch (level) {
+ case LOG_EMERG: pr_emerg("%s\n", buf); break;
+ case LOG_ALERT: pr_alert("%s\n", buf); break;
+ case LOG_CRIT: pr_crit("%s\n", buf); break;
+ case LOG_ERR: pr_err("%s\n", buf); break;
+ case LOG_WARNING: pr_warn("%s\n", buf); break;
+ case LOG_NOTICE: pr_notice("%s\n", buf); break;
+ default:
+ pr_info_ratelimited("%s\n", buf); break;
+ }
+}
+
+int
+pfk_printk_compat(const char *fmt, ...)
+{
+ char buf[512];
+ va_list ap;
+ int n;
+
+ va_start(ap, fmt);
+ n = vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ if (n > 0)
+ pr_info("%s", buf);
+ return n;
+}
+
+/* ---------------- NET_LOCK ---------------- */
+static DECLARE_RWSEM(pfk_net_sem);
+static atomic_t pfk_net_readers = ATOMIC_INIT(0);
+
+void pfk_net_lock_init(void) { }
+void pfk_net_lock(void) { down_write(&pfk_net_sem); }
+void pfk_net_unlock(void) { up_write(&pfk_net_sem); }
+void pfk_net_read_enter(void) { down_read(&pfk_net_sem);
+ atomic_inc(&pfk_net_readers); }
+void pfk_net_read_release(void){ atomic_dec(&pfk_net_readers);
+ up_read(&pfk_net_sem); }
+
+void
+rw_init(struct rwlock *l, const char *name)
+{
+ init_rwsem(&l->sem);
+ l->name = name;
+ l->is_writer = 0;
+ atomic_set(&l->readers, 0);
+}
+
+void
+rw_enter(struct rwlock *l, int mode)
+{
+ if (mode == RW_WRITER) {
+ down_write(&l->sem);
+ l->is_writer = 1;
+ } else {
+ down_read(&l->sem);
+ atomic_inc(&l->readers);
+ }
+}
+
+void
+rw_exit(struct rwlock *l)
+{
+ if (l->is_writer) {
+ l->is_writer = 0;
+ up_write(&l->sem);
+ } else {
+ atomic_dec(&l->readers);
+ up_read(&l->sem);
+ }
+}
+
+int
+rw_status(struct rwlock *l)
+{
+ return l->is_writer ? RW_WRITER :
+ atomic_read(&l->readers) ? RW_READER : RW_NAPUTS;
+}
+
+/* ---------------- malloc ---------------- */
+void *
+pfk_malloc(size_t sz, int flags)
+{
+ gfp_t g = (flags & M_WAITOK) ? GFP_KERNEL : GFP_ATOMIC;
+
+ if (flags & M_ZERO)
+ return kzalloc(sz, g);
+ return kmalloc(sz, g);
+}
+
+void
+pfk_free(void *p)
+{
+ kfree(p);
+}
+
+/* ---------------- pools ---------------- */
+static atomic64_t pfk_pool_id = ATOMIC64_INIT(0);
+
+int
+pool_init(struct pool *pl, size_t size, int align, int ipl, const char *use,
+ void *p, int flags, void (*ih)(void *, void *), void *arg,
+ struct srcptr_static *sp)
+{
+ memset(pl, 0, sizeof(*pl));
+ pl->p_size = size;
+ return 0; /* slab lazily created on first pool_get */
+}
+
+static int
+pool_get_cache(struct pool *pl)
+{
+ char nm[64];
+ struct kmem_cache *c;
+
+ snprintf(nm, sizeof(nm), "pfk_pool_%llu",
+ (unsigned long long)atomic64_inc_return(&pfk_pool_id));
+ c = kmem_cache_create_usercopy(nm, pl->p_size, 0, SLAB_HWCACHE_ALIGN,
+ 0, pl->p_size, NULL);
+ pl->slab = c;
+ return c ? 0 : -ENOMEM;
+}
+
+void
+pool_destroy(struct pool *pl)
+{
+ if (pl->slab) {
+ kmem_cache_destroy(pl->slab);
+ pl->slab = NULL;
+ }
+}
+
+void *
+pool_get(struct pool *pl, int flags)
+{
+ void *v;
+
+ if (!pl->slab && pool_get_cache(pl))
+ return NULL;
+ v = kmem_cache_alloc(pl->slab,
+ (flags & PR_WAITOK) ? GFP_KERNEL :
+ (flags & PR_NOWAIT) ? GFP_ATOMIC :
+ __GFP_RETRY_MAYFAIL | GFP_KERNEL);
+ if (v) {
+ pl->p_used++;
+ if (flags & PR_ZERO)
+ memset(v, 0, pl->p_size);
+ }
+ return v;
+}
+
+void
+pool_put(struct pool *pl, void *v)
+{
+ if (pl->slab && v) {
+ kmem_cache_free(pl->slab, v);
+ if (pl->p_used)
+ pl->p_used--;
+ }
+}
+
+void
+pool_sethardlimit(struct pool *pl, unsigned long lim, const char *msg, int lvl)
+{
+ pl->p_hardlimit = lim;
+}
+
+/* ---------------- timeout ---------------- */
+static void
+pfk_timeout_work(struct work_struct *w)
+{
+ struct timeout *to = container_of(w, struct timeout, work);
+
+ to->running = 1;
+ to->pending = 0;
+ if (to->fn)
+ to->fn(to->arg);
+ to->running = 0;
+ if (to->period_ms >= 0)
+ mod_timer(&to->timer, jiffies + msecs_to_jiffies(to->period_ms));
+}
+
+static void
+pfk_timeout_fire(struct timer_list *tl)
+{
+ struct timeout *to = container_of(tl, struct timeout, timer);
+
+ schedule_work(&to->work);
+}
+
+void
+timeout_set(struct timeout *to, timeout_fn *fn, void *arg)
+{
+ if (!to->fn) { /* one-time setup */
+ timer_setup(&to->timer, pfk_timeout_fire, 0);
+ INIT_WORK(&to->work, pfk_timeout_work);
+ to->period_ms = -1;
+ }
+ to->fn = fn;
+ to->arg = arg;
+}
+
+void
+timeout_set_micro(struct timeout *to, timeout_fn *fn, void *arg)
+{
+ timeout_set(to, fn, arg);
+}
+
+int
+timeout_add(struct timeout *to, long ms)
+{
+ if (ms < 0)
+ ms = 0;
+ to->pending = 1;
+ to->deadline_jif = jiffies + msecs_to_jiffies(ms);
+ return mod_timer(&to->timer, to->deadline_jif);
+}
+
+int
+timeout_add_sec(struct timeout *to, int secs)
+{
+ return timeout_add(to, (long)secs * 1000);
+}
+
+int
+timeout_add_usec(struct timeout *to, int us)
+{
+ return timeout_add(to, us > 1000 ? us / 1000 : (us ? 1 : 0));
+}
+
+int
+timeout_pending(struct timeout *to)
+{
+ return to->pending;
+}
+
+int
+timeout_del(struct timeout *to)
+{
+ to->pending = 0;
+ return timer_delete(&to->timer);
+}
+
+void
+timeout_del_sync(struct timeout *to)
+{
+ to->pending = 0;
+ timer_delete_sync(&to->timer);
+ cancel_work_sync(&to->work);
+}
+
+void
+timeout_barrier(struct timeout *to, int flags)
+{
+ timer_delete_sync(&to->timer);
+ cancel_work_sync(&to->work);
+}
+
+/* ---------------- tsleep/wakeup (control path only) ---------------- */
+struct pfk_wait {
+ struct list_head link;
+ struct wait_queue_head wq;
+ int done;
+};
+
+static DEFINE_SPINLOCK(pfk_tsleep_lock);
+/* PFLINUX: BSD queue.h shadows LIST_HEAD (2-arg) — use raw initializer */
+static struct list_head pfk_tsleep_list = {
+ .next = &pfk_tsleep_list,
+ .prev = &pfk_tsleep_list,
+};
+
+int
+tsleep(void *p, int pr, const char *w, int timo)
+{
+ struct pfk_wait *pw;
+ long left;
+
+ pw = kmalloc(sizeof(*pw), GFP_KERNEL);
+ if (!pw)
+ return EINTR;
+ init_waitqueue_head(&pw->wq);
+ pw->done = 0;
+ spin_lock(&pfk_tsleep_lock);
+ list_add_tail(&pw->link, &pfk_tsleep_list);
+ pw->link.next = (void *)p; /* stash ident */
+ spin_unlock(&pfk_tsleep_lock);
+ left = wait_event_interruptible_timeout(pw->wq, pw->done,
+ timo ? msecs_to_jiffies(timo) : MAX_JIFFY_OFFSET);
+ spin_lock(&pfk_tsleep_lock);
+ list_del(&pw->link);
+ spin_unlock(&pfk_tsleep_lock);
+ kfree(pw);
+ if (!left)
+ return EWOULDBLOCK;
+ if (left == -ERESTARTSYS)
+ return EINTR;
+ return 0;
+}
+
+void
+pfk_wakeup(void *p)
+{
+ struct pfk_wait *pw;
+
+ spin_lock(&pfk_tsleep_lock);
+ list_for_each_entry(pw, &pfk_tsleep_list, link) {
+ if (pw->link.next == (void *)p) {
+ pw->done = 1;
+ wake_up_interruptible(&pw->wq);
+ }
+ }
+ spin_unlock(&pfk_tsleep_lock);
+}
diff --git a/module/compat/pfk_mbuf.c b/module/compat/pfk_mbuf.c
new file mode 100644
index 0000000..4719d3f
--- /dev/null
+++ b/module/compat/pfk_mbuf.c
@@ -0,0 +1,462 @@
+/*
+ * PF-on-Linux mbuf shim implementation (ISC, (c) 2026 PF-on-Linux contributors)
+ * See pfk_mbuf.h for the invariants. All functions run under pfk NET_LOCK
+ * (read side) — never in hardirq context.
+ */
+#include
+
+static struct kmem_cache *pfk_mbuf_cache;
+
+struct mbuf *
+m_get(int how, short type)
+{
+ return m_gethdr(how, type); /* PF always uses pkthdr packets */
+}
+
+struct mbuf *
+m_gethdr(int how, short type)
+{
+ struct mbuf *m;
+ struct sk_buff *skb;
+
+ m = kmem_cache_zalloc(pfk_mbuf_cache,
+ (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC);
+ if (!m)
+ return NULL;
+ skb = alloc_skb(256 + NET_SKB_PAD + NET_IP_ALIGN,
+ (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC);
+ if (!skb) {
+ kmem_cache_free(pfk_mbuf_cache, m);
+ return NULL;
+ }
+ skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
+ m->skb = skb;
+ m->m_data = skb->data;
+ m->m_len = skb->len;
+ m->m_type = type;
+ m->m_flags = M_PKTHDR;
+ m->m_refcnt = 1;
+ m->m_maxsize = skb_tailroom(skb);
+ pfk_m_setpkthdr(m);
+ return m;
+}
+
+void
+pfk_m_setpkthdr(struct mbuf *m)
+{
+ m->m_flags |= M_PKTHDR;
+ m->m_pkthdr.len = m->m_len;
+ m->m_pkthdr.pf.tag = NULL;
+ m->m_pkthdr.tags = NULL;
+}
+
+struct mbuf *
+m_alloc_skb(struct sk_buff *skb, int how)
+{
+ struct mbuf *m;
+
+ m = kmem_cache_zalloc(pfk_mbuf_cache,
+ (how & (M_WAITOK|M_CANFAIL)) == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC);
+ if (!m) {
+ kfree_skb(skb);
+ return NULL;
+ }
+ m->skb = skb;
+ m->m_data = skb->data;
+ m->m_len = skb->len;
+ m->m_type = MT_HEADER;
+ m->m_refcnt = 1;
+ pfk_m_setpkthdr(m);
+ return m;
+}
+
+/* reverse map: stash mbuf ptr in skb->cb (documented exclusivity in spec §4.1) */
+struct pfk_skb_cb {
+ struct mbuf *m;
+};
+#define PFK_CB(skb) ((struct pfk_skb_cb *)((skb)->cb))
+
+struct mbuf *
+m_dtom(struct sk_buff *skb)
+{
+ return PFK_CB(skb)->m;
+}
+
+struct mbuf *
+m_devget(char *buf, int totlen, int off, struct pfk_ifnet *ifp,
+ void (*copyin_fc)(caddr_t, int))
+{
+ struct mbuf *m;
+
+ if (off) {
+ buf += off;
+ totlen -= off;
+ }
+ if (totlen < 0)
+ return NULL;
+ m = m_gethdr(M_NOWAIT, MT_DATA);
+ if (!m)
+ return NULL;
+ if (skb_put(m->skb, totlen) == NULL) {
+ m_freem(m);
+ return NULL;
+ }
+ if (copyin_fc)
+ copyin_fc(mtod(m, caddr_t), totlen);
+ else
+ memcpy(m->skb->data, buf, totlen);
+ pfk_mbuf_refresh(m);
+ return m;
+}
+
+int
+pfk_mbuf_linearize(struct mbuf *m)
+{
+ if (skb_is_nonlinear(m->skb)) {
+ struct sk_buff *ns;
+
+ ns = skb_copy(m->skb, GFP_ATOMIC);
+ if (!ns)
+ return ENOBUFS;
+ consume_skb(m->skb);
+ m->skb = ns;
+ }
+ return 0;
+}
+
+void
+pfk_mbuf_refresh(struct mbuf *m)
+{
+ m->m_data = m->skb->data;
+ m->m_len = m->skb->len;
+ if (m->m_flags & M_PKTHDR)
+ m->m_pkthdr.len = m->m_len;
+}
+
+struct mbuf *
+m_copym(struct mbuf *m, int off, int len, int wait)
+{
+ struct mbuf *n;
+ struct sk_buff *ns;
+
+ if (len == 0)
+ len = m->m_len - off;
+ if (off > m->m_len || len > m->m_len - off)
+ return NULL;
+ ns = alloc_skb(len + NET_SKB_PAD + NET_IP_ALIGN,
+ wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC);
+ if (!ns)
+ return NULL;
+ skb_reserve(ns, NET_SKB_PAD + NET_IP_ALIGN);
+ if (skb_copy_bits(m->skb, off, skb_put(ns, len), len)) {
+ kfree_skb(ns);
+ return NULL;
+ }
+ n = m_alloc_skb(ns, wait);
+ if (!n)
+ return NULL;
+ if (m->m_flags & M_PKTHDR) {
+ n->m_pkthdr = m->m_pkthdr;
+ n->m_pkthdr.len = len;
+ n->m_pkthdr.tags = NULL;
+ if (m_tag_copy_chain(n, m, wait) != 0) {
+ m_freem(n);
+ return NULL;
+ }
+ }
+ return n;
+}
+
+struct mbuf *
+m_dup(struct mbuf *m, int wait)
+{
+ struct mbuf *n = m_copym(m, 0, m->m_len, wait);
+
+ if (n) {
+ struct sk_buff *ns = n->skb;
+ int need = 256 - skb_headroom(ns);
+
+ if (need > 0 &&
+ pskb_expand_head(ns, ALIGN(need, 64), 0,
+ wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC)) {
+ m_freem(n);
+ return NULL;
+ }
+ pfk_mbuf_refresh(n);
+ }
+ return n;
+}
+
+void
+m_adj(struct mbuf *m, int dlen)
+{
+ int off = dlen;
+
+ if (off < 0) { /* trim tail */
+ skb_trim(m->skb, m->skb->len + off);
+ } else if (off > 0) {
+ pskb_pull(m->skb, off > m->skb->len ? m->skb->len : off);
+ }
+ pfk_mbuf_refresh(m);
+}
+
+void
+m_trim(struct mbuf *m, int dlen)
+{
+ skb_trim(m->skb, dlen);
+ pfk_mbuf_refresh(m);
+}
+
+int
+m_cat(struct mbuf *to, struct mbuf *from)
+{
+ int len = from->m_len;
+
+ if (skb_tailroom(to->skb) < len) {
+ if (pskb_expand_head(to->skb, 0, ALIGN(len, 64), GFP_ATOMIC))
+ return EINVAL;
+ pfk_mbuf_refresh(to);
+ }
+ memcpy(skb_put(to->skb, len), from->m_data, len);
+ pfk_mbuf_refresh(to);
+ m_freem(from);
+ return 0;
+}
+
+caddr_t
+m_copyback(struct mbuf *m, int off, int len, const void *copied)
+{
+ int grow = off + len - m->m_len;
+ caddr_t p;
+
+ if (off < 0 || len < 0)
+ return mtod(m, caddr_t) + off; /* BSD clamps; PF never does this */
+ if (grow > 0) {
+ if (skb_tailroom(m->skb) < grow) {
+ if (pskb_expand_head(m->skb, 0, ALIGN(grow, 64), GFP_ATOMIC))
+ return NULL;
+ pfk_mbuf_refresh(m);
+ }
+ memset(m->m_data + m->m_len, 0, grow);
+ skb_put(m->skb, grow);
+ pfk_mbuf_refresh(m);
+ }
+ p = m->m_data + off;
+ memcpy(p, copied, len);
+ return p;
+}
+
+void
+m_copydata(const struct mbuf *m, int off, int len, caddr_t dest)
+{
+ if (len <= 0)
+ return;
+ if (skb_copy_bits(m->skb, off, dest, len))
+ memcpy(dest, m->m_data + off,
+ len > m->m_len - off ? m->m_len - off : len);
+}
+
+caddr_t
+m_getptr(struct mbuf *m, int loc, int *offp)
+{
+ *offp = 0;
+ if (loc < 0 || loc >= m->m_len)
+ return NULL;
+ return m->m_data + loc;
+}
+
+int
+m_clump(struct mbuf **m0p, int len, int *mp_off, int *mp_len, caddr_t *doff)
+{
+ struct mbuf *m = *m0p;
+
+ if (!pskb_may_pull(m->skb, *mp_off + len))
+ return -1;
+ pfk_mbuf_refresh(m);
+ *mp_len = len;
+ *doff = m->m_data + *mp_off;
+ *m0p = m;
+ return 0;
+}
+
+struct mbuf *
+m_free(struct mbuf *m)
+{
+ struct mbuf *n = m->m_next;
+
+ m_tag_delete_chain(m, NULL);
+ if (m->skb) {
+ if (PFK_CB(m->skb)->m == m)
+ PFK_CB(m->skb)->m = NULL;
+ kfree_skb(m->skb);
+ }
+ kmem_cache_free(pfk_mbuf_cache, m);
+ return n;
+}
+
+void
+m_freem(struct mbuf *m)
+{
+ while (m)
+ m = m_free(m);
+}
+
+void
+m_free_ext(struct mbuf *m)
+{
+ /* PF never attaches external mbuf refs; no-op like upstream ext free */
+}
+
+/* ---------------- m_tag ---------------- */
+struct m_tag *
+m_tag_alloc(int type, int len, int wait, caddr_t *align_data)
+{
+ struct m_tag *t;
+
+ t = kmalloc(sizeof(*t) + len + 4,
+ wait == M_WAITOK ? GFP_KERNEL : GFP_ATOMIC);
+ if (!t)
+ return NULL;
+ t->m_tag_next = NULL;
+ t->m_tag_type = type;
+ t->m_tag_len = len;
+ if (align_data)
+ *align_data = PFK_PTR_ALIGN(&t[1]);
+ return t;
+}
+
+void
+m_tag_free(struct m_tag *t)
+{
+ kfree(t);
+}
+
+void
+m_tag_attach(struct mbuf *m, struct m_tag *t)
+{
+ t->m_tag_next = NULL;
+ if (m->m_pkthdr.tags) {
+ struct m_tag *e = m->m_pkthdr.tags;
+
+ while (e->m_tag_next)
+ e = e->m_tag_next;
+ e->m_tag_next = t;
+ } else
+ m->m_pkthdr.tags = t;
+}
+
+void
+m_tag_prepend(struct mbuf *m, struct m_tag *t)
+{
+ t->m_tag_next = m->m_pkthdr.tags;
+ m->m_pkthdr.tags = t;
+}
+
+void
+m_tag_prepend_packet(struct mbuf *m, struct m_tag *t)
+{
+ if (m->m_flags & M_PKTHDR)
+ m_tag_prepend(m, t);
+ else
+ m_tag_free(t);
+}
+
+struct m_tag *
+m_tag_find(struct mbuf *m, int type, struct m_tag *start)
+{
+ struct m_tag *t;
+
+ if (start == NULL) {
+ if (!(m->m_flags & M_PKTHDR))
+ return NULL;
+ t = m->m_pkthdr.tags;
+ } else
+ t = start->m_tag_next;
+ for (; t; t = t->m_tag_next)
+ if (t->m_tag_type == type)
+ break;
+ return t;
+}
+
+void
+m_tag_delete(struct mbuf *m, struct m_tag *t)
+{
+ struct m_tag **pp = &m->m_pkthdr.tags, *e;
+
+ for (e = m->m_pkthdr.tags; e; e = e->m_tag_next) {
+ if (e == t) {
+ *pp = t->m_tag_next;
+ m_tag_free(t);
+ return;
+ }
+ pp = &e->m_tag_next;
+ }
+}
+
+struct m_tag *
+m_tag_copy(struct m_tag *tag, int how)
+{
+ struct m_tag *t;
+ caddr_t d;
+
+ t = m_tag_alloc(tag->m_tag_type, tag->m_tag_len, how, &d);
+ if (t)
+ memcpy(d, tag->m_tag_data, tag->m_tag_len);
+ return t;
+}
+
+int
+m_tag_copy_chain(struct mbuf *to, struct mbuf *from, int how)
+{
+ struct m_tag *t;
+
+ for (t = m_tag_first(from); t; t = m_tag_next(from, t)) {
+ struct m_tag *n = m_tag_copy(t, how);
+
+ if (!n)
+ return ENOBUFS;
+ m_tag_attach(to, n);
+ }
+ return 0;
+}
+
+void
+m_tag_delete_chain(struct mbuf *m, struct m_tag *end)
+{
+ struct m_tag *t, *n;
+
+ if (!(m->m_flags & M_PKTHDR))
+ return;
+ for (t = m->m_pkthdr.tags; t && t != end; t = n) {
+ n = t->m_tag_next;
+ m_tag_free(t);
+ }
+ m->m_pkthdr.tags = end;
+}
+
+struct m_tag *
+m_tag_first(struct mbuf *m)
+{
+ return (m->m_flags & M_PKTHDR) ? m->m_pkthdr.tags : NULL;
+}
+
+struct m_tag *
+m_tag_next(struct mbuf *m, struct m_tag *t)
+{
+ return t->m_tag_next;
+}
+
+int
+pfk_mbuf_init(void)
+{
+ pfk_mbuf_cache = KMEM_CACHE(mbuf, 0);
+ if (!pfk_mbuf_cache)
+ return -ENOMEM;
+ return 0;
+}
+
+void
+pfk_mbuf_exit(void)
+{
+ kmem_cache_destroy(pfk_mbuf_cache);
+}
diff --git a/module/compat/pfk_xmit.c b/module/compat/pfk_xmit.c
new file mode 100644
index 0000000..3d09c82
--- /dev/null
+++ b/module/compat/pfk_xmit.c
@@ -0,0 +1,208 @@
+/*
+ * PF-on-Linux transmit + return-packet helpers (ISC 2026).
+ * if_output_tso/ml + if_enqueue mirror OpenBSD calls; route-to uses them
+ * with a gateway dst (see pf_route.c, T14). Return errors use Linux
+ * ipstack helpers (exported: icmp_send; P1 exports ip_route_output_key,
+ * ip6_route_output, tcp_v4_send_reset if needed).
+ */
+#include
+
+static struct dst_entry *
+pfk_route4(__be32 daddr, __be32 saddr, int oif)
+{
+ struct flowi4 fl4 = { };
+ struct rtable *rt;
+
+ fl4.daddr = daddr;
+ fl4.saddr = saddr;
+ if (oif)
+ fl4.flowi4_oif = oif;
+ rt = ip_route_output_key(&init_net, &fl4);
+ if (IS_ERR(rt))
+ return NULL;
+ return &rt->dst;
+}
+
+#if IS_ENABLED(CONFIG_IPV6)
+static struct dst_entry *
+pfk_route6(const struct in6_addr *daddr, const struct in6_addr *saddr, int oif)
+{
+ struct flowi6 fl6 = { };
+ struct dst_entry *d;
+
+ fl6.daddr = *daddr;
+ if (saddr)
+ fl6.saddr = *saddr;
+ if (oif)
+ fl6.flowi6_oif = oif;
+ d = ip6_route_output(&init_net, NULL, &fl6);
+ if (!d || d->error) {
+ if (d)
+ dst_release(d);
+ return NULL;
+ }
+ return d;
+}
+#endif
+
+/* xmit: BSD semantics — caller hands fully-formed IP packet + dst sock.
+ * rt arg is OpenBSD's cached route (opaque to us). Returns 0/errno. */
+int
+if_output_tso(struct pfk_ifnet *ifp, struct mbuf **mp, struct sockaddr *dst,
+ void *rt, int mtu)
+{
+ struct mbuf *m = *mp;
+ struct sk_buff *skb = m_to_skb(m);
+ struct dst_entry *d = NULL;
+ int ret = 0;
+
+ if (!pskb_may_pull(skb, sizeof(struct pf_ip))) {
+ ret = EINVAL;
+ goto drop;
+ }
+ if (skb_ensure_writable(skb, 0)) {
+ ret = ENOBUFS;
+ goto drop;
+ }
+ switch (dst->sa_family) {
+ case AF_INET: {
+ struct pf_ip *ip = mtod(m, struct pf_ip *);
+ __be32 gw = 0;
+
+ /* if route was forced (route-to), dst holds gw sockaddr
+ * stored in sin_addr by pf_route; normal case dst==final */
+ gw = sintosa(dst)->sin_addr.s_addr;
+ d = pfk_route4(gw, ip->ip_src.s_addr, ifp->if_index);
+ if (!d) {
+ ret = EHOSTUNREACH;
+ goto drop;
+ }
+ skb_dst_set(skb, d);
+ break;
+ }
+#if IS_ENABLED(CONFIG_IPV6)
+ case AF_INET6: {
+ struct pf_ip6_hdr *ip6 = mtod(m, struct pf_ip6_hdr *);
+ const struct in6_addr *gw = &sin6tosa(dst)->sin6_addr;
+
+ if (!d)
+ d = pfk_route6(gw,
+ (struct in6_addr *)&ip6->ip6_src,
+ ifp->if_index);
+ if (!d) {
+ ret = EHOSTUNREACH;
+ goto drop;
+ }
+ skb_dst_set(skb, d);
+ skb->protocol = htons(ETH_P_IPV6);
+ break;
+ }
+#endif
+ default:
+ ret = EAFNOSUPPORT;
+ goto drop;
+ }
+
+ skb->dev = skb_dst(skb)->dev;
+ skb_reset_network_header(skb);
+ if (skb->protocol == 0)
+ skb->protocol = htons(ETH_P_IP);
+ /* push through network layer exactly like OpenBSD's if_output:
+ * dst->output = ip_output/ip6_output (headers already built) */
+ if (!netif_running(skb->dev)) {
+ ret = ENETDOWN;
+ goto drop_dst_nofree;
+ }
+ ret = skb_dst(skb)->output(&init_net, NULL, skb);
+ /* output consumed skb (and wrapper); avoid double free */
+ if (ret == 0) {
+ m->skb = NULL; /* ownership moved */
+ m_freem(m);
+ *mp = NULL;
+ }
+ return ret;
+
+drop_dst_nofree:
+ ret = ENETDOWN;
+drop:
+ if (m) {
+ m_freem(m);
+ *mp = NULL;
+ }
+ return ret;
+}
+
+int
+if_output_ml(struct pfk_ifnet *ifp, struct mbuf_list *ml,
+ struct sockaddr *dst, void *rt)
+{
+ struct mbuf *m;
+ int err = 0, n;
+
+ while ((m = ml->ml_first) != NULL) {
+ ml->ml_first = m->m_next;
+ m->m_next = NULL;
+ n = if_output_tso(ifp, &m, dst, rt, ifp->if_mtu);
+ if (n)
+ err = n;
+ }
+ ml->ml_len = 0;
+ return err;
+}
+
+int
+if_enqueue(struct pfk_ifnet *ifp, struct mbuf *m)
+{
+ /* PFLINUX M1-M4: no qdisc attached → direct xmit via same path;
+ * M5 replaces this with the pfq enqueue (spec §4.3). */
+ struct sockaddr sa = { .sa_family = AF_INET };
+ struct mbuf *mp = m;
+
+ if (m_to_skb(m)->protocol == htons(ETH_P_IPV6))
+ sa.sa_family = AF_INET6;
+ if_output_tso(ifp, &mp, &sa, NULL, ifp->if_mtu);
+ if (mp == NULL)
+ return 0;
+ m_freem(mp);
+ return ENOBUFS;
+}
+
+/* default-route egress device helper for pfk_egress_refresh() */
+struct net_device *
+ip_rt_get_default_dev(struct net *net)
+{
+ struct dst_entry *d = pfk_route4(htonl(0x08080808), 0, 0);
+ struct net_device *dev = NULL;
+
+ if (d) {
+ dev = d->dev;
+ if (dev)
+ dev_hold(dev);
+ dst_release(d);
+ }
+ return dev;
+}
+
+/* ---------------- return errors ---------------- */
+u_int16_t
+pfk_in_cksum(const void *data, int len)
+{
+ return csum_fold(csum_partial(data, len, 0));
+}
+
+void
+pfk_send_icmp_error(int family, struct sk_buff *skb_in, int type, int code,
+ __be32 info)
+{
+ if (family == AF_INET) {
+ icmp_send(skb_in, type, code, info);
+ return;
+ }
+#if IS_ENABLED(CONFIG_IPV6)
+ pr_warn_once("pfk: ICMPv6 error path pending P1 export (type %d)\n", type);
+#endif
+}
+
+/* NOTE: TCP RST generation is done by PF itself (pf.c builds the segment
+ * and calls if_output_tso), so no kernel tcp_v4_send_reset export is
+ * needed — matches OpenBSD's pf_send_rst() design. */
diff --git a/module/compat/siphash.c b/module/compat/siphash.c
new file mode 100644
index 0000000..06b9b9e
--- /dev/null
+++ b/module/compat/siphash.c
@@ -0,0 +1,157 @@
+/*
+ * SipHash-2-4 implementation (PFLINUX) — reference algorithm by Jean-Philippe
+ * Aumasson & Daniel J. Bernstein, public domain reference semantics.
+ * ISC (c) 2026 PF-on-Linux contributors.
+ */
+#include
+#include "compat/crypto/siphash.h"
+
+#define ROTL64(x, b) (u64)(((x) << (b)) | ((x) >> (64 - (b))))
+
+#define SIPROUND \
+ do { \
+ v0 += v1; v1 = ROTL64(v1, 13); v1 ^= v0; v0 = ROTL64(v0, 32); \
+ v2 += v3; v3 = ROTL64(v3, 16); v3 ^= v2; \
+ v0 += v3; v3 = ROTL64(v3, 21); v3 ^= v0; \
+ v2 += v1; v1 = ROTL64(v1, 17); v1 ^= v2; v2 = ROTL64(v2, 32); \
+ } while (0)
+
+#define U8TO64_LE(p) \
+ (((u64)((p)[0])) | ((u64)((p)[1]) << 8) | ((u64)((p)[2]) << 16) | \
+ ((u64)((p)[3]) << 24) | ((u64)((p)[4]) << 32) | ((u64)((p)[5]) << 40) | \
+ ((u64)((p)[6]) << 48) | ((u64)((p)[7]) << 56))
+
+#define U64TO8_LE(p, v) \
+ do { \
+ (p)[0] = (u8)((v) & 0xff); (p)[1] = (u8)((v) >> 8); \
+ (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24); \
+ (p)[4] = (u8)((v) >> 32); (p)[5] = (u8)((v) >> 40); \
+ (p)[6] = (u8)((v) >> 48); (p)[7] = (u8)((v) >> 56); \
+ } while (0)
+
+void
+SipHash24_Init(SIPHASH_CTX *ctx, const SIPHASH_KEY *key)
+{
+ ctx->v[0] = 0x736f6d6570736575ULL ^ key->v[0];
+ ctx->v[1] = 0x646f72616e646f6dULL ^ key->v[1];
+ ctx->v[2] = 0x6c7967656e657261ULL ^ key->v[0];
+ ctx->v[3] = 0x7465646279746573ULL ^ key->v[1];
+ ctx->total_len = 0;
+ ctx->block_len = 0;
+ memset(ctx->block, 0, sizeof(ctx->block));
+}
+
+void
+SipHash24_Update(SIPHASH_CTX *ctx, const void *in, __u64 inlen)
+{
+ const unsigned char *ni = in;
+ u64 total = ctx->total_len + inlen;
+ int left = ctx->block_len;
+ u64 i;
+
+ ctx->total_len = total;
+ if (left) {
+ unsigned int take = 8 - left;
+
+ if (take > inlen)
+ take = inlen;
+ memcpy(ctx->block + left, ni, take);
+ left += take;
+ ni += take;
+ inlen -= take;
+ if (left == 8) {
+ u64 m = U8TO64_LE(ctx->block);
+ u64 v0 = ctx->v[0], v1 = ctx->v[1];
+ u64 v2 = ctx->v[2], v3 = ctx->v[3];
+
+ v3 ^= m;
+ SIPROUND; SIPROUND;
+ v0 ^= m;
+ ctx->v[0] = v0; ctx->v[1] = v1;
+ ctx->v[2] = v2; ctx->v[3] = v3;
+ ctx->block_len = 0;
+ }
+ }
+ while (inlen >= 8) {
+ u64 m = U8TO64_LE(ni);
+ u64 v0 = ctx->v[0], v1 = ctx->v[1];
+ u64 v2 = ctx->v[2], v3 = ctx->v[3];
+
+ v3 ^= m;
+ SIPROUND; SIPROUND;
+ v0 ^= m;
+ ctx->v[0] = v0; ctx->v[1] = v1;
+ ctx->v[2] = v2; ctx->v[3] = v3;
+ ni += 8; inlen -= 8;
+ }
+ if (inlen) {
+ memcpy(ctx->block, ni, inlen);
+ ctx->block_len = inlen;
+ }
+ (void)i;
+}
+
+void
+SipHash24_Final(SIPHASH_CTX *ctx, unsigned char *out)
+{
+ u64 b = ((u64)ctx->total_len) << 56;
+ u64 v0 = ctx->v[0], v1 = ctx->v[1], v2 = ctx->v[2], v3 = ctx->v[3];
+ unsigned char t[8];
+ int i;
+
+ U64TO8_LE(t, b);
+ for (i = 0; i < ctx->block_len; i++)
+ t[i] = ctx->block[i];
+
+ v3 ^= b;
+ SIPROUND; SIPROUND;
+ v0 ^= b;
+ v2 ^= 0xff;
+ SIPROUND; SIPROUND; SIPROUND; SIPROUND;
+ U64TO8_LE(out, v0 ^ v1 ^ v2 ^ v3);
+ /* wipe */
+ ctx->v[0] = ctx->v[1] = ctx->v[2] = ctx->v[3] = 0;
+}
+
+void
+SipHash24_Generate(const SIPHASH_KEY *key, const void *in, __u64 inlen,
+ unsigned char *out)
+{
+ u64 k0 = key->v[0], k1 = key->v[1];
+ u64 v0, v1, v2, v3;
+
+ v0 = 0x736f6d6570736575ULL ^ k0;
+ v1 = 0x646f72616e646f6dULL ^ k1;
+ v2 = 0x6c7967656e657261ULL ^ k0;
+ v3 = 0x7465646279746573ULL ^ k1;
+
+ while (inlen >= 8) {
+ u64 m = U8TO64_LE((const unsigned char *)in);
+
+ v3 ^= m;
+ SIPROUND; SIPROUND;
+ v0 ^= m;
+ in = (const unsigned char *)in + 8;
+ inlen -= 8;
+ }
+ {
+ unsigned char t[8];
+ u64 b = ((u64)inlen) << 56;
+ int i;
+
+ memset(t, 0, sizeof(t));
+ memcpy(t, in, inlen);
+ for (i = 0; i < 8; i++)
+ t[i] ^= (unsigned char)(b >> (8 * i));
+ {
+ u64 m = U8TO64_LE(t);
+
+ v3 ^= m;
+ SIPROUND; SIPROUND;
+ v0 ^= m;
+ }
+ v2 ^= 0xff;
+ SIPROUND; SIPROUND; SIPROUND; SIPROUND;
+ U64TO8_LE(out, v0 ^ v1 ^ v2 ^ v3);
+ }
+}
diff --git a/module/compat/toeplitz.c b/module/compat/toeplitz.c
new file mode 100644
index 0000000..24a8fe1
--- /dev/null
+++ b/module/compat/toeplitz.c
@@ -0,0 +1,168 @@
+/*
+ * Software Toeplitz hash (RFC 3305) for PF flow ids — PFLINUX.
+ * The key window is SHA256(key) || key; the 16-bit result is the XOR of
+ * the 16-bit windows selected by the set bits of the input.
+ * ISC (c) 2026 PF-on-Linux contributors.
+ */
+#include
+#include
+#include "compat/net/toeplitz.h"
+
+struct stoeplitz_cache *stoeplitz_cache;
+
+static int
+toeplitz_keyhash(const u8 *key, u8 *out /*32*/)
+{
+ struct crypto_shash *tfm;
+ char descbuf[sizeof(struct shash_desc) + 512];
+ struct shash_desc *desc = (struct shash_desc *)descbuf;
+ int err;
+
+ tfm = crypto_alloc_shash("sha256", 0, 0);
+ if (!tfm)
+ return -ENOMEM;
+ desc->tfm = tfm;
+ err = crypto_shash_digest(desc, key, TOEPLITZ_KEY_LEN, out);
+ crypto_free_shash(tfm);
+ return err;
+}
+
+/* core: hash `inlen` bytes of `in` (MSB-first bit order) into 16 bits */
+static uint16_t
+toeplitz_bits(const struct stoeplitz_cache *sc, const u8 *in, int inlen)
+{
+ u8 window[64 + 32]; /* keyhash(32) || key(40) */
+ int i, bit, k;
+ uint16_t res = 0;
+
+ memcpy(window, sc->keyhash, 32);
+ memcpy(window + 32, sc->key, TOEPLITZ_KEY_LEN);
+
+ for (i = 0; i < inlen; i++) {
+ for (bit = 0; bit < 8; bit++) {
+ if (!(in[i] & (0x80 >> bit)))
+ continue;
+ for (k = 0; k < 16; k++) {
+ int pos = i * 8 + bit + k;
+ int byte = pos / 8;
+ int b = 7 - (pos % 8);
+
+ res ^= (uint16_t)((window[byte] >> b) & 1) << k;
+ }
+ }
+ }
+ return res;
+}
+
+void
+stoeplitz_cache_init(struct stoeplitz_cache *sc, const u8 *key)
+{
+ memset(sc, 0, sizeof(*sc));
+ memcpy(sc->key, key, TOEPLITZ_KEY_LEN);
+ toeplitz_keyhash(key, sc->keyhash);
+ sc->initialized = 1;
+}
+
+void
+stoeplitz_init(void)
+{
+ static u8 key[TOEPLITZ_KEY_LEN];
+ int i;
+
+ if (stoeplitz_cache && stoeplitz_cache->initialized)
+ return;
+ for (i = 0; i < TOEPLITZ_KEY_LEN; i++)
+ key[i] = get_random_u8();
+ stoeplitz_cache = kzalloc(sizeof(*stoeplitz_cache), GFP_KERNEL);
+ if (!stoeplitz_cache)
+ return;
+ stoeplitz_cache_init(stoeplitz_cache, key);
+}
+
+uint16_t
+stoeplitz_hash_n16(const struct stoeplitz_cache *sc, u16 n16)
+{
+ u8 b[2] = { (u8)(n16 >> 8), (u8)n16 };
+
+ return toeplitz_bits(sc, b, sizeof(b));
+}
+
+uint16_t
+stoeplitz_hash_n32(const struct stoeplitz_cache *sc, u32 n32)
+{
+ return stoeplitz_hash_n16(sc, (u16)(n32 ^ (n32 >> 16)));
+}
+
+uint16_t
+stoeplitz_hash_h16(const struct stoeplitz_cache *sc, u16 h16)
+{
+ u8 b[2] = { (u8)(h16 >> 8), (u8)h16 };
+
+ return toeplitz_bits(sc, b, sizeof(b));
+}
+
+uint16_t
+stoeplitz_hash_h32(const struct stoeplitz_cache *sc, u32 h32)
+{
+ return stoeplitz_hash_h16(sc, (u16)(h32 ^ (h32 >> 16)));
+}
+
+uint16_t
+stoeplitz_hash_h64(const struct stoeplitz_cache *sc, u64 h64)
+{
+ return stoeplitz_hash_h32(sc, (u32)(h64 ^ (h64 >> 32)));
+}
+
+uint16_t
+stoeplitz_hash_ip4(const struct stoeplitz_cache *sc,
+ const struct in_addr *sa, const struct in_addr *da)
+{
+ u8 buf[8];
+
+ memcpy(buf, &sa->s_addr, 4);
+ memcpy(buf + 4, &da->s_addr, 4);
+ return toeplitz_bits(sc, buf, sizeof(buf));
+}
+
+uint16_t
+stoeplitz_hash_ip4port(const struct stoeplitz_cache *sc,
+ const struct in_addr *sa, const struct in_addr *da, u16 sp, u16 dp)
+{
+ u8 buf[12];
+
+ memcpy(buf, &sa->s_addr, 4);
+ memcpy(buf + 4, &da->s_addr, 4);
+ buf[8] = (u8)(sp >> 8); buf[9] = (u8)sp;
+ buf[10] = (u8)(dp >> 8); buf[11] = (u8)dp;
+ return toeplitz_bits(sc, buf, sizeof(buf));
+}
+
+uint16_t
+stoeplitz_hash_ip6(const struct stoeplitz_cache *sc,
+ const struct in6_addr *sa, const struct in6_addr *da)
+{
+ u8 buf[32];
+
+ memcpy(buf, sa, 16);
+ memcpy(buf + 16, da, 16);
+ return toeplitz_bits(sc, buf, sizeof(buf));
+}
+
+uint16_t
+stoeplitz_hash_ip6port(const struct stoeplitz_cache *sc,
+ const struct in6_addr *sa, const struct in6_addr *da, u16 sp, u16 dp)
+{
+ u8 buf[36];
+
+ memcpy(buf, sa, 16);
+ memcpy(buf + 16, da, 16);
+ buf[32] = (u8)(sp >> 8); buf[33] = (u8)sp;
+ buf[34] = (u8)(dp >> 8); buf[35] = (u8)dp;
+ return toeplitz_bits(sc, buf, sizeof(buf));
+}
+
+uint16_t
+stoeplitz_hash_eaddr(const struct stoeplitz_cache *sc, const u8 *ea)
+{
+ return toeplitz_bits(sc, ea, 6);
+}
diff --git a/module/include/compat/crypto/sha2.h b/module/include/compat/crypto/sha2.h
new file mode 100644
index 0000000..461b49b
--- /dev/null
+++ b/module/include/compat/crypto/sha2.h
@@ -0,0 +1,83 @@
+/* $OpenBSD: sha2.h,v 1.5 2014/11/16 17:39:09 tedu Exp $ */
+
+/*
+ * FILE: sha2.h
+ * AUTHOR: Aaron D. Gifford
+ *
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * 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.
+ * 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.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``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 CONTRIBUTOR(S) 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.
+ *
+ * $From: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
+ */
+
+#ifndef _SHA2_H
+#define _SHA2_H
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+#define SHA256_BLOCK_LENGTH 64
+#define SHA256_DIGEST_LENGTH 32
+#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
+#define SHA384_BLOCK_LENGTH 128
+#define SHA384_DIGEST_LENGTH 48
+#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
+#define SHA512_BLOCK_LENGTH 128
+#define SHA512_DIGEST_LENGTH 64
+#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
+
+
+/*** SHA-256/384/512 Context Structure *******************************/
+typedef struct _SHA2_CTX {
+ union {
+ u_int32_t st32[8];
+ u_int64_t st64[8];
+ } state;
+ u_int64_t bitcount[2];
+ u_int8_t buffer[SHA512_BLOCK_LENGTH];
+} SHA2_CTX;
+
+__BEGIN_DECLS
+void SHA256Init(SHA2_CTX *);
+void SHA256Update(SHA2_CTX *, const void *, size_t)
+ __attribute__((__bounded__(__string__,2,3)));
+void SHA256Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA2_CTX *)
+ __attribute__((__bounded__(__minbytes__,1,SHA256_DIGEST_LENGTH)));
+
+void SHA384Init(SHA2_CTX *);
+void SHA384Update(SHA2_CTX *, const void *, size_t)
+ __attribute__((__bounded__(__string__,2,3)));
+void SHA384Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA2_CTX *)
+ __attribute__((__bounded__(__minbytes__,1,SHA384_DIGEST_LENGTH)));
+
+void SHA512Init(SHA2_CTX *);
+void SHA512Update(SHA2_CTX *, const void *, size_t)
+ __attribute__((__bounded__(__string__,2,3)));
+void SHA512Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA2_CTX *)
+ __attribute__((__bounded__(__minbytes__,1,SHA512_DIGEST_LENGTH)));
+__END_DECLS
+
+#endif /* _SHA2_H */
diff --git a/module/include/compat/crypto/siphash.h b/module/include/compat/crypto/siphash.h
new file mode 100644
index 0000000..2df2902
--- /dev/null
+++ b/module/include/compat/crypto/siphash.h
@@ -0,0 +1,27 @@
+/* PFLINUX compat: — SipHash-2-4 (Aumasson–Bernstein)
+ * API compatible with OpenBSD's SIPHASH_CTX/KEY usage in pf_syncookies.c.
+ * Implementation: compat/siphash.c (ISC 2026). */
+#ifndef _PFK_SIPHASH_H
+#define _PFK_SIPHASH_H
+#include
+
+#define SIPHASH_KEY_LENGTH 16
+
+typedef struct {
+ __u64 v[2];
+} SIPHASH_KEY;
+
+typedef struct {
+ __u64 v[3];
+ __u64 total_len;
+ unsigned char block[8];
+ unsigned char block_len;
+} SIPHASH_CTX;
+
+void SipHash24_Init(SIPHASH_CTX *ctx, const SIPHASH_KEY *key);
+void SipHash24_Update(SIPHASH_CTX *ctx, const void *in, __u64 inlen);
+void SipHash24_Final(SIPHASH_CTX *ctx, unsigned char *out);
+void SipHash24_Generate(const SIPHASH_KEY *key, const void *in, __u64 inlen,
+ unsigned char *out);
+
+#endif
diff --git a/module/include/compat/net/if_pflog.h b/module/include/compat/net/if_pflog.h
new file mode 100644
index 0000000..440d8f0
--- /dev/null
+++ b/module/include/compat/net/if_pflog.h
@@ -0,0 +1,72 @@
+/* $OpenBSD: if_pflog.h,v 1.29 2021/01/13 09:13:30 mvs Exp $ */
+/*
+ * Copyright 2001 Niels Provos
+ * 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.
+ * 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 ``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 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.
+ */
+
+#ifndef _NET_IF_PFLOG_H_
+#define _NET_IF_PFLOG_H_
+
+#include
+#include
+
+#define PFLOG_RULESET_NAME_SIZE 16
+
+struct pfloghdr {
+ u_int8_t length;
+ sa_family_t af;
+ u_int8_t action;
+ u_int8_t reason;
+ char ifname[IFNAMSIZ];
+ char ruleset[PFLOG_RULESET_NAME_SIZE];
+ u_int32_t rulenr;
+ u_int32_t subrulenr;
+ uid_t uid;
+ pid_t pid;
+ uid_t rule_uid;
+ pid_t rule_pid;
+ u_int8_t dir;
+ u_int8_t rewritten;
+ sa_family_t naf;
+ u_int8_t pad[1];
+ struct pf_addr saddr;
+ struct pf_addr daddr;
+ u_int16_t sport;
+ u_int16_t dport;
+};
+
+#define PFLOG_HDRLEN sizeof(struct pfloghdr)
+/* used to be minus pad, also used as a signature */
+#define PFLOG_REAL_HDRLEN PFLOG_HDRLEN
+#define PFLOG_OLD_HDRLEN offsetof(struct pfloghdr, pad)
+
+#ifdef _KERNEL
+
+struct pflog_softc {
+ LIST_ENTRY(pflog_softc) sc_entry;
+ struct ifnet sc_if; /* the interface */
+ int sc_unit;
+};
+
+#endif /* _KERNEL */
+#endif /* _NET_IF_PFLOG_H_ */
diff --git a/module/include/compat/net/if_types.h b/module/include/compat/net/if_types.h
new file mode 100644
index 0000000..fe7413d
--- /dev/null
+++ b/module/include/compat/net/if_types.h
@@ -0,0 +1,16 @@
+/* PFLINUX compat: — OpenBSD IFT_* constants
+ * (values must match OpenBSD: they travel in pf_rule/pfk_if ioctls). */
+#ifndef _PFK_IF_TYPES_H
+#define _PFK_IF_TYPES_H
+#define IFT_OTHER 0x1
+#define IFT_ETHER 0x6
+#define IFT_TOKENRING 0xf
+#define IFT_FDDI 0x12
+#define IFT_LOOP 0x18
+#define IFT_SLIP 0x1f
+#define IFT_PPPOINT 0x1e
+#define IFT_GIF 0xe6
+#define IFT_PFLOG 0xf0
+#define IFT_PFSYNC 0xf1
+#define IFT_CARP 0xf8
+#endif
diff --git a/module/include/compat/net/if_var.h b/module/include/compat/net/if_var.h
new file mode 100644
index 0000000..9b21714
--- /dev/null
+++ b/module/include/compat/net/if_var.h
@@ -0,0 +1,5 @@
+/* PFLINUX compat: — ifnet view comes from pfk_if.h */
+#ifndef _PFK_IF_VAR_H
+#define _PFK_IF_VAR_H
+/* intentionally minimal; struct pfk_ifnet is the ifnet */
+#endif
diff --git a/module/include/compat/net/ifq.h b/module/include/compat/net/ifq.h
new file mode 100644
index 0000000..7b8499c
--- /dev/null
+++ b/module/include/compat/net/ifq.h
@@ -0,0 +1,507 @@
+/* $OpenBSD: ifq.h,v 1.44 2025/03/04 01:13:37 dlg Exp $ */
+
+/*
+ * Copyright (c) 2015 David Gwynne
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _NET_IFQ_H_
+#define _NET_IFQ_H_
+
+struct ifnet;
+struct kstat;
+
+struct ifq_ops;
+
+struct ifqueue {
+ struct ifnet *ifq_if;
+ struct taskq *ifq_softnet;
+ union {
+ void *_ifq_softc;
+ /*
+ * a rings sndq is found by looking up an array of pointers.
+ * by default we only have one sndq and the default drivers
+ * dont use ifq_softc, so we can borrow it for the map until
+ * we need to allocate a proper map.
+ */
+ struct ifqueue *_ifq_ifqs[1];
+ } _ifq_ptr;
+#define ifq_softc _ifq_ptr._ifq_softc
+#define ifq_ifqs _ifq_ptr._ifq_ifqs
+
+ /* mbuf handling */
+ struct mutex ifq_mtx;
+ const struct ifq_ops *ifq_ops;
+ void *ifq_q;
+ struct mbuf_list ifq_free;
+ unsigned int ifq_len;
+ unsigned int ifq_oactive;
+
+ /* statistics */
+ uint64_t ifq_packets;
+ uint64_t ifq_bytes;
+ uint64_t ifq_qdrops;
+ uint64_t ifq_errors;
+ uint64_t ifq_mcasts;
+ uint32_t ifq_oactives;
+
+ struct kstat *ifq_kstat;
+
+ /* work serialisation */
+ struct mutex ifq_task_mtx;
+ struct task_list ifq_task_list;
+ void *ifq_serializer;
+ struct task ifq_bundle;
+
+ /* work to be serialised */
+ struct task ifq_start;
+ struct task ifq_restart;
+
+ /* properties */
+ unsigned int ifq_maxlen;
+ unsigned int ifq_idx;
+};
+
+struct ifiqueue {
+ struct ifnet *ifiq_if;
+ caddr_t *ifiq_bpfp;
+ struct taskq *ifiq_softnet;
+ union {
+ void *_ifiq_softc;
+ struct ifiqueue *_ifiq_ifiqs[1];
+ } _ifiq_ptr;
+#define ifiq_softc _ifiq_ptr._ifiq_softc
+#define ifiq_ifiqs _ifiq_ptr._ifiq_ifiqs
+
+ struct mutex ifiq_mtx;
+ struct mbuf_list ifiq_ml;
+ struct task ifiq_task;
+ unsigned int ifiq_pressure;
+
+ /* counters */
+ uint64_t ifiq_packets;
+ uint64_t ifiq_bytes;
+ uint64_t ifiq_fdrops;
+ uint64_t ifiq_qdrops;
+ uint64_t ifiq_errors;
+ uint64_t ifiq_mcasts;
+ uint64_t ifiq_noproto;
+
+ /* number of times a list of packets were put on ifiq_ml */
+ uint64_t ifiq_enqueues;
+ /* number of times a list of packets were pulled off ifiq_ml */
+ uint64_t ifiq_dequeues;
+
+ struct kstat *ifiq_kstat;
+
+ /* properties */
+ unsigned int ifiq_idx;
+};
+
+#ifdef _KERNEL
+
+#define IFQ_MAXLEN 256
+
+/*
+ *
+ * Interface Send Queues
+ *
+ * struct ifqueue sits between the network stack and a drivers
+ * transmission of packets. The high level view is that when the stack
+ * has finished generating a packet it hands it to a driver for
+ * transmission. It does this by queueing the packet on an ifqueue and
+ * notifying the driver to start transmission of the queued packets.
+ *
+ * A network device may have multiple contexts for the transmission
+ * of packets, ie, independent transmit rings. Such a network device,
+ * represented by a struct ifnet, would then have multiple ifqueue
+ * structures, each of which maps to an independent transmit ring.
+ *
+ * struct ifqueue also provides the point where conditioning of
+ * traffic (ie, priq and hfsc) is implemented, and provides some
+ * infrastructure to assist in the implementation of network drivers.
+ *
+ * = ifq API
+ *
+ * The ifq API provides functions for three distinct consumers:
+ *
+ * 1. The network stack
+ * 2. Traffic QoS/conditioning implementations
+ * 3. Network drivers
+ *
+ * == Network Stack API
+ *
+ * The network stack is responsible for initialising and destroying
+ * the ifqueue structures, changing the traffic conditioner on an
+ * interface, enqueuing packets for transmission, and notifying
+ * the driver to start transmission of a particular ifqueue.
+ *
+ * === ifq_init()
+ *
+ * During if_attach(), the network stack calls ifq_init to initialise
+ * the ifqueue structure. By default it configures the priq traffic
+ * conditioner.
+ *
+ * === ifq_destroy()
+ *
+ * The network stack calls ifq_destroy() during if_detach to tear down
+ * the ifqueue structure. It frees the traffic conditioner state, and
+ * frees any mbufs that were left queued.
+ *
+ * === ifq_attach()
+ *
+ * ifq_attach() is used to replace the current traffic conditioner on
+ * the ifqueue. All the pending mbufs are removed from the previous
+ * conditioner and requeued on the new.
+ *
+ * === ifq_idx()
+ *
+ * ifq_idx() selects a specific ifqueue from the current ifnet
+ * structure for use in the transmission of the mbuf.
+ *
+ * === ifq_enqueue()
+ *
+ * ifq_enqueue() attempts to fit an mbuf onto the ifqueue. The
+ * current traffic conditioner may drop a packet to make space on the
+ * queue.
+ *
+ * === ifq_start()
+ *
+ * Once a packet has been successfully queued with ifq_enqueue(),
+ * the network card is notified with a call to ifq_start().
+ * Calls to ifq_start() run in the ifqueue serialisation context,
+ * guaranteeing that only one instance of ifp->if_qstart() will be
+ * running on behalf of a specific ifqueue in the system at any point
+ * in time.
+ *
+ * == Traffic conditioners API
+ *
+ * The majority of interaction between struct ifqueue and a traffic
+ * conditioner occurs via the callbacks a traffic conditioner provides
+ * in an instance of struct ifq_ops.
+ *
+ * XXX document ifqop_*
+ *
+ * The ifqueue API implements the locking on behalf of the conditioning
+ * implementations so conditioners only have to reject or keep mbufs.
+ * If something needs to inspect a conditioners internals, the queue lock
+ * needs to be taken to allow for a consistent or safe view. The queue
+ * lock may be taken and released with ifq_q_enter() and ifq_q_leave().
+ *
+ * === ifq_q_enter()
+ *
+ * Code wishing to access a conditioners internals may take the queue
+ * lock with ifq_q_enter(). The caller must pass a reference to the
+ * conditioners ifq_ops structure so the infrastructure can ensure the
+ * caller is able to understand the internals. ifq_q_enter() returns
+ * a pointer to the conditioners internal structures, or NULL if the
+ * ifq_ops did not match the current conditioner.
+ *
+ * === ifq_q_leave()
+ *
+ * The queue lock acquired with ifq_q_enter() is released with
+ * ifq_q_leave().
+ *
+ * === ifq_mfreem() and ifq_mfreeml()
+ *
+ * A goal of the API is to avoid freeing an mbuf while mutexes are
+ * held. Because the ifq API manages the lock on behalf of the backend
+ * ifqops, the backend should not directly free mbufs. If a conditioner
+ * backend needs to drop a packet during the handling of ifqop_deq_begin,
+ * it may free it by calling ifq_mfreem(). This accounts for the drop,
+ * and schedules the free of the mbuf outside the hold of ifq_mtx.
+ * ifq_mfreeml() takes an mbuf list as an argument instead.
+ *
+ *
+ * == Network Driver API
+ *
+ * The API used by network drivers is mostly documented in the
+ * ifq_dequeue(9) manpage except for ifq_serialize().
+ *
+ * === ifq_serialize()
+ *
+ * A driver may run arbitrary work in the ifqueue serialiser context
+ * via ifq_serialize(). The work to be done is represented by a task
+ * that has been prepared with task_set.
+ *
+ * The work will be run in series with any other work dispatched by
+ * ifq_start(), ifq_restart(), or other ifq_serialize() calls.
+ *
+ * Because the work may be run on another CPU, the lifetime of the
+ * task and the work it represents can extend beyond the end of the
+ * call to ifq_serialize() that dispatched it.
+ *
+ *
+ * = ifqueue work serialisation
+ *
+ * ifqueues provide a mechanism to dispatch work to be run in a single
+ * context. Work in this mechanism is represented by task structures.
+ *
+ * The tasks are run in a context similar to a taskq serviced by a
+ * single kernel thread, except the work is run immediately by the
+ * first CPU that dispatches work. If a second CPU attempts to dispatch
+ * additional tasks while the first is still running, it will be queued
+ * to be run by the first CPU. The second CPU will return immediately.
+ *
+ * = MP Safe Network Drivers
+ *
+ * An MP safe network driver is one in which its start routine can be
+ * called by the network stack without holding the big kernel lock.
+ *
+ * == Attach
+ *
+ * A driver advertises its ability to run its start routine without
+ * the kernel lock by setting the IFXF_MPSAFE flag in ifp->if_xflags
+ * before calling if_attach(). Advertising an MPSAFE start routine
+ * also implies that the driver understands that a network card can
+ * have multiple rings or transmit queues, and therefore provides
+ * if_qstart function (which takes an ifqueue pointer) instead of an
+ * if_start function (which takes an ifnet pointer).
+ *
+ * If the hardware supports multiple transmit rings, it advertises
+ * support for multiple rings to the network stack with if_attach_queues()
+ * after the call to if_attach(). if_attach_queues allocates a struct
+ * ifqueue for each hardware ring, which can then be initialised by
+ * the driver with data for each ring.
+ *
+ * void drv_start(struct ifqueue *);
+ *
+ * void
+ * drv_attach()
+ * {
+ * ...
+ * ifp->if_xflags = IFXF_MPSAFE;
+ * ifp->if_qstart = drv_start;
+ * if_attach(ifp);
+ *
+ * if_attach_queues(ifp, DRV_NUM_TX_RINGS);
+ * for (i = 0; i < DRV_NUM_TX_RINGS; i++) {
+ * struct ifqueue *ifq = ifp->if_ifqs[i];
+ * struct drv_tx_ring *ring = &sc->sc_tx_rings[i];
+ *
+ * ifq->ifq_softc = ring;
+ * ring->ifq = ifq;
+ * }
+ * }
+ *
+ * The network stack will then call ifp->if_qstart via ifq_start()
+ * to guarantee there is only one instance of that function running
+ * for each ifq in the system, and to serialise it with other work
+ * the driver may provide.
+ *
+ * == Initialise
+ *
+ * When the stack requests an interface be brought up (ie, drv_ioctl()
+ * is called to handle SIOCSIFFLAGS with IFF_UP set in ifp->if_flags)
+ * drivers should set IFF_RUNNING in ifp->if_flags, and then call
+ * ifq_clr_oactive() against each ifq.
+ *
+ * == if_start
+ *
+ * ifq_start() checks that IFF_RUNNING is set in ifp->if_flags, that
+ * ifq_is_oactive() does not return true, and that there are pending
+ * packets to transmit via a call to ifq_len(). Therefore, drivers are
+ * no longer responsible for doing this themselves.
+ *
+ * If a driver should not transmit packets while its link is down, use
+ * ifq_purge() to flush pending packets from the transmit queue.
+ *
+ * Drivers for hardware should use the following pattern to transmit
+ * packets:
+ *
+ * void
+ * drv_start(struct ifqueue *ifq)
+ * {
+ * struct drv_tx_ring *ring = ifq->ifq_softc;
+ * struct ifnet *ifp = ifq->ifq_if;
+ * struct drv_softc *sc = ifp->if_softc;
+ * struct mbuf *m;
+ * int kick = 0;
+ *
+ * if (NO_LINK) {
+ * ifq_purge(ifq);
+ * return;
+ * }
+ *
+ * for (;;) {
+ * if (NO_SPACE(ring)) {
+ * ifq_set_oactive(ifq);
+ * break;
+ * }
+ *
+ * m = ifq_dequeue(ifq);
+ * if (m == NULL)
+ * break;
+ *
+ * if (drv_encap(sc, ring, m) != 0) { // map and fill ring
+ * m_freem(m);
+ * continue;
+ * }
+ *
+ * bpf_mtap();
+ * }
+ *
+ * drv_kick(ring); // notify hw of new descriptors on the ring
+ * }
+ *
+ * == Transmission completion
+ *
+ * The following pattern should be used for transmit queue interrupt
+ * processing:
+ *
+ * void
+ * drv_txeof(struct drv_tx_ring *ring)
+ * {
+ * struct ifqueue *ifq = ring->ifq;
+ *
+ * while (COMPLETED_PKTS(ring)) {
+ * // unmap packets, m_freem() the mbufs.
+ * }
+ *
+ * if (ifq_is_oactive(ifq))
+ * ifq_restart(ifq);
+ * }
+ *
+ * == Stop
+ *
+ * Bringing an interface down (ie, IFF_UP was cleared in ifp->if_flags)
+ * should clear IFF_RUNNING in ifp->if_flags, and guarantee the start
+ * routine is not running before freeing any resources it uses:
+ *
+ * void
+ * drv_down(struct drv_softc *sc)
+ * {
+ * struct ifnet *ifp = &sc->sc_if;
+ * struct ifqueue *ifq;
+ * int i;
+ *
+ * CLR(ifp->if_flags, IFF_RUNNING);
+ * DISABLE_INTERRUPTS();
+ *
+ * for (i = 0; i < sc->sc_num_queues; i++) {
+ * ifq = ifp->if_ifqs[i];
+ * ifq_barrier(ifq);
+ * }
+ *
+ * intr_barrier(sc->sc_ih);
+ *
+ * FREE_RESOURCES();
+ *
+ * for (i = 0; i < sc->sc_num_queues; i++) {
+ * ifq = ifp->if_ifqs[i];
+ * ifq_clr_oactive(ifq);
+ * }
+ * }
+ *
+ */
+
+struct ifq_ops {
+ unsigned int (*ifqop_idx)(unsigned int,
+ const struct mbuf *);
+ struct mbuf *(*ifqop_enq)(struct ifqueue *, struct mbuf *);
+ struct mbuf *(*ifqop_deq_begin)(struct ifqueue *, void **);
+ void (*ifqop_deq_commit)(struct ifqueue *,
+ struct mbuf *, void *);
+ void (*ifqop_purge)(struct ifqueue *,
+ struct mbuf_list *);
+ void *(*ifqop_alloc)(unsigned int, void *);
+ void (*ifqop_free)(unsigned int, void *);
+};
+
+extern const struct ifq_ops * const ifq_priq_ops;
+
+/*
+ * Interface send queues.
+ */
+
+void ifq_init(struct ifqueue *, struct ifnet *, unsigned int);
+void ifq_attach(struct ifqueue *, const struct ifq_ops *, void *);
+void ifq_destroy(struct ifqueue *);
+void ifq_add_data(struct ifqueue *, struct if_data *);
+int ifq_enqueue(struct ifqueue *, struct mbuf *);
+void ifq_start(struct ifqueue *);
+struct mbuf *ifq_deq_begin(struct ifqueue *);
+void ifq_deq_commit(struct ifqueue *, struct mbuf *);
+void ifq_deq_rollback(struct ifqueue *, struct mbuf *);
+struct mbuf *ifq_dequeue(struct ifqueue *);
+int ifq_hdatalen(struct ifqueue *);
+void ifq_init_maxlen(struct ifqueue *, unsigned int);
+void ifq_mfreem(struct ifqueue *, struct mbuf *);
+void ifq_mfreeml(struct ifqueue *, struct mbuf_list *);
+unsigned int ifq_purge(struct ifqueue *);
+void *ifq_q_enter(struct ifqueue *, const struct ifq_ops *);
+void ifq_q_leave(struct ifqueue *, void *);
+void ifq_serialize(struct ifqueue *, struct task *);
+void ifq_barrier(struct ifqueue *);
+void ifq_set_oactive(struct ifqueue *);
+void ifq_deq_set_oactive(struct ifqueue *);
+
+int ifq_deq_sleep(struct ifqueue *, struct mbuf **, int, int,
+ const char *, volatile unsigned int *,
+ volatile unsigned int *);
+
+#define ifq_len(_ifq) READ_ONCE((_ifq)->ifq_len)
+#define ifq_empty(_ifq) (ifq_len(_ifq) == 0)
+
+static inline int
+ifq_is_priq(struct ifqueue *ifq)
+{
+ return (ifq->ifq_ops == ifq_priq_ops);
+}
+
+static inline void
+ifq_clr_oactive(struct ifqueue *ifq)
+{
+ ifq->ifq_oactive = 0;
+}
+
+static inline unsigned int
+ifq_is_oactive(struct ifqueue *ifq)
+{
+ return (ifq->ifq_oactive);
+}
+
+static inline void
+ifq_restart(struct ifqueue *ifq)
+{
+ ifq_serialize(ifq, &ifq->ifq_restart);
+}
+
+static inline unsigned int
+ifq_idx(struct ifqueue *ifq, unsigned int nifqs, const struct mbuf *m)
+{
+ return ((*ifq->ifq_ops->ifqop_idx)(nifqs, m));
+}
+
+/* ifiq */
+
+void ifiq_init(struct ifiqueue *, struct ifnet *, unsigned int);
+void ifiq_destroy(struct ifiqueue *);
+int ifiq_input(struct ifiqueue *, struct mbuf_list *);
+int ifiq_enqueue_qlim(struct ifiqueue *, struct mbuf *,
+ unsigned int);
+void ifiq_add_data(struct ifiqueue *, struct if_data *);
+
+#define ifiq_len(_ifiq) READ_ONCE(ml_len(&(_ifiq)->ifiq_ml))
+#define ifiq_empty(_ifiq) (ifiq_len(_ifiq) == 0)
+
+static inline int
+ifiq_enqueue(struct ifiqueue *ifiq, struct mbuf *m)
+{
+ return ifiq_enqueue_qlim(ifiq, m, 0);
+}
+
+#endif /* _KERNEL */
+
+#endif /* _NET_IFQ_H_ */
diff --git a/module/include/compat/net/radix.h b/module/include/compat/net/radix.h
new file mode 100644
index 0000000..38b5714
--- /dev/null
+++ b/module/include/compat/net/radix.h
@@ -0,0 +1,75 @@
+/* PFLINUX compat: — OpenBSD 8.0 radix structures/API
+ * (rn_*), cleaned of BSD-only syntax. Implementation: compat/radix.c
+ * (ported from OpenBSD 8.0 sys/net/radix.c, task T10). */
+#ifndef _PFK_RADIX_H
+#define _PFK_RADIX_H
+
+#include
+
+struct radix_mask;
+
+struct radix_node {
+ struct radix_mask *rn_mklist;
+ struct radix_node *rn_p;
+ short rn_b;
+ char rn_bmask;
+ u_char rn_flags;
+#define RNF_NORMAL 1
+#define RNF_ROOT 2
+#define RNF_ACTIVE 4
+ union {
+ struct {
+ caddr_t rn_Key;
+ caddr_t rn_Mask;
+ struct radix_node *rn_Dupedkey;
+ } rn_leaf;
+ struct {
+ int rn_Off;
+ struct radix_node *rn_L;
+ struct radix_node *rn_R;
+ } rn_node;
+ } rn_u;
+};
+
+#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
+#define rn_key rn_u.rn_leaf.rn_Key
+#define rn_mask rn_u.rn_leaf.rn_Mask
+#define rn_off rn_u.rn_node.rn_Off
+#define rn_l rn_u.rn_node.rn_L
+#define rn_r rn_u.rn_node.rn_R
+
+struct radix_mask {
+ short rm_b;
+ char rm_unused;
+ u_char rm_flags;
+ struct radix_mask *rm_mklist;
+ union {
+ caddr_t rmu_mask;
+ struct radix_node *rmu_leaf;
+ } rm_rmu;
+ int rm_refs;
+};
+
+#define rm_mask rm_rmu.rmu_mask
+#define rm_leaf rm_rmu.rmu_leaf
+
+struct radix_node_head {
+ struct radix_node *rnh_treetop;
+ int rnh_addrsize;
+ int rnh_pktsize;
+ struct radix_node rnh_nodes[3];
+ u_int rnh_rtableid;
+};
+
+void rn_init(unsigned int);
+int rn_inithead(void **, int);
+int rn_walktree(struct radix_node_head *,
+ int (*)(struct radix_node *, void *, u_int), void *);
+struct radix_node *rn_addroute(void *, void *, struct radix_node_head *,
+ struct radix_node [2], u_int8_t);
+struct radix_node *rn_delete(void *, void *, struct radix_node_head *,
+ struct radix_node *);
+struct radix_node *rn_lookup(void *, void *, struct radix_node_head *);
+struct radix_node *rn_match(void *, struct radix_node_head *);
+
+#endif /* _PFK_RADIX_H_ */
diff --git a/module/include/compat/net/rtable.h b/module/include/compat/net/rtable.h
new file mode 100644
index 0000000..d08edc3
--- /dev/null
+++ b/module/include/compat/net/rtable.h
@@ -0,0 +1,82 @@
+/* $OpenBSD: rtable.h,v 1.36 2025/07/15 09:55:49 dlg Exp $ */
+
+/*
+ * Copyright (c) 2014-2016 Martin Pieuchot
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _NET_RTABLE_H_
+#define _NET_RTABLE_H_
+
+#include
+
+struct art;
+
+/*
+ * Locks used to protect struct members in this file:
+ * I immutable after creation
+ * N net lock
+ */
+
+struct rtable {
+ struct rwlock r_lock;
+ struct art *r_art; /* [I] */
+ unsigned int r_off; /* [I] Offset of key in bytes */
+
+ struct sockaddr *r_source; /* [N] use optional src addr */
+};
+
+/*
+ * Newer routing table implementation based on ART (Allotment Routing
+ * Table).
+ */
+
+#define rt_key(rt) ((rt)->rt_dest)
+#define rt_plen(rt) ((rt)->rt_plen)
+#define RT_ROOT(rt) (0)
+
+int rtable_satoplen(sa_family_t, const struct sockaddr *);
+
+void rtable_init(void);
+int rtable_exists(unsigned int);
+int rtable_empty(unsigned int);
+int rtable_add(unsigned int);
+unsigned int rtable_l2(unsigned int);
+unsigned int rtable_loindex(unsigned int);
+void rtable_l2set(unsigned int, unsigned int, unsigned int);
+
+int rtable_setsource(unsigned int, int, struct sockaddr *);
+struct sockaddr *rtable_getsource(unsigned int, int);
+void rtable_clearsource(unsigned int, struct sockaddr *);
+struct rtentry *rtable_lookup(unsigned int, const struct sockaddr *,
+ const struct sockaddr *, const struct sockaddr *, uint8_t);
+struct rtentry *rtable_match(unsigned int, const struct sockaddr *,
+ uint32_t *);
+struct rtentry *rtable_iterate(struct rtentry *);
+int rtable_insert(unsigned int, struct sockaddr *,
+ const struct sockaddr *, const struct sockaddr *, uint8_t,
+ struct rtentry *);
+int rtable_delete(unsigned int, const struct sockaddr *,
+ const struct sockaddr *, struct rtentry *);
+int rtable_walk(unsigned int, sa_family_t, struct rtentry **,
+ int (*)(struct rtentry *, void *, unsigned int), void *);
+int rtable_read(unsigned int, sa_family_t,
+ int (*)(const struct rtentry *, void *, unsigned int),
+ void *);
+
+int rtable_mpath_capable(unsigned int, sa_family_t);
+int rtable_mpath_reprio(unsigned int, struct sockaddr *, int,
+ uint8_t, struct rtentry *);
+
+#endif /* _NET_RTABLE_H_ */
diff --git a/module/include/compat/net/toeplitz.h b/module/include/compat/net/toeplitz.h
new file mode 100644
index 0000000..1eb6c3c
--- /dev/null
+++ b/module/include/compat/net/toeplitz.h
@@ -0,0 +1,53 @@
+/* PFLINUX compat: — software Toeplitz hash (RFC 3305)
+ * with the OpenBSD API shape used by PF (global cache + stoeplitz_* macros).
+ * Implementation: compat/toeplitz.c (uses kernel crypto_shash "sha256"). */
+#ifndef _PFK_TOEPLITZ_H
+#define _PFK_TOEPLITZ_H
+#include
+
+#define TOEPLITZ_KEY_LEN 40
+
+struct stoeplitz_cache {
+ u8 key[TOEPLITZ_KEY_LEN];
+ u8 keyhash[32]; /* SHA256(key) */
+ int initialized;
+};
+
+extern struct stoeplitz_cache *stoeplitz_cache;
+
+void stoeplitz_init(void);
+void stoeplitz_cache_init(struct stoeplitz_cache *, const u8 *key);
+uint16_t stoeplitz_hash_ip4(const struct stoeplitz_cache *,
+ const struct in_addr *, const struct in_addr *);
+uint16_t stoeplitz_hash_ip4port(const struct stoeplitz_cache *,
+ const struct in_addr *, const struct in_addr *,
+ u16, u16);
+uint16_t stoeplitz_hash_ip6(const struct stoeplitz_cache *,
+ const struct in6_addr *, const struct in6_addr *);
+uint16_t stoeplitz_hash_ip6port(const struct stoeplitz_cache *,
+ const struct in6_addr *, const struct in6_addr *,
+ u16, u16);
+uint16_t stoeplitz_hash_eaddr(const struct stoeplitz_cache *,
+ const u8 *);
+uint16_t stoeplitz_hash_n16(const struct stoeplitz_cache *, u16);
+uint16_t stoeplitz_hash_n32(const struct stoeplitz_cache *, u32);
+uint16_t stoeplitz_hash_h16(const struct stoeplitz_cache *, u16);
+uint16_t stoeplitz_hash_h32(const struct stoeplitz_cache *, u32);
+uint16_t stoeplitz_hash_h64(const struct stoeplitz_cache *, u64);
+
+#define stoeplitz_n32(_n32) stoeplitz_hash_n32(stoeplitz_cache, (_n32))
+#define stoeplitz_h16(_h16) stoeplitz_hash_h16(stoeplitz_cache, (_h16))
+#define stoeplitz_h32(_h32) stoeplitz_hash_h32(stoeplitz_cache, (_h32))
+#define stoeplitz_h64(_h64) stoeplitz_hash_h64(stoeplitz_cache, (_h64))
+#define stoeplitz_ip4(_sa4, _da4) \
+ stoeplitz_hash_ip4(stoeplitz_cache, (_sa4), (_da4))
+#define stoeplitz_ip4port(_sa4, _da4, _sp, _dp) \
+ stoeplitz_hash_ip4port(stoeplitz_cache, (_sa4), (_da4), (_sp), (_dp))
+#define stoeplitz_ip6(_sa6, _da6) \
+ stoeplitz_hash_ip6(stoeplitz_cache, (_sa6), (_da6))
+#define stoeplitz_ip6port(_sa6, _da6, _sp, _dp) \
+ stoeplitz_hash_ip6port(stoeplitz_cache, (_sa6), (_da6), (_sp), (_dp))
+#define stoeplitz_eaddr(_ea) \
+ stoeplitz_hash_eaddr(stoeplitz_cache, (_ea))
+
+#endif
diff --git a/module/include/compat/netinet/in.h b/module/include/compat/netinet/in.h
new file mode 100644
index 0000000..ac5a2d4
--- /dev/null
+++ b/module/include/compat/netinet/in.h
@@ -0,0 +1,13 @@
+/* PFLINUX compat: */
+#ifndef _PFK_NETINET_IN_H
+#define _PFK_NETINET_IN_H
+#include
+#include
+/* BSD IP-level option numbers (Linux uapi uses different values) */
+#define PF_IP_OPTIONS 1
+#define PF_IP_RECORD_ROUTE 7
+#define PF_IP_TIMESTAMP 68
+#ifndef INADDR_MULTICAST
+#define INADDR_MULTICAST 0xe0000000U
+#endif
+#endif
diff --git a/module/include/compat/sys/_endian.h b/module/include/compat/sys/_endian.h
new file mode 100644
index 0000000..e1ce82e
--- /dev/null
+++ b/module/include/compat/sys/_endian.h
@@ -0,0 +1,179 @@
+/* $OpenBSD: _endian.h,v 1.8 2018/01/11 23:13:37 dlg Exp $ */
+
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. 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.
+ * 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 ``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 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.
+ */
+
+/*
+ * Internal endianness macros. This pulls in to
+ * get the correct setting direction for the platform and sets internal
+ * ('__' prefix) macros appropriately.
+ */
+
+#ifndef _SYS__ENDIAN_H_
+#define _SYS__ENDIAN_H_
+
+#include
+
+#define __FROM_SYS__ENDIAN
+#include
+#undef __FROM_SYS__ENDIAN
+
+#define _LITTLE_ENDIAN 1234
+#define _BIG_ENDIAN 4321
+#define _PDP_ENDIAN 3412
+
+/* Note that these macros evaluate their arguments several times. */
+
+#define __swap16gen(x) \
+ (__uint16_t)(((__uint16_t)(x) & 0xffU) << 8 | ((__uint16_t)(x) & 0xff00U) >> 8)
+
+#define __swap32gen(x) \
+ (__uint32_t)(((__uint32_t)(x) & 0xff) << 24 | \
+ ((__uint32_t)(x) & 0xff00) << 8 | ((__uint32_t)(x) & 0xff0000) >> 8 |\
+ ((__uint32_t)(x) & 0xff000000) >> 24)
+
+#define __swap64gen(x) \
+ (__uint64_t)((((__uint64_t)(x) & 0xff) << 56) | \
+ ((__uint64_t)(x) & 0xff00ULL) << 40 | \
+ ((__uint64_t)(x) & 0xff0000ULL) << 24 | \
+ ((__uint64_t)(x) & 0xff000000ULL) << 8 | \
+ ((__uint64_t)(x) & 0xff00000000ULL) >> 8 | \
+ ((__uint64_t)(x) & 0xff0000000000ULL) >> 24 | \
+ ((__uint64_t)(x) & 0xff000000000000ULL) >> 40 | \
+ ((__uint64_t)(x) & 0xff00000000000000ULL) >> 56)
+
+#ifndef __HAVE_MD_SWAP
+static __inline __uint16_t
+__swap16md(__uint16_t x)
+{
+ return (__swap16gen(x));
+}
+
+static __inline __uint32_t
+__swap32md(__uint32_t x)
+{
+ return (__swap32gen(x));
+}
+
+static __inline __uint64_t
+__swap64md(__uint64_t x)
+{
+ return (__swap64gen(x));
+}
+#endif
+
+#define __swap16(x) \
+ (__uint16_t)(__builtin_constant_p(x) ? __swap16gen(x) : __swap16md(x))
+#define __swap32(x) \
+ (__uint32_t)(__builtin_constant_p(x) ? __swap32gen(x) : __swap32md(x))
+#define __swap64(x) \
+ (__uint64_t)(__builtin_constant_p(x) ? __swap64gen(x) : __swap64md(x))
+
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+
+#define _QUAD_HIGHWORD 1
+#define _QUAD_LOWWORD 0
+
+#define __htobe16 __swap16
+#define __htobe32 __swap32
+#define __htobe64 __swap64
+#define __htole16(x) ((__uint16_t)(x))
+#define __htole32(x) ((__uint32_t)(x))
+#define __htole64(x) ((__uint64_t)(x))
+
+#ifdef _KERNEL
+#ifdef __HAVE_MD_SWAPIO
+
+#define __bemtoh16(_x) __mswap16(_x)
+#define __bemtoh32(_x) __mswap32(_x)
+#define __bemtoh64(_x) __mswap64(_x)
+
+#define __htobem16(_x, _v) __swapm16((_x), (_v))
+#define __htobem32(_x, _v) __swapm32((_x), (_v))
+#define __htobem64(_x, _v) __swapm64((_x), (_v))
+
+#endif /* __HAVE_MD_SWAPIO */
+#endif /* _KERNEL */
+#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
+
+#if _BYTE_ORDER == _BIG_ENDIAN
+
+#define _QUAD_HIGHWORD 0
+#define _QUAD_LOWWORD 1
+
+#define __htobe16(x) ((__uint16_t)(x))
+#define __htobe32(x) ((__uint32_t)(x))
+#define __htobe64(x) ((__uint64_t)(x))
+#define __htole16 __swap16
+#define __htole32 __swap32
+#define __htole64 __swap64
+
+#ifdef _KERNEL
+#ifdef __HAVE_MD_SWAPIO
+
+#define __lemtoh16(_x) __mswap16(_x)
+#define __lemtoh32(_x) __mswap32(_x)
+#define __lemtoh64(_x) __mswap64(_x)
+
+#define __htolem16(_x, _v) __swapm16((_x), (_v))
+#define __htolem32(_x, _v) __swapm32((_x), (_v))
+#define __htolem64(_x, _v) __swapm64((_x), (_v))
+
+#endif /* __HAVE_MD_SWAPIO */
+#endif /* _KERNEL */
+#endif /* _BYTE_ORDER == _BIG_ENDIAN */
+
+
+#ifdef _KERNEL
+/*
+ * Fill in the __hto[bl]em{16,32,64} and __[bl]emtoh{16,32,64} macros
+ * that haven't been defined yet
+ */
+
+#ifndef __bemtoh16
+#define __bemtoh16(_x) __htobe16(*(__uint16_t *)(_x))
+#define __bemtoh32(_x) __htobe32(*(__uint32_t *)(_x))
+#define __bemtoh64(_x) __htobe64(*(__uint64_t *)(_x))
+#endif
+
+#ifndef __htobem16
+#define __htobem16(_x, _v) (*(__uint16_t *)(_x) = __htobe16(_v))
+#define __htobem32(_x, _v) (*(__uint32_t *)(_x) = __htobe32(_v))
+#define __htobem64(_x, _v) (*(__uint64_t *)(_x) = __htobe64(_v))
+#endif
+
+#ifndef __lemtoh16
+#define __lemtoh16(_x) __htole16(*(__uint16_t *)(_x))
+#define __lemtoh32(_x) __htole32(*(__uint32_t *)(_x))
+#define __lemtoh64(_x) __htole64(*(__uint64_t *)(_x))
+#endif
+
+#ifndef __htolem16
+#define __htolem16(_x, _v) (*(__uint16_t *)(_x) = __htole16(_v))
+#define __htolem32(_x, _v) (*(__uint32_t *)(_x) = __htole32(_v))
+#define __htolem64(_x, _v) (*(__uint64_t *)(_x) = __htole64(_v))
+#endif
+#endif /* _KERNEL */
+
+#endif /* _SYS__ENDIAN_H_ */
diff --git a/module/include/compat/sys/_null.h b/module/include/compat/sys/_null.h
new file mode 100644
index 0000000..2de47f0
--- /dev/null
+++ b/module/include/compat/sys/_null.h
@@ -0,0 +1,7 @@
+/* PFLINUX compat: */
+#ifndef _SYS__NULL_H_
+#define _SYS__NULL_H_
+#ifndef NULL
+#define NULL 0L
+#endif
+#endif
diff --git a/module/include/compat/sys/cdefs.h b/module/include/compat/sys/cdefs.h
new file mode 100644
index 0000000..5403ce3
--- /dev/null
+++ b/module/include/compat/sys/cdefs.h
@@ -0,0 +1,34 @@
+/* PFLINUX compat: minimal for queue.h/tree.h */
+#ifndef _PFK_CDEFS_H
+#define _PFK_CDEFS_H
+#include
+#define __BEGIN_DECLS
+#define __END_DECLS
+#ifndef __aligned
+#define __aligned(x) __attribute__((__aligned__(x)))
+#endif
+#ifndef __packed
+#define __packed __attribute__((__packed__))
+#endif
+#ifndef __unused
+#define __unused __attribute__((__unused__))
+#endif
+#ifndef __dead
+#define __dead __attribute__((__noreturn__))
+#endif
+#ifndef __predict_false
+#define __predict_false(x) unlikely(x)
+#endif
+#ifndef __predict_true
+#define __predict_true(x) likely(x)
+#endif
+#ifndef __arraycount
+#define __arraycount(a) (sizeof(a)/sizeof((a)[0]))
+#endif
+#ifndef __predict
+#define __predict(x, y) ((y) ? likely(x) : unlikely(x))
+#endif
+#ifndef __restrict
+#define __restrict
+#endif
+#endif
diff --git a/module/include/compat/sys/endian.h b/module/include/compat/sys/endian.h
new file mode 100644
index 0000000..6642dfe
--- /dev/null
+++ b/module/include/compat/sys/endian.h
@@ -0,0 +1,6 @@
+/* PFLINUX compat: */
+#ifndef _PFK_SYS_ENDIAN_H
+#define _PFK_SYS_ENDIAN_H
+#include
+#include
+#endif
diff --git a/module/include/compat/sys/param.h b/module/include/compat/sys/param.h
new file mode 100644
index 0000000..f804c4e
--- /dev/null
+++ b/module/include/compat/sys/param.h
@@ -0,0 +1,10 @@
+/* PFLINUX compat: */
+#ifndef _PFK_PARAM_H
+#define _PFK_PARAM_H
+#include
+#define MAXHOSTNAMELEN 64
+#define NOFILE 256
+#define BSD 20260101
+#define BSD_VERSION BSD
+#define NETBSD 0
+#endif
diff --git a/module/include/compat/sys/queue.h b/module/include/compat/sys/queue.h
new file mode 100644
index 0000000..0043af3
--- /dev/null
+++ b/module/include/compat/sys/queue.h
@@ -0,0 +1,633 @@
+/* $OpenBSD: queue.h,v 1.47 2026/06/12 01:04:42 millert Exp $ */
+/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
+
+/*
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. 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.
+ * 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.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+ *
+ * @(#)queue.h 8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define _SYS_QUEUE_H_
+
+#include
+
+/*
+ * This file defines five types of data structures: singly-linked lists,
+ * lists, simple queues, tail queues and XOR simple queues.
+ *
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction. Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A simple queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are singly
+ * linked to save space, so elements can only be removed from the
+ * head of the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the
+ * list. A simple queue may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * An XOR simple queue is used in the same way as a regular simple queue.
+ * The difference is that the head structure also includes a "cookie" that
+ * is XOR'd with the queue pointer (first, last or next) to generate the
+ * real pointer value.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC))
+#define _Q_INVALID ((void *)-1)
+#define _Q_INVALIDATE(a) (a) = _Q_INVALID
+#else
+#define _Q_INVALIDATE(a)
+#endif
+
+/*
+ * Singly-linked List definitions.
+ */
+#define SLIST_HEAD(name, type) \
+struct name { \
+ struct type *slh_first; /* first element */ \
+}
+
+#define SLIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define SLIST_ENTRY(type) \
+struct { \
+ struct type *sle_next; /* next element */ \
+}
+
+/*
+ * Singly-linked List access methods.
+ */
+#define SLIST_FIRST(head) ((head)->slh_first)
+#define SLIST_END(head) NULL
+#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
+#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
+
+#define SLIST_FOREACH(var, head, field) \
+ for((var) = SLIST_FIRST(head); \
+ (var) != SLIST_END(head); \
+ (var) = SLIST_NEXT(var, field))
+
+#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = SLIST_FIRST(head); \
+ (var) && ((tvar) = SLIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Singly-linked List functions.
+ */
+#define SLIST_INIT(head) { \
+ SLIST_FIRST(head) = SLIST_END(head); \
+}
+
+#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
+ (elm)->field.sle_next = (slistelm)->field.sle_next; \
+ (slistelm)->field.sle_next = (elm); \
+} while (0)
+
+#define SLIST_INSERT_HEAD(head, elm, field) do { \
+ (elm)->field.sle_next = (head)->slh_first; \
+ (head)->slh_first = (elm); \
+} while (0)
+
+#define SLIST_REMOVE_AFTER(elm, field) do { \
+ (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \
+} while (0)
+
+#define SLIST_REMOVE_HEAD(head, field) do { \
+ (head)->slh_first = (head)->slh_first->field.sle_next; \
+} while (0)
+
+#define SLIST_REMOVE(head, elm, type, field) do { \
+ if ((head)->slh_first == (elm)) { \
+ SLIST_REMOVE_HEAD((head), field); \
+ } else { \
+ struct type *curelm = (head)->slh_first; \
+ \
+ while (curelm->field.sle_next != (elm)) \
+ curelm = curelm->field.sle_next; \
+ curelm->field.sle_next = \
+ curelm->field.sle_next->field.sle_next; \
+ } \
+ _Q_INVALIDATE((elm)->field.sle_next); \
+} while (0)
+
+/*
+ * List definitions.
+ */
+#define LIST_HEAD(name, type) \
+struct name { \
+ struct type *lh_first; /* first element */ \
+}
+
+#define LIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define LIST_ENTRY(type) \
+struct { \
+ struct type *le_next; /* next element */ \
+ struct type **le_prev; /* address of previous next element */ \
+}
+
+/*
+ * List access methods.
+ */
+#define LIST_FIRST(head) ((head)->lh_first)
+#define LIST_END(head) NULL
+#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))
+#define LIST_NEXT(elm, field) ((elm)->field.le_next)
+
+#define LIST_FOREACH(var, head, field) \
+ for((var) = LIST_FIRST(head); \
+ (var)!= LIST_END(head); \
+ (var) = LIST_NEXT(var, field))
+
+#define LIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = LIST_FIRST(head); \
+ (var) && ((tvar) = LIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * List functions.
+ */
+#define LIST_INIT(head) do { \
+ LIST_FIRST(head) = LIST_END(head); \
+} while (0)
+
+#define LIST_INSERT_AFTER(listelm, elm, field) do { \
+ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
+ (listelm)->field.le_next->field.le_prev = \
+ &(elm)->field.le_next; \
+ (listelm)->field.le_next = (elm); \
+ (elm)->field.le_prev = &(listelm)->field.le_next; \
+} while (0)
+
+#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.le_prev = (listelm)->field.le_prev; \
+ (elm)->field.le_next = (listelm); \
+ *(listelm)->field.le_prev = (elm); \
+ (listelm)->field.le_prev = &(elm)->field.le_next; \
+} while (0)
+
+#define LIST_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.le_next = (head)->lh_first) != NULL) \
+ (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+ (head)->lh_first = (elm); \
+ (elm)->field.le_prev = &(head)->lh_first; \
+} while (0)
+
+#define LIST_REMOVE(elm, field) do { \
+ if ((elm)->field.le_next != NULL) \
+ (elm)->field.le_next->field.le_prev = \
+ (elm)->field.le_prev; \
+ *(elm)->field.le_prev = (elm)->field.le_next; \
+ _Q_INVALIDATE((elm)->field.le_prev); \
+ _Q_INVALIDATE((elm)->field.le_next); \
+} while (0)
+
+#define LIST_REPLACE(elm, elm2, field) do { \
+ if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \
+ (elm2)->field.le_next->field.le_prev = \
+ &(elm2)->field.le_next; \
+ (elm2)->field.le_prev = (elm)->field.le_prev; \
+ *(elm2)->field.le_prev = (elm2); \
+ _Q_INVALIDATE((elm)->field.le_prev); \
+ _Q_INVALIDATE((elm)->field.le_next); \
+} while (0)
+
+/*
+ * Simple queue definitions.
+ */
+#define SIMPLEQ_HEAD(name, type) \
+struct name { \
+ struct type *sqh_first; /* first element */ \
+ struct type **sqh_last; /* addr of last next element */ \
+}
+
+#define SIMPLEQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).sqh_first }
+
+#define SIMPLEQ_ENTRY(type) \
+struct { \
+ struct type *sqe_next; /* next element */ \
+}
+
+/*
+ * Simple queue access methods.
+ */
+#define SIMPLEQ_FIRST(head) ((head)->sqh_first)
+#define SIMPLEQ_END(head) NULL
+#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
+#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
+
+#define SIMPLEQ_FOREACH(var, head, field) \
+ for((var) = SIMPLEQ_FIRST(head); \
+ (var) != SIMPLEQ_END(head); \
+ (var) = SIMPLEQ_NEXT(var, field))
+
+#define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = SIMPLEQ_FIRST(head); \
+ (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Simple queue functions.
+ */
+#define SIMPLEQ_INIT(head) do { \
+ (head)->sqh_first = NULL; \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (head)->sqh_first = (elm); \
+} while (0)
+
+#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.sqe_next = NULL; \
+ *(head)->sqh_last = (elm); \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (listelm)->field.sqe_next = (elm); \
+} while (0)
+
+#define SIMPLEQ_REMOVE_HEAD(head, field) do { \
+ if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \
+ == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+#define SIMPLEQ_CONCAT(head1, head2) do { \
+ if (!SIMPLEQ_EMPTY((head2))) { \
+ *(head1)->sqh_last = (head2)->sqh_first; \
+ (head1)->sqh_last = (head2)->sqh_last; \
+ SIMPLEQ_INIT((head2)); \
+ } \
+} while (0)
+
+/*
+ * XOR Simple queue definitions.
+ */
+#define XSIMPLEQ_HEAD(name, type) \
+struct name { \
+ struct type *sqx_first; /* first element */ \
+ struct type **sqx_last; /* addr of last next element */ \
+ unsigned long sqx_cookie; \
+}
+
+#define XSIMPLEQ_ENTRY(type) \
+struct { \
+ struct type *sqx_next; /* next element */ \
+}
+
+/*
+ * XOR Simple queue access methods.
+ */
+#define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \
+ (unsigned long)(ptr)))
+#define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first))
+#define XSIMPLEQ_END(head) NULL
+#define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head))
+#define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next))
+
+
+#define XSIMPLEQ_FOREACH(var, head, field) \
+ for ((var) = XSIMPLEQ_FIRST(head); \
+ (var) != XSIMPLEQ_END(head); \
+ (var) = XSIMPLEQ_NEXT(head, var, field))
+
+#define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = XSIMPLEQ_FIRST(head); \
+ (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * XOR Simple queue functions.
+ */
+#define XSIMPLEQ_INIT(head) do { \
+ arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \
+ (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \
+ (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \
+} while (0)
+
+#define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.sqx_next = (head)->sqx_first) == \
+ XSIMPLEQ_XOR(head, NULL)) \
+ (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
+ (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \
+} while (0)
+
+#define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \
+ *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \
+ (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
+} while (0)
+
+#define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \
+ XSIMPLEQ_XOR(head, NULL)) \
+ (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
+ (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \
+} while (0)
+
+#define XSIMPLEQ_REMOVE_HEAD(head, field) do { \
+ if (((head)->sqx_first = XSIMPLEQ_XOR(head, \
+ (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \
+ (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \
+} while (0)
+
+#define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \
+ if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \
+ (elm)->field.sqx_next)->field.sqx_next) \
+ == XSIMPLEQ_XOR(head, NULL)) \
+ (head)->sqx_last = \
+ XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \
+} while (0)
+
+
+/*
+ * Tail queue definitions.
+ */
+#define TAILQ_HEAD(name, type) \
+struct name { \
+ struct type *tqh_first; /* first element */ \
+ struct type **tqh_last; /* addr of last next element */ \
+}
+
+#define TAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).tqh_first }
+
+#define TAILQ_ENTRY(type) \
+struct { \
+ struct type *tqe_next; /* next element */ \
+ struct type **tqe_prev; /* address of previous next element */ \
+}
+
+/*
+ * Tail queue access methods.
+ */
+#define TAILQ_FIRST(head) ((head)->tqh_first)
+#define TAILQ_END(head) NULL
+#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+#define TAILQ_LAST(head, headname) \
+ (*(((struct headname *)((head)->tqh_last))->tqh_last))
+/* XXX */
+#define TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+#define TAILQ_EMPTY(head) \
+ (TAILQ_FIRST(head) == TAILQ_END(head))
+
+#define TAILQ_FOREACH(var, head, field) \
+ for((var) = TAILQ_FIRST(head); \
+ (var) != TAILQ_END(head); \
+ (var) = TAILQ_NEXT(var, field))
+
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TAILQ_FIRST(head); \
+ (var) != TAILQ_END(head) && \
+ ((tvar) = TAILQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+
+#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for((var) = TAILQ_LAST(head, headname); \
+ (var) != TAILQ_END(head); \
+ (var) = TAILQ_PREV(var, headname, field))
+
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TAILQ_LAST(head, headname); \
+ (var) != TAILQ_END(head) && \
+ ((tvar) = TAILQ_PREV(var, headname, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Tail queue functions.
+ */
+#define TAILQ_INIT(head) do { \
+ (head)->tqh_first = NULL; \
+ (head)->tqh_last = &(head)->tqh_first; \
+} while (0)
+
+#define TAILQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
+ (head)->tqh_first->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (head)->tqh_first = (elm); \
+ (elm)->field.tqe_prev = &(head)->tqh_first; \
+} while (0)
+
+#define TAILQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.tqe_next = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+ (elm)->field.tqe_next->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (listelm)->field.tqe_next = (elm); \
+ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
+} while (0)
+
+#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
+ (elm)->field.tqe_next = (listelm); \
+ *(listelm)->field.tqe_prev = (elm); \
+ (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TAILQ_REMOVE(head, elm, field) do { \
+ if (((elm)->field.tqe_next) != NULL) \
+ (elm)->field.tqe_next->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
+ _Q_INVALIDATE((elm)->field.tqe_prev); \
+ _Q_INVALIDATE((elm)->field.tqe_next); \
+} while (0)
+
+#define TAILQ_REPLACE(head, elm, elm2, field) do { \
+ if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \
+ (elm2)->field.tqe_next->field.tqe_prev = \
+ &(elm2)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm2)->field.tqe_next; \
+ (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \
+ *(elm2)->field.tqe_prev = (elm2); \
+ _Q_INVALIDATE((elm)->field.tqe_prev); \
+ _Q_INVALIDATE((elm)->field.tqe_next); \
+} while (0)
+
+#define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
+ (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+ (head1)->tqh_last = (head2)->tqh_last; \
+ TAILQ_INIT((head2)); \
+ } \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define STAILQ_HEAD(name, type) \
+struct name { \
+ struct type *stqh_first; /* first element */ \
+ struct type **stqh_last; /* addr of last next element */ \
+}
+
+#define STAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).stqh_first }
+
+#define STAILQ_ENTRY(type) \
+struct { \
+ struct type *stqe_next; /* next element */ \
+}
+
+/*
+ * Singly-linked Tail queue access methods.
+ */
+#define STAILQ_FIRST(head) ((head)->stqh_first)
+#define STAILQ_END(head) NULL
+#define STAILQ_EMPTY(head) (STAILQ_FIRST(head) == STAILQ_END(head))
+#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define STAILQ_FOREACH(var, head, field) \
+ for ((var) = STAILQ_FIRST(head); \
+ (var) != STAILQ_END(head); \
+ (var) = STAILQ_NEXT(var, field))
+
+#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = STAILQ_FIRST(head); \
+ (var) && ((tvar) = STAILQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define STAILQ_INIT(head) do { \
+ STAILQ_FIRST((head)) = NULL; \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_INSERT_HEAD(head, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_FIRST((head)) = (elm); \
+} while (0)
+
+#define STAILQ_INSERT_TAIL(head, elm, field) do { \
+ STAILQ_NEXT((elm), field) = NULL; \
+ *(head)->stqh_last = (elm); \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+} while (0)
+
+#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((listelm), field)) == NULL)\
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_NEXT((listelm), field) = (elm); \
+} while (0)
+
+#define STAILQ_REMOVE_HEAD(head, field) do { \
+ if ((STAILQ_FIRST((head)) = \
+ STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
+ if ((STAILQ_NEXT(elm, field) = \
+ STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+} while (0)
+
+#define STAILQ_REMOVE(head, elm, type, field) do { \
+ if (STAILQ_FIRST((head)) == (elm)) { \
+ STAILQ_REMOVE_HEAD((head), field); \
+ } else { \
+ struct type *curelm = (head)->stqh_first; \
+ while (STAILQ_NEXT(curelm, field) != (elm)) \
+ curelm = STAILQ_NEXT(curelm, field); \
+ STAILQ_REMOVE_AFTER(head, curelm, field); \
+ } \
+} while (0)
+
+#define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+ (head1)->stqh_last = (head2)->stqh_last; \
+ STAILQ_INIT((head2)); \
+ } \
+} while (0)
+
+#define STAILQ_LAST(head, type, field) \
+ (STAILQ_EMPTY((head)) ? NULL : \
+ ((struct type *)(void *) \
+ ((char *)((head)->stqh_last) - offsetof(struct type, field))))
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/module/include/compat/sys/refcnt.h b/module/include/compat/sys/refcnt.h
new file mode 100644
index 0000000..aa58cd3
--- /dev/null
+++ b/module/include/compat/sys/refcnt.h
@@ -0,0 +1,38 @@
+/* PFLINUX compat: — refcount_t wrapper with OpenBSD API */
+#ifndef _PFK_REFCNT_H
+#define _PFK_REFCNT_H
+#include
+
+struct refcnt { refcount_t rc; };
+#define REFCNT_INITIALIZER { .rc = REFCNT_INIT }
+
+static inline void refcnt_init(struct refcnt *r, unsigned int v)
+{
+ refcount_set(&r->rc, v ? (int)v : 1);
+}
+static inline unsigned int refcnt_value(const struct refcnt *r)
+{
+ return refcount_read((refcount_t *)&r->rc);
+}
+static inline void refcnt_take(struct refcnt *r)
+{
+ refcount_inc(&r->rc);
+}
+/* returns true if ref was valid and taken (OpenBSD refcnt_take_if) */
+static inline bool refcnt_take_not0(struct refcnt *r)
+{
+ return refcount_inc_not_zero(&r->rc);
+}
+static inline unsigned int refcnt_rele(struct refcnt *r)
+{
+ return (unsigned int)refcount_dec_and_test(&r->rc) ?
+ refcnt_value(r) : refcnt_value(r) + 1;
+}
+static inline unsigned int refcnt_rele_wake(struct refcnt *r)
+{
+ return refcnt_rele(r);
+}
+static inline void refcnt_finalize(struct refcnt *r, const void *unused)
+{
+}
+#endif
diff --git a/module/include/compat/sys/socket.h b/module/include/compat/sys/socket.h
new file mode 100644
index 0000000..61951ca
--- /dev/null
+++ b/module/include/compat/sys/socket.h
@@ -0,0 +1,46 @@
+/* PFLINUX compat: — BSD sockaddrs stay Linux-layout;
+ * sa_len fields are removed by the staging sed (see PORTING.md).
+ * Provides BSD sockaddr accessor macros + address family constants. */
+#ifndef _PFK_SOCKET_H
+#define _PFK_SOCKET_H
+
+#include
+struct pfk_sockaddr_union {
+ struct sockaddr_storage ss;
+};
+
+#define sintosa(x) ((struct sockaddr_in *)(void *)(x))
+#define sin6tosa(x) ((struct sockaddr_in6 *)(void *)(x))
+#define sa_tosa(x) ((struct sockaddr *)(void *)(x))
+#define satosa(x) ((struct sockaddr *)(void *)(x))
+#define satoxp(x) ((void *)(x)) /* unused; keep symbol */
+#define SA_LEN(x) (((x)->sa_family == AF_INET) ? \
+ sizeof(struct sockaddr_in) : \
+ ((x)->sa_family == AF_INET6) ? \
+ sizeof(struct sockaddr_in6) : 16)
+#define PFK_SA(x) ((struct sockaddr *)(x))
+#define PFK_INA(x) (&((struct sockaddr_in *)(x))->sin_addr)
+#define PFK_SA6(x) ((struct sockaddr_in6 *)(x))
+
+/* BSD sin_port/sin_addr == Linux: both network byte order fields */
+#ifndef SIN_IS_PRIVATE
+#define SIN_IS_PRIVATE 1
+#endif
+/* AF_INET6 == 10 on both sides */
+#ifndef AF_LINK
+#define AF_LINK 18 /* OpenBSD value; used by pf for link sa */
+#endif
+
+static inline int pfk_sa_cmp(const struct sockaddr *a, const struct sockaddr *b)
+{
+ if (a->sa_family != b->sa_family)
+ return 1;
+ switch (a->sa_family) {
+ case AF_INET:
+ return memcmp(sintosa(a), sintosa(b), sizeof(struct sockaddr_in));
+ case AF_INET6:
+ return memcmp(sin6tosa(a), sin6tosa(b), sizeof(struct sockaddr_in6));
+ }
+ return 1;
+}
+#endif
diff --git a/module/include/compat/sys/syslimits.h b/module/include/compat/sys/syslimits.h
new file mode 100644
index 0000000..4900ccb
--- /dev/null
+++ b/module/include/compat/sys/syslimits.h
@@ -0,0 +1,9 @@
+/* PFLINUX compat: */
+#ifndef _PFK_SYSLIMITS_H
+#define _PFK_SYSLIMITS_H
+#include
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+#define MAXSYMLINKS 8
+#endif
diff --git a/module/include/compat/sys/timeout.h b/module/include/compat/sys/timeout.h
new file mode 100644
index 0000000..cace291
--- /dev/null
+++ b/module/include/compat/sys/timeout.h
@@ -0,0 +1,17 @@
+/* PFLINUX compat: */
+#ifndef _PFK_TIMEOUT_H
+#define _PFK_TIMEOUT_H
+#include
+#include
+typedef void (timeout_fn)(void *);
+struct timeout {
+ struct timer_list timer;
+ struct work_struct work;
+ timeout_fn *fn;
+ void *arg;
+ unsigned long deadline_jif;
+ int period_ms;
+ int pending;
+ int running;
+};
+#endif
diff --git a/module/include/compat/sys/tree.h b/module/include/compat/sys/tree.h
new file mode 100644
index 0000000..5ef8777
--- /dev/null
+++ b/module/include/compat/sys/tree.h
@@ -0,0 +1,1004 @@
+/* $OpenBSD: tree.h,v 1.31 2023/03/08 04:43:09 guenther Exp $ */
+/*
+ * Copyright 2002 Niels Provos
+ * 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.
+ * 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 ``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 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.
+ */
+
+#ifndef _SYS_TREE_H_
+#define _SYS_TREE_H_
+
+#include
+
+/*
+ * This file defines data structures for different types of trees:
+ * splay trees and red-black trees.
+ *
+ * A splay tree is a self-organizing data structure. Every operation
+ * on the tree causes a splay to happen. The splay moves the requested
+ * node to the root of the tree and partly rebalances it.
+ *
+ * This has the benefit that request locality causes faster lookups as
+ * the requested nodes move to the top of the tree. On the other hand,
+ * every lookup causes memory writes.
+ *
+ * The Balance Theorem bounds the total access time for m operations
+ * and n inserts on an initially empty tree as O((m + n)lg n). The
+ * amortized cost for a sequence of m accesses to a splay tree is O(lg n);
+ *
+ * A red-black tree is a binary search tree with the node color as an
+ * extra attribute. It fulfills a set of conditions:
+ * - every search path from the root to a leaf consists of the
+ * same number of black nodes,
+ * - each red node (except for the root) has a black parent,
+ * - each leaf node is black.
+ *
+ * Every operation on a red-black tree is bounded as O(lg n).
+ * The maximum height of a red-black tree is 2lg (n+1).
+ */
+
+#define SPLAY_HEAD(name, type) \
+struct name { \
+ struct type *sph_root; /* root of the tree */ \
+}
+
+#define SPLAY_INITIALIZER(root) \
+ { NULL }
+
+#define SPLAY_INIT(root) do { \
+ (root)->sph_root = NULL; \
+} while (0)
+
+#define SPLAY_ENTRY(type) \
+struct { \
+ struct type *spe_left; /* left element */ \
+ struct type *spe_right; /* right element */ \
+}
+
+#define SPLAY_LEFT(elm, field) (elm)->field.spe_left
+#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right
+#define SPLAY_ROOT(head) (head)->sph_root
+#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL)
+
+/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */
+#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \
+ SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \
+ SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
+ (head)->sph_root = tmp; \
+} while (0)
+
+#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \
+ SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \
+ SPLAY_LEFT(tmp, field) = (head)->sph_root; \
+ (head)->sph_root = tmp; \
+} while (0)
+
+#define SPLAY_LINKLEFT(head, tmp, field) do { \
+ SPLAY_LEFT(tmp, field) = (head)->sph_root; \
+ tmp = (head)->sph_root; \
+ (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \
+} while (0)
+
+#define SPLAY_LINKRIGHT(head, tmp, field) do { \
+ SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
+ tmp = (head)->sph_root; \
+ (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \
+} while (0)
+
+#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \
+ SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \
+ SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\
+ SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \
+ SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \
+} while (0)
+
+/* Generates prototypes and inline functions */
+
+#define SPLAY_PROTOTYPE(name, type, field, cmp) \
+void name##_SPLAY(struct name *, struct type *); \
+void name##_SPLAY_MINMAX(struct name *, int); \
+struct type *name##_SPLAY_INSERT(struct name *, struct type *); \
+struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \
+ \
+/* Finds the node with the same key as elm */ \
+static __unused __inline struct type * \
+name##_SPLAY_FIND(struct name *head, struct type *elm) \
+{ \
+ if (SPLAY_EMPTY(head)) \
+ return(NULL); \
+ name##_SPLAY(head, elm); \
+ if ((cmp)(elm, (head)->sph_root) == 0) \
+ return (head->sph_root); \
+ return (NULL); \
+} \
+ \
+static __unused __inline struct type * \
+name##_SPLAY_NEXT(struct name *head, struct type *elm) \
+{ \
+ name##_SPLAY(head, elm); \
+ if (SPLAY_RIGHT(elm, field) != NULL) { \
+ elm = SPLAY_RIGHT(elm, field); \
+ while (SPLAY_LEFT(elm, field) != NULL) { \
+ elm = SPLAY_LEFT(elm, field); \
+ } \
+ } else \
+ elm = NULL; \
+ return (elm); \
+} \
+ \
+static __unused __inline struct type * \
+name##_SPLAY_MIN_MAX(struct name *head, int val) \
+{ \
+ name##_SPLAY_MINMAX(head, val); \
+ return (SPLAY_ROOT(head)); \
+}
+
+/* Main splay operation.
+ * Moves node close to the key of elm to top
+ */
+#define SPLAY_GENERATE(name, type, field, cmp) \
+struct type * \
+name##_SPLAY_INSERT(struct name *head, struct type *elm) \
+{ \
+ if (SPLAY_EMPTY(head)) { \
+ SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \
+ } else { \
+ int __comp; \
+ name##_SPLAY(head, elm); \
+ __comp = (cmp)(elm, (head)->sph_root); \
+ if(__comp < 0) { \
+ SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\
+ SPLAY_RIGHT(elm, field) = (head)->sph_root; \
+ SPLAY_LEFT((head)->sph_root, field) = NULL; \
+ } else if (__comp > 0) { \
+ SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\
+ SPLAY_LEFT(elm, field) = (head)->sph_root; \
+ SPLAY_RIGHT((head)->sph_root, field) = NULL; \
+ } else \
+ return ((head)->sph_root); \
+ } \
+ (head)->sph_root = (elm); \
+ return (NULL); \
+} \
+ \
+struct type * \
+name##_SPLAY_REMOVE(struct name *head, struct type *elm) \
+{ \
+ struct type *__tmp; \
+ if (SPLAY_EMPTY(head)) \
+ return (NULL); \
+ name##_SPLAY(head, elm); \
+ if ((cmp)(elm, (head)->sph_root) == 0) { \
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \
+ (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\
+ } else { \
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \
+ (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\
+ name##_SPLAY(head, elm); \
+ SPLAY_RIGHT((head)->sph_root, field) = __tmp; \
+ } \
+ return (elm); \
+ } \
+ return (NULL); \
+} \
+ \
+void \
+name##_SPLAY(struct name *head, struct type *elm) \
+{ \
+ struct type __node, *__left, *__right, *__tmp; \
+ int __comp; \
+\
+ SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+ __left = __right = &__node; \
+\
+ while ((__comp = (cmp)(elm, (head)->sph_root))) { \
+ if (__comp < 0) { \
+ __tmp = SPLAY_LEFT((head)->sph_root, field); \
+ if (__tmp == NULL) \
+ break; \
+ if ((cmp)(elm, __tmp) < 0){ \
+ SPLAY_ROTATE_RIGHT(head, __tmp, field); \
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+ break; \
+ } \
+ SPLAY_LINKLEFT(head, __right, field); \
+ } else if (__comp > 0) { \
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \
+ if (__tmp == NULL) \
+ break; \
+ if ((cmp)(elm, __tmp) > 0){ \
+ SPLAY_ROTATE_LEFT(head, __tmp, field); \
+ if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+ break; \
+ } \
+ SPLAY_LINKRIGHT(head, __left, field); \
+ } \
+ } \
+ SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
+} \
+ \
+/* Splay with either the minimum or the maximum element \
+ * Used to find minimum or maximum element in tree. \
+ */ \
+void name##_SPLAY_MINMAX(struct name *head, int __comp) \
+{ \
+ struct type __node, *__left, *__right, *__tmp; \
+\
+ SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
+ __left = __right = &__node; \
+\
+ while (1) { \
+ if (__comp < 0) { \
+ __tmp = SPLAY_LEFT((head)->sph_root, field); \
+ if (__tmp == NULL) \
+ break; \
+ if (__comp < 0){ \
+ SPLAY_ROTATE_RIGHT(head, __tmp, field); \
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
+ break; \
+ } \
+ SPLAY_LINKLEFT(head, __right, field); \
+ } else if (__comp > 0) { \
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \
+ if (__tmp == NULL) \
+ break; \
+ if (__comp > 0) { \
+ SPLAY_ROTATE_LEFT(head, __tmp, field); \
+ if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
+ break; \
+ } \
+ SPLAY_LINKRIGHT(head, __left, field); \
+ } \
+ } \
+ SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
+}
+
+#define SPLAY_NEGINF -1
+#define SPLAY_INF 1
+
+#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y)
+#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y)
+#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y)
+#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y)
+#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \
+ : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
+#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \
+ : name##_SPLAY_MIN_MAX(x, SPLAY_INF))
+
+#define SPLAY_FOREACH(x, name, head) \
+ for ((x) = SPLAY_MIN(name, head); \
+ (x) != NULL; \
+ (x) = SPLAY_NEXT(name, head, x))
+
+/* Macros that define a red-black tree */
+#define RB_HEAD(name, type) \
+struct name { \
+ struct type *rbh_root; /* root of the tree */ \
+}
+
+#define RB_INITIALIZER(root) \
+ { NULL }
+
+#define RB_INIT(root) do { \
+ (root)->rbh_root = NULL; \
+} while (0)
+
+#define RB_BLACK 0
+#define RB_RED 1
+#define RB_ENTRY(type) \
+struct { \
+ struct type *rbe_left; /* left element */ \
+ struct type *rbe_right; /* right element */ \
+ struct type *rbe_parent; /* parent element */ \
+ int rbe_color; /* node color */ \
+}
+
+#define RB_LEFT(elm, field) (elm)->field.rbe_left
+#define RB_RIGHT(elm, field) (elm)->field.rbe_right
+#define RB_PARENT(elm, field) (elm)->field.rbe_parent
+#define RB_COLOR(elm, field) (elm)->field.rbe_color
+#define RB_ROOT(head) (head)->rbh_root
+#define RB_EMPTY(head) (RB_ROOT(head) == NULL)
+
+#define RB_SET(elm, parent, field) do { \
+ RB_PARENT(elm, field) = parent; \
+ RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \
+ RB_COLOR(elm, field) = RB_RED; \
+} while (0)
+
+#define RB_SET_BLACKRED(black, red, field) do { \
+ RB_COLOR(black, field) = RB_BLACK; \
+ RB_COLOR(red, field) = RB_RED; \
+} while (0)
+
+#ifndef RB_AUGMENT
+#define RB_AUGMENT(x) do {} while (0)
+#endif
+
+#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \
+ (tmp) = RB_RIGHT(elm, field); \
+ if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field))) { \
+ RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \
+ } \
+ RB_AUGMENT(elm); \
+ if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \
+ if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
+ RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
+ else \
+ RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
+ } else \
+ (head)->rbh_root = (tmp); \
+ RB_LEFT(tmp, field) = (elm); \
+ RB_PARENT(elm, field) = (tmp); \
+ RB_AUGMENT(tmp); \
+ if ((RB_PARENT(tmp, field))) \
+ RB_AUGMENT(RB_PARENT(tmp, field)); \
+} while (0)
+
+#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \
+ (tmp) = RB_LEFT(elm, field); \
+ if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field))) { \
+ RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \
+ } \
+ RB_AUGMENT(elm); \
+ if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field))) { \
+ if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
+ RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
+ else \
+ RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
+ } else \
+ (head)->rbh_root = (tmp); \
+ RB_RIGHT(tmp, field) = (elm); \
+ RB_PARENT(elm, field) = (tmp); \
+ RB_AUGMENT(tmp); \
+ if ((RB_PARENT(tmp, field))) \
+ RB_AUGMENT(RB_PARENT(tmp, field)); \
+} while (0)
+
+/* Generates prototypes and inline functions */
+#define RB_PROTOTYPE(name, type, field, cmp) \
+ RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
+#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \
+ RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __attribute__((__unused__)) static)
+#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \
+attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \
+attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\
+attr struct type *name##_RB_REMOVE(struct name *, struct type *); \
+attr struct type *name##_RB_INSERT(struct name *, struct type *); \
+attr struct type *name##_RB_FIND(struct name *, struct type *); \
+attr struct type *name##_RB_NFIND(struct name *, struct type *); \
+attr struct type *name##_RB_NEXT(struct type *); \
+attr struct type *name##_RB_PREV(struct type *); \
+attr struct type *name##_RB_MINMAX(struct name *, int); \
+ \
+
+/* Main rb operation.
+ * Moves node close to the key of elm to top
+ */
+#define RB_GENERATE(name, type, field, cmp) \
+ RB_GENERATE_INTERNAL(name, type, field, cmp,)
+#define RB_GENERATE_STATIC(name, type, field, cmp) \
+ RB_GENERATE_INTERNAL(name, type, field, cmp, __attribute__((__unused__)) static)
+#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \
+attr void \
+name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \
+{ \
+ struct type *parent, *gparent, *tmp; \
+ while ((parent = RB_PARENT(elm, field)) && \
+ RB_COLOR(parent, field) == RB_RED) { \
+ gparent = RB_PARENT(parent, field); \
+ if (parent == RB_LEFT(gparent, field)) { \
+ tmp = RB_RIGHT(gparent, field); \
+ if (tmp && RB_COLOR(tmp, field) == RB_RED) { \
+ RB_COLOR(tmp, field) = RB_BLACK; \
+ RB_SET_BLACKRED(parent, gparent, field);\
+ elm = gparent; \
+ continue; \
+ } \
+ if (RB_RIGHT(parent, field) == elm) { \
+ RB_ROTATE_LEFT(head, parent, tmp, field);\
+ tmp = parent; \
+ parent = elm; \
+ elm = tmp; \
+ } \
+ RB_SET_BLACKRED(parent, gparent, field); \
+ RB_ROTATE_RIGHT(head, gparent, tmp, field); \
+ } else { \
+ tmp = RB_LEFT(gparent, field); \
+ if (tmp && RB_COLOR(tmp, field) == RB_RED) { \
+ RB_COLOR(tmp, field) = RB_BLACK; \
+ RB_SET_BLACKRED(parent, gparent, field);\
+ elm = gparent; \
+ continue; \
+ } \
+ if (RB_LEFT(parent, field) == elm) { \
+ RB_ROTATE_RIGHT(head, parent, tmp, field);\
+ tmp = parent; \
+ parent = elm; \
+ elm = tmp; \
+ } \
+ RB_SET_BLACKRED(parent, gparent, field); \
+ RB_ROTATE_LEFT(head, gparent, tmp, field); \
+ } \
+ } \
+ RB_COLOR(head->rbh_root, field) = RB_BLACK; \
+} \
+ \
+attr void \
+name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \
+{ \
+ struct type *tmp; \
+ while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \
+ elm != RB_ROOT(head)) { \
+ if (RB_LEFT(parent, field) == elm) { \
+ tmp = RB_RIGHT(parent, field); \
+ if (RB_COLOR(tmp, field) == RB_RED) { \
+ RB_SET_BLACKRED(tmp, parent, field); \
+ RB_ROTATE_LEFT(head, parent, tmp, field);\
+ tmp = RB_RIGHT(parent, field); \
+ } \
+ if ((RB_LEFT(tmp, field) == NULL || \
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
+ (RB_RIGHT(tmp, field) == NULL || \
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
+ RB_COLOR(tmp, field) = RB_RED; \
+ elm = parent; \
+ parent = RB_PARENT(elm, field); \
+ } else { \
+ if (RB_RIGHT(tmp, field) == NULL || \
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\
+ struct type *oleft; \
+ if ((oleft = RB_LEFT(tmp, field)))\
+ RB_COLOR(oleft, field) = RB_BLACK;\
+ RB_COLOR(tmp, field) = RB_RED; \
+ RB_ROTATE_RIGHT(head, tmp, oleft, field);\
+ tmp = RB_RIGHT(parent, field); \
+ } \
+ RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
+ RB_COLOR(parent, field) = RB_BLACK; \
+ if (RB_RIGHT(tmp, field)) \
+ RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\
+ RB_ROTATE_LEFT(head, parent, tmp, field);\
+ elm = RB_ROOT(head); \
+ break; \
+ } \
+ } else { \
+ tmp = RB_LEFT(parent, field); \
+ if (RB_COLOR(tmp, field) == RB_RED) { \
+ RB_SET_BLACKRED(tmp, parent, field); \
+ RB_ROTATE_RIGHT(head, parent, tmp, field);\
+ tmp = RB_LEFT(parent, field); \
+ } \
+ if ((RB_LEFT(tmp, field) == NULL || \
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
+ (RB_RIGHT(tmp, field) == NULL || \
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
+ RB_COLOR(tmp, field) = RB_RED; \
+ elm = parent; \
+ parent = RB_PARENT(elm, field); \
+ } else { \
+ if (RB_LEFT(tmp, field) == NULL || \
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\
+ struct type *oright; \
+ if ((oright = RB_RIGHT(tmp, field)))\
+ RB_COLOR(oright, field) = RB_BLACK;\
+ RB_COLOR(tmp, field) = RB_RED; \
+ RB_ROTATE_LEFT(head, tmp, oright, field);\
+ tmp = RB_LEFT(parent, field); \
+ } \
+ RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
+ RB_COLOR(parent, field) = RB_BLACK; \
+ if (RB_LEFT(tmp, field)) \
+ RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\
+ RB_ROTATE_RIGHT(head, parent, tmp, field);\
+ elm = RB_ROOT(head); \
+ break; \
+ } \
+ } \
+ } \
+ if (elm) \
+ RB_COLOR(elm, field) = RB_BLACK; \
+} \
+ \
+attr struct type * \
+name##_RB_REMOVE(struct name *head, struct type *elm) \
+{ \
+ struct type *child, *parent, *old = elm; \
+ int color; \
+ if (RB_LEFT(elm, field) == NULL) \
+ child = RB_RIGHT(elm, field); \
+ else if (RB_RIGHT(elm, field) == NULL) \
+ child = RB_LEFT(elm, field); \
+ else { \
+ struct type *left; \
+ elm = RB_RIGHT(elm, field); \
+ while ((left = RB_LEFT(elm, field))) \
+ elm = left; \
+ child = RB_RIGHT(elm, field); \
+ parent = RB_PARENT(elm, field); \
+ color = RB_COLOR(elm, field); \
+ if (child) \
+ RB_PARENT(child, field) = parent; \
+ if (parent) { \
+ if (RB_LEFT(parent, field) == elm) \
+ RB_LEFT(parent, field) = child; \
+ else \
+ RB_RIGHT(parent, field) = child; \
+ RB_AUGMENT(parent); \
+ } else \
+ RB_ROOT(head) = child; \
+ if (RB_PARENT(elm, field) == old) \
+ parent = elm; \
+ (elm)->field = (old)->field; \
+ if (RB_PARENT(old, field)) { \
+ if (RB_LEFT(RB_PARENT(old, field), field) == old)\
+ RB_LEFT(RB_PARENT(old, field), field) = elm;\
+ else \
+ RB_RIGHT(RB_PARENT(old, field), field) = elm;\
+ RB_AUGMENT(RB_PARENT(old, field)); \
+ } else \
+ RB_ROOT(head) = elm; \
+ RB_PARENT(RB_LEFT(old, field), field) = elm; \
+ if (RB_RIGHT(old, field)) \
+ RB_PARENT(RB_RIGHT(old, field), field) = elm; \
+ if (parent) { \
+ left = parent; \
+ do { \
+ RB_AUGMENT(left); \
+ } while ((left = RB_PARENT(left, field))); \
+ } \
+ goto color; \
+ } \
+ parent = RB_PARENT(elm, field); \
+ color = RB_COLOR(elm, field); \
+ if (child) \
+ RB_PARENT(child, field) = parent; \
+ if (parent) { \
+ if (RB_LEFT(parent, field) == elm) \
+ RB_LEFT(parent, field) = child; \
+ else \
+ RB_RIGHT(parent, field) = child; \
+ RB_AUGMENT(parent); \
+ } else \
+ RB_ROOT(head) = child; \
+color: \
+ if (color == RB_BLACK) \
+ name##_RB_REMOVE_COLOR(head, parent, child); \
+ return (old); \
+} \
+ \
+/* Inserts a node into the RB tree */ \
+attr struct type * \
+name##_RB_INSERT(struct name *head, struct type *elm) \
+{ \
+ struct type *tmp; \
+ struct type *parent = NULL; \
+ int comp = 0; \
+ tmp = RB_ROOT(head); \
+ while (tmp) { \
+ parent = tmp; \
+ comp = (cmp)(elm, parent); \
+ if (comp < 0) \
+ tmp = RB_LEFT(tmp, field); \
+ else if (comp > 0) \
+ tmp = RB_RIGHT(tmp, field); \
+ else \
+ return (tmp); \
+ } \
+ RB_SET(elm, parent, field); \
+ if (parent != NULL) { \
+ if (comp < 0) \
+ RB_LEFT(parent, field) = elm; \
+ else \
+ RB_RIGHT(parent, field) = elm; \
+ RB_AUGMENT(parent); \
+ } else \
+ RB_ROOT(head) = elm; \
+ name##_RB_INSERT_COLOR(head, elm); \
+ return (NULL); \
+} \
+ \
+/* Finds the node with the same key as elm */ \
+attr struct type * \
+name##_RB_FIND(struct name *head, struct type *elm) \
+{ \
+ struct type *tmp = RB_ROOT(head); \
+ int comp; \
+ while (tmp) { \
+ comp = cmp(elm, tmp); \
+ if (comp < 0) \
+ tmp = RB_LEFT(tmp, field); \
+ else if (comp > 0) \
+ tmp = RB_RIGHT(tmp, field); \
+ else \
+ return (tmp); \
+ } \
+ return (NULL); \
+} \
+ \
+/* Finds the first node greater than or equal to the search key */ \
+attr struct type * \
+name##_RB_NFIND(struct name *head, struct type *elm) \
+{ \
+ struct type *tmp = RB_ROOT(head); \
+ struct type *res = NULL; \
+ int comp; \
+ while (tmp) { \
+ comp = cmp(elm, tmp); \
+ if (comp < 0) { \
+ res = tmp; \
+ tmp = RB_LEFT(tmp, field); \
+ } \
+ else if (comp > 0) \
+ tmp = RB_RIGHT(tmp, field); \
+ else \
+ return (tmp); \
+ } \
+ return (res); \
+} \
+ \
+attr struct type * \
+name##_RB_NEXT(struct type *elm) \
+{ \
+ if (RB_RIGHT(elm, field)) { \
+ elm = RB_RIGHT(elm, field); \
+ while (RB_LEFT(elm, field)) \
+ elm = RB_LEFT(elm, field); \
+ } else { \
+ if (RB_PARENT(elm, field) && \
+ (elm == RB_LEFT(RB_PARENT(elm, field), field))) \
+ elm = RB_PARENT(elm, field); \
+ else { \
+ while (RB_PARENT(elm, field) && \
+ (elm == RB_RIGHT(RB_PARENT(elm, field), field)))\
+ elm = RB_PARENT(elm, field); \
+ elm = RB_PARENT(elm, field); \
+ } \
+ } \
+ return (elm); \
+} \
+ \
+attr struct type * \
+name##_RB_PREV(struct type *elm) \
+{ \
+ if (RB_LEFT(elm, field)) { \
+ elm = RB_LEFT(elm, field); \
+ while (RB_RIGHT(elm, field)) \
+ elm = RB_RIGHT(elm, field); \
+ } else { \
+ if (RB_PARENT(elm, field) && \
+ (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \
+ elm = RB_PARENT(elm, field); \
+ else { \
+ while (RB_PARENT(elm, field) && \
+ (elm == RB_LEFT(RB_PARENT(elm, field), field)))\
+ elm = RB_PARENT(elm, field); \
+ elm = RB_PARENT(elm, field); \
+ } \
+ } \
+ return (elm); \
+} \
+ \
+attr struct type * \
+name##_RB_MINMAX(struct name *head, int val) \
+{ \
+ struct type *tmp = RB_ROOT(head); \
+ struct type *parent = NULL; \
+ while (tmp) { \
+ parent = tmp; \
+ if (val < 0) \
+ tmp = RB_LEFT(tmp, field); \
+ else \
+ tmp = RB_RIGHT(tmp, field); \
+ } \
+ return (parent); \
+}
+
+#define RB_NEGINF -1
+#define RB_INF 1
+
+#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y)
+#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y)
+#define RB_FIND(name, x, y) name##_RB_FIND(x, y)
+#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y)
+#define RB_NEXT(name, x, y) name##_RB_NEXT(y)
+#define RB_PREV(name, x, y) name##_RB_PREV(y)
+#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF)
+#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF)
+
+#define RB_FOREACH(x, name, head) \
+ for ((x) = RB_MIN(name, head); \
+ (x) != NULL; \
+ (x) = name##_RB_NEXT(x))
+
+#define RB_FOREACH_SAFE(x, name, head, y) \
+ for ((x) = RB_MIN(name, head); \
+ ((x) != NULL) && ((y) = name##_RB_NEXT(x), 1); \
+ (x) = (y))
+
+#define RB_FOREACH_REVERSE(x, name, head) \
+ for ((x) = RB_MAX(name, head); \
+ (x) != NULL; \
+ (x) = name##_RB_PREV(x))
+
+#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \
+ for ((x) = RB_MAX(name, head); \
+ ((x) != NULL) && ((y) = name##_RB_PREV(x), 1); \
+ (x) = (y))
+
+
+/*
+ * Copyright (c) 2016 David Gwynne
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+struct rb_type {
+ int (*t_compare)(const void *, const void *);
+ void (*t_augment)(void *);
+ unsigned int t_offset; /* offset of rb_entry in type */
+};
+
+struct rb_tree {
+ struct rb_entry *rbt_root;
+};
+
+struct rb_entry {
+ struct rb_entry *rbt_parent;
+ struct rb_entry *rbt_left;
+ struct rb_entry *rbt_right;
+ unsigned int rbt_color;
+};
+
+#define RBT_HEAD(_name, _type) \
+struct _name { \
+ struct rb_tree rbh_root; \
+}
+
+#define RBT_ENTRY(_type) struct rb_entry
+
+static inline void
+_rb_init(struct rb_tree *rbt)
+{
+ rbt->rbt_root = NULL;
+}
+
+static inline int
+_rb_empty(struct rb_tree *rbt)
+{
+ return (rbt->rbt_root == NULL);
+}
+
+void *_rb_insert(const struct rb_type *, struct rb_tree *, void *);
+void *_rb_remove(const struct rb_type *, struct rb_tree *, void *);
+void *_rb_find(const struct rb_type *, struct rb_tree *, const void *);
+void *_rb_nfind(const struct rb_type *, struct rb_tree *, const void *);
+void *_rb_root(const struct rb_type *, struct rb_tree *);
+void *_rb_min(const struct rb_type *, struct rb_tree *);
+void *_rb_max(const struct rb_type *, struct rb_tree *);
+void *_rb_next(const struct rb_type *, void *);
+void *_rb_prev(const struct rb_type *, void *);
+void *_rb_left(const struct rb_type *, void *);
+void *_rb_right(const struct rb_type *, void *);
+void *_rb_parent(const struct rb_type *, void *);
+void _rb_set_left(const struct rb_type *, void *, void *);
+void _rb_set_right(const struct rb_type *, void *, void *);
+void _rb_set_parent(const struct rb_type *, void *, void *);
+void _rb_poison(const struct rb_type *, void *, unsigned long);
+int _rb_check(const struct rb_type *, void *, unsigned long);
+
+#define RBT_INITIALIZER(_head) { { NULL } }
+
+#define RBT_PROTOTYPE(_name, _type, _field, _cmp) \
+extern const struct rb_type *const _name##_RBT_TYPE; \
+ \
+__unused static inline void \
+_name##_RBT_INIT(struct _name *head) \
+{ \
+ _rb_init(&head->rbh_root); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_INSERT(struct _name *head, struct _type *elm) \
+{ \
+ return _rb_insert(_name##_RBT_TYPE, &head->rbh_root, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_REMOVE(struct _name *head, struct _type *elm) \
+{ \
+ return _rb_remove(_name##_RBT_TYPE, &head->rbh_root, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_FIND(struct _name *head, const struct _type *key) \
+{ \
+ return _rb_find(_name##_RBT_TYPE, &head->rbh_root, key); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_NFIND(struct _name *head, const struct _type *key) \
+{ \
+ return _rb_nfind(_name##_RBT_TYPE, &head->rbh_root, key); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_ROOT(struct _name *head) \
+{ \
+ return _rb_root(_name##_RBT_TYPE, &head->rbh_root); \
+} \
+ \
+__unused static inline int \
+_name##_RBT_EMPTY(struct _name *head) \
+{ \
+ return _rb_empty(&head->rbh_root); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_MIN(struct _name *head) \
+{ \
+ return _rb_min(_name##_RBT_TYPE, &head->rbh_root); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_MAX(struct _name *head) \
+{ \
+ return _rb_max(_name##_RBT_TYPE, &head->rbh_root); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_NEXT(struct _type *elm) \
+{ \
+ return _rb_next(_name##_RBT_TYPE, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_PREV(struct _type *elm) \
+{ \
+ return _rb_prev(_name##_RBT_TYPE, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_LEFT(struct _type *elm) \
+{ \
+ return _rb_left(_name##_RBT_TYPE, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_RIGHT(struct _type *elm) \
+{ \
+ return _rb_right(_name##_RBT_TYPE, elm); \
+} \
+ \
+__unused static inline struct _type * \
+_name##_RBT_PARENT(struct _type *elm) \
+{ \
+ return _rb_parent(_name##_RBT_TYPE, elm); \
+} \
+ \
+__unused static inline void \
+_name##_RBT_SET_LEFT(struct _type *elm, struct _type *left) \
+{ \
+ _rb_set_left(_name##_RBT_TYPE, elm, left); \
+} \
+ \
+__unused static inline void \
+_name##_RBT_SET_RIGHT(struct _type *elm, struct _type *right) \
+{ \
+ _rb_set_right(_name##_RBT_TYPE, elm, right); \
+} \
+ \
+__unused static inline void \
+_name##_RBT_SET_PARENT(struct _type *elm, struct _type *parent) \
+{ \
+ _rb_set_parent(_name##_RBT_TYPE, elm, parent); \
+} \
+ \
+__unused static inline void \
+_name##_RBT_POISON(struct _type *elm, unsigned long poison) \
+{ \
+ _rb_poison(_name##_RBT_TYPE, elm, poison); \
+} \
+ \
+__unused static inline int \
+_name##_RBT_CHECK(struct _type *elm, unsigned long poison) \
+{ \
+ return _rb_check(_name##_RBT_TYPE, elm, poison); \
+}
+
+#define RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, _aug) \
+static int \
+_name##_RBT_COMPARE(const void *lptr, const void *rptr) \
+{ \
+ const struct _type *l = lptr, *r = rptr; \
+ return _cmp(l, r); \
+} \
+static const struct rb_type _name##_RBT_INFO = { \
+ _name##_RBT_COMPARE, \
+ _aug, \
+ offsetof(struct _type, _field), \
+}; \
+const struct rb_type *const _name##_RBT_TYPE = &_name##_RBT_INFO
+
+#define RBT_GENERATE_AUGMENT(_name, _type, _field, _cmp, _aug) \
+static void \
+_name##_RBT_AUGMENT(void *ptr) \
+{ \
+ struct _type *p = ptr; \
+ return _aug(p); \
+} \
+RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, _name##_RBT_AUGMENT)
+
+#define RBT_GENERATE(_name, _type, _field, _cmp) \
+ RBT_GENERATE_INTERNAL(_name, _type, _field, _cmp, NULL)
+
+#define RBT_INIT(_name, _head) _name##_RBT_INIT(_head)
+#define RBT_INSERT(_name, _head, _elm) _name##_RBT_INSERT(_head, _elm)
+#define RBT_REMOVE(_name, _head, _elm) _name##_RBT_REMOVE(_head, _elm)
+#define RBT_FIND(_name, _head, _key) _name##_RBT_FIND(_head, _key)
+#define RBT_NFIND(_name, _head, _key) _name##_RBT_NFIND(_head, _key)
+#define RBT_ROOT(_name, _head) _name##_RBT_ROOT(_head)
+#define RBT_EMPTY(_name, _head) _name##_RBT_EMPTY(_head)
+#define RBT_MIN(_name, _head) _name##_RBT_MIN(_head)
+#define RBT_MAX(_name, _head) _name##_RBT_MAX(_head)
+#define RBT_NEXT(_name, _elm) _name##_RBT_NEXT(_elm)
+#define RBT_PREV(_name, _elm) _name##_RBT_PREV(_elm)
+#define RBT_LEFT(_name, _elm) _name##_RBT_LEFT(_elm)
+#define RBT_RIGHT(_name, _elm) _name##_RBT_RIGHT(_elm)
+#define RBT_PARENT(_name, _elm) _name##_RBT_PARENT(_elm)
+#define RBT_SET_LEFT(_name, _elm, _l) _name##_RBT_SET_LEFT(_elm, _l)
+#define RBT_SET_RIGHT(_name, _elm, _r) _name##_RBT_SET_RIGHT(_elm, _r)
+#define RBT_SET_PARENT(_name, _elm, _p) _name##_RBT_SET_PARENT(_elm, _p)
+#define RBT_POISON(_name, _elm, _p) _name##_RBT_POISON(_elm, _p)
+#define RBT_CHECK(_name, _elm, _p) _name##_RBT_CHECK(_elm, _p)
+
+#define RBT_FOREACH(_e, _name, _head) \
+ for ((_e) = RBT_MIN(_name, (_head)); \
+ (_e) != NULL; \
+ (_e) = RBT_NEXT(_name, (_e)))
+
+#define RBT_FOREACH_SAFE(_e, _name, _head, _n) \
+ for ((_e) = RBT_MIN(_name, (_head)); \
+ (_e) != NULL && ((_n) = RBT_NEXT(_name, (_e)), 1); \
+ (_e) = (_n))
+
+#define RBT_FOREACH_REVERSE(_e, _name, _head) \
+ for ((_e) = RBT_MAX(_name, (_head)); \
+ (_e) != NULL; \
+ (_e) = RBT_PREV(_name, (_e)))
+
+#define RBT_FOREACH_REVERSE_SAFE(_e, _name, _head, _n) \
+ for ((_e) = RBT_MAX(_name, (_head)); \
+ (_e) != NULL && ((_n) = RBT_PREV(_name, (_e)), 1); \
+ (_e) = (_n))
+
+#endif /* _SYS_TREE_H_ */
diff --git a/module/include/compat/sys/types.h b/module/include/compat/sys/types.h
new file mode 100644
index 0000000..335d508
--- /dev/null
+++ b/module/include/compat/sys/types.h
@@ -0,0 +1,6 @@
+/* PFLINUX compat: */
+#ifndef _PFK_SYS_TYPES_H
+#define _PFK_SYS_TYPES_H
+#include
+typedef unsigned long u_long;
+#endif
diff --git a/module/include/net/pfvar.h b/module/include/net/pfvar.h
new file mode 100644
index 0000000..750fe0e
--- /dev/null
+++ b/module/include/net/pfvar.h
@@ -0,0 +1,2036 @@
+/* $OpenBSD: pfvar.h,v 1.548 2026/02/05 03:26:00 dlg Exp $ */
+
+/*
+ * Copyright (c) 2001 Daniel Hartmeier
+ * Copyright (c) 2002 - 2013 Henning Brauer
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifndef _NET_PFVAR_H_
+#define _NET_PFVAR_H_
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+
+struct ip;
+struct ip6_hdr;
+struct mbuf_list;
+
+#define PF_TCPS_PROXY_SRC ((TCP_NSTATES)+0)
+#define PF_TCPS_PROXY_DST ((TCP_NSTATES)+1)
+
+#define PF_MD5_DIGEST_LENGTH 16
+#ifdef MD5_DIGEST_LENGTH
+#if PF_MD5_DIGEST_LENGTH != MD5_DIGEST_LENGTH
+#error md5 digest length mismatch
+#endif
+#endif
+
+typedef struct refcnt pf_refcnt_t;
+#define PF_REF_INIT(_x) refcnt_init(&(_x))
+#define PF_REF_TAKE(_x) refcnt_take(&(_x))
+#define PF_REF_RELE(_x) refcnt_rele(&(_x))
+
+enum { PF_INOUT, PF_IN, PF_OUT, PF_FWD };
+enum { PF_PASS, PF_DROP, PF_SCRUB, PF_NOSCRUB, PF_NAT, PF_NONAT,
+ PF_BINAT, PF_NOBINAT, PF_RDR, PF_NORDR, PF_SYNPROXY_DROP, PF_DEFER,
+ PF_MATCH, PF_DIVERT, PF_RT, PF_AFRT };
+enum { PF_TRANS_RULESET, PF_TRANS_TABLE };
+enum { PF_OP_NONE, PF_OP_IRG, PF_OP_EQ, PF_OP_NE, PF_OP_LT,
+ PF_OP_LE, PF_OP_GT, PF_OP_GE, PF_OP_XRG, PF_OP_RRG };
+enum { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL,
+ PF_CHANGE_ADD_BEFORE, PF_CHANGE_ADD_AFTER,
+ PF_CHANGE_REMOVE, PF_CHANGE_GET_TICKET };
+enum { PF_GET_NONE, PF_GET_CLR_CNTR };
+enum { PF_SK_WIRE, PF_SK_STACK, PF_SK_BOTH };
+enum { PF_PEER_SRC, PF_PEER_DST, PF_PEER_BOTH };
+
+/*
+ * Note about PFTM_*: real indices into pf_rule.timeout[] come before
+ * PFTM_MAX, special cases afterwards. See pf_state_expires().
+ */
+enum { PFTM_TCP_FIRST_PACKET, PFTM_TCP_OPENING, PFTM_TCP_ESTABLISHED,
+ PFTM_TCP_CLOSING, PFTM_TCP_FIN_WAIT, PFTM_TCP_CLOSED,
+ PFTM_UDP_FIRST_PACKET, PFTM_UDP_SINGLE, PFTM_UDP_MULTIPLE,
+ PFTM_ICMP_FIRST_PACKET, PFTM_ICMP_ERROR_REPLY,
+ PFTM_OTHER_FIRST_PACKET, PFTM_OTHER_SINGLE,
+ PFTM_OTHER_MULTIPLE, PFTM_FRAG, PFTM_INTERVAL,
+ PFTM_ADAPTIVE_START, PFTM_ADAPTIVE_END, PFTM_SRC_NODE,
+ PFTM_TS_DIFF, PFTM_MAX, PFTM_PURGE, PFTM_UNLINKED };
+
+/* PFTM default values */
+#define PFTM_TCP_FIRST_PACKET_VAL 120 /* First TCP packet */
+#define PFTM_TCP_OPENING_VAL 30 /* No response yet */
+#define PFTM_TCP_ESTABLISHED_VAL 24*60*60/* Established */
+#define PFTM_TCP_CLOSING_VAL 15 * 60 /* Half closed */
+#define PFTM_TCP_FIN_WAIT_VAL 45 /* Got both FINs */
+#define PFTM_TCP_CLOSED_VAL 90 /* Got a RST */
+#define PFTM_UDP_FIRST_PACKET_VAL 60 /* First UDP packet */
+#define PFTM_UDP_SINGLE_VAL 30 /* Unidirectional */
+#define PFTM_UDP_MULTIPLE_VAL 60 /* Bidirectional */
+#define PFTM_ICMP_FIRST_PACKET_VAL 20 /* First ICMP packet */
+#define PFTM_ICMP_ERROR_REPLY_VAL 10 /* Got error response */
+#define PFTM_OTHER_FIRST_PACKET_VAL 60 /* First packet */
+#define PFTM_OTHER_SINGLE_VAL 30 /* Unidirectional */
+#define PFTM_OTHER_MULTIPLE_VAL 60 /* Bidirectional */
+#define PFTM_FRAG_VAL 60 /* Fragment expire */
+#define PFTM_INTERVAL_VAL 10 /* Expire interval */
+#define PFTM_SRC_NODE_VAL 0 /* Source tracking */
+#define PFTM_TS_DIFF_VAL 30 /* Allowed TS diff */
+
+/*
+ * For each connection (combination of proto,src,dst,af) the number
+ * of fragments is limited. Over the PFTM_FRAG interval the average
+ * rate must be less than PF_FRAG_STALE fragments per second.
+ * Otherwise older fragments are considered stale and are dropped.
+ */
+#define PF_FRAG_STALE 200
+
+/*
+ * Limit the length of the fragment queue traversal. Remember
+ * search entry points based on the fragment offset.
+ */
+#define PF_FRAG_ENTRY_POINTS 16
+
+/*
+ * The number of entries in the fragment queue must be limited
+ * to avoid DoS by linear searching. Instead of a global limit,
+ * use a limit per entry point. For large packets these sum up.
+ */
+#define PF_FRAG_ENTRY_LIMIT 64
+
+enum { PF_NOPFROUTE, PF_ROUTETO, PF_DUPTO, PF_REPLYTO };
+enum { PF_LIMIT_STATES, PF_LIMIT_SRC_NODES, PF_LIMIT_FRAGS,
+ PF_LIMIT_TABLES, PF_LIMIT_TABLE_ENTRIES, PF_LIMIT_PKTDELAY_PKTS,
+ PF_LIMIT_ANCHORS, PF_LIMIT_MAX };
+#define PF_POOL_IDMASK 0x0f
+enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM,
+ PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN, PF_POOL_LEASTSTATES };
+enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
+ PF_ADDR_TABLE, PF_ADDR_RTLABEL, PF_ADDR_URPFFAILED,
+ PF_ADDR_RANGE, PF_ADDR_NONE };
+#define PF_POOL_TYPEMASK 0x0f
+#define PF_POOL_STICKYADDR 0x20
+#define PF_WSCALE_FLAG 0x80
+#define PF_WSCALE_MASK 0x0f
+
+#define PF_POOL_DYNTYPE(_o) \
+ ((((_o) & PF_POOL_TYPEMASK) == PF_POOL_ROUNDROBIN) || \
+ (((_o) & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) || \
+ (((_o) & PF_POOL_TYPEMASK) == PF_POOL_RANDOM) || \
+ (((_o) & PF_POOL_TYPEMASK) == PF_POOL_SRCHASH))
+
+#define PF_LOG 0x01
+#define PF_LOG_ALL 0x02
+#define PF_LOG_USER 0x04
+#define PF_LOG_FORCE 0x08
+#define PF_LOG_MATCHES 0x10
+
+struct pf_addr {
+ union {
+ struct in_addr v4;
+ struct in6_addr v6;
+ u_int8_t addr8[16];
+ u_int16_t addr16[8];
+ u_int32_t addr32[4];
+ } pfa; /* 128-bit address */
+#define v4 pfa.v4
+#define v6 pfa.v6
+#define addr8 pfa.addr8
+#define addr16 pfa.addr16
+#define addr32 pfa.addr32
+};
+
+#define PF_TABLE_NAME_SIZE 32
+
+#define PFI_AFLAG_NETWORK 0x01
+#define PFI_AFLAG_BROADCAST 0x02
+#define PFI_AFLAG_PEER 0x04
+#define PFI_AFLAG_MODEMASK 0x07
+#define PFI_AFLAG_NOALIAS 0x08
+
+struct pf_addr_wrap {
+ union {
+ struct {
+ struct pf_addr addr;
+ struct pf_addr mask;
+ } a;
+ char ifname[IFNAMSIZ];
+ char tblname[PF_TABLE_NAME_SIZE];
+ char rtlabelname[RTLABEL_LEN];
+ u_int32_t rtlabel;
+ } v;
+ union {
+ struct pfi_dynaddr *dyn;
+ struct pfr_ktable *tbl;
+ int dyncnt;
+ int tblcnt;
+ } p;
+ u_int8_t type; /* PF_ADDR_* */
+ u_int8_t iflags; /* PFI_AFLAG_* */
+};
+
+#ifdef _KERNEL
+struct pfi_dynaddr {
+ TAILQ_ENTRY(pfi_dynaddr) entry;
+ struct pf_addr pfid_addr4;
+ struct pf_addr pfid_mask4;
+ struct pf_addr pfid_addr6;
+ struct pf_addr pfid_mask6;
+ struct pfr_ktable *pfid_kt;
+ struct pfi_kif *pfid_kif;
+ void *pfid_hook_cookie;
+ int pfid_net; /* mask or 128 */
+ int pfid_acnt4; /* address count IPv4 */
+ int pfid_acnt6; /* address count IPv6 */
+ sa_family_t pfid_af; /* rule af */
+ u_int8_t pfid_iflags; /* PFI_AFLAG_* */
+};
+#endif /* _KERNEL */
+
+
+/*
+ * Logging macros
+ */
+
+#ifndef PF_DEBUGNAME
+#define PF_DEBUGNAME "pf: "
+#endif
+
+#ifdef _KERNEL
+#define DPFPRINTF(n, format, x...) \
+ do { \
+ if (pf_status.debug >= (n)) { \
+ log(n, PF_DEBUGNAME); \
+ addlog(format, ##x); \
+ addlog("\n"); \
+ } \
+ } while (0)
+#else
+#ifdef PFDEBUG
+#define DPFPRINTF(n, format, x...) \
+ do { \
+ fprintf(stderr, format, ##x); \
+ fprintf(stderr, "\n"); \
+ } while (0)
+#else
+#define DPFPRINTF(n, format, x...) ((void)0)
+#endif /* PFDEBUG */
+#endif /* _KERNEL */
+
+
+/*
+ * Address manipulation macros
+ */
+
+#define PF_AEQ(a, b, c) \
+ ((c == AF_INET && (a)->addr32[0] == (b)->addr32[0]) || \
+ (c == AF_INET6 && \
+ (a)->addr32[3] == (b)->addr32[3] && \
+ (a)->addr32[2] == (b)->addr32[2] && \
+ (a)->addr32[1] == (b)->addr32[1] && \
+ (a)->addr32[0] == (b)->addr32[0])) \
+
+#define PF_ANEQ(a, b, c) \
+ ((c == AF_INET && (a)->addr32[0] != (b)->addr32[0]) || \
+ (c == AF_INET6 && \
+ ((a)->addr32[3] != (b)->addr32[3] || \
+ (a)->addr32[2] != (b)->addr32[2] || \
+ (a)->addr32[1] != (b)->addr32[1] || \
+ (a)->addr32[0] != (b)->addr32[0]))) \
+
+#define PF_AZERO(a, c) \
+ ((c == AF_INET && !(a)->addr32[0]) || \
+ (c == AF_INET6 && \
+ !(a)->addr32[0] && !(a)->addr32[1] && \
+ !(a)->addr32[2] && !(a)->addr32[3] )) \
+
+#define PF_MISMATCHAW(aw, x, af, neg, ifp, rtid) \
+ ( \
+ (((aw)->type == PF_ADDR_NOROUTE && \
+ pf_routable((x), (af), NULL, (rtid))) || \
+ (((aw)->type == PF_ADDR_URPFFAILED && (ifp) != NULL && \
+ pf_routable((x), (af), (ifp), (rtid))) || \
+ ((aw)->type == PF_ADDR_RTLABEL && \
+ !pf_rtlabel_match((x), (af), (aw), (rtid))) || \
+ ((aw)->type == PF_ADDR_TABLE && \
+ !pfr_match_addr((aw)->p.tbl, (x), (af))) || \
+ ((aw)->type == PF_ADDR_DYNIFTL && \
+ !pfi_match_addr((aw)->p.dyn, (x), (af))) || \
+ ((aw)->type == PF_ADDR_RANGE && \
+ !pf_match_addr_range(&(aw)->v.a.addr, \
+ &(aw)->v.a.mask, (x), (af))) || \
+ ((aw)->type == PF_ADDR_ADDRMASK && \
+ !PF_AZERO(&(aw)->v.a.mask, (af)) && \
+ !pf_match_addr(0, &(aw)->v.a.addr, \
+ &(aw)->v.a.mask, (x), (af))))) != \
+ (neg) \
+ )
+
+struct pf_rule_uid {
+ uid_t uid[2];
+ u_int8_t op;
+};
+
+struct pf_rule_gid {
+ uid_t gid[2];
+ u_int8_t op;
+};
+
+struct pf_rule_addr {
+ struct pf_addr_wrap addr;
+ u_int16_t port[2];
+ u_int8_t neg;
+ u_int8_t port_op;
+ u_int16_t weight;
+};
+
+struct pf_threshold {
+ u_int32_t limit;
+#define PF_THRESHOLD_MULT 1000
+#define PF_THRESHOLD_MAX 0xffffffff / PF_THRESHOLD_MULT
+ u_int32_t seconds;
+ u_int32_t count;
+ u_int32_t last;
+};
+
+struct pf_poolhashkey {
+ union {
+ u_int8_t key8[16];
+ u_int16_t key16[8];
+ u_int32_t key32[4];
+ } pfk; /* 128-bit hash key */
+#define key8 pfk.key8
+#define key16 pfk.key16
+#define key32 pfk.key32
+};
+
+struct pf_pool {
+ struct pf_addr_wrap addr;
+ struct pf_poolhashkey key;
+ struct pf_addr counter;
+ char ifname[IFNAMSIZ];
+ struct pfi_kif *kif;
+ int tblidx;
+ u_int64_t states;
+ int curweight;
+ u_int16_t weight;
+ u_int16_t proxy_port[2];
+ u_int8_t port_op;
+ u_int8_t opts;
+};
+
+/* A packed Operating System description for fingerprinting */
+typedef u_int32_t pf_osfp_t;
+#define PF_OSFP_ANY ((pf_osfp_t)0)
+#define PF_OSFP_UNKNOWN ((pf_osfp_t)-1)
+#define PF_OSFP_NOMATCH ((pf_osfp_t)-2)
+
+struct pf_osfp_entry {
+ SLIST_ENTRY(pf_osfp_entry) fp_entry;
+ pf_osfp_t fp_os;
+ int fp_enflags;
+#define PF_OSFP_EXPANDED 0x001 /* expanded entry */
+#define PF_OSFP_GENERIC 0x002 /* generic signature */
+#define PF_OSFP_NODETAIL 0x004 /* no p0f details */
+#define PF_OSFP_LEN 32
+ u_char fp_class_nm[PF_OSFP_LEN];
+ u_char fp_version_nm[PF_OSFP_LEN];
+ u_char fp_subtype_nm[PF_OSFP_LEN];
+};
+#define PF_OSFP_ENTRY_EQ(a, b) \
+ ((a)->fp_os == (b)->fp_os && \
+ memcmp((a)->fp_class_nm, (b)->fp_class_nm, PF_OSFP_LEN) == 0 && \
+ memcmp((a)->fp_version_nm, (b)->fp_version_nm, PF_OSFP_LEN) == 0 && \
+ memcmp((a)->fp_subtype_nm, (b)->fp_subtype_nm, PF_OSFP_LEN) == 0)
+
+/* handle pf_osfp_t packing */
+#define _FP_RESERVED_BIT 1 /* For the special negative #defines */
+#define _FP_UNUSED_BITS 1
+#define _FP_CLASS_BITS 10 /* OS Class (Windows, Linux) */
+#define _FP_VERSION_BITS 10 /* OS version (95, 98, NT, 2.4.54, 3.2) */
+#define _FP_SUBTYPE_BITS 10 /* patch level (NT SP4, SP3, ECN patch) */
+#define PF_OSFP_UNPACK(osfp, class, version, subtype) do { \
+ (class) = ((osfp) >> (_FP_VERSION_BITS+_FP_SUBTYPE_BITS)) & \
+ ((1 << _FP_CLASS_BITS) - 1); \
+ (version) = ((osfp) >> _FP_SUBTYPE_BITS) & \
+ ((1 << _FP_VERSION_BITS) - 1);\
+ (subtype) = (osfp) & ((1 << _FP_SUBTYPE_BITS) - 1); \
+} while(0)
+#define PF_OSFP_PACK(osfp, class, version, subtype) do { \
+ (osfp) = ((class) & ((1 << _FP_CLASS_BITS) - 1)) << (_FP_VERSION_BITS \
+ + _FP_SUBTYPE_BITS); \
+ (osfp) |= ((version) & ((1 << _FP_VERSION_BITS) - 1)) << \
+ _FP_SUBTYPE_BITS; \
+ (osfp) |= (subtype) & ((1 << _FP_SUBTYPE_BITS) - 1); \
+} while(0)
+
+/* the fingerprint of an OSes TCP SYN packet */
+typedef u_int64_t pf_tcpopts_t;
+struct pf_os_fingerprint {
+ SLIST_HEAD(pf_osfp_enlist, pf_osfp_entry) fp_oses; /* list of matches */
+ pf_tcpopts_t fp_tcpopts; /* packed TCP options */
+ u_int16_t fp_wsize; /* TCP window size */
+ u_int16_t fp_psize; /* ip->ip_len */
+ u_int16_t fp_mss; /* TCP MSS */
+ u_int16_t fp_flags;
+#define PF_OSFP_WSIZE_MOD 0x0001 /* Window modulus */
+#define PF_OSFP_WSIZE_DC 0x0002 /* Window don't care */
+#define PF_OSFP_WSIZE_MSS 0x0004 /* Window multiple of MSS */
+#define PF_OSFP_WSIZE_MTU 0x0008 /* Window multiple of MTU */
+#define PF_OSFP_PSIZE_MOD 0x0010 /* packet size modulus */
+#define PF_OSFP_PSIZE_DC 0x0020 /* packet size don't care */
+#define PF_OSFP_WSCALE 0x0040 /* TCP window scaling */
+#define PF_OSFP_WSCALE_MOD 0x0080 /* TCP window scale modulus */
+#define PF_OSFP_WSCALE_DC 0x0100 /* TCP window scale dont-care */
+#define PF_OSFP_MSS 0x0200 /* TCP MSS */
+#define PF_OSFP_MSS_MOD 0x0400 /* TCP MSS modulus */
+#define PF_OSFP_MSS_DC 0x0800 /* TCP MSS dont-care */
+#define PF_OSFP_DF 0x1000 /* IPv4 don't fragment bit */
+#define PF_OSFP_TS0 0x2000 /* Zero timestamp */
+#define PF_OSFP_INET6 0x4000 /* IPv6 */
+ u_int8_t fp_optcnt; /* TCP option count */
+ u_int8_t fp_wscale; /* TCP window scaling */
+ u_int8_t fp_ttl; /* IPv4 TTL */
+#define PF_OSFP_MAXTTL_OFFSET 40
+/* TCP options packing */
+#define PF_OSFP_TCPOPT_NOP 0x0 /* TCP NOP option */
+#define PF_OSFP_TCPOPT_WSCALE 0x1 /* TCP window scaling option */
+#define PF_OSFP_TCPOPT_MSS 0x2 /* TCP max segment size opt */
+#define PF_OSFP_TCPOPT_SACK 0x3 /* TCP SACK OK option */
+#define PF_OSFP_TCPOPT_TS 0x4 /* TCP timestamp option */
+#define PF_OSFP_TCPOPT_BITS 3 /* bits used by each option */
+#define PF_OSFP_MAX_OPTS \
+ (sizeof(((struct pf_os_fingerprint *)0)->fp_tcpopts) * 8) \
+ / PF_OSFP_TCPOPT_BITS
+
+ SLIST_ENTRY(pf_os_fingerprint) fp_next;
+};
+
+struct pf_osfp_ioctl {
+ struct pf_osfp_entry fp_os;
+ pf_tcpopts_t fp_tcpopts; /* packed TCP options */
+ u_int16_t fp_wsize; /* TCP window size */
+ u_int16_t fp_psize; /* ip->ip_len */
+ u_int16_t fp_mss; /* TCP MSS */
+ u_int16_t fp_flags;
+ u_int8_t fp_optcnt; /* TCP option count */
+ u_int8_t fp_wscale; /* TCP window scaling */
+ u_int8_t fp_ttl; /* IPv4 TTL */
+
+ int fp_getnum; /* DIOCOSFPGET number */
+};
+
+struct pf_rule_actions {
+ int rtableid;
+ u_int16_t qid;
+ u_int16_t pqid;
+ u_int16_t max_mss;
+ u_int16_t flags;
+ u_int16_t delay;
+ u_int8_t log;
+ u_int8_t set_tos;
+ u_int8_t min_ttl;
+ u_int8_t set_prio[2];
+ u_int8_t pad[1];
+};
+
+union pf_rule_ptr {
+ struct pf_rule *ptr;
+ u_int32_t nr;
+};
+
+#define PF_ANCHOR_STACK_MAX 64
+#define PF_ANCHOR_NAME_SIZE 64
+#define PF_ANCHOR_MAXPATH (PATH_MAX - PF_ANCHOR_NAME_SIZE - 1)
+#define PF_ANCHOR_HIWAT 512
+#define PF_OPTIMIZER_TABLE_PFX "__automatic_"
+
+enum {
+ PF_LIMITER_NOMATCH,
+ PF_LIMITER_BLOCK
+};
+
+#define PF_LIMITER_DEFAULT PF_LIMITER_BLOCK
+
+struct pf_rule {
+ struct pf_rule_addr src;
+ struct pf_rule_addr dst;
+#define PF_SKIP_IFP 0
+#define PF_SKIP_DIR 1
+#define PF_SKIP_RDOM 2
+#define PF_SKIP_AF 3
+#define PF_SKIP_PROTO 4
+#define PF_SKIP_SRC_ADDR 5
+#define PF_SKIP_DST_ADDR 6
+#define PF_SKIP_SRC_PORT 7
+#define PF_SKIP_DST_PORT 8
+#define PF_SKIP_COUNT 9
+ union pf_rule_ptr skip[PF_SKIP_COUNT];
+#define PF_RULE_LABEL_SIZE 64
+ char label[PF_RULE_LABEL_SIZE];
+#define PF_QNAME_SIZE 64
+ char ifname[IFNAMSIZ];
+ char rcv_ifname[IFNAMSIZ];
+ char qname[PF_QNAME_SIZE];
+ char pqname[PF_QNAME_SIZE];
+#define PF_TAG_NAME_SIZE 64
+ char tagname[PF_TAG_NAME_SIZE];
+ char match_tagname[PF_TAG_NAME_SIZE];
+
+ char overload_tblname[PF_TABLE_NAME_SIZE];
+
+ TAILQ_ENTRY(pf_rule) entries;
+ struct pf_pool nat;
+ struct pf_pool rdr;
+ struct pf_pool route;
+ struct pf_threshold pktrate;
+
+ u_int64_t evaluations;
+ u_int64_t packets[2];
+ u_int64_t bytes[2];
+
+ struct pfi_kif *kif;
+ struct pfi_kif *rcv_kif;
+ struct pf_anchor *anchor;
+ struct pfr_ktable *overload_tbl;
+
+ pf_osfp_t os_fingerprint;
+
+ int rtableid;
+ int onrdomain;
+ u_int32_t timeout[PFTM_MAX];
+ u_int32_t states_cur;
+ u_int32_t states_tot;
+ u_int32_t max_states;
+ u_int32_t src_nodes;
+ u_int32_t max_src_nodes;
+ u_int32_t max_src_states;
+ u_int32_t max_src_conn;
+ struct {
+ u_int32_t limit;
+ u_int32_t seconds;
+ } max_src_conn_rate;
+ u_int32_t qid;
+ u_int32_t pqid;
+ u_int32_t rt_listid;
+ u_int32_t nr;
+ u_int32_t prob;
+ uid_t cuid;
+ pid_t cpid;
+
+ u_int16_t return_icmp;
+ u_int16_t return_icmp6;
+ u_int16_t max_mss;
+ u_int16_t tag;
+ u_int16_t match_tag;
+ u_int16_t scrub_flags;
+ u_int16_t delay;
+
+ struct pf_rule_uid uid;
+ struct pf_rule_gid gid;
+
+ u_int32_t rule_flag;
+ u_int8_t action;
+ u_int8_t direction;
+ u_int8_t log;
+ u_int8_t logif;
+ u_int8_t quick;
+ u_int8_t ifnot;
+ u_int8_t match_tag_not;
+
+#define PF_STATE_NORMAL 0x1
+#define PF_STATE_MODULATE 0x2
+#define PF_STATE_SYNPROXY 0x3
+ u_int8_t keep_state;
+ sa_family_t af;
+ u_int8_t proto;
+ u_int16_t type; /* aux. value 256 is legit */
+ u_int16_t code; /* aux. value 256 is legit */
+ u_int8_t flags;
+ u_int8_t flagset;
+ u_int8_t min_ttl;
+ u_int8_t allow_opts;
+ u_int8_t rt;
+ u_int8_t return_ttl;
+ u_int8_t tos;
+ u_int8_t set_tos;
+ u_int8_t anchor_relative;
+ u_int8_t anchor_wildcard;
+
+#define PF_FLUSH 0x01
+#define PF_FLUSH_GLOBAL 0x02
+ u_int8_t flush;
+ u_int8_t prio;
+ u_int8_t set_prio[2];
+ sa_family_t naf;
+ u_int8_t rcvifnot;
+ struct {
+ u_int8_t id;
+ int limiter_action;
+ } statelim;
+ struct {
+ u_int8_t id;
+ int limiter_action;
+ } sourcelim;
+
+ struct {
+ struct pf_addr addr;
+ u_int16_t port;
+ u_int8_t type;
+ } divert;
+
+ time_t exptime;
+};
+
+/* rule flags */
+#define PFRULE_DROP 0x0000
+#define PFRULE_RETURNRST 0x0001
+#define PFRULE_FRAGMENT 0x0002
+#define PFRULE_RETURNICMP 0x0004
+#define PFRULE_RETURN 0x0008
+#define PFRULE_NOSYNC 0x0010
+#define PFRULE_SRCTRACK 0x0020 /* track source states */
+#define PFRULE_RULESRCTRACK 0x0040 /* per rule */
+#define PFRULE_SETDELAY 0x0080
+
+/* rule flags again */
+#define PFRULE_IFBOUND 0x00010000 /* if-bound */
+#define PFRULE_STATESLOPPY 0x00020000 /* sloppy state tracking */
+#define PFRULE_PFLOW 0x00040000
+#define PFRULE_ONCE 0x00100000 /* one shot rule */
+#define PFRULE_AFTO 0x00200000 /* af-to rule */
+#define PFRULE_EXPIRED 0x00400000 /* one shot rule hit by pkt */
+
+#define PFSTATE_HIWAT 100000 /* default state table size */
+#define PFSTATE_ADAPT_START 60000 /* default adaptive timeout start */
+#define PFSTATE_ADAPT_END 120000 /* default adaptive timeout end */
+#define PF_PKTDELAY_MAXPKTS 10000 /* max # of pkts held in delay queue */
+
+struct pf_rule_item {
+ SLIST_ENTRY(pf_rule_item) entry;
+ struct pf_rule *r;
+};
+
+SLIST_HEAD(pf_rule_slist, pf_rule_item);
+
+enum pf_sn_types { PF_SN_NONE, PF_SN_NAT, PF_SN_RDR, PF_SN_ROUTE, PF_SN_MAX };
+
+struct pf_src_node {
+ RB_ENTRY(pf_src_node) entry;
+ struct pf_addr addr;
+ struct pf_addr raddr;
+ union pf_rule_ptr rule;
+ struct pfi_kif *kif;
+ u_int64_t bytes[2];
+ u_int64_t packets[2];
+ u_int32_t states;
+ u_int32_t conn;
+ struct pf_threshold conn_rate;
+ int32_t creation;
+ int32_t expire;
+ sa_family_t af;
+ sa_family_t naf;
+ u_int8_t type;
+};
+
+struct pf_sn_item {
+ SLIST_ENTRY(pf_sn_item) next;
+ struct pf_src_node *sn;
+};
+
+SLIST_HEAD(pf_sn_head, pf_sn_item);
+
+#define PFSNODE_HIWAT 10000 /* default source node table size */
+
+struct pf_state_scrub {
+ struct timeval pfss_last; /* time received last packet */
+ u_int32_t pfss_tsecr; /* last echoed timestamp */
+ u_int32_t pfss_tsval; /* largest timestamp */
+ u_int32_t pfss_tsval0; /* original timestamp */
+ u_int16_t pfss_flags;
+#define PFSS_TIMESTAMP 0x0001 /* modulate timestamp */
+#define PFSS_PAWS 0x0010 /* stricter PAWS checks */
+#define PFSS_PAWS_IDLED 0x0020 /* was idle too long. no PAWS */
+#define PFSS_DATA_TS 0x0040 /* timestamp on data packets */
+#define PFSS_DATA_NOTS 0x0080 /* no timestamp on data packets */
+ u_int8_t pfss_ttl; /* stashed TTL */
+ u_int8_t pad;
+ u_int32_t pfss_ts_mod; /* timestamp modulation */
+};
+
+struct pf_state_host {
+ struct pf_addr addr;
+ u_int16_t port;
+ u_int16_t pad;
+};
+
+struct pf_state_peer {
+ struct pf_state_scrub *scrub; /* state is scrubbed */
+ u_int32_t seqlo; /* Max sequence number sent */
+ u_int32_t seqhi; /* Max the other end ACKd + win */
+ u_int32_t seqdiff; /* Sequence number modulator */
+ u_int16_t max_win; /* largest window (pre scaling) */
+ u_int16_t mss; /* Maximum segment size option */
+ u_int8_t state; /* active state level */
+ u_int8_t wscale; /* window scaling factor */
+ u_int8_t tcp_est; /* Did we reach TCPS_ESTABLISHED */
+ u_int8_t pad[1];
+};
+
+TAILQ_HEAD(pf_state_queue, pf_state);
+
+/* keep synced with struct pf_state_key, used in RB_FIND */
+struct pf_state_key_cmp {
+ struct pf_addr addr[2];
+ u_int16_t port[2];
+ u_int16_t rdomain;
+ u_int16_t hash;
+ sa_family_t af;
+ u_int8_t proto;
+};
+
+/* keep synced with struct pf_state, used in RB_FIND */
+struct pf_state_cmp {
+ u_int64_t id;
+ u_int32_t creatorid;
+ u_int8_t direction;
+ u_int8_t pad[3];
+};
+
+/* struct pf_state.state_flags */
+#define PFSTATE_ALLOWOPTS 0x0001
+#define PFSTATE_SLOPPY 0x0002
+#define PFSTATE_PFLOW 0x0004
+#define PFSTATE_NOSYNC 0x0008
+#define PFSTATE_ACK 0x0010
+#define PFSTATE_NODF 0x0020
+#define PFSTATE_SETTOS 0x0040
+#define PFSTATE_RANDOMID 0x0080
+#define PFSTATE_SCRUB_TCP 0x0100
+#define PFSTATE_SETPRIO 0x0200
+#define PFSTATE_INP_UNLINKED 0x0400
+#define PFSTATE_SCRUBMASK (PFSTATE_NODF|PFSTATE_RANDOMID|PFSTATE_SCRUB_TCP)
+#define PFSTATE_SETMASK (PFSTATE_SETTOS|PFSTATE_SETPRIO)
+
+/*
+ * Unified state structures for pulling states out of the kernel
+ * used by pfsync(4) and the pf(4) ioctl.
+ */
+struct pfsync_state_scrub {
+ u_int16_t pfss_flags;
+ u_int8_t pfss_ttl; /* stashed TTL */
+#define PFSYNC_SCRUB_FLAG_VALID 0x01
+ u_int8_t scrub_flag;
+ u_int32_t pfss_ts_mod; /* timestamp modulation */
+} __packed;
+
+struct pfsync_state_peer {
+ struct pfsync_state_scrub scrub; /* state is scrubbed */
+ u_int32_t seqlo; /* Max sequence number sent */
+ u_int32_t seqhi; /* Max the other end ACKd + win */
+ u_int32_t seqdiff; /* Sequence number modulator */
+ u_int16_t max_win; /* largest window (pre scaling) */
+ u_int16_t mss; /* Maximum segment size option */
+ u_int8_t state; /* active state level */
+ u_int8_t wscale; /* window scaling factor */
+ u_int8_t pad[6];
+} __packed;
+
+struct pfsync_state_key {
+ struct pf_addr addr[2];
+ u_int16_t port[2];
+ u_int16_t rdomain;
+ sa_family_t af;
+ u_int8_t pad;
+};
+
+struct pfsync_state {
+ u_int64_t id;
+ char ifname[IFNAMSIZ];
+ struct pfsync_state_key key[2];
+ struct pfsync_state_peer src;
+ struct pfsync_state_peer dst;
+ struct pf_addr rt_addr;
+ u_int32_t rule;
+ u_int32_t anchor;
+ u_int32_t nat_rule;
+ u_int32_t creation;
+ u_int32_t expire;
+ u_int32_t packets[2][2];
+ u_int32_t bytes[2][2];
+ u_int32_t creatorid;
+ int32_t rtableid[2];
+ u_int16_t max_mss;
+ sa_family_t af;
+ u_int8_t proto;
+ u_int8_t direction;
+ u_int8_t log;
+ u_int8_t rt;
+ u_int8_t timeout;
+ u_int8_t sync_flags;
+ u_int8_t updates;
+ u_int8_t min_ttl;
+ u_int8_t set_tos;
+ u_int16_t state_flags;
+ u_int8_t set_prio[2];
+} __packed;
+
+#define PFSYNC_FLAG_SRCNODE 0x04
+#define PFSYNC_FLAG_NATSRCNODE 0x08
+
+#define pf_state_counter_hton(s,d) do { \
+ d[0] = htonl((s>>32)&0xffffffff); \
+ d[1] = htonl(s&0xffffffff); \
+} while (0)
+
+#define pf_state_counter_from_pfsync(s) \
+ (((u_int64_t)(s[0])<<32) | (u_int64_t)(s[1]))
+
+#define pf_state_counter_ntoh(s,d) do { \
+ d = ntohl(s[0]); \
+ d = d<<32; \
+ d += ntohl(s[1]); \
+} while (0)
+
+TAILQ_HEAD(pf_rulequeue, pf_rule);
+
+struct pf_anchor;
+
+struct pf_ruleset {
+ struct {
+ struct pf_rulequeue queues[2];
+ struct {
+ struct pf_rulequeue *ptr;
+ u_int32_t rcount;
+ u_int32_t version;
+ int open;
+ } active, inactive;
+ } rules;
+ struct pf_anchor *anchor;
+ u_int32_t tticket;
+ int tables;
+ int topen;
+};
+
+RB_HEAD(pf_anchor_global, pf_anchor);
+RB_HEAD(pf_anchor_node, pf_anchor);
+struct pf_anchor {
+ RB_ENTRY(pf_anchor) entry_global;
+ RB_ENTRY(pf_anchor) entry_node;
+ struct pf_anchor *parent;
+ struct pf_anchor_node children;
+ char name[PF_ANCHOR_NAME_SIZE];
+ char path[PATH_MAX];
+ struct pf_ruleset ruleset;
+ int refcnt; /* anchor rules */
+ int match;
+ struct refcnt ref; /* for transactions */
+};
+RB_PROTOTYPE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare)
+RB_PROTOTYPE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare)
+
+#define PF_RESERVED_ANCHOR "_pf"
+
+#define PFR_TFLAG_PERSIST 0x00000001
+#define PFR_TFLAG_CONST 0x00000002
+#define PFR_TFLAG_ACTIVE 0x00000004
+#define PFR_TFLAG_INACTIVE 0x00000008
+#define PFR_TFLAG_REFERENCED 0x00000010
+#define PFR_TFLAG_REFDANCHOR 0x00000020
+#define PFR_TFLAG_COUNTERS 0x00000040
+/* Adjust masks below when adding flags. */
+#define PFR_TFLAG_USRMASK 0x00000043
+#define PFR_TFLAG_SETMASK 0x0000003C
+#define PFR_TFLAG_ALLMASK 0x0000007F
+
+struct pfr_table {
+ char pfrt_anchor[PATH_MAX];
+ char pfrt_name[PF_TABLE_NAME_SIZE];
+ u_int32_t pfrt_flags;
+ u_int8_t pfrt_fback;
+};
+
+enum { PFR_FB_NONE, PFR_FB_MATCH, PFR_FB_ADDED, PFR_FB_DELETED,
+ PFR_FB_CHANGED, PFR_FB_CLEARED, PFR_FB_DUPLICATE,
+ PFR_FB_NOTMATCH, PFR_FB_CONFLICT, PFR_FB_NOCOUNT, PFR_FB_MAX };
+
+struct pfr_addr {
+ union {
+ struct in_addr _pfra_ip4addr;
+ struct in6_addr _pfra_ip6addr;
+ } pfra_u;
+ char pfra_ifname[IFNAMSIZ];
+ u_int32_t pfra_states;
+ u_int16_t pfra_weight;
+ u_int8_t pfra_af;
+ u_int8_t pfra_net;
+ u_int8_t pfra_not;
+ u_int8_t pfra_fback;
+ u_int8_t pfra_type;
+ u_int8_t pad[7];
+};
+#define pfra_ip4addr pfra_u._pfra_ip4addr
+#define pfra_ip6addr pfra_u._pfra_ip6addr
+
+enum { PFR_DIR_IN, PFR_DIR_OUT, PFR_DIR_MAX };
+enum { PFR_OP_BLOCK, PFR_OP_MATCH, PFR_OP_PASS, PFR_OP_ADDR_MAX,
+ PFR_OP_TABLE_MAX };
+#define PFR_OP_XPASS PFR_OP_ADDR_MAX
+
+struct pfr_astats {
+ struct pfr_addr pfras_a;
+ u_int64_t pfras_packets[PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+ u_int64_t pfras_bytes[PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+ time_t pfras_tzero;
+};
+
+enum { PFR_REFCNT_RULE, PFR_REFCNT_ANCHOR, PFR_REFCNT_MAX };
+
+struct pfr_tstats {
+ struct pfr_table pfrts_t;
+ u_int64_t pfrts_packets[PFR_DIR_MAX][PFR_OP_TABLE_MAX];
+ u_int64_t pfrts_bytes[PFR_DIR_MAX][PFR_OP_TABLE_MAX];
+ u_int64_t pfrts_match;
+ u_int64_t pfrts_nomatch;
+ time_t pfrts_tzero;
+ int pfrts_cnt;
+ int pfrts_refcnt[PFR_REFCNT_MAX];
+};
+#define pfrts_name pfrts_t.pfrt_name
+#define pfrts_flags pfrts_t.pfrt_flags
+
+struct pfr_kcounters {
+ u_int64_t pfrkc_packets[PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+ u_int64_t pfrkc_bytes[PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+ u_int64_t states;
+};
+
+/*
+ * XXX ip_ipsp.h's sockaddr_union should be converted to sockaddr *
+ * passing with correct sa_len, then a good approach for cleaning this
+ * will become more clear.
+ */
+union pfsockaddr_union {
+ struct sockaddr sa;
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+};
+
+SLIST_HEAD(pfr_kentryworkq, pfr_kentry);
+struct _pfr_kentry {
+ struct radix_node _pfrke_node[2];
+ union pfsockaddr_union _pfrke_sa;
+ SLIST_ENTRY(pfr_kentry) _pfrke_workq;
+ SLIST_ENTRY(pfr_kentry) _pfrke_ioq;
+ struct pfr_kcounters *_pfrke_counters;
+ time_t _pfrke_tzero;
+ u_int8_t _pfrke_af;
+ u_int8_t _pfrke_net;
+ u_int8_t _pfrke_flags;
+ u_int8_t _pfrke_type;
+ u_int8_t _pfrke_fb;
+};
+#define PFRKE_FLAG_NOT 0x01
+#define PFRKE_FLAG_MARK 0x02
+
+/* pfrke_type */
+enum { PFRKE_PLAIN, PFRKE_ROUTE, PFRKE_COST, PFRKE_MAX };
+
+struct pfr_kentry {
+ union {
+ struct _pfr_kentry _ke;
+ } u;
+};
+#define pfrke_node u._ke._pfrke_node
+#define pfrke_sa u._ke._pfrke_sa
+#define pfrke_workq u._ke._pfrke_workq
+#define pfrke_ioq u._ke._pfrke_ioq
+#define pfrke_counters u._ke._pfrke_counters
+#define pfrke_tzero u._ke._pfrke_tzero
+#define pfrke_af u._ke._pfrke_af
+#define pfrke_net u._ke._pfrke_net
+#define pfrke_flags u._ke._pfrke_flags
+#define pfrke_type u._ke._pfrke_type
+#define pfrke_fb u._ke._pfrke_fb
+
+struct pfr_kentry_route {
+ union {
+ struct _pfr_kentry _ke;
+ } u;
+
+ struct pfi_kif *kif;
+ char ifname[IFNAMSIZ];
+};
+
+struct pfr_kentry_cost {
+ union {
+ struct _pfr_kentry _ke;
+ } u;
+
+ struct pfi_kif *kif;
+ char ifname[IFNAMSIZ];
+ /* Above overlaps with pfr_kentry route */
+
+ u_int16_t weight;
+};
+
+struct pfr_kentry_all {
+ union {
+ struct _pfr_kentry _ke;
+ struct pfr_kentry_route kr;
+ struct pfr_kentry_cost kc;
+ } u;
+};
+#define pfrke_rkif u.kr.kif
+#define pfrke_rifname u.kr.ifname
+
+SLIST_HEAD(pfr_ktableworkq, pfr_ktable);
+RB_HEAD(pfr_ktablehead, pfr_ktable);
+struct pfr_ktable {
+ struct pfr_tstats pfrkt_ts;
+ RB_ENTRY(pfr_ktable) pfrkt_tree;
+ SLIST_ENTRY(pfr_ktable) pfrkt_workq;
+ struct radix_node_head *pfrkt_ip4;
+ struct radix_node_head *pfrkt_ip6;
+ struct pfr_ktable *pfrkt_shadow;
+ struct pfr_ktable *pfrkt_root;
+ struct pf_ruleset *pfrkt_rs;
+ long pfrkt_larg;
+ int pfrkt_nflags;
+ u_int64_t pfrkt_refcntcost;
+ u_int16_t pfrkt_gcdweight;
+ u_int16_t pfrkt_maxweight;
+};
+#define pfrkt_t pfrkt_ts.pfrts_t
+#define pfrkt_name pfrkt_t.pfrt_name
+#define pfrkt_anchor pfrkt_t.pfrt_anchor
+#define pfrkt_ruleset pfrkt_t.pfrt_ruleset
+#define pfrkt_flags pfrkt_t.pfrt_flags
+#define pfrkt_cnt pfrkt_ts.pfrts_cnt
+#define pfrkt_refcnt pfrkt_ts.pfrts_refcnt
+#define pfrkt_packets pfrkt_ts.pfrts_packets
+#define pfrkt_bytes pfrkt_ts.pfrts_bytes
+#define pfrkt_match pfrkt_ts.pfrts_match
+#define pfrkt_nomatch pfrkt_ts.pfrts_nomatch
+#define pfrkt_tzero pfrkt_ts.pfrts_tzero
+
+RB_HEAD(pfi_ifhead, pfi_kif);
+
+/* state tables */
+extern struct pf_state_tree pf_statetbl;
+
+/* keep synced with pfi_kif, used in RB_FIND */
+struct pfi_kif_cmp {
+ char pfik_name[IFNAMSIZ];
+};
+
+struct ifnet;
+struct ifg_group;
+
+struct pfi_kif {
+ char pfik_name[IFNAMSIZ];
+ RB_ENTRY(pfi_kif) pfik_tree;
+ u_int64_t pfik_packets[2][2][2];
+ u_int64_t pfik_bytes[2][2][2];
+ time_t pfik_tzero;
+ int pfik_flags;
+ int pfik_flags_new;
+ void *pfik_ah_cookie;
+ struct ifnet *pfik_ifp;
+ struct ifg_group *pfik_group;
+ int pfik_states;
+ int pfik_rules;
+ int pfik_routes;
+ int pfik_srcnodes;
+ int pfik_flagrefs;
+ TAILQ_HEAD(, pfi_dynaddr) pfik_dynaddrs;
+};
+
+enum pfi_kif_refs {
+ PFI_KIF_REF_NONE,
+ PFI_KIF_REF_STATE,
+ PFI_KIF_REF_RULE,
+ PFI_KIF_REF_ROUTE,
+ PFI_KIF_REF_SRCNODE,
+ PFI_KIF_REF_FLAG
+};
+
+#define PFI_IFLAG_SKIP 0x0100 /* skip filtering on interface */
+#define PFI_IFLAG_ANY 0x0200 /* match any non-loopback interface */
+
+/* flags for RDR options */
+#define PF_DPORT_RANGE 0x01 /* Dest port uses range */
+#define PF_RPORT_RANGE 0x02 /* RDR'ed port uses range */
+
+/* Reasons code for passing/dropping a packet */
+#define PFRES_MATCH 0 /* Explicit match of a rule */
+#define PFRES_BADOFF 1 /* Bad offset for pull_hdr */
+#define PFRES_FRAG 2 /* Dropping following fragment */
+#define PFRES_SHORT 3 /* Dropping short packet */
+#define PFRES_NORM 4 /* Dropping by normalizer */
+#define PFRES_MEMORY 5 /* Dropped due to lacking mem */
+#define PFRES_TS 6 /* Bad TCP Timestamp (RFC1323) */
+#define PFRES_CONGEST 7 /* Congestion */
+#define PFRES_IPOPTIONS 8 /* IP option */
+#define PFRES_PROTCKSUM 9 /* Protocol checksum invalid */
+#define PFRES_BADSTATE 10 /* State mismatch */
+#define PFRES_STATEINS 11 /* State insertion failure */
+#define PFRES_MAXSTATES 12 /* State limit */
+#define PFRES_SRCLIMIT 13 /* Source node/conn limit */
+#define PFRES_SYNPROXY 14 /* SYN proxy */
+#define PFRES_TRANSLATE 15 /* No translation address available */
+#define PFRES_NOROUTE 16 /* No route found for PBR action */
+#define PFRES_MAX 17 /* total+1 */
+
+#define PFRES_NAMES { \
+ "match", \
+ "bad-offset", \
+ "fragment", \
+ "short", \
+ "normalize", \
+ "memory", \
+ "bad-timestamp", \
+ "congestion", \
+ "ip-option", \
+ "proto-cksum", \
+ "state-mismatch", \
+ "state-insert", \
+ "state-limit", \
+ "src-limit", \
+ "synproxy", \
+ "translate", \
+ "no-route", \
+ NULL \
+}
+
+/* Counters for other things we want to keep track of */
+#define LCNT_STATES 0 /* states */
+#define LCNT_SRCSTATES 1 /* max-src-states */
+#define LCNT_SRCNODES 2 /* max-src-nodes */
+#define LCNT_SRCCONN 3 /* max-src-conn */
+#define LCNT_SRCCONNRATE 4 /* max-src-conn-rate */
+#define LCNT_OVERLOAD_TABLE 5 /* entry added to overload table */
+#define LCNT_OVERLOAD_FLUSH 6 /* state entries flushed */
+#define LCNT_SYNFLOODS 7 /* synfloods detected */
+#define LCNT_SYNCOOKIES_SENT 8 /* syncookies sent */
+#define LCNT_SYNCOOKIES_VALID 9 /* syncookies validated */
+#define LCNT_MAX 10 /* total+1 */
+
+#define LCNT_NAMES { \
+ "max states per rule", \
+ "max-src-states", \
+ "max-src-nodes", \
+ "max-src-conn", \
+ "max-src-conn-rate", \
+ "overload table insertion", \
+ "overload flush states", \
+ "synfloods detected", \
+ "syncookies sent", \
+ "syncookies validated", \
+ NULL \
+}
+
+/* UDP state enumeration */
+#define PFUDPS_NO_TRAFFIC 0
+#define PFUDPS_SINGLE 1
+#define PFUDPS_MULTIPLE 2
+
+#define PFUDPS_NSTATES 3 /* number of state levels */
+
+#define PFUDPS_NAMES { \
+ "NO_TRAFFIC", \
+ "SINGLE", \
+ "MULTIPLE", \
+ NULL \
+}
+
+/* Other protocol state enumeration */
+#define PFOTHERS_NO_TRAFFIC 0
+#define PFOTHERS_SINGLE 1
+#define PFOTHERS_MULTIPLE 2
+
+#define PFOTHERS_NSTATES 3 /* number of state levels */
+
+#define PFOTHERS_NAMES { \
+ "NO_TRAFFIC", \
+ "SINGLE", \
+ "MULTIPLE", \
+ NULL \
+}
+
+#define FCNT_STATE_SEARCH 0
+#define FCNT_STATE_INSERT 1
+#define FCNT_STATE_REMOVALS 2
+#define FCNT_MAX 3
+
+#define SCNT_SRC_NODE_SEARCH 0
+#define SCNT_SRC_NODE_INSERT 1
+#define SCNT_SRC_NODE_REMOVALS 2
+#define SCNT_MAX 3
+
+#define NCNT_FRAG_SEARCH 0
+#define NCNT_FRAG_INSERT 1
+#define NCNT_FRAG_REMOVALS 2
+#define NCNT_MAX 3
+
+#define REASON_SET(a, x) \
+ do { \
+ if ((void *)(a) != NULL) { \
+ *(a) = (x); \
+ if (x < PFRES_MAX) \
+ pf_status.counters[x]++; \
+ } \
+ } while (0)
+
+struct pf_status {
+ u_int64_t counters[PFRES_MAX];
+ u_int64_t lcounters[LCNT_MAX]; /* limit counters */
+ u_int64_t fcounters[FCNT_MAX];
+ u_int64_t scounters[SCNT_MAX];
+ u_int64_t ncounters[NCNT_MAX];
+ u_int64_t pcounters[2][2][3];
+ u_int64_t bcounters[2][2];
+ u_int64_t stateid;
+ u_int64_t syncookies_inflight[2]; /* unACKed SYNcookies */
+ time_t since;
+ u_int32_t running;
+ u_int32_t states;
+ u_int32_t states_halfopen;
+ u_int32_t src_nodes;
+ u_int32_t fragments;
+ u_int32_t debug;
+ u_int32_t hostid;
+ u_int32_t reass; /* reassembly */
+ u_int8_t syncookies_active;
+ u_int8_t syncookies_mode; /* never/always/adaptive */
+ u_int8_t pad[2];
+ char ifname[IFNAMSIZ];
+ u_int8_t pf_chksum[PF_MD5_DIGEST_LENGTH];
+};
+
+#define PF_REASS_ENABLED 0x01
+#define PF_REASS_NODF 0x02
+
+#define PF_SYNCOOKIES_NEVER 0
+#define PF_SYNCOOKIES_ALWAYS 1
+#define PF_SYNCOOKIES_ADAPTIVE 2
+#define PF_SYNCOOKIES_MODE_MAX PF_SYNCOOKIES_ADAPTIVE
+
+#define PF_SYNCOOKIES_HIWATPCT 25
+#define PF_SYNCOOKIES_LOWATPCT PF_SYNCOOKIES_HIWATPCT/2
+
+#define PF_PRIO_ZERO 0xff /* match "prio 0" packets */
+
+struct pf_queue_bwspec {
+ uint64_t absolute;
+ u_int percent;
+};
+
+struct pf_queue_scspec {
+ struct pf_queue_bwspec m1;
+ struct pf_queue_bwspec m2;
+ u_int d;
+};
+
+struct pf_queue_fqspec {
+ u_int flows;
+ u_int quantum;
+ u_int target;
+ u_int interval;
+};
+
+struct pf_queuespec {
+ TAILQ_ENTRY(pf_queuespec) entries;
+ char qname[PF_QNAME_SIZE];
+ char parent[PF_QNAME_SIZE];
+ char ifname[IFNAMSIZ];
+ struct pf_queue_scspec realtime;
+ struct pf_queue_scspec linkshare;
+ struct pf_queue_scspec upperlimit;
+ struct pf_queue_fqspec flowqueue;
+ struct pfi_kif *kif;
+ u_int flags;
+ u_int qlimit;
+ u_int32_t qid;
+ u_int32_t parent_qid;
+};
+
+#define PFQS_FLOWQUEUE 0x0001
+#define PFQS_ROOTCLASS 0x0002
+#define PFQS_DEFAULT 0x1000 /* maps to HFSC_DEFAULTCLASS */
+
+struct priq_opts {
+ int flags;
+};
+
+struct hfsc_opts {
+ /* real-time service curve */
+ u_int rtsc_m1; /* slope of the 1st segment in bps */
+ u_int rtsc_d; /* the x-projection of m1 in msec */
+ u_int rtsc_m2; /* slope of the 2nd segment in bps */
+ /* link-sharing service curve */
+ u_int lssc_m1;
+ u_int lssc_d;
+ u_int lssc_m2;
+ /* upper-limit service curve */
+ u_int ulsc_m1;
+ u_int ulsc_d;
+ u_int ulsc_m2;
+ int flags;
+};
+
+struct pfq_ops {
+ void * (*pfq_alloc)(struct ifnet *);
+ int (*pfq_addqueue)(void *, struct pf_queuespec *);
+ void (*pfq_free)(void *);
+ int (*pfq_qstats)(struct pf_queuespec *, void *, int *);
+ /* Queue manager ops */
+ unsigned int (*pfq_qlength)(void *);
+ struct mbuf * (*pfq_enqueue)(void *, struct mbuf *);
+ struct mbuf * (*pfq_deq_begin)(void *, void **, struct mbuf_list *);
+ void (*pfq_deq_commit)(void *, struct mbuf *, void *);
+ void (*pfq_purge)(void *, struct mbuf_list *);
+};
+
+struct pf_tagname {
+ TAILQ_ENTRY(pf_tagname) entries;
+ char name[PF_TAG_NAME_SIZE];
+ u_int16_t tag;
+ int ref;
+};
+
+struct pf_divert {
+ struct pf_addr addr;
+ u_int16_t port;
+ u_int16_t rdomain;
+ u_int8_t type;
+};
+
+enum pf_divert_types {
+ PF_DIVERT_NONE,
+ PF_DIVERT_TO,
+ PF_DIVERT_REPLY,
+ PF_DIVERT_PACKET
+};
+
+struct pf_pktdelay {
+ struct timeout to;
+ struct mbuf *m;
+ u_int ifidx;
+};
+
+/* Fragment entries reference mbuf clusters, so base the default on that. */
+#define PFFRAG_FRENT_HIWAT (NMBCLUSTERS / 16) /* Number of entries */
+#define PFFRAG_FRAG_HIWAT (NMBCLUSTERS / 32) /* Number of packets */
+
+#define PFR_KTABLE_HIWAT 1000 /* Number of tables */
+#define PFR_KENTRY_HIWAT 200000 /* Number of table entries */
+#define PFR_KENTRY_HIWAT_SMALL 100000 /* Number of entries for tiny hosts */
+
+/*
+ * ioctl parameter structures
+ */
+
+struct pfioc_rule {
+ u_int32_t action;
+ u_int32_t ticket;
+ u_int32_t nr;
+ char anchor[PATH_MAX];
+ char anchor_call[PATH_MAX];
+ struct pf_rule rule;
+};
+
+struct pfioc_natlook {
+ struct pf_addr saddr;
+ struct pf_addr daddr;
+ struct pf_addr rsaddr;
+ struct pf_addr rdaddr;
+ u_int16_t rdomain;
+ u_int16_t rrdomain;
+ u_int16_t sport;
+ u_int16_t dport;
+ u_int16_t rsport;
+ u_int16_t rdport;
+ sa_family_t af;
+ u_int8_t proto;
+ u_int8_t direction;
+};
+
+struct pfioc_state {
+ struct pfsync_state state;
+};
+
+struct pfioc_src_node_kill {
+ sa_family_t psnk_af;
+ struct pf_rule_addr psnk_src;
+ struct pf_rule_addr psnk_dst;
+ u_int psnk_killed;
+};
+
+struct pfioc_state_kill {
+ struct pf_state_cmp psk_pfcmp;
+ sa_family_t psk_af;
+ int psk_proto;
+ struct pf_rule_addr psk_src;
+ struct pf_rule_addr psk_dst;
+ char psk_ifname[IFNAMSIZ];
+ char psk_label[PF_RULE_LABEL_SIZE];
+ u_int psk_killed;
+ u_int16_t psk_rdomain;
+};
+
+struct pfioc_states {
+ size_t ps_len;
+ union {
+ caddr_t psu_buf;
+ struct pfsync_state *psu_states;
+ } ps_u;
+#define ps_buf ps_u.psu_buf
+#define ps_states ps_u.psu_states
+};
+
+struct pfioc_src_nodes {
+ size_t psn_len;
+ union {
+ caddr_t psu_buf;
+ struct pf_src_node *psu_src_nodes;
+ } psn_u;
+#define psn_buf psn_u.psu_buf
+#define psn_src_nodes psn_u.psu_src_nodes
+};
+
+struct pfioc_tm {
+ int timeout;
+ int seconds;
+};
+
+struct pfioc_limit {
+ int index;
+ unsigned limit;
+};
+
+struct pfioc_ruleset {
+ u_int32_t nr;
+ char path[PATH_MAX];
+ char name[PF_ANCHOR_NAME_SIZE];
+};
+
+struct pfioc_trans {
+ int size; /* number of elements */
+ int esize; /* size of each element in bytes */
+ struct pfioc_trans_e {
+ int type;
+ char anchor[PATH_MAX];
+ u_int32_t ticket;
+ } *array;
+};
+
+struct pfioc_queue {
+ u_int32_t ticket;
+ u_int nr;
+ struct pf_queuespec queue;
+};
+
+struct pfioc_qstats {
+ u_int32_t ticket;
+ u_int32_t nr;
+ struct pf_queuespec queue;
+ void *buf;
+ int nbytes;
+};
+
+#define PFR_FLAG_DUMMY 0x00000002
+#define PFR_FLAG_FEEDBACK 0x00000004
+#define PFR_FLAG_CLSTATS 0x00000008
+#define PFR_FLAG_ADDRSTOO 0x00000010
+#define PFR_FLAG_REPLACE 0x00000020
+#define PFR_FLAG_ALLRSETS 0x00000040
+#define PFR_FLAG_ALLMASK 0x0000007F
+#ifdef _KERNEL
+#define PFR_FLAG_USERIOCTL 0x10000000
+#endif
+
+struct pfioc_table {
+ struct pfr_table pfrio_table;
+ void *pfrio_buffer;
+ int pfrio_esize;
+ int pfrio_size;
+ int pfrio_size2;
+ int pfrio_nadd;
+ int pfrio_ndel;
+ int pfrio_nchange;
+ int pfrio_flags;
+ u_int32_t pfrio_ticket;
+};
+#define pfrio_exists pfrio_nadd
+#define pfrio_nzero pfrio_nadd
+#define pfrio_nmatch pfrio_nadd
+#define pfrio_naddr pfrio_size2
+#define pfrio_setflag pfrio_size2
+#define pfrio_clrflag pfrio_nadd
+
+struct pfioc_iface {
+ char pfiio_name[IFNAMSIZ];
+ void *pfiio_buffer;
+ int pfiio_esize;
+ int pfiio_size;
+ int pfiio_nzero;
+ int pfiio_flags;
+};
+
+struct pfioc_synflwats {
+ u_int32_t hiwat;
+ u_int32_t lowat;
+};
+
+#define PF_STATELIM_NAME_LEN 16 /* kstat istr */
+#define PF_STATELIM_DESCR_LEN 64
+
+struct pfioc_statelim {
+ u_int32_t ticket;
+
+ char name[PF_STATELIM_NAME_LEN];
+ uint32_t id;
+#define PF_STATELIM_ID_NONE 0
+#define PF_STATELIM_ID_MIN 1
+#define PF_STATELIM_ID_MAX 255 /* fits in pf_state uint8_t */
+
+ /* limit on the total number of states */
+ unsigned int limit;
+#define PF_STATELIM_LIMIT_MIN 1
+#define PF_STATELIM_LIMIT_MAX (1 << 24) /* pf is pretty scalable */
+
+ /* rate limit on the creation of states */
+ struct {
+ unsigned int limit;
+ unsigned int seconds;
+ } rate;
+
+ char description[PF_STATELIM_DESCR_LEN];
+
+ /* kernel state for GET ioctls */
+ unsigned int inuse; /* gauge */
+ uint64_t admitted; /* counter */
+ uint64_t hardlimited; /* counter */
+ uint64_t ratelimited; /* counter */
+};
+
+#define PF_SOURCELIM_NAME_LEN 16 /* kstat istr */
+#define PF_SOURCELIM_DESCR_LEN 64
+
+struct pfioc_sourcelim {
+ u_int32_t ticket;
+
+ char name[PF_SOURCELIM_NAME_LEN];
+ uint32_t id;
+#define PF_SOURCELIM_ID_NONE 0
+#define PF_SOURCELIM_ID_MIN 1
+#define PF_SOURCELIM_ID_MAX 255 /* fits in pf_state uint8_t */
+
+ /* limit on the total number of address entries */
+ unsigned int entries;
+
+ /* limit on the number of states per address entry */
+ unsigned int limit;
+
+ /* rate limit on the creation of states by an address entry */
+ struct {
+ unsigned int limit;
+ unsigned int seconds;
+ } rate;
+
+ /*
+ * when the number of states on an entry exceeds hwm, add
+ * the address to the specified table. when the number of
+ * states goes below lwm, remove it from the table.
+ */
+ char overload_tblname[PF_TABLE_NAME_SIZE];
+ unsigned int overload_hwm;
+ unsigned int overload_lwm;
+
+ /*
+ * mask addresses before they're used for entries. /64s
+ * everywhere for inet6 makes it easy to use too much memory.
+ */
+ unsigned int inet_prefix;
+ unsigned int inet6_prefix;
+
+ char description[PF_SOURCELIM_DESCR_LEN];
+
+ /* kernel state for GET ioctls */
+ unsigned int nentries; /* gauge */
+ unsigned int inuse; /* gauge */
+
+ uint64_t addrallocs; /* counter */
+ uint64_t addrnomem; /* counter */
+ uint64_t admitted; /* counter */
+ uint64_t addrlimited; /* counter */
+ uint64_t hardlimited; /* counter */
+ uint64_t ratelimited; /* counter */
+};
+
+struct pfioc_source_entry {
+ sa_family_t af;
+ unsigned int rdomain;
+ struct pf_addr addr;
+
+ /* stats */
+
+ unsigned int inuse; /* gauge */
+ uint64_t admitted; /* counter */
+ uint64_t hardlimited; /* counter */
+ uint64_t ratelimited; /* counter */
+};
+
+struct pfioc_source {
+ char name[PF_SOURCELIM_NAME_LEN];
+ uint32_t id;
+
+ /* copied from the parent source limiter */
+
+ unsigned int inet_prefix;
+ unsigned int inet6_prefix;
+ unsigned int limit;
+
+ /* source entries */
+ size_t entry_size; /* sizeof(struct pfioc_source_entry) */
+
+ struct pfioc_source_entry *key;
+ struct pfioc_source_entry *entries;
+ size_t entrieslen; /* bytes */
+};
+
+struct pfioc_source_kill {
+ char name[PF_SOURCELIM_NAME_LEN];
+ uint32_t id;
+ unsigned int rdomain;
+ sa_family_t af;
+ struct pf_addr addr;
+
+ unsigned int rmstates; /* kill the states too? */
+};
+
+/*
+ * ioctl operations
+ */
+
+#define DIOCSTART _IO ('D', 1)
+#define DIOCSTOP _IO ('D', 2)
+#define DIOCADDRULE _IOWR('D', 4, struct pfioc_rule)
+#define DIOCGETRULES _IOWR('D', 6, struct pfioc_rule)
+#define DIOCGETRULE _IOWR('D', 7, struct pfioc_rule)
+/* cut 8 - 17 */
+#define DIOCCLRSTATES _IOWR('D', 18, struct pfioc_state_kill)
+#define DIOCGETSTATE _IOWR('D', 19, struct pfioc_state)
+#define DIOCSETSTATUSIF _IOWR('D', 20, struct pfioc_iface)
+#define DIOCGETSTATUS _IOWR('D', 21, struct pf_status)
+#define DIOCCLRSTATUS _IOWR('D', 22, struct pfioc_iface)
+#define DIOCNATLOOK _IOWR('D', 23, struct pfioc_natlook)
+#define DIOCSETDEBUG _IOWR('D', 24, u_int32_t)
+#define DIOCGETSTATES _IOWR('D', 25, struct pfioc_states)
+#define DIOCCHANGERULE _IOWR('D', 26, struct pfioc_rule)
+/* cut 27 - 28 */
+#define DIOCSETTIMEOUT _IOWR('D', 29, struct pfioc_tm)
+#define DIOCGETTIMEOUT _IOWR('D', 30, struct pfioc_tm)
+#define DIOCADDSTATE _IOWR('D', 37, struct pfioc_state)
+/* cut 38 */
+#define DIOCGETLIMIT _IOWR('D', 39, struct pfioc_limit)
+#define DIOCSETLIMIT _IOWR('D', 40, struct pfioc_limit)
+#define DIOCKILLSTATES _IOWR('D', 41, struct pfioc_state_kill)
+/* cut 42 - 57 */
+#define DIOCGETRULESETS _IOWR('D', 58, struct pfioc_ruleset)
+#define DIOCGETRULESET _IOWR('D', 59, struct pfioc_ruleset)
+#define DIOCRCLRTABLES _IOWR('D', 60, struct pfioc_table)
+#define DIOCRADDTABLES _IOWR('D', 61, struct pfioc_table)
+#define DIOCRDELTABLES _IOWR('D', 62, struct pfioc_table)
+#define DIOCRGETTABLES _IOWR('D', 63, struct pfioc_table)
+#define DIOCRGETTSTATS _IOWR('D', 64, struct pfioc_table)
+#define DIOCRCLRTSTATS _IOWR('D', 65, struct pfioc_table)
+#define DIOCRCLRADDRS _IOWR('D', 66, struct pfioc_table)
+#define DIOCRADDADDRS _IOWR('D', 67, struct pfioc_table)
+#define DIOCRDELADDRS _IOWR('D', 68, struct pfioc_table)
+#define DIOCRSETADDRS _IOWR('D', 69, struct pfioc_table)
+#define DIOCRGETADDRS _IOWR('D', 70, struct pfioc_table)
+#define DIOCRGETASTATS _IOWR('D', 71, struct pfioc_table)
+#define DIOCRCLRASTATS _IOWR('D', 72, struct pfioc_table)
+#define DIOCRTSTADDRS _IOWR('D', 73, struct pfioc_table)
+#define DIOCRSETTFLAGS _IOWR('D', 74, struct pfioc_table)
+#define DIOCRINADEFINE _IOWR('D', 77, struct pfioc_table)
+#define DIOCOSFPFLUSH _IO('D', 78)
+#define DIOCOSFPADD _IOWR('D', 79, struct pf_osfp_ioctl)
+#define DIOCOSFPGET _IOWR('D', 80, struct pf_osfp_ioctl)
+#define DIOCXBEGIN _IOWR('D', 81, struct pfioc_trans)
+#define DIOCXCOMMIT _IOWR('D', 82, struct pfioc_trans)
+#define DIOCXROLLBACK _IOWR('D', 83, struct pfioc_trans)
+#define DIOCGETSRCNODES _IOWR('D', 84, struct pfioc_src_nodes)
+#define DIOCCLRSRCNODES _IO('D', 85)
+#define DIOCSETHOSTID _IOWR('D', 86, u_int32_t)
+#define DIOCIGETIFACES _IOWR('D', 87, struct pfioc_iface)
+#define DIOCSETIFFLAG _IOWR('D', 89, struct pfioc_iface)
+#define DIOCCLRIFFLAG _IOWR('D', 90, struct pfioc_iface)
+#define DIOCKILLSRCNODES _IOWR('D', 91, struct pfioc_src_node_kill)
+#define DIOCSETREASS _IOWR('D', 92, u_int32_t)
+#define DIOCADDQUEUE _IOWR('D', 93, struct pfioc_queue)
+#define DIOCGETQUEUES _IOWR('D', 94, struct pfioc_queue)
+#define DIOCGETQUEUE _IOWR('D', 95, struct pfioc_queue)
+#define DIOCGETQSTATS _IOWR('D', 96, struct pfioc_qstats)
+#define DIOCSETSYNFLWATS _IOWR('D', 97, struct pfioc_synflwats)
+#define DIOCSETSYNCOOKIES _IOWR('D', 98, u_int8_t)
+#define DIOCGETSYNFLWATS _IOWR('D', 99, struct pfioc_synflwats)
+#define DIOCXEND _IOWR('D', 100, u_int32_t)
+#define DIOCADDSTATELIM _IOW('D', 101, struct pfioc_statelim)
+#define DIOCADDSOURCELIM _IOW('D', 102, struct pfioc_sourcelim)
+#define DIOCGETSTATELIM _IOWR('D', 103, struct pfioc_statelim)
+#define DIOCGETSOURCELIM _IOWR('D', 104, struct pfioc_sourcelim)
+#define DIOCGETSOURCE _IOWR('D', 105, struct pfioc_source)
+#define DIOCGETNSTATELIM _IOWR('D', 106, struct pfioc_statelim)
+#define DIOCGETNSOURCELIM _IOWR('D', 107, struct pfioc_sourcelim)
+#define DIOCGETNSOURCE _IOWR('D', 108, struct pfioc_source)
+#define DIOCCLRSOURCE _IOWR('D', 109, struct pfioc_source_kill)
+
+#ifdef _KERNEL
+
+struct pf_pdesc;
+
+RB_HEAD(pf_src_tree, pf_src_node);
+RB_PROTOTYPE(pf_src_tree, pf_src_node, entry, pf_src_compare);
+extern struct pf_src_tree tree_src_tracking;
+
+extern struct pf_state_list pf_state_list;
+
+TAILQ_HEAD(pf_queuehead, pf_queuespec);
+extern struct pf_queuehead pf_queues[2];
+extern struct pf_queuehead *pf_queues_active, *pf_queues_inactive;
+
+extern struct pool pf_src_tree_pl, pf_sn_item_pl, pf_rule_pl;
+extern struct pool pf_state_pl, pf_state_key_pl, pf_state_item_pl,
+ pf_rule_item_pl, pf_queue_pl,
+ pf_pktdelay_pl, pf_anchor_pl;
+extern struct pool pf_state_scrub_pl;
+extern struct pf_rule pf_default_rule;
+
+extern int pf_tbladdr_setup(struct pf_ruleset *,
+ struct pf_addr_wrap *, int);
+extern void pf_tbladdr_remove(struct pf_addr_wrap *);
+extern void pf_tbladdr_copyout(struct pf_addr_wrap *);
+extern void pf_calc_skip_steps(struct pf_rulequeue *);
+extern void pf_purge_expired_src_nodes(void);
+extern void pf_remove_state(struct pf_state *);
+extern void pf_remove_divert_state(struct inpcb *);
+extern void pf_free_state(struct pf_state *);
+int pf_insert_src_node(struct pf_src_node **,
+ struct pf_rule *, enum pf_sn_types,
+ sa_family_t, struct pf_addr *,
+ struct pf_addr *, struct pfi_kif *);
+void pf_remove_src_node(struct pf_src_node *);
+struct pf_src_node *pf_get_src_node(struct pf_state *,
+ enum pf_sn_types);
+void pf_src_tree_remove_state(struct pf_state *);
+void pf_state_rm_src_node(struct pf_state *,
+ struct pf_src_node *);
+
+extern struct pf_state *pf_find_state_byid(struct pf_state_cmp *);
+extern struct pf_state *pf_find_state_all(struct pf_state_key_cmp *,
+ u_int, int *);
+extern void pf_state_export(struct pfsync_state *,
+ struct pf_state *);
+int pf_state_import(const struct pfsync_state *,
+ int);
+int pf_state_alloc_scrub_memory(
+ const struct pfsync_state_peer *,
+ struct pf_state_peer *);
+extern void pf_print_state(struct pf_state *);
+extern void pf_print_flags(u_int8_t);
+extern void pf_addrcpy(struct pf_addr *, struct pf_addr *,
+ sa_family_t);
+extern void pf_cksum_fixup(u_int16_t *, u_int16_t,
+ u_int16_t, u_int8_t);
+void pf_rm_rule(struct pf_rulequeue *,
+ struct pf_rule *);
+struct pf_divert *pf_find_divert(struct mbuf *);
+int pf_setup_pdesc(struct pf_pdesc *, sa_family_t,
+ int, struct pfi_kif *, struct mbuf *,
+ u_short *);
+
+int pf_test(sa_family_t, int, struct ifnet *, struct mbuf **);
+
+void pf_poolmask(struct pf_addr *, struct pf_addr*,
+ struct pf_addr *, struct pf_addr *, sa_family_t);
+void pf_addr_inc(struct pf_addr *, sa_family_t);
+
+void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, sa_family_t);
+#define PF_HI (true)
+#define PF_LO (!PF_HI)
+#define PF_ALGNMNT(off) (((off) % 2) == 0 ? PF_HI : PF_LO)
+int pf_patch_8(struct pf_pdesc *, u_int8_t *, u_int8_t, bool);
+int pf_patch_16(struct pf_pdesc *, u_int16_t *, u_int16_t);
+int pf_patch_16_unaligned(struct pf_pdesc *, void *, u_int16_t, bool);
+int pf_patch_32(struct pf_pdesc *, u_int32_t *, u_int32_t);
+int pf_patch_32_unaligned(struct pf_pdesc *, void *, u_int32_t, bool);
+int pflog_packet(struct pf_pdesc *, u_int8_t, struct pf_rule *,
+ struct pf_rule *, struct pf_ruleset *, struct pf_rule *);
+int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *,
+ struct pf_addr *, sa_family_t);
+int pf_match_addr_range(struct pf_addr *, struct pf_addr *,
+ struct pf_addr *, sa_family_t);
+int pf_match(u_int8_t, u_int32_t, u_int32_t, u_int32_t);
+int pf_match_port(u_int8_t, u_int16_t, u_int16_t, u_int16_t);
+int pf_match_uid(u_int8_t, uid_t, uid_t, uid_t);
+int pf_match_gid(u_int8_t, gid_t, gid_t, gid_t);
+
+struct pf_state_scrub *
+ pf_state_scrub_get(void);
+void pf_state_scrub_put(struct pf_state_scrub *);
+
+int pf_refragment6(struct mbuf **, struct m_tag *mtag,
+ struct sockaddr_in6 *, struct ifnet *, struct rtentry *);
+void pf_normalize_init(void);
+int pf_normalize_ip(struct pf_pdesc *, u_short *);
+int pf_normalize_ip6(struct pf_pdesc *, u_short *);
+int pf_normalize_tcp(struct pf_pdesc *);
+void pf_normalize_tcp_cleanup(struct pf_state *);
+int pf_normalize_tcp_init(struct pf_pdesc *, struct pf_state_peer *);
+int pf_normalize_tcp_alloc(struct pf_state_peer *);
+int pf_normalize_tcp_stateful(struct pf_pdesc *, u_short *,
+ struct pf_state *, struct pf_state_peer *, struct pf_state_peer *,
+ int *);
+int pf_normalize_mss(struct pf_pdesc *, u_int16_t);
+void pf_scrub(struct mbuf *, u_int16_t, sa_family_t, u_int8_t, u_int8_t);
+void pf_purge_expired_fragments(void);
+int pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *,
+ int);
+int pf_rtlabel_match(struct pf_addr *, sa_family_t, struct pf_addr_wrap *,
+ int);
+int pf_socket_lookup(struct pf_pdesc *);
+struct pf_state_key *pf_alloc_state_key(int);
+int pf_ouraddr(struct mbuf *);
+void pf_pkt_addr_changed(struct mbuf *);
+struct inpcb *pf_inp_lookup(struct mbuf *);
+void pf_inp_link(struct mbuf *, struct inpcb *);
+void pf_inp_unlink(struct inpcb *);
+int pf_translate(struct pf_pdesc *, struct pf_addr *, u_int16_t,
+ struct pf_addr *, u_int16_t, u_int16_t, int);
+int pf_translate_af(struct pf_pdesc *);
+void pf_route(struct pf_pdesc *, struct pf_state *);
+void pf_route6(struct pf_pdesc *, struct pf_state *);
+void pf_init_threshold(struct pf_threshold *, u_int32_t, u_int32_t);
+int pf_delay_pkt(struct mbuf *, u_int);
+
+void pfr_initialize(void);
+int pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t);
+void pfr_update_stats(struct pfr_ktable *, struct pf_addr *,
+ struct pf_pdesc *, int, int);
+int pfr_pool_get(struct pf_pool *, struct pf_addr **,
+ struct pf_addr **, sa_family_t);
+int pfr_states_increase(struct pfr_ktable *, struct pf_addr *, int);
+int pfr_states_decrease(struct pfr_ktable *, struct pf_addr *, int);
+struct pfr_kentry *
+ pfr_kentry_byaddr(struct pfr_ktable *, struct pf_addr *, sa_family_t,
+ int);
+void pfr_dynaddr_update(struct pfr_ktable *, struct pfi_dynaddr *);
+struct pfr_ktable *
+ pfr_attach_table(struct pf_ruleset *, char *, int);
+void pfr_detach_table(struct pfr_ktable *);
+int pfr_clr_tables(struct pfr_table *, int *, int);
+int pfr_add_tables(struct pfr_table *, int, int *, int);
+int pfr_del_tables(struct pfr_table *, int, int *, int);
+int pfr_get_tables(struct pfr_table *, struct pfr_table *, int *, int);
+int pfr_get_tstats(struct pfr_table *, struct pfr_tstats *, int *, int);
+int pfr_clr_tstats(struct pfr_table *, int, int *, int);
+int pfr_set_tflags(struct pfr_table *, int, int, int, int *, int *, int);
+int pfr_clr_addrs(struct pfr_table *, int *, int);
+int pfr_insert_kentry(struct pfr_ktable *, struct pfr_addr *, time_t);
+int pfr_remove_kentry(struct pfr_ktable *, struct pfr_addr *);
+
+int pfr_add_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
+ int);
+int pfr_del_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
+ int);
+int pfr_set_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
+ int *, int *, int *, int, u_int32_t);
+int pfr_get_addrs(struct pfr_table *, struct pfr_addr *, int *, int);
+int pfr_get_astats(struct pfr_table *, struct pfr_astats *, int *, int);
+int pfr_clr_astats(struct pfr_table *, struct pfr_addr *, int, int *,
+ int);
+int pfr_tst_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
+ int);
+int pfr_ina_begin(struct pfr_table *, u_int32_t *, int *, int);
+int pfr_ina_rollback(struct pfr_table *, u_int32_t, int *, int);
+int pfr_ina_commit(struct pfr_table *, u_int32_t, int *, int *, int);
+int pfr_ina_define(struct pfr_table *, struct pfr_addr *, int, int *,
+ int *, u_int32_t, int);
+struct pfr_ktable
+ *pfr_ktable_select_active(struct pfr_ktable *);
+
+extern struct pfi_kif *pfi_all;
+
+void pfi_initialize(void);
+struct pfi_kif *pfi_kif_alloc(const char *, int);
+void pfi_kif_free(struct pfi_kif *);
+struct pfi_kif *pfi_kif_find(const char *);
+struct pfi_kif *pfi_kif_get(const char *, struct pfi_kif **);
+void pfi_kif_ref(struct pfi_kif *, enum pfi_kif_refs);
+void pfi_kif_unref(struct pfi_kif *, enum pfi_kif_refs);
+int pfi_kif_match(struct pfi_kif *, struct pfi_kif *);
+void pfi_attach_ifnet(struct ifnet *);
+void pfi_detach_ifnet(struct ifnet *);
+void pfi_attach_ifgroup(struct ifg_group *);
+void pfi_detach_ifgroup(struct ifg_group *);
+void pfi_group_addmember(const char *);
+void pfi_group_delmember(const char *);
+int pfi_match_addr(struct pfi_dynaddr *, struct pf_addr *,
+ sa_family_t);
+int pfi_dynaddr_setup(struct pf_addr_wrap *, sa_family_t, int);
+void pfi_dynaddr_remove(struct pf_addr_wrap *);
+void pfi_dynaddr_copyout(struct pf_addr_wrap *);
+void pfi_update_status(const char *, struct pf_status *);
+void pfi_get_ifaces(const char *, struct pfi_kif *, int *);
+int pfi_set_flags(const char *, int);
+int pfi_clear_flags(const char *, int);
+void pfi_xcommit(void);
+
+int pf_match_tag(struct mbuf *, struct pf_rule *, int *);
+u_int16_t pf_tagname2tag(char *, int);
+void pf_tag2tagname(u_int16_t, char *);
+void pf_tag_ref(u_int16_t);
+void pf_tag_unref(u_int16_t);
+void pf_tag_packet(struct mbuf *, int, int);
+int pf_addr_compare(const struct pf_addr *,
+ const struct pf_addr *, sa_family_t);
+
+const struct pfq_ops
+ *pf_queue_manager(struct pf_queuespec *);
+
+extern struct pf_status pf_status;
+extern struct pool pf_frent_pl, pf_frag_pl;
+
+/*
+ * Protection/ownership of pf_pool_limit:
+ * I immutable after pfattach()
+ * p pf_lock
+ */
+
+struct pf_pool_limit {
+ void *pp; /* [I] */
+ unsigned limit; /* [p] */
+ unsigned limit_new; /* [p] */
+};
+extern struct pf_pool_limit pf_pool_limits[PF_LIMIT_MAX];
+
+#endif /* _KERNEL */
+
+extern struct pf_anchor_global pf_anchors;
+extern struct pf_anchor pf_main_anchor;
+#define pf_main_ruleset pf_main_anchor.ruleset
+
+struct tcphdr;
+
+/* these ruleset functions can be linked into userland programs (pfctl) */
+void pf_init_ruleset(struct pf_ruleset *);
+int pf_anchor_setup(struct pf_rule *,
+ const struct pf_ruleset *, const char *);
+int pf_anchor_copyout(const struct pf_ruleset *,
+ const struct pf_rule *, struct pfioc_rule *);
+void pf_remove_anchor(struct pf_rule *);
+void pf_remove_if_empty_ruleset(struct pf_ruleset *);
+struct pf_anchor *pf_find_anchor(const char *);
+struct pf_ruleset *pf_find_ruleset(const char *);
+struct pf_ruleset *pf_get_leaf_ruleset(char *, char **);
+struct pf_anchor *pf_create_anchor(struct pf_anchor *, const char *);
+struct pf_ruleset *pf_find_or_create_ruleset(const char *);
+void pf_anchor_rele(struct pf_anchor *);
+struct pf_anchor *pf_anchor_take(struct pf_anchor *);
+
+/* The fingerprint functions can be linked into userland programs (tcpdump) */
+int pf_osfp_add(struct pf_osfp_ioctl *);
+#ifdef _KERNEL
+struct pf_osfp_enlist *
+ pf_osfp_fingerprint(struct pf_pdesc *);
+#endif /* _KERNEL */
+struct pf_osfp_enlist *
+ pf_osfp_fingerprint_hdr(const struct ip *, const struct ip6_hdr *,
+ const struct tcphdr *);
+void pf_osfp_flush(void);
+int pf_osfp_get(struct pf_osfp_ioctl *);
+void pf_osfp_initialize(void);
+int pf_osfp_match(struct pf_osfp_enlist *, pf_osfp_t);
+struct pf_os_fingerprint *
+ pf_osfp_validate(void);
+
+#ifdef _KERNEL
+void pf_print_host(struct pf_addr *, u_int16_t,
+ sa_family_t);
+int pf_get_transaddr(struct pf_rule *, struct pf_pdesc *,
+ struct pf_src_node **, struct pf_rule **);
+int pf_map_addr(sa_family_t, struct pf_rule *,
+ struct pf_addr *, struct pf_addr *,
+ struct pf_addr *, struct pf_src_node **,
+ struct pf_pool *, enum pf_sn_types);
+int pf_postprocess_addr(struct pf_state *);
+
+void pf_mbuf_link_state_key(struct mbuf *,
+ struct pf_state_key *);
+void pf_mbuf_unlink_state_key(struct mbuf *);
+void pf_mbuf_link_inpcb(struct mbuf *, struct inpcb *);
+void pf_mbuf_unlink_inpcb(struct mbuf *);
+
+u_int8_t* pf_find_tcpopt(u_int8_t *, u_int8_t *, size_t,
+ u_int8_t, u_int8_t);
+u_int8_t pf_get_wscale(struct pf_pdesc *);
+u_int16_t pf_get_mss(struct pf_pdesc *, uint16_t);
+struct mbuf * pf_build_tcp(const struct pf_rule *, sa_family_t,
+ const struct pf_addr *, const struct pf_addr *,
+ u_int16_t, u_int16_t, u_int32_t, u_int32_t,
+ u_int8_t, u_int16_t, u_int16_t, u_int8_t, int,
+ u_int16_t, u_int, u_int, u_short *);
+void pf_send_tcp(const struct pf_rule *, sa_family_t,
+ const struct pf_addr *, const struct pf_addr *,
+ u_int16_t, u_int16_t, u_int32_t, u_int32_t,
+ u_int8_t, u_int16_t, u_int16_t, u_int8_t, int,
+ u_int16_t, u_int, u_short *);
+void pf_syncookies_init(void);
+int pf_syncookies_setmode(u_int8_t);
+int pf_syncookies_setwats(u_int32_t, u_int32_t);
+int pf_syncookies_getwats(struct pfioc_synflwats *);
+int pf_synflood_check(struct pf_pdesc *);
+void pf_syncookie_send(struct pf_pdesc *, u_short *);
+u_int8_t pf_syncookie_validate(struct pf_pdesc *);
+struct mbuf * pf_syncookie_recreate_syn(struct pf_pdesc *,
+ u_short *);
+#endif /* _KERNEL */
+
+#endif /* _NET_PFVAR_H_ */
diff --git a/module/include/net/pfvar_priv.h b/module/include/net/pfvar_priv.h
new file mode 100644
index 0000000..d8bc3cb
--- /dev/null
+++ b/module/include/net/pfvar_priv.h
@@ -0,0 +1,689 @@
+/* $OpenBSD: pfvar_priv.h,v 1.43 2026/09/10 12:28:04 deraadt Exp $ */
+
+/*
+ * Copyright (c) 2001 Daniel Hartmeier
+ * Copyright (c) 2002 - 2013 Henning Brauer
+ * Copyright (c) 2016 Alexander Bluhm
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ */
+
+#ifndef _NET_PFVAR_PRIV_H_
+#define _NET_PFVAR_PRIV_H_
+
+#ifdef _KERNEL
+
+#include
+#include
+#include
+#include
+
+/*
+ * Locks used to protect struct members in this file:
+ * L pf_inp_mtx link pf to inp mutex
+ */
+
+struct pfsync_deferral;
+struct kstat;
+
+/*
+ * PF state links
+ *
+ * This is used to augment a struct pf_state so it can be
+ * tracked/referenced by the state and source address limiter things.
+ * Each limiter maintains a list of the states they "own", and these
+ * state links are what the limiters use to wire a state into their
+ * lists.
+ *
+ * Without PF state links, the pf_state struct would have to grow
+ * a lot to support a feature that may not be used.
+ *
+ * pfl_entry is used by the pools to add states to their list.
+ * pfl_state allows the pools to get from their list of states to
+ * the states themselves.
+ *
+ * pfl_link allows operations on states (well, delete) to be able
+ * to quickly locate the pf_state_link struct so they can be unwired
+ * from the pools.
+ */
+
+#define PF_STATE_LINK_TYPE_STATELIM 1
+#define PF_STATE_LINK_TYPE_SOURCELIM 2
+
+struct pf_state_link {
+ /* used by source/state pools to get to states */
+ TAILQ_ENTRY(pf_state_link) pfl_link;
+
+ /* used by pf_state to get to source/state pools */
+ SLIST_ENTRY(pf_state_link) pfl_linkage;
+
+ struct pf_state *pfl_state;
+ unsigned int pfl_type;
+};
+
+TAILQ_HEAD(pf_state_link_list, pf_state_link);
+SLIST_HEAD(pf_state_linkage, pf_state_link);
+
+/*
+ * pf state items - links from pf_state_key to pf_states
+ */
+
+struct pf_state_item {
+ TAILQ_ENTRY(pf_state_item)
+ si_entry;
+ struct pf_state *si_st;
+};
+
+TAILQ_HEAD(pf_statelisthead, pf_state_item);
+
+/*
+ * pf state keys - look up states by address
+ */
+
+struct pf_state_key {
+ struct pf_addr addr[2];
+ u_int16_t port[2];
+ u_int16_t rdomain;
+ u_int16_t hash;
+ sa_family_t af;
+ u_int8_t proto;
+
+ RBT_ENTRY(pf_state_key) sk_entry;
+ struct pf_statelisthead sk_states;
+ struct pf_state_key *sk_reverse;
+ struct inpcb *sk_inp; /* [L] */
+ pf_refcnt_t sk_refcnt;
+ u_int8_t sk_removed;
+};
+
+RBT_HEAD(pf_state_tree, pf_state_key);
+RBT_PROTOTYPE(pf_state_tree, pf_state_key, sk_entry, pf_state_compare_key);
+
+#define PF_REVERSED_KEY(key, family) \
+ ((key[PF_SK_WIRE]->af != key[PF_SK_STACK]->af) && \
+ (key[PF_SK_WIRE]->af != (family)))
+
+/*
+ * pf state
+ *
+ * Protection/ownership of pf_state members:
+ * I immutable after pf_state_insert()
+ * M pf_state mtx
+ * P PF_STATE_LOCK
+ * S pfsync
+ * L pf_state_list
+ * g pf_purge gc
+ */
+
+struct pf_state {
+ u_int64_t id; /* [I] */
+ u_int32_t creatorid; /* [I] */
+ u_int8_t direction; /* [I] */
+ u_int8_t pad[3];
+
+ TAILQ_ENTRY(pf_state) sync_list; /* [S] */
+ struct pfsync_deferral *sync_defer; /* [S] */
+ TAILQ_ENTRY(pf_state) entry_list; /* [L] */
+ SLIST_ENTRY(pf_state) gc_list; /* [g] */
+ RBT_ENTRY(pf_state) entry_id; /* [P] */
+ struct pf_state_peer src;
+ struct pf_state_peer dst;
+ struct pf_rule_slist match_rules; /* [I] */
+ union pf_rule_ptr rule; /* [I] */
+ union pf_rule_ptr anchor; /* [I] */
+ union pf_rule_ptr natrule; /* [I] */
+ struct pf_addr rt_addr; /* [I] */
+ struct pf_sn_head src_nodes; /* [I] */
+ struct pf_state_key *key[2]; /* [I] stack and wire */
+ struct pfi_kif *kif; /* [I] */
+ struct mutex mtx;
+ pf_refcnt_t refcnt;
+ u_int64_t packets[2];
+ u_int64_t bytes[2];
+ int32_t creation; /* [I] */
+ int32_t expire;
+ int32_t pfsync_time; /* [S] */
+ int rtableid[2]; /* [I] stack and wire */
+ u_int16_t qid; /* [I] */
+ u_int16_t pqid; /* [I] */
+ u_int16_t tag; /* [I] */
+ u_int16_t state_flags; /* [M] */
+ u_int8_t log; /* [I] */
+ u_int8_t timeout;
+ u_int8_t sync_state; /* [S] PFSYNC_S_x */
+ u_int8_t sync_updates; /* [S] */
+ u_int8_t min_ttl; /* [I] */
+ u_int8_t set_tos; /* [I] */
+ u_int8_t set_prio[2]; /* [I] */
+ u_int16_t max_mss; /* [I] */
+ u_int16_t if_index_in; /* [I] */
+ u_int16_t if_index_out; /* [I] */
+ u_int16_t delay; /* [I] */
+ u_int8_t rt; /* [I] */
+ uint8_t statelim;
+ uint8_t sourcelim;
+ struct pf_state_linkage linkage;
+};
+
+RBT_HEAD(pf_state_tree_id, pf_state);
+RBT_PROTOTYPE(pf_state_tree_id, pf_state, entry_id, pf_state_compare_id);
+extern struct pf_state_tree_id tree_id;
+
+/*
+ * states are linked into a global list to support the following
+ * functionality:
+ *
+ * - garbage collection
+ * - pfsync bulk send operations
+ * - bulk state fetches via the DIOCGETSTATES ioctl
+ * - bulk state clearing via the DIOCCLRSTATES ioctl
+ *
+ * states are inserted into the global pf_state_list once it has also
+ * been successfully added to the various trees that make up the state
+ * table. states are only removed from the pf_state_list by the garbage
+ * collection process.
+ *
+ * the pf_state_list head and tail pointers (ie, the pfs_list TAILQ_HEAD
+ * structure) and the pointers between the entries on the pf_state_list
+ * are locked separately. at a high level, this allows for insertion
+ * of new states into the pf_state_list while other contexts (eg, the
+ * ioctls) are traversing the state items in the list. for garbage
+ * collection to remove items from the pf_state_list, it has to exclude
+ * both modifications to the list head and tail pointers, and traversal
+ * of the links between the states.
+ *
+ * the head and tail pointers are protected by a mutex. the pointers
+ * between states are protected by an rwlock.
+ *
+ * because insertions are only made to the end of the list, if we get
+ * a snapshot of the head and tail of the list and prevent modifications
+ * to the links between states, we can safely traverse between the
+ * head and tail entries. subsequent insertions can add entries after
+ * our view of the tail, but we don't look past our view.
+ *
+ * if both locks must be taken, the rwlock protecting the links between
+ * states is taken before the mutex protecting the head and tail
+ * pointer.
+ *
+ * insertion into the list follows this pattern:
+ *
+ * // serialise list head/tail modifications
+ * mtx_enter(&pf_state_list.pfs_mtx);
+ * TAILQ_INSERT_TAIL(&pf_state_list.pfs_list, state, entry_list);
+ * mtx_leave(&pf_state_list.pfs_mtx);
+ *
+ * traversal of the list:
+ *
+ * // lock against the gc removing an item from the list
+ * rw_enter_read(&pf_state_list.pfs_rwl);
+ *
+ * // get a snapshot view of the ends of the list
+ * mtx_enter(&pf_state_list.pfs_mtx);
+ * head = TAILQ_FIRST(&pf_state_list.pfs_list);
+ * tail = TAILQ_LAST(&pf_state_list.pfs_list, pf_state_queue);
+ * mtx_leave(&pf_state_list.pfs_mtx);
+ *
+ * state = NULL;
+ * next = head;
+ *
+ * while (state != tail) {
+ * state = next;
+ * next = TAILQ_NEXT(state, entry_list);
+ *
+ * // look at the state
+ * }
+ *
+ * rw_exit_read(&pf_state_list.pfs_rwl);
+ *
+ * removing an item from the list:
+ *
+ * // wait for iterators (readers) to get out
+ * rw_enter_write(&pf_state_list.pfs_rwl);
+ *
+ * // serialise list head/tail modifications
+ * mtx_enter(&pf_state_list.pfs_mtx);
+ * TAILQ_REMOVE(&pf_state_list.pfs_list, state, entry_list);
+ * mtx_leave(&pf_state_list.pfs_mtx);
+ *
+ * rw_exit_write(&pf_state_list.pfs_rwl);
+ *
+ * the lock ordering for pf_state_list locks and the rest of the pf
+ * locks are:
+ *
+ * 1. KERNEL_LOCK
+ * 2. NET_LOCK
+ * 3. pf_state_list.pfs_rwl
+ * 4. PF_LOCK
+ * 5. PF_STATE_LOCK
+ * 6. pf_state_list.pfs_mtx
+ */
+
+struct pf_state_list {
+ /* the list of states in the system */
+ struct pf_state_queue pfs_list;
+
+ /* serialise pfs_list head/tail access */
+ struct mutex pfs_mtx;
+
+ /* serialise access to pointers between pfs_list entries */
+ struct rwlock pfs_rwl;
+};
+
+#define PF_STATE_LIST_INITIALIZER(_pfs) { \
+ .pfs_list = TAILQ_HEAD_INITIALIZER(_pfs.pfs_list), \
+ .pfs_mtx = MUTEX_INITIALIZER(IPL_SOFTNET), \
+ .pfs_rwl = RWLOCK_INITIALIZER("pfstates"), \
+}
+
+/*
+ * State limiter
+ */
+
+struct pf_statelim {
+ RBT_ENTRY(pf_statelim) pfstlim_id_tree;
+ RBT_ENTRY(pf_statelim) pfstlim_nm_tree;
+ TAILQ_ENTRY(pf_statelim) pfstlim_list;
+ struct kstat *pfstlim_ks;
+
+ uint32_t pfstlim_id;
+ char pfstlim_nm[PF_STATELIM_NAME_LEN];
+
+ /* config */
+
+ unsigned int pfstlim_limit;
+ struct {
+ unsigned int limit;
+ unsigned int seconds;
+ } pfstlim_rate;
+
+ /* run state */
+ struct pc_lock pfstlim_lock;
+
+ /* rate limiter */
+ uint64_t pfstlim_rate_ts;
+ uint64_t pfstlim_rate_token;
+ uint64_t pfstlim_rate_bucket;
+
+ unsigned int pfstlim_inuse;
+ struct pf_state_link_list pfstlim_states;
+
+ /* counters */
+
+ struct {
+ uint64_t admitted;
+ uint64_t hardlimited;
+ uint64_t ratelimited;
+ } pfstlim_counters;
+
+ struct {
+ time_t created;
+ time_t updated;
+ time_t cleared;
+ } pfstlim_timestamps;
+};
+
+RBT_HEAD(pf_statelim_id_tree, pf_statelim);
+RBT_PROTOTYPE(pf_statelim_id_tree, pf_statelim, pfstlim_id_tree, cmp);
+
+RBT_HEAD(pf_statelim_nm_tree, pf_statelim);
+RBT_PROTOTYPE(pf_statelim_nm_tree, pf_statelim, pfstlim_nm_tree, cmp);
+
+TAILQ_HEAD(pf_statelim_list, pf_statelim);
+
+extern struct pf_statelim_id_tree pf_statelim_id_tree_active;
+extern struct pf_statelim_list pf_statelim_list_active;
+
+extern struct pf_statelim_id_tree pf_statelim_id_tree_inactive;
+extern struct pf_statelim_nm_tree pf_statelim_nm_tree_inactive;
+extern struct pf_statelim_list pf_statelim_list_inactive;
+
+static inline unsigned int
+pf_statelim_enter(struct pf_statelim *pfstlim)
+{
+ return (pc_sprod_enter(&pfstlim->pfstlim_lock));
+}
+
+static inline void
+pf_statelim_leave(struct pf_statelim *pfstlim, unsigned int gen)
+{
+ pc_sprod_leave(&pfstlim->pfstlim_lock, gen);
+}
+
+/*
+ * Source address pools
+ */
+
+struct pf_sourcelim;
+
+struct pf_source {
+ RBT_ENTRY(pf_source) pfsr_tree;
+ RBT_ENTRY(pf_source) pfsr_ioc_tree;
+ struct pf_sourcelim *pfsr_parent;
+
+ sa_family_t pfsr_af;
+ u_int16_t pfsr_rdomain;
+ struct pf_addr pfsr_addr;
+
+ /* run state */
+
+ unsigned int pfsr_inuse;
+ unsigned int pfsr_intable;
+ struct pf_state_link_list pfsr_states;
+ time_t pfsr_empty_ts;
+ TAILQ_ENTRY(pf_source) pfsr_empty_gc;
+
+ /* rate limiter */
+ uint64_t pfsr_rate_ts;
+
+ struct {
+ uint64_t admitted;
+ uint64_t hardlimited;
+ uint64_t ratelimited;
+ } pfsr_counters;
+};
+
+RBT_HEAD(pf_source_tree, pf_source);
+RBT_PROTOTYPE(pf_source_tree, pf_source, pfsr_tree, cmp);
+
+RBT_HEAD(pf_source_ioc_tree, pf_source);
+RBT_PROTOTYPE(pf_source_ioc_tree, pf_source, pfsr_ioc_tree, cmp);
+
+TAILQ_HEAD(pf_source_list, pf_source);
+
+struct pf_sourcelim {
+ RBT_ENTRY(pf_sourcelim) pfsrlim_id_tree;
+ RBT_ENTRY(pf_sourcelim) pfsrlim_nm_tree;
+ TAILQ_ENTRY(pf_sourcelim) pfsrlim_list;
+ struct kstat *pfsrlim_ks;
+
+ uint32_t pfsrlim_id;
+ char pfsrlim_nm[PF_SOURCELIM_NAME_LEN];
+ unsigned int pfsrlim_disabled;
+
+ /* config */
+
+ unsigned int pfsrlim_entries;
+ unsigned int pfsrlim_limit;
+ unsigned int pfsrlim_ipv4_prefix;
+ unsigned int pfsrlim_ipv6_prefix;
+
+ struct {
+ unsigned int limit;
+ unsigned int seconds;
+ } pfsrlim_rate;
+
+ struct {
+ char name[PF_TABLE_NAME_SIZE];
+ unsigned int hwm;
+ unsigned int lwm;
+ struct pfr_ktable *table;
+ } pfsrlim_overload;
+
+ /* run state */
+ struct pc_lock pfsrlim_lock;
+
+ struct pf_addr pfsrlim_ipv4_mask;
+ struct pf_addr pfsrlim_ipv6_mask;
+
+ uint64_t pfsrlim_rate_token;
+ uint64_t pfsrlim_rate_bucket;
+
+ /* number of pf_sources */
+ unsigned int pfsrlim_nsources;
+ struct pf_source_tree pfsrlim_sources;
+ struct pf_source_ioc_tree pfsrlim_ioc_sources;
+
+ struct {
+ /* number of times pf_source was allocated */
+ uint64_t addrallocs;
+ /* state was rejected because the address limit was hit */
+ uint64_t addrlimited;
+ /* no memory to create address thing */
+ uint64_t addrnomem;
+
+ /* sum of pf_source inuse gauges */
+ uint64_t inuse;
+ /* sum of pf_source admitted counters */
+ uint64_t admitted;
+ /* sum of pf_source hardlimited counters */
+ uint64_t hardlimited;
+ /* sum of pf_source ratelimited counters */
+ uint64_t ratelimited;
+ } pfsrlim_counters;
+};
+
+RBT_HEAD(pf_sourcelim_id_tree, pf_sourcelim);
+RBT_PROTOTYPE(pf_sourcelim_id_tree, pf_sourcelim, pfsrlim_id_tree, cmp);
+
+RBT_HEAD(pf_sourcelim_nm_tree, pf_sourcelim);
+RBT_PROTOTYPE(pf_sourcelim_nm_tree, pf_sourcelim, pfsrlim_nm_tree, cmp);
+
+TAILQ_HEAD(pf_sourcelim_list, pf_sourcelim);
+
+extern struct pf_sourcelim_id_tree pf_sourcelim_id_tree_active;
+extern struct pf_sourcelim_list pf_sourcelim_list_active;
+
+extern struct pf_sourcelim_id_tree pf_sourcelim_id_tree_inactive;
+extern struct pf_sourcelim_nm_tree pf_sourcelim_nm_tree_inactive;
+extern struct pf_sourcelim_list pf_sourcelim_list_inactive;
+
+static inline unsigned int
+pf_sourcelim_enter(struct pf_sourcelim *pfsrlim)
+{
+ return (pc_sprod_enter(&pfsrlim->pfsrlim_lock));
+}
+
+static inline void
+pf_sourcelim_leave(struct pf_sourcelim *pfsrlim, unsigned int gen)
+{
+ pc_sprod_leave(&pfsrlim->pfsrlim_lock, gen);
+}
+
+/*
+ * pf internals
+ */
+
+extern struct rwlock pf_lock;
+
+struct pf_pdesc {
+ struct {
+ int done;
+ uid_t uid;
+ gid_t gid;
+ pid_t pid;
+ } lookup;
+ u_int64_t tot_len; /* Make Mickey money */
+
+ struct pf_addr nsaddr; /* src address after NAT */
+ struct pf_addr ndaddr; /* dst address after NAT */
+
+ struct pfi_kif *kif; /* incoming interface */
+ struct mbuf *m; /* mbuf containing the packet */
+ struct pf_addr *src; /* src address */
+ struct pf_addr *dst; /* dst address */
+ u_int16_t *pcksum; /* proto cksum */
+ u_int16_t *sport;
+ u_int16_t *dport;
+ u_int16_t osport;
+ u_int16_t odport;
+ u_int16_t hash;
+ u_int16_t nsport; /* src port after NAT */
+ u_int16_t ndport; /* dst port after NAT */
+
+ u_int32_t off; /* protocol header offset */
+ u_int32_t hdrlen; /* protocol header length */
+ u_int32_t p_len; /* length of protocol payload */
+ u_int32_t extoff; /* extension header offset */
+ u_int32_t fragoff; /* fragment header offset */
+ u_int32_t jumbolen; /* length from v6 jumbo header */
+ u_int32_t badopts; /* v4 options or v6 routing headers */
+#define PF_OPT_OTHER 0x0001
+#define PF_OPT_JUMBO 0x0002
+#define PF_OPT_ROUTER_ALERT 0x0004
+
+ u_int16_t rdomain; /* original routing domain */
+ u_int16_t virtual_proto;
+#define PF_VPROTO_FRAGMENT 256
+ sa_family_t af;
+ sa_family_t naf;
+ u_int8_t proto;
+ u_int8_t tos;
+ u_int8_t ttl;
+ u_int8_t dir; /* direction */
+ u_int8_t sidx; /* key index for source */
+ u_int8_t didx; /* key index for destination */
+ u_int8_t destchg; /* flag set when destination changed */
+ u_int8_t pflog; /* flags for packet logging */
+ union {
+ struct tcphdr tcp;
+ struct udphdr udp;
+ struct icmp icmp;
+#ifdef INET6
+ struct icmp6_hdr icmp6;
+ struct mld_hdr mld;
+ struct nd_neighbor_solicit nd_ns;
+#endif /* INET6 */
+ } hdr;
+};
+
+struct pf_anchor_stackframe {
+ struct pf_ruleset *sf_rs;
+ struct pf_rule *sf_anchor;
+ union {
+ struct pf_rule *u_r;
+ struct pf_anchor_stackframe *u_stack_top;
+ } u;
+ struct pf_anchor *sf_child;
+ int sf_jump_target;
+};
+#define sf_r u.u_r
+#define sf_stack_top u.u_stack_top
+enum {
+ PF_NEXT_RULE,
+ PF_NEXT_CHILD
+};
+
+extern struct cpumem *pf_anchor_stack;
+
+enum pf_trans_type {
+ PF_TRANS_NONE,
+ PF_TRANS_GETRULE,
+ PF_TRANS_MAX
+};
+
+struct pf_trans {
+ LIST_ENTRY(pf_trans) pft_entry;
+ uint32_t pft_unit; /* process id */
+ uint64_t pft_ticket;
+ enum pf_trans_type pft_type;
+ union {
+ struct {
+ u_int32_t gr_version;
+ struct pf_anchor *gr_anchor;
+ struct pf_rule *gr_rule;
+ } u_getrule;
+ } u;
+};
+
+#define pftgr_version u.u_getrule.gr_version
+#define pftgr_anchor u.u_getrule.gr_anchor
+#define pftgr_rule u.u_getrule.gr_rule
+
+extern struct timeout pf_purge_states_to;
+extern struct task pf_purge_task;
+extern struct timeout pf_purge_to;
+
+struct pf_state *pf_state_ref(struct pf_state *);
+void pf_state_unref(struct pf_state *);
+
+extern struct rwlock pf_lock;
+extern struct rwlock pf_state_lock;
+extern struct mutex pf_frag_mtx;
+extern struct mutex pf_inp_mtx;
+
+#define PF_LOCK() do { \
+ rw_enter_write(&pf_lock); \
+ } while (0)
+
+#define PF_UNLOCK() do { \
+ PF_ASSERT_LOCKED(); \
+ rw_exit_write(&pf_lock); \
+ } while (0)
+
+#define PF_ASSERT_LOCKED() do { \
+ if (rw_status(&pf_lock) != RW_WRITE) \
+ splassert_fail(RW_WRITE, \
+ rw_status(&pf_lock),__func__);\
+ } while (0)
+
+#define PF_ASSERT_UNLOCKED() do { \
+ if (rw_status(&pf_lock) == RW_WRITE) \
+ splassert_fail(0, rw_status(&pf_lock), __func__);\
+ } while (0)
+
+#define PF_STATE_ENTER_READ() do { \
+ rw_enter_read(&pf_state_lock); \
+ } while (0)
+
+#define PF_STATE_EXIT_READ() do { \
+ rw_exit_read(&pf_state_lock); \
+ } while (0)
+
+#define PF_STATE_ENTER_WRITE() do { \
+ rw_enter_write(&pf_state_lock); \
+ } while (0)
+
+#define PF_STATE_EXIT_WRITE() do { \
+ PF_STATE_ASSERT_LOCKED(); \
+ rw_exit_write(&pf_state_lock); \
+ } while (0)
+
+#define PF_STATE_ASSERT_LOCKED() do { \
+ if (rw_status(&pf_state_lock) != RW_WRITE)\
+ splassert_fail(RW_WRITE, \
+ rw_status(&pf_state_lock), __func__);\
+ } while (0)
+
+#define PF_FRAG_LOCK() mtx_enter(&pf_frag_mtx)
+#define PF_FRAG_UNLOCK() mtx_leave(&pf_frag_mtx)
+
+/* for copies to/from network byte order */
+void pf_state_peer_hton(const struct pf_state_peer *,
+ struct pfsync_state_peer *);
+void pf_state_peer_ntoh(const struct pfsync_state_peer *,
+ struct pf_state_peer *);
+u_int16_t pf_pkt_hash(sa_family_t, uint8_t,
+ const struct pf_addr *, const struct pf_addr *,
+ uint16_t, uint16_t);
+
+void pf_status_init(void);
+void pf_status_clear(void);
+int pf_status_read(struct pf_status *);
+
+#endif /* _KERNEL */
+
+#endif /* _NET_PFVAR_PRIV_H_ */
diff --git a/module/include/pfk.h b/module/include/pfk.h
new file mode 100644
index 0000000..c33426d
--- /dev/null
+++ b/module/include/pfk.h
@@ -0,0 +1,338 @@
+/*
+ * PF-on-Linux: master compatibility header (pfk).
+ *
+ * Every ported OpenBSD file includes INSTEAD of the original
+ * #include block. pfk.h pulls Linux headers first, then provides the
+ * OpenBSD-flavored types/APIs the PF code expects, so the ported logic
+ * stays line-proximate to upstream (ISC, (c) 2026 PF-on-Linux contributors;
+ * ported code: OpenBSD project, see LICENSE).
+ */
+#ifndef _PFK_H
+#define _PFK_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+/* ------------------------------------------------------------ basic types */
+#ifndef u_int8_t
+typedef __u8 u_int8_t;
+#endif
+#ifndef u_int16_t
+typedef __u16 u_int16_t;
+#endif
+#ifndef u_int32_t
+typedef __u32 u_int32_t;
+#endif
+#ifndef u_int64_t
+typedef __u64 u_int64_t;
+#endif
+#ifndef u64
+typedef __u64 u64;
+#endif
+#ifndef u_int
+typedef unsigned int u_int;
+#endif
+#ifndef u_char
+typedef unsigned char u_char;
+#endif
+/* caddr_t/time_t/timeval: kernel provides caddr_t; BSD time types below */
+#ifndef u_short
+typedef unsigned short u_short;
+#endif
+typedef __be16 pf_in_port_t;
+typedef __be32 pf_in_addr_t;
+/* uapi linux/in6.h already provides s6_addr/s6_addr16/s6_addr32 macros
+ * matching OpenBSD usage on the same union layout. */
+
+/* roundup/MIN/MAX/rounddown/NULL/PTR_ALIGN are already provided by the
+ * Linux kernel headers — use those. BSD-only extras kept under unique names. */
+#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1)))
+#define howmany(x, y) (((x)+((y)-1))/(y))
+#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b))
+#define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b))
+#define PFK_PTR_ALIGN(p) ((caddr_t)(((unsigned long)(p) + 3) & ~3UL))
+#define P2ALIGN(x, y) ((x) & -(y))
+
+/* OpenBSD rwlock name; the kernel has its own debug `struct rwlock`, so the
+ * BSD-visible struct is pfk_rwlock + alias macro (no further kernel headers
+ * are included after pfk.h, so the alias cannot leak). */
+struct pfk_rwlock {
+ struct rw_semaphore sem;
+ const char *name;
+ int is_writer;
+ atomic_t readers;
+};
+#define rwlock pfk_rwlock
+#define rwlock_s pfk_rwlock
+
+/* OpenBSD ioctl encoding: OUR kernel-side and our Linux pfctl use EXACTLY
+ * these macros so _IOR/_IOW direction bits stay bit-compatible with
+ * OpenBSD (Linux asm/ioctl.h differs). Ported TUs must include NO further
+ * kernel headers after pfk.h (see porting-notes). */
+#undef _IO
+#undef _IOR
+#undef _IOW
+#undef _IOWR
+#define PFKXIOC_NRBITS 8
+#define PFKXIOC_TYPEBITS 8
+#define PFKXIOC_SIZEBITS 13
+#define PFKXIOC_DIRBITS 2
+#define PFKXIOC_NRSHIFT 0
+#define PFKXIOC_TYPESHIFT (PFKXIOC_NRSHIFT + PFKXIOC_NRBITS)
+#define PFKXIOC_SIZESHIFT (PFKXIOC_TYPESHIFT + PFKXIOC_TYPEBITS)
+#define PFKXIOC_DIRSHIFT (PFKXIOC_SIZESHIFT + PFKXIOC_SIZEBITS + 1)
+#define PFKXIOC_NONE 0U
+#define PFKXIOC_WRITE 1U /* OpenBSD IOC_IN (copyin) */
+#define PFKXIOC_READ 2U /* OpenBSD IOC_OUT (copyout) */
+#define PFKXIOC(dir,type,nr,size) \
+ (((dir) << PFKXIOC_DIRSHIFT) | ((type) << PFKXIOC_TYPESHIFT) | \
+ ((nr) << PFKXIOC_NRSHIFT) | ((size) << PFKXIOC_SIZESHIFT))
+#define _IO(t, n) PFKXIOC(PFKXIOC_NONE, (t), (n), 0)
+#define _IOWR(t, n, s) PFKXIOC(PFKXIOC_WRITE|PFKXIOC_READ, (t), (n), sizeof(s))
+#define _IOW(t, n, s) PFKXIOC(PFKXIOC_WRITE, (t), (n), sizeof(s))
+#define _IOR(t, n, s) PFKXIOC(PFKXIOC_READ, (t), (n), sizeof(s))
+#define PFKIOC_TYPE(nr) (((nr) >> PFKXIOC_TYPESHIFT) & ((1U<> PFKXIOC_NRSHIFT) & ((1U<> PFKXIOC_DIRSHIFT) & ((1U< → resolves to the kernel's net/route.h;
+ * BSD-only bits it expects must be provided here. */
+#define RTLABEL_LEN 32
+
+/* syslog levels (BSD numbering == Linux numbering for these) */
+#define LOG_EMERG 0
+#define LOG_ALERT 1
+#define LOG_CRIT 2
+#define LOG_ERR 3
+#define LOG_WARNING 4
+#define LOG_NOTICE 5
+#define LOG_INFO 6
+#define LOG_DEBUG 7
+void pfk_log(int level, const char *fmt, ...);
+#define log pfk_log
+#define printf pfk_printk_compat
+int pfk_printk_compat(const char *fmt, ...);
+#define panic(x...) do { pr_emerg("pfk panic: " x); BUG(); } while (0)
+
+/* time */
+typedef long time_t;
+struct timeval { long tv_sec; long tv_usec; }; /* BSD layout (uapi may clash) */
+static inline __u64 pfk_time_sec(void) { return ktime_get_seconds(); }
+static inline __u64 pfk_time_ms(void) { return ktime_get_ns() / 1000000ULL; }
+struct pfk_timeval { __s64 tv_sec; __s64 tv_usec; };
+static inline void pfk_getmicrotime(struct pfk_timeval *tv)
+{
+ struct timespec64 ts;
+ ktime_get_real_ts64(&ts);
+ tv->tv_sec = ts.tv_sec;
+ tv->tv_usec = ts.tv_nsec / 1000;
+}
+static inline __s64 pfk_ntptime_delta(void) { return 0; } /* PFLINUX: ntpd adj not modeled */
+
+/* MALLOC / pool */
+#define M_TEMP 0x10000
+#define M_PF 0x10001
+#define M_DEVBUF 0x10002
+#define M_IFADDR 0x10003
+#define M_PFX 0x10004
+#define M_TAG 0x10005
+#define M_PFADDR 0x10006
+#define M_PFRWP 0x10007
+#define M_PFTOC 0x10008
+#define M_PFRTABLE 0x10009
+#define M_IFMADDR 0x1000a
+#define M_PFXSRC 0x1000b
+#define M_ZOMBIE 0x1000c
+#define M_PCR 0x1000d
+#define M_PRoute 0x1000e
+
+#define M_NOWAIT 0x01
+#define M_WAITOK 0x02
+#define M_CANFAIL 0x04
+#define M_ZERO 0x08
+
+void *pfk_malloc(size_t sz, int flags);
+void pfk_free(void *p);
+#define malloc(sz, t, f) pfk_malloc((sz), (f))
+#define free(p, t) pfk_free(p)
+
+/*
+ * pools: struct pool backed by kmem_cache when size fixed (pool_init),
+ * lazily created on first get for simplicity of many small pools.
+ */
+struct pool {
+ struct kmem_cache *slab;
+ size_t p_size;
+ int p_flags; /* PR_WAITOK semantics via M_* on init */
+ unsigned long p_alloc;
+ unsigned long p_used;
+ unsigned long p_hardlimit;
+ struct list_head p_objects; /* for zeroed reuse semantics if needed */
+};
+#define PR_WAITOK 0x01
+#define PR_NOWAIT 0x02
+#define PR_ZERO 0x08
+struct srcptr_static { const char *file; int line; };
+#define SRCPOINT() (&(struct srcptr_static){__FILE__, __LINE__})
+
+int pool_init(struct pool *pl, size_t size, int align, int ipl,
+ const char *use, void *p, int flags,
+ void (*ih)(void *, void *), void *arg, struct srcptr_static *sp);
+void pool_destroy(struct pool *pl);
+void *pool_get(struct pool *pl, int flags);
+void pool_put(struct pool *pl, void *v);
+void pool_sethardlimit(struct pool *pl, unsigned long lim, const char *msg, int msglevel);
+
+/* timeout.h: OpenBSD embeds `struct timeout` in statics/globals → fixed layout */
+#include "compat/sys/timeout.h"
+void timeout_set(struct timeout *to, timeout_fn *fn, void *arg);
+void timeout_set_micro(struct timeout *to, timeout_fn *fn, void *arg);
+int timeout_add(struct timeout *to, long ms);
+int timeout_add_sec(struct timeout *to, int secs);
+int timeout_add_usec(struct timeout *to, int us);
+int timeout_del(struct timeout *to);
+void timeout_barrier(struct timeout *to, int flags);
+void timeout_del_sync(struct timeout *to);
+int timeout_pending(struct timeout *to);
+int tsleep(void *p, int pr, const char *w, int timo); /* PFLINUX: control-path only */
+#define wakeup pfk_wakeup
+void pfk_wakeup(void *p);
+
+/* refcnt.h */
+#include "compat/sys/refcnt.h"
+
+/* rnd / random */
+static inline u_int32_t arc4random(void) { return get_random_u32(); }
+static inline void arc4random_buf(void *b, size_t l) { get_random_bytes(b, l); }
+static inline u_int32_t arc4random_uniform(u_int32_t n) { return get_random_u32_below(n); }
+static inline u_int32_t rnd(void) { return get_random_u32(); }
+static inline u_int32_t random(void) { return get_random_u32(); }
+#define karc4random() get_random_u32()
+#define karc4random_uniform(n) get_random_u32_below(n)
+
+/* copyin/copyout */
+#define copyin(u, k, l) (copy_from_user((k), (u), (l)) ? EFAULT : 0)
+#define copyout(k, u, l) (copy_to_user((u), (k), (l)) ? EFAULT : 0)
+
+/* assert-ish */
+#define KASSERT(cond) WARN_ON(!(cond))
+#define __arraycount(a) (sizeof(a) / sizeof((a)[0]))
+#define __predictfalse(x) unlikely(x)
+#define __predicttrue(x) likely(x)
+#define __predict(x, y) ((y) ? likely(x) : unlikely(x))
+#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
+
+/* NET_LOCK: OpenBSD global network rwlock. PF data path runs under NET_READ;
+ * ioctls take NET_LOCK (write). We map to a global rw_semaphore. */
+void pfk_net_lock_init(void);
+void pfk_net_lock(void); /* write */
+void pfk_net_unlock(void);
+void pfk_net_read_enter(void); /* read */
+void pfk_net_read_release(void);
+#define NET_LOCK() pfk_net_lock()
+#define NET_UNLOCK() pfk_net_unlock()
+#define NET_READ_ENTER() pfk_net_read_enter()
+#define NET_READ_RELEASE() pfk_net_read_release()
+void rw_init(struct rwlock_s *l, const char *name);
+void rw_enter(struct rwlock_s *l, int mode);
+void rw_exit(struct rwlock_s *l);
+int rw_status(struct rwlock_s *l);
+#define RW_READER 1
+#define RW_WRITER 2
+#define RW_NAPUTS 0
+#define rw_assert(l, m) do { } while (0) /* PFLINUX: advisory */
+
+/* BSD queue.h/tree.h/staged helpers — the Linux kernel's list.h/rbtree.h
+ * define a few identically-named macros; ported TUs never use Linux's
+ * list APIs via those names, so we clear and override. */
+#undef LIST_HEAD
+#undef LIST_HEAD_INIT
+#undef RB_ROOT
+#undef RB_CLEAR_NODE
+#include "compat/sys/queue.h"
+#include "compat/sys/tree.h"
+#include "compat/sys/socket.h"
+#include "compat/net/if_types.h"
+#include "compat/net/if_var.h"
+
+/* mbuf + BSD wire structs + pf ifnet registry */
+#include "pfk_mbuf.h"
+#include "pfk_net.h"
+#include "pfk_if.h"
+
+/* OpenBSD digest + toeplitz helpers (vendored into compat/crypto, compat/net) */
+#include "compat/net/toeplitz.h"
+#include "compat/crypto/siphash.h"
+
+/* pf headers resolve via -I module/include */
+#define NPFSYNC 0
+#define NPFLOG 1
+#define NPFLOW 0
+#define NCARP 0
+#define NPF 1
+
+void pfk_mod_init_done(void);
+
+#endif /* _PFK_H */
diff --git a/module/include/pfk_api.h b/module/include/pfk_api.h
new file mode 100644
index 0000000..9a8e15a
--- /dev/null
+++ b/module/include/pfk_api.h
@@ -0,0 +1,13 @@
+/* PFLINUX internal API (module-internal prototypes) */
+#ifndef _PFK_API_H
+#define _PFK_API_H
+#include
+#include
+
+long pfk_ioctl(struct file *f, unsigned int cmd, unsigned long addr);
+int pfk_enable(int on);
+void pfk_status(struct pf_status *s);
+int pfk_hooks_register(void);
+void pfk_hooks_unregister(void);
+
+#endif
diff --git a/module/include/pfk_if.h b/module/include/pfk_if.h
new file mode 100644
index 0000000..af6b671
--- /dev/null
+++ b/module/include/pfk_if.h
@@ -0,0 +1,102 @@
+/*
+ * PF-on-Linux: ifnet/address registry — OpenBSD `struct ifnet`/`in_ifaddr`
+ * views over Linux net_device + in_ifaddr lists (ISC 2026).
+ */
+#ifndef _PFK_IF_H
+#define _PFK_IF_H
+
+struct pfk_ifaddr {
+ struct pfk_ifaddr *ifa_next;
+ struct pfk_ifnet *ifa_ifp;
+ int ifa_refcnt;
+ int ifa_flags; /* BSD IFA_* */
+ struct sockaddr_storage ifa_addr_storage; /* BSD-ish sockaddr */
+ struct sockaddr *ifa_addr; /* -> storage */
+ struct sockaddr *ifa_mask;
+ struct net_device *dev;
+ __be32 addr4;
+ struct in6_addr addr6;
+ int family; /* AF_INET/AF_INET6 */
+ int scope; /* link/site for v6 */
+};
+
+struct pfk_ifqueue; /* M5 */
+
+struct pfk_ifnet {
+ char if_xname[IFNAMSIZ];
+ int if_index;
+ struct net_device *dev;
+ int if_flags; /* BSD-mapped IFF_* */
+ int if_xflags; /* BSD IFFX_* */
+ int if_type; /* IFT_* */
+ int if_mtu;
+ void *if_softc;
+ struct pfk_ifaddr *if_addrlist; /* refreshed snapshot */
+ struct pf_kif *if_pf_kif; /* pf_if glue */
+ struct pfk_ifqueue *if_snd; /* M5 */
+ void *if_pf_rtable; /* unused (rt tables NG) */
+ int if_rdomain; /* always 0 (NG), kept for ABI */
+ struct rcu_head rcu;
+ struct list_head link;
+ int alive;
+};
+
+#define if_output pfk_if_output_placeholder
+struct pfk_ifnet *pfk_ifp_byindex(int idx); /* NULL if gone */
+struct pfk_ifnet *pfk_ifp_byname(const char *name);
+struct pfk_ifnet *pfk_ifp_bydev(struct net_device *dev);
+int pfk_if_addrlist_refresh(struct pfk_ifnet *ifp); /* NET_LOCK held */
+void pfk_if_free(struct pfk_ifnet *ifp);
+
+/* BSD IFF_* bits (OpenBSD values) — distinct from Linux! */
+#define PFIFF_UP 0x00000001
+#define PFIFF_BROADCAST 0x00000002
+#define PFIFF_DEBUG 0x00000004
+#define PFIFF_LOOPBACK 0x00000008
+#define PFIFF_POINTOPOINT 0x00000010
+#define PFIFF_RUNNING 0x00000040
+#define PFIFF_PROMISC 0x00000100
+#define PFIFF_ALLMULTI 0x00000200
+#define PFIFF_MULTICAST 0x00008000
+#define PFIFF_RESOLVE 0x02000000
+#define PFIFF_IPV4 0x10000000
+#define PFIFF_IPV6 0x20000000
+
+/* NOTE: BSD IFF_* bit values are PFIFF_*; staged port files are sed'ed
+ * IFF_* → PFIFF_* (IFF_ macros must NEVER alias linux netdev flags).
+ * BSD IFA_* */
+#define IFA_BROADCAST_ 0x02
+#define IFA_PRIMARY_ 0x04
+#define IFA_SECONDARY_ 0x08
+
+struct mbuf_list { struct mbuf *ml_first, *ml_last; int ml_len; };
+
+/* egress interface (default-route dev), maintained on fib/net events */
+struct pfk_ifnet *pfk_egress_if(void);
+void pfk_egress_refresh(void);
+
+int pfk_if_init(void);
+void pfk_if_exit(void);
+void pfk_if_refresh(struct pfk_ifnet *ifp);
+struct pfk_ifnet *pfk_if_first(void);
+struct pfk_ifnet *pfk_if_next(struct pfk_ifnet *ifp);
+struct pfk_ifnet *pfk_if_next_from(int *idp);
+struct net_device *ip_rt_get_default_dev(struct net *net);
+
+/* xmit API used by pf_route/pf output (implemented in pfk_xmit.c) */
+int if_output_tso(struct pfk_ifnet *ifp, struct mbuf **mp,
+ struct sockaddr *dst, void *rt, int mtu);
+int if_output_ml(struct pfk_ifnet *ifp, struct mbuf_list *ml,
+ struct sockaddr *dst, void *rt);
+int if_enqueue(struct pfk_ifnet *ifp, struct mbuf *m);
+
+/* addr lookups (ifa_ifwithaddr, in_ifwithaddr etc.) */
+struct pfk_ifaddr *pfk_ifwithaddr(const struct sockaddr *sa);
+struct pfk_ifaddr *pfk_ifwithroute(int family, const struct sockaddr *dst,
+ const struct sockaddr *gate, struct pfk_ifnet **ifp_out);
+
+/* mib-ish status for pfctl DIOCGIFSTATS */
+struct pfk_if_data { unsigned long long ifi_ibytes, ifi_obytes; };
+void pfk_if_stats(struct pfk_ifnet *ifp, struct pfk_if_data *out);
+
+#endif /* _PFK_IF_H */
diff --git a/module/include/pfk_mbuf.h b/module/include/pfk_mbuf.h
new file mode 100644
index 0000000..aee499a
--- /dev/null
+++ b/module/include/pfk_mbuf.h
@@ -0,0 +1,166 @@
+/*
+ * PF-on-Linux mbuf shim: OpenBSD `struct mbuf` over Linux `sk_buff`.
+ *
+ * Design (see spec §4.1): PF-facing mbufs are ALWAYS single-segment
+ * (linearized on ingress). `m_data`/`m_len` mirror `skb->data`/`skb->len`.
+ * `m_pkthdr` carries PF's per-packet metadata (pf.* bits, ph.* aliases).
+ * Chains (m_next) are used only by our own concatenation (m_cat → copy);
+ * upstream PF never builds multi-segment chains it would hand back to Linux.
+ *
+ * (c) 2026 PF-on-Linux contributors — ISC.
+ */
+#ifndef _PFK_MBUF_H
+#define _PFK_MBUF_H
+
+#include
+
+struct pfk_ifnet; /* forward (pfk_if.h) */
+struct pf_state_key;
+struct inpcb;
+struct pf_tag;
+
+struct m_tag {
+ struct m_tag *m_tag_next;
+ int m_tag_type;
+ u_int m_tag_len; /* opaque: byte count of data[] */
+ u_char m_tag_data[];
+};
+
+/* mbuf types (OpenBSD numbering) */
+#define MT_FREE 0
+#define MT_DATA 1
+#define MT_HEADER 2
+#define MT_SONAME 3
+#define MT_SBUF 4
+#define MT_ZOMBIE 5
+#define MT_USER 6
+#define MT_RTABLE 7
+#define MT_IFADDR 8
+#define MT_EXT 9
+#define MT_RTMSG 10
+#define MT_SOCKET 11
+#define MT_PFDESC 12
+#define MT_TAG 13
+#define MT_OFDESC 14
+
+#define MT_TAGV 10
+#define MT_PFTOC TAG_PF
+#define MT_PF TAG_PF
+#define TAG_PF 0x50460000
+#define TAG_PF_RR (TAG_PF + 1)
+#define MT_PFTOC TAG_PF
+
+struct pkthdr_pf {
+ u_int flags;
+ struct pf_state_key *statekey;
+ struct inpcb *inp;
+ u_int32_t qid;
+ int16_t prio;
+ u_int8_t delay;
+ u_int8_t routed;
+ u_int8_t dir;
+ u_int8_t reason;
+ u_int16_t ruleset;
+ struct pfk_tag *tag;
+};
+
+struct pkthdr {
+ int len;
+ struct pkthdr_pf pf;
+ u_int csum_flags;
+ void *ph_cookie;
+ u_int32_t ph_flowid;
+ u_int ph_ifidx;
+ u_int ph_rtableid;
+ struct pfk_timeval ph_timestamp;
+ struct pfk_ifnet *ifp;
+ struct pfk_ifnet *rcvif;
+ u_short ph; /* tso segs: unused, kept as pad */
+ u_int8_t af;
+ u_int16_t proto;
+ u_int hdr_len;
+ struct m_tag *tags;
+ int pkthdr_len; /* == len mirror */
+};
+
+#define M_EXT 0x0001
+#define M_PKTHDR 0x0002
+#define M_EOR 0x0004
+#define M_RO 0x0010
+#define M_BCAST 0x0020
+#define M_MCAST 0x0040
+#define M_LOOP 0x0080
+#define M_SKIP_FIREWALL 0x0100
+#define M_BPF_MCAST 0x0200
+#define M_PROMISC 0x0400
+#define M_READONLY 0x0800
+#define M_CANTFIND (M_READONLY)
+#define M_DONTFRAG 0x1000
+
+struct mbuf {
+ struct mbuf *m_next;
+ struct mbuf *m_nextout;
+ u_short m_flags;
+ u_short m_len;
+ caddr_t m_data;
+ u_short m_type;
+ u_short m_maxsize;
+ int m_refcnt;
+ struct sk_buff *skb; /* canonical storage (linear) */
+ struct pkthdr m_pkthdr; /* valid iff M_PKTHDR */
+};
+
+#define MGET(m, f, t) do { (m) = m_get((f), (t)); } while (0)
+#define MGETHDR(m, f, t) do { (m) = m_gethdr((f), (t)); } while (0)
+#define mtod(m, t) ((t)((m)->m_data))
+#define MTOU(m, t) ((t)((m)->m_data))
+#define MFREE(m, n) ((n) = m_free((m)))
+
+/* lifecycle */
+struct mbuf *m_get(int how, short type);
+struct mbuf *m_gethdr(int how, short type);
+struct mbuf *m_alloc_skb(struct sk_buff *skb, int how); /* wrap borrowed skb */
+struct mbuf *m_devget(char *buf, int totlen, int off,
+ struct pfk_ifnet *ifp, void (*copyin_fc)(caddr_t, int));
+void pfk_m_setpkthdr(struct mbuf *m);
+
+struct mbuf *m_copym(struct mbuf *m, int off, int len, int wait);
+struct mbuf *m_dup(struct mbuf *m, int wait); /* full dup + headroom */
+#define m_copypacket(m, w) m_copym((m), 0, 0, (w))
+void m_adj(struct mbuf *m, int dlen);
+void m_trim(struct mbuf *m, int dlen);
+int m_cat(struct mbuf *to, struct mbuf *from); /* copies+consumes from */
+caddr_t m_copyback(struct mbuf *m, int off, int len, const void *copied);
+void m_copydata(const struct mbuf *m, int off, int len, caddr_t dest);
+caddr_t m_getptr(struct mbuf *m, int loc, int *off);
+int m_clump(struct mbuf **m0p, int len, int *mp_off, int *mp_len, caddr_t *doff);
+void m_free_ext(struct mbuf *m);
+struct mbuf *m_free(struct mbuf *m); /* returns next */
+void m_freem(struct mbuf *m);
+struct mbuf *m_dtom(struct sk_buff *skb); /* reverse map via skb->cb */
+
+static inline struct sk_buff *m_to_skb(struct mbuf *m) { return m->skb; }
+
+/* linearize: PF ingress guarantee */
+int pfk_mbuf_linearize(struct mbuf *m); /* pskb_expand if fragged */
+void pfk_mbuf_refresh(struct mbuf *m); /* resync m_len/pkthdr from skb */
+
+/* m_tag */
+struct m_tag *m_tag_alloc(int type, int len, int wait, caddr_t *align_data);
+void m_tag_free(struct m_tag *m);
+void m_tag_prepend(struct mbuf *m, struct m_tag *tag);
+void m_tag_prepend_packet(struct mbuf *m, struct m_tag *tag);
+void m_tag_delete(struct mbuf *m, struct m_tag *tag);
+struct m_tag *m_tag_find(struct mbuf *m, int type, struct m_tag *start);
+struct m_tag *m_tag_copy(struct m_tag *tag, int how);
+int m_tag_copy_chain(struct mbuf *to, struct mbuf *from, int how);
+void m_tag_delete_chain(struct mbuf *m, struct m_tag *end);
+struct m_tag *m_tag_first(struct mbuf *m);
+struct m_tag *m_tag_next(struct mbuf *m, struct m_tag *tag);
+void m_tag_attach(struct mbuf *m, struct m_tag *t); /* append order */
+
+/* PF flowid/toeplitz ingress hook + sysctl-ish knobs */
+int pfk_mbuf_init(void);
+void pfk_mbuf_exit(void);
+
+#endif /* _PFK_MBUF_H */
diff --git a/module/include/pfk_net.h b/module/include/pfk_net.h
new file mode 100644
index 0000000..f292390
--- /dev/null
+++ b/module/include/pfk_net.h
@@ -0,0 +1,190 @@
+/*
+ * PF-on-Linux BSD wire-protocol structs + checksum helpers (ISC 2026).
+ * Field names match OpenBSD headers; staging seds rename `struct ip` etc.
+ * to the pf_* names defined here so they never collide with Linux uapi.
+ * Byte layouts below are the little-endian variants (x86/arm64); the
+ * bitfield orderings replicate OpenBSD netinet headers exactly.
+ */
+#ifndef _PFK_NET_H
+#define _PFK_NET_H
+
+/* ---- IPv4 header (OpenBSD layout, LE bitfield order) ---- */
+struct pf_ip {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 ip_hl:4, ip_v:4;
+#else
+ __u8 ip_v:4, ip_hl:4;
+#endif
+ __u8 ip_tos;
+ __be16 ip_len;
+ __be16 ip_id;
+ __be16 ip_off;
+#define IP_RF 0x8000
+#define IP_OFFLP 0x3fff
+ __u8 ip_ttl;
+ __u8 ip_p;
+ __be16 ip_sum;
+ struct in_addr ip_src, ip_dst;
+};
+#define IP_MAXPACKET 65535
+#define IP_DEFAULT_TTL 64
+#define IPV4_TTL 64
+
+/* ---- TCP (OpenBSD names) ---- */
+struct pf_tcphdr {
+ __be16 th_sport, th_dport;
+ __be32 th_seq, th_ack;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 th_x2:4, th_off:4;
+#else
+ __u8 th_off:4, th_x2:4;
+#endif
+ __u8 th_flags;
+ __be16 th_win;
+ __be16 th_sum;
+ __be16 th_urp;
+};
+#define TH_FIN 0x01
+#define TH_SYN 0x02
+#define TH_RST 0x04
+#define TH_PUSH 0x08
+#define TH_ACK 0x10
+#define TH_URG 0x20
+#define TH_ECE 0x40
+#define TH_CWR 0x80
+#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
+
+/* tcp_fsm.h states (same numeric as Linux TCP_* enum) */
+#define TCPS_CLOSED 0
+#define TCPS_LISTEN 1
+#define TCPS_SYN_SENT 2
+#define TCPS_SYN_RECEIVED 3
+#define TCPS_ESTABLISHED 4
+#define TCPS_CLOSE_WAIT 5
+#define TCPS_FIN_WAIT_1 6
+#define TCPS_CLOSING 7
+#define TCPS_LAST_ACK 8
+#define TCPS_FIN_WAIT_2 9
+#define TCPS_TIME_WAIT 10
+
+/* ---- UDP ---- */
+struct pf_udphdr {
+ __be16 uh_sport, uh_dport;
+ __be16 uh_ulen;
+ __be16 uh_sum;
+};
+
+/* ---- ICMP (OpenBSD names/values) ---- */
+struct pf_icmp {
+ __u8 icmp_type;
+ __u8 icmp_code;
+ __be16 icmp_cksum;
+ union {
+ __be16 ih_id[2]; /* id, seq */
+ struct { __u8 type, code; __be16 cksum; } ih_type_hdr;
+ __be32 ih_gwaddr;
+ struct ih_frags { __be16 ih_rrechk; __be16 ih_length; } ih_frag;
+ } icmp_hun;
+#define icmp_id icmp_hun.ih_id[0]
+#define icmp_seq icmp_hun.ih_id[1]
+#define icmp_cksum_alt icmp_hun.ih_type_hdr.cksum
+#define icmp_gwaddr icmp_hun.ih_gwaddr
+ union {
+ __s8 id_pad[8];
+ __be16 id_ipid[2];
+ struct pf_ip id_ip;
+ struct ih_pmtu { __be16 reserved; __be16 mtu; } ih_pmtu;
+ struct ih_rtradv { __u8 irt_num_addrs, irt_wpa;
+ __be16 lifetime; } ih_rtradv;
+ } icmp_data;
+#define icmp_rip icmp_data.id_ip
+#define icmp_ppsmtu icmp_data.ih_pmtu.mtu
+};
+
+#define ICMP_ECHOREPLY 0
+#define ICMP_UNREACH 3
+#define ICMP_UNREACH_NET 0
+#define ICMP_UNREACH_HOST 1
+#define ICMP_UNREACH_PROTOCOL 2
+#define ICMP_UNREACH_PORT 3
+#define ICMP_UNREACH_NEEDFRAG 4
+#define ICMP_UNREACH_SRCFAIL 5
+#define ICMP_UNREACH_NET_UNKNOWN 6
+#define ICMP_UNREACH_HOST_UNKNOWN 7
+#define ICMP_UNREACH_ISOLATED 8
+#define ICMP_UNREACH_NET_PROHIB 9
+#define ICMP_UNREACH_HOST_PROHIB 10
+#define ICMP_UNREACH_TOSNET 11
+#define ICMP_UNREACH_TOSHOST 12
+#define ICMP_UNREACH_FILTER_PROHIB 13
+#define ICMP_UNREACH_HOST_PRECEDENCE 14
+#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15
+#define ICMP_SOURCEQUENCH 4
+#define ICMP_REDIRECT 5
+#define ICMP_ALTHOSTADDR 6
+#define ICMP_ECHO 8
+#define ICMP_ROUTERADVERT 9
+#define ICMP_ROUTERSOLICIT 10
+#define ICMP_TIMXCEED 11
+#define ICMP_TIMXCEED_INTRANS 0
+#define ICMP_TIMXCEED_REASS 1
+#define ICMP_PARAMPROB 12
+#define ICMP_TSTAMP 13
+#define ICMP_TSTAMPREPLY 14
+#define ICMP_INFO_REQUEST 15
+#define ICMP_INFO_REPLY 16
+#define ICMP_ADDRESS 17
+#define ICMP_ADDRESSREPLY 18
+#define ICMP_MAXTYPE 18
+
+/* ---- IPv6 (OpenBSD ctl-union + macros) ---- */
+struct pf_ip6_hdr {
+ union {
+ struct ip6_hdrctl {
+ __u32 ip6_un1_flow;
+ __be16 ip6_un1_plen;
+ __u8 ip6_un1_nxt;
+ __u8 ip6_un1_hlim;
+ } ip6_un1;
+ } ip6_ctlun;
+ struct in6_addr ip6_src;
+ struct in6_addr ip6_dst;
+};
+#define ip6_flow ip6_ctlun.ip6_un1->ip6_un1_flow
+#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
+/* NOTE ip6_flow above is a pointer trick in OpenBSD; PF reads/writes
+ * it via explicit helpers only — provide the plain accessor instead: */
+#undef ip6_flow
+#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
+#define IPV6_VERSION 0x60
+#define IPV6_VERSION_MASK 0xf0
+#define v_hl i_vhl
+#define traffic_class i_tc1, i_tc2
+
+/* flow macros (OpenBSD) */
+static inline __u32 PF6_FLOWlabel(const struct pf_ip6_hdr *h)
+{ return be32_to_cpu(h->ip6_flow) & 0x000fffff; }
+static inline __u8 PF6_VERSION(const struct pf_ip6_hdr *h)
+{ return be32_to_cpu(h->ip6_flow) >> 28; }
+static inline __u8 PF6_CLASS(const struct pf_ip6_hdr *h)
+{ return (be32_to_cpu(h->ip6_flow) >> 20) & 0xff; }
+
+/* ---- ICMPv6: PF code's field names (icmp6_type/code/cksum/identifier/
+ * sequence/mtu) are provided by Linux's own struct
+ * icmp6hdr + its member macros; staging seds `struct icmp6_hdr` →
+ * `struct icmp6hdr` (see stage-port.sh). No private definition needed. */
+
+/* BSD IPPROTO_ / IP levels (identical numerics to Linux; aliases kept) */
+#define IPPROTO_MAX_ IPPROTO_MAX
+
+/* ---- checksum helpers (ported in_cksum etc.) ---- */
+u_int16_t pfk_in_cksum(const void *data, int len); /* one's complement sum */
+__sum16 pfk_icmp6_cksum(const struct pf_ip6_hdr *ip6,
+ const struct icmp6hdr *ic6, int len);
+void pfk_send_icmp_error(int family, struct sk_buff *skb_in, int type,
+ int code, __be32 info);
+
+#endif /* _PFK_NET_H */
diff --git a/module/pfsrc/.pfk_hooks.o.cmd b/module/pfsrc/.pfk_hooks.o.cmd
new file mode 100644
index 0000000..6957573
--- /dev/null
+++ b/module/pfsrc/.pfk_hooks.o.cmd
@@ -0,0 +1,1826 @@
+savedcmd_pfsrc/pfk_hooks.o := gcc -Wp,-MMD,pfsrc/.pfk_hooks.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_hooks"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pfsrc/pfk_hooks.o pfsrc/pfk_hooks.c
+
+source_pfsrc/pfk_hooks.o := pfsrc/pfk_hooks.c
+
+deps_pfsrc/pfk_hooks.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+ include/pfk_api.h \
+ include/net/pfvar.h \
+ include/compat/sys/syslimits.h \
+ include/compat/netinet/in.h \
+ include/compat/net/radix.h \
+ include/net/pfvar_priv.h \
+
+pfsrc/pfk_hooks.o: $(deps_pfsrc/pfk_hooks.o)
+
+$(deps_pfsrc/pfk_hooks.o):
diff --git a/module/pfsrc/.pfk_mod.o.cmd b/module/pfsrc/.pfk_mod.o.cmd
new file mode 100644
index 0000000..c974618
--- /dev/null
+++ b/module/pfsrc/.pfk_mod.o.cmd
@@ -0,0 +1,1826 @@
+savedcmd_pfsrc/pfk_mod.o := gcc -Wp,-MMD,pfsrc/.pfk_mod.o.d -nostdinc -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi -I/home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/uapi -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h -include /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h -D__KERNEL__ -Werror -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -std=gnu11 -fms-extensions -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-sse4a -fcf-protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=x86-64 -mtune=generic -mno-red-zone -mcmodel=kernel -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=__ref_stack_chk_guard -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mindirect-branch-cs-prefix -mfunction-return=thunk-extern -fno-jump-tables -fpatchable-function-entry=16,16 -fno-delete-null-pointer-checks -O2 -fno-allow-store-data-races -fstack-protector-strong -fomit-frame-pointer -ftrivial-auto-var-init=zero -fzero-init-padding-bits=all -fno-stack-clash-protection -fdiagnostics-show-context=2 -fmin-function-alignment=16 -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fconserve-stack -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-main -Wno-type-limits -Wno-dangling-pointer -Wvla-larger-than=1 -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wno-array-bounds -Wno-stringop-overflow -Wno-alloc-size-larger-than -Wimplicit-fallthrough=5 -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-packed-not-aligned -Wno-format-overflow -Wno-format-truncation -Wno-stringop-truncation -Wno-override-init -Wno-missing-field-initializers -Wno-shift-negative-value -Wno-maybe-uninitialized -Wno-sign-compare -Wno-unused-parameter -I././include -I././include/compat -DPFLINUX=1 -Wno-declaration-after-statement -DMODULE -DKBUILD_BASENAME='"pfk_mod"' -DKBUILD_MODNAME='"pf"' -D__KBUILD_MODNAME=pf -c -o pfsrc/pfk_mod.o pfsrc/pfk_mod.c
+
+source_pfsrc/pfk_mod.o := pfsrc/pfk_mod.c
+
+deps_pfsrc/pfk_mod.o := \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-version.h \
+ $(wildcard include/config/CC_VERSION_TEXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kconfig.h \
+ $(wildcard include/config/CPU_BIG_ENDIAN) \
+ $(wildcard include/config/BOOGER) \
+ $(wildcard include/config/FOO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_types.h \
+ $(wildcard include/config/DEBUG_INFO_BTF) \
+ $(wildcard include/config/PAHOLE_HAS_BTF_TAG) \
+ $(wildcard include/config/FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/CC_HAS_SANE_FUNCTION_ALIGNMENT) \
+ $(wildcard include/config/X86_64) \
+ $(wildcard include/config/ARM64) \
+ $(wildcard include/config/LD_DEAD_CODE_DATA_ELIMINATION) \
+ $(wildcard include/config/LTO_CLANG) \
+ $(wildcard include/config/HAVE_ARCH_COMPILER_H) \
+ $(wildcard include/config/KCSAN) \
+ $(wildcard include/config/CC_HAS_ASSUME) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY) \
+ $(wildcard include/config/FORTIFY_SOURCE) \
+ $(wildcard include/config/UBSAN_BOUNDS) \
+ $(wildcard include/config/CC_HAS_COUNTED_BY_PTR) \
+ $(wildcard include/config/CC_HAS_MULTIDIMENSIONAL_NONSTRING) \
+ $(wildcard include/config/CFI) \
+ $(wildcard include/config/ARCH_USES_CFI_GENERIC_LLVM_PASS) \
+ $(wildcard include/config/CC_HAS_BROKEN_COUNTED_BY_REF) \
+ $(wildcard include/config/CC_HAS_ASM_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-context-analysis.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler_attributes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler-gcc.h \
+ $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \
+ $(wildcard include/config/SHADOW_CALL_STACK) \
+ $(wildcard include/config/KCOV) \
+ $(wildcard include/config/CC_HAS_TYPEOF_UNQUAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu_types.h \
+ $(wildcard include/config/SMP) \
+ $(wildcard include/config/CC_HAS_NAMED_AS) \
+ $(wildcard include/config/USE_X86_SEG_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu_types.h \
+ include/pfk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/types.h \
+ $(wildcard include/config/HAVE_UID16) \
+ $(wildcard include/config/UID16) \
+ $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \
+ $(wildcard include/config/PHYS_ADDR_T_64BIT) \
+ $(wildcard include/config/64BIT) \
+ $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \
+ $(wildcard include/config/KVFREE_RCU_BATCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/int-ll64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/bitsperlong.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stddef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/X86_32) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/posix_types_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/posix_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel.h \
+ $(wildcard include/config/PREEMPT_VOLUNTARY_BUILD) \
+ $(wildcard include/config/PREEMPT_DYNAMIC) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_CALL) \
+ $(wildcard include/config/HAVE_PREEMPT_DYNAMIC_KEY) \
+ $(wildcard include/config/PREEMPT_) \
+ $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \
+ $(wildcard include/config/MMU) \
+ $(wildcard include/config/PROVE_LOCKING) \
+ $(wildcard include/config/DYNAMIC_FTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stdarg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/align.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/array_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compiler.h \
+ $(wildcard include/config/TRACE_BRANCH_PROFILING) \
+ $(wildcard include/config/PROFILE_ALL_BRANCHES) \
+ $(wildcard include/config/OBJTOOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rwonce.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-checks.h \
+ $(wildcard include/config/KASAN_GENERIC) \
+ $(wildcard include/config/KASAN_SW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan-checks.h \
+ $(wildcard include/config/KCSAN_WEAK_MEMORY) \
+ $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/linkage.h \
+ $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/export.h \
+ $(wildcard include/config/MODVERSIONS) \
+ $(wildcard include/config/GENDWARFKSYMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/CALL_PADDING) \
+ $(wildcard include/config/MITIGATION_RETHUNK) \
+ $(wildcard include/config/MITIGATION_RETPOLINE) \
+ $(wildcard include/config/MITIGATION_SLS) \
+ $(wildcard include/config/FUNCTION_PADDING_BYTES) \
+ $(wildcard include/config/UML) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ibt.h \
+ $(wildcard include/config/X86_KERNEL_IBT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/container_of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/build_bug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/overflow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/const.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/typecheck.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kernel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysinfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/generic-non-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/CALL_THUNKS) \
+ $(wildcard include/config/MITIGATION_ITS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool.h \
+ $(wildcard include/config/FRAME_POINTER) \
+ $(wildcard include/config/NOINSTR_VALIDATION) \
+ $(wildcard include/config/MITIGATION_UNRET_ENTRY) \
+ $(wildcard include/config/MITIGATION_SRSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/objtool_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/annotate.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm.h \
+ $(wildcard include/config/KPROBES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/asm-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable_fixup_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bug.h \
+ $(wildcard include/config/GENERIC_BUG) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE) \
+ $(wildcard include/config/DEBUG_BUGVERBOSE_DETAILED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumentation.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call_types.h \
+ $(wildcard include/config/HAVE_STATIC_CALL) \
+ $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bug.h \
+ $(wildcard include/config/BUG) \
+ $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once_lite.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/panic.h \
+ $(wildcard include/config/PANIC_TIMEOUT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/printk.h \
+ $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \
+ $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \
+ $(wildcard include/config/EARLY_PRINTK) \
+ $(wildcard include/config/PRINTK) \
+ $(wildcard include/config/PRINTK_INDEX) \
+ $(wildcard include/config/DYNAMIC_DEBUG) \
+ $(wildcard include/config/DYNAMIC_DEBUG_CORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/init.h \
+ $(wildcard include/config/MEMORY_HOTPLUG) \
+ $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kern_levels.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/param.h \
+ $(wildcard include/config/HZ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/param.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types_raw.h \
+ $(wildcard include/config/DEBUG_SPINLOCK) \
+ $(wildcard include/config/DEBUG_LOCK_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock_types.h \
+ $(wildcard include/config/NR_CPUS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/byteorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/byteorder/little_endian.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/swab.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/byteorder/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep_types.h \
+ $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \
+ $(wildcard include/config/LOCKDEP) \
+ $(wildcard include/config/LOCK_STAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/barrier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/X86_CMOV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rmwcc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/args.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/arch_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/const_hweight.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instrumented.h \
+ $(wildcard include/config/DEBUG_ATOMIC) \
+ $(wildcard include/config/DEBUG_ATOMIC_LARGEST_ALIGN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bug.h \
+ $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan-checks.h \
+ $(wildcard include/config/KMSAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-non-atomic.h \
+ $(wildcard include/config/KCSAN_ASSUME_PLAIN_WRITES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/instrumented-lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/le.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/ext2-atomic-setbit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kstrtox.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/log2.h \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U32) \
+ $(wildcard include/config/ARCH_HAS_ILOG2_U64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/div64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/div64.h \
+ $(wildcard include/config/CC_OPTIMIZE_FOR_PERFORMANCE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sprintf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_printk.h \
+ $(wildcard include/config/TRACING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/instruction_pointer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/util_macros.h \
+ $(wildcard include/config/FOO_SUSPEND) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wordpart.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/module.h \
+ $(wildcard include/config/MODULES) \
+ $(wildcard include/config/SYSFS) \
+ $(wildcard include/config/MODULES_TREE_LOOKUP) \
+ $(wildcard include/config/LIVEPATCH) \
+ $(wildcard include/config/STACKTRACE_BUILD_ID) \
+ $(wildcard include/config/ARCH_USES_CFI_TRAPS) \
+ $(wildcard include/config/MODULE_SIG) \
+ $(wildcard include/config/KALLSYMS) \
+ $(wildcard include/config/TRACEPOINTS) \
+ $(wildcard include/config/TREE_SRCU) \
+ $(wildcard include/config/BPF_EVENTS) \
+ $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \
+ $(wildcard include/config/JUMP_LABEL) \
+ $(wildcard include/config/EVENT_TRACING) \
+ $(wildcard include/config/KUNIT) \
+ $(wildcard include/config/MODULE_UNLOAD) \
+ $(wildcard include/config/CONSTRUCTORS) \
+ $(wildcard include/config/FUNCTION_ERROR_INJECTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list.h \
+ $(wildcard include/config/LIST_HARDENED) \
+ $(wildcard include/config/DEBUG_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poison.h \
+ $(wildcard include/config/ILLEGAL_POINTER_VALUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/stat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time.h \
+ $(wildcard include/config/POSIX_TIMERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cache.h \
+ $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cache.h \
+ $(wildcard include/config/X86_L1_CACHE_SHIFT) \
+ $(wildcard include/config/X86_INTERNODE_CACHE_SHIFT) \
+ $(wildcard include/config/X86_VSMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/math64.h \
+ $(wildcard include/config/ARCH_SUPPORTS_INT128) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/math64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/time_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/timex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor.h \
+ $(wildcard include/config/X86_VMX_FEATURE_NAMES) \
+ $(wildcard include/config/X86_IOPL_IOPERM) \
+ $(wildcard include/config/VM86) \
+ $(wildcard include/config/X86_USER_SHADOW_STACK) \
+ $(wildcard include/config/X86_DEBUG_FPU) \
+ $(wildcard include/config/PARAVIRT_XXL) \
+ $(wildcard include/config/CPU_SUP_AMD) \
+ $(wildcard include/config/XEN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/MITIGATION_PAGE_TABLE_ISOLATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/processor-flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mem_encrypt.h \
+ $(wildcard include/config/ARCH_HAS_MEM_ENCRYPT) \
+ $(wildcard include/config/AMD_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mem_encrypt.h \
+ $(wildcard include/config/X86_MEM_ENCRYPT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cc_platform.h \
+ $(wildcard include/config/ARCH_HAS_CC_PLATFORM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/math_emu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/PARAVIRT) \
+ $(wildcard include/config/IA32_EMULATION) \
+ $(wildcard include/config/X86_DEBUGCTLMSR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/segment.h \
+ $(wildcard include/config/XEN_PV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/PHYSICAL_START) \
+ $(wildcard include/config/PHYSICAL_ALIGN) \
+ $(wildcard include/config/DYNAMIC_PHYSICAL_MASK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/page.h \
+ $(wildcard include/config/PAGE_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/KASAN) \
+ $(wildcard include/config/RANDOMIZE_BASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/kaslr.h \
+ $(wildcard include/config/RANDOMIZE_MEMORY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ptrace-abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-base.h \
+ $(wildcard include/config/PARAVIRT_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/proto.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/ldt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sigcontext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/current.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/percpu.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/percpu.h \
+ $(wildcard include/config/DEBUG_PREEMPT) \
+ $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/threads.h \
+ $(wildcard include/config/BASE_SMALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-defs.h \
+ $(wildcard include/config/ARCH_MODULE_NEEDS_WEAK_PER_CPU) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpuid/leaf_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/DEBUG_VIRTUAL) \
+ $(wildcard include/config/X86_VSYSCALL_EMULATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmdebug.h \
+ $(wildcard include/config/DEBUG_VM) \
+ $(wildcard include/config/DEBUG_VM_IRQSOFF) \
+ $(wildcard include/config/DEBUG_VM_PGFLAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/range.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/memory_model.h \
+ $(wildcard include/config/FLATMEM) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP) \
+ $(wildcard include/config/SPARSEMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pfn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/getorder.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/X86_INTEL_MEMORY_PROTECTION_KEYS) \
+ $(wildcard include/config/X86_PAE) \
+ $(wildcard include/config/MEM_SOFT_DIRTY) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_WP) \
+ $(wildcard include/config/PGTABLE_LEVELS) \
+ $(wildcard include/config/PROC_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64_types.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL_FORCE_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sparsemem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/desc_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/special_insns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/errno-base.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags.h \
+ $(wildcard include/config/TRACE_IRQFLAGS) \
+ $(wildcard include/config/PREEMPT_RT) \
+ $(wildcard include/config/IRQSOFF_TRACER) \
+ $(wildcard include/config/PREEMPT_TRACER) \
+ $(wildcard include/config/DEBUG_IRQFLAGS) \
+ $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqflags_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cleanup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/err.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irqflags.h \
+ $(wildcard include/config/DEBUG_ENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/nospec-branch.h \
+ $(wildcard include/config/CALL_THUNKS_DEBUG) \
+ $(wildcard include/config/MITIGATION_CALL_DEPTH_TRACKING) \
+ $(wildcard include/config/MITIGATION_IBPB_ENTRY) \
+ $(wildcard include/config/BPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_key.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label.h \
+ $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/jump_label.h \
+ $(wildcard include/config/HAVE_JUMP_LABEL_HACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr-index.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unwind_hints.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/orc_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/GEN-for-each-reg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/ZERO_CALL_USED_REGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask.h \
+ $(wildcard include/config/FORCE_NR_CPUS) \
+ $(wildcard include/config/HOTPLUG_CPU) \
+ $(wildcard include/config/DEBUG_PER_CPU_MAPS) \
+ $(wildcard include/config/CPUMASK_OFFSTACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cmpxchg_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/atomic64_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-arch-fallback.h \
+ $(wildcard include/config/GENERIC_ATOMIC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-long.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/atomic/atomic-instrumented.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/find.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string.h \
+ $(wildcard include/config/BINARY_PRINTF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/string_64.h \
+ $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitmap-str.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpumask_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp_types.h \
+ $(wildcard include/config/KASAN_HW_TAGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/numa.h \
+ $(wildcard include/config/NUMA_KEEP_MEMINFO) \
+ $(wildcard include/config/NUMA) \
+ $(wildcard include/config/HAVE_ARCH_NODE_DEV_GROUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask.h \
+ $(wildcard include/config/HIGHMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nodemask_types.h \
+ $(wildcard include/config/NODES_SHIFT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/random.h \
+ $(wildcard include/config/VMGENID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/random.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/irqnr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/frame.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmxfeatures.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shstk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/personality.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tsc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpufeature.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/cpufeaturemasks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cpumask.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/msr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu.h \
+ $(wildcard include/config/KMALLOC_PARTITION_CACHES) \
+ $(wildcard include/config/PAGE_SIZE_4KB) \
+ $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alloc_tag.h \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_DEBUG) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING) \
+ $(wildcard include/config/MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/codetag.h \
+ $(wildcard include/config/CODE_TAGGING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/preempt.h \
+ $(wildcard include/config/HAS_SEPARATE_PREEMPT_RESCHED_BITS) \
+ $(wildcard include/config/PREEMPT_COUNT) \
+ $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \
+ $(wildcard include/config/PREEMPTION) \
+ $(wildcard include/config/PREEMPT_NOTIFIERS) \
+ $(wildcard include/config/PREEMPT_NONE) \
+ $(wildcard include/config/PREEMPT_VOLUNTARY) \
+ $(wildcard include/config/PREEMPT) \
+ $(wildcard include/config/PREEMPT_LAZY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/preempt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp.h \
+ $(wildcard include/config/UP_LATE_INIT) \
+ $(wildcard include/config/CSD_LOCK_WAIT_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/smp_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/llist.h \
+ $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/thread_info.h \
+ $(wildcard include/config/THREAD_INFO_IN_TASK) \
+ $(wildcard include/config/GENERIC_ENTRY) \
+ $(wildcard include/config/ARCH_HAS_PREEMPT_LAZY) \
+ $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \
+ $(wildcard include/config/SH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/restart_block.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/X86_FRED) \
+ $(wildcard include/config/COMPAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/thread_info_tif.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smp.h \
+ $(wildcard include/config/DEBUG_NMI_SELFTEST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \
+ $(wildcard include/config/SCHED_INFO) \
+ $(wildcard include/config/SCHEDSTATS) \
+ $(wildcard include/config/SCHED_CORE) \
+ $(wildcard include/config/FAIR_GROUP_SCHED) \
+ $(wildcard include/config/RT_GROUP_SCHED) \
+ $(wildcard include/config/RT_MUTEXES) \
+ $(wildcard include/config/UCLAMP_TASK) \
+ $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \
+ $(wildcard include/config/KMAP_LOCAL) \
+ $(wildcard include/config/SCHED_CLASS_EXT) \
+ $(wildcard include/config/CGROUP_SCHED) \
+ $(wildcard include/config/CFS_BANDWIDTH) \
+ $(wildcard include/config/BLK_DEV_IO_TRACE) \
+ $(wildcard include/config/PREEMPT_RCU) \
+ $(wildcard include/config/TASKS_RCU) \
+ $(wildcard include/config/TASKS_TRACE_RCU) \
+ $(wildcard include/config/TRIVIAL_PREEMPT_RCU) \
+ $(wildcard include/config/MEMCG_V1) \
+ $(wildcard include/config/LRU_GEN) \
+ $(wildcard include/config/COMPAT_BRK) \
+ $(wildcard include/config/CGROUPS) \
+ $(wildcard include/config/BLK_CGROUP) \
+ $(wildcard include/config/PSI) \
+ $(wildcard include/config/PAGE_OWNER) \
+ $(wildcard include/config/EVENTFD) \
+ $(wildcard include/config/ARCH_HAS_CPU_PASID) \
+ $(wildcard include/config/X86_BUS_LOCK_DETECT) \
+ $(wildcard include/config/TASK_DELAY_ACCT) \
+ $(wildcard include/config/STACKPROTECTOR) \
+ $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \
+ $(wildcard include/config/NO_HZ_FULL) \
+ $(wildcard include/config/POSIX_CPUTIMERS) \
+ $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \
+ $(wildcard include/config/KEYS) \
+ $(wildcard include/config/SYSVIPC) \
+ $(wildcard include/config/DETECT_HUNG_TASK) \
+ $(wildcard include/config/IO_URING) \
+ $(wildcard include/config/AUDIT) \
+ $(wildcard include/config/AUDITSYSCALL) \
+ $(wildcard include/config/DETECT_HUNG_TASK_BLOCKER) \
+ $(wildcard include/config/UBSAN) \
+ $(wildcard include/config/UBSAN_TRAP) \
+ $(wildcard include/config/COMPACTION) \
+ $(wildcard include/config/TASK_XACCT) \
+ $(wildcard include/config/CPUSETS) \
+ $(wildcard include/config/X86_CPU_RESCTRL) \
+ $(wildcard include/config/PERF_EVENTS) \
+ $(wildcard include/config/NUMA_BALANCING) \
+ $(wildcard include/config/SCHED_CACHE) \
+ $(wildcard include/config/ARCH_HAS_LAZY_MMU_MODE) \
+ $(wildcard include/config/FAULT_INJECTION) \
+ $(wildcard include/config/LATENCYTOP) \
+ $(wildcard include/config/FUNCTION_GRAPH_TRACER) \
+ $(wildcard include/config/MEMCG) \
+ $(wildcard include/config/UPROBES) \
+ $(wildcard include/config/BCACHE) \
+ $(wildcard include/config/VMAP_STACK) \
+ $(wildcard include/config/SECURITY) \
+ $(wildcard include/config/BPF_SYSCALL) \
+ $(wildcard include/config/KSTACK_ERASE) \
+ $(wildcard include/config/KSTACK_ERASE_METRICS) \
+ $(wildcard include/config/X86_MCE) \
+ $(wildcard include/config/KRETPROBES) \
+ $(wildcard include/config/RETHOOK) \
+ $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \
+ $(wildcard include/config/RV) \
+ $(wildcard include/config/RV_PER_TASK_MONITORS) \
+ $(wildcard include/config/USER_EVENTS) \
+ $(wildcard include/config/UNWIND_USER) \
+ $(wildcard include/config/SCHED_PROXY_EXEC) \
+ $(wildcard include/config/SCHED_MM_CID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/futex_types.h \
+ $(wildcard include/config/FUTEX) \
+ $(wildcard include/config/FUTEX_PRIVATE_HASH) \
+ $(wildcard include/config/FUTEX_ROBUST_UNLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex_types.h \
+ $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_MUTEXES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/osq_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shmparam.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/plist_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp_types.h \
+ $(wildcard include/config/SECCOMP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/resource.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/latencytop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/prio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal_types.h \
+ $(wildcard include/config/OLD_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/signal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/signal-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/siginfo.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt_rc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/processor.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bottom_half.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockdep.h \
+ $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmiowb.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmiowb.h \
+ $(wildcard include/config/MMIOWB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/paravirt-spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS_TRACE_CONTENDED_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tracepoint-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/qrwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/INLINE_SPIN_LOCK) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK) \
+ $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \
+ $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/GENERIC_LOCKBREAK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/INLINE_READ_LOCK) \
+ $(wildcard include/config/INLINE_WRITE_LOCK) \
+ $(wildcard include/config/INLINE_READ_LOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_BH) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \
+ $(wildcard include/config/INLINE_READ_TRYLOCK) \
+ $(wildcard include/config/INLINE_WRITE_TRYLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \
+ $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \
+ $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/syscall_user_dispatch_types.h \
+ $(wildcard include/config/SYSCALL_USER_DISPATCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types_task.h \
+ $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbbatch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice_xmit.h \
+ $(wildcard include/config/NET_ACT_MIRRED) \
+ $(wildcard include/config/NET_EGRESS) \
+ $(wildcard include/config/NF_DUP_NETDEV) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/task_io_accounting.h \
+ $(wildcard include/config/TASK_IO_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rseq_types.h \
+ $(wildcard include/config/RSEQ) \
+ $(wildcard include/config/RSEQ_SLICE_EXTENSION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irq_work_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kcsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rv.h \
+ $(wildcard include/config/RV_LTL_MONITOR) \
+ $(wildcard include/config/RV_HA_MONITOR) \
+ $(wildcard include/config/RV_REACTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unwind_deferred_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/kmap_size.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/kmap_size.h \
+ $(wildcard include/config/DEBUG_KMAP_LOCAL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/rq-offsets.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/ext.h \
+ $(wildcard include/config/EXT_SUB_SCHED) \
+ $(wildcard include/config/EXT_GROUP_SCHED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/time.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uidgid.h \
+ $(wildcard include/config/MULTIUSER) \
+ $(wildcard include/config/USER_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/buildid.h \
+ $(wildcard include/config/VMCORE_INFO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmod.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/umh.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/gfp.h \
+ $(wildcard include/config/ZONE_DMA) \
+ $(wildcard include/config/ZONE_DMA32) \
+ $(wildcard include/config/ZONE_DEVICE) \
+ $(wildcard include/config/CONTIG_ALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmzone.h \
+ $(wildcard include/config/ARCH_FORCE_MAX_ORDER) \
+ $(wildcard include/config/PAGE_BLOCK_MAX_ORDER) \
+ $(wildcard include/config/HAVE_GIGANTIC_FOLIOS) \
+ $(wildcard include/config/HUGETLB_PAGE) \
+ $(wildcard include/config/HUGETLB_PAGE_OPTIMIZE_VMEMMAP) \
+ $(wildcard include/config/CMA) \
+ $(wildcard include/config/MEMORY_ISOLATION) \
+ $(wildcard include/config/ZSMALLOC) \
+ $(wildcard include/config/UNACCEPTED_MEMORY) \
+ $(wildcard include/config/IOMMU_SUPPORT) \
+ $(wildcard include/config/SWAP) \
+ $(wildcard include/config/TRANSPARENT_HUGEPAGE) \
+ $(wildcard include/config/LRU_GEN_STATS) \
+ $(wildcard include/config/LRU_GEN_WALKS_MMU) \
+ $(wildcard include/config/MEMORY_FAILURE) \
+ $(wildcard include/config/PAGE_EXTENSION) \
+ $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \
+ $(wildcard include/config/HAVE_MEMORYLESS_NODES) \
+ $(wildcard include/config/SPARSEMEM_EXTREME) \
+ $(wildcard include/config/SPARSEMEM_VMEMMAP_PREINIT) \
+ $(wildcard include/config/HAVE_ARCH_PFN_VALID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seqlock.h \
+ $(wildcard include/config/CC_IS_GCC) \
+ $(wildcard include/config/GCC_VERSION) \
+ $(wildcard include/config/UBSAN_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mutex.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debug_locks.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pageblock-flags.h \
+ $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags-layout.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/bounds.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm_types.h \
+ $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \
+ $(wildcard include/config/SLAB_OBJ_EXT) \
+ $(wildcard include/config/HUGETLB_PMD_PAGE_TABLE_SHARING) \
+ $(wildcard include/config/SLAB_FREELIST_HARDENED) \
+ $(wildcard include/config/USERFAULTFD) \
+ $(wildcard include/config/ANON_VMA_NAME) \
+ $(wildcard include/config/PER_VMA_LOCK) \
+ $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \
+ $(wildcard include/config/MEMBARRIER) \
+ $(wildcard include/config/ARCH_HAS_ELF_CORE_EFLAGS) \
+ $(wildcard include/config/AIO) \
+ $(wildcard include/config/MMU_NOTIFIER) \
+ $(wildcard include/config/SPLIT_PMD_PTLOCKS) \
+ $(wildcard include/config/IOMMU_MM_DATA) \
+ $(wildcard include/config/KSM) \
+ $(wildcard include/config/MM_ID) \
+ $(wildcard include/config/CORE_DUMP_DEFAULT_ELF_HEADERS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/auxvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate.h \
+ $(wildcard include/config/TINY_RCU) \
+ $(wildcard include/config/RCU_STRICT_GRACE_PERIOD) \
+ $(wildcard include/config/RCU_LAZY) \
+ $(wildcard include/config/RCU_STALL_COMMON) \
+ $(wildcard include/config/VIRT_XFER_TO_GUEST_WORK) \
+ $(wildcard include/config/RCU_NOCB_CPU) \
+ $(wildcard include/config/TASKS_RCU_GENERIC) \
+ $(wildcard include/config/TASKS_RUDE_RCU) \
+ $(wildcard include/config/TREE_RCU) \
+ $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \
+ $(wildcard include/config/PROVE_RCU) \
+ $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_irq.h \
+ $(wildcard include/config/CONTEXT_TRACKING_IDLE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/maple_tree.h \
+ $(wildcard include/config/DEBUG_MAPLE_TREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rwsem.h \
+ $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \
+ $(wildcard include/config/DEBUG_RWSEMS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/completion.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/swait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timer.h \
+ $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \
+ $(wildcard include/config/NO_HZ_COMMON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/jiffies.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/generated/timeconst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/ktime.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timekeeping.h \
+ $(wildcard include/config/POSIX_AUX_CLOCKS) \
+ $(wildcard include/config/GENERIC_CMOS_UPDATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/clocksource_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/debugobjects.h \
+ $(wildcard include/config/DEBUG_OBJECTS) \
+ $(wildcard include/config/DEBUG_OBJECTS_FREE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uprobes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcu.h \
+ $(wildcard include/config/TINY_SRCU) \
+ $(wildcard include/config/NEED_SRCU_NMI_SAFE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/workqueue.h \
+ $(wildcard include/config/DEBUG_OBJECTS_WORK) \
+ $(wildcard include/config/FREEZER) \
+ $(wildcard include/config/WQ_WATCHDOG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_segcblist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/srcutree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_node_tree.h \
+ $(wildcard include/config/RCU_FANOUT) \
+ $(wildcard include/config/RCU_FANOUT_LEAF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mmu.h \
+ $(wildcard include/config/MODIFY_LDT_SYSCALL) \
+ $(wildcard include/config/ADDRESS_MASKING) \
+ $(wildcard include/config/BROADCAST_TLB_FLUSH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page-flags.h \
+ $(wildcard include/config/PAGE_IDLE_FLAG) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_2) \
+ $(wildcard include/config/ARCH_USES_PG_ARCH_3) \
+ $(wildcard include/config/MIGRATION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/local_lock_internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/zswap.h \
+ $(wildcard include/config/ZSWAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sizes.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memory_hotplug.h \
+ $(wildcard include/config/ARCH_HAS_ADD_PAGES) \
+ $(wildcard include/config/MEMORY_HOTREMOVE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/mmzone.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/topology.h \
+ $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \
+ $(wildcard include/config/SCHED_SMT) \
+ $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/arch_topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/topology.h \
+ $(wildcard include/config/X86_LOCAL_APIC) \
+ $(wildcard include/config/SCHED_MC_PRIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/EISA) \
+ $(wildcard include/config/X86_MPPARSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/mpspec_def.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/x86_init.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/apicdef.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/topology.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu_smt.h \
+ $(wildcard include/config/HOTPLUG_SMT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysctl.h \
+ $(wildcard include/config/SYSCTL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sysctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/elf.h \
+ $(wildcard include/config/ARCH_HAVE_EXTRA_ELF_NOTES) \
+ $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \
+ $(wildcard include/config/ARCH_HAVE_ELF_PROT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/elf.h \
+ $(wildcard include/config/X86_X32_ABI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/compat.h \
+ $(wildcard include/config/ARCH_HAS_SYSCALL_WRAPPER) \
+ $(wildcard include/config/COMPAT_OLD_SIGACTION) \
+ $(wildcard include/config/HARDENED_USERCOPY) \
+ $(wildcard include/config/ODD_RT_SIGACTION) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rhashtable-types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/ipcbuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/sembuf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/sockios.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uio.h \
+ $(wildcard include/config/ARCH_HAS_COPY_MC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ucopysize.h \
+ $(wildcard include/config/HARDENED_USERCOPY_DEFAULT_ON) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/uio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/socket.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/libc-compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/hdlc/ioctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs.h \
+ $(wildcard include/config/FANOTIFY_ACCESS_PERMISSIONS) \
+ $(wildcard include/config/FS_POSIX_ACL) \
+ $(wildcard include/config/CGROUP_WRITEBACK) \
+ $(wildcard include/config/IMA) \
+ $(wildcard include/config/FILE_LOCKING) \
+ $(wildcard include/config/FSNOTIFY) \
+ $(wildcard include/config/EPOLL) \
+ $(wildcard include/config/FS_DAX) \
+ $(wildcard include/config/BLOCK) \
+ $(wildcard include/config/UNICODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs/super_types.h \
+ $(wildcard include/config/QUOTA) \
+ $(wildcard include/config/FS_ENCRYPTION) \
+ $(wildcard include/config/FS_VERITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fs_dirent.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/errseq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_lru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/shrinker.h \
+ $(wildcard include/config/SHRINKER_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xarray.h \
+ $(wildcard include/config/XARRAY_MULTI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/mm.h \
+ $(wildcard include/config/MMU_LAZY_TLB_REFCOUNT) \
+ $(wildcard include/config/ARCH_HAS_MEMBARRIER_CALLBACKS) \
+ $(wildcard include/config/ARCH_HAS_SYNC_CORE_BEFORE_USERMODE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sync_core.h \
+ $(wildcard include/config/ARCH_HAS_PREPARE_SYNC_CORE_CMD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sync_core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/coredump.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/list_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bit_spinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uuid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-rwsem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuwait.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/signal.h \
+ $(wildcard include/config/SCHED_AUTOGROUP) \
+ $(wildcard include/config/BSD_PROCESS_ACCT) \
+ $(wildcard include/config/TASKSTATS) \
+ $(wildcard include/config/STACK_GROWSUP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist.h \
+ $(wildcard include/config/PROVE_RCU_LIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/signal.h \
+ $(wildcard include/config/DYNAMIC_SIGFRAME) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/jobctl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task.h \
+ $(wildcard include/config/HAVE_EXIT_THREAD) \
+ $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \
+ $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/uaccess.h \
+ $(wildcard include/config/ARCH_HAS_SUBPAGE_FAULTS) \
+ $(wildcard include/config/ARCH_MEMORY_ORDER_TSO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fault-inject-usercopy.h \
+ $(wildcard include/config/FAULT_INJECTION_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nospec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_OUTPUT) \
+ $(wildcard include/config/CC_HAS_ASM_GOTO_TIED_OUTPUT) \
+ $(wildcard include/config/X86_INTEL_USERCOPY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmap_lock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/smap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/extable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/tlbflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mmu_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interval_tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/invpcid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pti.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/DEBUG_WX) \
+ $(wildcard include/config/HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) \
+ $(wildcard include/config/ARCH_SUPPORTS_PMD_PFNMAP) \
+ $(wildcard include/config/ARCH_SUPPORTS_PUD_PFNMAP) \
+ $(wildcard include/config/HAVE_ARCH_SOFT_DIRTY) \
+ $(wildcard include/config/ARCH_HAS_PTE_PROTNONE) \
+ $(wildcard include/config/ARCH_HAS_PMD_SOFTLEAVES) \
+ $(wildcard include/config/PAGE_TABLE_CHECK) \
+ $(wildcard include/config/X86_SGX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pkru.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fpu/api.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/coco.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pgtable_uffd.h \
+ $(wildcard include/config/PTE_MARKER_UFFD_WP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_table_check.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/PROVIDE_OHCI1394_DMA_INIT) \
+ $(wildcard include/config/X86_IO_APIC) \
+ $(wildcard include/config/PCI_MMCONFIG) \
+ $(wildcard include/config/ACPI_APEI_GHES) \
+ $(wildcard include/config/INTEL_TXT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/vsyscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/fixmap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable-invert.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/uaccess_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/access_ok.h \
+ $(wildcard include/config/ALTERNATE_USER_ADDRESS_SPACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cred.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/capability.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/key.h \
+ $(wildcard include/config/KEY_NOTIFICATIONS) \
+ $(wildcard include/config/NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/assoc_array.h \
+ $(wildcard include/config/ASSOCIATIVE_ARRAY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/user.h \
+ $(wildcard include/config/VFIO_PCI_ZDEV_KVM) \
+ $(wildcard include/config/IOMMUFD) \
+ $(wildcard include/config/SECRETMEM) \
+ $(wildcard include/config/WATCH_QUEUE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/posix-timers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/alarmtimer.h \
+ $(wildcard include/config/RTC_CLASS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer.h \
+ $(wildcard include/config/HIGH_RES_TIMERS) \
+ $(wildcard include/config/TIME_LOW_RES) \
+ $(wildcard include/config/TIMERFD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hrtimer_rearm.h \
+ $(wildcard include/config/HRTIMER_REARM_DEFERRED) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/timerqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcuref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcu_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/quota.h \
+ $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/dqblk_xfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v1.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_v2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dqblk_qtree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/projid.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/quota.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unicode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dcache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_bl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lockref.h \
+ $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stringhash.h \
+ $(wildcard include/config/DCACHE_WORD_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hash.h \
+ $(wildcard include/config/HAVE_ARCH_HASH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vfsdebug.h \
+ $(wildcard include/config/DEBUG_VFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/wait_bit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/kdev_t.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/path.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/radix-tree.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/semaphore.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fcntl.h \
+ $(wildcard include/config/ARCH_32BIT_OFF_T) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/fcntl.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/openat2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/migrate_mode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delayed_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/rt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iocontext.h \
+ $(wildcard include/config/BLK_ICQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ioprio.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mnt_idmapping.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/slab.h \
+ $(wildcard include/config/FAILSLAB) \
+ $(wildcard include/config/KFENCE) \
+ $(wildcard include/config/SLUB_TINY) \
+ $(wildcard include/config/SLUB_DEBUG) \
+ $(wildcard include/config/KMALLOC_PARTITION_RANDOM) \
+ $(wildcard include/config/KMALLOC_PARTITION_TYPED) \
+ $(wildcard include/config/SLAB_BUCKETS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/percpu-refcount.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan.h \
+ $(wildcard include/config/KASAN_STACK) \
+ $(wildcard include/config/KASAN_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-enabled.h \
+ $(wildcard include/config/ARCH_DEFER_KASAN) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kasan-tags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rw_hint.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file_ref.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/aio_abi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/uapi/asm/unistd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/unistd_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_64_x32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/unistd_32_ia32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/task_stack.h \
+ $(wildcard include/config/DEBUG_STACK_USAGE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/magic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user32.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/compat.h \
+ $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/user_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/fsgsbase.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vdso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/elf-em.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject.h \
+ $(wildcard include/config/UEVENT_HELPER) \
+ $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sysfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernfs.h \
+ $(wildcard include/config/KERNFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/idr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kobject_ns.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/moduleparam.h \
+ $(wildcard include/config/ALPHA) \
+ $(wildcard include/config/PPC64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rbtree_latch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/error-injection.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/module.h \
+ $(wildcard include/config/UNWINDER_ORC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/module.h \
+ $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prandom.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/once.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/mm.h \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_BITS) \
+ $(wildcard include/config/HAVE_ARCH_MMAP_RND_COMPAT_BITS) \
+ $(wildcard include/config/PPC32) \
+ $(wildcard include/config/RISCV_USER_CFI) \
+ $(wildcard include/config/ARM64_GCS) \
+ $(wildcard include/config/ARCH_HAS_PKEYS) \
+ $(wildcard include/config/ARCH_PKEY_BITS) \
+ $(wildcard include/config/PARISC) \
+ $(wildcard include/config/SPARC64) \
+ $(wildcard include/config/ARM64_MTE) \
+ $(wildcard include/config/HAVE_ARCH_USERFAULTFD_MINOR) \
+ $(wildcard include/config/USERFAULTFD_RWP) \
+ $(wildcard include/config/MSEAL_SYSTEM_MAPPINGS) \
+ $(wildcard include/config/FIND_NORMAL_PAGE) \
+ $(wildcard include/config/SHMEM) \
+ $(wildcard include/config/ARCH_HAS_PTE_SPECIAL) \
+ $(wildcard include/config/ASYNC_KERNEL_PGTABLE_FREE) \
+ $(wildcard include/config/SPLIT_PTE_PTLOCKS) \
+ $(wildcard include/config/HIGHPTE) \
+ $(wildcard include/config/DEBUG_VM_RB) \
+ $(wildcard include/config/PAGE_POISONING) \
+ $(wildcard include/config/INIT_ON_ALLOC_DEFAULT_ON) \
+ $(wildcard include/config/INIT_ON_FREE_DEFAULT_ON) \
+ $(wildcard include/config/DEBUG_PAGEALLOC) \
+ $(wildcard include/config/ARCH_WANT_OPTIMIZE_DAX_VMEMMAP) \
+ $(wildcard include/config/HUGETLBFS) \
+ $(wildcard include/config/MAPPING_DIRTY_HELPERS) \
+ $(wildcard include/config/PAGE_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgalloc_tag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ext.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stacktrace.h \
+ $(wildcard include/config/ARCH_STACKWALK) \
+ $(wildcard include/config/STACKTRACE) \
+ $(wildcard include/config/HAVE_RELIABLE_STACKTRACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_ref.h \
+ $(wildcard include/config/DEBUG_PAGE_REF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pgtable.h \
+ $(wildcard include/config/ARCH_HAS_NONLEAF_PMD_YOUNG) \
+ $(wildcard include/config/ARCH_HAS_HW_PTE_YOUNG) \
+ $(wildcard include/config/GUP_GET_PXX_LOW_HIGH) \
+ $(wildcard include/config/ARCH_WANT_PMD_MKWRITE) \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMAP) \
+ $(wildcard include/config/X86_ESPFIX64) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memremap.h \
+ $(wildcard include/config/DEVICE_PRIVATE) \
+ $(wildcard include/config/PCI_P2PDMA) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ioport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheinfo.h \
+ $(wildcard include/config/ACPI_PPTT) \
+ $(wildcard include/config/ARM) \
+ $(wildcard include/config/ARCH_HAS_CPU_CACHE_ALIASING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhplock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/iommu-debug-pagealloc.h \
+ $(wildcard include/config/IOMMU_DEBUG_PAGEALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/huge_mm.h \
+ $(wildcard include/config/PGTABLE_HAS_HUGE_LEAVES) \
+ $(wildcard include/config/PERSISTENT_HUGE_ZERO_FOLIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmstat.h \
+ $(wildcard include/config/VM_EVENT_COUNTERS) \
+ $(wildcard include/config/DEBUG_TLBFLUSH) \
+ $(wildcard include/config/PER_VMA_LOCK_STATS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vm_event_item.h \
+ $(wildcard include/config/BALLOON) \
+ $(wildcard include/config/BALLOON_MIGRATION) \
+ $(wildcard include/config/X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sockptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdevice.h \
+ $(wildcard include/config/DCB) \
+ $(wildcard include/config/HYPERV_NET) \
+ $(wildcard include/config/WLAN) \
+ $(wildcard include/config/MAC80211_MESH) \
+ $(wildcard include/config/NET_IPIP) \
+ $(wildcard include/config/NET_IPGRE) \
+ $(wildcard include/config/IPV6_SIT) \
+ $(wildcard include/config/IPV6_TUNNEL) \
+ $(wildcard include/config/NETPOLL) \
+ $(wildcard include/config/XDP_SOCKETS) \
+ $(wildcard include/config/BQL) \
+ $(wildcard include/config/XPS) \
+ $(wildcard include/config/RFS_ACCEL) \
+ $(wildcard include/config/FCOE) \
+ $(wildcard include/config/XFRM_OFFLOAD) \
+ $(wildcard include/config/NET_POLL_CONTROLLER) \
+ $(wildcard include/config/LIBFCOE) \
+ $(wildcard include/config/NET_SHAPER) \
+ $(wildcard include/config/NETFILTER_EGRESS) \
+ $(wildcard include/config/NET_XGRESS) \
+ $(wildcard include/config/DEBUG_NET_SMALL_RTNL) \
+ $(wildcard include/config/WIRELESS_EXT) \
+ $(wildcard include/config/NET_L3_MASTER_DEV) \
+ $(wildcard include/config/IPV6) \
+ $(wildcard include/config/TLS_DEVICE) \
+ $(wildcard include/config/VLAN_8021Q) \
+ $(wildcard include/config/NET_DSA) \
+ $(wildcard include/config/TIPC) \
+ $(wildcard include/config/CFG80211) \
+ $(wildcard include/config/IEEE802154) \
+ $(wildcard include/config/6LOWPAN) \
+ $(wildcard include/config/MPLS_ROUTING) \
+ $(wildcard include/config/MCTP) \
+ $(wildcard include/config/INET_PSP) \
+ $(wildcard include/config/NETFILTER_INGRESS) \
+ $(wildcard include/config/NET_SCHED) \
+ $(wildcard include/config/PCPU_DEV_REFCNT) \
+ $(wildcard include/config/GARP) \
+ $(wildcard include/config/MRP) \
+ $(wildcard include/config/NET_DROP_MONITOR) \
+ $(wildcard include/config/CGROUP_NET_PRIO) \
+ $(wildcard include/config/MACSEC) \
+ $(wildcard include/config/DPLL) \
+ $(wildcard include/config/DIMLIB) \
+ $(wildcard include/config/RPS) \
+ $(wildcard include/config/NET_FLOW_LIMIT) \
+ $(wildcard include/config/NET_DEV_REFCNT_TRACKER) \
+ $(wildcard include/config/ETHTOOL_NETLINK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/delay.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/prefetch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/local.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dynamic_queue_limits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_namespace.h \
+ $(wildcard include/config/NF_CONNTRACK) \
+ $(wildcard include/config/NF_FLOW_TABLE) \
+ $(wildcard include/config/UNIX) \
+ $(wildcard include/config/IEEE802154_6LOWPAN) \
+ $(wildcard include/config/IP_SCTP) \
+ $(wildcard include/config/NETFILTER) \
+ $(wildcard include/config/NF_TABLES) \
+ $(wildcard include/config/WEXT_CORE) \
+ $(wildcard include/config/XFRM) \
+ $(wildcard include/config/IP_VS) \
+ $(wildcard include/config/MPLS) \
+ $(wildcard include/config/CAN) \
+ $(wildcard include/config/CRYPTO_USER) \
+ $(wildcard include/config/SMC) \
+ $(wildcard include/config/VSOCKETS) \
+ $(wildcard include/config/NET_NS) \
+ $(wildcard include/config/NET_NS_REFCNT_TRACKER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_dscp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mib.h \
+ $(wildcard include/config/XFRM_STATISTICS) \
+ $(wildcard include/config/TLS) \
+ $(wildcard include/config/MPTCP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/snmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/u64_stats_sync.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/local64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/unix.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv4.h \
+ $(wildcard include/config/IP_ROUTE_MULTIPATH) \
+ $(wildcard include/config/NET_UDP_TUNNEL) \
+ $(wildcard include/config/IP_MULTIPLE_TABLES) \
+ $(wildcard include/config/IP_ROUTE_CLASSID) \
+ $(wildcard include/config/IP_MROUTE) \
+ $(wildcard include/config/IP_MROUTE_MULTIPLE_TABLES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_frag.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-core.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/siphash.h \
+ $(wildcard include/config/HAVE_EFFICIENT_UNALIGNED_ACCESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ipv6.h \
+ $(wildcard include/config/IPV6_MULTIPLE_TABLES) \
+ $(wildcard include/config/IPV6_SUBTREES) \
+ $(wildcard include/config/IPV6_MROUTE) \
+ $(wildcard include/config/IPV6_MROUTE_MULTIPLE_TABLES) \
+ $(wildcard include/config/NF_DEFRAG_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst_ops.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmpv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/ieee802154_6lowpan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/sctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/netfilter.h \
+ $(wildcard include/config/LWTUNNEL) \
+ $(wildcard include/config/NETFILTER_FAMILY_ARP) \
+ $(wildcard include/config/NETFILTER_FAMILY_BRIDGE) \
+ $(wildcard include/config/NF_DEFRAG_IPV4) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/conntrack.h \
+ $(wildcard include/config/NF_CT_PROTO_SCTP) \
+ $(wildcard include/config/NF_CT_PROTO_GRE) \
+ $(wildcard include/config/NF_CONNTRACK_EVENTS) \
+ $(wildcard include/config/NF_CONNTRACK_LABELS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/nftables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xfrm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mpls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/can.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/xdp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/smc.h \
+ $(wildcard include/config/SMC_HS_CTRL_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/mctp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hashtable.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/vsock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_trackers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ref_tracker.h \
+ $(wildcard include/config/REF_TRACKER) \
+ $(wildcard include/config/DEBUG_FS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/stackdepot.h \
+ $(wildcard include/config/STACKDEPOT) \
+ $(wildcard include/config/STACKDEPOT_MAX_FRAMES) \
+ $(wildcard include/config/STACKDEPOT_ALWAYS_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/ns_common_types.h \
+ $(wildcard include/config/IPC_NS) \
+ $(wildcard include/config/PID_NS) \
+ $(wildcard include/config/TIME_NS) \
+ $(wildcard include/config/UTS_NS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ns/nstree_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/nsfs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/skbuff.h \
+ $(wildcard include/config/BRIDGE_NETFILTER) \
+ $(wildcard include/config/NET_TC_SKB_EXT) \
+ $(wildcard include/config/MAX_SKB_FRAGS) \
+ $(wildcard include/config/NET_SOCK_MSG) \
+ $(wildcard include/config/SKB_EXTENSIONS) \
+ $(wildcard include/config/WIRELESS) \
+ $(wildcard include/config/IPV6_NDISC_NODETYPE) \
+ $(wildcard include/config/NETFILTER_XT_TARGET_TRACE) \
+ $(wildcard include/config/NET_SWITCHDEV) \
+ $(wildcard include/config/NET_REDIRECT) \
+ $(wildcard include/config/SKB_DECRYPTED) \
+ $(wildcard include/config/NET_RX_BUSY_POLL) \
+ $(wildcard include/config/NETWORK_SECMARK) \
+ $(wildcard include/config/DEBUG_NET) \
+ $(wildcard include/config/FAIL_SKB_REALLOC) \
+ $(wildcard include/config/NETWORK_PHY_TIMESTAMPING) \
+ $(wildcard include/config/MCTP_FLOWS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bvec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/cacheflush.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kmsan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-direction.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/hardirq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/context_tracking_state.h \
+ $(wildcard include/config/CONTEXT_TRACKING_USER) \
+ $(wildcard include/config/CONTEXT_TRACKING) \
+ $(wildcard include/config/RCU_DYNTICKS_TORTURE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace_irq.h \
+ $(wildcard include/config/HWLAT_TRACER) \
+ $(wildcard include/config/OSNOISE_TRACER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vtime.h \
+ $(wildcard include/config/VIRT_CPU_ACCOUNTING) \
+ $(wildcard include/config/HAVE_VIRT_CPU_ACCOUNTING_IDLE) \
+ $(wildcard include/config/IRQ_TIME_ACCOUNTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/X86_THERMAL_VECTOR) \
+ $(wildcard include/config/X86_MCE_THRESHOLD) \
+ $(wildcard include/config/X86_MCE_AMD) \
+ $(wildcard include/config/X86_HV_CALLBACK_VECTOR) \
+ $(wildcard include/config/HYPERV) \
+ $(wildcard include/config/KVM) \
+ $(wildcard include/config/GUEST_PERF_EVENTS) \
+ $(wildcard include/config/X86_POSTED_MSI) \
+ $(wildcard include/config/CPU_MITIGATIONS) \
+ $(wildcard include/config/KVM_INTEL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/highmem-internal.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/checksum.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum.h \
+ $(wildcard include/config/GENERIC_CSUM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/checksum_64.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dma-mapping.h \
+ $(wildcard include/config/DMA_API_DEBUG) \
+ $(wildcard include/config/HAS_DMA) \
+ $(wildcard include/config/IOMMU_DMA) \
+ $(wildcard include/config/DMA_NEED_SYNC) \
+ $(wildcard include/config/NEED_DMA_MAP_STATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device.h \
+ $(wildcard include/config/GENERIC_MSI_IRQ) \
+ $(wildcard include/config/ENERGY_MODEL) \
+ $(wildcard include/config/PINCTRL) \
+ $(wildcard include/config/ARCH_HAS_DMA_OPS) \
+ $(wildcard include/config/DMA_DECLARE_COHERENT) \
+ $(wildcard include/config/DMA_CMA) \
+ $(wildcard include/config/SWIOTLB) \
+ $(wildcard include/config/SWIOTLB_DYNAMIC) \
+ $(wildcard include/config/PM) \
+ $(wildcard include/config/PM_SLEEP) \
+ $(wildcard include/config/OF) \
+ $(wildcard include/config/DEVTMPFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/dev_printk.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/energy_model.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/cpufreq.h \
+ $(wildcard include/config/CPU_FREQ) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/topology.h \
+ $(wildcard include/config/SCHED_CLUSTER) \
+ $(wildcard include/config/SCHED_MC) \
+ $(wildcard include/config/CPU_FREQ_GOV_SCHEDUTIL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/idle.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/sd_flags.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/klist.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm.h \
+ $(wildcard include/config/VT_CONSOLE_SLEEP) \
+ $(wildcard include/config/CXL_SUSPEND) \
+ $(wildcard include/config/PM_CLK) \
+ $(wildcard include/config/PM_GENERIC_DOMAINS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/bus.h \
+ $(wildcard include/config/ACPI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/class.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/devres.h \
+ $(wildcard include/config/HAS_IOMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device/driver.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/acpi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/device-id/of.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/device.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pm_wakeup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/scatterlist.h \
+ $(wildcard include/config/NEED_SG_DMA_LENGTH) \
+ $(wildcard include/config/NEED_SG_DMA_FLAGS) \
+ $(wildcard include/config/DEBUG_SG) \
+ $(wildcard include/config/SGL_ALLOC) \
+ $(wildcard include/config/ARCH_NO_SG_CHAIN) \
+ $(wildcard include/config/SG_POOL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/io.h \
+ $(wildcard include/config/MTRR) \
+ $(wildcard include/config/X86_PAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/asm/early_ioremap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/GENERIC_EARLY_IOREMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/shared/io.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/io.h \
+ $(wildcard include/config/GENERIC_IOMAP) \
+ $(wildcard include/config/TRACE_MMIO_ACCESS) \
+ $(wildcard include/config/HAS_IOPORT) \
+ $(wildcard include/config/GENERIC_IOREMAP) \
+ $(wildcard include/config/HAS_IOPORT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/iomap.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/PCI) \
+ $(wildcard include/config/NO_GENERIC_PCI_IOPORT_MAP) \
+ $(wildcard include/config/GENERIC_PCI_IOMAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/logic_pio.h \
+ $(wildcard include/config/INDIRECT_PIO) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/fwnode.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netdev_features.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_dissector.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_cls.h \
+ $(wildcard include/config/NET_CLS_ACT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pkt_sched.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_packet.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_frag_cache.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/net_debug.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netmem.h \
+ $(wildcard include/config/NET_DEVMEM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file_net.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seq_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_helpers.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ctype.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/string_choices.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netprio_cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup.h \
+ $(wildcard include/config/DEBUG_CGROUP_REF) \
+ $(wildcard include/config/CGROUP_CPUACCT) \
+ $(wildcard include/config/SOCK_CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_DATA) \
+ $(wildcard include/config/CGROUP_BPF) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/cgroupstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/taskstats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/nsproxy.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/user_namespace.h \
+ $(wildcard include/config/INOTIFY_USER) \
+ $(wildcard include/config/FANOTIFY) \
+ $(wildcard include/config/BINFMT_MISC) \
+ $(wildcard include/config/PERSISTENT_KEYRINGS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rculist_nulls.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_stat.h \
+ $(wildcard include/config/GENERIC_IRQ_STAT_SNAPSHOT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/interrupt.h \
+ $(wildcard include/config/IRQ_FORCED_THREADING) \
+ $(wildcard include/config/GENERIC_IRQ_PROBE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/irqreturn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/PCI_MSI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/sections.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/sections.h \
+ $(wildcard include/config/HAVE_FUNCTION_DESCRIPTORS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup-defs.h \
+ $(wildcard include/config/CGROUP_NET_CLASSID) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup-defs.h \
+ $(wildcard include/config/BPF_LSM) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/psi_types.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kthread.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_subsys.h \
+ $(wildcard include/config/CGROUP_DEVICE) \
+ $(wildcard include/config/CGROUP_FREEZER) \
+ $(wildcard include/config/CGROUP_PERF) \
+ $(wildcard include/config/CGROUP_HUGETLB) \
+ $(wildcard include/config/CGROUP_PIDS) \
+ $(wildcard include/config/CGROUP_RDMA) \
+ $(wildcard include/config/CGROUP_MISC) \
+ $(wildcard include/config/CGROUP_DMEM) \
+ $(wildcard include/config/CGROUP_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_namespace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cgroup_refcnt.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/scm.h \
+ $(wildcard include/config/SECURITY_NETWORK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/security.h \
+ $(wildcard include/config/SECURITY_PATH) \
+ $(wildcard include/config/SECURITY_INFINIBAND) \
+ $(wildcard include/config/SECURITY_NETWORK_XFRM) \
+ $(wildcard include/config/SECURITYFS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kernel_read_file.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf.h \
+ $(wildcard include/config/DEBUG_KERNEL) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_JMP) \
+ $(wildcard include/config/FINEIBT) \
+ $(wildcard include/config/BPF_JIT_ALWAYS_ON) \
+ $(wildcard include/config/INET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf.h \
+ $(wildcard include/config/BPF_LIRC_MODE2) \
+ $(wildcard include/config/EFFICIENT_UNALIGNED_ACCESS) \
+ $(wildcard include/config/BPF_KPROBE_OVERRIDE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/bpf_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/filter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf_defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/crypto/sha2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/kallsyms.h \
+ $(wildcard include/config/KALLSYMS_ALL) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpfptr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bsearch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/btf_ids.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/btf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rcupdate_trace.h \
+ $(wildcard include/config/TASKS_TRACE_RCU_NO_MB) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpu.h \
+ $(wildcard include/config/GENERIC_CPU_DEVICES) \
+ $(wildcard include/config/PM_SLEEP_SMP) \
+ $(wildcard include/config/PM_SLEEP_SMP_NONZERO_CPU) \
+ $(wildcard include/config/ARCH_HAS_CPU_FINALIZE_INIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/node.h \
+ $(wildcard include/config/HMEM_REPORTING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cpuhotplug.h \
+ $(wildcard include/config/HOTPLUG_CORE_SYNC_DEAD) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/static_call.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/text-patching.h \
+ $(wildcard include/config/UML_X86) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/memcontrol.h \
+ $(wildcard include/config/MEMCG_NMI_SAFETY_REQUIRES_ATOMIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/page_counter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmpressure.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventfd.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/writeback.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/flex_proportions.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/backing-dev-defs.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/blk_types.h \
+ $(wildcard include/config/FAIL_MAKE_REQUEST) \
+ $(wildcard include/config/BLK_CGROUP_IOCOST) \
+ $(wildcard include/config/BLK_INLINE_ENCRYPTION) \
+ $(wildcard include/config/BLK_DEV_INTEGRITY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/folio_batch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/cfi.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/cfi.h \
+ $(wildcard include/config/FINEIBT_BHI) \
+ $(wildcard include/config/FUNCTION_PADDING_CFI) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/xattr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ftrace.h \
+ $(wildcard include/config/TRACER_SNAPSHOT) \
+ $(wildcard include/config/HAVE_FUNCTION_GRAPH_FREGS) \
+ $(wildcard include/config/FUNCTION_TRACER) \
+ $(wildcard include/config/HAVE_DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/HAVE_FTRACE_REGS_HAVING_PT_REGS) \
+ $(wildcard include/config/HAVE_REGS_AND_STACK_ACCESS_API) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_REGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_ARGS) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_DIRECT_CALLS) \
+ $(wildcard include/config/STACK_TRACER) \
+ $(wildcard include/config/DYNAMIC_FTRACE_WITH_CALL_OPS) \
+ $(wildcard include/config/FUNCTION_GRAPH_RETVAL) \
+ $(wildcard include/config/FTRACE_SYSCALLS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_recursion.h \
+ $(wildcard include/config/FTRACE_RECORD_RECURSION) \
+ $(wildcard include/config/FTRACE_VALIDATE_RCU_IS_WATCHING) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/trace_clock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/pid_namespace.h \
+ $(wildcard include/config/MEMFD_CREATE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ptrace.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/seccomp.h \
+ $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \
+ $(wildcard include/config/SECCOMP_FILTER) \
+ $(wildcard include/config/CHECKPOINT_RESTORE) \
+ $(wildcard include/config/SECCOMP_CACHE_DEBUG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/seccomp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/ftrace.h \
+ $(wildcard include/config/HAVE_FENTRY) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/rqspinlock.h \
+ $(wildcard include/config/QUEUED_SPINLOCKS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/rqspinlock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lsm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/selinux.h \
+ $(wildcard include/config/SECURITY_SELINUX) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/smack.h \
+ $(wildcard include/config/SECURITY_SMACK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/apparmor.h \
+ $(wildcard include/config/SECURITY_APPARMOR) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/lsm/bpf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/compat.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_ether.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_link.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_bonding.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour_tables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6.h \
+ $(wildcard include/config/IPV6_ROUTER_PREF) \
+ $(wildcard include/config/IPV6_ROUTE_INFO) \
+ $(wildcard include/config/IPV6_OPTIMISTIC_DAD) \
+ $(wildcard include/config/IPV6_SEG6_HMAC) \
+ $(wildcard include/config/IPV6_MIP6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/tcp.h \
+ $(wildcard include/config/TCP_AO) \
+ $(wildcard include/config/BPF) \
+ $(wildcard include/config/TCP_MD5SIG) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/win_minmax.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock.h \
+ $(wildcard include/config/SOCK_RX_QUEUE_MAPPING) \
+ $(wildcard include/config/SOCK_VALIDATE_XMIT) \
+ $(wildcard include/config/BT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/generated/uapi/asm/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/asm-generic/poll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/eventpoll.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/indirect_call_wrapper.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dst.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/rtnetlink.h \
+ $(wildcard include/config/NET_INGRESS) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_addr.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/neighbour.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rtnetlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netlink.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_states.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/net_tstamp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ethtool_netlink_generated.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/l3mdev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fib_rules.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/fib_notifier.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_connection_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jhash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/unaligned/packed_struct.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/vdso/unaligned.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/request_sock.h \
+ $(wildcard include/config/SYN_COOKIES) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/rstreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/mptcp_pm.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/hash.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/timewait_sock.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/tcp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/errqueue.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/icmpv6.h \
+ $(wildcard include/config/NF_NAT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/inetdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inetpeer.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/jump_label_ratelimit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/if_inet6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/in_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_arp.h \
+ $(wildcard include/config/FIREWIRE_NET) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_arp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ndisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/addrconf.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip6_fib.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipv6_route.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/lwtunnel.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/nexthop.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/ip.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp.h \
+ $(wildcard include/config/BPF_STREAM_PARSER) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_hashtables.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sock_reuseport.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/filter.h \
+ $(wildcard include/config/HAVE_EBPF_JIT) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/sched/clock.h \
+ $(wildcard include/config/ARCH_WANTS_NO_INSTR) \
+ $(wildcard include/config/GENERIC_SCHED_CLOCK) \
+ $(wildcard include/config/HAVE_UNSTABLE_SCHED_CLOCK) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/set_memory.h \
+ $(wildcard include/config/ARCH_HAS_SET_MEMORY) \
+ $(wildcard include/config/ARCH_HAS_SET_DIRECT_MAP) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/set_memory.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/etherdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/crc32.h \
+ $(wildcard include/config/CRC32_ARCH) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bitrev.h \
+ $(wildcard include/config/HAVE_ARCH_BITREVERSE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/asm-generic/bitops/__bitrev.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/if_vlan.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/vmalloc.h \
+ $(wildcard include/config/HAVE_ARCH_HUGE_VMALLOC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/vmalloc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/pgtable_areas.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/sch_generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/gen_stats.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/flow_offload.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason-qdisc.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dropreason.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/tcp_ao.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/inet_ecn.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/dsfield.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/mptcp.h \
+ $(wildcard include/config/MPTCP_IPV6) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/xfrm.h \
+ $(wildcard include/config/XFRM_SUB_POLICY) \
+ $(wildcard include/config/NET_PKTGEN) \
+ $(wildcard include/config/XFRM_MIGRATE) \
+ $(wildcard include/config/XFRM_USER_COMPAT) \
+ $(wildcard include/config/XFRM_INTERFACE) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/pfkeyv2.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/ipsec.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit.h \
+ $(wildcard include/config/AUDIT_COMPAT_GENERIC) \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/audit_arch.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/audit.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/fanotify.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/arch/x86/include/asm/syscall.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gro_cells.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/secure_seq.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/bpf-cgroup.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/udp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/gso.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/icmp.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netns/generic.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter/nf_conntrack_zones_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter/nf_conntrack_tuple_common.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv4.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/typelimits.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/netfilter_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/net/netfilter/ipv6/nf_defrag_ipv6.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/linux/miscdevice.h \
+ /home/lgcosta/lab/linux_kernel/linux-7.3.4/include/uapi/linux/major.h \
+ include/compat/sys/timeout.h \
+ include/compat/sys/refcnt.h \
+ include/compat/sys/queue.h \
+ include/compat/sys/_null.h \
+ include/compat/sys/tree.h \
+ include/compat/sys/socket.h \
+ include/compat/net/if_types.h \
+ include/compat/net/if_var.h \
+ include/pfk_mbuf.h \
+ include/pfk_net.h \
+ include/pfk_if.h \
+ include/compat/net/toeplitz.h \
+ include/compat/crypto/siphash.h \
+ include/pfk_api.h \
+ include/net/pfvar.h \
+ include/compat/sys/syslimits.h \
+ include/compat/netinet/in.h \
+ include/compat/net/radix.h \
+ include/net/pfvar_priv.h \
+
+pfsrc/pfk_mod.o: $(deps_pfsrc/pfk_mod.o)
+
+$(deps_pfsrc/pfk_mod.o):
diff --git a/module/pfsrc/fq_codel.c b/module/pfsrc/fq_codel.c
new file mode 100644
index 0000000..91cb575
--- /dev/null
+++ b/module/pfsrc/fq_codel.c
@@ -0,0 +1,871 @@
+/* PFLINUX port of OpenBSD 8.0 net/fq_codel.c — see docs/porting-notes.md */
+#include
+
+/* #define FQCODEL_DEBUG 1 */
+
+#ifdef FQCODEL_DEBUG
+#define DPRINTF(x...) printf(x)
+#else
+#define DPRINTF(x...)
+#endif
+
+struct codel {
+ struct mbuf_list q;
+
+ unsigned int dropping:1; /* Dropping state */
+ unsigned int backlog:31; /* Number of bytes in the queue */
+
+ unsigned short drops; /* Free running counter of drops */
+ unsigned short ldrops; /* Value from the previous run */
+
+ int64_t start; /* The moment queue was above target */
+ int64_t next; /* Next interval */
+ int64_t delay; /* Delay incurred by the last packet */
+};
+
+struct codel_params {
+ int64_t target;
+ int64_t interval;
+ int64_t grace;
+ int quantum;
+
+ uint32_t *intervals;
+};
+
+void codel_initparams(struct codel_params *, unsigned int,
+ unsigned int, int);
+void codel_freeparams(struct codel_params *);
+void codel_enqueue(struct codel *, int64_t, struct mbuf *);
+struct mbuf *codel_dequeue(struct codel *, struct codel_params *, int64_t,
+ struct mbuf_list *, uint64_t *, uint64_t *);
+struct mbuf *codel_commit(struct codel *, struct mbuf *);
+void codel_purge(struct codel *, struct mbuf_list *);
+
+struct flow {
+ struct codel cd;
+ int active:1;
+ int deficit:31;
+#ifdef FQCODEL_DEBUG
+ uint16_t id;
+#endif
+ SIMPLEQ_ENTRY(flow) flowentry;
+};
+SIMPLEQ_HEAD(flowq, flow);
+
+struct fqcodel {
+ struct flowq newq;
+ struct flowq oldq;
+
+ struct flow *flows;
+ unsigned int qlength;
+
+ struct ifnet *ifp;
+
+ struct codel_params cparams;
+
+ unsigned int nflows;
+ unsigned int qlimit;
+ int quantum;
+
+ unsigned int flags;
+#define FQCF_FIXED_QUANTUM 0x1
+
+ /* stats */
+ struct fqcodel_pktcntr xmit_cnt;
+ struct fqcodel_pktcntr drop_cnt;
+
+ struct mbuf_list pending_drops;
+};
+
+unsigned int fqcodel_idx(unsigned int, const struct mbuf *);
+void *fqcodel_alloc(unsigned int, void *);
+void fqcodel_free(unsigned int, void *);
+struct mbuf *fqcodel_if_enq(struct ifqueue *, struct mbuf *);
+struct mbuf *fqcodel_if_deq_begin(struct ifqueue *, void **);
+void fqcodel_if_deq_commit(struct ifqueue *, struct mbuf *, void *);
+void fqcodel_if_purge(struct ifqueue *, struct mbuf_list *);
+
+struct mbuf *fqcodel_enq(struct fqcodel *, struct mbuf *);
+struct mbuf *fqcodel_deq_begin(struct fqcodel *, void **,
+ struct mbuf_list *);
+void fqcodel_deq_commit(struct fqcodel *, struct mbuf *, void *);
+void fqcodel_purge(struct fqcodel *, struct mbuf_list *);
+
+/*
+ * ifqueue glue.
+ */
+
+static const struct ifq_ops fqcodel_ops = {
+ fqcodel_idx,
+ fqcodel_if_enq,
+ fqcodel_if_deq_begin,
+ fqcodel_if_deq_commit,
+ fqcodel_if_purge,
+ fqcodel_alloc,
+ fqcodel_free
+};
+
+const struct ifq_ops *const ifq_fqcodel_ops = &fqcodel_ops;
+
+void *fqcodel_pf_alloc(struct ifnet *);
+int fqcodel_pf_addqueue(void *, struct pf_queuespec *);
+void fqcodel_pf_free(void *);
+int fqcodel_pf_qstats(struct pf_queuespec *, void *, int *);
+unsigned int fqcodel_pf_qlength(void *);
+struct mbuf *fqcodel_pf_enqueue(void *, struct mbuf *);
+struct mbuf *fqcodel_pf_deq_begin(void *, void **, struct mbuf_list *);
+void fqcodel_pf_deq_commit(void *, struct mbuf *, void *);
+void fqcodel_pf_purge(void *, struct mbuf_list *);
+
+/*
+ * pf queue glue.
+ */
+
+static const struct pfq_ops fqcodel_pf_ops = {
+ fqcodel_pf_alloc,
+ fqcodel_pf_addqueue,
+ fqcodel_pf_free,
+ fqcodel_pf_qstats,
+ fqcodel_pf_qlength,
+ fqcodel_pf_enqueue,
+ fqcodel_pf_deq_begin,
+ fqcodel_pf_deq_commit,
+ fqcodel_pf_purge
+};
+
+const struct pfq_ops *const pfq_fqcodel_ops = &fqcodel_pf_ops;
+
+/* Default aggregate queue depth */
+static const unsigned int fqcodel_qlimit = 1024;
+
+/*
+ * CoDel implementation
+ */
+
+/* Delay target, 5ms */
+static const int64_t codel_target = 5000000;
+
+/* First 399 "100 / sqrt(x)" intervals, ns precision */
+static const uint32_t codel_intervals[] = {
+ 100000000, 70710678, 57735027, 50000000, 44721360, 40824829, 37796447,
+ 35355339, 33333333, 31622777, 30151134, 28867513, 27735010, 26726124,
+ 25819889, 25000000, 24253563, 23570226, 22941573, 22360680, 21821789,
+ 21320072, 20851441, 20412415, 20000000, 19611614, 19245009, 18898224,
+ 18569534, 18257419, 17960530, 17677670, 17407766, 17149859, 16903085,
+ 16666667, 16439899, 16222142, 16012815, 15811388, 15617376, 15430335,
+ 15249857, 15075567, 14907120, 14744196, 14586499, 14433757, 14285714,
+ 14142136, 14002801, 13867505, 13736056, 13608276, 13483997, 13363062,
+ 13245324, 13130643, 13018891, 12909944, 12803688, 12700013, 12598816,
+ 12500000, 12403473, 12309149, 12216944, 12126781, 12038585, 11952286,
+ 11867817, 11785113, 11704115, 11624764, 11547005, 11470787, 11396058,
+ 11322770, 11250879, 11180340, 11111111, 11043153, 10976426, 10910895,
+ 10846523, 10783277, 10721125, 10660036, 10599979, 10540926, 10482848,
+ 10425721, 10369517, 10314212, 10259784, 10206207, 10153462, 10101525,
+ 10050378, 10000000, 9950372, 9901475, 9853293, 9805807, 9759001,
+ 9712859, 9667365, 9622504, 9578263, 9534626, 9491580, 9449112,
+ 9407209, 9365858, 9325048, 9284767, 9245003, 9205746, 9166985,
+ 9128709, 9090909, 9053575, 9016696, 8980265, 8944272, 8908708,
+ 8873565, 8838835, 8804509, 8770580, 8737041, 8703883, 8671100,
+ 8638684, 8606630, 8574929, 8543577, 8512565, 8481889, 8451543,
+ 8421519, 8391814, 8362420, 8333333, 8304548, 8276059, 8247861,
+ 8219949, 8192319, 8164966, 8137885, 8111071, 8084521, 8058230,
+ 8032193, 8006408, 7980869, 7955573, 7930516, 7905694, 7881104,
+ 7856742, 7832604, 7808688, 7784989, 7761505, 7738232, 7715167,
+ 7692308, 7669650, 7647191, 7624929, 7602859, 7580980, 7559289,
+ 7537784, 7516460, 7495317, 7474351, 7453560, 7432941, 7412493,
+ 7392213, 7372098, 7352146, 7332356, 7312724, 7293250, 7273930,
+ 7254763, 7235746, 7216878, 7198158, 7179582, 7161149, 7142857,
+ 7124705, 7106691, 7088812, 7071068, 7053456, 7035975, 7018624,
+ 7001400, 6984303, 6967330, 6950480, 6933752, 6917145, 6900656,
+ 6884284, 6868028, 6851887, 6835859, 6819943, 6804138, 6788442,
+ 6772855, 6757374, 6741999, 6726728, 6711561, 6696495, 6681531,
+ 6666667, 6651901, 6637233, 6622662, 6608186, 6593805, 6579517,
+ 6565322, 6551218, 6537205, 6523281, 6509446, 6495698, 6482037,
+ 6468462, 6454972, 6441566, 6428243, 6415003, 6401844, 6388766,
+ 6375767, 6362848, 6350006, 6337243, 6324555, 6311944, 6299408,
+ 6286946, 6274558, 6262243, 6250000, 6237829, 6225728, 6213698,
+ 6201737, 6189845, 6178021, 6166264, 6154575, 6142951, 6131393,
+ 6119901, 6108472, 6097108, 6085806, 6074567, 6063391, 6052275,
+ 6041221, 6030227, 6019293, 6008418, 5997601, 5986843, 5976143,
+ 5965500, 5954913, 5944383, 5933908, 5923489, 5913124, 5902813,
+ 5892557, 5882353, 5872202, 5862104, 5852057, 5842062, 5832118,
+ 5822225, 5812382, 5802589, 5792844, 5783149, 5773503, 5763904,
+ 5754353, 5744850, 5735393, 5725983, 5716620, 5707301, 5698029,
+ 5688801, 5679618, 5670480, 5661385, 5652334, 5643326, 5634362,
+ 5625440, 5616560, 5607722, 5598925, 5590170, 5581456, 5572782,
+ 5564149, 5555556, 5547002, 5538488, 5530013, 5521576, 5513178,
+ 5504819, 5496497, 5488213, 5479966, 5471757, 5463584, 5455447,
+ 5447347, 5439283, 5431254, 5423261, 5415304, 5407381, 5399492,
+ 5391639, 5383819, 5376033, 5368281, 5360563, 5352877, 5345225,
+ 5337605, 5330018, 5322463, 5314940, 5307449, 5299989, 5292561,
+ 5285164, 5277798, 5270463, 5263158, 5255883, 5248639, 5241424,
+ 5234239, 5227084, 5219958, 5212860, 5205792, 5198752, 5191741,
+ 5184758, 5177804, 5170877, 5163978, 5157106, 5150262, 5143445,
+ 5136655, 5129892, 5123155, 5116445, 5109761, 5103104, 5096472,
+ 5089866, 5083286, 5076731, 5070201, 5063697, 5057217, 5050763,
+ 5044333, 5037927, 5031546, 5025189, 5018856, 5012547, 5006262
+};
+
+void
+codel_initparams(struct codel_params *cp, unsigned int target,
+ unsigned int interval, int quantum)
+{
+ uint64_t mult;
+ unsigned int i;
+
+ /*
+ * Update observation intervals table according to the configured
+ * initial interval value.
+ */
+ if (interval > codel_intervals[0]) {
+ /*
+ * Select either specified target or 5% of an interval
+ * (RFC 8289, section 4.3).
+ */
+ cp->target = MAX(target, interval / 20);
+ cp->interval = interval;
+
+ /* The coefficient is scaled up by a 1000 */
+ mult = ((uint64_t)cp->interval * 1000) / codel_intervals[0];
+
+ /* Prepare table of intervals */
+ cp->intervals = mallocarray(nitems(codel_intervals),
+ sizeof(codel_intervals[0]), M_DEVBUF, M_WAITOK | M_ZERO);
+ for (i = 0; i < nitems(codel_intervals); i++)
+ cp->intervals[i] = ((uint64_t)codel_intervals[i] *
+ mult) / 1000;
+ } else {
+ cp->target = MAX(target, codel_target);
+ cp->interval = codel_intervals[0];
+ cp->intervals = (uint32_t *)codel_intervals;
+ }
+
+ cp->quantum = quantum;
+
+ /* Grace period for delta reuse (RFC 8289, section 5.5) */
+ cp->grace = 16 * cp->interval;
+}
+
+void
+codel_freeparams(struct codel_params *cp)
+{
+ if (cp->intervals != codel_intervals)
+ free(cp->intervals, M_DEVBUF, nitems(codel_intervals) *
+ sizeof(codel_intervals[0]));
+ cp->intervals = NULL;
+}
+
+static inline unsigned int
+codel_backlog(struct codel *cd)
+{
+ return (cd->backlog);
+}
+
+static inline unsigned int
+codel_qlength(struct codel *cd)
+{
+ return (ml_len(&cd->q));
+}
+
+static inline int64_t
+codel_delay(struct codel *cd)
+{
+ return (cd->delay);
+}
+
+void
+codel_enqueue(struct codel *cd, int64_t now, struct mbuf *m)
+{
+ m->m_pkthdr.ph_timestamp = now;
+
+ ml_enqueue(&cd->q, m);
+ cd->backlog += m->m_pkthdr.len;
+}
+
+/*
+ * Select the next interval according to the number of drops
+ * in the current one relative to the provided timestamp.
+ */
+static inline void
+control_law(struct codel *cd, struct codel_params *cp, int64_t rts)
+{
+ unsigned int idx;
+
+ KASSERT(cd->drops > 0);
+ idx = min(cd->drops - 1, nitems(codel_intervals) - 1);
+ cd->next = rts + cp->intervals[idx];
+}
+
+/*
+ * Pick the next enqueued packet and determine the queueing delay
+ * as well as whether or not it's a good candidate for dropping
+ * from the queue.
+ *
+ * The decision whether to drop the packet or not is made based
+ * on the queueing delay target of 5ms and on the current queue
+ * length in bytes which shouldn't be less than the amount of data
+ * that arrives in a typical interarrival time (MTU-sized packets
+ * arriving spaced by the amount of time it takes to send such a
+ * packet on the bottleneck).
+ */
+static inline struct mbuf *
+codel_next_packet(struct codel *cd, struct codel_params *cp, int64_t now,
+ int *drop)
+{
+ struct mbuf *m;
+
+ *drop = 0;
+
+ m = MBUF_LIST_FIRST(&cd->q);
+ if (m == NULL) {
+ KASSERT(cd->backlog == 0);
+ /* Empty queue, reset interval */
+ cd->start = 0;
+ return (NULL);
+ }
+
+ KASSERT(cd->backlog >= m->m_pkthdr.len);
+ if (now - m->m_pkthdr.ph_timestamp < cp->target ||
+ cd->backlog - m->m_pkthdr.len <= cp->quantum) {
+ /*
+ * The minimum delay decreased below the target, reset
+ * the current observation interval.
+ */
+ cd->start = 0;
+ return (m);
+ }
+
+ if (cd->start == 0) {
+ /*
+ * This is the first packet to be delayed for more than
+ * the target, start the first observation interval after
+ * a single RTT and see if the minimum delay goes below
+ * the target within the interval, otherwise punish the
+ * next packet.
+ */
+ cd->start = now + cp->interval;
+ } else if (now >= cd->start) {
+ *drop = 1;
+ }
+ return (m);
+}
+
+enum { INITIAL, ACCEPTING, FIRSTDROP, DROPPING, CONTROL, RECOVERY };
+
+static inline int
+codel_state_change(struct codel *cd, int64_t now, struct mbuf *m, int drop,
+ int state)
+{
+ if (state == FIRSTDROP)
+ return (ACCEPTING);
+
+ if (cd->dropping) {
+ if (!drop)
+ return (RECOVERY);
+ else if (now >= cd->next)
+ return (state == DROPPING ? CONTROL : DROPPING);
+ } else if (drop)
+ return (FIRSTDROP);
+
+ if (m == NULL)
+ return (RECOVERY);
+
+ return (ACCEPTING);
+}
+
+struct mbuf *
+codel_dequeue(struct codel *cd, struct codel_params *cp, int64_t now,
+ struct mbuf_list *free_ml, uint64_t *dpkts, uint64_t *dbytes)
+{
+ struct mbuf *m;
+ unsigned short delta;
+ int drop, state, done = 0;
+
+ state = INITIAL;
+
+ while (!done) {
+ m = codel_next_packet(cd, cp, now, &drop);
+ state = codel_state_change(cd, now, m, drop, state);
+
+ switch (state) {
+ case FIRSTDROP:
+ m = codel_commit(cd, m);
+ ml_enqueue(free_ml, m);
+
+ *dpkts += 1;
+ *dbytes += m->m_pkthdr.len;
+
+ cd->dropping = 1;
+
+ /*
+ * If we're still within the grace period and not
+ * meeting our minimal delay target we treat this
+ * as a continuation of the previous observation
+ * interval and shrink it further. Otherwise we
+ * start from the initial one.
+ */
+ delta = cd->drops - cd->ldrops;
+ if (delta > 1 && (now < cd->next ||
+ now - cd->next < cp->grace))
+ cd->drops = delta;
+ else
+ cd->drops = 1;
+ control_law(cd, cp, now);
+ cd->ldrops = cd->drops;
+
+ /* fetches the next packet and goes to ACCEPTING */
+ break;
+ case DROPPING:
+ m = codel_commit(cd, m);
+ ml_enqueue(free_ml, m);
+ cd->drops++;
+
+ *dpkts += 1;
+ *dbytes += m->m_pkthdr.len;
+
+ /* fetches the next packet and goes to CONTROL */
+ break;
+ case CONTROL:
+ if (drop) {
+ control_law(cd, cp, cd->next);
+ continue;
+ }
+ /* FALLTHROUGH */
+ case RECOVERY:
+ cd->dropping = 0;
+ /* FALLTHROUGH */
+ case ACCEPTING:
+ done = 1;
+ break;
+ }
+ }
+
+ if (m != NULL)
+ cd->delay = now - m->m_pkthdr.ph_timestamp;
+
+ return (m);
+}
+
+struct mbuf *
+codel_commit(struct codel *cd, struct mbuf *m)
+{
+ struct mbuf *n;
+
+ n = ml_dequeue(&cd->q);
+ if (m)
+ KASSERT(n == m);
+ KASSERT(n != NULL);
+ KASSERT(cd->backlog >= n->m_pkthdr.len);
+ cd->backlog -= n->m_pkthdr.len;
+ return (n);
+}
+
+void
+codel_purge(struct codel *cd, struct mbuf_list *ml)
+{
+ ml_enlist(ml, &cd->q);
+ cd->backlog = 0;
+}
+
+/*
+ * FQ-CoDel implementation
+ */
+
+static inline struct flow *
+classify_flow(struct fqcodel *fqc, struct mbuf *m)
+{
+ unsigned int index = 0;
+
+ if (m->m_pkthdr.csum_flags & M_FLOWID)
+ index = m->m_pkthdr.ph_flowid % fqc->nflows;
+
+ DPRINTF("%s: %u\n", __func__, index);
+
+ return (&fqc->flows[index]);
+}
+
+struct mbuf *
+fqcodel_enq(struct fqcodel *fqc, struct mbuf *m)
+{
+ struct flow *flow;
+ unsigned int backlog = 0;
+ int64_t now;
+ int i, ndrop;
+
+ flow = classify_flow(fqc, m);
+ if (flow == NULL)
+ return (m);
+
+ now = nsecuptime();
+ codel_enqueue(&flow->cd, now, m);
+ fqc->qlength++;
+
+ if (!flow->active) {
+ SIMPLEQ_INSERT_TAIL(&fqc->newq, flow, flowentry);
+ flow->deficit = fqc->quantum;
+ flow->active = 1;
+ DPRINTF("%s: flow %u active deficit %d\n", __func__,
+ flow->id, flow->deficit);
+ }
+
+ /*
+ * Flush pending_drops first to let PF account them individually.
+ * When batch dropping (below), we queue multiple packets but can
+ * only return one per enqueue call to maintain the interface
+ * contract.
+ */
+ if (!ml_empty(&fqc->pending_drops))
+ return (ml_dequeue(&fqc->pending_drops));
+
+ /*
+ * If total queue length exceeds the limit, find the flow with the
+ * largest backlog and drop up to half of its packets, with a
+ * maximum of 64, from the head. Implements RFC 8290, section 4.1
+ * batch drop to handle overload efficiently. Dropped packets are
+ * queued in pending_drops.
+ */
+ if (fqc->qlength > fqc->qlimit) {
+ for (i = 0; i < fqc->nflows; i++) {
+ if (codel_backlog(&fqc->flows[i].cd) > backlog) {
+ flow = &fqc->flows[i];
+ backlog = codel_backlog(&flow->cd);
+ }
+ }
+
+ KASSERT(flow != NULL);
+
+ ndrop = MIN(MAX(codel_qlength(&flow->cd) / 2, 1), 64);
+
+ for (i = 0; i < ndrop; i++) {
+ m = codel_commit(&flow->cd, NULL);
+ if (m == NULL)
+ break;
+ fqc->drop_cnt.packets++;
+ fqc->drop_cnt.bytes += m->m_pkthdr.len;
+ fqc->qlength--;
+ ml_enqueue(&fqc->pending_drops, m);
+ }
+
+ DPRINTF("%s: batch-dropped %d/%d pkts from flow %u\n", __func__,
+ i, ndrop, flow->id);
+
+ return (ml_dequeue(&fqc->pending_drops));
+ }
+
+ return (NULL);
+}
+
+static inline struct flowq *
+select_queue(struct fqcodel *fqc)
+{
+ struct flowq *fq = NULL;
+
+ if (!SIMPLEQ_EMPTY(&fqc->newq))
+ fq = &fqc->newq;
+ else if (!SIMPLEQ_EMPTY(&fqc->oldq))
+ fq = &fqc->oldq;
+ return (fq);
+}
+
+static inline struct flow *
+first_flow(struct fqcodel *fqc, struct flowq **fq)
+{
+ struct flow *flow;
+
+ while ((*fq = select_queue(fqc)) != NULL) {
+ while ((flow = SIMPLEQ_FIRST(*fq)) != NULL) {
+ if (flow->deficit <= 0) {
+ flow->deficit += fqc->quantum;
+ SIMPLEQ_REMOVE_HEAD(*fq, flowentry);
+ SIMPLEQ_INSERT_TAIL(&fqc->oldq, flow,
+ flowentry);
+ DPRINTF("%s: flow %u deficit %d\n", __func__,
+ flow->id, flow->deficit);
+ } else
+ return (flow);
+ }
+ }
+
+ return (NULL);
+}
+
+static inline struct flow *
+next_flow(struct fqcodel *fqc, struct flow *flow, struct flowq **fq)
+{
+ SIMPLEQ_REMOVE_HEAD(*fq, flowentry);
+
+ if (*fq == &fqc->newq && !SIMPLEQ_EMPTY(&fqc->oldq)) {
+ /* A packet was dropped, starve the queue */
+ SIMPLEQ_INSERT_TAIL(&fqc->oldq, flow, flowentry);
+ DPRINTF("%s: flow %u ->oldq deficit %d\n", __func__,
+ flow->id, flow->deficit);
+ } else {
+ /* A packet was dropped on a starved queue, disable it */
+ flow->active = 0;
+ DPRINTF("%s: flow %u inactive deficit %d\n", __func__,
+ flow->id, flow->deficit);
+ }
+
+ return (first_flow(fqc, fq));
+}
+
+struct mbuf *
+fqcodel_deq_begin(struct fqcodel *fqc, void **cookiep,
+ struct mbuf_list *free_ml)
+{
+ struct mbuf_list ml = MBUF_LIST_INITIALIZER();
+ struct flowq *fq;
+ struct flow *flow;
+ struct mbuf *m;
+ int64_t now;
+
+ if ((fqc->flags & FQCF_FIXED_QUANTUM) == 0)
+ fqc->quantum = fqc->ifp->if_mtu + max_linkhdr;
+
+ now = nsecuptime();
+
+ for (flow = first_flow(fqc, &fq); flow != NULL;
+ flow = next_flow(fqc, flow, &fq)) {
+ m = codel_dequeue(&flow->cd, &fqc->cparams, now, &ml,
+ &fqc->drop_cnt.packets, &fqc->drop_cnt.bytes);
+
+ KASSERT(fqc->qlength >= ml_len(&ml));
+ fqc->qlength -= ml_len(&ml);
+
+ ml_enlist(free_ml, &ml);
+
+ if (m != NULL) {
+ flow->deficit -= m->m_pkthdr.len;
+ DPRINTF("%s: flow %u deficit %d\n", __func__,
+ flow->id, flow->deficit);
+ *cookiep = flow;
+ return (m);
+ }
+ }
+
+ return (NULL);
+}
+
+void
+fqcodel_deq_commit(struct fqcodel *fqc, struct mbuf *m, void *cookie)
+{
+ struct flow *flow = cookie;
+
+ KASSERT(fqc->qlength > 0);
+ fqc->qlength--;
+
+ fqc->xmit_cnt.packets++;
+ fqc->xmit_cnt.bytes += m->m_pkthdr.len;
+
+ (void)codel_commit(&flow->cd, m);
+}
+
+void
+fqcodel_purge(struct fqcodel *fqc, struct mbuf_list *ml)
+{
+ unsigned int i;
+
+ for (i = 0; i < fqc->nflows; i++)
+ codel_purge(&fqc->flows[i].cd, ml);
+ ml_enlist(ml, &fqc->pending_drops);
+ fqc->qlength = 0;
+}
+
+struct mbuf *
+fqcodel_if_enq(struct ifqueue *ifq, struct mbuf *m)
+{
+ return fqcodel_enq(ifq->ifq_q, m);
+}
+
+struct mbuf *
+fqcodel_if_deq_begin(struct ifqueue *ifq, void **cookiep)
+{
+ struct mbuf_list free_ml = MBUF_LIST_INITIALIZER();
+ struct mbuf *m;
+
+ m = fqcodel_deq_begin(ifq->ifq_q, cookiep, &free_ml);
+ ifq_mfreeml(ifq, &free_ml);
+ return (m);
+}
+
+void
+fqcodel_if_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie)
+{
+ return fqcodel_deq_commit(ifq->ifq_q, m, cookie);
+}
+
+void
+fqcodel_if_purge(struct ifqueue *ifq, struct mbuf_list *ml)
+{
+ return fqcodel_purge(ifq->ifq_q, ml);
+}
+
+void *
+fqcodel_pf_alloc(struct ifnet *ifp)
+{
+ struct fqcodel *fqc;
+
+ fqc = malloc(sizeof(struct fqcodel), M_DEVBUF, M_WAITOK | M_ZERO);
+
+ SIMPLEQ_INIT(&fqc->newq);
+ SIMPLEQ_INIT(&fqc->oldq);
+ ml_init(&fqc->pending_drops);
+
+ return (fqc);
+}
+
+int
+fqcodel_pf_addqueue(void *arg, struct pf_queuespec *qs)
+{
+ struct ifnet *ifp = qs->kif->pfik_ifp;
+ struct fqcodel *fqc = arg;
+
+ if (qs->flowqueue.flows == 0 || qs->flowqueue.flows > 0xffff)
+ return (EINVAL);
+
+ fqc->nflows = qs->flowqueue.flows;
+ fqc->quantum = qs->flowqueue.quantum;
+ if (qs->qlimit > 0)
+ fqc->qlimit = qs->qlimit;
+ else
+ fqc->qlimit = fqcodel_qlimit;
+ if (fqc->quantum > 0)
+ fqc->flags |= FQCF_FIXED_QUANTUM;
+ else
+ fqc->quantum = ifp->if_mtu + max_linkhdr;
+
+ codel_initparams(&fqc->cparams, qs->flowqueue.target,
+ qs->flowqueue.interval, fqc->quantum);
+
+ fqc->flows = mallocarray(fqc->nflows, sizeof(struct flow),
+ M_DEVBUF, M_WAITOK | M_ZERO);
+
+#ifdef FQCODEL_DEBUG
+ {
+ unsigned int i;
+
+ for (i = 0; i < fqc->nflows; i++)
+ fqc->flows[i].id = i;
+ }
+#endif
+
+ fqc->ifp = ifp;
+
+ DPRINTF("fq-codel on %s: %d queues %d deep, quantum %d target %llums "
+ "interval %llums\n", ifp->if_xname, fqc->nflows, fqc->qlimit,
+ fqc->quantum, fqc->cparams.target / 1000000,
+ fqc->cparams.interval / 1000000);
+
+ return (0);
+}
+
+void
+fqcodel_pf_free(void *arg)
+{
+ struct fqcodel *fqc = arg;
+
+ ml_purge(&fqc->pending_drops);
+ codel_freeparams(&fqc->cparams);
+ free(fqc->flows, M_DEVBUF, fqc->nflows * sizeof(struct flow));
+ free(fqc, M_DEVBUF, sizeof(struct fqcodel));
+}
+
+int
+fqcodel_pf_qstats(struct pf_queuespec *qs, void *ubuf, int *nbytes)
+{
+ struct ifnet *ifp = qs->kif->pfik_ifp;
+ struct fqcodel_stats stats;
+ struct fqcodel *fqc;
+ int64_t delay;
+ unsigned int i;
+ int error = 0;
+
+ if (ifp == NULL)
+ return (EBADF);
+
+ if (*nbytes < sizeof(stats))
+ return (EINVAL);
+
+ memset(&stats, 0, sizeof(stats));
+
+ /* XXX: multi-q? */
+ fqc = ifq_q_enter(&ifp->if_snd, ifq_fqcodel_ops);
+ if (fqc == NULL)
+ return (EBADF);
+
+ stats.xmit_cnt = fqc->xmit_cnt;
+ stats.drop_cnt = fqc->drop_cnt;
+
+ stats.qlength = ifq_len(&ifp->if_snd);
+ stats.qlimit = fqc->qlimit;
+
+ stats.flows = 0;
+ stats.delaysum = stats.delaysumsq = 0;
+
+ for (i = 0; i < fqc->nflows; i++) {
+ if (codel_qlength(&fqc->flows[i].cd) == 0)
+ continue;
+ /* Scale down to microseconds to avoid overflows */
+ delay = codel_delay(&fqc->flows[i].cd) / 1000;
+ stats.delaysum += delay;
+ stats.delaysumsq += delay * delay;
+ stats.flows++;
+ }
+
+ ifq_q_leave(&ifp->if_snd, fqc);
+
+ if ((error = copyout((caddr_t)&stats, ubuf, sizeof(stats))) != 0)
+ return (error);
+
+ *nbytes = sizeof(stats);
+ return (0);
+}
+
+unsigned int
+fqcodel_pf_qlength(void *fqc)
+{
+ return ((struct fqcodel *)fqc)->qlength;
+}
+
+struct mbuf *
+fqcodel_pf_enqueue(void *fqc, struct mbuf *m)
+{
+ return fqcodel_enq(fqc, m);
+}
+
+struct mbuf *
+fqcodel_pf_deq_begin(void *fqc, void **cookiep, struct mbuf_list *free_ml)
+{
+ return fqcodel_deq_begin(fqc, cookiep, free_ml);
+}
+
+void
+fqcodel_pf_deq_commit(void *fqc, struct mbuf *m, void *cookie)
+{
+ return fqcodel_deq_commit(fqc, m, cookie);
+}
+
+void
+fqcodel_pf_purge(void *fqc, struct mbuf_list *ml)
+{
+ return fqcodel_purge(fqc, ml);
+}
+
+unsigned int
+fqcodel_idx(unsigned int nqueues, const struct mbuf *m)
+{
+ return (0);
+}
+
+void *
+fqcodel_alloc(unsigned int idx, void *arg)
+{
+ /* Allocation is done in fqcodel_pf_alloc */
+ return (arg);
+}
+
+void
+fqcodel_free(unsigned int idx, void *arg)
+{
+ fqcodel_pf_free(arg);
+}
diff --git a/module/pfsrc/hfsc.c b/module/pfsrc/hfsc.c
new file mode 100644
index 0000000..838b9a5
--- /dev/null
+++ b/module/pfsrc/hfsc.c
@@ -0,0 +1,1667 @@
+/* PFLINUX port of OpenBSD 8.0 net/hfsc.c — see docs/porting-notes.md */
+#include
+
+/*
+ * kernel internal service curve representation
+ * coordinates are given by 64 bit unsigned integers.
+ * x-axis: unit is clock count. for the intel x86 architecture,
+ * the raw Pentium TSC (Timestamp Counter) value is used.
+ * virtual time is also calculated in this time scale.
+ * y-axis: unit is byte.
+ *
+ * the service curve parameters are converted to the internal
+ * representation.
+ * the slope values are scaled to avoid overflow.
+ * the inverse slope values as well as the y-projection of the 1st
+ * segment are kept in order to avoid 64-bit divide operations
+ * that are expensive on 32-bit architectures.
+ *
+ * note: Intel Pentium TSC never wraps around in several thousands of years.
+ * x-axis doesn't wrap around for 1089 years with 1GHz clock.
+ * y-axis doesn't wrap around for 4358 years with 1Gbps bandwidth.
+ */
+
+/* kernel internal representation of a service curve */
+struct hfsc_internal_sc {
+ u_int64_t sm1; /* scaled slope of the 1st segment */
+ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */
+ u_int64_t dx; /* the x-projection of the 1st segment */
+ u_int64_t dy; /* the y-projection of the 1st segment */
+ u_int64_t sm2; /* scaled slope of the 2nd segment */
+ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */
+};
+
+/* runtime service curve */
+struct hfsc_runtime_sc {
+ u_int64_t x; /* current starting position on x-axis */
+ u_int64_t y; /* current starting position on x-axis */
+ u_int64_t sm1; /* scaled slope of the 1st segment */
+ u_int64_t ism1; /* scaled inverse-slope of the 1st segment */
+ u_int64_t dx; /* the x-projection of the 1st segment */
+ u_int64_t dy; /* the y-projection of the 1st segment */
+ u_int64_t sm2; /* scaled slope of the 2nd segment */
+ u_int64_t ism2; /* scaled inverse-slope of the 2nd segment */
+};
+
+struct hfsc_classq {
+ struct mbuf_list q; /* Queue of packets */
+ int qlimit; /* Queue limit */
+};
+
+/* for TAILQ based ellist and actlist implementation */
+struct hfsc_class;
+TAILQ_HEAD(hfsc_eligible, hfsc_class);
+TAILQ_HEAD(hfsc_active, hfsc_class);
+#define hfsc_actlist_last(s) TAILQ_LAST(s, hfsc_active)
+
+struct hfsc_class {
+ u_int cl_id; /* class id (just for debug) */
+ u_int32_t cl_handle; /* class handle */
+ int cl_flags; /* misc flags */
+
+ struct hfsc_class *cl_parent; /* parent class */
+ struct hfsc_class *cl_siblings; /* sibling classes */
+ struct hfsc_class *cl_children; /* child classes */
+
+ struct hfsc_classq cl_q; /* class queue structure */
+
+ const struct pfq_ops *cl_qops; /* queue manager */
+ void *cl_qdata; /* queue manager data */
+ void *cl_cookie; /* queue manager cookie */
+
+ u_int64_t cl_total; /* total work in bytes */
+ u_int64_t cl_cumul; /* cumulative work in bytes
+ done by real-time criteria */
+ u_int64_t cl_d; /* deadline */
+ u_int64_t cl_e; /* eligible time */
+ u_int64_t cl_vt; /* virtual time */
+ u_int64_t cl_f; /* time when this class will fit for
+ link-sharing, max(myf, cfmin) */
+ u_int64_t cl_myf; /* my fit-time (as calculated from this
+ class's own upperlimit curve) */
+ u_int64_t cl_myfadj; /* my fit-time adjustment
+ (to cancel history dependence) */
+ u_int64_t cl_cfmin; /* earliest children's fit-time (used
+ with cl_myf to obtain cl_f) */
+ u_int64_t cl_cvtmin; /* minimal virtual time among the
+ children fit for link-sharing
+ (monotonic within a period) */
+ u_int64_t cl_vtadj; /* intra-period cumulative vt
+ adjustment */
+ u_int64_t cl_vtoff; /* inter-period cumulative vt offset */
+ u_int64_t cl_cvtmax; /* max child's vt in the last period */
+
+ u_int64_t cl_initvt; /* init virtual time (for debugging) */
+
+ struct hfsc_internal_sc *cl_rsc; /* internal real-time service curve */
+ struct hfsc_internal_sc *cl_fsc; /* internal fair service curve */
+ struct hfsc_internal_sc *cl_usc; /* internal upperlimit service curve */
+ struct hfsc_runtime_sc cl_deadline; /* deadline curve */
+ struct hfsc_runtime_sc cl_eligible; /* eligible curve */
+ struct hfsc_runtime_sc cl_virtual; /* virtual curve */
+ struct hfsc_runtime_sc cl_ulimit; /* upperlimit curve */
+
+ u_int cl_vtperiod; /* vt period sequence no */
+ u_int cl_parentperiod; /* parent's vt period seqno */
+ int cl_nactive; /* number of active children */
+ struct hfsc_active cl_actc; /* active children list */
+
+ TAILQ_ENTRY(hfsc_class) cl_actlist; /* active children list entry */
+ TAILQ_ENTRY(hfsc_class) cl_ellist; /* eligible list entry */
+
+ struct {
+ struct hfsc_pktcntr xmit_cnt;
+ struct hfsc_pktcntr drop_cnt;
+ u_int period;
+ } cl_stats;
+};
+
+/*
+ * hfsc interface state
+ */
+struct hfsc_if {
+ struct hfsc_if *hif_next; /* interface state list */
+ struct hfsc_class *hif_rootclass; /* root class */
+ struct hfsc_class *hif_defaultclass; /* default class */
+ struct hfsc_class **hif_class_tbl;
+
+ u_int64_t hif_microtime; /* time at deq_begin */
+
+ u_int hif_allocated; /* # of slots in hif_class_tbl */
+ u_int hif_classes; /* # of classes in the tree */
+ u_int hif_classid; /* class id sequence number */
+
+ struct hfsc_eligible hif_eligible; /* eligible list */
+ struct timeout hif_defer; /* for queues that weren't ready */
+};
+
+/*
+ * function prototypes
+ */
+struct hfsc_class *hfsc_class_create(struct hfsc_if *,
+ struct hfsc_sc *, struct hfsc_sc *,
+ struct hfsc_sc *, struct hfsc_class *, int,
+ int, int);
+int hfsc_class_destroy(struct hfsc_if *,
+ struct hfsc_class *);
+struct hfsc_class *hfsc_nextclass(struct hfsc_class *);
+
+void hfsc_cl_purge(struct hfsc_if *, struct hfsc_class *,
+ struct mbuf_list *);
+
+void hfsc_update_sc(struct hfsc_if *, struct hfsc_class *, int);
+void hfsc_deferred(void *);
+void hfsc_update_cfmin(struct hfsc_class *);
+void hfsc_set_active(struct hfsc_if *, struct hfsc_class *, int);
+void hfsc_set_passive(struct hfsc_if *, struct hfsc_class *);
+void hfsc_init_ed(struct hfsc_if *, struct hfsc_class *, int);
+void hfsc_update_ed(struct hfsc_if *, struct hfsc_class *, int);
+void hfsc_update_d(struct hfsc_class *, int);
+void hfsc_init_vf(struct hfsc_class *, int);
+void hfsc_update_vf(struct hfsc_class *, int, u_int64_t);
+void hfsc_ellist_insert(struct hfsc_if *, struct hfsc_class *);
+void hfsc_ellist_remove(struct hfsc_if *, struct hfsc_class *);
+void hfsc_ellist_update(struct hfsc_if *, struct hfsc_class *);
+struct hfsc_class *hfsc_ellist_get_mindl(struct hfsc_if *, u_int64_t);
+void hfsc_actlist_insert(struct hfsc_class *);
+void hfsc_actlist_remove(struct hfsc_class *);
+void hfsc_actlist_update(struct hfsc_class *);
+
+struct hfsc_class *hfsc_actlist_firstfit(struct hfsc_class *,
+ u_int64_t);
+
+static __inline u_int64_t seg_x2y(u_int64_t, u_int64_t);
+static __inline u_int64_t seg_y2x(u_int64_t, u_int64_t);
+static __inline u_int64_t m2sm(u_int64_t);
+static __inline u_int64_t m2ism(u_int64_t);
+static __inline u_int64_t d2dx(u_int);
+static __inline u_int64_t sm2m(u_int64_t);
+static __inline u_int dx2d(u_int64_t);
+
+void hfsc_sc2isc(struct hfsc_sc *, struct hfsc_internal_sc *);
+void hfsc_rtsc_init(struct hfsc_runtime_sc *,
+ struct hfsc_internal_sc *, u_int64_t, u_int64_t);
+u_int64_t hfsc_rtsc_y2x(struct hfsc_runtime_sc *, u_int64_t);
+u_int64_t hfsc_rtsc_x2y(struct hfsc_runtime_sc *, u_int64_t);
+void hfsc_rtsc_min(struct hfsc_runtime_sc *,
+ struct hfsc_internal_sc *, u_int64_t, u_int64_t);
+
+void hfsc_getclstats(struct hfsc_class_stats *, struct hfsc_class *);
+struct hfsc_class *hfsc_clh2cph(struct hfsc_if *, u_int32_t);
+
+#define HFSC_FREQ 1000000000LL
+#define HFSC_CLK_PER_TICK tick_nsec
+#define HFSC_HT_INFINITY 0xffffffffffffffffLL /* infinite time value */
+
+struct pool hfsc_class_pl, hfsc_internal_sc_pl;
+
+/*
+ * ifqueue glue.
+ */
+
+unsigned int hfsc_idx(unsigned int, const struct mbuf *);
+struct mbuf *hfsc_enq(struct ifqueue *, struct mbuf *);
+struct mbuf *hfsc_deq_begin(struct ifqueue *, void **);
+void hfsc_deq_commit(struct ifqueue *, struct mbuf *, void *);
+void hfsc_purge(struct ifqueue *, struct mbuf_list *);
+void *hfsc_alloc(unsigned int, void *);
+void hfsc_free(unsigned int, void *);
+
+const struct ifq_ops hfsc_ops = {
+ hfsc_idx,
+ hfsc_enq,
+ hfsc_deq_begin,
+ hfsc_deq_commit,
+ hfsc_purge,
+ hfsc_alloc,
+ hfsc_free,
+};
+
+const struct ifq_ops * const ifq_hfsc_ops = &hfsc_ops;
+
+/*
+ * pf queue glue.
+ */
+
+void *hfsc_pf_alloc(struct ifnet *);
+int hfsc_pf_addqueue(void *, struct pf_queuespec *);
+void hfsc_pf_free(void *);
+int hfsc_pf_qstats(struct pf_queuespec *, void *, int *);
+unsigned int hfsc_pf_qlength(void *);
+struct mbuf * hfsc_pf_enqueue(void *, struct mbuf *);
+struct mbuf * hfsc_pf_deq_begin(void *, void **, struct mbuf_list *);
+void hfsc_pf_deq_commit(void *, struct mbuf *, void *);
+void hfsc_pf_purge(void *, struct mbuf_list *);
+
+const struct pfq_ops hfsc_pf_ops = {
+ hfsc_pf_alloc,
+ hfsc_pf_addqueue,
+ hfsc_pf_free,
+ hfsc_pf_qstats,
+ hfsc_pf_qlength,
+ hfsc_pf_enqueue,
+ hfsc_pf_deq_begin,
+ hfsc_pf_deq_commit,
+ hfsc_pf_purge
+};
+
+const struct pfq_ops * const pfq_hfsc_ops = &hfsc_pf_ops;
+
+/*
+ * shortcuts for repeated use
+ */
+static inline unsigned int
+hfsc_class_qlength(struct hfsc_class *cl)
+{
+ /* Only leaf classes have a queue */
+ if (cl->cl_qops != NULL)
+ return cl->cl_qops->pfq_qlength(cl->cl_qdata);
+ return 0;
+}
+
+static inline struct mbuf *
+hfsc_class_enqueue(struct hfsc_class *cl, struct mbuf *m)
+{
+ return cl->cl_qops->pfq_enqueue(cl->cl_qdata, m);
+}
+
+static inline struct mbuf *
+hfsc_class_deq_begin(struct hfsc_class *cl, struct mbuf_list *ml)
+{
+ return cl->cl_qops->pfq_deq_begin(cl->cl_qdata, &cl->cl_cookie, ml);
+}
+
+static inline void
+hfsc_class_deq_commit(struct hfsc_class *cl, struct mbuf *m)
+{
+ return cl->cl_qops->pfq_deq_commit(cl->cl_qdata, m, cl->cl_cookie);
+}
+
+static inline void
+hfsc_class_purge(struct hfsc_class *cl, struct mbuf_list *ml)
+{
+ /* Only leaf classes have a queue */
+ if (cl->cl_qops != NULL)
+ return cl->cl_qops->pfq_purge(cl->cl_qdata, ml);
+}
+
+static inline u_int
+hfsc_more_slots(u_int current)
+{
+ u_int want = current * 2;
+
+ return (want > HFSC_MAX_CLASSES ? HFSC_MAX_CLASSES : want);
+}
+
+static void
+hfsc_grow_class_tbl(struct hfsc_if *hif, u_int howmany)
+{
+ struct hfsc_class **newtbl, **old;
+ size_t oldlen = sizeof(void *) * hif->hif_allocated;
+
+ newtbl = mallocarray(howmany, sizeof(void *), M_DEVBUF,
+ M_WAITOK | M_ZERO);
+ old = hif->hif_class_tbl;
+
+ memcpy(newtbl, old, oldlen);
+ hif->hif_class_tbl = newtbl;
+ hif->hif_allocated = howmany;
+
+ free(old, M_DEVBUF, oldlen);
+}
+
+void
+hfsc_initialize(void)
+{
+ pool_init(&hfsc_class_pl, sizeof(struct hfsc_class), 0,
+ IPL_NONE, PR_WAITOK, "hfscclass", NULL);
+ pool_init(&hfsc_internal_sc_pl, sizeof(struct hfsc_internal_sc), 0,
+ IPL_NONE, PR_WAITOK, "hfscintsc", NULL);
+}
+
+void *
+hfsc_pf_alloc(struct ifnet *ifp)
+{
+ struct hfsc_if *hif;
+
+ KASSERT(ifp != NULL);
+
+ hif = malloc(sizeof(*hif), M_DEVBUF, M_WAITOK | M_ZERO);
+ TAILQ_INIT(&hif->hif_eligible);
+ hif->hif_class_tbl = mallocarray(HFSC_DEFAULT_CLASSES, sizeof(void *),
+ M_DEVBUF, M_WAITOK | M_ZERO);
+ hif->hif_allocated = HFSC_DEFAULT_CLASSES;
+
+ timeout_set(&hif->hif_defer, hfsc_deferred, ifp);
+
+ return (hif);
+}
+
+int
+hfsc_pf_addqueue(void *arg, struct pf_queuespec *q)
+{
+ struct hfsc_if *hif = arg;
+ struct hfsc_class *cl, *parent, *np = NULL;
+ struct hfsc_sc rtsc, lssc, ulsc;
+ int error = 0;
+
+ KASSERT(hif != NULL);
+ KASSERT(q->qid != 0);
+
+ /* Root queue must have non-zero linksharing parameters */
+ if (q->linkshare.m1.absolute == 0 && q->linkshare.m2.absolute == 0 &&
+ q->parent_qid == 0)
+ return (EINVAL);
+
+ if (q->parent_qid == 0 && hif->hif_rootclass == NULL) {
+ np = hfsc_class_create(hif, NULL, NULL, NULL, NULL,
+ 0, 0, HFSC_ROOT_CLASS | q->qid);
+ if (np == NULL)
+ return (EINVAL);
+ parent = np;
+ } else if ((parent = hfsc_clh2cph(hif, q->parent_qid)) == NULL)
+ return (EINVAL);
+
+ if (hfsc_clh2cph(hif, q->qid) != NULL) {
+ hfsc_class_destroy(hif, np);
+ return (EBUSY);
+ }
+
+ rtsc.m1 = q->realtime.m1.absolute;
+ rtsc.d = q->realtime.d;
+ rtsc.m2 = q->realtime.m2.absolute;
+ lssc.m1 = q->linkshare.m1.absolute;
+ lssc.d = q->linkshare.d;
+ lssc.m2 = q->linkshare.m2.absolute;
+ ulsc.m1 = q->upperlimit.m1.absolute;
+ ulsc.d = q->upperlimit.d;
+ ulsc.m2 = q->upperlimit.m2.absolute;
+
+ if ((cl = hfsc_class_create(hif, &rtsc, &lssc, &ulsc,
+ parent, q->qlimit, q->flags, q->qid)) == NULL) {
+ hfsc_class_destroy(hif, np);
+ return (ENOMEM);
+ }
+
+ /* Attach a queue manager if specified */
+ cl->cl_qops = pf_queue_manager(q);
+ /* Realtime class cannot be used with an external queue manager */
+ if (cl->cl_qops == NULL || cl->cl_rsc != NULL) {
+ cl->cl_qops = pfq_hfsc_ops;
+ cl->cl_qdata = &cl->cl_q;
+ } else {
+ cl->cl_qdata = cl->cl_qops->pfq_alloc(q->kif->pfik_ifp);
+ if (cl->cl_qdata == NULL) {
+ cl->cl_qops = NULL;
+ hfsc_class_destroy(hif, cl);
+ hfsc_class_destroy(hif, np);
+ return (ENOMEM);
+ }
+ error = cl->cl_qops->pfq_addqueue(cl->cl_qdata, q);
+ if (error) {
+ cl->cl_qops->pfq_free(cl->cl_qdata);
+ cl->cl_qops = NULL;
+ hfsc_class_destroy(hif, cl);
+ hfsc_class_destroy(hif, np);
+ return (error);
+ }
+ }
+
+ KASSERT(cl->cl_qops != NULL);
+ KASSERT(cl->cl_qdata != NULL);
+
+ return (0);
+}
+
+int
+hfsc_pf_qstats(struct pf_queuespec *q, void *ubuf, int *nbytes)
+{
+ struct ifnet *ifp = q->kif->pfik_ifp;
+ struct hfsc_if *hif;
+ struct hfsc_class *cl;
+ struct hfsc_class_stats stats;
+ int error = 0;
+
+ if (ifp == NULL)
+ return (EBADF);
+
+ if (*nbytes < sizeof(stats))
+ return (EINVAL);
+
+ hif = ifq_q_enter(&ifp->if_snd, ifq_hfsc_ops);
+ if (hif == NULL)
+ return (EBADF);
+
+ if ((cl = hfsc_clh2cph(hif, q->qid)) == NULL) {
+ ifq_q_leave(&ifp->if_snd, hif);
+ return (EINVAL);
+ }
+
+ hfsc_getclstats(&stats, cl);
+ ifq_q_leave(&ifp->if_snd, hif);
+
+ if ((error = copyout((caddr_t)&stats, ubuf, sizeof(stats))) != 0)
+ return (error);
+
+ *nbytes = sizeof(stats);
+ return (0);
+}
+
+void
+hfsc_pf_free(void *arg)
+{
+ hfsc_free(0, arg);
+}
+
+unsigned int
+hfsc_pf_qlength(void *arg)
+{
+ struct hfsc_classq *cq = arg;
+
+ return ml_len(&cq->q);
+}
+
+struct mbuf *
+hfsc_pf_enqueue(void *arg, struct mbuf *m)
+{
+ struct hfsc_classq *cq = arg;
+
+ if (ml_len(&cq->q) >= cq->qlimit)
+ return (m);
+
+ ml_enqueue(&cq->q, m);
+ return (NULL);
+}
+
+struct mbuf *
+hfsc_pf_deq_begin(void *arg, void **cookiep, struct mbuf_list *free_ml)
+{
+ struct hfsc_classq *cq = arg;
+
+ return MBUF_LIST_FIRST(&cq->q);
+}
+
+void
+hfsc_pf_deq_commit(void *arg, struct mbuf *m, void *cookie)
+{
+ struct hfsc_classq *cq = arg;
+
+ ml_dequeue(&cq->q);
+}
+
+void
+hfsc_pf_purge(void *arg, struct mbuf_list *ml)
+{
+ struct hfsc_classq *cq = arg;
+
+ ml_enlist(ml, &cq->q);
+}
+
+unsigned int
+hfsc_idx(unsigned int nqueues, const struct mbuf *m)
+{
+ /*
+ * hfsc can only function on a single ifq and the stack understands
+ * this. when the first ifq on an interface is switched to hfsc,
+ * this gets used to map all mbufs to the first and only ifq that
+ * is set up for hfsc.
+ */
+ return (0);
+}
+
+void *
+hfsc_alloc(unsigned int idx, void *q)
+{
+ struct hfsc_if *hif = q;
+
+ KASSERT(idx == 0); /* when hfsc is enabled we only use the first ifq */
+ KASSERT(hif != NULL);
+ return (hif);
+}
+
+void
+hfsc_free(unsigned int idx, void *q)
+{
+ struct hfsc_if *hif = q;
+ struct hfsc_class *cl;
+ int i, restart;
+
+ KERNEL_ASSERT_LOCKED();
+ KASSERT(idx == 0); /* when hfsc is enabled we only use the first ifq */
+
+ timeout_del(&hif->hif_defer);
+
+ do {
+ restart = 0;
+ for (i = 0; i < hif->hif_allocated; i++) {
+ cl = hif->hif_class_tbl[i];
+ if (hfsc_class_destroy(hif, cl) == EBUSY)
+ restart++;
+ }
+ } while (restart > 0);
+
+ free(hif->hif_class_tbl, M_DEVBUF, hif->hif_allocated * sizeof(void *));
+ free(hif, M_DEVBUF, sizeof(*hif));
+}
+
+void
+hfsc_purge(struct ifqueue *ifq, struct mbuf_list *ml)
+{
+ struct hfsc_if *hif = ifq->ifq_q;
+ struct hfsc_class *cl;
+
+ for (cl = hif->hif_rootclass; cl != NULL; cl = hfsc_nextclass(cl))
+ hfsc_cl_purge(hif, cl, ml);
+}
+
+struct hfsc_class *
+hfsc_class_create(struct hfsc_if *hif, struct hfsc_sc *rsc,
+ struct hfsc_sc *fsc, struct hfsc_sc *usc, struct hfsc_class *parent,
+ int qlimit, int flags, int qid)
+{
+ struct hfsc_class *cl, *p;
+ int i, s;
+
+ if (qlimit == 0)
+ qlimit = HFSC_DEFAULT_QLIMIT;
+
+ if (hif->hif_classes >= hif->hif_allocated) {
+ u_int newslots = hfsc_more_slots(hif->hif_allocated);
+
+ if (newslots == hif->hif_allocated)
+ return (NULL);
+ hfsc_grow_class_tbl(hif, newslots);
+ }
+
+ cl = pool_get(&hfsc_class_pl, PR_WAITOK | PR_ZERO);
+ TAILQ_INIT(&cl->cl_actc);
+
+ ml_init(&cl->cl_q.q);
+ cl->cl_q.qlimit = qlimit;
+ cl->cl_flags = flags;
+
+ if (rsc != NULL && (rsc->m1 != 0 || rsc->m2 != 0)) {
+ cl->cl_rsc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK);
+ hfsc_sc2isc(rsc, cl->cl_rsc);
+ hfsc_rtsc_init(&cl->cl_deadline, cl->cl_rsc, 0, 0);
+ hfsc_rtsc_init(&cl->cl_eligible, cl->cl_rsc, 0, 0);
+ }
+ if (fsc != NULL && (fsc->m1 != 0 || fsc->m2 != 0)) {
+ cl->cl_fsc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK);
+ hfsc_sc2isc(fsc, cl->cl_fsc);
+ hfsc_rtsc_init(&cl->cl_virtual, cl->cl_fsc, 0, 0);
+ }
+ if (usc != NULL && (usc->m1 != 0 || usc->m2 != 0)) {
+ cl->cl_usc = pool_get(&hfsc_internal_sc_pl, PR_WAITOK);
+ hfsc_sc2isc(usc, cl->cl_usc);
+ hfsc_rtsc_init(&cl->cl_ulimit, cl->cl_usc, 0, 0);
+ }
+
+ cl->cl_id = hif->hif_classid++;
+ cl->cl_handle = qid;
+ cl->cl_parent = parent;
+
+ s = splnet();
+ hif->hif_classes++;
+
+ /*
+ * find a free slot in the class table. if the slot matching
+ * the lower bits of qid is free, use this slot. otherwise,
+ * use the first free slot.
+ */
+ i = qid % hif->hif_allocated;
+ if (hif->hif_class_tbl[i] == NULL)
+ hif->hif_class_tbl[i] = cl;
+ else {
+ for (i = 0; i < hif->hif_allocated; i++)
+ if (hif->hif_class_tbl[i] == NULL) {
+ hif->hif_class_tbl[i] = cl;
+ break;
+ }
+ if (i == hif->hif_allocated) {
+ splx(s);
+ goto err_ret;
+ }
+ }
+
+ if (flags & HFSC_DEFAULTCLASS)
+ hif->hif_defaultclass = cl;
+
+ if (parent == NULL)
+ hif->hif_rootclass = cl;
+ else {
+ /* add this class to the children list of the parent */
+ if ((p = parent->cl_children) == NULL)
+ parent->cl_children = cl;
+ else {
+ while (p->cl_siblings != NULL)
+ p = p->cl_siblings;
+ p->cl_siblings = cl;
+ }
+ }
+ splx(s);
+
+ return (cl);
+
+err_ret:
+ if (cl->cl_fsc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_fsc);
+ if (cl->cl_rsc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_rsc);
+ if (cl->cl_usc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_usc);
+ pool_put(&hfsc_class_pl, cl);
+ return (NULL);
+}
+
+int
+hfsc_class_destroy(struct hfsc_if *hif, struct hfsc_class *cl)
+{
+ int i, s;
+
+ if (cl == NULL)
+ return (0);
+
+ if (cl->cl_children != NULL)
+ return (EBUSY);
+
+ s = splnet();
+ KASSERT(hfsc_class_qlength(cl) == 0);
+
+ if (cl->cl_parent != NULL) {
+ struct hfsc_class *p = cl->cl_parent->cl_children;
+
+ if (p == cl)
+ cl->cl_parent->cl_children = cl->cl_siblings;
+ else do {
+ if (p->cl_siblings == cl) {
+ p->cl_siblings = cl->cl_siblings;
+ break;
+ }
+ } while ((p = p->cl_siblings) != NULL);
+ }
+
+ for (i = 0; i < hif->hif_allocated; i++)
+ if (hif->hif_class_tbl[i] == cl) {
+ hif->hif_class_tbl[i] = NULL;
+ break;
+ }
+
+ hif->hif_classes--;
+ splx(s);
+
+ KASSERT(TAILQ_EMPTY(&cl->cl_actc));
+
+ if (cl == hif->hif_rootclass)
+ hif->hif_rootclass = NULL;
+ if (cl == hif->hif_defaultclass)
+ hif->hif_defaultclass = NULL;
+
+ /* Free external queue manager resources */
+ if (cl->cl_qops && cl->cl_qops != pfq_hfsc_ops)
+ cl->cl_qops->pfq_free(cl->cl_qdata);
+
+ if (cl->cl_usc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_usc);
+ if (cl->cl_fsc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_fsc);
+ if (cl->cl_rsc != NULL)
+ pool_put(&hfsc_internal_sc_pl, cl->cl_rsc);
+ pool_put(&hfsc_class_pl, cl);
+
+ return (0);
+}
+
+/*
+ * hfsc_nextclass returns the next class in the tree.
+ * usage:
+ * for (cl = hif->hif_rootclass; cl != NULL; cl = hfsc_nextclass(cl))
+ * do_something;
+ */
+struct hfsc_class *
+hfsc_nextclass(struct hfsc_class *cl)
+{
+ if (cl->cl_children != NULL)
+ cl = cl->cl_children;
+ else if (cl->cl_siblings != NULL)
+ cl = cl->cl_siblings;
+ else {
+ while ((cl = cl->cl_parent) != NULL)
+ if (cl->cl_siblings) {
+ cl = cl->cl_siblings;
+ break;
+ }
+ }
+
+ return (cl);
+}
+
+struct mbuf *
+hfsc_enq(struct ifqueue *ifq, struct mbuf *m)
+{
+ struct hfsc_if *hif = ifq->ifq_q;
+ struct hfsc_class *cl;
+ struct mbuf *dm;
+
+ if ((cl = hfsc_clh2cph(hif, m->m_pkthdr.pf.qid)) == NULL ||
+ cl->cl_children != NULL) {
+ cl = hif->hif_defaultclass;
+ if (cl == NULL)
+ return (m);
+ }
+
+ dm = hfsc_class_enqueue(cl, m);
+
+ /* successfully queued. */
+ if (dm != m && hfsc_class_qlength(cl) == 1) {
+ hfsc_set_active(hif, cl, m->m_pkthdr.len);
+ if (!timeout_pending(&hif->hif_defer))
+ timeout_add(&hif->hif_defer, 1);
+ }
+
+ /* drop occurred. */
+ if (dm != NULL)
+ PKTCNTR_INC(&cl->cl_stats.drop_cnt, dm->m_pkthdr.len);
+
+ return (dm);
+}
+
+struct mbuf *
+hfsc_deq_begin(struct ifqueue *ifq, void **cookiep)
+{
+ struct mbuf_list free_ml = MBUF_LIST_INITIALIZER();
+ struct hfsc_if *hif = ifq->ifq_q;
+ struct hfsc_class *cl, *tcl;
+ struct mbuf *m;
+ u_int64_t cur_time;
+
+ cur_time = nsecuptime();
+
+ /*
+ * if there are eligible classes, use real-time criteria.
+ * find the class with the minimum deadline among
+ * the eligible classes.
+ */
+ cl = hfsc_ellist_get_mindl(hif, cur_time);
+ if (cl == NULL) {
+ /*
+ * use link-sharing criteria
+ * get the class with the minimum vt in the hierarchy
+ */
+ cl = NULL;
+ tcl = hif->hif_rootclass;
+
+ while (tcl != NULL && tcl->cl_children != NULL) {
+ tcl = hfsc_actlist_firstfit(tcl, cur_time);
+ if (tcl == NULL)
+ continue;
+
+ /*
+ * update parent's cl_cvtmin.
+ * don't update if the new vt is smaller.
+ */
+ if (tcl->cl_parent->cl_cvtmin < tcl->cl_vt)
+ tcl->cl_parent->cl_cvtmin = tcl->cl_vt;
+
+ cl = tcl;
+ }
+ /* XXX HRTIMER plan hfsc_deferred precisely here. */
+ if (cl == NULL)
+ return (NULL);
+ }
+
+ m = hfsc_class_deq_begin(cl, &free_ml);
+ ifq_mfreeml(ifq, &free_ml);
+ if (m == NULL) {
+ hfsc_update_sc(hif, cl, 0);
+ return (NULL);
+ }
+
+ hif->hif_microtime = cur_time;
+ *cookiep = cl;
+ return (m);
+}
+
+void
+hfsc_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie)
+{
+ struct hfsc_if *hif = ifq->ifq_q;
+ struct hfsc_class *cl = cookie;
+
+ hfsc_class_deq_commit(cl, m);
+ hfsc_update_sc(hif, cl, m->m_pkthdr.len);
+
+ PKTCNTR_INC(&cl->cl_stats.xmit_cnt, m->m_pkthdr.len);
+}
+
+void
+hfsc_update_sc(struct hfsc_if *hif, struct hfsc_class *cl, int len)
+{
+ int next_len, realtime = 0;
+ u_int64_t cur_time = hif->hif_microtime;
+
+ /* check if the class was scheduled by real-time criteria */
+ if (cl->cl_rsc != NULL)
+ realtime = (cl->cl_e <= cur_time);
+
+ hfsc_update_vf(cl, len, cur_time);
+ if (realtime)
+ cl->cl_cumul += len;
+
+ if (hfsc_class_qlength(cl) > 0) {
+ /*
+ * Realtime queue needs to look into the future and make
+ * calculations based on that. This is the reason it can't
+ * be used with an external queue manager.
+ */
+ if (cl->cl_rsc != NULL) {
+ struct mbuf *m0;
+
+ /* update ed */
+ KASSERT(cl->cl_qops == pfq_hfsc_ops);
+ m0 = MBUF_LIST_FIRST(&cl->cl_q.q);
+ next_len = m0->m_pkthdr.len;
+
+ if (realtime)
+ hfsc_update_ed(hif, cl, next_len);
+ else
+ hfsc_update_d(cl, next_len);
+ }
+ } else {
+ /* the class becomes passive */
+ hfsc_set_passive(hif, cl);
+ }
+}
+
+void
+hfsc_deferred(void *arg)
+{
+ struct ifnet *ifp = arg;
+ struct ifqueue *ifq = &ifp->if_snd;
+ struct hfsc_if *hif;
+
+ if (!HFSC_ENABLED(ifq))
+ return;
+
+ if (!ifq_empty(ifq))
+ ifq_start(ifq);
+
+ hif = ifq_q_enter(&ifp->if_snd, ifq_hfsc_ops);
+ if (hif == NULL)
+ return;
+ /* XXX HRTIMER nearest virtual/fit time is likely less than 1/HZ. */
+ timeout_add(&hif->hif_defer, 1);
+ ifq_q_leave(&ifp->if_snd, hif);
+}
+
+void
+hfsc_cl_purge(struct hfsc_if *hif, struct hfsc_class *cl, struct mbuf_list *ml)
+{
+ struct mbuf_list ml2 = MBUF_LIST_INITIALIZER();
+
+ hfsc_class_purge(cl, &ml2);
+ if (ml_empty(&ml2))
+ return;
+
+ ml_enlist(ml, &ml2);
+
+ hfsc_update_vf(cl, 0, 0); /* remove cl from the actlist */
+ hfsc_set_passive(hif, cl);
+}
+
+void
+hfsc_set_active(struct hfsc_if *hif, struct hfsc_class *cl, int len)
+{
+ if (cl->cl_rsc != NULL)
+ hfsc_init_ed(hif, cl, len);
+ if (cl->cl_fsc != NULL)
+ hfsc_init_vf(cl, len);
+
+ cl->cl_stats.period++;
+}
+
+void
+hfsc_set_passive(struct hfsc_if *hif, struct hfsc_class *cl)
+{
+ if (cl->cl_rsc != NULL)
+ hfsc_ellist_remove(hif, cl);
+
+ /*
+ * actlist is handled in hfsc_update_vf() so that hfsc_update_vf(cl, 0,
+ * 0) needs to be called explicitly to remove a class from actlist
+ */
+}
+
+void
+hfsc_init_ed(struct hfsc_if *hif, struct hfsc_class *cl, int next_len)
+{
+ u_int64_t cur_time;
+
+ cur_time = nsecuptime();
+
+ /* update the deadline curve */
+ hfsc_rtsc_min(&cl->cl_deadline, cl->cl_rsc, cur_time, cl->cl_cumul);
+
+ /*
+ * update the eligible curve.
+ * for concave, it is equal to the deadline curve.
+ * for convex, it is a linear curve with slope m2.
+ */
+ cl->cl_eligible = cl->cl_deadline;
+ if (cl->cl_rsc->sm1 <= cl->cl_rsc->sm2) {
+ cl->cl_eligible.dx = 0;
+ cl->cl_eligible.dy = 0;
+ }
+
+ /* compute e and d */
+ cl->cl_e = hfsc_rtsc_y2x(&cl->cl_eligible, cl->cl_cumul);
+ cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len);
+
+ hfsc_ellist_insert(hif, cl);
+}
+
+void
+hfsc_update_ed(struct hfsc_if *hif, struct hfsc_class *cl, int next_len)
+{
+ cl->cl_e = hfsc_rtsc_y2x(&cl->cl_eligible, cl->cl_cumul);
+ cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len);
+
+ hfsc_ellist_update(hif, cl);
+}
+
+void
+hfsc_update_d(struct hfsc_class *cl, int next_len)
+{
+ cl->cl_d = hfsc_rtsc_y2x(&cl->cl_deadline, cl->cl_cumul + next_len);
+}
+
+void
+hfsc_init_vf(struct hfsc_class *cl, int len)
+{
+ struct hfsc_class *max_cl, *p;
+ u_int64_t vt, f, cur_time;
+ int go_active;
+
+ cur_time = 0;
+ go_active = 1;
+ for ( ; cl->cl_parent != NULL; cl = cl->cl_parent) {
+ if (go_active && cl->cl_nactive++ == 0)
+ go_active = 1;
+ else
+ go_active = 0;
+
+ if (go_active) {
+ max_cl = TAILQ_LAST(&cl->cl_parent->cl_actc,
+ hfsc_active);
+ if (max_cl != NULL) {
+ /*
+ * set vt to the average of the min and max
+ * classes. if the parent's period didn't
+ * change, don't decrease vt of the class.
+ */
+ vt = max_cl->cl_vt;
+ if (cl->cl_parent->cl_cvtmin != 0)
+ vt = (cl->cl_parent->cl_cvtmin + vt)/2;
+
+ if (cl->cl_parent->cl_vtperiod !=
+ cl->cl_parentperiod || vt > cl->cl_vt)
+ cl->cl_vt = vt;
+ } else {
+ /*
+ * first child for a new parent backlog period.
+ * add parent's cvtmax to vtoff of children
+ * to make a new vt (vtoff + vt) larger than
+ * the vt in the last period for all children.
+ */
+ vt = cl->cl_parent->cl_cvtmax;
+ for (p = cl->cl_parent->cl_children; p != NULL;
+ p = p->cl_siblings)
+ p->cl_vtoff += vt;
+ cl->cl_vt = 0;
+ cl->cl_parent->cl_cvtmax = 0;
+ cl->cl_parent->cl_cvtmin = 0;
+ }
+ cl->cl_initvt = cl->cl_vt;
+
+ /* update the virtual curve */
+ vt = cl->cl_vt + cl->cl_vtoff;
+ hfsc_rtsc_min(&cl->cl_virtual, cl->cl_fsc, vt,
+ cl->cl_total);
+ if (cl->cl_virtual.x == vt) {
+ cl->cl_virtual.x -= cl->cl_vtoff;
+ cl->cl_vtoff = 0;
+ }
+ cl->cl_vtadj = 0;
+
+ cl->cl_vtperiod++; /* increment vt period */
+ cl->cl_parentperiod = cl->cl_parent->cl_vtperiod;
+ if (cl->cl_parent->cl_nactive == 0)
+ cl->cl_parentperiod++;
+ cl->cl_f = 0;
+
+ hfsc_actlist_insert(cl);
+
+ if (cl->cl_usc != NULL) {
+ /* class has upper limit curve */
+ if (cur_time == 0)
+ cur_time = nsecuptime();
+
+ /* update the ulimit curve */
+ hfsc_rtsc_min(&cl->cl_ulimit, cl->cl_usc, cur_time,
+ cl->cl_total);
+ /* compute myf */
+ cl->cl_myf = hfsc_rtsc_y2x(&cl->cl_ulimit,
+ cl->cl_total);
+ cl->cl_myfadj = 0;
+ }
+ }
+
+ if (cl->cl_myf > cl->cl_cfmin)
+ f = cl->cl_myf;
+ else
+ f = cl->cl_cfmin;
+ if (f != cl->cl_f) {
+ cl->cl_f = f;
+ hfsc_update_cfmin(cl->cl_parent);
+ }
+ }
+}
+
+void
+hfsc_update_vf(struct hfsc_class *cl, int len, u_int64_t cur_time)
+{
+ u_int64_t f, myf_bound, delta;
+ int go_passive = 0;
+
+ if (hfsc_class_qlength(cl) == 0)
+ go_passive = 1;
+
+ for (; cl->cl_parent != NULL; cl = cl->cl_parent) {
+ cl->cl_total += len;
+
+ if (cl->cl_fsc == NULL || cl->cl_nactive == 0)
+ continue;
+
+ if (go_passive && --cl->cl_nactive == 0)
+ go_passive = 1;
+ else
+ go_passive = 0;
+
+ if (go_passive) {
+ /* no more active child, going passive */
+
+ /* update cvtmax of the parent class */
+ if (cl->cl_vt > cl->cl_parent->cl_cvtmax)
+ cl->cl_parent->cl_cvtmax = cl->cl_vt;
+
+ /* remove this class from the vt list */
+ hfsc_actlist_remove(cl);
+
+ hfsc_update_cfmin(cl->cl_parent);
+
+ continue;
+ }
+
+ /*
+ * update vt and f
+ */
+ cl->cl_vt = hfsc_rtsc_y2x(&cl->cl_virtual, cl->cl_total)
+ - cl->cl_vtoff + cl->cl_vtadj;
+
+ /*
+ * if vt of the class is smaller than cvtmin,
+ * the class was skipped in the past due to non-fit.
+ * if so, we need to adjust vtadj.
+ */
+ if (cl->cl_vt < cl->cl_parent->cl_cvtmin) {
+ cl->cl_vtadj += cl->cl_parent->cl_cvtmin - cl->cl_vt;
+ cl->cl_vt = cl->cl_parent->cl_cvtmin;
+ }
+
+ /* update the vt list */
+ hfsc_actlist_update(cl);
+
+ if (cl->cl_usc != NULL) {
+ cl->cl_myf = cl->cl_myfadj +
+ hfsc_rtsc_y2x(&cl->cl_ulimit, cl->cl_total);
+
+ /*
+ * if myf lags behind by more than one clock tick
+ * from the current time, adjust myfadj to prevent
+ * a rate-limited class from going greedy.
+ * in a steady state under rate-limiting, myf
+ * fluctuates within one clock tick.
+ */
+ myf_bound = cur_time - HFSC_CLK_PER_TICK;
+ if (cl->cl_myf < myf_bound) {
+ delta = cur_time - cl->cl_myf;
+ cl->cl_myfadj += delta;
+ cl->cl_myf += delta;
+ }
+ }
+
+ /* cl_f is max(cl_myf, cl_cfmin) */
+ if (cl->cl_myf > cl->cl_cfmin)
+ f = cl->cl_myf;
+ else
+ f = cl->cl_cfmin;
+ if (f != cl->cl_f) {
+ cl->cl_f = f;
+ hfsc_update_cfmin(cl->cl_parent);
+ }
+ }
+}
+
+void
+hfsc_update_cfmin(struct hfsc_class *cl)
+{
+ struct hfsc_class *p;
+ u_int64_t cfmin;
+
+ if (TAILQ_EMPTY(&cl->cl_actc)) {
+ cl->cl_cfmin = 0;
+ return;
+ }
+ cfmin = HFSC_HT_INFINITY;
+ TAILQ_FOREACH(p, &cl->cl_actc, cl_actlist) {
+ if (p->cl_f == 0) {
+ cl->cl_cfmin = 0;
+ return;
+ }
+ if (p->cl_f < cfmin)
+ cfmin = p->cl_f;
+ }
+ cl->cl_cfmin = cfmin;
+}
+
+/*
+ * eligible list holds backlogged classes being sorted by their eligible times.
+ * there is one eligible list per interface.
+ */
+void
+hfsc_ellist_insert(struct hfsc_if *hif, struct hfsc_class *cl)
+{
+ struct hfsc_class *p;
+
+ /* check the last entry first */
+ if ((p = TAILQ_LAST(&hif->hif_eligible, hfsc_eligible)) == NULL ||
+ p->cl_e <= cl->cl_e) {
+ TAILQ_INSERT_TAIL(&hif->hif_eligible, cl, cl_ellist);
+ return;
+ }
+
+ TAILQ_FOREACH(p, &hif->hif_eligible, cl_ellist) {
+ if (cl->cl_e < p->cl_e) {
+ TAILQ_INSERT_BEFORE(p, cl, cl_ellist);
+ return;
+ }
+ }
+}
+
+void
+hfsc_ellist_remove(struct hfsc_if *hif, struct hfsc_class *cl)
+{
+ TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist);
+}
+
+void
+hfsc_ellist_update(struct hfsc_if *hif, struct hfsc_class *cl)
+{
+ struct hfsc_class *p, *last;
+
+ /*
+ * the eligible time of a class increases monotonically.
+ * if the next entry has a larger eligible time, nothing to do.
+ */
+ p = TAILQ_NEXT(cl, cl_ellist);
+ if (p == NULL || cl->cl_e <= p->cl_e)
+ return;
+
+ /* check the last entry */
+ last = TAILQ_LAST(&hif->hif_eligible, hfsc_eligible);
+ if (last->cl_e <= cl->cl_e) {
+ TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist);
+ TAILQ_INSERT_TAIL(&hif->hif_eligible, cl, cl_ellist);
+ return;
+ }
+
+ /*
+ * the new position must be between the next entry
+ * and the last entry
+ */
+ while ((p = TAILQ_NEXT(p, cl_ellist)) != NULL) {
+ if (cl->cl_e < p->cl_e) {
+ TAILQ_REMOVE(&hif->hif_eligible, cl, cl_ellist);
+ TAILQ_INSERT_BEFORE(p, cl, cl_ellist);
+ return;
+ }
+ }
+}
+
+/* find the class with the minimum deadline among the eligible classes */
+struct hfsc_class *
+hfsc_ellist_get_mindl(struct hfsc_if *hif, u_int64_t cur_time)
+{
+ struct hfsc_class *p, *cl = NULL;
+
+ TAILQ_FOREACH(p, &hif->hif_eligible, cl_ellist) {
+ if (p->cl_e > cur_time)
+ break;
+ if (cl == NULL || p->cl_d < cl->cl_d)
+ cl = p;
+ }
+ return (cl);
+}
+
+/*
+ * active children list holds backlogged child classes being sorted
+ * by their virtual time.
+ * each intermediate class has one active children list.
+ */
+void
+hfsc_actlist_insert(struct hfsc_class *cl)
+{
+ struct hfsc_class *p;
+
+ /* check the last entry first */
+ if ((p = TAILQ_LAST(&cl->cl_parent->cl_actc, hfsc_active)) == NULL
+ || p->cl_vt <= cl->cl_vt) {
+ TAILQ_INSERT_TAIL(&cl->cl_parent->cl_actc, cl, cl_actlist);
+ return;
+ }
+
+ TAILQ_FOREACH(p, &cl->cl_parent->cl_actc, cl_actlist) {
+ if (cl->cl_vt < p->cl_vt) {
+ TAILQ_INSERT_BEFORE(p, cl, cl_actlist);
+ return;
+ }
+ }
+}
+
+void
+hfsc_actlist_remove(struct hfsc_class *cl)
+{
+ TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist);
+}
+
+void
+hfsc_actlist_update(struct hfsc_class *cl)
+{
+ struct hfsc_class *p, *last;
+
+ /*
+ * the virtual time of a class increases monotonically during its
+ * backlogged period.
+ * if the next entry has a larger virtual time, nothing to do.
+ */
+ p = TAILQ_NEXT(cl, cl_actlist);
+ if (p == NULL || cl->cl_vt < p->cl_vt)
+ return;
+
+ /* check the last entry */
+ last = TAILQ_LAST(&cl->cl_parent->cl_actc, hfsc_active);
+ if (last->cl_vt <= cl->cl_vt) {
+ TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist);
+ TAILQ_INSERT_TAIL(&cl->cl_parent->cl_actc, cl, cl_actlist);
+ return;
+ }
+
+ /*
+ * the new position must be between the next entry
+ * and the last entry
+ */
+ while ((p = TAILQ_NEXT(p, cl_actlist)) != NULL) {
+ if (cl->cl_vt < p->cl_vt) {
+ TAILQ_REMOVE(&cl->cl_parent->cl_actc, cl, cl_actlist);
+ TAILQ_INSERT_BEFORE(p, cl, cl_actlist);
+ return;
+ }
+ }
+}
+
+struct hfsc_class *
+hfsc_actlist_firstfit(struct hfsc_class *cl, u_int64_t cur_time)
+{
+ struct hfsc_class *p;
+
+ TAILQ_FOREACH(p, &cl->cl_actc, cl_actlist)
+ if (p->cl_f <= cur_time)
+ return (p);
+
+ return (NULL);
+}
+
+/*
+ * service curve support functions
+ *
+ * external service curve parameters
+ * m: bits/sec
+ * d: msec
+ * internal service curve parameters
+ * sm: (bytes/tsc_interval) << SM_SHIFT
+ * ism: (tsc_count/byte) << ISM_SHIFT
+ * dx: tsc_count
+ *
+ * SM_SHIFT and ISM_SHIFT are scaled in order to keep effective digits.
+ * we should be able to handle 100K-1Gbps linkspeed with 200Hz-1GHz CPU
+ * speed. SM_SHIFT and ISM_SHIFT are selected to have at least 3 effective
+ * digits in decimal using the following table.
+ *
+ * bits/sec 100Kbps 1Mbps 10Mbps 100Mbps 1Gbps
+ * ----------+-------------------------------------------------------
+ * bytes/nsec 12.5e-6 125e-6 1250e-6 12500e-6 125000e-6
+ * sm(500MHz) 25.0e-6 250e-6 2500e-6 25000e-6 250000e-6
+ * sm(200MHz) 62.5e-6 625e-6 6250e-6 62500e-6 625000e-6
+ *
+ * nsec/byte 80000 8000 800 80 8
+ * ism(500MHz) 40000 4000 400 40 4
+ * ism(200MHz) 16000 1600 160 16 1.6
+ */
+#define SM_SHIFT 24
+#define ISM_SHIFT 10
+
+#define SM_MASK ((1LL << SM_SHIFT) - 1)
+#define ISM_MASK ((1LL << ISM_SHIFT) - 1)
+
+static __inline u_int64_t
+seg_x2y(u_int64_t x, u_int64_t sm)
+{
+ u_int64_t y;
+
+ /*
+ * compute
+ * y = x * sm >> SM_SHIFT
+ * but divide it for the upper and lower bits to avoid overflow
+ */
+ y = (x >> SM_SHIFT) * sm + (((x & SM_MASK) * sm) >> SM_SHIFT);
+ return (y);
+}
+
+static __inline u_int64_t
+seg_y2x(u_int64_t y, u_int64_t ism)
+{
+ u_int64_t x;
+
+ if (y == 0)
+ x = 0;
+ else if (ism == HFSC_HT_INFINITY)
+ x = HFSC_HT_INFINITY;
+ else {
+ x = (y >> ISM_SHIFT) * ism
+ + (((y & ISM_MASK) * ism) >> ISM_SHIFT);
+ }
+ return (x);
+}
+
+static __inline u_int64_t
+m2sm(u_int64_t m)
+{
+ u_int64_t sm;
+
+ sm = (m << SM_SHIFT) / 8 / HFSC_FREQ;
+ return (sm);
+}
+
+static __inline u_int64_t
+m2ism(u_int64_t m)
+{
+ u_int64_t ism;
+
+ if (m == 0)
+ ism = HFSC_HT_INFINITY;
+ else
+ ism = ((u_int64_t)HFSC_FREQ << ISM_SHIFT) * 8 / m;
+ return (ism);
+}
+
+static __inline u_int64_t
+d2dx(u_int d)
+{
+ u_int64_t dx;
+
+ dx = ((u_int64_t)d * HFSC_FREQ) / 1000;
+ return (dx);
+}
+
+static __inline u_int64_t
+sm2m(u_int64_t sm)
+{
+ u_int64_t m;
+
+ m = (sm * 8 * HFSC_FREQ) >> SM_SHIFT;
+ return (m);
+}
+
+static __inline u_int
+dx2d(u_int64_t dx)
+{
+ u_int64_t d;
+
+ d = dx * 1000 / HFSC_FREQ;
+ return ((u_int)d);
+}
+
+void
+hfsc_sc2isc(struct hfsc_sc *sc, struct hfsc_internal_sc *isc)
+{
+ isc->sm1 = m2sm(sc->m1);
+ isc->ism1 = m2ism(sc->m1);
+ isc->dx = d2dx(sc->d);
+ isc->dy = seg_x2y(isc->dx, isc->sm1);
+ isc->sm2 = m2sm(sc->m2);
+ isc->ism2 = m2ism(sc->m2);
+}
+
+/*
+ * initialize the runtime service curve with the given internal
+ * service curve starting at (x, y).
+ */
+void
+hfsc_rtsc_init(struct hfsc_runtime_sc *rtsc, struct hfsc_internal_sc * isc,
+ u_int64_t x, u_int64_t y)
+{
+ rtsc->x = x;
+ rtsc->y = y;
+ rtsc->sm1 = isc->sm1;
+ rtsc->ism1 = isc->ism1;
+ rtsc->dx = isc->dx;
+ rtsc->dy = isc->dy;
+ rtsc->sm2 = isc->sm2;
+ rtsc->ism2 = isc->ism2;
+}
+
+/*
+ * calculate the y-projection of the runtime service curve by the
+ * given x-projection value
+ */
+u_int64_t
+hfsc_rtsc_y2x(struct hfsc_runtime_sc *rtsc, u_int64_t y)
+{
+ u_int64_t x;
+
+ if (y < rtsc->y)
+ x = rtsc->x;
+ else if (y <= rtsc->y + rtsc->dy) {
+ /* x belongs to the 1st segment */
+ if (rtsc->dy == 0)
+ x = rtsc->x + rtsc->dx;
+ else
+ x = rtsc->x + seg_y2x(y - rtsc->y, rtsc->ism1);
+ } else {
+ /* x belongs to the 2nd segment */
+ x = rtsc->x + rtsc->dx
+ + seg_y2x(y - rtsc->y - rtsc->dy, rtsc->ism2);
+ }
+ return (x);
+}
+
+u_int64_t
+hfsc_rtsc_x2y(struct hfsc_runtime_sc *rtsc, u_int64_t x)
+{
+ u_int64_t y;
+
+ if (x <= rtsc->x)
+ y = rtsc->y;
+ else if (x <= rtsc->x + rtsc->dx)
+ /* y belongs to the 1st segment */
+ y = rtsc->y + seg_x2y(x - rtsc->x, rtsc->sm1);
+ else
+ /* y belongs to the 2nd segment */
+ y = rtsc->y + rtsc->dy
+ + seg_x2y(x - rtsc->x - rtsc->dx, rtsc->sm2);
+ return (y);
+}
+
+/*
+ * update the runtime service curve by taking the minimum of the current
+ * runtime service curve and the service curve starting at (x, y).
+ */
+void
+hfsc_rtsc_min(struct hfsc_runtime_sc *rtsc, struct hfsc_internal_sc *isc,
+ u_int64_t x, u_int64_t y)
+{
+ u_int64_t y1, y2, dx, dy;
+
+ if (isc->sm1 <= isc->sm2) {
+ /* service curve is convex */
+ y1 = hfsc_rtsc_x2y(rtsc, x);
+ if (y1 < y)
+ /* the current rtsc is smaller */
+ return;
+ rtsc->x = x;
+ rtsc->y = y;
+ return;
+ }
+
+ /*
+ * service curve is concave
+ * compute the two y values of the current rtsc
+ * y1: at x
+ * y2: at (x + dx)
+ */
+ y1 = hfsc_rtsc_x2y(rtsc, x);
+ if (y1 <= y) {
+ /* rtsc is below isc, no change to rtsc */
+ return;
+ }
+
+ y2 = hfsc_rtsc_x2y(rtsc, x + isc->dx);
+ if (y2 >= y + isc->dy) {
+ /* rtsc is above isc, replace rtsc by isc */
+ rtsc->x = x;
+ rtsc->y = y;
+ rtsc->dx = isc->dx;
+ rtsc->dy = isc->dy;
+ return;
+ }
+
+ /*
+ * the two curves intersect
+ * compute the offsets (dx, dy) using the reverse
+ * function of seg_x2y()
+ * seg_x2y(dx, sm1) == seg_x2y(dx, sm2) + (y1 - y)
+ */
+ dx = ((y1 - y) << SM_SHIFT) / (isc->sm1 - isc->sm2);
+ /*
+ * check if (x, y1) belongs to the 1st segment of rtsc.
+ * if so, add the offset.
+ */
+ if (rtsc->x + rtsc->dx > x)
+ dx += rtsc->x + rtsc->dx - x;
+ dy = seg_x2y(dx, isc->sm1);
+
+ rtsc->x = x;
+ rtsc->y = y;
+ rtsc->dx = dx;
+ rtsc->dy = dy;
+ return;
+}
+
+void
+hfsc_getclstats(struct hfsc_class_stats *sp, struct hfsc_class *cl)
+{
+ sp->class_id = cl->cl_id;
+ sp->class_handle = cl->cl_handle;
+
+ if (cl->cl_rsc != NULL) {
+ sp->rsc.m1 = sm2m(cl->cl_rsc->sm1);
+ sp->rsc.d = dx2d(cl->cl_rsc->dx);
+ sp->rsc.m2 = sm2m(cl->cl_rsc->sm2);
+ } else {
+ sp->rsc.m1 = 0;
+ sp->rsc.d = 0;
+ sp->rsc.m2 = 0;
+ }
+ if (cl->cl_fsc != NULL) {
+ sp->fsc.m1 = sm2m(cl->cl_fsc->sm1);
+ sp->fsc.d = dx2d(cl->cl_fsc->dx);
+ sp->fsc.m2 = sm2m(cl->cl_fsc->sm2);
+ } else {
+ sp->fsc.m1 = 0;
+ sp->fsc.d = 0;
+ sp->fsc.m2 = 0;
+ }
+ if (cl->cl_usc != NULL) {
+ sp->usc.m1 = sm2m(cl->cl_usc->sm1);
+ sp->usc.d = dx2d(cl->cl_usc->dx);
+ sp->usc.m2 = sm2m(cl->cl_usc->sm2);
+ } else {
+ sp->usc.m1 = 0;
+ sp->usc.d = 0;
+ sp->usc.m2 = 0;
+ }
+
+ sp->total = cl->cl_total;
+ sp->cumul = cl->cl_cumul;
+
+ sp->d = cl->cl_d;
+ sp->e = cl->cl_e;
+ sp->vt = cl->cl_vt;
+ sp->f = cl->cl_f;
+
+ sp->initvt = cl->cl_initvt;
+ sp->vtperiod = cl->cl_vtperiod;
+ sp->parentperiod = cl->cl_parentperiod;
+ sp->nactive = cl->cl_nactive;
+ sp->vtoff = cl->cl_vtoff;
+ sp->cvtmax = cl->cl_cvtmax;
+ sp->myf = cl->cl_myf;
+ sp->cfmin = cl->cl_cfmin;
+ sp->cvtmin = cl->cl_cvtmin;
+ sp->myfadj = cl->cl_myfadj;
+ sp->vtadj = cl->cl_vtadj;
+
+ sp->cur_time = nsecuptime();
+ sp->machclk_freq = HFSC_FREQ;
+
+ sp->qlength = hfsc_class_qlength(cl);
+ sp->qlimit = cl->cl_q.qlimit;
+ sp->xmit_cnt = cl->cl_stats.xmit_cnt;
+ sp->drop_cnt = cl->cl_stats.drop_cnt;
+ sp->period = cl->cl_stats.period;
+
+ sp->qtype = 0;
+}
+
+/* convert a class handle to the corresponding class pointer */
+struct hfsc_class *
+hfsc_clh2cph(struct hfsc_if *hif, u_int32_t chandle)
+{
+ int i;
+ struct hfsc_class *cl;
+
+ if (chandle == 0)
+ return (NULL);
+ /*
+ * first, try the slot corresponding to the lower bits of the handle.
+ * if it does not match, do the linear table search.
+ */
+ i = chandle % hif->hif_allocated;
+ if ((cl = hif->hif_class_tbl[i]) != NULL && cl->cl_handle == chandle)
+ return (cl);
+ for (i = 0; i < hif->hif_allocated; i++)
+ if ((cl = hif->hif_class_tbl[i]) != NULL &&
+ cl->cl_handle == chandle)
+ return (cl);
+ return (NULL);
+}
diff --git a/module/pfsrc/if_pflog.c b/module/pfsrc/if_pflog.c
new file mode 100644
index 0000000..e574e53
--- /dev/null
+++ b/module/pfsrc/if_pflog.c
@@ -0,0 +1,193 @@
+/* PFLINUX port of OpenBSD 8.0 net/if_pflog.c — see docs/porting-notes.md */
+#include
+
+#define PFLOGMTU (32768 + MHLEN + MLEN)
+
+#ifdef PFLOGDEBUG
+#define DPRINTF(x) do { if (pflogdebug) printf x ; } while (0)
+#else
+#define DPRINTF(x)
+#endif
+
+void pflogattach(int);
+int pflogoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
+ struct rtentry *);
+int pflogioctl(struct ifnet *, u_long, caddr_t);
+int pflog_clone_create(struct if_clone *, int);
+int pflog_clone_destroy(struct ifnet *);
+struct pflog_softc *pflog_getif(int);
+
+struct if_clone pflog_cloner =
+ IF_CLONE_INITIALIZER("pflog", pflog_clone_create, pflog_clone_destroy);
+
+LIST_HEAD(, pflog_softc) pflog_ifs = LIST_HEAD_INITIALIZER(pflog_ifs);
+
+void
+pflogattach(int npflog)
+{
+ if_clone_attach(&pflog_cloner);
+}
+
+int
+pflog_clone_create(struct if_clone *ifc, int unit)
+{
+ struct ifnet *ifp;
+ struct pflog_softc *pflogif;
+
+ pflogif = malloc(sizeof(*pflogif), M_DEVBUF, M_WAITOK|M_ZERO);
+ pflogif->sc_unit = unit;
+ ifp = &pflogif->sc_if;
+ snprintf(ifp->if_xname, sizeof ifp->if_xname, "pflog%d", unit);
+ ifp->if_softc = pflogif;
+ ifp->if_mtu = PFLOGMTU;
+ ifp->if_ioctl = pflogioctl;
+ ifp->if_output = pflogoutput;
+ ifp->if_xflags = IFXF_CLONED;
+ ifp->if_type = IFT_PFLOG;
+ ifp->if_hdrlen = PFLOG_HDRLEN;
+ if_attach(ifp);
+ if_alloc_sadl(ifp);
+
+#if NBPFILTER > 0
+ bpfattach(&pflogif->sc_if.if_bpf, ifp, DLT_PFLOG, PFLOG_HDRLEN);
+#endif
+
+ NET_LOCK();
+ LIST_INSERT_HEAD(&pflog_ifs, pflogif, sc_entry);
+ NET_UNLOCK();
+
+ return (0);
+}
+
+int
+pflog_clone_destroy(struct ifnet *ifp)
+{
+ struct pflog_softc *pflogif = ifp->if_softc;
+
+ NET_LOCK();
+ LIST_REMOVE(pflogif, sc_entry);
+ NET_UNLOCK();
+
+ if_detach(ifp);
+ free(pflogif, M_DEVBUF, sizeof(*pflogif));
+
+ return (0);
+}
+
+int
+pflogoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
+ struct rtentry *rt)
+{
+ m_freem(m); /* drop packet */
+ return (EAFNOSUPPORT);
+}
+
+int
+pflogioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+{
+ switch (cmd) {
+ case SIOCSIFFLAGS:
+ if (ifp->if_flags & PFIFF_UP)
+ ifp->if_flags |= PFIFF_RUNNING;
+ else
+ ifp->if_flags &= ~PFIFF_RUNNING;
+ break;
+ default:
+ return (ENOTTY);
+ }
+
+ return (0);
+}
+
+struct pflog_softc *
+pflog_getif(int unit)
+{
+ struct pflog_softc *pflogif;
+
+ NET_ASSERT_LOCKED();
+
+ LIST_FOREACH(pflogif, &pflog_ifs, sc_entry) {
+ if (pflogif->sc_unit == unit)
+ break;
+ }
+
+ return pflogif;
+}
+
+int
+pflog_packet(struct pf_pdesc *pd, u_int8_t reason, struct pf_rule *rm,
+ struct pf_rule *am, struct pf_ruleset *ruleset, struct pf_rule *trigger)
+{
+#if NBPFILTER > 0
+ struct pflog_softc *pflogif;
+ struct ifnet *ifn;
+ caddr_t if_bpf;
+ struct pfloghdr hdr;
+
+ if (rm == NULL || pd == NULL || pd->kif == NULL || pd->m == NULL)
+ return (-1);
+ if (trigger == NULL)
+ trigger = rm;
+ pflogif = pflog_getif(trigger->logif);
+ if (pflogif == NULL)
+ return (0);
+ ifn = &pflogif->sc_if;
+ if_bpf = ifn->if_bpf;
+ if (!if_bpf)
+ return (0);
+
+ bzero(&hdr, sizeof(hdr));
+ hdr.length = PFLOG_REAL_HDRLEN;
+ /* Default rule does not pass packets dropped for other reasons. */
+ hdr.action = (rm->nr == (u_int32_t)-1 && reason != PFRES_MATCH) ?
+ PF_DROP : rm->action;
+ hdr.reason = reason;
+ memcpy(hdr.ifname, pd->kif->pfik_name, sizeof(hdr.ifname));
+
+ if (am == NULL) {
+ hdr.rulenr = htonl(rm->nr);
+ hdr.subrulenr = -1;
+ } else {
+ hdr.rulenr = htonl(am->nr);
+ hdr.subrulenr = htonl(rm->nr);
+ if (ruleset != NULL && ruleset->anchor != NULL)
+ strlcpy(hdr.ruleset, ruleset->anchor->name,
+ sizeof(hdr.ruleset));
+ }
+ if (trigger->log & PF_LOG_USER && !pd->lookup.done)
+ pd->lookup.done = pf_socket_lookup(pd);
+ if (trigger->log & PF_LOG_USER && pd->lookup.done > 0) {
+ hdr.uid = pd->lookup.uid;
+ hdr.pid = pd->lookup.pid;
+ } else {
+ hdr.uid = -1;
+ hdr.pid = NO_PID;
+ }
+ hdr.rule_uid = rm->cuid;
+ hdr.rule_pid = rm->cpid;
+ hdr.dir = pd->dir;
+ hdr.af = pd->af;
+
+ if (pd->src != NULL && pd->dst != NULL) {
+ if (pd->af != pd->naf ||
+ pf_addr_compare(pd->src, &pd->nsaddr, pd->naf) != 0 ||
+ pf_addr_compare(pd->dst, &pd->ndaddr, pd->naf) != 0 ||
+ pd->osport != pd->nsport ||
+ pd->odport != pd->ndport) {
+ hdr.rewritten = 1;
+ }
+ }
+ hdr.naf = pd->naf;
+ pf_addrcpy(&hdr.saddr, &pd->nsaddr, pd->naf);
+ pf_addrcpy(&hdr.daddr, &pd->ndaddr, pd->naf);
+ hdr.sport = pd->nsport;
+ hdr.dport = pd->ndport;
+
+ ifn->if_opackets++;
+ ifn->if_obytes += pd->m->m_pkthdr.len;
+
+ bpf_mtap_hdr(if_bpf, &hdr, sizeof(hdr), pd->m, BPF_DIRECTION_OUT);
+#endif
+
+ return (0);
+}
diff --git a/module/pfsrc/ifq.c b/module/pfsrc/ifq.c
new file mode 100644
index 0000000..86b015b
--- /dev/null
+++ b/module/pfsrc/ifq.c
@@ -0,0 +1,983 @@
+/* PFLINUX port of OpenBSD 8.0 net/ifq.c — see docs/porting-notes.md */
+#include
+#endif
+
+/*
+ * priq glue
+ */
+unsigned int priq_idx(unsigned int, const struct mbuf *);
+struct mbuf *priq_enq(struct ifqueue *, struct mbuf *);
+struct mbuf *priq_deq_begin(struct ifqueue *, void **);
+void priq_deq_commit(struct ifqueue *, struct mbuf *, void *);
+void priq_purge(struct ifqueue *, struct mbuf_list *);
+
+void *priq_alloc(unsigned int, void *);
+void priq_free(unsigned int, void *);
+
+const struct ifq_ops priq_ops = {
+ priq_idx,
+ priq_enq,
+ priq_deq_begin,
+ priq_deq_commit,
+ priq_purge,
+ priq_alloc,
+ priq_free,
+};
+
+const struct ifq_ops * const ifq_priq_ops = &priq_ops;
+
+/*
+ * priq internal structures
+ */
+
+struct priq {
+ struct mbuf_list pq_lists[IFQ_NQUEUES];
+};
+
+/*
+ * ifqueue serialiser
+ */
+
+void ifq_start_task(void *);
+void ifq_restart_task(void *);
+void ifq_bundle_task(void *);
+
+static inline void
+ifq_run_start(struct ifqueue *ifq)
+{
+ ifq_serialize(ifq, &ifq->ifq_start);
+}
+
+void
+ifq_serialize(struct ifqueue *ifq, struct task *t)
+{
+ struct task work;
+
+ if (ISSET(t->t_flags, TASK_ONQUEUE))
+ return;
+
+ mtx_enter(&ifq->ifq_task_mtx);
+ if (!ISSET(t->t_flags, TASK_ONQUEUE)) {
+ SET(t->t_flags, TASK_ONQUEUE);
+ TAILQ_INSERT_TAIL(&ifq->ifq_task_list, t, t_entry);
+ }
+
+ if (ifq->ifq_serializer == NULL) {
+ ifq->ifq_serializer = curcpu();
+
+ while ((t = TAILQ_FIRST(&ifq->ifq_task_list)) != NULL) {
+ TAILQ_REMOVE(&ifq->ifq_task_list, t, t_entry);
+ CLR(t->t_flags, TASK_ONQUEUE);
+ work = *t; /* copy to caller to avoid races */
+
+ mtx_leave(&ifq->ifq_task_mtx);
+
+ (*work.t_func)(work.t_arg);
+
+ mtx_enter(&ifq->ifq_task_mtx);
+ }
+
+ ifq->ifq_serializer = NULL;
+ }
+ mtx_leave(&ifq->ifq_task_mtx);
+}
+
+void
+ifq_start(struct ifqueue *ifq)
+{
+ if (ifq_len(ifq) >= min(ifq->ifq_if->if_txmit, ifq->ifq_maxlen)) {
+ task_del(ifq->ifq_softnet, &ifq->ifq_bundle);
+ ifq_run_start(ifq);
+ } else
+ task_add(ifq->ifq_softnet, &ifq->ifq_bundle);
+}
+
+void
+ifq_start_task(void *p)
+{
+ struct ifqueue *ifq = p;
+ struct ifnet *ifp = ifq->ifq_if;
+
+ if (!ISSET(ifp->if_flags, PFIFF_RUNNING) ||
+ ifq_empty(ifq) || ifq_is_oactive(ifq))
+ return;
+
+ ifp->if_qstart(ifq);
+}
+
+void
+ifq_set_oactive(struct ifqueue *ifq)
+{
+ if (ifq->ifq_oactive)
+ return;
+
+ mtx_enter(&ifq->ifq_mtx);
+ if (!ifq->ifq_oactive) {
+ ifq->ifq_oactive = 1;
+ ifq->ifq_oactives++;
+ }
+ mtx_leave(&ifq->ifq_mtx);
+}
+
+void
+ifq_deq_set_oactive(struct ifqueue *ifq)
+{
+ MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx);
+
+ if (!ifq->ifq_oactive) {
+ ifq->ifq_oactive = 1;
+ ifq->ifq_oactives++;
+ }
+}
+
+void
+ifq_restart_task(void *p)
+{
+ struct ifqueue *ifq = p;
+ struct ifnet *ifp = ifq->ifq_if;
+
+ ifq_clr_oactive(ifq);
+ ifp->if_qstart(ifq);
+}
+
+void
+ifq_bundle_task(void *p)
+{
+ struct ifqueue *ifq = p;
+
+ ifq_run_start(ifq);
+}
+
+void
+ifq_barrier(struct ifqueue *ifq)
+{
+ struct cond c = COND_INITIALIZER();
+ struct task t = TASK_INITIALIZER(cond_signal_handler, &c);
+
+ task_del(ifq->ifq_softnet, &ifq->ifq_bundle);
+
+ if (ifq->ifq_serializer == NULL)
+ return;
+
+ ifq_serialize(ifq, &t);
+
+ cond_wait(&c, "ifqbar");
+}
+
+/*
+ * ifqueue mbuf queue API
+ */
+
+#if NKSTAT > 0
+struct ifq_kstat_data {
+ struct kstat_kv kd_packets;
+ struct kstat_kv kd_bytes;
+ struct kstat_kv kd_qdrops;
+ struct kstat_kv kd_errors;
+ struct kstat_kv kd_qlen;
+ struct kstat_kv kd_maxqlen;
+ struct kstat_kv kd_oactive;
+ struct kstat_kv kd_oactives;
+};
+
+static const struct ifq_kstat_data ifq_kstat_tpl = {
+ KSTAT_KV_UNIT_INITIALIZER("packets",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("bytes",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_BYTES),
+ KSTAT_KV_UNIT_INITIALIZER("qdrops",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("errors",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("qlen",
+ KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("maxqlen",
+ KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_INITIALIZER("oactive", KSTAT_KV_T_BOOL),
+ KSTAT_KV_INITIALIZER("oactives", KSTAT_KV_T_COUNTER32),
+};
+
+int
+ifq_kstat_copy(struct kstat *ks, void *dst)
+{
+ struct ifqueue *ifq = ks->ks_softc;
+ struct ifq_kstat_data *kd = dst;
+
+ *kd = ifq_kstat_tpl;
+ kstat_kv_u64(&kd->kd_packets) = ifq->ifq_packets;
+ kstat_kv_u64(&kd->kd_bytes) = ifq->ifq_bytes;
+ kstat_kv_u64(&kd->kd_qdrops) = ifq->ifq_qdrops;
+ kstat_kv_u64(&kd->kd_errors) = ifq->ifq_errors;
+ kstat_kv_u32(&kd->kd_qlen) = ifq->ifq_len;
+ kstat_kv_u32(&kd->kd_maxqlen) = ifq->ifq_maxlen;
+ kstat_kv_bool(&kd->kd_oactive) = ifq->ifq_oactive;
+ kstat_kv_u32(&kd->kd_oactives) = ifq->ifq_oactives;
+
+ return (0);
+}
+#endif
+
+void
+ifq_init(struct ifqueue *ifq, struct ifnet *ifp, unsigned int idx)
+{
+ ifq->ifq_if = ifp;
+ ifq->ifq_softnet = net_tq(idx);
+ ifq->ifq_softc = NULL;
+
+ mtx_init(&ifq->ifq_mtx, IPL_NET);
+
+ /* default to priq */
+ ifq->ifq_ops = &priq_ops;
+ ifq->ifq_q = priq_ops.ifqop_alloc(idx, NULL);
+
+ ml_init(&ifq->ifq_free);
+ ifq->ifq_len = 0;
+
+ ifq->ifq_packets = 0;
+ ifq->ifq_bytes = 0;
+ ifq->ifq_qdrops = 0;
+ ifq->ifq_errors = 0;
+ ifq->ifq_mcasts = 0;
+
+ mtx_init(&ifq->ifq_task_mtx, IPL_NET);
+ TAILQ_INIT(&ifq->ifq_task_list);
+ ifq->ifq_serializer = NULL;
+ task_set(&ifq->ifq_bundle, ifq_bundle_task, ifq);
+
+ task_set(&ifq->ifq_start, ifq_start_task, ifq);
+ task_set(&ifq->ifq_restart, ifq_restart_task, ifq);
+
+ if (ifq->ifq_maxlen == 0)
+ ifq_init_maxlen(ifq, IFQ_MAXLEN);
+
+ ifq->ifq_idx = idx;
+
+#if NKSTAT > 0
+ /* XXX xname vs driver name and unit */
+ ifq->ifq_kstat = kstat_create(ifp->if_xname, 0,
+ "txq", ifq->ifq_idx, KSTAT_T_KV, 0);
+ KASSERT(ifq->ifq_kstat != NULL);
+ kstat_set_mutex(ifq->ifq_kstat, &ifq->ifq_mtx);
+ ifq->ifq_kstat->ks_softc = ifq;
+ ifq->ifq_kstat->ks_datalen = sizeof(ifq_kstat_tpl);
+ ifq->ifq_kstat->ks_copy = ifq_kstat_copy;
+ kstat_install(ifq->ifq_kstat);
+#endif
+}
+
+void
+ifq_attach(struct ifqueue *ifq, const struct ifq_ops *newops, void *opsarg)
+{
+ struct mbuf_list ml = MBUF_LIST_INITIALIZER();
+ struct mbuf_list free_ml = MBUF_LIST_INITIALIZER();
+ struct mbuf *m;
+ const struct ifq_ops *oldops;
+ void *newq, *oldq;
+
+ newq = newops->ifqop_alloc(ifq->ifq_idx, opsarg);
+
+ mtx_enter(&ifq->ifq_mtx);
+ ifq->ifq_ops->ifqop_purge(ifq, &ml);
+ ifq->ifq_len = 0;
+
+ oldops = ifq->ifq_ops;
+ oldq = ifq->ifq_q;
+
+ ifq->ifq_ops = newops;
+ ifq->ifq_q = newq;
+
+ while ((m = ml_dequeue(&ml)) != NULL) {
+ m = ifq->ifq_ops->ifqop_enq(ifq, m);
+ if (m != NULL) {
+ ifq->ifq_qdrops++;
+ ml_enqueue(&free_ml, m);
+ } else
+ ifq->ifq_len++;
+ }
+ mtx_leave(&ifq->ifq_mtx);
+
+ oldops->ifqop_free(ifq->ifq_idx, oldq);
+
+ ml_purge(&free_ml);
+}
+
+void
+ifq_destroy(struct ifqueue *ifq)
+{
+ struct mbuf_list ml = MBUF_LIST_INITIALIZER();
+
+#if NKSTAT > 0
+ kstat_destroy(ifq->ifq_kstat);
+#endif
+
+ NET_ASSERT_UNLOCKED();
+ taskq_del_barrier(ifq->ifq_softnet, &ifq->ifq_bundle);
+
+ /* don't need to lock because this is the last use of the ifq */
+
+ ifq->ifq_ops->ifqop_purge(ifq, &ml);
+ ifq->ifq_ops->ifqop_free(ifq->ifq_idx, ifq->ifq_q);
+
+ ml_purge(&ml);
+}
+
+void
+ifq_add_data(struct ifqueue *ifq, struct if_data *data)
+{
+ mtx_enter(&ifq->ifq_mtx);
+ data->ifi_opackets += ifq->ifq_packets;
+ data->ifi_obytes += ifq->ifq_bytes;
+ data->ifi_oqdrops += ifq->ifq_qdrops;
+ data->ifi_omcasts += ifq->ifq_mcasts;
+ /* ifp->if_data.ifi_oerrors */
+ mtx_leave(&ifq->ifq_mtx);
+}
+
+int
+ifq_enqueue(struct ifqueue *ifq, struct mbuf *m)
+{
+ struct mbuf *dm;
+
+ mtx_enter(&ifq->ifq_mtx);
+ dm = ifq->ifq_ops->ifqop_enq(ifq, m);
+ if (dm != m) {
+ ifq->ifq_packets++;
+ ifq->ifq_bytes += m->m_pkthdr.len;
+ if (ISSET(m->m_flags, M_MCAST))
+ ifq->ifq_mcasts++;
+ }
+
+ if (dm == NULL)
+ ifq->ifq_len++;
+ else
+ ifq->ifq_qdrops++;
+ mtx_leave(&ifq->ifq_mtx);
+
+ if (dm != NULL)
+ m_freem(dm);
+
+ return (dm == m ? ENOBUFS : 0);
+}
+
+static inline void
+ifq_deq_enter(struct ifqueue *ifq)
+{
+ mtx_enter(&ifq->ifq_mtx);
+}
+
+static inline void
+ifq_deq_leave(struct ifqueue *ifq)
+{
+ struct mbuf_list ml;
+
+ ml = ifq->ifq_free;
+ ml_init(&ifq->ifq_free);
+
+ mtx_leave(&ifq->ifq_mtx);
+
+ if (!ml_empty(&ml))
+ ml_purge(&ml);
+}
+
+struct mbuf *
+ifq_deq_begin(struct ifqueue *ifq)
+{
+ struct mbuf *m = NULL;
+ void *cookie;
+
+ ifq_deq_enter(ifq);
+ if (ifq->ifq_len == 0 ||
+ (m = ifq->ifq_ops->ifqop_deq_begin(ifq, &cookie)) == NULL) {
+ ifq_deq_leave(ifq);
+ return (NULL);
+ }
+
+ m->m_pkthdr.ph_cookie = cookie;
+
+ return (m);
+}
+
+void
+ifq_deq_commit(struct ifqueue *ifq, struct mbuf *m)
+{
+ void *cookie;
+
+ KASSERT(m != NULL);
+ cookie = m->m_pkthdr.ph_cookie;
+
+ ifq->ifq_ops->ifqop_deq_commit(ifq, m, cookie);
+ ifq->ifq_len--;
+ ifq_deq_leave(ifq);
+}
+
+void
+ifq_deq_rollback(struct ifqueue *ifq, struct mbuf *m)
+{
+ KASSERT(m != NULL);
+
+ ifq_deq_leave(ifq);
+}
+
+struct mbuf *
+ifq_dequeue(struct ifqueue *ifq)
+{
+ struct mbuf *m;
+
+ m = ifq_deq_begin(ifq);
+ if (m == NULL)
+ return (NULL);
+
+ ifq_deq_commit(ifq, m);
+
+ return (m);
+}
+
+int
+ifq_deq_sleep(struct ifqueue *ifq, struct mbuf **mp, int nbio, int priority,
+ const char *wmesg, volatile unsigned int *sleeping,
+ volatile unsigned int *alive)
+{
+ struct mbuf *m;
+ void *cookie;
+ int error = 0;
+
+ ifq_deq_enter(ifq);
+ if (ifq->ifq_len == 0 && nbio)
+ error = EWOULDBLOCK;
+ else {
+ for (;;) {
+ m = ifq->ifq_ops->ifqop_deq_begin(ifq, &cookie);
+ if (m != NULL) {
+ ifq->ifq_ops->ifqop_deq_commit(ifq, m, cookie);
+ ifq->ifq_len--;
+ *mp = m;
+ break;
+ }
+
+ (*sleeping)++;
+ error = msleep_nsec(ifq, &ifq->ifq_mtx,
+ priority, wmesg, INFSLP);
+ (*sleeping)--;
+ if (error != 0)
+ break;
+ if (!(*alive)) {
+ error = EIO;
+ break;
+ }
+ }
+ }
+ ifq_deq_leave(ifq);
+
+ return (error);
+}
+
+int
+ifq_hdatalen(struct ifqueue *ifq)
+{
+ struct mbuf *m;
+ int len = 0;
+
+ if (ifq_empty(ifq))
+ return (0);
+
+ m = ifq_deq_begin(ifq);
+ if (m != NULL) {
+ len = m->m_pkthdr.len;
+ ifq_deq_rollback(ifq, m);
+ }
+
+ return (len);
+}
+
+void
+ifq_init_maxlen(struct ifqueue *ifq, unsigned int maxlen)
+{
+ /* this is not MP safe, use only during attach */
+ ifq->ifq_maxlen = maxlen;
+}
+
+unsigned int
+ifq_purge(struct ifqueue *ifq)
+{
+ struct mbuf_list ml = MBUF_LIST_INITIALIZER();
+ unsigned int rv;
+
+ mtx_enter(&ifq->ifq_mtx);
+ ifq->ifq_ops->ifqop_purge(ifq, &ml);
+ rv = ifq->ifq_len;
+ ifq->ifq_len = 0;
+ ifq->ifq_qdrops += rv;
+ mtx_leave(&ifq->ifq_mtx);
+
+ KASSERT(rv == ml_len(&ml));
+
+ ml_purge(&ml);
+
+ return (rv);
+}
+
+void *
+ifq_q_enter(struct ifqueue *ifq, const struct ifq_ops *ops)
+{
+ mtx_enter(&ifq->ifq_mtx);
+ if (ifq->ifq_ops == ops)
+ return (ifq->ifq_q);
+
+ mtx_leave(&ifq->ifq_mtx);
+
+ return (NULL);
+}
+
+void
+ifq_q_leave(struct ifqueue *ifq, void *q)
+{
+ KASSERT(q == ifq->ifq_q);
+ mtx_leave(&ifq->ifq_mtx);
+}
+
+void
+ifq_mfreem(struct ifqueue *ifq, struct mbuf *m)
+{
+ MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx);
+
+ ifq->ifq_len--;
+ ifq->ifq_qdrops++;
+ ml_enqueue(&ifq->ifq_free, m);
+}
+
+void
+ifq_mfreeml(struct ifqueue *ifq, struct mbuf_list *ml)
+{
+ MUTEX_ASSERT_LOCKED(&ifq->ifq_mtx);
+
+ ifq->ifq_len -= ml_len(ml);
+ ifq->ifq_qdrops += ml_len(ml);
+ ml_enlist(&ifq->ifq_free, ml);
+}
+
+/*
+ * ifiq
+ */
+
+#if NKSTAT > 0
+struct ifiq_kstat_data {
+ struct kstat_kv kd_packets;
+ struct kstat_kv kd_bytes;
+ struct kstat_kv kd_fdrops;
+ struct kstat_kv kd_qdrops;
+ struct kstat_kv kd_errors;
+ struct kstat_kv kd_qlen;
+
+ struct kstat_kv kd_enqueues;
+ struct kstat_kv kd_dequeues;
+};
+
+static const struct ifiq_kstat_data ifiq_kstat_tpl = {
+ KSTAT_KV_UNIT_INITIALIZER("packets",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("bytes",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_BYTES),
+ KSTAT_KV_UNIT_INITIALIZER("fdrops",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("qdrops",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("errors",
+ KSTAT_KV_T_COUNTER64, KSTAT_KV_U_PACKETS),
+ KSTAT_KV_UNIT_INITIALIZER("qlen",
+ KSTAT_KV_T_UINT32, KSTAT_KV_U_PACKETS),
+
+ KSTAT_KV_INITIALIZER("enqueues",
+ KSTAT_KV_T_COUNTER64),
+ KSTAT_KV_INITIALIZER("dequeues",
+ KSTAT_KV_T_COUNTER64),
+};
+
+int
+ifiq_kstat_copy(struct kstat *ks, void *dst)
+{
+ struct ifiqueue *ifiq = ks->ks_softc;
+ struct ifiq_kstat_data *kd = dst;
+
+ *kd = ifiq_kstat_tpl;
+ kstat_kv_u64(&kd->kd_packets) = ifiq->ifiq_packets;
+ kstat_kv_u64(&kd->kd_bytes) = ifiq->ifiq_bytes;
+ kstat_kv_u64(&kd->kd_fdrops) = ifiq->ifiq_fdrops;
+ kstat_kv_u64(&kd->kd_qdrops) = ifiq->ifiq_qdrops;
+ kstat_kv_u64(&kd->kd_errors) = ifiq->ifiq_errors;
+ kstat_kv_u32(&kd->kd_qlen) = ml_len(&ifiq->ifiq_ml);
+
+ kstat_kv_u64(&kd->kd_enqueues) = ifiq->ifiq_enqueues;
+ kstat_kv_u64(&kd->kd_dequeues) = ifiq->ifiq_dequeues;
+
+ return (0);
+}
+#endif
+
+static void ifiq_process(void *);
+
+void
+ifiq_init(struct ifiqueue *ifiq, struct ifnet *ifp, unsigned int idx)
+{
+ ifiq->ifiq_if = ifp;
+ ifiq->ifiq_bpfp = NULL;
+ ifiq->ifiq_softnet = net_tq(idx);
+ ifiq->ifiq_softc = NULL;
+
+ mtx_init(&ifiq->ifiq_mtx, IPL_NET);
+ ml_init(&ifiq->ifiq_ml);
+ task_set(&ifiq->ifiq_task, ifiq_process, ifiq);
+ ifiq->ifiq_pressure = 0;
+
+ ifiq->ifiq_packets = 0;
+ ifiq->ifiq_bytes = 0;
+ ifiq->ifiq_fdrops = 0;
+ ifiq->ifiq_qdrops = 0;
+ ifiq->ifiq_errors = 0;
+
+ ifiq->ifiq_idx = idx;
+
+#if NKSTAT > 0
+ /* XXX xname vs driver name and unit */
+ ifiq->ifiq_kstat = kstat_create(ifp->if_xname, 0,
+ "rxq", ifiq->ifiq_idx, KSTAT_T_KV, 0);
+ KASSERT(ifiq->ifiq_kstat != NULL);
+ kstat_set_mutex(ifiq->ifiq_kstat, &ifiq->ifiq_mtx);
+ ifiq->ifiq_kstat->ks_softc = ifiq;
+ ifiq->ifiq_kstat->ks_datalen = sizeof(ifiq_kstat_tpl);
+ ifiq->ifiq_kstat->ks_copy = ifiq_kstat_copy;
+ kstat_install(ifiq->ifiq_kstat);
+#endif
+}
+
+void
+ifiq_destroy(struct ifiqueue *ifiq)
+{
+#if NKSTAT > 0
+ kstat_destroy(ifiq->ifiq_kstat);
+#endif
+
+ NET_ASSERT_UNLOCKED();
+ taskq_del_barrier(ifiq->ifiq_softnet, &ifiq->ifiq_task);
+
+ /* don't need to lock because this is the last use of the ifiq */
+ ml_purge(&ifiq->ifiq_ml);
+}
+
+unsigned int ifiq_maxlen_drop = 2048 * 5;
+unsigned int ifiq_maxlen_return = 2048 * 3;
+
+int
+ifiq_input(struct ifiqueue *ifiq, struct mbuf_list *ml)
+{
+ struct ifnet *ifp = ifiq->ifiq_if;
+ struct mbuf *m;
+ uint64_t packets;
+ uint64_t bytes = 0;
+ uint64_t fdrops = 0;
+ unsigned int len;
+#if NBPFILTER > 0
+ caddr_t *ifiq_bpfp, ifiq_bpf = NULL, if_bpf;
+#endif
+
+ if (ml_empty(ml))
+ return (0);
+
+ MBUF_LIST_FOREACH(ml, m) {
+ m->m_pkthdr.ph_ifidx = ifp->if_index;
+ m->m_pkthdr.ph_rtableid = ifp->if_rdomain;
+ bytes += m->m_pkthdr.len;
+ }
+ packets = ml_len(ml);
+
+#if NBPFILTER > 0
+ ifiq_bpfp = READ_ONCE(ifiq->ifiq_bpfp);
+ if (ifiq_bpfp != NULL)
+ ifiq_bpf = READ_ONCE(*ifiq_bpfp);
+ if_bpf = READ_ONCE(ifp->if_bpf);
+ if (ifiq_bpf || if_bpf) {
+ struct mbuf_list ml0 = *ml;
+
+ ml_init(ml);
+
+ while ((m = ml_dequeue(&ml0)) != NULL) {
+ int drop = 0;
+ if (ifiq_bpf &&
+ (*ifp->if_bpf_mtap)(ifiq_bpf, m, BPF_DIRECTION_IN))
+ drop = 1;
+ if (if_bpf &&
+ (*ifp->if_bpf_mtap)(if_bpf, m, BPF_DIRECTION_IN))
+ drop = 1;
+ if (drop) {
+ m_freem(m);
+ fdrops++;
+ } else
+ ml_enqueue(ml, m);
+ }
+
+ if (ml_empty(ml)) {
+ mtx_enter(&ifiq->ifiq_mtx);
+ ifiq->ifiq_packets += packets;
+ ifiq->ifiq_bytes += bytes;
+ ifiq->ifiq_fdrops += fdrops;
+ mtx_leave(&ifiq->ifiq_mtx);
+
+ return (0);
+ }
+ }
+#endif
+
+ mtx_enter(&ifiq->ifiq_mtx);
+ ifiq->ifiq_packets += packets;
+ ifiq->ifiq_bytes += bytes;
+ ifiq->ifiq_fdrops += fdrops;
+
+ len = ml_len(&ifiq->ifiq_ml);
+ if (__predict_true(!ISSET(ifp->if_xflags, IFXF_MONITOR))) {
+ if (len > ifiq_maxlen_drop)
+ ifiq->ifiq_qdrops += ml_len(ml);
+ else {
+ ifiq->ifiq_enqueues++;
+ ml_enlist(&ifiq->ifiq_ml, ml);
+ }
+ }
+ mtx_leave(&ifiq->ifiq_mtx);
+
+ if (ml_empty(ml))
+ task_add(ifiq->ifiq_softnet, &ifiq->ifiq_task);
+ else
+ ml_purge(ml);
+
+ return (len > ifiq_maxlen_return);
+}
+
+void
+ifiq_add_data(struct ifiqueue *ifiq, struct if_data *data)
+{
+ mtx_enter(&ifiq->ifiq_mtx);
+ data->ifi_ipackets += ifiq->ifiq_packets;
+ data->ifi_ibytes += ifiq->ifiq_bytes;
+ data->ifi_iqdrops += ifiq->ifiq_qdrops;
+ mtx_leave(&ifiq->ifiq_mtx);
+}
+
+int
+ifiq_enqueue_qlim(struct ifiqueue *ifiq, struct mbuf *m, unsigned int qlim)
+{
+ struct ifnet *ifp = ifiq->ifiq_if;
+ unsigned int len;
+#if NBPFILTER > 0
+ caddr_t if_bpf = ifp->if_bpf;
+#endif
+
+ m->m_pkthdr.ph_ifidx = ifp->if_index;
+ m->m_pkthdr.ph_rtableid = ifp->if_rdomain;
+
+#if NBPFILTER > 0
+ if_bpf = ifp->if_bpf;
+ if (if_bpf) {
+ if ((*ifp->if_bpf_mtap)(if_bpf, m, BPF_DIRECTION_IN)) {
+ mtx_enter(&ifiq->ifiq_mtx);
+ ifiq->ifiq_packets++;
+ ifiq->ifiq_bytes += m->m_pkthdr.len;
+ ifiq->ifiq_fdrops++;
+ mtx_leave(&ifiq->ifiq_mtx);
+
+ m_freem(m);
+ return (0);
+ }
+ }
+#endif
+
+ mtx_enter(&ifiq->ifiq_mtx);
+ ifiq->ifiq_packets++;
+ ifiq->ifiq_bytes += m->m_pkthdr.len;
+
+ if (qlim && ((len = ml_len(&ifiq->ifiq_ml) >= qlim))) {
+ ifiq->ifiq_qdrops++;
+ } else {
+ ifiq->ifiq_enqueues++;
+ ml_enqueue(&ifiq->ifiq_ml, m);
+ m = NULL;
+ }
+
+ mtx_leave(&ifiq->ifiq_mtx);
+
+ if (m) {
+ m_freem(m);
+ return (0);
+ }
+
+ task_add(ifiq->ifiq_softnet, &ifiq->ifiq_task);
+
+ return (0);
+}
+
+static void
+ifiq_process(void *arg)
+{
+ struct ifiqueue *ifiq = arg;
+ struct mbuf_list ml;
+
+ if (ifiq_empty(ifiq))
+ return;
+
+ mtx_enter(&ifiq->ifiq_mtx);
+ ifiq->ifiq_dequeues++;
+ ml = ifiq->ifiq_ml;
+ ml_init(&ifiq->ifiq_ml);
+ mtx_leave(&ifiq->ifiq_mtx);
+
+ if_input_process(ifiq->ifiq_if, &ml, ifiq->ifiq_idx);
+}
+
+#ifndef SMALL_KERNEL
+int
+net_ifiq_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,
+ void *newp, size_t newlen)
+{
+ int error = EOPNOTSUPP;
+/* pressure is disabled for 6.6-release */
+#if 0
+ int val;
+
+ if (namelen != 1)
+ return (EISDIR);
+
+ switch (name[0]) {
+ case NET_LINK_IFRXQ_PRESSURE_RETURN:
+ val = ifiq_pressure_return;
+ error = sysctl_int(oldp, oldlenp, newp, newlen, &val);
+ if (error != 0)
+ return (error);
+ if (val < 1 || val > ifiq_pressure_drop)
+ return (EINVAL);
+ ifiq_pressure_return = val;
+ break;
+ case NET_LINK_IFRXQ_PRESSURE_DROP:
+ val = ifiq_pressure_drop;
+ error = sysctl_int(oldp, oldlenp, newp, newlen, &val);
+ if (error != 0)
+ return (error);
+ if (ifiq_pressure_return > val)
+ return (EINVAL);
+ ifiq_pressure_drop = val;
+ break;
+ default:
+ error = EOPNOTSUPP;
+ break;
+ }
+#endif
+
+ return (error);
+}
+#endif /* SMALL_KERNEL */
+
+/*
+ * priq implementation
+ */
+
+unsigned int
+priq_idx(unsigned int nqueues, const struct mbuf *m)
+{
+ unsigned int flow = 0;
+
+ if (ISSET(m->m_pkthdr.csum_flags, M_FLOWID))
+ flow = m->m_pkthdr.ph_flowid;
+
+ return (flow % nqueues);
+}
+
+void *
+priq_alloc(unsigned int idx, void *null)
+{
+ struct priq *pq;
+ int i;
+
+ pq = malloc(sizeof(struct priq), M_DEVBUF, M_WAITOK);
+ for (i = 0; i < IFQ_NQUEUES; i++)
+ ml_init(&pq->pq_lists[i]);
+ return (pq);
+}
+
+void
+priq_free(unsigned int idx, void *pq)
+{
+ free(pq, M_DEVBUF, sizeof(struct priq));
+}
+
+struct mbuf *
+priq_enq(struct ifqueue *ifq, struct mbuf *m)
+{
+ struct priq *pq;
+ struct mbuf_list *pl;
+ struct mbuf *n = NULL;
+ unsigned int prio;
+
+ pq = ifq->ifq_q;
+ KASSERT(m->m_pkthdr.pf.prio <= IFQ_MAXPRIO);
+
+ /* Find a lower priority queue to drop from */
+ if (ifq_len(ifq) >= ifq->ifq_maxlen) {
+ for (prio = 0; prio < m->m_pkthdr.pf.prio; prio++) {
+ pl = &pq->pq_lists[prio];
+ if (ml_len(pl) > 0) {
+ n = ml_dequeue(pl);
+ goto enqueue;
+ }
+ }
+ /*
+ * There's no lower priority queue that we can
+ * drop from so don't enqueue this one.
+ */
+ return (m);
+ }
+
+ enqueue:
+ pl = &pq->pq_lists[m->m_pkthdr.pf.prio];
+ ml_enqueue(pl, m);
+
+ return (n);
+}
+
+struct mbuf *
+priq_deq_begin(struct ifqueue *ifq, void **cookiep)
+{
+ struct priq *pq = ifq->ifq_q;
+ struct mbuf_list *pl;
+ unsigned int prio = nitems(pq->pq_lists);
+ struct mbuf *m;
+
+ do {
+ pl = &pq->pq_lists[--prio];
+ m = MBUF_LIST_FIRST(pl);
+ if (m != NULL) {
+ *cookiep = pl;
+ return (m);
+ }
+ } while (prio > 0);
+
+ return (NULL);
+}
+
+void
+priq_deq_commit(struct ifqueue *ifq, struct mbuf *m, void *cookie)
+{
+ struct mbuf_list *pl = cookie;
+
+ KASSERT(MBUF_LIST_FIRST(pl) == m);
+
+ ml_dequeue(pl);
+}
+
+void
+priq_purge(struct ifqueue *ifq, struct mbuf_list *ml)
+{
+ struct priq *pq = ifq->ifq_q;
+ struct mbuf_list *pl;
+ unsigned int prio = nitems(pq->pq_lists);
+
+ do {
+ pl = &pq->pq_lists[--prio];
+ ml_enlist(ml, pl);
+ } while (prio > 0);
+}
diff --git a/module/pfsrc/ip_divert.c b/module/pfsrc/ip_divert.c
new file mode 100644
index 0000000..428b63b
--- /dev/null
+++ b/module/pfsrc/ip_divert.c
@@ -0,0 +1,318 @@
+/* PFLINUX port of OpenBSD 8.0 netinet/ip_divert.c — see docs/porting-notes.md */
+#include
+
+/*
+ * Locks used to protect data:
+ * a atomic
+ */
+
+struct inpcbtable divbtable;
+struct cpumem *divcounters;
+
+u_int divert_sendspace = DIVERT_SENDSPACE; /* [a] */
+u_int divert_recvspace = DIVERT_RECVSPACE; /* [a] */
+
+const struct sysctl_bounded_args divertctl_vars[] = {
+ { DIVERTCTL_RECVSPACE, &divert_recvspace, 0, SB_MAX },
+ { DIVERTCTL_SENDSPACE, &divert_sendspace, 0, SB_MAX },
+};
+
+const struct pr_usrreqs divert_usrreqs = {
+ .pru_attach = divert_attach,
+ .pru_detach = divert_detach,
+ .pru_bind = divert_bind,
+ .pru_shutdown = divert_shutdown,
+ .pru_send = divert_send,
+ .pru_control = in_control,
+ .pru_sockaddr = in_sockaddr,
+ .pru_peeraddr = in_peeraddr,
+};
+
+int divert_output(struct inpcb *, struct mbuf *, struct mbuf *,
+ struct mbuf *);
+void
+divert_init(void)
+{
+ in_pcbinit(&divbtable, DIVERT_HASHSIZE);
+ divcounters = counters_alloc(divs_ncounters);
+}
+
+int
+divert_output(struct inpcb *inp, struct mbuf *m, struct mbuf *nam,
+ struct mbuf *control)
+{
+ struct sockaddr_in *sin;
+ int error, min_hdrlen, off, dir;
+ struct pf_ip *ip;
+
+ m_freem(control);
+
+ if ((error = in_nam2sin(nam, &sin)))
+ goto fail;
+
+ if (m->m_pkthdr.len > IP_MAXPACKET) {
+ error = EMSGSIZE;
+ goto fail;
+ }
+
+ m = rip_chkhdr(m, NULL);
+ if (m == NULL) {
+ error = EINVAL;
+ goto fail;
+ }
+
+ ip = mtod(m, struct pf_ip *);
+ off = ip->ip_hl << 2;
+
+ dir = (sin->sin_addr.s_addr == INADDR_ANY ? PF_OUT : PF_IN);
+
+ switch (ip->ip_p) {
+ case IPPROTO_TCP:
+ min_hdrlen = sizeof(struct pf_tcphdr);
+ m->m_pkthdr.csum_flags |= M_TCP_CSUM_OUT;
+ break;
+ case IPPROTO_UDP:
+ min_hdrlen = sizeof(struct pf_udphdr);
+ m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT;
+ break;
+ case IPPROTO_ICMP:
+ min_hdrlen = ICMP_MINLEN;
+ m->m_pkthdr.csum_flags |= M_ICMP_CSUM_OUT;
+ break;
+ default:
+ min_hdrlen = 0;
+ break;
+ }
+ if (min_hdrlen && m->m_pkthdr.len < off + min_hdrlen) {
+ error = EINVAL;
+ goto fail;
+ }
+
+ m->m_pkthdr.pf.flags |= PF_TAG_DIVERTED_PACKET;
+
+ if (dir == PF_IN) {
+ struct rtentry *rt;
+ struct ifnet *ifp;
+
+ rt = rtalloc(sintosa(sin), 0, inp->inp_rtableid);
+ if (!rtisvalid(rt) || !ISSET(rt->rt_flags, RTF_LOCAL)) {
+ rtfree(rt);
+ error = EADDRNOTAVAIL;
+ goto fail;
+ }
+ m->m_pkthdr.ph_ifidx = rt->rt_ifidx;
+ rtfree(rt);
+
+ /*
+ * Recalculate IP and protocol checksums for the inbound packet
+ * since the userspace application may have modified the packet
+ * prior to reinjection.
+ */
+ in_hdr_cksum_out(m, NULL);
+ in_proto_cksum_out(m, NULL);
+
+ ifp = if_get(m->m_pkthdr.ph_ifidx);
+ if (ifp == NULL) {
+ error = ENETDOWN;
+ goto fail;
+ }
+ ipv4_input(ifp, m, NULL);
+ if_put(ifp);
+ } else {
+ m->m_pkthdr.ph_rtableid = inp->inp_rtableid;
+
+ error = ip_output(m, NULL, &inp->inp_route,
+ IP_ALLOWBROADCAST | IP_RAWOUTPUT, NULL, NULL, 0);
+ }
+
+ divstat_inc(divs_opackets);
+ return (error);
+
+fail:
+ m_freem(m);
+ divstat_inc(divs_errors);
+ return (error);
+}
+
+void
+divert_packet(struct mbuf *m, int dir, u_int16_t divert_port)
+{
+ struct inpcb *inp = NULL;
+ struct socket *so;
+ struct sockaddr_in sin;
+ u_int rdomain;
+
+ divstat_inc(divs_ipackets);
+
+ if (m->m_len < sizeof(struct pf_ip) &&
+ (m = m_pullup(m, sizeof(struct pf_ip))) == NULL) {
+ divstat_inc(divs_errors);
+ goto bad;
+ }
+
+ rdomain = rtable_l2(m->m_pkthdr.ph_rtableid);
+ mtx_enter(&divbtable.inpt_mtx);
+ TAILQ_FOREACH(inp, &divbtable.inpt_queue, inp_queue) {
+ if (inp->inp_lport != divert_port ||
+ rtable_l2(inp->inp_rtableid) != rdomain) {
+ continue;
+ }
+ in_pcbref(inp);
+ break;
+ }
+ mtx_leave(&divbtable.inpt_mtx);
+ if (inp == NULL) {
+ divstat_inc(divs_noport);
+ goto bad;
+ }
+
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin./* PFLINUX sin_len */;
+
+ if (dir == PF_IN) {
+ struct ifaddr *ifa;
+ struct ifnet *ifp;
+
+ ifp = if_get(m->m_pkthdr.ph_ifidx);
+ if (ifp == NULL) {
+ divstat_inc(divs_errors);
+ goto bad;
+ }
+ TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
+ if (ifa->ifa_addr->sa_family != AF_INET)
+ continue;
+ sin.sin_addr = satosin(ifa->ifa_addr)->sin_addr;
+ break;
+ }
+ if_put(ifp);
+ } else {
+ /*
+ * Calculate IP and protocol checksums for outbound packet
+ * diverted to userland. pf rule diverts before cksum offload.
+ */
+ in_hdr_cksum_out(m, NULL);
+ in_proto_cksum_out(m, NULL);
+ }
+
+ so = inp->inp_socket;
+ mtx_enter(&so->so_rcv.sb_mtx);
+ if (sbappendaddr(&so->so_rcv, sintosa(&sin), m, NULL) == 0) {
+ mtx_leave(&so->so_rcv.sb_mtx);
+ divstat_inc(divs_fullsock);
+ goto bad;
+ }
+ mtx_leave(&so->so_rcv.sb_mtx);
+ sorwakeup(so);
+
+ in_pcbunref(inp);
+ return;
+
+ bad:
+ in_pcbunref(inp);
+ m_freem(m);
+}
+
+int
+divert_attach(struct socket *so, int proto, int wait)
+{
+ int error;
+
+ if (so->so_pcb != NULL)
+ return EINVAL;
+ if ((so->so_state & SS_PRIV) == 0)
+ return EACCES;
+
+ error = soreserve(so, atomic_load_int(&divert_sendspace),
+ atomic_load_int(&divert_recvspace));
+ if (error)
+ return error;
+ error = in_pcballoc(so, &divbtable, wait);
+ if (error)
+ return error;
+
+ sotoinpcb(so)->inp_flags |= INP_HDRINCL;
+ return (0);
+}
+
+int
+divert_detach(struct socket *so)
+{
+ struct inpcb *inp = sotoinpcb(so);
+
+ soassertlocked(so);
+
+ if (inp == NULL)
+ return (EINVAL);
+
+ in_pcbdetach(inp);
+ return (0);
+}
+
+int
+divert_bind(struct socket *so, struct mbuf *addr, struct proc *p)
+{
+ struct inpcb *inp = sotoinpcb(so);
+
+ soassertlocked(so);
+ return in_pcbbind(inp, addr, p);
+}
+
+int
+divert_shutdown(struct socket *so)
+{
+ soassertlocked(so);
+ socantsendmore(so);
+ return (0);
+}
+
+int
+divert_send(struct socket *so, struct mbuf *m, struct mbuf *addr,
+ struct mbuf *control)
+{
+ struct inpcb *inp = sotoinpcb(so);
+
+ soassertlocked(so);
+ return (divert_output(inp, m, addr, control));
+}
+
+int
+divert_sysctl_divstat(void *oldp, size_t *oldlenp, void *newp)
+{
+ uint64_t counters[divs_ncounters];
+ struct divstat divstat;
+ u_long *words = (u_long *)&divstat;
+ int i;
+
+ CTASSERT(sizeof(divstat) == (nitems(counters) * sizeof(u_long)));
+ memset(&divstat, 0, sizeof divstat);
+ counters_read(divcounters, counters, nitems(counters), NULL);
+
+ for (i = 0; i < nitems(counters); i++)
+ words[i] = (u_long)counters[i];
+
+ return (sysctl_rdstruct(oldp, oldlenp, newp,
+ &divstat, sizeof(divstat)));
+}
+
+/*
+ * Sysctl for divert variables.
+ */
+int
+divert_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
+ size_t newlen)
+{
+ /* All sysctl names at this level are terminal. */
+ if (namelen != 1)
+ return (ENOTDIR);
+
+ switch (name[0]) {
+ case DIVERTCTL_STATS:
+ return (divert_sysctl_divstat(oldp, oldlenp, newp));
+ default:
+ return (sysctl_bounded_arr(divertctl_vars,
+ nitems(divertctl_vars), name, namelen, oldp, oldlenp,
+ newp, newlen));
+ }
+ /* NOTREACHED */
+}
diff --git a/module/pfsrc/pf.c b/module/pfsrc/pf.c
new file mode 100644
index 0000000..afa27a2
--- /dev/null
+++ b/module/pfsrc/pf.c
@@ -0,0 +1,9101 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf.c — see docs/porting-notes.md */
+#include
+#endif /* NPFSYNC > 0 */
+
+/*
+ * Global variables
+ */
+struct pf_state_tree pf_statetbl;
+struct pf_queuehead pf_queues[2];
+struct pf_queuehead *pf_queues_active;
+struct pf_queuehead *pf_queues_inactive;
+
+struct pf_status pf_status;
+static struct cpumem *pf_status_fcounters;
+
+struct mutex pf_inp_mtx = MUTEX_INITIALIZER(IPL_SOFTNET);
+
+int pf_hdr_limit = 20; /* arbitrary limit, tune in ddb */
+
+SHA2_CTX pf_tcp_secret_ctx;
+u_char pf_tcp_secret[16];
+int pf_tcp_secret_init;
+int pf_tcp_iss_off;
+
+enum pf_test_status {
+ PF_TEST_FAIL = -1,
+ PF_TEST_OK,
+ PF_TEST_QUICK
+};
+
+struct pf_test_ctx {
+ struct pf_pdesc *pd;
+ struct pf_rule_actions act;
+ u_int8_t icmpcode;
+ u_int8_t icmptype;
+ int icmp_dir;
+ int state_icmp;
+ int tag;
+ int limiter_drop;
+ u_short reason;
+ struct pf_rule_item *ri;
+ struct pf_src_node *sns[PF_SN_MAX];
+ struct pf_rule_slist rules;
+ struct pf_rule *nr;
+ struct pf_rule **rm;
+ struct pf_rule *a;
+ struct pf_rule **am;
+ struct pf_ruleset **rsm;
+ struct pf_ruleset *arsm;
+ struct pf_ruleset *aruleset;
+ struct pf_tcphdr *th;
+ struct pf_statelim *statelim;
+ struct pf_sourcelim *sourcelim;
+ struct pf_source *source;
+};
+
+struct pool pf_src_tree_pl, pf_rule_pl, pf_queue_pl;
+struct pool pf_state_pl, pf_state_key_pl, pf_state_item_pl;
+struct pool pf_rule_item_pl, pf_sn_item_pl, pf_pktdelay_pl;
+struct pool pf_statelim_pl, pf_sourcelim_pl, pf_source_pl;
+struct pool pf_state_link_pl;
+
+void pf_add_threshold(struct pf_threshold *);
+int pf_check_threshold(struct pf_threshold *);
+int pf_check_tcp_cksum(struct mbuf *, int, int,
+ sa_family_t);
+__inline void pf_cksum_fixup(u_int16_t *, u_int16_t, u_int16_t,
+ u_int8_t);
+void pf_cksum_fixup_a(u_int16_t *, const struct pf_addr *,
+ const struct pf_addr *, sa_family_t, u_int8_t);
+int pf_modulate_sack(struct pf_pdesc *,
+ struct pf_state_peer *);
+int pf_icmp_mapping(struct pf_pdesc *, u_int8_t, int *,
+ u_int16_t *, u_int16_t *);
+int pf_change_icmp_af(struct mbuf *, int,
+ struct pf_pdesc *, struct pf_pdesc *,
+ struct pf_addr *, struct pf_addr *, sa_family_t,
+ sa_family_t);
+int pf_translate_a(struct pf_pdesc *, struct pf_addr *,
+ struct pf_addr *);
+void pf_translate_icmp(struct pf_pdesc *, struct pf_addr *,
+ u_int16_t *, struct pf_addr *, struct pf_addr *,
+ u_int16_t);
+int pf_translate_icmp_af(struct pf_pdesc*, int, void *);
+void pf_send_icmp(struct mbuf *, u_int8_t, u_int8_t, int,
+ sa_family_t, struct pf_rule *, u_int);
+void pf_detach_state(struct pf_state *);
+struct pf_state_key *pf_state_key_attach(struct pf_state_key *,
+ struct pf_state *, int);
+void pf_state_key_detach(struct pf_state *, int);
+u_int32_t pf_tcp_iss(struct pf_pdesc *);
+void pf_rule_to_actions(struct pf_rule *,
+ struct pf_rule_actions *);
+int pf_test_rule(struct pf_pdesc *, struct pf_rule **,
+ struct pf_state **, struct pf_rule **,
+ struct pf_ruleset **, u_short *);
+static __inline int pf_create_state(struct pf_pdesc *, struct pf_rule *,
+ struct pf_rule *, struct pf_rule *,
+ struct pf_state_key **, struct pf_state_key **,
+ int *, struct pf_state **, int,
+ struct pf_rule_slist *, struct pf_rule_actions *,
+ struct pf_src_node **, struct pf_test_ctx *);
+static __inline int pf_state_key_addr_setup(struct pf_pdesc *, void *,
+ int, struct pf_addr *, int, struct pf_addr *,
+ int, int);
+int pf_state_key_setup(struct pf_pdesc *, struct
+ pf_state_key **, struct pf_state_key **, int);
+int pf_tcp_track_full(struct pf_pdesc *,
+ struct pf_state **, u_short *, int *, int);
+int pf_tcp_track_sloppy(struct pf_pdesc *,
+ struct pf_state **, u_short *);
+static __inline int pf_synproxy_ack(struct pf_rule *, struct pf_pdesc *,
+ struct pf_state **, struct pf_rule_actions *);
+static __inline int pf_synproxy(struct pf_pdesc *, struct pf_state **,
+ u_short *);
+int pf_test_state(struct pf_pdesc *, struct pf_state **,
+ u_short *);
+int pf_icmp_state_lookup(struct pf_pdesc *,
+ struct pf_state_key_cmp *, struct pf_state **,
+ u_int16_t, u_int16_t, int, int *, int, int);
+int pf_test_state_icmp(struct pf_pdesc *,
+ struct pf_state **, u_short *);
+u_int16_t pf_calc_mss(struct pf_addr *, sa_family_t, int,
+ uint16_t, uint16_t);
+static __inline int pf_set_rt_ifp(struct pf_state *, struct pf_addr *,
+ sa_family_t, struct pf_src_node **);
+struct pf_divert *pf_get_divert(struct mbuf *);
+int pf_walk_option(struct pf_pdesc *, struct pf_ip *,
+ int, int, u_short *);
+int pf_walk_header(struct pf_pdesc *, struct pf_ip *,
+ u_short *);
+int pf_walk_option6(struct pf_pdesc *, struct pf_ip6_hdr *,
+ int, int, u_short *);
+int pf_walk_header6(struct pf_pdesc *, struct pf_ip6_hdr *,
+ u_short *);
+void pf_print_state_parts(struct pf_state *,
+ struct pf_state_key *, struct pf_state_key *);
+int pf_addr_wrap_neq(struct pf_addr_wrap *,
+ struct pf_addr_wrap *);
+int pf_compare_state_keys(struct pf_state_key *,
+ struct pf_state_key *, struct pfi_kif *, u_int);
+u_int16_t pf_pkt_hash(sa_family_t, uint8_t,
+ const struct pf_addr *, const struct pf_addr *,
+ uint16_t, uint16_t);
+int pf_find_state(struct pf_pdesc *,
+ struct pf_state_key_cmp *, struct pf_state **);
+int pf_src_connlimit(struct pf_state **);
+int pf_match_rcvif(struct mbuf *, struct pf_rule *);
+enum pf_test_status pf_match_rule(struct pf_test_ctx *,
+ struct pf_ruleset *);
+void pf_counters_inc(int, struct pf_pdesc *,
+ struct pf_state *, struct pf_rule *,
+ struct pf_rule *);
+
+int pf_state_insert(struct pfi_kif *,
+ struct pf_state_key **, struct pf_state_key **,
+ struct pf_state *);
+
+int pf_state_key_isvalid(struct pf_state_key *);
+struct pf_state_key *pf_state_key_ref(struct pf_state_key *);
+void pf_state_key_unref(struct pf_state_key *);
+void pf_state_key_link_reverse(struct pf_state_key *,
+ struct pf_state_key *);
+void pf_state_key_unlink_reverse(struct pf_state_key *);
+void pf_state_key_link_inpcb(struct pf_state_key *,
+ struct inpcb *);
+void pf_state_key_unlink_inpcb(struct pf_state_key *);
+void pf_pktenqueue_delayed(void *);
+int32_t pf_state_expires(const struct pf_state *, uint8_t);
+
+#if NPFLOG > 0
+void pf_log_matches(struct pf_pdesc *, struct pf_rule *,
+ struct pf_rule *, struct pf_ruleset *,
+ struct pf_rule_slist *);
+#endif /* NPFLOG > 0 */
+
+extern struct pool pfr_ktable_pl;
+extern struct pool pfr_kentry_pl;
+
+struct pf_pool_limit pf_pool_limits[PF_LIMIT_MAX] = {
+ { &pf_state_pl, PFSTATE_HIWAT, PFSTATE_HIWAT },
+ { &pf_src_tree_pl, PFSNODE_HIWAT, PFSNODE_HIWAT },
+ { &pf_frent_pl, PFFRAG_FRENT_HIWAT, PFFRAG_FRENT_HIWAT },
+ { &pfr_ktable_pl, PFR_KTABLE_HIWAT, PFR_KTABLE_HIWAT },
+ { &pfr_kentry_pl, PFR_KENTRY_HIWAT, PFR_KENTRY_HIWAT },
+ { &pf_pktdelay_pl, PF_PKTDELAY_MAXPKTS, PF_PKTDELAY_MAXPKTS },
+ { &pf_anchor_pl, PF_ANCHOR_HIWAT, PF_ANCHOR_HIWAT }
+};
+
+#define BOUND_IFACE(r, k) \
+ ((r)->rule_flag & PFRULE_IFBOUND) ? (k) : pfi_all
+
+#define STATE_INC_COUNTERS(s) \
+ do { \
+ struct pf_rule_item *mrm; \
+ s->rule.ptr->states_cur++; \
+ s->rule.ptr->states_tot++; \
+ if (s->anchor.ptr != NULL) { \
+ s->anchor.ptr->states_cur++; \
+ s->anchor.ptr->states_tot++; \
+ } \
+ SLIST_FOREACH(mrm, &s->match_rules, entry) \
+ mrm->r->states_cur++; \
+ } while (0)
+
+static __inline int pf_src_compare(struct pf_src_node *, struct pf_src_node *);
+static inline int pf_state_compare_key(const struct pf_state_key *,
+ const struct pf_state_key *);
+static inline int pf_state_compare_id(const struct pf_state *,
+ const struct pf_state *);
+#ifdef INET6
+static __inline void pf_cksum_uncover(u_int16_t *, u_int16_t, u_int8_t);
+static __inline void pf_cksum_cover(u_int16_t *, u_int16_t, u_int8_t);
+#endif /* INET6 */
+static __inline void pf_set_protostate(struct pf_state *, int, u_int8_t);
+
+static inline int
+pf_statelim_id_cmp(const struct pf_statelim *a, const struct pf_statelim *b)
+{
+ if (a->pfstlim_id > b->pfstlim_id)
+ return (1);
+ if (a->pfstlim_id < b->pfstlim_id)
+ return (-1);
+
+ return (0);
+}
+
+RBT_GENERATE(pf_statelim_id_tree, pf_statelim, pfstlim_id_tree,
+ pf_statelim_id_cmp);
+
+static inline int
+pf_statelim_nm_cmp(const struct pf_statelim *a, const struct pf_statelim *b)
+{
+ return (strncmp(a->pfstlim_nm, b->pfstlim_nm, sizeof(a->pfstlim_nm)));
+}
+
+RBT_GENERATE(pf_statelim_nm_tree, pf_statelim, pfstlim_nm_tree,
+ pf_statelim_nm_cmp);
+
+struct pf_statelim_id_tree pf_statelim_id_tree_active =
+ RBT_INITIALIZER(pf_statelim_id_tree_active);
+struct pf_statelim_list pf_statelim_list_active =
+ TAILQ_HEAD_INITIALIZER(pf_statelim_list_active);
+
+struct pf_statelim_id_tree pf_statelim_id_tree_inactive =
+ RBT_INITIALIZER(pf_statelim_id_tree_inactive);
+struct pf_statelim_nm_tree pf_statelim_nm_tree_inactive =
+ RBT_INITIALIZER(pf_statelim_nm_tree_inactive);
+struct pf_statelim_list pf_statelim_list_inactive =
+ TAILQ_HEAD_INITIALIZER(pf_statelim_list_inactive);
+
+static inline int
+pf_sourcelim_id_cmp(const struct pf_sourcelim *a, const struct pf_sourcelim *b)
+{
+ if (a->pfsrlim_id > b->pfsrlim_id)
+ return (1);
+ if (a->pfsrlim_id < b->pfsrlim_id)
+ return (-1);
+
+ return (0);
+}
+
+RBT_GENERATE(pf_sourcelim_id_tree, pf_sourcelim, pfsrlim_id_tree,
+ pf_sourcelim_id_cmp);
+
+static inline int
+pf_sourcelim_nm_cmp(const struct pf_sourcelim *a, const struct pf_sourcelim *b)
+{
+ return (strncmp(a->pfsrlim_nm, b->pfsrlim_nm, sizeof(a->pfsrlim_nm)));
+}
+
+RBT_GENERATE(pf_sourcelim_nm_tree, pf_sourcelim, pfsrlim_nm_tree,
+ pf_sourcelim_nm_cmp);
+
+static inline int
+pf_source_cmp(const struct pf_source *a, const struct pf_source *b)
+{
+ if (a->pfsr_af > b->pfsr_af)
+ return (1);
+ if (a->pfsr_af < b->pfsr_af)
+ return (-1);
+ if (a->pfsr_rdomain > b->pfsr_rdomain)
+ return (1);
+ if (a->pfsr_rdomain < b->pfsr_rdomain)
+ return (-1);
+
+ return (pf_addr_compare(&a->pfsr_addr, &b->pfsr_addr, a->pfsr_af));
+}
+
+RBT_GENERATE(pf_source_tree, pf_source, pfsr_tree, pf_source_cmp);
+
+static inline int
+pf_source_ioc_cmp(const struct pf_source *a, const struct pf_source *b)
+{
+ size_t i;
+
+ if (a->pfsr_af > b->pfsr_af)
+ return (1);
+ if (a->pfsr_af < b->pfsr_af)
+ return (-1);
+ if (a->pfsr_rdomain > b->pfsr_rdomain)
+ return (1);
+ if (a->pfsr_rdomain < b->pfsr_rdomain)
+ return (-1);
+
+ for (i = 0; i < nitems(a->pfsr_addr.addr32); i++) {
+ uint32_t wa = ntohl(a->pfsr_addr.addr32[i]);
+ uint32_t wb = ntohl(b->pfsr_addr.addr32[i]);
+
+ if (wa > wb)
+ return (1);
+ if (wa < wb)
+ return (-1);
+ }
+
+ return (0);
+}
+
+RBT_GENERATE(pf_source_ioc_tree, pf_source, pfsr_ioc_tree, pf_source_ioc_cmp);
+
+struct pf_sourcelim_id_tree pf_sourcelim_id_tree_active =
+ RBT_INITIALIZER(pf_sourcelim_id_tree_active);
+struct pf_sourcelim_list pf_sourcelim_list_active =
+ TAILQ_HEAD_INITIALIZER(pf_sourcelim_list_active);
+
+struct pf_sourcelim_id_tree pf_sourcelim_id_tree_inactive =
+ RBT_INITIALIZER(pf_sourcelim_id_tree_inactive);
+struct pf_sourcelim_nm_tree pf_sourcelim_nm_tree_inactive =
+ RBT_INITIALIZER(pf_sourcelim_nm_tree_inactive);
+struct pf_sourcelim_list pf_sourcelim_list_inactive =
+ TAILQ_HEAD_INITIALIZER(pf_sourcelim_list_inactive);
+
+static inline struct pf_statelim *
+pf_statelim_find(uint32_t id)
+{
+ struct pf_statelim key;
+
+ /* only the id is used in cmp, so don't have to zero all the things */
+ key.pfstlim_id = id;
+
+ return (RBT_FIND(pf_statelim_id_tree,
+ &pf_statelim_id_tree_active, &key));
+}
+
+static inline struct pf_sourcelim *
+pf_sourcelim_find(uint32_t id)
+{
+ struct pf_sourcelim key;
+
+ /* only the id is used in cmp, so don't have to zero all the things */
+ key.pfsrlim_id = id;
+
+ return (RBT_FIND(pf_sourcelim_id_tree,
+ &pf_sourcelim_id_tree_active, &key));
+}
+
+struct pf_source_list pf_source_gc = TAILQ_HEAD_INITIALIZER(pf_source_gc);
+
+static void
+pf_source_purge(void)
+{
+ struct pf_source *sr, *nsr;
+ time_t now = getuptime();
+
+ TAILQ_FOREACH_SAFE(sr, &pf_source_gc, pfsr_empty_gc, nsr) {
+ struct pf_sourcelim *srlim = sr->pfsr_parent;
+
+ if (now <= sr->pfsr_empty_ts + srlim->pfsrlim_rate.seconds + 1)
+ continue;
+
+ TAILQ_REMOVE(&pf_source_gc, sr, pfsr_empty_gc);
+
+ RBT_REMOVE(pf_source_tree, &srlim->pfsrlim_sources, sr);
+ RBT_REMOVE(pf_source_ioc_tree, &srlim->pfsrlim_ioc_sources, sr);
+ srlim->pfsrlim_nsources--;
+
+ pool_put(&pf_source_pl, sr);
+ }
+}
+
+static void
+pf_source_pfr_addr(struct pfr_addr *p, const struct pf_source *sr)
+{
+ struct pf_sourcelim *srlim = sr->pfsr_parent;
+
+ memset(p, 0, sizeof(*p));
+
+ p->pfra_af = sr->pfsr_af;
+ switch (sr->pfsr_af) {
+ case AF_INET:
+ p->pfra_net = srlim->pfsrlim_ipv4_prefix;
+ p->pfra_ip4addr = sr->pfsr_addr.v4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ p->pfra_net = srlim->pfsrlim_ipv6_prefix;
+ p->pfra_ip6addr = sr->pfsr_addr.v6;
+ break;
+#endif /* INET6 */
+ }
+}
+
+static void
+pf_source_used(struct pf_source *sr)
+{
+ struct pf_sourcelim *srlim = sr->pfsr_parent;
+ struct pfr_ktable *t;
+ unsigned int used;
+
+ used = sr->pfsr_inuse++;
+ sr->pfsr_rate_ts += srlim->pfsrlim_rate_token;
+
+ if (used == 0)
+ TAILQ_REMOVE(&pf_source_gc, sr, pfsr_empty_gc);
+ else if ((t = srlim->pfsrlim_overload.table) != NULL &&
+ used >= srlim->pfsrlim_overload.hwm && !sr->pfsr_intable) {
+ struct pfr_addr p;
+
+ pf_source_pfr_addr(&p, sr);
+
+ pfr_insert_kentry(t, &p, gettime());
+ sr->pfsr_intable = 1;
+ }
+}
+
+static void
+pf_source_rele(struct pf_source *sr)
+{
+ struct pf_sourcelim *srlim = sr->pfsr_parent;
+ struct pfr_ktable *t;
+ unsigned int used;
+
+ used = --sr->pfsr_inuse;
+
+ t = srlim->pfsrlim_overload.table;
+ if (t != NULL && sr->pfsr_intable &&
+ used < srlim->pfsrlim_overload.lwm) {
+ struct pfr_addr p;
+
+ pf_source_pfr_addr(&p, sr);
+
+ pfr_remove_kentry(t, &p);
+ sr->pfsr_intable = 0;
+ }
+
+ if (used == 0) {
+ TAILQ_INSERT_TAIL(&pf_source_gc, sr, pfsr_empty_gc);
+ sr->pfsr_empty_ts = getuptime() + srlim->pfsrlim_rate.seconds;
+ }
+}
+
+static inline void
+pf_source_key(struct pf_sourcelim *srlim, struct pf_source *key,
+ sa_family_t af, unsigned int rdomain, const struct pf_addr *addr)
+{
+ size_t i;
+
+ /* only af+addr is used for lookup. */
+ key->pfsr_af = af;
+ key->pfsr_rdomain = rdomain;
+ switch (af) {
+ case AF_INET:
+ key->pfsr_addr.addr32[0] =
+ srlim->pfsrlim_ipv4_mask.v4.s_addr &
+ addr->v4.s_addr;
+
+ for (i = 1; i < nitems(key->pfsr_addr.addr32); i++)
+ key->pfsr_addr.addr32[i] = htonl(0);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ for (i = 0; i < nitems(key->pfsr_addr.addr32); i++) {
+ key->pfsr_addr.addr32[i] =
+ srlim->pfsrlim_ipv6_mask.addr32[i] &
+ addr->addr32[i];
+ }
+ break;
+#endif
+ default:
+ unhandled_af(af);
+ /* NOTREACHED */
+ }
+}
+
+static inline struct pf_source *
+pf_source_find(struct pf_sourcelim *srlim, const struct pf_source *key)
+{
+ return (RBT_FIND(pf_source_tree, &srlim->pfsrlim_sources, key));
+}
+
+struct pf_src_tree tree_src_tracking;
+
+struct pf_state_tree_id tree_id;
+struct pf_state_list pf_state_list = PF_STATE_LIST_INITIALIZER(pf_state_list);
+
+RB_GENERATE(pf_src_tree, pf_src_node, entry, pf_src_compare);
+RBT_GENERATE(pf_state_tree, pf_state_key, sk_entry, pf_state_compare_key);
+RBT_GENERATE(pf_state_tree_id, pf_state, entry_id, pf_state_compare_id);
+
+int
+pf_addr_compare(const struct pf_addr *a, const struct pf_addr *b,
+ sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ if (a->addr32[0] > b->addr32[0])
+ return (1);
+ if (a->addr32[0] < b->addr32[0])
+ return (-1);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (a->addr32[3] > b->addr32[3])
+ return (1);
+ if (a->addr32[3] < b->addr32[3])
+ return (-1);
+ if (a->addr32[2] > b->addr32[2])
+ return (1);
+ if (a->addr32[2] < b->addr32[2])
+ return (-1);
+ if (a->addr32[1] > b->addr32[1])
+ return (1);
+ if (a->addr32[1] < b->addr32[1])
+ return (-1);
+ if (a->addr32[0] > b->addr32[0])
+ return (1);
+ if (a->addr32[0] < b->addr32[0])
+ return (-1);
+ break;
+#endif /* INET6 */
+ }
+ return (0);
+}
+
+static __inline int
+pf_src_compare(struct pf_src_node *a, struct pf_src_node *b)
+{
+ int diff;
+
+ if (a->rule.ptr > b->rule.ptr)
+ return (1);
+ if (a->rule.ptr < b->rule.ptr)
+ return (-1);
+ if ((diff = a->type - b->type) != 0)
+ return (diff);
+ if ((diff = a->af - b->af) != 0)
+ return (diff);
+ if ((diff = pf_addr_compare(&a->addr, &b->addr, a->af)) != 0)
+ return (diff);
+ return (0);
+}
+
+static __inline void
+pf_set_protostate(struct pf_state *st, int which, u_int8_t newstate)
+{
+ if (which == PF_PEER_DST || which == PF_PEER_BOTH)
+ st->dst.state = newstate;
+ if (which == PF_PEER_DST)
+ return;
+
+ if (st->src.state == newstate)
+ return;
+ if (st->creatorid == pf_status.hostid &&
+ st->key[PF_SK_STACK]->proto == IPPROTO_TCP &&
+ !(TCPS_HAVEESTABLISHED(st->src.state) ||
+ st->src.state == TCPS_CLOSED) &&
+ (TCPS_HAVEESTABLISHED(newstate) || newstate == TCPS_CLOSED))
+ atomic_dec_int(&pf_status.states_halfopen);
+
+ st->src.state = newstate;
+}
+
+void
+pf_addrcpy(struct pf_addr *dst, struct pf_addr *src, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ dst->addr32[0] = src->addr32[0];
+ break;
+#ifdef INET6
+ case AF_INET6:
+ dst->addr32[0] = src->addr32[0];
+ dst->addr32[1] = src->addr32[1];
+ dst->addr32[2] = src->addr32[2];
+ dst->addr32[3] = src->addr32[3];
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+}
+
+void
+pf_init_threshold(struct pf_threshold *threshold,
+ u_int32_t limit, u_int32_t seconds)
+{
+ threshold->limit = limit * PF_THRESHOLD_MULT;
+ threshold->seconds = seconds;
+ threshold->count = 0;
+ threshold->last = getuptime();
+}
+
+void
+pf_add_threshold(struct pf_threshold *threshold)
+{
+ u_int32_t t = getuptime(), diff = t - threshold->last;
+
+ if (diff >= threshold->seconds)
+ threshold->count = 0;
+ else
+ threshold->count -= threshold->count * diff /
+ threshold->seconds;
+ threshold->count += PF_THRESHOLD_MULT;
+ threshold->last = t;
+}
+
+int
+pf_check_threshold(struct pf_threshold *threshold)
+{
+ return (threshold->count > threshold->limit);
+}
+
+void
+pf_state_list_insert(struct pf_state_list *pfs, struct pf_state *st)
+{
+ /*
+ * we can always put states on the end of the list.
+ *
+ * things reading the list should take a read lock, then
+ * the mutex, get the head and tail pointers, release the
+ * mutex, and then they can iterate between the head and tail.
+ */
+
+ pf_state_ref(st); /* get a ref for the list */
+
+ mtx_enter(&pfs->pfs_mtx);
+ TAILQ_INSERT_TAIL(&pfs->pfs_list, st, entry_list);
+ mtx_leave(&pfs->pfs_mtx);
+}
+
+void
+pf_state_list_remove(struct pf_state_list *pfs, struct pf_state *st)
+{
+ /* states can only be removed when the write lock is held */
+ rw_assert_wrlock(&pfs->pfs_rwl);
+
+ mtx_enter(&pfs->pfs_mtx);
+ TAILQ_REMOVE(&pfs->pfs_list, st, entry_list);
+ mtx_leave(&pfs->pfs_mtx);
+
+ pf_state_unref(st); /* list no longer references the state */
+}
+
+void
+pf_update_state_timeout(struct pf_state *st, int to)
+{
+ mtx_enter(&st->mtx);
+ if (st->timeout != PFTM_UNLINKED)
+ st->timeout = to;
+ mtx_leave(&st->mtx);
+}
+
+int
+pf_src_connlimit(struct pf_state **stp)
+{
+ int bad = 0;
+ struct pf_src_node *sn;
+ u_int32_t sn_conn;
+ int rv = 0;
+
+ PF_LOCK();
+
+ if ((sn = pf_get_src_node((*stp), PF_SN_NONE)) == NULL)
+ goto done;
+
+ /*
+ * Note: conn limit is bumped on SYN_SENT->ESTBLISHED
+ * state transition. packet does not hold any locks
+ * when running here, therefore atomic is needed.
+ */
+ sn_conn = atomic_inc_int_nv(&sn->conn);
+
+ (*stp)->src.tcp_est = 1;
+ pf_add_threshold(&sn->conn_rate);
+
+ if ((*stp)->rule.ptr->max_src_conn &&
+ (*stp)->rule.ptr->max_src_conn < sn_conn) {
+ pf_status.lcounters[LCNT_SRCCONN]++;
+ bad++;
+ }
+
+ if ((*stp)->rule.ptr->max_src_conn_rate.limit &&
+ pf_check_threshold(&sn->conn_rate)) {
+ pf_status.lcounters[LCNT_SRCCONNRATE]++;
+ bad++;
+ }
+
+ if (!bad)
+ goto done;
+
+ if ((*stp)->rule.ptr->overload_tbl) {
+ struct pfr_addr p;
+ u_int32_t killed = 0;
+
+ pf_status.lcounters[LCNT_OVERLOAD_TABLE]++;
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: pf_src_connlimit: blocking address ");
+ pf_print_host(&sn->addr, 0,
+ (*stp)->key[PF_SK_WIRE]->af);
+ }
+
+ memset(&p, 0, sizeof(p));
+ p.pfra_af = (*stp)->key[PF_SK_WIRE]->af;
+ switch ((*stp)->key[PF_SK_WIRE]->af) {
+ case AF_INET:
+ p.pfra_net = 32;
+ p.pfra_ip4addr = sn->addr.v4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ p.pfra_net = 128;
+ p.pfra_ip6addr = sn->addr.v6;
+ break;
+#endif /* INET6 */
+ }
+
+ pfr_insert_kentry((*stp)->rule.ptr->overload_tbl,
+ &p, gettime());
+
+ /* kill existing states if that's required. */
+ if ((*stp)->rule.ptr->flush) {
+ struct pf_state_key *sk;
+ struct pf_state *st;
+
+ pf_status.lcounters[LCNT_OVERLOAD_FLUSH]++;
+ PF_STATE_ENTER_READ();
+ RBT_FOREACH(st, pf_state_tree_id, &tree_id) {
+ sk = st->key[PF_SK_WIRE];
+ /*
+ * Kill states from this source. (Only those
+ * from the same rule if PF_FLUSH_GLOBAL is not
+ * set)
+ */
+ if (sk->af ==
+ (*stp)->key[PF_SK_WIRE]->af &&
+ (((*stp)->direction == PF_OUT &&
+ PF_AEQ(&sn->addr, &sk->addr[1], sk->af)) ||
+ ((*stp)->direction == PF_IN &&
+ PF_AEQ(&sn->addr, &sk->addr[0], sk->af))) &&
+ ((*stp)->rule.ptr->flush &
+ PF_FLUSH_GLOBAL ||
+ (*stp)->rule.ptr == st->rule.ptr)) {
+ pf_update_state_timeout(st, PFTM_PURGE);
+ pf_set_protostate(st, PF_PEER_BOTH,
+ TCPS_CLOSED);
+ killed++;
+ }
+ }
+ PF_STATE_EXIT_READ();
+ if (pf_status.debug >= LOG_NOTICE)
+ addlog(", %u states killed", killed);
+ }
+ if (pf_status.debug >= LOG_NOTICE)
+ addlog("\n");
+ }
+
+ /* kill this state */
+ pf_update_state_timeout(*stp, PFTM_PURGE);
+ pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_CLOSED);
+
+ rv = 1;
+done:
+ PF_UNLOCK();
+
+ return (rv);
+}
+
+int
+pf_insert_src_node(struct pf_src_node **sn, struct pf_rule *rule,
+ enum pf_sn_types type, sa_family_t af, struct pf_addr *src,
+ struct pf_addr *raddr, struct pfi_kif *kif)
+{
+ struct pf_src_node k;
+
+ if (*sn == NULL) {
+ k.af = af;
+ k.type = type;
+ pf_addrcpy(&k.addr, src, af);
+ k.rule.ptr = rule;
+ pf_status.scounters[SCNT_SRC_NODE_SEARCH]++;
+ *sn = RB_FIND(pf_src_tree, &tree_src_tracking, &k);
+ }
+ if (*sn == NULL) {
+ if (!rule->max_src_nodes ||
+ rule->src_nodes < rule->max_src_nodes)
+ (*sn) = pool_get(&pf_src_tree_pl, PR_NOWAIT | PR_ZERO);
+ else
+ pf_status.lcounters[LCNT_SRCNODES]++;
+ if ((*sn) == NULL)
+ return (-1);
+
+ pf_init_threshold(&(*sn)->conn_rate,
+ rule->max_src_conn_rate.limit,
+ rule->max_src_conn_rate.seconds);
+
+ (*sn)->type = type;
+ (*sn)->af = af;
+ (*sn)->rule.ptr = rule;
+ pf_addrcpy(&(*sn)->addr, src, af);
+ if (raddr)
+ pf_addrcpy(&(*sn)->raddr, raddr, af);
+ if (RB_INSERT(pf_src_tree,
+ &tree_src_tracking, *sn) != NULL) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: src_tree insert failed: ");
+ pf_print_host(&(*sn)->addr, 0, af);
+ addlog("\n");
+ }
+ pool_put(&pf_src_tree_pl, *sn);
+ return (-1);
+ }
+ (*sn)->creation = getuptime();
+ (*sn)->rule.ptr->src_nodes++;
+ if (kif != NULL) {
+ (*sn)->kif = kif;
+ pfi_kif_ref(kif, PFI_KIF_REF_SRCNODE);
+ }
+ pf_status.scounters[SCNT_SRC_NODE_INSERT]++;
+ pf_status.src_nodes++;
+ } else {
+ if (rule->max_src_states &&
+ (*sn)->states >= rule->max_src_states) {
+ pf_status.lcounters[LCNT_SRCSTATES]++;
+ return (-1);
+ }
+ }
+ return (0);
+}
+
+void
+pf_remove_src_node(struct pf_src_node *sn)
+{
+ if (sn->states > 0 || sn->expire > getuptime())
+ return;
+
+ sn->rule.ptr->src_nodes--;
+ if (sn->rule.ptr->states_cur == 0 &&
+ sn->rule.ptr->src_nodes == 0)
+ pf_rm_rule(NULL, sn->rule.ptr);
+ RB_REMOVE(pf_src_tree, &tree_src_tracking, sn);
+ pf_status.scounters[SCNT_SRC_NODE_REMOVALS]++;
+ pf_status.src_nodes--;
+ pfi_kif_unref(sn->kif, PFI_KIF_REF_SRCNODE);
+ pool_put(&pf_src_tree_pl, sn);
+}
+
+struct pf_src_node *
+pf_get_src_node(struct pf_state *st, enum pf_sn_types type)
+{
+ struct pf_sn_item *sni;
+
+ SLIST_FOREACH(sni, &st->src_nodes, next)
+ if (sni->sn->type == type)
+ return (sni->sn);
+ return (NULL);
+}
+
+void
+pf_state_rm_src_node(struct pf_state *st, struct pf_src_node *sn)
+{
+ struct pf_sn_item *sni, *snin, *snip = NULL;
+
+ for (sni = SLIST_FIRST(&st->src_nodes); sni; sni = snin) {
+ snin = SLIST_NEXT(sni, next);
+ if (sni->sn == sn) {
+ if (snip)
+ SLIST_REMOVE_AFTER(snip, next);
+ else
+ SLIST_REMOVE_HEAD(&st->src_nodes, next);
+ pool_put(&pf_sn_item_pl, sni);
+ sni = NULL;
+ sn->states--;
+ }
+ if (sni != NULL)
+ snip = sni;
+ }
+}
+
+/* state table stuff */
+
+static inline int
+pf_state_compare_key(const struct pf_state_key *a,
+ const struct pf_state_key *b)
+{
+ int diff;
+
+ if ((diff = a->hash - b->hash) != 0)
+ return (diff);
+ if ((diff = a->proto - b->proto) != 0)
+ return (diff);
+ if ((diff = a->af - b->af) != 0)
+ return (diff);
+ if ((diff = pf_addr_compare(&a->addr[0], &b->addr[0], a->af)) != 0)
+ return (diff);
+ if ((diff = pf_addr_compare(&a->addr[1], &b->addr[1], a->af)) != 0)
+ return (diff);
+ if ((diff = a->port[0] - b->port[0]) != 0)
+ return (diff);
+ if ((diff = a->port[1] - b->port[1]) != 0)
+ return (diff);
+ if ((diff = a->rdomain - b->rdomain) != 0)
+ return (diff);
+ return (0);
+}
+
+static inline int
+pf_state_compare_id(const struct pf_state *a, const struct pf_state *b)
+{
+ if (a->id > b->id)
+ return (1);
+ if (a->id < b->id)
+ return (-1);
+ if (a->creatorid > b->creatorid)
+ return (1);
+ if (a->creatorid < b->creatorid)
+ return (-1);
+
+ return (0);
+}
+
+/*
+ * on failure, pf_state_key_attach() releases the pf_state_key
+ * reference and returns NULL.
+ */
+struct pf_state_key *
+pf_state_key_attach(struct pf_state_key *sk, struct pf_state *st, int idx)
+{
+ struct pf_state_item *si;
+ struct pf_state_key *cur;
+ struct pf_state *oldst = NULL;
+
+ PF_ASSERT_LOCKED();
+
+ KASSERT(st->key[idx] == NULL);
+ sk->sk_removed = 0;
+ cur = RBT_INSERT(pf_state_tree, &pf_statetbl, sk);
+ if (cur != NULL) {
+ sk->sk_removed = 1;
+ /* key exists. check for same kif, if none, add to key */
+ TAILQ_FOREACH(si, &cur->sk_states, si_entry) {
+ struct pf_state *sist = si->si_st;
+ if (sist->kif == st->kif &&
+ ((sist->key[PF_SK_WIRE]->af == sk->af &&
+ sist->direction == st->direction) ||
+ (sist->key[PF_SK_WIRE]->af !=
+ sist->key[PF_SK_STACK]->af &&
+ sk->af == sist->key[PF_SK_STACK]->af &&
+ sist->direction != st->direction))) {
+ int reuse = 0;
+
+ if (sk->proto == IPPROTO_TCP &&
+ sist->src.state >= TCPS_FIN_WAIT_2 &&
+ sist->dst.state >= TCPS_FIN_WAIT_2)
+ reuse = 1;
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: %s key attach %s on %s: ",
+ (idx == PF_SK_WIRE) ?
+ "wire" : "stack",
+ reuse ? "reuse" : "failed",
+ st->kif->pfik_name);
+ pf_print_state_parts(st,
+ (idx == PF_SK_WIRE) ? sk : NULL,
+ (idx == PF_SK_STACK) ? sk : NULL);
+ addlog(", existing: ");
+ pf_print_state_parts(sist,
+ (idx == PF_SK_WIRE) ? sk : NULL,
+ (idx == PF_SK_STACK) ? sk : NULL);
+ addlog("\n");
+ }
+ if (reuse) {
+ pf_set_protostate(sist, PF_PEER_BOTH,
+ TCPS_CLOSED);
+ /* remove late or sks can go away */
+ oldst = sist;
+ } else {
+ pf_state_key_unref(sk);
+ return (NULL); /* collision! */
+ }
+ }
+ }
+
+ /* reuse the existing state key */
+ pf_state_key_unref(sk);
+ sk = cur;
+ }
+
+ if ((si = pool_get(&pf_state_item_pl, PR_NOWAIT)) == NULL) {
+ if (TAILQ_EMPTY(&sk->sk_states)) {
+ KASSERT(cur == NULL);
+ RBT_REMOVE(pf_state_tree, &pf_statetbl, sk);
+ sk->sk_removed = 1;
+ pf_state_key_unref(sk);
+ }
+
+ return (NULL);
+ }
+
+ st->key[idx] = pf_state_key_ref(sk); /* give a ref to state */
+ si->si_st = pf_state_ref(st);
+
+ /* list is sorted, if-bound states before floating */
+ if (st->kif == pfi_all)
+ TAILQ_INSERT_TAIL(&sk->sk_states, si, si_entry);
+ else
+ TAILQ_INSERT_HEAD(&sk->sk_states, si, si_entry);
+
+ if (oldst)
+ pf_remove_state(oldst);
+
+ /* caller owns the pf_state ref, which owns a pf_state_key ref now */
+ return (sk);
+}
+
+void
+pf_detach_state(struct pf_state *st)
+{
+ KASSERT(st->key[PF_SK_WIRE] != NULL);
+ pf_state_key_detach(st, PF_SK_WIRE);
+
+ KASSERT(st->key[PF_SK_STACK] != NULL);
+ if (st->key[PF_SK_STACK] != st->key[PF_SK_WIRE])
+ pf_state_key_detach(st, PF_SK_STACK);
+}
+
+void
+pf_state_key_detach(struct pf_state *st, int idx)
+{
+ struct pf_state_item *si;
+ struct pf_state_key *sk;
+
+ PF_ASSERT_LOCKED();
+
+ sk = st->key[idx];
+ if (sk == NULL)
+ return;
+
+ TAILQ_FOREACH(si, &sk->sk_states, si_entry) {
+ if (si->si_st == st)
+ break;
+ }
+ if (si == NULL)
+ return;
+
+ TAILQ_REMOVE(&sk->sk_states, si, si_entry);
+ pool_put(&pf_state_item_pl, si);
+
+ if (TAILQ_EMPTY(&sk->sk_states)) {
+ RBT_REMOVE(pf_state_tree, &pf_statetbl, sk);
+ sk->sk_removed = 1;
+ pf_state_key_unlink_reverse(sk);
+ pf_state_key_unlink_inpcb(sk);
+ pf_state_key_unref(sk);
+ }
+
+ pf_state_unref(st);
+}
+
+struct pf_state_key *
+pf_alloc_state_key(int pool_flags)
+{
+ struct pf_state_key *sk;
+
+ if ((sk = pool_get(&pf_state_key_pl, pool_flags)) == NULL)
+ return (NULL);
+
+ PF_REF_INIT(sk->sk_refcnt);
+ TAILQ_INIT(&sk->sk_states);
+ sk->sk_removed = 1;
+
+ return (sk);
+}
+
+static __inline int
+pf_state_key_addr_setup(struct pf_pdesc *pd, void *arg, int sidx,
+ struct pf_addr *saddr, int didx, struct pf_addr *daddr, int af, int multi)
+{
+ struct pf_state_key_cmp *key = arg;
+#ifdef INET6
+ struct pf_addr *target;
+
+ if (af == AF_INET || pd->proto != IPPROTO_ICMPV6)
+ goto copy;
+
+ switch (pd->hdr.icmp6.icmp6_type) {
+ case ND_NEIGHBOR_SOLICIT:
+ if (multi)
+ return (-1);
+ target = (struct pf_addr *)&pd->hdr.nd_ns.nd_ns_target;
+ daddr = target;
+ break;
+ case ND_NEIGHBOR_ADVERT:
+ if (multi)
+ return (-1);
+ target = (struct pf_addr *)&pd->hdr.nd_ns.nd_ns_target;
+ saddr = target;
+ if (IN6_IS_ADDR_MULTICAST(&pd->dst->v6)) {
+ key->addr[didx].addr32[0] = 0;
+ key->addr[didx].addr32[1] = 0;
+ key->addr[didx].addr32[2] = 0;
+ key->addr[didx].addr32[3] = 0;
+ daddr = NULL; /* overwritten */
+ }
+ break;
+ default:
+ if (multi) {
+ key->addr[sidx].addr32[0] = __IPV6_ADDR_INT32_MLL;
+ key->addr[sidx].addr32[1] = 0;
+ key->addr[sidx].addr32[2] = 0;
+ key->addr[sidx].addr32[3] = __IPV6_ADDR_INT32_ONE;
+ saddr = NULL; /* overwritten */
+ }
+ }
+ copy:
+#endif /* INET6 */
+ if (saddr)
+ pf_addrcpy(&key->addr[sidx], saddr, af);
+ if (daddr)
+ pf_addrcpy(&key->addr[didx], daddr, af);
+
+ return (0);
+}
+
+int
+pf_state_key_setup(struct pf_pdesc *pd, struct pf_state_key **skw,
+ struct pf_state_key **sks, int rtableid)
+{
+ /* if returning error we MUST pool_put state keys ourselves */
+ struct pf_state_key *sk1, *sk2;
+ u_int wrdom = pd->rdomain;
+ int afto = pd->af != pd->naf;
+
+ if ((sk1 = pf_alloc_state_key(PR_NOWAIT | PR_ZERO)) == NULL)
+ return (ENOMEM);
+
+ pf_state_key_addr_setup(pd, sk1, pd->sidx, pd->src, pd->didx, pd->dst,
+ pd->af, 0);
+ sk1->port[pd->sidx] = pd->osport;
+ sk1->port[pd->didx] = pd->odport;
+ sk1->proto = pd->proto;
+ sk1->af = pd->af;
+ sk1->rdomain = pd->rdomain;
+ sk1->hash = pf_pkt_hash(sk1->af, sk1->proto,
+ &sk1->addr[0], &sk1->addr[1], sk1->port[0], sk1->port[1]);
+ if (rtableid >= 0)
+ wrdom = rtable_l2(rtableid);
+
+ if (PF_ANEQ(&pd->nsaddr, pd->src, pd->af) ||
+ PF_ANEQ(&pd->ndaddr, pd->dst, pd->af) ||
+ pd->nsport != pd->osport || pd->ndport != pd->odport ||
+ wrdom != pd->rdomain || afto) { /* NAT/NAT64 */
+ if ((sk2 = pf_alloc_state_key(PR_NOWAIT | PR_ZERO)) == NULL) {
+ pf_state_key_unref(sk1);
+ return (ENOMEM);
+ }
+ pf_state_key_addr_setup(pd, sk2, afto ? pd->didx : pd->sidx,
+ &pd->nsaddr, afto ? pd->sidx : pd->didx, &pd->ndaddr,
+ pd->naf, 0);
+ sk2->port[afto ? pd->didx : pd->sidx] = pd->nsport;
+ sk2->port[afto ? pd->sidx : pd->didx] = pd->ndport;
+ if (afto) {
+ switch (pd->proto) {
+ case IPPROTO_ICMP:
+ sk2->proto = IPPROTO_ICMPV6;
+ break;
+ case IPPROTO_ICMPV6:
+ sk2->proto = IPPROTO_ICMP;
+ break;
+ default:
+ sk2->proto = pd->proto;
+ }
+ } else
+ sk2->proto = pd->proto;
+ sk2->af = pd->naf;
+ sk2->rdomain = wrdom;
+ sk2->hash = pf_pkt_hash(sk2->af, sk2->proto,
+ &sk2->addr[0], &sk2->addr[1], sk2->port[0], sk2->port[1]);
+ } else
+ sk2 = pf_state_key_ref(sk1);
+
+ if (pd->dir == PF_IN) {
+ *skw = sk1;
+ *sks = sk2;
+ } else {
+ *sks = sk1;
+ *skw = sk2;
+ }
+
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: key setup: ");
+ pf_print_state_parts(NULL, *skw, *sks);
+ addlog("\n");
+ }
+
+ return (0);
+}
+
+/*
+ * pf_state_insert() does the following:
+ * - links the pf_state up with pf_state_key(s).
+ * - inserts the pf_state_keys into pf_state_tree.
+ * - inserts the pf_state into the into pf_state_tree_id.
+ * - tells pfsync about the state.
+ *
+ * pf_state_insert() owns the references to the pf_state_key structs
+ * it is given. on failure to insert, these references are released.
+ * on success, the caller owns a pf_state reference that allows it
+ * to access the state keys.
+ */
+
+int
+pf_state_insert(struct pfi_kif *kif, struct pf_state_key **skwp,
+ struct pf_state_key **sksp, struct pf_state *st)
+{
+ struct pf_state_key *skw = *skwp;
+ struct pf_state_key *sks = *sksp;
+ int same = (skw == sks);
+
+ PF_ASSERT_LOCKED();
+
+ st->kif = kif;
+ PF_STATE_ENTER_WRITE();
+
+ skw = pf_state_key_attach(skw, st, PF_SK_WIRE);
+ if (skw == NULL) {
+ pf_state_key_unref(sks);
+ PF_STATE_EXIT_WRITE();
+ return (-1);
+ }
+
+ if (same) {
+ /* pf_state_key_attach might have swapped skw */
+ if (skw != sks) {
+ pf_state_key_unref(sks);
+ sks = pf_state_key_ref(skw);
+ }
+ st->key[PF_SK_STACK] = sks;
+ } else if (pf_state_key_attach(sks, st, PF_SK_STACK) == NULL) {
+ pf_state_key_detach(st, PF_SK_WIRE);
+ PF_STATE_EXIT_WRITE();
+ return (-1);
+ }
+
+ if (st->id == 0 && st->creatorid == 0) {
+ st->id = htobe64(pf_status.stateid++);
+ st->creatorid = pf_status.hostid;
+ }
+ if (RBT_INSERT(pf_state_tree_id, &tree_id, st) != NULL) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: state insert failed: "
+ "id: %016llx creatorid: %08x",
+ betoh64(st->id), ntohl(st->creatorid));
+ addlog("\n");
+ }
+ pf_detach_state(st);
+ PF_STATE_EXIT_WRITE();
+ return (-1);
+ }
+ pf_state_list_insert(&pf_state_list, st);
+ counters_inc(pf_status_fcounters, FCNT_STATE_INSERT);
+ pf_status.states++;
+ pfi_kif_ref(kif, PFI_KIF_REF_STATE);
+ PF_STATE_EXIT_WRITE();
+
+#if NPFSYNC > 0
+ pfsync_insert_state(st);
+#endif /* NPFSYNC > 0 */
+
+ *skwp = skw;
+ *sksp = sks;
+
+ return (0);
+}
+
+struct pf_state *
+pf_find_state_byid(struct pf_state_cmp *key)
+{
+ counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH);
+
+ return (RBT_FIND(pf_state_tree_id, &tree_id, (struct pf_state *)key));
+}
+
+int
+pf_compare_state_keys(struct pf_state_key *a, struct pf_state_key *b,
+ struct pfi_kif *kif, u_int dir)
+{
+ /* a (from hdr) and b (new) must be exact opposites of each other */
+ if (a->af == b->af && a->proto == b->proto &&
+ PF_AEQ(&a->addr[0], &b->addr[1], a->af) &&
+ PF_AEQ(&a->addr[1], &b->addr[0], a->af) &&
+ a->port[0] == b->port[1] &&
+ a->port[1] == b->port[0] && a->rdomain == b->rdomain)
+ return (0);
+ else {
+ /* mismatch. must not happen. */
+ if (pf_status.debug >= LOG_ERR) {
+ log(LOG_ERR,
+ "pf: state key linking mismatch! dir=%s, "
+ "if=%s, stored af=%u, a0: ",
+ dir == PF_OUT ? "OUT" : "IN",
+ kif->pfik_name, a->af);
+ pf_print_host(&a->addr[0], a->port[0], a->af);
+ addlog(", a1: ");
+ pf_print_host(&a->addr[1], a->port[1], a->af);
+ addlog(", proto=%u", a->proto);
+ addlog(", found af=%u, a0: ", b->af);
+ pf_print_host(&b->addr[0], b->port[0], b->af);
+ addlog(", a1: ");
+ pf_print_host(&b->addr[1], b->port[1], b->af);
+ addlog(", proto=%u", b->proto);
+ addlog("\n");
+ }
+ return (-1);
+ }
+}
+
+int
+pf_find_state(struct pf_pdesc *pd, struct pf_state_key_cmp *key,
+ struct pf_state **stp)
+{
+ struct pf_state_key *sk, *pkt_sk;
+ struct pf_state_item *si;
+ struct pf_state *st = NULL;
+ int didx;
+
+ counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH);
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: key search, %s on %s: ",
+ pd->dir == PF_OUT ? "out" : "in", pd->kif->pfik_name);
+ pf_print_state_parts(NULL, (struct pf_state_key *)key, NULL);
+ addlog("\n");
+ }
+
+ pkt_sk = NULL;
+ sk = NULL;
+ if (pd->dir == PF_OUT) {
+ /* first if block deals with outbound forwarded packet */
+ pkt_sk = pd->m->m_pkthdr.pf.statekey;
+
+ if (!pf_state_key_isvalid(pkt_sk)) {
+ pf_mbuf_unlink_state_key(pd->m);
+ pkt_sk = NULL;
+ }
+
+ if (pkt_sk && pf_state_key_isvalid(pkt_sk->sk_reverse))
+ sk = pkt_sk->sk_reverse;
+
+ if (pkt_sk == NULL) {
+ struct inpcb *inp = pd->m->m_pkthdr.pf.inp;
+
+ /* here we deal with local outbound packet */
+ if (inp != NULL) {
+ struct pf_state_key *inp_sk;
+
+ mtx_enter(&pf_inp_mtx);
+ inp_sk = inp->inp_pf_sk;
+ if (pf_state_key_isvalid(inp_sk)) {
+ sk = inp_sk;
+ mtx_leave(&pf_inp_mtx);
+ } else if (inp_sk != NULL) {
+ KASSERT(inp_sk->sk_inp == inp);
+ inp_sk->sk_inp = NULL;
+ inp->inp_pf_sk = NULL;
+ mtx_leave(&pf_inp_mtx);
+
+ pf_state_key_unref(inp_sk);
+ in_pcbunref(inp);
+ } else
+ mtx_leave(&pf_inp_mtx);
+ }
+ }
+ }
+
+ if (sk == NULL) {
+ if ((sk = RBT_FIND(pf_state_tree, &pf_statetbl,
+ (struct pf_state_key *)key)) == NULL)
+ return (PF_DROP);
+ if (pd->dir == PF_OUT && pkt_sk &&
+ pf_compare_state_keys(pkt_sk, sk, pd->kif, pd->dir) == 0)
+ pf_state_key_link_reverse(sk, pkt_sk);
+ else if (pd->dir == PF_OUT)
+ pf_state_key_link_inpcb(sk, pd->m->m_pkthdr.pf.inp);
+ }
+
+ /* remove firewall data from outbound packet */
+ if (pd->dir == PF_OUT)
+ pf_pkt_addr_changed(pd->m);
+
+ didx = (pd->dir == PF_IN) ? PF_SK_WIRE : PF_SK_STACK;
+
+ /* list is sorted, if-bound states before floating ones */
+ TAILQ_FOREACH(si, &sk->sk_states, si_entry) {
+ struct pf_state *sist = si->si_st;
+ if (sist->timeout == PFTM_PURGE)
+ continue;
+ if (sist->kif != pfi_all && sist->kif != pd->kif)
+ continue;
+
+ /* af-to needs to handled specially */
+ if (sist->key[PF_SK_WIRE]->af == sist->key[PF_SK_STACK]->af) {
+ if (sk != sist->key[didx])
+ continue;
+
+ /* af-to case */
+ } else {
+ /*
+ * af-to creates state for incoming (PF_IN)
+ * connections, and then forces forwarding without
+ * creating an outgoing state. this means the one
+ * state covers both sides of the stack, so should
+ * only match when pd dir is PF_IN.
+ */
+ if (pd->dir != PF_IN)
+ continue;
+
+ /* one of the st keys has to be sk */
+ }
+
+ st = sist;
+ break;
+ }
+
+ if (st == NULL)
+ return (PF_DROP);
+ if (ISSET(st->state_flags, PFSTATE_INP_UNLINKED))
+ return (PF_DROP);
+
+ if (st->rule.ptr->pktrate.limit && pd->dir == st->direction) {
+ pf_add_threshold(&st->rule.ptr->pktrate);
+ if (pf_check_threshold(&st->rule.ptr->pktrate))
+ return (PF_DROP);
+ }
+
+ *stp = st;
+
+ return (PF_MATCH);
+}
+
+struct pf_state *
+pf_find_state_all(struct pf_state_key_cmp *key, u_int dir, int *more)
+{
+ struct pf_state_key *sk;
+ struct pf_state_item *si, *ret = NULL;
+
+ counters_inc(pf_status_fcounters, FCNT_STATE_SEARCH);
+
+ sk = RBT_FIND(pf_state_tree, &pf_statetbl, (struct pf_state_key *)key);
+
+ if (sk != NULL) {
+ TAILQ_FOREACH(si, &sk->sk_states, si_entry) {
+ struct pf_state *sist = si->si_st;
+ if (dir == PF_INOUT ||
+ (sk == (dir == PF_IN ? sist->key[PF_SK_WIRE] :
+ sist->key[PF_SK_STACK]))) {
+ if (more == NULL)
+ return (sist);
+
+ if (ret)
+ (*more)++;
+ else
+ ret = si;
+ }
+ }
+ }
+ return (ret ? ret->si_st : NULL);
+}
+
+void
+pf_state_peer_hton(const struct pf_state_peer *s, struct pfsync_state_peer *d)
+{
+ d->seqlo = htonl(s->seqlo);
+ d->seqhi = htonl(s->seqhi);
+ d->seqdiff = htonl(s->seqdiff);
+ d->max_win = htons(s->max_win);
+ d->mss = htons(s->mss);
+ d->state = s->state;
+ d->wscale = s->wscale;
+ if (s->scrub) {
+ d->scrub.pfss_flags =
+ htons(s->scrub->pfss_flags & PFSS_TIMESTAMP);
+ d->scrub.pfss_ttl = (s)->scrub->pfss_ttl;
+ d->scrub.pfss_ts_mod = htonl((s)->scrub->pfss_ts_mod);
+ d->scrub.scrub_flag = PFSYNC_SCRUB_FLAG_VALID;
+ }
+}
+
+void
+pf_state_peer_ntoh(const struct pfsync_state_peer *s, struct pf_state_peer *d)
+{
+ d->seqlo = ntohl(s->seqlo);
+ d->seqhi = ntohl(s->seqhi);
+ d->seqdiff = ntohl(s->seqdiff);
+ d->max_win = ntohs(s->max_win);
+ d->mss = ntohs(s->mss);
+ d->state = s->state;
+ d->wscale = s->wscale;
+ if (s->scrub.scrub_flag == PFSYNC_SCRUB_FLAG_VALID &&
+ d->scrub != NULL) {
+ d->scrub->pfss_flags =
+ ntohs(s->scrub.pfss_flags) & PFSS_TIMESTAMP;
+ d->scrub->pfss_ttl = s->scrub.pfss_ttl;
+ d->scrub->pfss_ts_mod = ntohl(s->scrub.pfss_ts_mod);
+ }
+}
+
+void
+pf_state_export(struct pfsync_state *sp, struct pf_state *st)
+{
+ int32_t expire;
+
+ memset(sp, 0, sizeof(struct pfsync_state));
+
+ /* copy from state key */
+ sp->key[PF_SK_WIRE].addr[0] = st->key[PF_SK_WIRE]->addr[0];
+ sp->key[PF_SK_WIRE].addr[1] = st->key[PF_SK_WIRE]->addr[1];
+ sp->key[PF_SK_WIRE].port[0] = st->key[PF_SK_WIRE]->port[0];
+ sp->key[PF_SK_WIRE].port[1] = st->key[PF_SK_WIRE]->port[1];
+ sp->key[PF_SK_WIRE].rdomain = htons(st->key[PF_SK_WIRE]->rdomain);
+ sp->key[PF_SK_WIRE].af = st->key[PF_SK_WIRE]->af;
+ sp->key[PF_SK_STACK].addr[0] = st->key[PF_SK_STACK]->addr[0];
+ sp->key[PF_SK_STACK].addr[1] = st->key[PF_SK_STACK]->addr[1];
+ sp->key[PF_SK_STACK].port[0] = st->key[PF_SK_STACK]->port[0];
+ sp->key[PF_SK_STACK].port[1] = st->key[PF_SK_STACK]->port[1];
+ sp->key[PF_SK_STACK].rdomain = htons(st->key[PF_SK_STACK]->rdomain);
+ sp->key[PF_SK_STACK].af = st->key[PF_SK_STACK]->af;
+ sp->rtableid[PF_SK_WIRE] = htonl(st->rtableid[PF_SK_WIRE]);
+ sp->rtableid[PF_SK_STACK] = htonl(st->rtableid[PF_SK_STACK]);
+ sp->proto = st->key[PF_SK_WIRE]->proto;
+ sp->af = st->key[PF_SK_WIRE]->af;
+
+ /* copy from state */
+ strlcpy(sp->ifname, st->kif->pfik_name, sizeof(sp->ifname));
+ sp->rt = st->rt;
+ sp->rt_addr = st->rt_addr;
+ sp->creation = htonl(getuptime() - st->creation);
+ expire = pf_state_expires(st, st->timeout);
+ if (expire <= getuptime())
+ sp->expire = htonl(0);
+ else
+ sp->expire = htonl(expire - getuptime());
+
+ sp->direction = st->direction;
+#if NPFLOG > 0
+ sp->log = st->log;
+#endif /* NPFLOG > 0 */
+ sp->timeout = st->timeout;
+ sp->state_flags = htons(st->state_flags);
+ if (READ_ONCE(st->sync_defer) != NULL)
+ sp->state_flags |= htons(PFSTATE_ACK);
+ if (!SLIST_EMPTY(&st->src_nodes))
+ sp->sync_flags |= PFSYNC_FLAG_SRCNODE;
+
+ sp->id = st->id;
+ sp->creatorid = st->creatorid;
+ pf_state_peer_hton(&st->src, &sp->src);
+ pf_state_peer_hton(&st->dst, &sp->dst);
+
+ if (st->rule.ptr == NULL)
+ sp->rule = htonl(-1);
+ else
+ sp->rule = htonl(st->rule.ptr->nr);
+ if (st->anchor.ptr == NULL)
+ sp->anchor = htonl(-1);
+ else
+ sp->anchor = htonl(st->anchor.ptr->nr);
+ sp->nat_rule = htonl(-1); /* left for compat, nat_rule is gone */
+
+ pf_state_counter_hton(st->packets[0], sp->packets[0]);
+ pf_state_counter_hton(st->packets[1], sp->packets[1]);
+ pf_state_counter_hton(st->bytes[0], sp->bytes[0]);
+ pf_state_counter_hton(st->bytes[1], sp->bytes[1]);
+
+ sp->max_mss = htons(st->max_mss);
+ sp->min_ttl = st->min_ttl;
+ sp->set_tos = st->set_tos;
+ sp->set_prio[0] = st->set_prio[0];
+ sp->set_prio[1] = st->set_prio[1];
+}
+
+int
+pf_state_alloc_scrub_memory(const struct pfsync_state_peer *s,
+ struct pf_state_peer *d)
+{
+ if (s->scrub.scrub_flag && d->scrub == NULL)
+ return (pf_normalize_tcp_alloc(d));
+
+ return (0);
+}
+
+#if NPFSYNC > 0
+int
+pf_state_import(const struct pfsync_state *sp, int flags)
+{
+ struct pf_state *st = NULL;
+ struct pf_state_key *skw = NULL, *sks = NULL;
+ struct pf_rule *r = NULL;
+ struct pfi_kif *kif;
+ int pool_flags;
+ int error = ENOMEM;
+ int n = 0;
+
+ PF_ASSERT_LOCKED();
+
+ if (sp->creatorid == 0) {
+ DPFPRINTF(LOG_NOTICE, "%s: invalid creator id: %08x", __func__,
+ ntohl(sp->creatorid));
+ return (EINVAL);
+ }
+
+ if ((kif = pfi_kif_get(sp->ifname, NULL)) == NULL) {
+ DPFPRINTF(LOG_NOTICE, "%s: unknown interface: %s", __func__,
+ sp->ifname);
+ if (flags & PFSYNC_SI_IOCTL)
+ return (EINVAL);
+ return (0); /* skip this state */
+ }
+
+ if (sp->af == 0)
+ return (0); /* skip this state */
+
+ /*
+ * If the ruleset checksums match or the state is coming from the ioctl,
+ * it's safe to associate the state with the rule of that number.
+ */
+ if (sp->rule != htonl(-1) && sp->anchor == htonl(-1) &&
+ (flags & (PFSYNC_SI_IOCTL | PFSYNC_SI_CKSUM)) &&
+ ntohl(sp->rule) < pf_main_ruleset.rules.active.rcount) {
+ TAILQ_FOREACH(r, pf_main_ruleset.rules.active.ptr, entries)
+ if (ntohl(sp->rule) == n++)
+ break;
+ } else
+ r = &pf_default_rule;
+
+ if ((r->max_states && r->states_cur >= r->max_states))
+ goto cleanup;
+
+ if (flags & PFSYNC_SI_IOCTL)
+ pool_flags = PR_WAITOK | PR_LIMITFAIL | PR_ZERO;
+ else
+ pool_flags = PR_NOWAIT | PR_LIMITFAIL | PR_ZERO;
+
+ if ((st = pool_get(&pf_state_pl, pool_flags)) == NULL)
+ goto cleanup;
+
+ if ((skw = pf_alloc_state_key(pool_flags)) == NULL)
+ goto cleanup;
+
+ if ((sp->key[PF_SK_WIRE].af &&
+ (sp->key[PF_SK_WIRE].af != sp->key[PF_SK_STACK].af)) ||
+ PF_ANEQ(&sp->key[PF_SK_WIRE].addr[0],
+ &sp->key[PF_SK_STACK].addr[0], sp->af) ||
+ PF_ANEQ(&sp->key[PF_SK_WIRE].addr[1],
+ &sp->key[PF_SK_STACK].addr[1], sp->af) ||
+ sp->key[PF_SK_WIRE].port[0] != sp->key[PF_SK_STACK].port[0] ||
+ sp->key[PF_SK_WIRE].port[1] != sp->key[PF_SK_STACK].port[1] ||
+ sp->key[PF_SK_WIRE].rdomain != sp->key[PF_SK_STACK].rdomain) {
+ if ((sks = pf_alloc_state_key(pool_flags)) == NULL)
+ goto cleanup;
+ } else
+ sks = pf_state_key_ref(skw);
+
+ /* allocate memory for scrub info */
+ if (pf_state_alloc_scrub_memory(&sp->src, &st->src) ||
+ pf_state_alloc_scrub_memory(&sp->dst, &st->dst))
+ goto cleanup;
+
+ /* copy to state key(s) */
+ skw->addr[0] = sp->key[PF_SK_WIRE].addr[0];
+ skw->addr[1] = sp->key[PF_SK_WIRE].addr[1];
+ skw->port[0] = sp->key[PF_SK_WIRE].port[0];
+ skw->port[1] = sp->key[PF_SK_WIRE].port[1];
+ skw->rdomain = ntohs(sp->key[PF_SK_WIRE].rdomain);
+ skw->proto = sp->proto;
+ if (!(skw->af = sp->key[PF_SK_WIRE].af))
+ skw->af = sp->af;
+ skw->hash = pf_pkt_hash(skw->af, skw->proto,
+ &skw->addr[0], &skw->addr[1], skw->port[0], skw->port[1]);
+
+ if (sks != skw) {
+ sks->addr[0] = sp->key[PF_SK_STACK].addr[0];
+ sks->addr[1] = sp->key[PF_SK_STACK].addr[1];
+ sks->port[0] = sp->key[PF_SK_STACK].port[0];
+ sks->port[1] = sp->key[PF_SK_STACK].port[1];
+ sks->rdomain = ntohs(sp->key[PF_SK_STACK].rdomain);
+ if (!(sks->af = sp->key[PF_SK_STACK].af))
+ sks->af = sp->af;
+ if (sks->af != skw->af) {
+ switch (sp->proto) {
+ case IPPROTO_ICMP:
+ sks->proto = IPPROTO_ICMPV6;
+ break;
+ case IPPROTO_ICMPV6:
+ sks->proto = IPPROTO_ICMP;
+ break;
+ default:
+ sks->proto = sp->proto;
+ }
+ } else
+ sks->proto = sp->proto;
+
+ if (((sks->af != AF_INET) && (sks->af != AF_INET6)) ||
+ ((skw->af != AF_INET) && (skw->af != AF_INET6))) {
+ error = EINVAL;
+ goto cleanup;
+ }
+
+ sks->hash = pf_pkt_hash(sks->af, sks->proto,
+ &sks->addr[0], &sks->addr[1], sks->port[0], sks->port[1]);
+
+ } else if ((sks->af != AF_INET) && (sks->af != AF_INET6)) {
+ error = EINVAL;
+ goto cleanup;
+ }
+ st->rtableid[PF_SK_WIRE] = ntohl(sp->rtableid[PF_SK_WIRE]);
+ st->rtableid[PF_SK_STACK] = ntohl(sp->rtableid[PF_SK_STACK]);
+
+ /* copy to state */
+ st->rt_addr = sp->rt_addr;
+ st->rt = sp->rt;
+ st->creation = getuptime() - ntohl(sp->creation);
+ st->expire = getuptime();
+ if (ntohl(sp->expire)) {
+ u_int32_t timeout;
+
+ timeout = r->timeout[sp->timeout];
+ if (!timeout)
+ timeout = pf_default_rule.timeout[sp->timeout];
+
+ /* sp->expire may have been adaptively scaled by export. */
+ st->expire -= timeout - ntohl(sp->expire);
+ }
+
+ st->direction = sp->direction;
+ st->log = sp->log;
+ st->timeout = sp->timeout;
+ st->state_flags = ntohs(sp->state_flags);
+ st->max_mss = ntohs(sp->max_mss);
+ st->min_ttl = sp->min_ttl;
+ st->set_tos = sp->set_tos;
+ st->set_prio[0] = sp->set_prio[0];
+ st->set_prio[1] = sp->set_prio[1];
+
+ st->id = sp->id;
+ st->creatorid = sp->creatorid;
+ pf_state_peer_ntoh(&sp->src, &st->src);
+ pf_state_peer_ntoh(&sp->dst, &st->dst);
+
+ st->rule.ptr = r;
+ st->anchor.ptr = NULL;
+
+ PF_REF_INIT(st->refcnt);
+ mtx_init(&st->mtx, IPL_NET);
+
+ /* XXX when we have anchors, use STATE_INC_COUNTERS */
+ r->states_cur++;
+ r->states_tot++;
+
+ st->sync_state = PFSYNC_S_NONE;
+ st->pfsync_time = getuptime();
+#if NPFSYNC > 0
+ pfsync_init_state(st, skw, sks, flags);
+#endif
+
+ if (pf_state_insert(kif, &skw, &sks, st) != 0) {
+ /* XXX when we have anchors, use STATE_DEC_COUNTERS */
+ r->states_cur--;
+ error = EEXIST;
+ goto cleanup_state;
+ }
+
+ return (0);
+
+ cleanup:
+ if (skw != NULL)
+ pf_state_key_unref(skw);
+ if (sks != NULL)
+ pf_state_key_unref(sks);
+
+ cleanup_state: /* pf_state_insert frees the state keys */
+ if (st) {
+ if (st->dst.scrub)
+ pool_put(&pf_state_scrub_pl, st->dst.scrub);
+ if (st->src.scrub)
+ pool_put(&pf_state_scrub_pl, st->src.scrub);
+ pool_put(&pf_state_pl, st);
+ }
+ return (error);
+}
+#endif /* NPFSYNC > 0 */
+
+/* END state table stuff */
+
+void pf_purge_states(void *);
+struct task pf_purge_states_task =
+ TASK_INITIALIZER(pf_purge_states, NULL);
+
+void pf_purge_states_tick(void *);
+struct timeout pf_purge_states_to =
+ TIMEOUT_INITIALIZER(pf_purge_states_tick, NULL);
+
+unsigned int pf_purge_expired_states(unsigned int, unsigned int);
+
+/*
+ * how many states to scan this interval.
+ *
+ * this is set when the timeout fires, and reduced by the task. the
+ * task will reschedule itself until the limit is reduced to zero,
+ * and then it adds the timeout again.
+ */
+unsigned int pf_purge_states_limit;
+
+/*
+ * limit how many states are processed with locks held per run of
+ * the state purge task.
+ */
+unsigned int pf_purge_states_collect = 64;
+
+ void
+pf_purge_states_tick(void *null)
+ {
+ unsigned int limit = pf_status.states;
+ unsigned int interval = pf_default_rule.timeout[PFTM_INTERVAL];
+
+ if (limit == 0) {
+ timeout_add_sec(&pf_purge_states_to, 1);
+ return;
+ }
+
+ /*
+ * process a fraction of the state table every second
+ */
+
+ if (interval > 1)
+ limit /= interval;
+
+ pf_purge_states_limit = limit;
+ task_add(systqmp, &pf_purge_states_task);
+}
+
+void
+pf_purge_states(void *null)
+{
+ unsigned int limit;
+ unsigned int scanned;
+
+ limit = pf_purge_states_limit;
+ if (limit < pf_purge_states_collect)
+ limit = pf_purge_states_collect;
+
+ scanned = pf_purge_expired_states(limit, pf_purge_states_collect);
+ if (scanned >= pf_purge_states_limit) {
+ /* we've run out of states to scan this "interval" */
+ timeout_add_sec(&pf_purge_states_to, 1);
+ return;
+ }
+
+ pf_purge_states_limit -= scanned;
+ task_add(systqmp, &pf_purge_states_task);
+}
+
+void pf_purge_tick(void *);
+struct timeout pf_purge_to =
+ TIMEOUT_INITIALIZER(pf_purge_tick, NULL);
+
+void pf_purge(void *);
+struct task pf_purge_task =
+ TASK_INITIALIZER(pf_purge, NULL);
+
+void
+pf_purge_tick(void *null)
+{
+ task_add(systqmp, &pf_purge_task);
+}
+
+void
+pf_purge(void *null)
+{
+ unsigned int interval = max(1, pf_default_rule.timeout[PFTM_INTERVAL]);
+
+ PF_LOCK();
+
+ pf_purge_expired_src_nodes();
+ pf_source_purge();
+
+ PF_UNLOCK();
+
+ /*
+ * Fragments don't require PF_LOCK(), they use their own lock.
+ */
+ pf_purge_expired_fragments();
+
+ /* interpret the interval as idle time between runs */
+ timeout_add_sec(&pf_purge_to, interval);
+}
+
+int32_t
+pf_state_expires(const struct pf_state *st, uint8_t stimeout)
+{
+ u_int32_t timeout;
+ u_int32_t start;
+ u_int32_t end;
+ u_int32_t states;
+
+ /*
+ * pf_state_expires is used by the state purge task to
+ * decide if a state is a candidate for cleanup, and by the
+ * pfsync state export code to populate an expiry time.
+ *
+ * this function may be called by the state purge task while
+ * the state is being modified. avoid inconsistent reads of
+ * state->timeout by having the caller do the read (and any
+ * checks it needs to do on the same variable) and then pass
+ * their view of the timeout in here for this function to use.
+ * the only consequence of using a stale timeout value is
+ * that the state won't be a candidate for purging until the
+ * next pass of the purge task.
+ */
+
+ /* handle all PFTM_* >= PFTM_MAX here */
+ if (stimeout >= PFTM_MAX)
+ return (0);
+
+ KASSERT(stimeout < PFTM_MAX);
+
+ timeout = st->rule.ptr->timeout[stimeout];
+ if (!timeout)
+ timeout = pf_default_rule.timeout[stimeout];
+
+ start = st->rule.ptr->timeout[PFTM_ADAPTIVE_START];
+ if (start) {
+ end = st->rule.ptr->timeout[PFTM_ADAPTIVE_END];
+ states = st->rule.ptr->states_cur;
+ } else {
+ start = pf_default_rule.timeout[PFTM_ADAPTIVE_START];
+ end = pf_default_rule.timeout[PFTM_ADAPTIVE_END];
+ states = pf_status.states;
+ }
+ if (end && states > start && start < end) {
+ if (states >= end)
+ return (0);
+
+ timeout = (u_int64_t)timeout * (end - states) / (end - start);
+ }
+
+ return (st->expire + timeout);
+}
+
+void
+pf_purge_expired_src_nodes(void)
+{
+ struct pf_src_node *cur, *next;
+
+ PF_ASSERT_LOCKED();
+
+ RB_FOREACH_SAFE(cur, pf_src_tree, &tree_src_tracking, next) {
+ if (cur->states == 0 && cur->expire <= getuptime()) {
+ pf_remove_src_node(cur);
+ }
+ }
+}
+
+void
+pf_src_tree_remove_state(struct pf_state *st)
+{
+ u_int32_t timeout;
+ struct pf_sn_item *sni;
+
+ while ((sni = SLIST_FIRST(&st->src_nodes)) != NULL) {
+ SLIST_REMOVE_HEAD(&st->src_nodes, next);
+ if (st->src.tcp_est)
+ atomic_dec_int(&sni->sn->conn);
+ if (--sni->sn->states == 0) {
+ timeout = st->rule.ptr->timeout[PFTM_SRC_NODE];
+ if (!timeout)
+ timeout =
+ pf_default_rule.timeout[PFTM_SRC_NODE];
+ sni->sn->expire = getuptime() + timeout;
+ }
+ pool_put(&pf_sn_item_pl, sni);
+ }
+}
+
+void
+pf_remove_state(struct pf_state *st)
+{
+ struct pf_state_link *pfl;
+
+ PF_ASSERT_LOCKED();
+
+ mtx_enter(&st->mtx);
+ if (st->timeout == PFTM_UNLINKED) {
+ mtx_leave(&st->mtx);
+ return;
+ }
+ st->timeout = PFTM_UNLINKED;
+ mtx_leave(&st->mtx);
+
+ /* handle load balancing related tasks */
+ pf_postprocess_addr(st);
+
+ if (st->src.state == PF_TCPS_PROXY_DST) {
+ pf_send_tcp(st->rule.ptr, st->key[PF_SK_WIRE]->af,
+ &st->key[PF_SK_WIRE]->addr[1],
+ &st->key[PF_SK_WIRE]->addr[0],
+ st->key[PF_SK_WIRE]->port[1],
+ st->key[PF_SK_WIRE]->port[0],
+ st->src.seqhi, st->src.seqlo + 1,
+ TH_RST|TH_ACK, 0, 0, 0, 1, st->tag,
+ st->key[PF_SK_WIRE]->rdomain, NULL);
+ }
+ if (st->key[PF_SK_STACK]->proto == IPPROTO_TCP)
+ pf_set_protostate(st, PF_PEER_BOTH, TCPS_CLOSED);
+
+ while ((pfl = SLIST_FIRST(&st->linkage)) != NULL) {
+ struct pf_state_link_list *list;
+ unsigned int gen;
+
+ SLIST_REMOVE_HEAD(&st->linkage, pfl_linkage);
+
+ switch (pfl->pfl_type) {
+ case PF_STATE_LINK_TYPE_STATELIM: {
+ struct pf_statelim *stlim;
+
+ stlim = pf_statelim_find(st->statelim);
+ KASSERTMSG(stlim != NULL,
+ "pf_state %p pfl %p cannot find statelim %u",
+ st, pfl, st->statelim);
+
+ gen = pf_statelim_enter(stlim);
+ stlim->pfstlim_inuse--;
+ pf_statelim_leave(stlim, gen);
+
+ list = &stlim->pfstlim_states;
+ break;
+ }
+ case PF_STATE_LINK_TYPE_SOURCELIM: {
+ struct pf_sourcelim *srlim;
+ struct pf_source key, *sr;
+ int sidx, kidx;
+
+ if (st->direction == PF_IN) {
+ sidx = 0;
+ kidx = PF_SK_WIRE;
+ } else {
+ sidx = 1;
+ kidx = PF_SK_STACK;
+ }
+ srlim = pf_sourcelim_find(st->sourcelim);
+ KASSERTMSG(srlim != NULL,
+ "pf_state %p pfl %p cannot find sourcelim %u",
+ st, pfl, st->sourcelim);
+
+ pf_source_key(srlim, &key,
+ st->key[kidx]->af,
+ st->key[kidx]->rdomain,
+ &st->key[kidx]->addr[sidx]);
+
+ sr = pf_source_find(srlim, &key);
+ KASSERTMSG(sr != NULL,
+ "pf_state %p pfl %p cannot find source in %u",
+ st, pfl, st->sourcelim);
+
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.inuse--;
+ pf_sourcelim_leave(srlim, gen);
+ pf_source_rele(sr);
+
+ list = &sr->pfsr_states;
+ break;
+ }
+ default:
+ panic("%s: unexpected link type on pfl %p",
+ __func__, pfl);
+ }
+
+ PF_STATE_ASSERT_LOCKED();
+ TAILQ_REMOVE(list, pfl, pfl_link);
+ pool_put(&pf_state_link_pl, pfl);
+ }
+
+ RBT_REMOVE(pf_state_tree_id, &tree_id, st);
+#if NPFLOW > 0
+ if (st->state_flags & PFSTATE_PFLOW)
+ export_pflow(st);
+#endif /* NPFLOW > 0 */
+#if NPFSYNC > 0
+ pfsync_delete_state(st);
+#endif /* NPFSYNC > 0 */
+ pf_src_tree_remove_state(st);
+ pf_detach_state(st);
+}
+
+void
+pf_remove_divert_state(struct inpcb *inp)
+{
+ struct pf_state_key *sk;
+ struct pf_state_item *si;
+
+ PF_ASSERT_UNLOCKED();
+
+ if (READ_ONCE(inp->inp_pf_sk) == NULL)
+ return;
+
+ mtx_enter(&pf_inp_mtx);
+ sk = pf_state_key_ref(inp->inp_pf_sk);
+ mtx_leave(&pf_inp_mtx);
+ if (sk == NULL)
+ return;
+
+ PF_LOCK();
+ PF_STATE_ENTER_WRITE();
+ TAILQ_FOREACH(si, &sk->sk_states, si_entry) {
+ struct pf_state *sist = si->si_st;
+ if (sk == sist->key[PF_SK_STACK] && sist->rule.ptr &&
+ (sist->rule.ptr->divert.type == PF_DIVERT_TO ||
+ sist->rule.ptr->divert.type == PF_DIVERT_REPLY)) {
+ if (sist->key[PF_SK_STACK]->proto == IPPROTO_TCP &&
+ sist->key[PF_SK_WIRE] != sist->key[PF_SK_STACK]) {
+ /*
+ * If the local address is translated, keep
+ * the state for "tcp.closed" seconds to
+ * prevent its source port from being reused.
+ */
+ if (sist->src.state < TCPS_FIN_WAIT_2 ||
+ sist->dst.state < TCPS_FIN_WAIT_2) {
+ pf_set_protostate(sist, PF_PEER_BOTH,
+ TCPS_TIME_WAIT);
+ pf_update_state_timeout(sist,
+ PFTM_TCP_CLOSED);
+ sist->expire = getuptime();
+ }
+ sist->state_flags |= PFSTATE_INP_UNLINKED;
+ } else
+ pf_remove_state(sist);
+ break;
+ }
+ }
+ PF_STATE_EXIT_WRITE();
+ PF_UNLOCK();
+
+ pf_state_key_unref(sk);
+}
+
+void
+pf_free_state(struct pf_state *st)
+{
+ struct pf_rule_item *ri;
+
+ PF_ASSERT_LOCKED();
+
+#if NPFSYNC > 0
+ if (pfsync_state_in_use(st))
+ return;
+#endif /* NPFSYNC > 0 */
+
+ KASSERT(st->timeout == PFTM_UNLINKED);
+ if (--st->rule.ptr->states_cur == 0 &&
+ st->rule.ptr->src_nodes == 0)
+ pf_rm_rule(NULL, st->rule.ptr);
+ if (st->anchor.ptr != NULL)
+ if (--st->anchor.ptr->states_cur == 0)
+ pf_rm_rule(NULL, st->anchor.ptr);
+ while ((ri = SLIST_FIRST(&st->match_rules))) {
+ SLIST_REMOVE_HEAD(&st->match_rules, entry);
+ if (--ri->r->states_cur == 0 &&
+ ri->r->src_nodes == 0)
+ pf_rm_rule(NULL, ri->r);
+ pool_put(&pf_rule_item_pl, ri);
+ }
+ pf_normalize_tcp_cleanup(st);
+ pfi_kif_unref(st->kif, PFI_KIF_REF_STATE);
+ pf_state_list_remove(&pf_state_list, st);
+ if (st->tag)
+ pf_tag_unref(st->tag);
+ pf_state_unref(st);
+ counters_inc(pf_status_fcounters, FCNT_STATE_REMOVALS);
+ pf_status.states--;
+}
+
+unsigned int
+pf_purge_expired_states(const unsigned int limit, const unsigned int collect)
+{
+ /*
+ * this task/thread/context/whatever is the only thing that
+ * removes states from the pf_state_list, so the cur reference
+ * it holds between calls is guaranteed to still be in the
+ * list.
+ */
+ static struct pf_state *cur = NULL;
+
+ struct pf_state *head, *tail;
+ struct pf_state *st;
+ SLIST_HEAD(pf_state_gcl, pf_state) gcl = SLIST_HEAD_INITIALIZER(gcl);
+ time_t now;
+ unsigned int scanned;
+ unsigned int collected = 0;
+
+ PF_ASSERT_UNLOCKED();
+
+ rw_enter_read(&pf_state_list.pfs_rwl);
+
+ mtx_enter(&pf_state_list.pfs_mtx);
+ head = TAILQ_FIRST(&pf_state_list.pfs_list);
+ tail = TAILQ_LAST(&pf_state_list.pfs_list, pf_state_queue);
+ mtx_leave(&pf_state_list.pfs_mtx);
+
+ if (head == NULL) {
+ /* the list is empty */
+ rw_exit_read(&pf_state_list.pfs_rwl);
+ return (limit);
+ }
+
+ /* (re)start at the front of the list */
+ if (cur == NULL)
+ cur = head;
+
+ now = getuptime();
+
+ for (scanned = 0; scanned < limit; scanned++) {
+ uint8_t stimeout = cur->timeout;
+ unsigned int limited = 0;
+
+ if ((stimeout == PFTM_UNLINKED) ||
+ (pf_state_expires(cur, stimeout) <= now)) {
+ st = pf_state_ref(cur);
+ SLIST_INSERT_HEAD(&gcl, st, gc_list);
+
+ if (++collected >= collect)
+ limited = 1;
+ }
+
+ /* don't iterate past the end of our view of the list */
+ if (cur == tail) {
+ cur = NULL;
+ break;
+ }
+
+ cur = TAILQ_NEXT(cur, entry_list);
+
+ /* don't spend too much time here. */
+ if (ISSET(READ_ONCE(curcpu()->ci_schedstate.spc_schedflags),
+ SPCF_SHOULDYIELD) || limited)
+ break;
+ }
+
+ rw_exit_read(&pf_state_list.pfs_rwl);
+
+ if (SLIST_EMPTY(&gcl))
+ return (scanned);
+
+ rw_enter_write(&pf_state_list.pfs_rwl);
+ PF_LOCK();
+ PF_STATE_ENTER_WRITE();
+ SLIST_FOREACH(st, &gcl, gc_list) {
+ if (st->timeout != PFTM_UNLINKED)
+ pf_remove_state(st);
+
+ pf_free_state(st);
+ }
+ PF_STATE_EXIT_WRITE();
+ PF_UNLOCK();
+ rw_exit_write(&pf_state_list.pfs_rwl);
+
+ while ((st = SLIST_FIRST(&gcl)) != NULL) {
+ SLIST_REMOVE_HEAD(&gcl, gc_list);
+ pf_state_unref(st);
+ }
+
+ return (scanned);
+}
+
+int
+pf_tbladdr_setup(struct pf_ruleset *rs, struct pf_addr_wrap *aw, int wait)
+{
+ if (aw->type != PF_ADDR_TABLE)
+ return (0);
+ if ((aw->p.tbl = pfr_attach_table(rs, aw->v.tblname, wait)) == NULL)
+ return (1);
+ return (0);
+}
+
+void
+pf_tbladdr_remove(struct pf_addr_wrap *aw)
+{
+ if (aw->type != PF_ADDR_TABLE || aw->p.tbl == NULL)
+ return;
+ pfr_detach_table(aw->p.tbl);
+ aw->p.tbl = NULL;
+}
+
+void
+pf_tbladdr_copyout(struct pf_addr_wrap *aw)
+{
+ struct pfr_ktable *kt = aw->p.tbl;
+
+ if (aw->type != PF_ADDR_TABLE || kt == NULL)
+ return;
+ if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && kt->pfrkt_root != NULL)
+ kt = kt->pfrkt_root;
+ aw->p.tbl = NULL;
+ aw->p.tblcnt = (kt->pfrkt_flags & PFR_TFLAG_ACTIVE) ?
+ kt->pfrkt_cnt : -1;
+}
+
+void
+pf_print_host(struct pf_addr *addr, u_int16_t p, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET: {
+ u_int32_t a = ntohl(addr->addr32[0]);
+ addlog("%u.%u.%u.%u", (a>>24)&255, (a>>16)&255,
+ (a>>8)&255, a&255);
+ if (p) {
+ p = ntohs(p);
+ addlog(":%u", p);
+ }
+ break;
+ }
+#ifdef INET6
+ case AF_INET6: {
+ u_int16_t b;
+ u_int8_t i, curstart, curend, maxstart, maxend;
+ curstart = curend = maxstart = maxend = 255;
+ for (i = 0; i < 8; i++) {
+ if (!addr->addr16[i]) {
+ if (curstart == 255)
+ curstart = i;
+ curend = i;
+ } else {
+ if ((curend - curstart) >
+ (maxend - maxstart)) {
+ maxstart = curstart;
+ maxend = curend;
+ }
+ curstart = curend = 255;
+ }
+ }
+ if ((curend - curstart) >
+ (maxend - maxstart)) {
+ maxstart = curstart;
+ maxend = curend;
+ }
+ for (i = 0; i < 8; i++) {
+ if (i >= maxstart && i <= maxend) {
+ if (i == 0)
+ addlog(":");
+ if (i == maxend)
+ addlog(":");
+ } else {
+ b = ntohs(addr->addr16[i]);
+ addlog("%x", b);
+ if (i < 7)
+ addlog(":");
+ }
+ }
+ if (p) {
+ p = ntohs(p);
+ addlog("[%u]", p);
+ }
+ break;
+ }
+#endif /* INET6 */
+ }
+}
+
+void
+pf_print_state(struct pf_state *st)
+{
+ pf_print_state_parts(st, NULL, NULL);
+}
+
+void
+pf_print_state_parts(struct pf_state *st,
+ struct pf_state_key *skwp, struct pf_state_key *sksp)
+{
+ struct pf_state_key *skw, *sks;
+ u_int8_t proto, dir;
+
+ /* Do our best to fill these, but they're skipped if NULL */
+ skw = skwp ? skwp : (st ? st->key[PF_SK_WIRE] : NULL);
+ sks = sksp ? sksp : (st ? st->key[PF_SK_STACK] : NULL);
+ proto = skw ? skw->proto : (sks ? sks->proto : 0);
+ dir = st ? st->direction : 0;
+
+ switch (proto) {
+ case IPPROTO_IPV4:
+ addlog("IPv4");
+ break;
+ case IPPROTO_IPV6:
+ addlog("IPv6");
+ break;
+ case IPPROTO_TCP:
+ addlog("TCP");
+ break;
+ case IPPROTO_UDP:
+ addlog("UDP");
+ break;
+ case IPPROTO_ICMP:
+ addlog("ICMP");
+ break;
+ case IPPROTO_ICMPV6:
+ addlog("ICMPv6");
+ break;
+ default:
+ addlog("%u", proto);
+ break;
+ }
+ switch (dir) {
+ case PF_IN:
+ addlog(" in");
+ break;
+ case PF_OUT:
+ addlog(" out");
+ break;
+ }
+ if (skw) {
+ addlog(" wire: (%d) ", skw->rdomain);
+ pf_print_host(&skw->addr[0], skw->port[0], skw->af);
+ addlog(" ");
+ pf_print_host(&skw->addr[1], skw->port[1], skw->af);
+ }
+ if (sks) {
+ addlog(" stack: (%d) ", sks->rdomain);
+ if (sks != skw) {
+ pf_print_host(&sks->addr[0], sks->port[0], sks->af);
+ addlog(" ");
+ pf_print_host(&sks->addr[1], sks->port[1], sks->af);
+ } else
+ addlog("-");
+ }
+ if (st) {
+ if (proto == IPPROTO_TCP) {
+ addlog(" [lo=%u high=%u win=%u modulator=%u",
+ st->src.seqlo, st->src.seqhi,
+ st->src.max_win, st->src.seqdiff);
+ if (st->src.wscale && st->dst.wscale)
+ addlog(" wscale=%u",
+ st->src.wscale & PF_WSCALE_MASK);
+ addlog("]");
+ addlog(" [lo=%u high=%u win=%u modulator=%u",
+ st->dst.seqlo, st->dst.seqhi,
+ st->dst.max_win, st->dst.seqdiff);
+ if (st->src.wscale && st->dst.wscale)
+ addlog(" wscale=%u",
+ st->dst.wscale & PF_WSCALE_MASK);
+ addlog("]");
+ }
+ addlog(" %u:%u", st->src.state, st->dst.state);
+ if (st->rule.ptr)
+ addlog(" @%d", st->rule.ptr->nr);
+ }
+}
+
+void
+pf_print_flags(u_int8_t f)
+{
+ if (f)
+ addlog(" ");
+ if (f & TH_FIN)
+ addlog("F");
+ if (f & TH_SYN)
+ addlog("S");
+ if (f & TH_RST)
+ addlog("R");
+ if (f & TH_PUSH)
+ addlog("P");
+ if (f & TH_ACK)
+ addlog("A");
+ if (f & TH_URG)
+ addlog("U");
+ if (f & TH_ECE)
+ addlog("E");
+ if (f & TH_CWR)
+ addlog("W");
+}
+
+#define PF_SET_SKIP_STEPS(i) \
+ do { \
+ while (head[i] != cur) { \
+ head[i]->skip[i].ptr = cur; \
+ head[i] = TAILQ_NEXT(head[i], entries); \
+ } \
+ } while (0)
+
+void
+pf_calc_skip_steps(struct pf_rulequeue *rules)
+{
+ struct pf_rule *cur, *prev, *head[PF_SKIP_COUNT];
+ int i;
+
+ cur = TAILQ_FIRST(rules);
+ prev = cur;
+ for (i = 0; i < PF_SKIP_COUNT; ++i)
+ head[i] = cur;
+ while (cur != NULL) {
+ if (cur->kif != prev->kif || cur->ifnot != prev->ifnot)
+ PF_SET_SKIP_STEPS(PF_SKIP_IFP);
+ if (cur->direction != prev->direction)
+ PF_SET_SKIP_STEPS(PF_SKIP_DIR);
+ if (cur->onrdomain != prev->onrdomain ||
+ cur->ifnot != prev->ifnot)
+ PF_SET_SKIP_STEPS(PF_SKIP_RDOM);
+ if (cur->af != prev->af)
+ PF_SET_SKIP_STEPS(PF_SKIP_AF);
+ if (cur->proto != prev->proto)
+ PF_SET_SKIP_STEPS(PF_SKIP_PROTO);
+ if (cur->src.neg != prev->src.neg ||
+ pf_addr_wrap_neq(&cur->src.addr, &prev->src.addr))
+ PF_SET_SKIP_STEPS(PF_SKIP_SRC_ADDR);
+ if (cur->dst.neg != prev->dst.neg ||
+ pf_addr_wrap_neq(&cur->dst.addr, &prev->dst.addr))
+ PF_SET_SKIP_STEPS(PF_SKIP_DST_ADDR);
+ if (cur->src.port[0] != prev->src.port[0] ||
+ cur->src.port[1] != prev->src.port[1] ||
+ cur->src.port_op != prev->src.port_op)
+ PF_SET_SKIP_STEPS(PF_SKIP_SRC_PORT);
+ if (cur->dst.port[0] != prev->dst.port[0] ||
+ cur->dst.port[1] != prev->dst.port[1] ||
+ cur->dst.port_op != prev->dst.port_op)
+ PF_SET_SKIP_STEPS(PF_SKIP_DST_PORT);
+
+ prev = cur;
+ cur = TAILQ_NEXT(cur, entries);
+ }
+ for (i = 0; i < PF_SKIP_COUNT; ++i)
+ PF_SET_SKIP_STEPS(i);
+}
+
+int
+pf_addr_wrap_neq(struct pf_addr_wrap *aw1, struct pf_addr_wrap *aw2)
+{
+ if (aw1->type != aw2->type)
+ return (1);
+ switch (aw1->type) {
+ case PF_ADDR_ADDRMASK:
+ case PF_ADDR_RANGE:
+ if (PF_ANEQ(&aw1->v.a.addr, &aw2->v.a.addr, AF_INET6))
+ return (1);
+ if (PF_ANEQ(&aw1->v.a.mask, &aw2->v.a.mask, AF_INET6))
+ return (1);
+ return (0);
+ case PF_ADDR_DYNIFTL:
+ return (aw1->p.dyn->pfid_kt != aw2->p.dyn->pfid_kt);
+ case PF_ADDR_NONE:
+ case PF_ADDR_NOROUTE:
+ case PF_ADDR_URPFFAILED:
+ return (0);
+ case PF_ADDR_TABLE:
+ return (aw1->p.tbl != aw2->p.tbl);
+ case PF_ADDR_RTLABEL:
+ return (aw1->v.rtlabel != aw2->v.rtlabel);
+ default:
+ addlog("invalid address type: %d\n", aw1->type);
+ return (1);
+ }
+}
+
+/* This algorithm computes 'a + b - c' in ones-complement using a trick to
+ * emulate at most one ones-complement subtraction. This thereby limits net
+ * carries/borrows to at most one, eliminating a reduction step and saving one
+ * each of +, >>, & and ~.
+ *
+ * def. x mod y = x - (x//y)*y for integer x,y
+ * def. sum = x mod 2^16
+ * def. accumulator = (x >> 16) mod 2^16
+ *
+ * The trick works as follows: subtracting exactly one u_int16_t from the
+ * u_int32_t x incurs at most one underflow, wrapping its upper 16-bits, the
+ * accumulator, to 2^16 - 1. Adding this to the 16-bit sum preserves the
+ * ones-complement borrow:
+ *
+ * (sum + accumulator) mod 2^16
+ * = { assume underflow: accumulator := 2^16 - 1 }
+ * (sum + 2^16 - 1) mod 2^16
+ * = { mod }
+ * (sum - 1) mod 2^16
+ *
+ * Although this breaks for sum = 0, giving 0xffff, which is ones-complement's
+ * other zero, not -1, that cannot occur: the 16-bit sum cannot be underflown
+ * to zero as that requires subtraction of at least 2^16, which exceeds a
+ * single u_int16_t's range.
+ *
+ * We use the following theorem to derive the implementation:
+ *
+ * th. (x + (y mod z)) mod z = (x + y) mod z (0)
+ * proof.
+ * (x + (y mod z)) mod z
+ * = { def mod }
+ * (x + y - (y//z)*z) mod z
+ * = { (a + b*c) mod c = a mod c }
+ * (x + y) mod z [end of proof]
+ *
+ * ... and thereby obtain:
+ *
+ * (sum + accumulator) mod 2^16
+ * = { def. accumulator, def. sum }
+ * (x mod 2^16 + (x >> 16) mod 2^16) mod 2^16
+ * = { (0), twice }
+ * (x + (x >> 16)) mod 2^16
+ * = { x mod 2^n = x & (2^n - 1) }
+ * (x + (x >> 16)) & 0xffff
+ *
+ * Note: this serves also as a reduction step for at most one add (as the
+ * trailing mod 2^16 prevents further reductions by destroying carries).
+ */
+__inline void
+pf_cksum_fixup(u_int16_t *cksum, u_int16_t was, u_int16_t now,
+ u_int8_t proto)
+{
+ u_int32_t x;
+ const int udp = proto == IPPROTO_UDP;
+
+ x = *cksum + was - now;
+ x = (x + (x >> 16)) & 0xffff;
+
+ /* optimise: eliminate a branch when not udp */
+ if (udp && *cksum == 0x0000)
+ return;
+ if (udp && x == 0x0000)
+ x = 0xffff;
+
+ *cksum = (u_int16_t)(x);
+}
+
+#ifdef INET6
+/* pre: coverage(cksum) is superset of coverage(covered_cksum) */
+static __inline void
+pf_cksum_uncover(u_int16_t *cksum, u_int16_t covered_cksum, u_int8_t proto)
+{
+ pf_cksum_fixup(cksum, ~covered_cksum, 0x0, proto);
+}
+
+/* pre: disjoint(coverage(cksum), coverage(uncovered_cksum)) */
+static __inline void
+pf_cksum_cover(u_int16_t *cksum, u_int16_t uncovered_cksum, u_int8_t proto)
+{
+ pf_cksum_fixup(cksum, 0x0, ~uncovered_cksum, proto);
+}
+#endif /* INET6 */
+
+/* pre: *a is 16-bit aligned within its packet
+ *
+ * This algorithm emulates 16-bit ones-complement sums on a twos-complement
+ * machine by conserving ones-complement's otherwise discarded carries in the
+ * upper bits of x. These accumulated carries when added to the lower 16-bits
+ * over at least zero 'reduction' steps then complete the ones-complement sum.
+ *
+ * def. sum = x mod 2^16
+ * def. accumulator = (x >> 16)
+ *
+ * At most two reduction steps
+ *
+ * x := sum + accumulator
+ * = { def sum, def accumulator }
+ * x := x mod 2^16 + (x >> 16)
+ * = { x mod 2^n = x & (2^n - 1) }
+ * x := (x & 0xffff) + (x >> 16)
+ *
+ * are necessary to incorporate the accumulated carries (at most one per add)
+ * i.e. to reduce x < 2^16 from at most 16 carries in the upper 16 bits.
+ *
+ * The function is also invariant over the endian of the host. Why?
+ *
+ * Define the unary transpose operator ~ on a bitstring in python slice
+ * notation as lambda m: m[P:] + m[:P] , for some constant pivot P.
+ *
+ * th. ~ distributes over ones-complement addition, denoted by +_1, i.e.
+ *
+ * ~m +_1 ~n = ~(m +_1 n) (for all bitstrings m,n of equal length)
+ *
+ * proof. Regard the bitstrings in m +_1 n as split at P, forming at most two
+ * 'half-adds'. Under ones-complement addition, each half-add carries to the
+ * other, so the sum of each half-add is unaffected by their relative
+ * order. Therefore:
+ *
+ * ~m +_1 ~n
+ * = { half-adds invariant under transposition }
+ * ~s
+ * = { substitute }
+ * ~(m +_1 n) [end of proof]
+ *
+ * th. Summing two in-memory ones-complement 16-bit variables m,n on a machine
+ * with the converse endian does not alter the result.
+ *
+ * proof.
+ * { converse machine endian: load/store transposes, P := 8 }
+ * ~(~m +_1 ~n)
+ * = { ~ over +_1 }
+ * ~~m +_1 ~~n
+ * = { ~ is an involution }
+ * m +_1 n [end of proof]
+ *
+ */
+#define NEG(x) ((u_int16_t)~(x))
+void
+pf_cksum_fixup_a(u_int16_t *cksum, const struct pf_addr *a,
+ const struct pf_addr *an, sa_family_t af, u_int8_t proto)
+{
+ u_int32_t x;
+ const u_int16_t *n = an->addr16;
+ const u_int16_t *o = a->addr16;
+ const int udp = proto == IPPROTO_UDP;
+
+ switch (af) {
+ case AF_INET:
+ x = *cksum + o[0] + NEG(n[0]) + o[1] + NEG(n[1]);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ x = *cksum + o[0] + NEG(n[0]) + o[1] + NEG(n[1]) +\
+ o[2] + NEG(n[2]) + o[3] + NEG(n[3]) +\
+ o[4] + NEG(n[4]) + o[5] + NEG(n[5]) +\
+ o[6] + NEG(n[6]) + o[7] + NEG(n[7]);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+
+ x = (x & 0xffff) + (x >> 16);
+ x = (x & 0xffff) + (x >> 16);
+
+ /* optimise: eliminate a branch when not udp */
+ if (udp && *cksum == 0x0000)
+ return;
+ if (udp && x == 0x0000)
+ x = 0xffff;
+
+ *cksum = (u_int16_t)(x);
+}
+
+int
+pf_patch_8(struct pf_pdesc *pd, u_int8_t *f, u_int8_t v, bool hi)
+{
+ int rewrite = 0;
+
+ if (*f != v) {
+ u_int16_t old = htons(hi ? (*f << 8) : *f);
+ u_int16_t new = htons(hi ? ( v << 8) : v);
+
+ pf_cksum_fixup(pd->pcksum, old, new, pd->proto);
+ *f = v;
+ rewrite = 1;
+ }
+
+ return (rewrite);
+}
+
+/* pre: *f is 16-bit aligned within its packet */
+int
+pf_patch_16(struct pf_pdesc *pd, u_int16_t *f, u_int16_t v)
+{
+ int rewrite = 0;
+
+ if (*f != v) {
+ pf_cksum_fixup(pd->pcksum, *f, v, pd->proto);
+ *f = v;
+ rewrite = 1;
+ }
+
+ return (rewrite);
+}
+
+int
+pf_patch_16_unaligned(struct pf_pdesc *pd, void *f, u_int16_t v, bool hi)
+{
+ int rewrite = 0;
+ u_int8_t *fb = (u_int8_t*)f;
+ u_int8_t *vb = (u_int8_t*)&v;
+
+ if (hi && ALIGNED_POINTER(f, u_int16_t)) {
+ return (pf_patch_16(pd, f, v)); /* optimise */
+ }
+
+ rewrite += pf_patch_8(pd, fb++, *vb++, hi);
+ rewrite += pf_patch_8(pd, fb++, *vb++,!hi);
+
+ return (rewrite);
+}
+
+/* pre: *f is 16-bit aligned within its packet */
+/* pre: pd->proto != IPPROTO_UDP */
+int
+pf_patch_32(struct pf_pdesc *pd, u_int32_t *f, u_int32_t v)
+{
+ int rewrite = 0;
+ u_int16_t *pc = pd->pcksum;
+ u_int8_t proto = pd->proto;
+
+ /* optimise: inline udp fixup code is unused; let compiler scrub it */
+ if (proto == IPPROTO_UDP)
+ panic("%s: udp", __func__);
+
+ /* optimise: skip *f != v guard; true for all use-cases */
+ pf_cksum_fixup(pc, *f / (1 << 16), v / (1 << 16), proto);
+ pf_cksum_fixup(pc, *f % (1 << 16), v % (1 << 16), proto);
+
+ *f = v;
+ rewrite = 1;
+
+ return (rewrite);
+}
+
+int
+pf_patch_32_unaligned(struct pf_pdesc *pd, void *f, u_int32_t v, bool hi)
+{
+ int rewrite = 0;
+ u_int8_t *fb = (u_int8_t*)f;
+ u_int8_t *vb = (u_int8_t*)&v;
+
+ if (hi && ALIGNED_POINTER(f, u_int32_t)) {
+ return (pf_patch_32(pd, f, v)); /* optimise */
+ }
+
+ rewrite += pf_patch_8(pd, fb++, *vb++, hi);
+ rewrite += pf_patch_8(pd, fb++, *vb++,!hi);
+ rewrite += pf_patch_8(pd, fb++, *vb++, hi);
+ rewrite += pf_patch_8(pd, fb++, *vb++,!hi);
+
+ return (rewrite);
+}
+
+int
+pf_icmp_mapping(struct pf_pdesc *pd, u_int8_t type, int *icmp_dir,
+ u_int16_t *virtual_id, u_int16_t *virtual_type)
+{
+ /*
+ * ICMP types marked with PF_OUT are typically responses to
+ * PF_IN, and will match states in the opposite direction.
+ * PF_IN ICMP types need to match a state with that type.
+ */
+ *icmp_dir = PF_OUT;
+
+ /* Queries (and responses) */
+ switch (pd->af) {
+ case AF_INET:
+ switch (type) {
+ case ICMP_ECHO:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_ECHOREPLY:
+ *virtual_type = ICMP_ECHO;
+ *virtual_id = pd->hdr.icmp.icmp_id;
+ break;
+
+ case ICMP_TSTAMP:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_TSTAMPREPLY:
+ *virtual_type = ICMP_TSTAMP;
+ *virtual_id = pd->hdr.icmp.icmp_id;
+ break;
+
+ case ICMP_IREQ:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_IREQREPLY:
+ *virtual_type = ICMP_IREQ;
+ *virtual_id = pd->hdr.icmp.icmp_id;
+ break;
+
+ case ICMP_MASKREQ:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_MASKREPLY:
+ *virtual_type = ICMP_MASKREQ;
+ *virtual_id = pd->hdr.icmp.icmp_id;
+ break;
+
+ case ICMP_IPV6_WHEREAREYOU:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_IPV6_IAMHERE:
+ *virtual_type = ICMP_IPV6_WHEREAREYOU;
+ *virtual_id = 0; /* Nothing sane to match on! */
+ break;
+
+ case ICMP_MOBILE_REGREQUEST:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_MOBILE_REGREPLY:
+ *virtual_type = ICMP_MOBILE_REGREQUEST;
+ *virtual_id = 0; /* Nothing sane to match on! */
+ break;
+
+ case ICMP_ROUTERSOLICIT:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP_ROUTERADVERT:
+ *virtual_type = ICMP_ROUTERSOLICIT;
+ *virtual_id = 0; /* Nothing sane to match on! */
+ break;
+
+ /* These ICMP types map to other connections */
+ case ICMP_UNREACH:
+ case ICMP_SOURCEQUENCH:
+ case ICMP_REDIRECT:
+ case ICMP_TIMXCEED:
+ case ICMP_PARAMPROB:
+ /* These will not be used, but set them anyway */
+ *icmp_dir = PF_IN;
+ *virtual_type = htons(type);
+ *virtual_id = 0;
+ return (1); /* These types match to another state */
+
+ /*
+ * All remaining ICMP types get their own states,
+ * and will only match in one direction.
+ */
+ default:
+ *icmp_dir = PF_IN;
+ *virtual_type = type;
+ *virtual_id = 0;
+ break;
+ }
+ break;
+#ifdef INET6
+ case AF_INET6:
+ switch (type) {
+ case ICMP6_ECHO_REQUEST:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP6_ECHO_REPLY:
+ *virtual_type = ICMP6_ECHO_REQUEST;
+ *virtual_id = pd->hdr.icmp6.icmp6_id;
+ break;
+
+ case MLD_LISTENER_QUERY:
+ case MLD_LISTENER_REPORT: {
+ struct mld_hdr *mld = &pd->hdr.mld;
+ u_int32_t h;
+
+ /*
+ * Listener Report can be sent by clients
+ * without an associated Listener Query.
+ * In addition to that, when Report is sent as a
+ * reply to a Query its source and destination
+ * address are different.
+ */
+ *icmp_dir = PF_IN;
+ *virtual_type = MLD_LISTENER_QUERY;
+ /* generate fake id for these messages */
+ h = mld->mld_addr.s6_addr32[0] ^
+ mld->mld_addr.s6_addr32[1] ^
+ mld->mld_addr.s6_addr32[2] ^
+ mld->mld_addr.s6_addr32[3];
+ *virtual_id = (h >> 16) ^ (h & 0xffff);
+ break;
+ }
+
+ /*
+ * ICMP6_FQDN and ICMP6_NI query/reply are the same type as
+ * ICMP6_WRU
+ */
+ case ICMP6_WRUREQUEST:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ICMP6_WRUREPLY:
+ *virtual_type = ICMP6_WRUREQUEST;
+ *virtual_id = 0; /* Nothing sane to match on! */
+ break;
+
+ case MLD_MTRACE:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case MLD_MTRACE_RESP:
+ *virtual_type = MLD_MTRACE;
+ *virtual_id = 0; /* Nothing sane to match on! */
+ break;
+
+ case ND_NEIGHBOR_SOLICIT:
+ *icmp_dir = PF_IN;
+ /* FALLTHROUGH */
+ case ND_NEIGHBOR_ADVERT: {
+ struct nd_neighbor_solicit *nd = &pd->hdr.nd_ns;
+ u_int32_t h;
+
+ *virtual_type = ND_NEIGHBOR_SOLICIT;
+ /* generate fake id for these messages */
+ h = nd->nd_ns_target.s6_addr32[0] ^
+ nd->nd_ns_target.s6_addr32[1] ^
+ nd->nd_ns_target.s6_addr32[2] ^
+ nd->nd_ns_target.s6_addr32[3];
+ *virtual_id = (h >> 16) ^ (h & 0xffff);
+ /*
+ * the extra work here deals with 'keep state' option
+ * at pass rule for unsolicited advertisement. By
+ * returning 1 (state_icmp = 1) we override 'keep
+ * state' to 'no state' so we don't create state for
+ * unsolicited advertisements. No one expects answer to
+ * unsolicited advertisements so we should be good.
+ */
+ if (type == ND_NEIGHBOR_ADVERT) {
+ *virtual_type = htons(*virtual_type);
+ return (1);
+ }
+ break;
+ }
+
+ /*
+ * These ICMP types map to other connections.
+ * ND_REDIRECT can't be in this list because the triggering
+ * packet header is optional.
+ */
+ case ICMP6_DST_UNREACH:
+ case ICMP6_PACKET_TOO_BIG:
+ case ICMP6_TIME_EXCEEDED:
+ case ICMP6_PARAM_PROB:
+ /* These will not be used, but set them anyway */
+ *icmp_dir = PF_IN;
+ *virtual_type = htons(type);
+ *virtual_id = 0;
+ return (1); /* These types match to another state */
+ /*
+ * All remaining ICMP6 types get their own states,
+ * and will only match in one direction.
+ */
+ default:
+ *icmp_dir = PF_IN;
+ *virtual_type = type;
+ *virtual_id = 0;
+ break;
+ }
+ break;
+#endif /* INET6 */
+ }
+ *virtual_type = htons(*virtual_type);
+ return (0); /* These types match to their own state */
+}
+
+void
+pf_translate_icmp(struct pf_pdesc *pd, struct pf_addr *qa, u_int16_t *qp,
+ struct pf_addr *oa, struct pf_addr *na, u_int16_t np)
+{
+ /* note: doesn't trouble to fixup quoted checksums, if any */
+
+ /* change quoted protocol port */
+ if (qp != NULL)
+ pf_patch_16(pd, qp, np);
+
+ /* change quoted ip address */
+ pf_cksum_fixup_a(pd->pcksum, qa, na, pd->af, pd->proto);
+ pf_addrcpy(qa, na, pd->af);
+
+ /* change network-header's ip address */
+ if (oa)
+ pf_translate_a(pd, oa, na);
+}
+
+/* pre: *a is 16-bit aligned within its packet */
+/* *a is a network header src/dst address */
+int
+pf_translate_a(struct pf_pdesc *pd, struct pf_addr *a, struct pf_addr *an)
+{
+ int rewrite = 0;
+
+ /* warning: !PF_ANEQ != PF_AEQ */
+ if (!PF_ANEQ(a, an, pd->af))
+ return (0);
+
+ /* fixup transport pseudo-header, if any */
+ switch (pd->proto) {
+ case IPPROTO_TCP: /* FALLTHROUGH */
+ case IPPROTO_UDP: /* FALLTHROUGH */
+ case IPPROTO_ICMPV6:
+ pf_cksum_fixup_a(pd->pcksum, a, an, pd->af, pd->proto);
+ break;
+ default:
+ break; /* assume no pseudo-header */
+ }
+
+ pf_addrcpy(a, an, pd->af);
+ rewrite = 1;
+
+ return (rewrite);
+}
+
+#ifdef INET6
+/* pf_translate_af() may change pd->m, adjust local copies after calling */
+int
+pf_translate_af(struct pf_pdesc *pd)
+{
+ static const struct pf_addr zero;
+ struct pf_ip *ip4;
+ struct pf_ip6_hdr *ip6;
+ int copyback = 0;
+ u_int hlen, ohlen, dlen;
+ u_int16_t *pc;
+ u_int8_t af_proto, naf_proto;
+
+ hlen = (pd->naf == AF_INET) ? sizeof(*ip4) : sizeof(*ip6);
+ ohlen = pd->off;
+ dlen = pd->tot_len - pd->off;
+ pc = pd->pcksum;
+
+ af_proto = naf_proto = pd->proto;
+ if (naf_proto == IPPROTO_ICMP)
+ af_proto = IPPROTO_ICMPV6;
+ if (naf_proto == IPPROTO_ICMPV6)
+ af_proto = IPPROTO_ICMP;
+
+ /* uncover stale pseudo-header */
+ switch (af_proto) {
+ case IPPROTO_ICMPV6:
+ /* optimise: unchanged for TCP/UDP */
+ pf_cksum_fixup(pc, htons(af_proto), 0x0, af_proto);
+ pf_cksum_fixup(pc, htons(dlen), 0x0, af_proto);
+ /* FALLTHROUGH */
+ case IPPROTO_UDP: /* FALLTHROUGH */
+ case IPPROTO_TCP:
+ pf_cksum_fixup_a(pc, pd->src, &zero, pd->af, af_proto);
+ pf_cksum_fixup_a(pc, pd->dst, &zero, pd->af, af_proto);
+ copyback = 1;
+ break;
+ default:
+ break; /* assume no pseudo-header */
+ }
+
+ /* replace the network header */
+ m_adj(pd->m, pd->off);
+ pd->src = NULL;
+ pd->dst = NULL;
+
+ if ((M_PREPEND(pd->m, hlen, M_DONTWAIT)) == NULL) {
+ pd->m = NULL;
+ return (-1);
+ }
+
+ pd->off = hlen;
+ pd->tot_len += hlen - ohlen;
+
+ switch (pd->naf) {
+ case AF_INET:
+ ip4 = mtod(pd->m, struct pf_ip *);
+ memset(ip4, 0, hlen);
+ ip4->ip_v = IPVERSION;
+ ip4->ip_hl = hlen >> 2;
+ ip4->ip_tos = pd->tos;
+ ip4->ip_len = htons(hlen + dlen);
+ ip4->ip_id = htons(ip_randomid());
+ ip4->ip_off = htons(IP_DF);
+ ip4->ip_ttl = pd->ttl;
+ ip4->ip_p = pd->proto;
+ ip4->ip_src = pd->nsaddr.v4;
+ ip4->ip_dst = pd->ndaddr.v4;
+ break;
+ case AF_INET6:
+ ip6 = mtod(pd->m, struct pf_ip6_hdr *);
+ memset(ip6, 0, hlen);
+ ip6->ip6_vfc = IPV6_VERSION;
+ ip6->ip6_flow |= htonl((u_int32_t)pd->tos << 20);
+ ip6->ip6_plen = htons(dlen);
+ ip6->ip6_nxt = pd->proto;
+ if (!pd->ttl || pd->ttl > IPV6_DEFHLIM)
+ ip6->ip6_hlim = IPV6_DEFHLIM;
+ else
+ ip6->ip6_hlim = pd->ttl;
+ ip6->ip6_src = pd->nsaddr.v6;
+ ip6->ip6_dst = pd->ndaddr.v6;
+ break;
+ default:
+ unhandled_af(pd->naf);
+ }
+
+ /* UDP over IPv6 must be checksummed per rfc2460 p27 */
+ if (naf_proto == IPPROTO_UDP && *pc == 0x0000 &&
+ pd->naf == AF_INET6) {
+ pd->m->m_pkthdr.csum_flags |= M_UDP_CSUM_OUT;
+ }
+
+ /* cover fresh pseudo-header */
+ switch (naf_proto) {
+ case IPPROTO_ICMPV6:
+ /* optimise: unchanged for TCP/UDP */
+ pf_cksum_fixup(pc, 0x0, htons(naf_proto), naf_proto);
+ pf_cksum_fixup(pc, 0x0, htons(dlen), naf_proto);
+ /* FALLTHROUGH */
+ case IPPROTO_UDP: /* FALLTHROUGH */
+ case IPPROTO_TCP:
+ pf_cksum_fixup_a(pc, &zero, &pd->nsaddr, pd->naf, naf_proto);
+ pf_cksum_fixup_a(pc, &zero, &pd->ndaddr, pd->naf, naf_proto);
+ copyback = 1;
+ break;
+ default:
+ break; /* assume no pseudo-header */
+ }
+
+ /* flush pd->pcksum */
+ if (copyback)
+ m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT);
+
+ return (0);
+}
+
+int
+pf_change_icmp_af(struct mbuf *m, int ipoff2, struct pf_pdesc *pd,
+ struct pf_pdesc *pd2, struct pf_addr *src, struct pf_addr *dst,
+ sa_family_t af, sa_family_t naf)
+{
+ struct mbuf *n = NULL;
+ struct pf_ip *ip4;
+ struct pf_ip6_hdr *ip6;
+ u_int hlen, ohlen, dlen;
+ int d;
+
+ if (af == naf || (af != AF_INET && af != AF_INET6) ||
+ (naf != AF_INET && naf != AF_INET6))
+ return (-1);
+
+ /* split the mbuf chain on the quoted ip/ip6 header boundary */
+ if ((n = m_split(m, ipoff2, M_DONTWAIT)) == NULL)
+ return (-1);
+
+ /* new quoted header */
+ hlen = naf == AF_INET ? sizeof(*ip4) : sizeof(*ip6);
+ /* old quoted header */
+ ohlen = pd2->off - ipoff2;
+
+ /* trim old quoted header */
+ pf_cksum_uncover(pd->pcksum, in_cksum(n, ohlen), pd->proto);
+ m_adj(n, ohlen);
+
+ /* prepend a new, translated, quoted header */
+ if ((M_PREPEND(n, hlen, M_DONTWAIT)) == NULL)
+ return (-1);
+
+ switch (naf) {
+ case AF_INET:
+ ip4 = mtod(n, struct pf_ip *);
+ memset(ip4, 0, sizeof(*ip4));
+ ip4->ip_v = IPVERSION;
+ ip4->ip_hl = sizeof(*ip4) >> 2;
+ ip4->ip_len = htons(sizeof(*ip4) + pd2->tot_len - ohlen);
+ ip4->ip_id = htons(ip_randomid());
+ ip4->ip_off = htons(IP_DF);
+ ip4->ip_ttl = pd2->ttl;
+ if (pd2->proto == IPPROTO_ICMPV6)
+ ip4->ip_p = IPPROTO_ICMP;
+ else
+ ip4->ip_p = pd2->proto;
+ ip4->ip_src = src->v4;
+ ip4->ip_dst = dst->v4;
+ in_hdr_cksum_out(n, NULL);
+ break;
+ case AF_INET6:
+ ip6 = mtod(n, struct pf_ip6_hdr *);
+ memset(ip6, 0, sizeof(*ip6));
+ ip6->ip6_vfc = IPV6_VERSION;
+ ip6->ip6_plen = htons(pd2->tot_len - ohlen);
+ if (pd2->proto == IPPROTO_ICMP)
+ ip6->ip6_nxt = IPPROTO_ICMPV6;
+ else
+ ip6->ip6_nxt = pd2->proto;
+ if (!pd2->ttl || pd2->ttl > IPV6_DEFHLIM)
+ ip6->ip6_hlim = IPV6_DEFHLIM;
+ else
+ ip6->ip6_hlim = pd2->ttl;
+ ip6->ip6_src = src->v6;
+ ip6->ip6_dst = dst->v6;
+ break;
+ }
+
+ /* cover new quoted header */
+ /* optimise: any new AF_INET header of ours sums to zero */
+ if (naf != AF_INET) {
+ pf_cksum_cover(pd->pcksum, in_cksum(n, hlen), pd->proto);
+ }
+
+ /* reattach modified quoted packet to outer header */
+ {
+ int nlen = n->m_pkthdr.len;
+ m_cat(m, n);
+ m->m_pkthdr.len += nlen;
+ }
+
+ /* account for altered length */
+ d = hlen - ohlen;
+
+ if (pd->proto == IPPROTO_ICMPV6) {
+ /* fixup pseudo-header */
+ dlen = pd->tot_len - pd->off;
+ pf_cksum_fixup(pd->pcksum,
+ htons(dlen), htons(dlen + d), pd->proto);
+ }
+
+ pd->tot_len += d;
+ pd2->tot_len += d;
+ pd2->off += d;
+
+ /* note: not bothering to update network headers as
+ these due for rewrite by pf_translate_af() */
+
+ return (0);
+}
+
+
+#define PTR_IP(field) (offsetof(struct pf_ip, field))
+#define PTR_IP6(field) (offsetof(struct pf_ip6_hdr, field))
+
+int
+pf_translate_icmp_af(struct pf_pdesc *pd, int af, void *arg)
+{
+ struct pf_icmp *icmp4;
+ struct icmp6hdr *icmp6;
+ u_int32_t mtu;
+ int32_t ptr = -1;
+ u_int8_t type;
+ u_int8_t code;
+
+ switch (af) {
+ case AF_INET:
+ icmp6 = arg;
+ type = icmp6->icmp6_type;
+ code = icmp6->icmp6_code;
+ mtu = ntohl(icmp6->icmp6_mtu);
+
+ switch (type) {
+ case ICMP6_ECHO_REQUEST:
+ type = ICMP_ECHO;
+ break;
+ case ICMP6_ECHO_REPLY:
+ type = ICMP_ECHOREPLY;
+ break;
+ case ICMP6_DST_UNREACH:
+ type = ICMP_UNREACH;
+ switch (code) {
+ case ICMP6_DST_UNREACH_NOROUTE:
+ case ICMP6_DST_UNREACH_BEYONDSCOPE:
+ case ICMP6_DST_UNREACH_ADDR:
+ code = ICMP_UNREACH_HOST;
+ break;
+ case ICMP6_DST_UNREACH_ADMIN:
+ code = ICMP_UNREACH_HOST_PROHIB;
+ break;
+ case ICMP6_DST_UNREACH_NOPORT:
+ code = ICMP_UNREACH_PORT;
+ break;
+ default:
+ return (-1);
+ }
+ break;
+ case ICMP6_PACKET_TOO_BIG:
+ type = ICMP_UNREACH;
+ code = ICMP_UNREACH_NEEDFRAG;
+ mtu -= 20;
+ break;
+ case ICMP6_TIME_EXCEEDED:
+ type = ICMP_TIMXCEED;
+ break;
+ case ICMP6_PARAM_PROB:
+ switch (code) {
+ case ICMP6_PARAMPROB_HEADER:
+ type = ICMP_PARAMPROB;
+ code = ICMP_PARAMPROB_ERRATPTR;
+ ptr = ntohl(icmp6->icmp6_pptr);
+
+ if (ptr == PTR_IP6(ip6_vfc))
+ ; /* preserve */
+ else if (ptr == PTR_IP6(ip6_vfc) + 1)
+ ptr = PTR_IP(ip_tos);
+ else if (ptr == PTR_IP6(ip6_plen) ||
+ ptr == PTR_IP6(ip6_plen) + 1)
+ ptr = PTR_IP(ip_len);
+ else if (ptr == PTR_IP6(ip6_nxt))
+ ptr = PTR_IP(ip_p);
+ else if (ptr == PTR_IP6(ip6_hlim))
+ ptr = PTR_IP(ip_ttl);
+ else if (ptr >= PTR_IP6(ip6_src) &&
+ ptr < PTR_IP6(ip6_dst))
+ ptr = PTR_IP(ip_src);
+ else if (ptr >= PTR_IP6(ip6_dst) &&
+ ptr < sizeof(struct pf_ip6_hdr))
+ ptr = PTR_IP(ip_dst);
+ else {
+ return (-1);
+ }
+ break;
+ case ICMP6_PARAMPROB_NEXTHEADER:
+ type = ICMP_UNREACH;
+ code = ICMP_UNREACH_PROTOCOL;
+ break;
+ default:
+ return (-1);
+ }
+ break;
+ default:
+ return (-1);
+ }
+
+ pf_patch_8(pd, &icmp6->icmp6_type, type, PF_HI);
+ pf_patch_8(pd, &icmp6->icmp6_code, code, PF_LO);
+
+ /* aligns well with a icmpv4 nextmtu */
+ pf_patch_32(pd, &icmp6->icmp6_mtu, htonl(mtu));
+
+ /* icmpv4 pptr is a one most significant byte */
+ if (ptr >= 0)
+ pf_patch_32(pd, &icmp6->icmp6_pptr, htonl(ptr << 24));
+ break;
+ case AF_INET6:
+ icmp4 = arg;
+ type = icmp4->icmp_type;
+ code = icmp4->icmp_code;
+ mtu = ntohs(icmp4->icmp_nextmtu);
+
+ switch (type) {
+ case ICMP_ECHO:
+ type = ICMP6_ECHO_REQUEST;
+ break;
+ case ICMP_ECHOREPLY:
+ type = ICMP6_ECHO_REPLY;
+ break;
+ case ICMP_UNREACH:
+ type = ICMP6_DST_UNREACH;
+ switch (code) {
+ case ICMP_UNREACH_NET:
+ case ICMP_UNREACH_HOST:
+ case ICMP_UNREACH_NET_UNKNOWN:
+ case ICMP_UNREACH_HOST_UNKNOWN:
+ case ICMP_UNREACH_ISOLATED:
+ case ICMP_UNREACH_TOSNET:
+ case ICMP_UNREACH_TOSHOST:
+ code = ICMP6_DST_UNREACH_NOROUTE;
+ break;
+ case ICMP_UNREACH_PORT:
+ code = ICMP6_DST_UNREACH_NOPORT;
+ break;
+ case ICMP_UNREACH_NET_PROHIB:
+ case ICMP_UNREACH_HOST_PROHIB:
+ case ICMP_UNREACH_FILTER_PROHIB:
+ case ICMP_UNREACH_PRECEDENCE_CUTOFF:
+ code = ICMP6_DST_UNREACH_ADMIN;
+ break;
+ case ICMP_UNREACH_PROTOCOL:
+ type = ICMP6_PARAM_PROB;
+ code = ICMP6_PARAMPROB_NEXTHEADER;
+ ptr = offsetof(struct pf_ip6_hdr, ip6_nxt);
+ break;
+ case ICMP_UNREACH_NEEDFRAG:
+ type = ICMP6_PACKET_TOO_BIG;
+ code = 0;
+ mtu += 20;
+ break;
+ default:
+ return (-1);
+ }
+ break;
+ case ICMP_TIMXCEED:
+ type = ICMP6_TIME_EXCEEDED;
+ break;
+ case ICMP_PARAMPROB:
+ type = ICMP6_PARAM_PROB;
+ switch (code) {
+ case ICMP_PARAMPROB_ERRATPTR:
+ code = ICMP6_PARAMPROB_HEADER;
+ break;
+ case ICMP_PARAMPROB_LENGTH:
+ code = ICMP6_PARAMPROB_HEADER;
+ break;
+ default:
+ return (-1);
+ }
+
+ ptr = icmp4->icmp_pptr;
+ if (ptr == 0 || ptr == PTR_IP(ip_tos))
+ ; /* preserve */
+ else if (ptr == PTR_IP(ip_len) ||
+ ptr == PTR_IP(ip_len) + 1)
+ ptr = PTR_IP6(ip6_plen);
+ else if (ptr == PTR_IP(ip_ttl))
+ ptr = PTR_IP6(ip6_hlim);
+ else if (ptr == PTR_IP(ip_p))
+ ptr = PTR_IP6(ip6_nxt);
+ else if (ptr >= PTR_IP(ip_src) &&
+ ptr < PTR_IP(ip_dst))
+ ptr = PTR_IP6(ip6_src);
+ else if (ptr >= PTR_IP(ip_dst) &&
+ ptr < sizeof(struct pf_ip))
+ ptr = PTR_IP6(ip6_dst);
+ else {
+ return (-1);
+ }
+ break;
+ default:
+ return (-1);
+ }
+
+ pf_patch_8(pd, &icmp4->icmp_type, type, PF_HI);
+ pf_patch_8(pd, &icmp4->icmp_code, code, PF_LO);
+ pf_patch_16(pd, &icmp4->icmp_nextmtu, htons(mtu));
+ if (ptr >= 0)
+ pf_patch_32(pd, &icmp4->icmp_void, htonl(ptr));
+ break;
+ }
+
+ return (0);
+}
+#endif /* INET6 */
+
+/*
+ * Need to modulate the sequence numbers in the TCP SACK option
+ * (credits to Krzysztof Pfaff for report and patch)
+ */
+int
+pf_modulate_sack(struct pf_pdesc *pd, struct pf_state_peer *dst)
+{
+ struct sackblk sack;
+ int copyback = 0, i;
+ int olen, optsoff;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt, *eoh;
+
+ olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr);
+ optsoff = pd->off + sizeof(struct pf_tcphdr);
+#define TCPOLEN_MINSACK (TCPOLEN_SACK + 2)
+ if (olen < TCPOLEN_MINSACK ||
+ !pf_pull_hdr(pd->m, optsoff, opts, olen, NULL, pd->af))
+ return (0);
+
+ eoh = opts + olen;
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_SACK, TCPOLEN_MINSACK)) != NULL)
+ {
+ size_t safelen = MIN(opt[1], (eoh - opt));
+ for (i = 2; i + TCPOLEN_SACK <= safelen; i += TCPOLEN_SACK) {
+ size_t startoff = (opt + i) - opts;
+ memcpy(&sack, &opt[i], sizeof(sack));
+ pf_patch_32_unaligned(pd, &sack.start,
+ htonl(ntohl(sack.start) - dst->seqdiff),
+ PF_ALGNMNT(startoff));
+ pf_patch_32_unaligned(pd, &sack.end,
+ htonl(ntohl(sack.end) - dst->seqdiff),
+ PF_ALGNMNT(startoff + sizeof(sack.start)));
+ memcpy(&opt[i], &sack, sizeof(sack));
+ }
+ copyback = 1;
+ opt += opt[1];
+ }
+
+ if (copyback)
+ m_copyback(pd->m, optsoff, olen, opts, M_NOWAIT);
+ return (copyback);
+}
+
+struct mbuf *
+pf_build_tcp(const struct pf_rule *r, sa_family_t af,
+ const struct pf_addr *saddr, const struct pf_addr *daddr,
+ u_int16_t sport, u_int16_t dport, u_int32_t seq, u_int32_t ack,
+ u_int8_t flags, u_int16_t win, u_int16_t mss, u_int8_t ttl, int tag,
+ u_int16_t rtag, u_int sack, u_int rdom, u_short *reason)
+{
+ struct mbuf *m;
+ int len, tlen;
+ struct pf_ip *h;
+#ifdef INET6
+ struct pf_ip6_hdr *h6;
+#endif /* INET6 */
+ struct pf_tcphdr *th;
+ char *opt;
+
+ /* maximum segment size tcp option */
+ tlen = sizeof(struct pf_tcphdr);
+ if (mss)
+ tlen += 4;
+ if (sack)
+ tlen += 2;
+
+ switch (af) {
+ case AF_INET:
+ len = sizeof(struct pf_ip) + tlen;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ len = sizeof(struct pf_ip6_hdr) + tlen;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+
+ /* create outgoing mbuf */
+ m = m_gethdr(M_DONTWAIT, MT_HEADER);
+ if (m == NULL) {
+ REASON_SET(reason, PFRES_MEMORY);
+ return (NULL);
+ }
+ if (tag)
+ m->m_pkthdr.pf.flags |= PF_TAG_GENERATED;
+ m->m_pkthdr.pf.tag = rtag;
+ m->m_pkthdr.ph_rtableid = rdom;
+ if (r && (r->scrub_flags & PFSTATE_SETPRIO))
+ m->m_pkthdr.pf.prio = r->set_prio[0];
+ if (r && r->qid)
+ m->m_pkthdr.pf.qid = r->qid;
+ m->m_data += max_linkhdr;
+ m->m_pkthdr.len = m->m_len = len;
+ m->m_pkthdr.ph_ifidx = 0;
+ m->m_pkthdr.csum_flags |= M_TCP_CSUM_OUT;
+ memset(m->m_data, 0, len);
+ switch (af) {
+ case AF_INET:
+ h = mtod(m, struct pf_ip *);
+ h->ip_p = IPPROTO_TCP;
+ h->ip_len = htons(tlen);
+ h->ip_v = 4;
+ h->ip_hl = sizeof(*h) >> 2;
+ h->ip_tos = IPTOS_LOWDELAY;
+ h->ip_len = htons(len);
+ h->ip_off = htons(atomic_load_int(&ip_mtudisc) ? IP_DF : 0);
+ h->ip_ttl = ttl ? ttl : atomic_load_int(&ip_defttl);
+ h->ip_sum = 0;
+ h->ip_src.s_addr = saddr->v4.s_addr;
+ h->ip_dst.s_addr = daddr->v4.s_addr;
+
+ th = (struct pf_tcphdr *)((caddr_t)h + sizeof(struct pf_ip));
+ break;
+#ifdef INET6
+ case AF_INET6:
+ h6 = mtod(m, struct pf_ip6_hdr *);
+ h6->ip6_nxt = IPPROTO_TCP;
+ h6->ip6_plen = htons(tlen);
+ h6->ip6_vfc |= IPV6_VERSION;
+ h6->ip6_hlim = IPV6_DEFHLIM;
+ memcpy(&h6->ip6_src, &saddr->v6, sizeof(struct in6_addr));
+ memcpy(&h6->ip6_dst, &daddr->v6, sizeof(struct in6_addr));
+
+ th = (struct pf_tcphdr *)((caddr_t)h6 + sizeof(struct pf_ip6_hdr));
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+
+ /* TCP header */
+ th->th_sport = sport;
+ th->th_dport = dport;
+ th->th_seq = htonl(seq);
+ th->th_ack = htonl(ack);
+ th->th_off = tlen >> 2;
+ th->th_flags = flags;
+ th->th_win = htons(win);
+
+ opt = (char *)(th + 1);
+ if (mss) {
+ opt[0] = TCPOPT_MAXSEG;
+ opt[1] = 4;
+ mss = htons(mss);
+ memcpy((opt + 2), &mss, 2);
+ opt += 4;
+ }
+ if (sack) {
+ opt[0] = TCPOPT_SACK_PERMITTED;
+ opt[1] = 2;
+ opt += 2;
+ }
+
+ return (m);
+}
+
+void
+pf_send_tcp(const struct pf_rule *r, sa_family_t af,
+ const struct pf_addr *saddr, const struct pf_addr *daddr,
+ u_int16_t sport, u_int16_t dport, u_int32_t seq, u_int32_t ack,
+ u_int8_t flags, u_int16_t win, u_int16_t mss, u_int8_t ttl, int tag,
+ u_int16_t rtag, u_int rdom, u_short *reason)
+{
+ struct mbuf *m;
+
+ if ((m = pf_build_tcp(r, af, saddr, daddr, sport, dport, seq, ack,
+ flags, win, mss, ttl, tag, rtag, 0, rdom, reason)) == NULL)
+ return;
+
+ switch (af) {
+ case AF_INET:
+ ip_send(m);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ip6_send(m);
+ break;
+#endif /* INET6 */
+ }
+}
+
+static void
+pf_send_challenge_ack(struct pf_pdesc *pd, struct pf_state *st,
+ struct pf_state_peer *src, struct pf_state_peer *dst, u_short *reason)
+{
+ /*
+ * We are sending challenge ACK as a response to SYN packet, which
+ * matches existing state (modulo TCP window check). Therefore packet
+ * must be sent on behalf of destination.
+ *
+ * We expect sender to remain either silent, or send RST packet
+ * so both, firewall and remote peer, can purge dead state from
+ * memory.
+ */
+ pf_send_tcp(st->rule.ptr, pd->af, pd->dst, pd->src,
+ pd->hdr.tcp.th_dport, pd->hdr.tcp.th_sport, dst->seqlo,
+ src->seqlo, TH_ACK, 0, 0, st->rule.ptr->return_ttl, 1, 0,
+ pd->rdomain, reason);
+}
+
+void
+pf_send_icmp(struct mbuf *m, u_int8_t type, u_int8_t code, int param,
+ sa_family_t af, struct pf_rule *r, u_int rdomain)
+{
+ struct mbuf *m0;
+
+ if ((m0 = m_copym(m, 0, M_COPYALL, M_NOWAIT)) == NULL)
+ return;
+
+ m0->m_pkthdr.pf.flags |= PF_TAG_GENERATED;
+ m0->m_pkthdr.ph_rtableid = rdomain;
+ if (r && (r->scrub_flags & PFSTATE_SETPRIO))
+ m0->m_pkthdr.pf.prio = r->set_prio[0];
+ if (r && r->qid)
+ m0->m_pkthdr.pf.qid = r->qid;
+
+ switch (af) {
+ case AF_INET:
+ icmp_error(m0, type, code, 0, param);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ icmp6_error(m0, type, code, param);
+ break;
+#endif /* INET6 */
+ }
+}
+
+/*
+ * Return ((n = 0) == (a = b [with mask m]))
+ * Note: n != 0 => returns (a != b [with mask m])
+ */
+int
+pf_match_addr(u_int8_t n, struct pf_addr *a, struct pf_addr *m,
+ struct pf_addr *b, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ if ((a->addr32[0] & m->addr32[0]) ==
+ (b->addr32[0] & m->addr32[0]))
+ return (n == 0);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (((a->addr32[0] & m->addr32[0]) ==
+ (b->addr32[0] & m->addr32[0])) &&
+ ((a->addr32[1] & m->addr32[1]) ==
+ (b->addr32[1] & m->addr32[1])) &&
+ ((a->addr32[2] & m->addr32[2]) ==
+ (b->addr32[2] & m->addr32[2])) &&
+ ((a->addr32[3] & m->addr32[3]) ==
+ (b->addr32[3] & m->addr32[3])))
+ return (n == 0);
+ break;
+#endif /* INET6 */
+ }
+
+ return (n != 0);
+}
+
+/*
+ * Return 1 if b <= a <= e, otherwise return 0.
+ */
+int
+pf_match_addr_range(struct pf_addr *b, struct pf_addr *e,
+ struct pf_addr *a, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ if ((ntohl(a->addr32[0]) < ntohl(b->addr32[0])) ||
+ (ntohl(a->addr32[0]) > ntohl(e->addr32[0])))
+ return (0);
+ break;
+#ifdef INET6
+ case AF_INET6: {
+ int i;
+
+ /* check a >= b */
+ for (i = 0; i < 4; ++i)
+ if (ntohl(a->addr32[i]) > ntohl(b->addr32[i]))
+ break;
+ else if (ntohl(a->addr32[i]) < ntohl(b->addr32[i]))
+ return (0);
+ /* check a <= e */
+ for (i = 0; i < 4; ++i)
+ if (ntohl(a->addr32[i]) < ntohl(e->addr32[i]))
+ break;
+ else if (ntohl(a->addr32[i]) > ntohl(e->addr32[i]))
+ return (0);
+ break;
+ }
+#endif /* INET6 */
+ }
+ return (1);
+}
+
+int
+pf_match(u_int8_t op, u_int32_t a1, u_int32_t a2, u_int32_t p)
+{
+ switch (op) {
+ case PF_OP_IRG:
+ return ((p > a1) && (p < a2));
+ case PF_OP_XRG:
+ return ((p < a1) || (p > a2));
+ case PF_OP_RRG:
+ return ((p >= a1) && (p <= a2));
+ case PF_OP_EQ:
+ return (p == a1);
+ case PF_OP_NE:
+ return (p != a1);
+ case PF_OP_LT:
+ return (p < a1);
+ case PF_OP_LE:
+ return (p <= a1);
+ case PF_OP_GT:
+ return (p > a1);
+ case PF_OP_GE:
+ return (p >= a1);
+ }
+ return (0); /* never reached */
+}
+
+int
+pf_match_port(u_int8_t op, u_int16_t a1, u_int16_t a2, u_int16_t p)
+{
+ return (pf_match(op, ntohs(a1), ntohs(a2), ntohs(p)));
+}
+
+int
+pf_match_uid(u_int8_t op, uid_t a1, uid_t a2, uid_t u)
+{
+ if (u == -1 && op != PF_OP_EQ && op != PF_OP_NE)
+ return (0);
+ return (pf_match(op, a1, a2, u));
+}
+
+int
+pf_match_gid(u_int8_t op, gid_t a1, gid_t a2, gid_t g)
+{
+ if (g == -1 && op != PF_OP_EQ && op != PF_OP_NE)
+ return (0);
+ return (pf_match(op, a1, a2, g));
+}
+
+int
+pf_match_tag(struct mbuf *m, struct pf_rule *r, int *tag)
+{
+ if (*tag == -1)
+ *tag = m->m_pkthdr.pf.tag;
+
+ return ((!r->match_tag_not && r->match_tag == *tag) ||
+ (r->match_tag_not && r->match_tag != *tag));
+}
+
+int
+pf_match_rcvif(struct mbuf *m, struct pf_rule *r)
+{
+ struct ifnet *ifp;
+ struct pfi_kif *kif = NULL;
+
+ if (m->m_pkthdr.ph_ifidx == 0)
+ return (0);
+
+ smr_read_enter();
+ ifp = if_get_smr(m->m_pkthdr.ph_ifidx);
+ if (ifp != NULL) {
+ kif = (struct pfi_kif *)ifp->if_pf_kif;
+#if NCARP > 0
+ if (ifp->if_type == IFT_CARP) {
+ struct ifnet *ifp0 = if_get_smr(ifp->if_carpdevidx);
+ if (ifp0 != NULL)
+ kif = (struct pfi_kif *)ifp0->if_pf_kif;
+ }
+#endif /* NCARP */
+ }
+ smr_read_leave();
+
+ if (kif == NULL) {
+ DPFPRINTF(LOG_ERR,
+ "%s: kif == NULL, @%d via %s", __func__,
+ r->nr, r->rcv_ifname);
+ return (0);
+ }
+
+ return (pfi_kif_match(r->rcv_kif, kif));
+}
+
+void
+pf_tag_packet(struct mbuf *m, int tag, int rtableid)
+{
+ if (tag > 0)
+ m->m_pkthdr.pf.tag = tag;
+ if (rtableid >= 0)
+ m->m_pkthdr.ph_rtableid = (u_int)rtableid;
+}
+
+void
+pf_anchor_stack_init(void)
+{
+ struct pf_anchor_stackframe *stack;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+ stack[PF_ANCHOR_STACK_MAX].sf_stack_top = &stack[0];
+ cpumem_leave(pf_anchor_stack, stack);
+}
+
+int
+pf_anchor_stack_is_full(struct pf_anchor_stackframe *sf)
+{
+ struct pf_anchor_stackframe *stack;
+ int rv;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+ rv = (sf == &stack[PF_ANCHOR_STACK_MAX]);
+ cpumem_leave(pf_anchor_stack, stack);
+
+ return (rv);
+}
+
+int
+pf_anchor_stack_is_empty(struct pf_anchor_stackframe *sf)
+{
+ struct pf_anchor_stackframe *stack;
+ int rv;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+ rv = (sf == &stack[0]);
+ cpumem_leave(pf_anchor_stack, stack);
+
+ return (rv);
+}
+
+struct pf_anchor_stackframe *
+pf_anchor_stack_top(void)
+{
+ struct pf_anchor_stackframe *stack;
+ struct pf_anchor_stackframe *top_sf;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+ top_sf = stack[PF_ANCHOR_STACK_MAX].sf_stack_top;
+ cpumem_leave(pf_anchor_stack, stack);
+
+ return (top_sf);
+}
+
+int
+pf_anchor_stack_push(struct pf_ruleset *rs, struct pf_rule *anchor,
+ struct pf_rule *r, struct pf_anchor *child, int jump_target)
+{
+ struct pf_anchor_stackframe *stack;
+ struct pf_anchor_stackframe *top_sf = pf_anchor_stack_top();
+
+ top_sf++;
+ if (pf_anchor_stack_is_full(top_sf))
+ return (-1);
+
+ top_sf->sf_rs = rs;
+ top_sf->sf_anchor = anchor;
+ top_sf->sf_r = r;
+ top_sf->sf_child = child;
+ top_sf->sf_jump_target = jump_target;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+
+ if ((top_sf <= &stack[0]) || (top_sf >= &stack[PF_ANCHOR_STACK_MAX]))
+ panic("%s: top frame outside of anchor stack range", __func__);
+
+ stack[PF_ANCHOR_STACK_MAX].sf_stack_top = top_sf;
+ cpumem_leave(pf_anchor_stack, stack);
+
+ return (0);
+}
+
+int
+pf_anchor_stack_pop(struct pf_ruleset **rs, struct pf_rule **anchor,
+ struct pf_rule **r, struct pf_anchor **child, int *jump_target)
+{
+ struct pf_anchor_stackframe *top_sf = pf_anchor_stack_top();
+ struct pf_anchor_stackframe *stack;
+ int on_top;
+
+ stack = (struct pf_anchor_stackframe *)cpumem_enter(pf_anchor_stack);
+ if (pf_anchor_stack_is_empty(top_sf)) {
+ on_top = -1;
+ } else {
+ if ((top_sf <= &stack[0]) ||
+ (top_sf >= &stack[PF_ANCHOR_STACK_MAX]))
+ panic("%s: top frame outside of anchor stack range",
+ __func__);
+
+ *rs = top_sf->sf_rs;
+ *anchor = top_sf->sf_anchor;
+ *r = top_sf->sf_r;
+ *child = top_sf->sf_child;
+ *jump_target = top_sf->sf_jump_target;
+ top_sf--;
+ stack[PF_ANCHOR_STACK_MAX].sf_stack_top = top_sf;
+ on_top = 0;
+ }
+ cpumem_leave(pf_anchor_stack, stack);
+
+ return (on_top);
+}
+
+void
+pf_poolmask(struct pf_addr *naddr, struct pf_addr *raddr,
+ struct pf_addr *rmask, struct pf_addr *saddr, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ naddr->addr32[0] = (raddr->addr32[0] & rmask->addr32[0]) |
+ ((rmask->addr32[0] ^ 0xffffffff ) & saddr->addr32[0]);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ naddr->addr32[0] = (raddr->addr32[0] & rmask->addr32[0]) |
+ ((rmask->addr32[0] ^ 0xffffffff ) & saddr->addr32[0]);
+ naddr->addr32[1] = (raddr->addr32[1] & rmask->addr32[1]) |
+ ((rmask->addr32[1] ^ 0xffffffff ) & saddr->addr32[1]);
+ naddr->addr32[2] = (raddr->addr32[2] & rmask->addr32[2]) |
+ ((rmask->addr32[2] ^ 0xffffffff ) & saddr->addr32[2]);
+ naddr->addr32[3] = (raddr->addr32[3] & rmask->addr32[3]) |
+ ((rmask->addr32[3] ^ 0xffffffff ) & saddr->addr32[3]);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+}
+
+void
+pf_addr_inc(struct pf_addr *addr, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ addr->addr32[0] = htonl(ntohl(addr->addr32[0]) + 1);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (addr->addr32[3] == 0xffffffff) {
+ addr->addr32[3] = 0;
+ if (addr->addr32[2] == 0xffffffff) {
+ addr->addr32[2] = 0;
+ if (addr->addr32[1] == 0xffffffff) {
+ addr->addr32[1] = 0;
+ addr->addr32[0] =
+ htonl(ntohl(addr->addr32[0]) + 1);
+ } else
+ addr->addr32[1] =
+ htonl(ntohl(addr->addr32[1]) + 1);
+ } else
+ addr->addr32[2] =
+ htonl(ntohl(addr->addr32[2]) + 1);
+ } else
+ addr->addr32[3] =
+ htonl(ntohl(addr->addr32[3]) + 1);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+}
+
+int
+pf_socket_lookup(struct pf_pdesc *pd)
+{
+ struct pf_addr *saddr, *daddr;
+ u_int16_t sport, dport;
+ struct inpcbtable *table;
+ struct inpcb *inp;
+
+ pd->lookup.uid = -1;
+ pd->lookup.gid = -1;
+ pd->lookup.pid = NO_PID;
+ switch (pd->virtual_proto) {
+ case IPPROTO_TCP:
+ sport = pd->hdr.tcp.th_sport;
+ dport = pd->hdr.tcp.th_dport;
+ PF_ASSERT_LOCKED();
+ NET_ASSERT_LOCKED();
+ table = &tcbtable;
+ break;
+ case IPPROTO_UDP:
+ sport = pd->hdr.udp.uh_sport;
+ dport = pd->hdr.udp.uh_dport;
+ PF_ASSERT_LOCKED();
+ NET_ASSERT_LOCKED();
+ table = &udbtable;
+ break;
+ default:
+ return (-1);
+ }
+ if (pd->dir == PF_IN) {
+ saddr = pd->src;
+ daddr = pd->dst;
+ } else {
+ u_int16_t p;
+
+ p = sport;
+ sport = dport;
+ dport = p;
+ saddr = pd->dst;
+ daddr = pd->src;
+ }
+ switch (pd->af) {
+ case AF_INET:
+ /*
+ * Fails when rtable is changed while evaluating the ruleset
+ * The socket looked up will not match the one hit in the end.
+ */
+ inp = in_pcblookup(table, saddr->v4, sport, daddr->v4, dport,
+ pd->rdomain);
+ if (inp == NULL) {
+ inp = in_pcblookup_listen(table, daddr->v4, dport,
+ NULL, pd->rdomain);
+ if (inp == NULL)
+ return (-1);
+ }
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (pd->virtual_proto == IPPROTO_UDP)
+ table = &udb6table;
+ if (pd->virtual_proto == IPPROTO_TCP)
+ table = &tcb6table;
+ inp = in6_pcblookup(table, &saddr->v6, sport, &daddr->v6,
+ dport, pd->rdomain);
+ if (inp == NULL) {
+ inp = in6_pcblookup_listen(table, &daddr->v6, dport,
+ NULL, pd->rdomain);
+ if (inp == NULL)
+ return (-1);
+ }
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(pd->af);
+ }
+ pd->lookup.uid = inp->inp_socket->so_euid;
+ pd->lookup.gid = inp->inp_socket->so_egid;
+ pd->lookup.pid = inp->inp_socket->so_cpid;
+ in_pcbunref(inp);
+ return (1);
+}
+
+/* post: r => (r[0] == type /\ r[1] >= min_typelen >= 2 "validity"
+ * /\ (eoh - r) >= min_typelen >= 2 "safety" )
+ *
+ * warning: r + r[1] may exceed opts bounds for r[1] > min_typelen
+ */
+u_int8_t*
+pf_find_tcpopt(u_int8_t *opt, u_int8_t *opts, size_t hlen, u_int8_t type,
+ u_int8_t min_typelen)
+{
+ u_int8_t *eoh = opts + hlen;
+
+ if (min_typelen < 2)
+ return (NULL);
+
+ while ((eoh - opt) >= min_typelen) {
+ switch (*opt) {
+ case TCPOPT_EOL:
+ /* FALLTHROUGH - Workaround the failure of some
+ systems to NOP-pad their bzero'd option buffers,
+ producing spurious EOLs */
+ case TCPOPT_NOP:
+ opt++;
+ continue;
+ default:
+ if (opt[0] == type &&
+ opt[1] >= min_typelen)
+ return (opt);
+ }
+
+ opt += MAX(opt[1], 2); /* evade infinite loops */
+ }
+
+ return (NULL);
+}
+
+u_int8_t
+pf_get_wscale(struct pf_pdesc *pd)
+{
+ int olen;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt;
+ u_int8_t wscale = 0;
+
+ olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr);
+ if (olen < TCPOLEN_WINDOW || !pf_pull_hdr(pd->m,
+ pd->off + sizeof(struct pf_tcphdr), opts, olen, NULL, pd->af))
+ return (0);
+
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_WINDOW, TCPOLEN_WINDOW)) != NULL) {
+ wscale = opt[2];
+ wscale = MIN(wscale, TCP_MAX_WINSHIFT);
+ wscale |= PF_WSCALE_FLAG;
+
+ opt += opt[1];
+ }
+
+ return (wscale);
+}
+
+u_int16_t
+pf_get_mss(struct pf_pdesc *pd, uint16_t mssdflt)
+{
+ int olen;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt;
+ u_int16_t mss;
+
+ olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr);
+ if (olen < TCPOLEN_MAXSEG || !pf_pull_hdr(pd->m,
+ pd->off + sizeof(struct pf_tcphdr), opts, olen, NULL, pd->af))
+ return (0);
+
+ mss = mssdflt;
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_MAXSEG, TCPOLEN_MAXSEG)) != NULL) {
+ memcpy(&mss, (opt + 2), 2);
+ mss = ntohs(mss);
+
+ opt += opt[1];
+ }
+ return (mss);
+}
+
+u_int16_t
+pf_calc_mss(struct pf_addr *addr, sa_family_t af, int rtableid, uint16_t offer,
+ uint16_t mssdflt)
+{
+ struct ifnet *ifp;
+ struct sockaddr_in *dst;
+#ifdef INET6
+ struct sockaddr_in6 *dst6;
+#endif /* INET6 */
+ struct rtentry *rt = NULL;
+ struct sockaddr_storage ss;
+ int hlen, mss;
+
+ memset(&ss, 0, sizeof(ss));
+
+ switch (af) {
+ case AF_INET:
+ hlen = sizeof(struct pf_ip);
+ dst = (struct sockaddr_in *)&ss;
+ dst->sin_family = AF_INET;
+ dst->/* PFLINUX sin_len */;
+ dst->sin_addr = addr->v4;
+ rt = rtalloc(sintosa(dst), 0, rtableid);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ hlen = sizeof(struct pf_ip6_hdr);
+ dst6 = (struct sockaddr_in6 *)&ss;
+ dst6->sin6_family = AF_INET6;
+ dst6->sin6_len = sizeof(*dst6);
+ dst6->sin6_addr = addr->v6;
+ rt = rtalloc(sin6tosa(dst6), 0, rtableid);
+ break;
+#endif /* INET6 */
+ }
+
+ mss = mssdflt;
+ if (rt != NULL && (ifp = if_get(rt->rt_ifidx)) != NULL) {
+ mss = ifp->if_mtu - hlen - sizeof(struct pf_tcphdr);
+ mss = imax(mss, mssdflt);
+ if_put(ifp);
+ }
+ rtfree(rt);
+ mss = imin(mss, offer);
+ mss = imax(mss, 64); /* sanity - at least max opt space */
+ return (mss);
+}
+
+static __inline int
+pf_set_rt_ifp(struct pf_state *st, struct pf_addr *saddr, sa_family_t af,
+ struct pf_src_node **sns)
+{
+ struct pf_rule *r = st->rule.ptr;
+ int rv;
+
+ if (!r->rt)
+ return (0);
+
+ rv = pf_map_addr(af, r, saddr, &st->rt_addr, NULL, sns,
+ &r->route, PF_SN_ROUTE);
+ if (rv == 0)
+ st->rt = r->rt;
+
+ return (rv);
+}
+
+u_int32_t
+pf_tcp_iss(struct pf_pdesc *pd)
+{
+ SHA2_CTX ctx;
+ union {
+ uint8_t bytes[SHA512_DIGEST_LENGTH];
+ uint32_t words[1];
+ } digest;
+
+ if (pf_tcp_secret_init == 0) {
+ arc4random_buf(pf_tcp_secret, sizeof(pf_tcp_secret));
+ SHA512Init(&pf_tcp_secret_ctx);
+ SHA512Update(&pf_tcp_secret_ctx, pf_tcp_secret,
+ sizeof(pf_tcp_secret));
+ pf_tcp_secret_init = 1;
+ }
+ ctx = pf_tcp_secret_ctx;
+
+ SHA512Update(&ctx, &pd->rdomain, sizeof(pd->rdomain));
+ SHA512Update(&ctx, &pd->hdr.tcp.th_sport, sizeof(u_short));
+ SHA512Update(&ctx, &pd->hdr.tcp.th_dport, sizeof(u_short));
+ switch (pd->af) {
+ case AF_INET:
+ SHA512Update(&ctx, &pd->src->v4, sizeof(struct in_addr));
+ SHA512Update(&ctx, &pd->dst->v4, sizeof(struct in_addr));
+ break;
+#ifdef INET6
+ case AF_INET6:
+ SHA512Update(&ctx, &pd->src->v6, sizeof(struct in6_addr));
+ SHA512Update(&ctx, &pd->dst->v6, sizeof(struct in6_addr));
+ break;
+#endif /* INET6 */
+ }
+ SHA512Final(digest.bytes, &ctx);
+ pf_tcp_iss_off += 4096;
+ return (digest.words[0] + READ_ONCE(tcp_iss) + pf_tcp_iss_off);
+}
+
+void
+pf_rule_to_actions(struct pf_rule *r, struct pf_rule_actions *a)
+{
+ if (r->qid)
+ a->qid = r->qid;
+ if (r->pqid)
+ a->pqid = r->pqid;
+ if (r->rtableid >= 0)
+ a->rtableid = r->rtableid;
+#if NPFLOG > 0
+ a->log |= r->log;
+#endif /* NPFLOG > 0 */
+ if (r->scrub_flags & PFSTATE_SETTOS)
+ a->set_tos = r->set_tos;
+ if (r->min_ttl)
+ a->min_ttl = r->min_ttl;
+ if (r->max_mss)
+ a->max_mss = r->max_mss;
+ a->flags |= (r->scrub_flags & (PFSTATE_NODF|PFSTATE_RANDOMID|
+ PFSTATE_SETTOS|PFSTATE_SCRUB_TCP|PFSTATE_SETPRIO));
+ if (r->scrub_flags & PFSTATE_SETPRIO) {
+ a->set_prio[0] = r->set_prio[0];
+ a->set_prio[1] = r->set_prio[1];
+ }
+ if (r->rule_flag & PFRULE_SETDELAY)
+ a->delay = r->delay;
+}
+
+#define PF_TEST_ATTRIB(t, a) \
+ if (t) { \
+ r = a; \
+ continue; \
+ } else do { \
+ } while (0)
+
+enum pf_test_status
+pf_match_rule(struct pf_test_ctx *ctx, struct pf_ruleset *ruleset)
+{
+ struct pf_rule *r;
+ struct pf_anchor *child = NULL;
+ int target;
+
+ pf_anchor_stack_init();
+enter_ruleset:
+ r = TAILQ_FIRST(ruleset->rules.active.ptr);
+ while (r != NULL) {
+ struct pf_statelim *stlim = NULL;
+ struct pf_sourcelim *srlim = NULL;
+ struct pf_source *sr = NULL;
+ unsigned int gen;
+
+ PF_TEST_ATTRIB(r->rule_flag & PFRULE_EXPIRED,
+ TAILQ_NEXT(r, entries));
+ r->evaluations++;
+ PF_TEST_ATTRIB(
+ (pfi_kif_match(r->kif, ctx->pd->kif) == r->ifnot),
+ r->skip[PF_SKIP_IFP].ptr);
+ PF_TEST_ATTRIB((r->direction && r->direction != ctx->pd->dir),
+ r->skip[PF_SKIP_DIR].ptr);
+ PF_TEST_ATTRIB((r->onrdomain >= 0 &&
+ (r->onrdomain == ctx->pd->rdomain) == r->ifnot),
+ r->skip[PF_SKIP_RDOM].ptr);
+ PF_TEST_ATTRIB((r->af && r->af != ctx->pd->af),
+ r->skip[PF_SKIP_AF].ptr);
+ PF_TEST_ATTRIB((r->proto && r->proto != ctx->pd->proto),
+ r->skip[PF_SKIP_PROTO].ptr);
+ PF_TEST_ATTRIB((PF_MISMATCHAW(&r->src.addr, &ctx->pd->nsaddr,
+ ctx->pd->naf, r->src.neg, ctx->pd->kif,
+ ctx->act.rtableid)),
+ r->skip[PF_SKIP_SRC_ADDR].ptr);
+ PF_TEST_ATTRIB((PF_MISMATCHAW(&r->dst.addr, &ctx->pd->ndaddr,
+ ctx->pd->af, r->dst.neg, NULL, ctx->act.rtableid)),
+ r->skip[PF_SKIP_DST_ADDR].ptr);
+
+ switch (ctx->pd->virtual_proto) {
+ case PF_VPROTO_FRAGMENT:
+ /* tcp/udp only. port_op always 0 in other cases */
+ PF_TEST_ATTRIB((r->src.port_op || r->dst.port_op),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((ctx->pd->proto == IPPROTO_TCP &&
+ r->flagset),
+ TAILQ_NEXT(r, entries));
+ /* icmp only. type/code always 0 in other cases */
+ PF_TEST_ATTRIB((r->type || r->code),
+ TAILQ_NEXT(r, entries));
+ /* tcp/udp only. {uid|gid}.op always 0 in other cases */
+ PF_TEST_ATTRIB((r->gid.op || r->uid.op),
+ TAILQ_NEXT(r, entries));
+ break;
+
+ case IPPROTO_TCP:
+ PF_TEST_ATTRIB(((r->flagset & ctx->th->th_flags) !=
+ r->flags),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->os_fingerprint != PF_OSFP_ANY &&
+ !pf_osfp_match(pf_osfp_fingerprint(ctx->pd),
+ r->os_fingerprint)),
+ TAILQ_NEXT(r, entries));
+ /* FALLTHROUGH */
+
+ case IPPROTO_UDP:
+ /* tcp/udp only. port_op always 0 in other cases */
+ PF_TEST_ATTRIB((r->src.port_op &&
+ !pf_match_port(r->src.port_op, r->src.port[0],
+ r->src.port[1], ctx->pd->nsport)),
+ r->skip[PF_SKIP_SRC_PORT].ptr);
+ PF_TEST_ATTRIB((r->dst.port_op &&
+ !pf_match_port(r->dst.port_op, r->dst.port[0],
+ r->dst.port[1], ctx->pd->ndport)),
+ r->skip[PF_SKIP_DST_PORT].ptr);
+ /* tcp/udp only. uid.op always 0 in other cases */
+ PF_TEST_ATTRIB((r->uid.op && (ctx->pd->lookup.done ||
+ (ctx->pd->lookup.done =
+ pf_socket_lookup(ctx->pd), 1)) &&
+ !pf_match_uid(r->uid.op, r->uid.uid[0],
+ r->uid.uid[1], ctx->pd->lookup.uid)),
+ TAILQ_NEXT(r, entries));
+ /* tcp/udp only. gid.op always 0 in other cases */
+ PF_TEST_ATTRIB((r->gid.op && (ctx->pd->lookup.done ||
+ (ctx->pd->lookup.done =
+ pf_socket_lookup(ctx->pd), 1)) &&
+ !pf_match_gid(r->gid.op, r->gid.gid[0],
+ r->gid.gid[1], ctx->pd->lookup.gid)),
+ TAILQ_NEXT(r, entries));
+ break;
+
+ case IPPROTO_ICMP:
+ /* icmp only. type always 0 in other cases */
+ PF_TEST_ATTRIB((r->type &&
+ r->type != ctx->icmptype + 1),
+ TAILQ_NEXT(r, entries));
+ /* icmp only. type always 0 in other cases */
+ PF_TEST_ATTRIB((r->code &&
+ r->code != ctx->icmpcode + 1),
+ TAILQ_NEXT(r, entries));
+ /* icmp only. don't create states on replies */
+ PF_TEST_ATTRIB((r->keep_state && !ctx->state_icmp &&
+ (r->rule_flag & PFRULE_STATESLOPPY) == 0 &&
+ ctx->icmp_dir != PF_IN),
+ TAILQ_NEXT(r, entries));
+ break;
+
+ case IPPROTO_ICMPV6:
+ /* icmp only. type always 0 in other cases */
+ PF_TEST_ATTRIB((r->type &&
+ r->type != ctx->icmptype + 1),
+ TAILQ_NEXT(r, entries));
+ /* icmp only. type always 0 in other cases */
+ PF_TEST_ATTRIB((r->code &&
+ r->code != ctx->icmpcode + 1),
+ TAILQ_NEXT(r, entries));
+ /* icmp only. don't create states on replies */
+ PF_TEST_ATTRIB((r->keep_state && !ctx->state_icmp &&
+ (r->rule_flag & PFRULE_STATESLOPPY) == 0 &&
+ ctx->icmp_dir != PF_IN &&
+ ctx->icmptype != ND_NEIGHBOR_ADVERT),
+ TAILQ_NEXT(r, entries));
+ break;
+
+ default:
+ break;
+ }
+
+ PF_TEST_ATTRIB((r->rule_flag & PFRULE_FRAGMENT &&
+ ctx->pd->virtual_proto != PF_VPROTO_FRAGMENT),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->tos && !(r->tos == ctx->pd->tos)),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->prob &&
+ r->prob <= arc4random_uniform(UINT_MAX - 1) + 1),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->match_tag &&
+ !pf_match_tag(ctx->pd->m, r, &ctx->tag)),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->rcv_kif && pf_match_rcvif(ctx->pd->m, r) ==
+ r->rcvifnot),
+ TAILQ_NEXT(r, entries));
+ PF_TEST_ATTRIB((r->prio &&
+ (r->prio == PF_PRIO_ZERO ? 0 : r->prio) !=
+ ctx->pd->m->m_pkthdr.pf.prio),
+ TAILQ_NEXT(r, entries));
+
+ if (r->statelim.id != PF_STATELIM_ID_NONE) {
+ stlim = pf_statelim_find(r->statelim.id);
+
+ /*
+ * Treat a missing limiter like an exhausted limiter.
+ * There is no "backend" to get a resource out of
+ * so the rule can't create state.
+ */
+ PF_TEST_ATTRIB(stlim == NULL,
+ TAILQ_NEXT(r, entries));
+
+ /*
+ * An overcommitted pool means this rule
+ * can't create state.
+ */
+ if (stlim->pfstlim_inuse >= stlim->pfstlim_limit) {
+ gen = pf_statelim_enter(stlim);
+ stlim->pfstlim_counters.hardlimited++;
+ pf_statelim_leave(stlim, gen);
+ if (r->statelim.limiter_action == PF_LIMITER_BLOCK) {
+ ctx->limiter_drop = 1;
+ REASON_SET(&ctx->reason, PFRES_MAXSTATES);
+ break; /* stop rule processing */
+ }
+
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+
+ /*
+ * Is access to the pool rate limited?
+ */
+ if (stlim->pfstlim_rate.limit != 0) {
+ uint64_t ts = getnsecuptime();
+ uint64_t diff = ts - stlim->pfstlim_rate_ts;
+
+ if (diff < stlim->pfstlim_rate_token) {
+ gen = pf_statelim_enter(stlim);
+ stlim->pfstlim_counters.ratelimited++;
+ pf_statelim_leave(stlim, gen);
+ if (r->statelim.limiter_action ==
+ PF_LIMITER_BLOCK) {
+ ctx->limiter_drop = 1;
+ REASON_SET(&ctx->reason,
+ PFRES_MAXSTATES);
+ /* stop rule processing */
+ break;
+ }
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+
+ if (diff > stlim->pfstlim_rate_bucket) {
+ stlim->pfstlim_rate_ts =
+ ts - stlim->pfstlim_rate_bucket;
+ }
+ }
+ }
+
+ if (r->sourcelim.id != PF_SOURCELIM_ID_NONE) {
+ struct pf_source key;
+
+ srlim = pf_sourcelim_find(r->sourcelim.id);
+
+ /*
+ * Treat a missing pool like an overcommitted pool.
+ * There is no "backend" to get a resource out of
+ * so the rule can't create state.
+ */
+ PF_TEST_ATTRIB(srlim == NULL,
+ TAILQ_NEXT(r, entries));
+
+ pf_source_key(srlim, &key,
+ ctx->pd->af, ctx->pd->rdomain, ctx->pd->src);
+ sr = pf_source_find(srlim, &key);
+ if (sr != NULL) {
+ /*
+ * An overcommitted limiter means this rule
+ * can't create state.
+ */
+ if (sr->pfsr_inuse >= srlim->pfsrlim_limit) {
+ sr->pfsr_counters.hardlimited++;
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.hardlimited++;
+ pf_sourcelim_leave(srlim, gen);
+ if (r->sourcelim.limiter_action ==
+ PF_LIMITER_BLOCK) {
+ ctx->limiter_drop = 1;
+ REASON_SET(&ctx->reason,
+ PFRES_SRCLIMIT);
+ /* stop rule processing */
+ break;
+ }
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+
+ /*
+ * Is access to the pool rate limited?
+ */
+ if (srlim->pfsrlim_rate.limit != 0) {
+ uint64_t ts = getnsecuptime();
+ uint64_t diff = ts - sr->pfsr_rate_ts;
+
+ if (diff < srlim->pfsrlim_rate_token) {
+ sr->pfsr_counters.ratelimited++;
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.ratelimited++;
+ pf_sourcelim_leave(srlim, gen);
+ if (r->sourcelim.limiter_action ==
+ PF_LIMITER_BLOCK) {
+ ctx->limiter_drop = 1;
+ REASON_SET(&ctx->reason,
+ PFRES_SRCLIMIT);
+ /* stop rules */
+ break;
+ }
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+
+ if (diff > srlim->pfsrlim_rate_bucket) {
+ sr->pfsr_rate_ts = ts -
+ srlim->pfsrlim_rate_bucket;
+ }
+ }
+ } else {
+ /*
+ * a new source entry will (should)
+ * admit a state.
+ */
+
+ if (srlim->pfsrlim_nsources >=
+ srlim->pfsrlim_entries) {
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.addrlimited++;
+ pf_sourcelim_leave(srlim, gen);
+ if (r->sourcelim.limiter_action ==
+ PF_LIMITER_BLOCK) {
+ ctx->limiter_drop = 1;
+ REASON_SET(&ctx->reason,
+ PFRES_SRCLIMIT);
+ /* stop rules processing */
+ break;
+ }
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+ }
+ }
+
+ /* must be last! */
+ if (r->pktrate.limit) {
+ pf_add_threshold(&r->pktrate);
+ PF_TEST_ATTRIB((pf_check_threshold(&r->pktrate)),
+ TAILQ_NEXT(r, entries));
+ }
+
+ /* FALLTHROUGH */
+ if (r->tag)
+ ctx->tag = r->tag;
+ if (r->anchor == NULL) {
+
+ if (r->rule_flag & PFRULE_ONCE) {
+ u_int32_t rule_flag;
+
+ rule_flag = r->rule_flag;
+ if (((rule_flag & PFRULE_EXPIRED) == 0) &&
+ atomic_cas_uint(&r->rule_flag, rule_flag,
+ rule_flag | PFRULE_EXPIRED) == rule_flag) {
+ r->exptime = gettime();
+ } else {
+ r = TAILQ_NEXT(r, entries);
+ continue;
+ }
+ }
+
+ if (r->action == PF_MATCH) {
+ if ((ctx->ri = pool_get(&pf_rule_item_pl,
+ PR_NOWAIT)) == NULL) {
+ REASON_SET(&ctx->reason, PFRES_MEMORY);
+ return (PF_TEST_FAIL);
+ }
+ ctx->ri->r = r;
+ /* order is irrelevant */
+ SLIST_INSERT_HEAD(&ctx->rules, ctx->ri, entry);
+ ctx->ri = NULL;
+ pf_rule_to_actions(r, &ctx->act);
+ if (r->rule_flag & PFRULE_AFTO)
+ ctx->pd->naf = r->naf;
+ if (pf_get_transaddr(r, ctx->pd, ctx->sns,
+ &ctx->nr) == -1) {
+ REASON_SET(&ctx->reason,
+ PFRES_TRANSLATE);
+ return (PF_TEST_FAIL);
+ }
+#if NPFLOG > 0
+ if (r->log) {
+ REASON_SET(&ctx->reason, PFRES_MATCH);
+ pflog_packet(ctx->pd, ctx->reason, r,
+ ctx->a, ruleset, NULL);
+ }
+#endif /* NPFLOG > 0 */
+ } else {
+ /*
+ * found matching r
+ */
+ *ctx->rm = r;
+ /*
+ * anchor, with ruleset, where r belongs to
+ */
+ *ctx->am = ctx->a;
+ /*
+ * ruleset where r belongs to
+ */
+ *ctx->rsm = ruleset;
+ /*
+ * ruleset, where anchor belongs to.
+ */
+ ctx->arsm = ctx->aruleset;
+ /*
+ * state/source pools
+ */
+
+ ctx->statelim = stlim;
+ ctx->sourcelim = srlim;
+ ctx->source = sr;
+ }
+
+#if NPFLOG > 0
+ if (ctx->act.log & PF_LOG_MATCHES)
+ pf_log_matches(ctx->pd, r, ctx->a, ruleset,
+ &ctx->rules);
+#endif /* NPFLOG > 0 */
+
+ if (r->quick)
+ return (PF_TEST_QUICK);
+ } else {
+ ctx->aruleset = &r->anchor->ruleset;
+ if (r->anchor_wildcard) {
+ RB_FOREACH(child, pf_anchor_node,
+ &r->anchor->children) {
+ if (pf_anchor_stack_push(ruleset,
+ ctx->a, r, child,
+ PF_NEXT_CHILD) != 0)
+ return (PF_TEST_FAIL);
+
+ ctx->a = r;
+ ruleset = &child->ruleset;
+ goto enter_ruleset;
+next_child:
+ continue; /* with RB_FOREACH() */
+ }
+ } else {
+ if (pf_anchor_stack_push(ruleset, ctx->a,
+ r, child, PF_NEXT_RULE) != 0)
+ return (PF_TEST_FAIL);
+
+ ctx->a = r;
+ ruleset = &r->anchor->ruleset;
+ child = NULL;
+ goto enter_ruleset;
+next_rule:
+ ;
+ }
+ }
+ r = TAILQ_NEXT(r, entries);
+ }
+
+ if (pf_anchor_stack_pop(&ruleset, &ctx->a, &r, &child,
+ &target) == 0) {
+
+ /* stop if any rule matched within quick anchors. */
+ if (r->quick && *ctx->am == r)
+ return (PF_TEST_QUICK);
+
+ switch (target) {
+ case PF_NEXT_CHILD:
+ goto next_child;
+ case PF_NEXT_RULE:
+ goto next_rule;
+ default:
+ panic("%s: unknown jump target", __func__);
+ }
+ }
+
+ return (PF_TEST_OK);
+}
+
+int
+pf_test_rule(struct pf_pdesc *pd, struct pf_rule **rm, struct pf_state **sm,
+ struct pf_rule **am, struct pf_ruleset **rsm, u_short *reason)
+{
+ struct pf_rule *r = NULL;
+ struct pf_rule *a = NULL;
+ struct pf_ruleset *ruleset = NULL;
+ struct pf_state_key *skw = NULL, *sks = NULL;
+ int rewrite = 0;
+ u_int16_t virtual_type, virtual_id;
+ int action = PF_DROP;
+ struct pf_test_ctx ctx;
+ int rv;
+
+ PF_ASSERT_LOCKED();
+
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.pd = pd;
+ ctx.rm = rm;
+ ctx.am = am;
+ ctx.rsm = rsm;
+ ctx.th = &pd->hdr.tcp;
+ ctx.act.rtableid = pd->rdomain;
+ ctx.tag = -1;
+ SLIST_INIT(&ctx.rules);
+
+ if (pd->dir == PF_IN && if_congested()) {
+ REASON_SET(&ctx.reason, PFRES_CONGEST);
+ return (PF_DROP);
+ }
+
+ switch (pd->virtual_proto) {
+ case IPPROTO_ICMP:
+ ctx.icmptype = pd->hdr.icmp.icmp_type;
+ ctx.icmpcode = pd->hdr.icmp.icmp_code;
+ ctx.state_icmp = pf_icmp_mapping(pd, ctx.icmptype,
+ &ctx.icmp_dir, &virtual_id, &virtual_type);
+ if (ctx.icmp_dir == PF_IN) {
+ pd->osport = pd->nsport = virtual_id;
+ pd->odport = pd->ndport = virtual_type;
+ } else {
+ pd->osport = pd->nsport = virtual_type;
+ pd->odport = pd->ndport = virtual_id;
+ }
+ break;
+#ifdef INET6
+ case IPPROTO_ICMPV6:
+ ctx.icmptype = pd->hdr.icmp6.icmp6_type;
+ ctx.icmpcode = pd->hdr.icmp6.icmp6_code;
+ ctx.state_icmp = pf_icmp_mapping(pd, ctx.icmptype,
+ &ctx.icmp_dir, &virtual_id, &virtual_type);
+ if (ctx.icmp_dir == PF_IN) {
+ pd->osport = pd->nsport = virtual_id;
+ pd->odport = pd->ndport = virtual_type;
+ } else {
+ pd->osport = pd->nsport = virtual_type;
+ pd->odport = pd->ndport = virtual_id;
+ }
+ break;
+#endif /* INET6 */
+ }
+
+ ruleset = &pf_main_ruleset;
+ rv = pf_match_rule(&ctx, ruleset);
+ if (rv == PF_TEST_FAIL || ctx.limiter_drop == 1) {
+ REASON_SET(reason, ctx.reason);
+ goto cleanup;
+ }
+
+ r = *ctx.rm; /* matching rule */
+ a = *ctx.am; /* rule that defines an anchor containing 'r' */
+ ruleset = *ctx.rsm;/* ruleset of the anchor defined by the rule 'a' */
+ ctx.aruleset = ctx.arsm;/* ruleset of the 'a' rule itself */
+
+ /* apply actions for last matching pass/block rule */
+ pf_rule_to_actions(r, &ctx.act);
+ if (r->rule_flag & PFRULE_AFTO)
+ pd->naf = r->naf;
+ if (pf_get_transaddr(r, pd, ctx.sns, &ctx.nr) == -1) {
+ REASON_SET(&ctx.reason, PFRES_TRANSLATE);
+ goto cleanup;
+ }
+ REASON_SET(&ctx.reason, PFRES_MATCH);
+
+#if NPFLOG > 0
+ if (r->log)
+ pflog_packet(pd, ctx.reason, r, a, ruleset, NULL);
+ if (ctx.act.log & PF_LOG_MATCHES)
+ pf_log_matches(pd, r, a, ruleset, &ctx.rules);
+#endif /* NPFLOG > 0 */
+
+ if (pd->virtual_proto != PF_VPROTO_FRAGMENT &&
+ (r->action == PF_DROP) &&
+ ((r->rule_flag & PFRULE_RETURNRST) ||
+ (r->rule_flag & PFRULE_RETURNICMP) ||
+ (r->rule_flag & PFRULE_RETURN))) {
+ if (pd->proto == IPPROTO_TCP &&
+ ((r->rule_flag & PFRULE_RETURNRST) ||
+ (r->rule_flag & PFRULE_RETURN)) &&
+ !(ctx.th->th_flags & TH_RST)) {
+ u_int32_t ack =
+ ntohl(ctx.th->th_seq) + pd->p_len;
+
+ if (pf_check_tcp_cksum(pd->m, pd->off,
+ pd->tot_len - pd->off, pd->af))
+ REASON_SET(&ctx.reason, PFRES_PROTCKSUM);
+ else {
+ if (ctx.th->th_flags & TH_SYN)
+ ack++;
+ if (ctx.th->th_flags & TH_FIN)
+ ack++;
+ pf_send_tcp(r, pd->af, pd->dst,
+ pd->src, ctx.th->th_dport,
+ ctx.th->th_sport, ntohl(ctx.th->th_ack),
+ ack, TH_RST|TH_ACK, 0, 0, r->return_ttl,
+ 1, 0, pd->rdomain, &ctx.reason);
+ }
+ } else if ((pd->proto != IPPROTO_ICMP ||
+ ICMP_INFOTYPE(ctx.icmptype)) && pd->af == AF_INET &&
+ r->return_icmp)
+ pf_send_icmp(pd->m, r->return_icmp >> 8,
+ r->return_icmp & 255, 0, pd->af, r, pd->rdomain);
+ else if ((pd->proto != IPPROTO_ICMPV6 ||
+ (ctx.icmptype >= ICMP6_ECHO_REQUEST &&
+ ctx.icmptype != ND_REDIRECT)) && pd->af == AF_INET6 &&
+ r->return_icmp6)
+ pf_send_icmp(pd->m, r->return_icmp6 >> 8,
+ r->return_icmp6 & 255, 0, pd->af, r, pd->rdomain);
+ }
+
+ if (r->action == PF_DROP)
+ goto cleanup;
+
+ pf_tag_packet(pd->m, ctx.tag, ctx.act.rtableid);
+ if (ctx.act.rtableid >= 0 &&
+ rtable_l2(ctx.act.rtableid) != pd->rdomain)
+ pd->destchg = 1;
+
+ if (r->action == PF_PASS && pd->badopts != 0 && ! r->allow_opts) {
+ REASON_SET(&ctx.reason, PFRES_IPOPTIONS);
+#if NPFLOG > 0
+ pd->pflog |= PF_LOG_FORCE;
+#endif /* NPFLOG > 0 */
+ DPFPRINTF(LOG_NOTICE, "dropping packet with "
+ "ip/ipv6 options in pf_test_rule()");
+ goto cleanup;
+ }
+
+ if (pd->virtual_proto != PF_VPROTO_FRAGMENT
+ && !ctx.state_icmp && r->keep_state) {
+
+ if (r->rule_flag & PFRULE_SRCTRACK &&
+ pf_insert_src_node(&ctx.sns[PF_SN_NONE], r, PF_SN_NONE,
+ pd->af, pd->src, NULL, NULL) != 0) {
+ REASON_SET(&ctx.reason, PFRES_SRCLIMIT);
+ goto cleanup;
+ }
+
+ if (r->max_states && (r->states_cur >= r->max_states)) {
+ pf_status.lcounters[LCNT_STATES]++;
+ REASON_SET(&ctx.reason, PFRES_MAXSTATES);
+ goto cleanup;
+ }
+
+ action = pf_create_state(pd, r, a, ctx.nr, &skw, &sks,
+ &rewrite, sm, ctx.tag, &ctx.rules, &ctx.act, ctx.sns,
+ &ctx);
+
+ if (action != PF_PASS)
+ goto cleanup;
+
+ if (pd->proto == IPPROTO_TCP &&
+ r->keep_state == PF_STATE_SYNPROXY && pd->dir == PF_IN) {
+ action = pf_synproxy_ack(r, pd, sm, &ctx.act);
+ if (action != PF_PASS)
+ return (action); /* PF_SYNPROXY_DROP */
+ }
+
+ if (sks != skw) {
+ struct pf_state_key *sk;
+
+ if (pd->dir == PF_IN)
+ sk = sks;
+ else
+ sk = skw;
+ rewrite += pf_translate(pd,
+ &sk->addr[pd->af == pd->naf ? pd->sidx : pd->didx],
+ sk->port[pd->af == pd->naf ? pd->sidx : pd->didx],
+ &sk->addr[pd->af == pd->naf ? pd->didx : pd->sidx],
+ sk->port[pd->af == pd->naf ? pd->didx : pd->sidx],
+ virtual_type, ctx.icmp_dir);
+ }
+
+#ifdef INET6
+ if (rewrite && skw->af != sks->af)
+ action = PF_AFRT;
+#endif /* INET6 */
+
+ } else {
+ action = PF_PASS;
+
+ while ((ctx.ri = SLIST_FIRST(&ctx.rules))) {
+ SLIST_REMOVE_HEAD(&ctx.rules, entry);
+ pool_put(&pf_rule_item_pl, ctx.ri);
+ }
+ }
+
+ /* copy back packet headers if needed */
+ if (rewrite && pd->hdrlen) {
+ m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT);
+ }
+
+#if NPFSYNC > 0
+ if (*sm != NULL && !ISSET((*sm)->state_flags, PFSTATE_NOSYNC) &&
+ pd->dir == PF_OUT && pfsync_is_up()) {
+ /*
+ * We want the state created, but we dont
+ * want to send this in case a partner
+ * firewall has to know about it to allow
+ * replies through it.
+ */
+ if (pfsync_defer(*sm, pd->m))
+ return (PF_DEFER);
+ }
+#endif /* NPFSYNC > 0 */
+
+ return (action);
+
+cleanup:
+ while ((ctx.ri = SLIST_FIRST(&ctx.rules))) {
+ SLIST_REMOVE_HEAD(&ctx.rules, entry);
+ pool_put(&pf_rule_item_pl, ctx.ri);
+ }
+
+ return (action);
+}
+
+static __inline int
+pf_create_state(struct pf_pdesc *pd, struct pf_rule *r, struct pf_rule *a,
+ struct pf_rule *nr, struct pf_state_key **skw, struct pf_state_key **sks,
+ int *rewrite, struct pf_state **sm, int tag, struct pf_rule_slist *rules,
+ struct pf_rule_actions *act, struct pf_src_node *sns[PF_SN_MAX],
+ struct pf_test_ctx *ctx)
+{
+ struct pf_state *st = NULL;
+ struct pf_statelim *stlim = NULL;
+ struct pf_sourcelim *srlim = NULL;
+ struct pf_source *sr = NULL;
+ struct pf_state_link *pfl;
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ u_short reason;
+ u_int i;
+
+ st = pool_get(&pf_state_pl, PR_NOWAIT | PR_ZERO);
+ if (st == NULL) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+ st->rule.ptr = r;
+ st->anchor.ptr = a;
+ st->natrule.ptr = nr;
+ if (r->allow_opts)
+ st->state_flags |= PFSTATE_ALLOWOPTS;
+ if (r->rule_flag & PFRULE_STATESLOPPY)
+ st->state_flags |= PFSTATE_SLOPPY;
+ if (r->rule_flag & PFRULE_PFLOW)
+ st->state_flags |= PFSTATE_PFLOW;
+ if (r->rule_flag & PFRULE_NOSYNC)
+ st->state_flags |= PFSTATE_NOSYNC;
+#if NPFLOG > 0
+ st->log = act->log & PF_LOG_ALL;
+#endif /* NPFLOG > 0 */
+ st->qid = act->qid;
+ st->pqid = act->pqid;
+ st->rtableid[pd->didx] = act->rtableid;
+ st->rtableid[pd->sidx] = -1; /* return traffic is routed normally */
+ st->min_ttl = act->min_ttl;
+ st->set_tos = act->set_tos;
+ st->max_mss = act->max_mss;
+ st->state_flags |= act->flags;
+#if NPFSYNC > 0
+ st->sync_state = PFSYNC_S_NONE;
+#endif /* NPFSYNC > 0 */
+ st->set_prio[0] = act->set_prio[0];
+ st->set_prio[1] = act->set_prio[1];
+ st->delay = act->delay;
+ SLIST_INIT(&st->src_nodes);
+ SLIST_INIT(&st->linkage);
+
+ /*
+ * must initialize refcnt, before pf_state_insert() gets called.
+ * pf_state_inserts() grabs reference for pfsync!
+ */
+ PF_REF_INIT(st->refcnt);
+ mtx_init(&st->mtx, IPL_NET);
+
+ switch (pd->proto) {
+ case IPPROTO_TCP:
+ st->src.seqlo = ntohl(th->th_seq);
+ st->src.seqhi = st->src.seqlo + pd->p_len + 1;
+ if ((th->th_flags & (TH_SYN|TH_ACK)) == TH_SYN &&
+ r->keep_state == PF_STATE_MODULATE) {
+ /* Generate sequence number modulator */
+ st->src.seqdiff = pf_tcp_iss(pd) - st->src.seqlo;
+ if (st->src.seqdiff == 0)
+ st->src.seqdiff = 1;
+ pf_patch_32(pd, &th->th_seq,
+ htonl(st->src.seqlo + st->src.seqdiff));
+ *rewrite = 1;
+ } else
+ st->src.seqdiff = 0;
+ if (th->th_flags & TH_SYN) {
+ st->src.seqhi++;
+ st->src.wscale = pf_get_wscale(pd);
+ }
+ st->src.max_win = MAX(ntohs(th->th_win), 1);
+ if (st->src.wscale & PF_WSCALE_MASK) {
+ /* Remove scale factor from initial window */
+ int win = st->src.max_win;
+ win += 1 << (st->src.wscale & PF_WSCALE_MASK);
+ st->src.max_win = (win - 1) >>
+ (st->src.wscale & PF_WSCALE_MASK);
+ }
+ if (th->th_flags & TH_FIN)
+ st->src.seqhi++;
+ st->dst.seqhi = 1;
+ st->dst.max_win = 1;
+ pf_set_protostate(st, PF_PEER_SRC, TCPS_SYN_SENT);
+ pf_set_protostate(st, PF_PEER_DST, TCPS_CLOSED);
+ st->timeout = PFTM_TCP_FIRST_PACKET;
+ atomic_inc_int(&pf_status.states_halfopen);
+ break;
+ case IPPROTO_UDP:
+ pf_set_protostate(st, PF_PEER_SRC, PFUDPS_SINGLE);
+ pf_set_protostate(st, PF_PEER_DST, PFUDPS_NO_TRAFFIC);
+ st->timeout = PFTM_UDP_FIRST_PACKET;
+ break;
+ case IPPROTO_ICMP:
+#ifdef INET6
+ case IPPROTO_ICMPV6:
+#endif /* INET6 */
+ st->timeout = PFTM_ICMP_FIRST_PACKET;
+ break;
+ default:
+ pf_set_protostate(st, PF_PEER_SRC, PFOTHERS_SINGLE);
+ pf_set_protostate(st, PF_PEER_DST, PFOTHERS_NO_TRAFFIC);
+ st->timeout = PFTM_OTHER_FIRST_PACKET;
+ }
+
+ st->creation = st->expire = getuptime();
+
+ if (pd->proto == IPPROTO_TCP) {
+ if (st->state_flags & PFSTATE_SCRUB_TCP &&
+ pf_normalize_tcp_init(pd, &st->src)) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+ if (st->state_flags & PFSTATE_SCRUB_TCP && st->src.scrub &&
+ pf_normalize_tcp_stateful(pd, &reason, st,
+ &st->src, &st->dst, rewrite)) {
+ /* This really shouldn't happen!!! */
+ DPFPRINTF(LOG_ERR,
+ "%s: tcp normalize failed on first pkt", __func__);
+ goto csfailed;
+ }
+ }
+ st->direction = pd->dir;
+
+ if (pf_state_key_setup(pd, skw, sks, act->rtableid)) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+
+ if (pf_set_rt_ifp(st, pd->src, (*skw)->af, sns) != 0) {
+ REASON_SET(&reason, PFRES_NOROUTE);
+ goto csfailed;
+ }
+
+ for (i = 0; i < PF_SN_MAX; i++)
+ if (sns[i] != NULL) {
+ struct pf_sn_item *sni;
+
+ sni = pool_get(&pf_sn_item_pl, PR_NOWAIT);
+ if (sni == NULL) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+ sni->sn = sns[i];
+ SLIST_INSERT_HEAD(&st->src_nodes, sni, next);
+ sni->sn->states++;
+ }
+
+ stlim = ctx->statelim;
+ if (stlim != NULL) {
+ unsigned int gen;
+
+ PF_ASSERT_LOCKED();
+ pfl = pool_get(&pf_state_link_pl, PR_NOWAIT);
+ if (pfl == NULL) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+
+ gen = pf_statelim_enter(stlim);
+ stlim->pfstlim_counters.admitted++;
+ stlim->pfstlim_inuse++;
+ pf_statelim_leave(stlim, gen);
+
+ stlim->pfstlim_rate_ts += stlim->pfstlim_rate_token;
+
+ st->statelim = stlim->pfstlim_id;
+ pfl->pfl_state = st;
+ pfl->pfl_type = PF_STATE_LINK_TYPE_STATELIM;
+
+ TAILQ_INSERT_TAIL(&stlim->pfstlim_states, pfl, pfl_link);
+ SLIST_INSERT_HEAD(&st->linkage, pfl, pfl_linkage);
+ }
+
+ srlim = ctx->sourcelim;
+ if (srlim != NULL) {
+ unsigned int gen;
+
+ sr = ctx->source;
+ if (sr == NULL) {
+ sr = pool_get(&pf_source_pl, PR_NOWAIT|PR_ZERO);
+ if (sr == NULL) {
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.addrnomem++;
+ pf_sourcelim_leave(srlim, gen);
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+
+ sr->pfsr_parent = srlim;
+ pf_source_key(srlim, sr,
+ ctx->pd->af, ctx->pd->rdomain, ctx->pd->src);
+ TAILQ_INIT(&sr->pfsr_states);
+
+ if (RBT_INSERT(pf_source_tree,
+ &srlim->pfsrlim_sources, sr) != NULL) {
+ panic("%s: source pool %u (%p) "
+ "insert collision %p?!", __func__,
+ srlim->pfsrlim_id, srlim, sr);
+ }
+
+ if (RBT_INSERT(pf_source_ioc_tree,
+ &srlim->pfsrlim_ioc_sources, sr) != NULL) {
+ panic("%s: source pool %u (%p) ioc "
+ "insert collision (%p)?!", __func__,
+ srlim->pfsrlim_id, srlim, sr);
+ }
+
+ sr->pfsr_empty_ts = getuptime();
+ TAILQ_INSERT_TAIL(&pf_source_gc, sr,
+ pfsr_empty_gc);
+
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_nsources++;
+ srlim->pfsrlim_counters.addrallocs++;
+ pf_sourcelim_leave(srlim, gen);
+ } else {
+ KASSERT(sr->pfsr_parent == srlim);
+ }
+
+ PF_ASSERT_LOCKED();
+ pfl = pool_get(&pf_state_link_pl, PR_NOWAIT);
+ if (pfl == NULL) {
+ REASON_SET(&reason, PFRES_MEMORY);
+ goto csfailed;
+ }
+
+ pf_source_used(sr);
+
+ sr->pfsr_counters.admitted++;
+
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.inuse++;
+ srlim->pfsrlim_counters.admitted++;
+ pf_sourcelim_leave(srlim, gen);
+
+ st->sourcelim = srlim->pfsrlim_id;
+ pfl->pfl_state = st;
+ pfl->pfl_type = PF_STATE_LINK_TYPE_SOURCELIM;
+
+ TAILQ_INSERT_TAIL(&sr->pfsr_states, pfl, pfl_link);
+ SLIST_INSERT_HEAD(&st->linkage, pfl, pfl_linkage);
+ }
+
+#if NPFSYNC > 0
+ pfsync_init_state(st, *skw, *sks, 0);
+#endif
+
+ if (pf_state_insert(BOUND_IFACE(r, pd->kif), skw, sks, st)) {
+ *sks = *skw = NULL;
+ REASON_SET(&reason, PFRES_STATEINS);
+ goto csfailed;
+ } else
+ *sm = st;
+
+ /*
+ * Make state responsible for rules it binds here.
+ */
+ memcpy(&st->match_rules, rules, sizeof(st->match_rules));
+ memset(rules, 0, sizeof(*rules));
+ STATE_INC_COUNTERS(st);
+
+ if (tag > 0) {
+ pf_tag_ref(tag);
+ st->tag = tag;
+ }
+ if (pd->proto == IPPROTO_TCP && (th->th_flags & (TH_SYN|TH_ACK)) ==
+ TH_SYN && r->keep_state == PF_STATE_SYNPROXY && pd->dir == PF_IN) {
+ int rtid;
+ uint16_t mss, mssdflt;
+
+ rtid = (act->rtableid >= 0) ? act->rtableid : pd->rdomain;
+ pf_set_protostate(st, PF_PEER_SRC, PF_TCPS_PROXY_SRC);
+ st->src.seqhi = arc4random();
+ /* Find mss option */
+ mssdflt = atomic_load_int(&tcp_mssdflt);
+ mss = pf_get_mss(pd, mssdflt);
+ mss = pf_calc_mss(pd->src, pd->af, rtid, mss, mssdflt);
+ mss = pf_calc_mss(pd->dst, pd->af, rtid, mss, mssdflt);
+ st->src.mss = mss;
+ pf_send_tcp(r, pd->af, pd->dst, pd->src, th->th_dport,
+ th->th_sport, st->src.seqhi, ntohl(th->th_seq) + 1,
+ TH_SYN|TH_ACK, 0, st->src.mss, 0, 1, 0, pd->rdomain,
+ &reason);
+ REASON_SET(&reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+ }
+
+ return (PF_PASS);
+
+csfailed:
+ if (st) {
+ struct pf_state_link *npfl;
+
+ SLIST_FOREACH_SAFE(pfl, &st->linkage, pfl_linkage, npfl) {
+ struct pf_state_link_list *list;
+ unsigned int gen;
+
+ /* who needs KASSERTS when we have NULL derefs */
+
+ switch (pfl->pfl_type) {
+ case PF_STATE_LINK_TYPE_STATELIM:
+ gen = pf_statelim_enter(stlim);
+ stlim->pfstlim_inuse--;
+ pf_statelim_leave(stlim, gen);
+
+ stlim->pfstlim_rate_ts -=
+ stlim->pfstlim_rate_token;
+ list = &stlim->pfstlim_states;
+ break;
+ case PF_STATE_LINK_TYPE_SOURCELIM:
+ gen = pf_sourcelim_enter(srlim);
+ srlim->pfsrlim_counters.inuse--;
+ pf_sourcelim_leave(srlim, gen);
+
+ sr->pfsr_rate_ts -=
+ srlim->pfsrlim_rate_token;
+ pf_source_rele(sr);
+
+ list = &sr->pfsr_states;
+ break;
+ default:
+ panic("%s: unexpected link type on pfl %p",
+ __func__, pfl);
+ }
+
+ TAILQ_REMOVE(list, pfl, pfl_link);
+ PF_ASSERT_LOCKED();
+ pool_put(&pf_state_link_pl, pfl);
+ }
+
+ pf_normalize_tcp_cleanup(st); /* safe even w/o init */
+ pf_src_tree_remove_state(st);
+ pool_put(&pf_state_pl, st);
+ }
+
+ for (i = 0; i < PF_SN_MAX; i++)
+ if (sns[i] != NULL)
+ pf_remove_src_node(sns[i]);
+
+ return (PF_DROP);
+}
+
+int
+pf_translate(struct pf_pdesc *pd, struct pf_addr *saddr, u_int16_t sport,
+ struct pf_addr *daddr, u_int16_t dport, u_int16_t virtual_type,
+ int icmp_dir)
+{
+ int rewrite = 0;
+ int afto = pd->af != pd->naf;
+
+ if (afto || PF_ANEQ(daddr, pd->dst, pd->af))
+ pd->destchg = 1;
+
+ switch (pd->proto) {
+ case IPPROTO_TCP: /* FALLTHROUGH */
+ case IPPROTO_UDP:
+ rewrite += pf_patch_16(pd, pd->sport, sport);
+ rewrite += pf_patch_16(pd, pd->dport, dport);
+ break;
+
+ case IPPROTO_ICMP:
+ if (pd->af != AF_INET)
+ return (0);
+
+#ifdef INET6
+ if (afto) {
+ if (pf_translate_icmp_af(pd, AF_INET6, &pd->hdr.icmp))
+ return (0);
+ pd->proto = IPPROTO_ICMPV6;
+ rewrite = 1;
+ }
+#endif /* INET6 */
+ if (virtual_type == htons(ICMP_ECHO)) {
+ u_int16_t icmpid = (icmp_dir == PF_IN) ? sport : dport;
+ rewrite += pf_patch_16(pd,
+ &pd->hdr.icmp.icmp_id, icmpid);
+ }
+ break;
+
+#ifdef INET6
+ case IPPROTO_ICMPV6:
+ if (pd->af != AF_INET6)
+ return (0);
+
+ if (afto) {
+ if (pf_translate_icmp_af(pd, AF_INET, &pd->hdr.icmp6))
+ return (0);
+ pd->proto = IPPROTO_ICMP;
+ rewrite = 1;
+ }
+ if (virtual_type == htons(ICMP6_ECHO_REQUEST)) {
+ u_int16_t icmpid = (icmp_dir == PF_IN) ? sport : dport;
+ rewrite += pf_patch_16(pd,
+ &pd->hdr.icmp6.icmp6_id, icmpid);
+ }
+ break;
+#endif /* INET6 */
+ }
+
+ if (!afto) {
+ rewrite += pf_translate_a(pd, pd->src, saddr);
+ rewrite += pf_translate_a(pd, pd->dst, daddr);
+ }
+
+ return (rewrite);
+}
+
+int
+pf_tcp_track_full(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason,
+ int *copyback, int reverse)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ struct pf_state_peer *src, *dst;
+ u_int16_t win = ntohs(th->th_win);
+ u_int32_t ack, orig_ack, end, data_end, seq, orig_seq;
+ u_int8_t sws, dws, psrc, pdst;
+ int ackskew;
+
+ if ((pd->dir == (*stp)->direction && !reverse) ||
+ (pd->dir != (*stp)->direction && reverse)) {
+ src = &(*stp)->src;
+ dst = &(*stp)->dst;
+ psrc = PF_PEER_SRC;
+ pdst = PF_PEER_DST;
+ } else {
+ src = &(*stp)->dst;
+ dst = &(*stp)->src;
+ psrc = PF_PEER_DST;
+ pdst = PF_PEER_SRC;
+ }
+
+ if (src->wscale && dst->wscale && !(th->th_flags & TH_SYN)) {
+ sws = src->wscale & PF_WSCALE_MASK;
+ dws = dst->wscale & PF_WSCALE_MASK;
+ } else
+ sws = dws = 0;
+
+ /*
+ * Sequence tracking algorithm from Guido van Rooij's paper:
+ * http://www.madison-gurkha.com/publications/tcp_filtering/
+ * tcp_filtering.ps
+ */
+
+ orig_seq = seq = ntohl(th->th_seq);
+ if (src->seqlo == 0) {
+ /* First packet from this end. Set its state */
+
+ if (((*stp)->state_flags & PFSTATE_SCRUB_TCP || dst->scrub) &&
+ src->scrub == NULL) {
+ if (pf_normalize_tcp_init(pd, src)) {
+ REASON_SET(reason, PFRES_MEMORY);
+ return (PF_DROP);
+ }
+ }
+
+ /* Deferred generation of sequence number modulator */
+ if (dst->seqdiff && !src->seqdiff) {
+ /* use random iss for the TCP server */
+ while ((src->seqdiff = arc4random() - seq) == 0)
+ continue;
+ ack = ntohl(th->th_ack) - dst->seqdiff;
+ pf_patch_32(pd, &th->th_seq, htonl(seq + src->seqdiff));
+ pf_patch_32(pd, &th->th_ack, htonl(ack));
+ *copyback = 1;
+ } else {
+ ack = ntohl(th->th_ack);
+ }
+
+ end = seq + pd->p_len;
+ if (th->th_flags & TH_SYN) {
+ end++;
+ if (dst->wscale & PF_WSCALE_FLAG) {
+ src->wscale = pf_get_wscale(pd);
+ if (src->wscale & PF_WSCALE_FLAG) {
+ /* Remove scale factor from initial
+ * window */
+ sws = src->wscale & PF_WSCALE_MASK;
+ win = ((u_int32_t)win + (1 << sws) - 1)
+ >> sws;
+ dws = dst->wscale & PF_WSCALE_MASK;
+ } else {
+ /* fixup other window */
+ dst->max_win = MIN(TCP_MAXWIN,
+ (u_int32_t)dst->max_win <<
+ (dst->wscale & PF_WSCALE_MASK));
+ /* in case of a retrans SYN|ACK */
+ dst->wscale = 0;
+ }
+ }
+ }
+ data_end = end;
+ if (th->th_flags & TH_FIN)
+ end++;
+
+ src->seqlo = seq;
+ if (src->state < TCPS_SYN_SENT)
+ pf_set_protostate(*stp, psrc, TCPS_SYN_SENT);
+
+ /*
+ * May need to slide the window (seqhi may have been set by
+ * the crappy stack check or if we picked up the connection
+ * after establishment)
+ */
+ if (src->seqhi == 1 ||
+ SEQ_GEQ(end + MAX(1, dst->max_win << dws), src->seqhi))
+ src->seqhi = end + MAX(1, dst->max_win << dws);
+ if (win > src->max_win)
+ src->max_win = win;
+
+ } else {
+ ack = ntohl(th->th_ack) - dst->seqdiff;
+ if (src->seqdiff) {
+ /* Modulate sequence numbers */
+ pf_patch_32(pd, &th->th_seq, htonl(seq + src->seqdiff));
+ pf_patch_32(pd, &th->th_ack, htonl(ack));
+ *copyback = 1;
+ }
+ end = seq + pd->p_len;
+ if (th->th_flags & TH_SYN)
+ end++;
+ data_end = end;
+ if (th->th_flags & TH_FIN)
+ end++;
+ }
+ orig_ack = ack;
+
+ if ((th->th_flags & TH_ACK) == 0) {
+ /* Let it pass through the ack skew check */
+ ack = dst->seqlo;
+ } else if ((ack == 0 &&
+ (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) ||
+ /* broken tcp stacks do not set ack */
+ (dst->state < TCPS_SYN_SENT)) {
+ /*
+ * Many stacks (ours included) will set the ACK number in an
+ * FIN|ACK if the SYN times out -- no sequence to ACK.
+ */
+ ack = dst->seqlo;
+ }
+
+ if (seq == end) {
+ /* Ease sequencing restrictions on no data packets */
+ seq = src->seqlo;
+ data_end = end = seq;
+ }
+
+ ackskew = dst->seqlo - ack;
+
+
+ /*
+ * Need to demodulate the sequence numbers in any TCP SACK options
+ * (Selective ACK). We could optionally validate the SACK values
+ * against the current ACK window, either forwards or backwards, but
+ * I'm not confident that SACK has been implemented properly
+ * everywhere. It wouldn't surprise me if several stacks accidentally
+ * SACK too far backwards of previously ACKed data. There really aren't
+ * any security implications of bad SACKing unless the target stack
+ * doesn't validate the option length correctly. Someone trying to
+ * spoof into a TCP connection won't bother blindly sending SACK
+ * options anyway.
+ */
+ if (dst->seqdiff && (th->th_off << 2) > sizeof(struct pf_tcphdr)) {
+ if (pf_modulate_sack(pd, dst))
+ *copyback = 1;
+ }
+
+
+#define MAXACKWINDOW (0xffff + 1500) /* 1500 is an arbitrary fudge factor */
+ if (SEQ_GEQ(src->seqhi, data_end) &&
+ /* Last octet inside other's window space */
+ SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) &&
+ /* Retrans: not more than one window back */
+ (ackskew >= -MAXACKWINDOW) &&
+ /* Acking not more than one reassembled fragment backwards */
+ (ackskew <= (MAXACKWINDOW << sws)) &&
+ /* Acking not more than one window forward */
+ ((th->th_flags & TH_RST) == 0 || orig_seq == src->seqlo ||
+ (orig_seq == src->seqlo + 1) || (orig_seq + 1 == src->seqlo) ||
+ /* Require an exact/+1 sequence match on resets when possible */
+ (SEQ_GEQ(orig_seq, src->seqlo - (dst->max_win << dws)) &&
+ SEQ_LEQ(orig_seq, src->seqlo + 1) && orig_ack == dst->seqlo &&
+ (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)))) {
+ /* Allow resets to match sequence window if ack is perfect match */
+
+ if (dst->scrub || src->scrub) {
+ if (pf_normalize_tcp_stateful(pd, reason, *stp, src,
+ dst, copyback))
+ return (PF_DROP);
+ }
+
+ /* update max window */
+ if (src->max_win < win)
+ src->max_win = win;
+ /* synchronize sequencing */
+ if (SEQ_GT(end, src->seqlo))
+ src->seqlo = end;
+ /* slide the window of what the other end can send */
+ if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
+ dst->seqhi = ack + MAX((win << sws), 1);
+
+ /* update states */
+ if (th->th_flags & TH_SYN)
+ if (src->state < TCPS_SYN_SENT)
+ pf_set_protostate(*stp, psrc, TCPS_SYN_SENT);
+ if (th->th_flags & TH_FIN)
+ if (src->state < TCPS_CLOSING)
+ pf_set_protostate(*stp, psrc, TCPS_CLOSING);
+ if (th->th_flags & TH_ACK) {
+ if (dst->state == TCPS_SYN_SENT) {
+ pf_set_protostate(*stp, pdst,
+ TCPS_ESTABLISHED);
+ if (src->state == TCPS_ESTABLISHED &&
+ !SLIST_EMPTY(&(*stp)->src_nodes) &&
+ pf_src_connlimit(stp)) {
+ REASON_SET(reason, PFRES_SRCLIMIT);
+ return (PF_DROP);
+ }
+ } else if (dst->state == TCPS_CLOSING)
+ pf_set_protostate(*stp, pdst,
+ TCPS_FIN_WAIT_2);
+ }
+ if (th->th_flags & TH_RST)
+ pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT);
+
+ /* update expire time */
+ (*stp)->expire = getuptime();
+ if (src->state >= TCPS_FIN_WAIT_2 &&
+ dst->state >= TCPS_FIN_WAIT_2)
+ pf_update_state_timeout(*stp, PFTM_TCP_CLOSED);
+ else if (src->state >= TCPS_CLOSING &&
+ dst->state >= TCPS_CLOSING)
+ pf_update_state_timeout(*stp, PFTM_TCP_FIN_WAIT);
+ else if (src->state < TCPS_ESTABLISHED ||
+ dst->state < TCPS_ESTABLISHED)
+ pf_update_state_timeout(*stp, PFTM_TCP_OPENING);
+ else if (src->state >= TCPS_CLOSING ||
+ dst->state >= TCPS_CLOSING)
+ pf_update_state_timeout(*stp, PFTM_TCP_CLOSING);
+ else
+ pf_update_state_timeout(*stp, PFTM_TCP_ESTABLISHED);
+
+ /* Fall through to PASS packet */
+ } else if ((dst->state < TCPS_SYN_SENT ||
+ dst->state >= TCPS_FIN_WAIT_2 ||
+ src->state >= TCPS_FIN_WAIT_2) &&
+ SEQ_GEQ(src->seqhi + MAXACKWINDOW, data_end) &&
+ /* Within a window forward of the originating packet */
+ SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW)) {
+ /* Within a window backward of the originating packet */
+
+ /*
+ * This currently handles three situations:
+ * 1) Stupid stacks will shotgun SYNs before their peer
+ * replies.
+ * 2) When PF catches an already established stream (the
+ * firewall rebooted, the state table was flushed, routes
+ * changed...)
+ * 3) Packets get funky immediately after the connection
+ * closes (this should catch Solaris spurious ACK|FINs
+ * that web servers like to spew after a close)
+ *
+ * This must be a little more careful than the above code
+ * since packet floods will also be caught here. We don't
+ * update the TTL here to mitigate the damage of a packet
+ * flood and so the same code can handle awkward establishment
+ * and a loosened connection close.
+ * In the establishment case, a correct peer response will
+ * validate the connection, go through the normal state code
+ * and keep updating the state TTL.
+ */
+
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: loose state match: ");
+ pf_print_state(*stp);
+ pf_print_flags(th->th_flags);
+ addlog(" seq=%u (%u) ack=%u len=%u ackskew=%d "
+ "pkts=%llu:%llu dir=%s,%s\n", seq, orig_seq, ack,
+ pd->p_len, ackskew, (*stp)->packets[0],
+ (*stp)->packets[1],
+ pd->dir == PF_IN ? "in" : "out",
+ pd->dir == (*stp)->direction ? "fwd" : "rev");
+ }
+
+ if (dst->scrub || src->scrub) {
+ if (pf_normalize_tcp_stateful(pd, reason, *stp, src,
+ dst, copyback))
+ return (PF_DROP);
+ }
+
+ /* update max window */
+ if (src->max_win < win)
+ src->max_win = win;
+ /* synchronize sequencing */
+ if (SEQ_GT(end, src->seqlo))
+ src->seqlo = end;
+ /* slide the window of what the other end can send */
+ if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
+ dst->seqhi = ack + MAX((win << sws), 1);
+
+ /*
+ * Cannot set dst->seqhi here since this could be a shotgunned
+ * SYN and not an already established connection.
+ */
+ if (th->th_flags & TH_FIN)
+ if (src->state < TCPS_CLOSING)
+ pf_set_protostate(*stp, psrc, TCPS_CLOSING);
+ if (th->th_flags & TH_RST)
+ pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT);
+
+ /* Fall through to PASS packet */
+ } else {
+ if ((*stp)->dst.state == TCPS_SYN_SENT &&
+ (*stp)->src.state == TCPS_SYN_SENT) {
+ /* Send RST for state mismatches during handshake */
+ if (!(th->th_flags & TH_RST))
+ pf_send_tcp((*stp)->rule.ptr, pd->af,
+ pd->dst, pd->src, th->th_dport,
+ th->th_sport, ntohl(th->th_ack), 0,
+ TH_RST, 0, 0,
+ (*stp)->rule.ptr->return_ttl, 1, 0,
+ pd->rdomain, reason);
+ src->seqlo = 0;
+ src->seqhi = 1;
+ src->max_win = 1;
+ } else if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: BAD state: ");
+ pf_print_state(*stp);
+ pf_print_flags(th->th_flags);
+ addlog(" seq=%u (%u) ack=%u len=%u ackskew=%d "
+ "pkts=%llu:%llu dir=%s,%s\n",
+ seq, orig_seq, ack, pd->p_len, ackskew,
+ (*stp)->packets[0], (*stp)->packets[1],
+ pd->dir == PF_IN ? "in" : "out",
+ pd->dir == (*stp)->direction ? "fwd" : "rev");
+ addlog("pf: State failure on: %c %c %c %c | %c %c\n",
+ SEQ_GEQ(src->seqhi, data_end) ? ' ' : '1',
+ SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) ?
+ ' ': '2',
+ (ackskew >= -MAXACKWINDOW) ? ' ' : '3',
+ (ackskew <= (MAXACKWINDOW << sws)) ? ' ' : '4',
+ SEQ_GEQ(src->seqhi + MAXACKWINDOW, data_end) ?
+ ' ' :'5',
+ SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW) ?' ' :'6');
+ }
+ REASON_SET(reason, PFRES_BADSTATE);
+ return (PF_DROP);
+ }
+
+ return (PF_PASS);
+}
+
+int
+pf_tcp_track_sloppy(struct pf_pdesc *pd, struct pf_state **stp,
+ u_short *reason)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ struct pf_state_peer *src, *dst;
+ u_int8_t psrc, pdst;
+
+ if (pd->dir == (*stp)->direction) {
+ src = &(*stp)->src;
+ dst = &(*stp)->dst;
+ psrc = PF_PEER_SRC;
+ pdst = PF_PEER_DST;
+ } else {
+ src = &(*stp)->dst;
+ dst = &(*stp)->src;
+ psrc = PF_PEER_DST;
+ pdst = PF_PEER_SRC;
+ }
+
+ if (th->th_flags & TH_SYN)
+ if (src->state < TCPS_SYN_SENT)
+ pf_set_protostate(*stp, psrc, TCPS_SYN_SENT);
+ if (th->th_flags & TH_FIN)
+ if (src->state < TCPS_CLOSING)
+ pf_set_protostate(*stp, psrc, TCPS_CLOSING);
+ if (th->th_flags & TH_ACK) {
+ if (dst->state == TCPS_SYN_SENT) {
+ pf_set_protostate(*stp, pdst, TCPS_ESTABLISHED);
+ if (src->state == TCPS_ESTABLISHED &&
+ !SLIST_EMPTY(&(*stp)->src_nodes) &&
+ pf_src_connlimit(stp)) {
+ REASON_SET(reason, PFRES_SRCLIMIT);
+ return (PF_DROP);
+ }
+ } else if (dst->state == TCPS_CLOSING) {
+ pf_set_protostate(*stp, pdst, TCPS_FIN_WAIT_2);
+ } else if (src->state == TCPS_SYN_SENT &&
+ dst->state < TCPS_SYN_SENT) {
+ /*
+ * Handle a special sloppy case where we only see one
+ * half of the connection. If there is a ACK after
+ * the initial SYN without ever seeing a packet from
+ * the destination, set the connection to established.
+ */
+ pf_set_protostate(*stp, PF_PEER_BOTH,
+ TCPS_ESTABLISHED);
+ if (!SLIST_EMPTY(&(*stp)->src_nodes) &&
+ pf_src_connlimit(stp)) {
+ REASON_SET(reason, PFRES_SRCLIMIT);
+ return (PF_DROP);
+ }
+ } else if (src->state == TCPS_CLOSING &&
+ dst->state == TCPS_ESTABLISHED &&
+ dst->seqlo == 0) {
+ /*
+ * Handle the closing of half connections where we
+ * don't see the full bidirectional FIN/ACK+ACK
+ * handshake.
+ */
+ pf_set_protostate(*stp, pdst, TCPS_CLOSING);
+ }
+ }
+ if (th->th_flags & TH_RST)
+ pf_set_protostate(*stp, PF_PEER_BOTH, TCPS_TIME_WAIT);
+
+ /* update expire time */
+ (*stp)->expire = getuptime();
+ if (src->state >= TCPS_FIN_WAIT_2 &&
+ dst->state >= TCPS_FIN_WAIT_2)
+ pf_update_state_timeout(*stp, PFTM_TCP_CLOSED);
+ else if (src->state >= TCPS_CLOSING &&
+ dst->state >= TCPS_CLOSING)
+ pf_update_state_timeout(*stp, PFTM_TCP_FIN_WAIT);
+ else if (src->state < TCPS_ESTABLISHED ||
+ dst->state < TCPS_ESTABLISHED)
+ pf_update_state_timeout(*stp, PFTM_TCP_OPENING);
+ else if (src->state >= TCPS_CLOSING ||
+ dst->state >= TCPS_CLOSING)
+ pf_update_state_timeout(*stp, PFTM_TCP_CLOSING);
+ else
+ pf_update_state_timeout(*stp, PFTM_TCP_ESTABLISHED);
+
+ return (PF_PASS);
+}
+
+static __inline int
+pf_synproxy(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason)
+{
+ struct pf_state_key *sk = (*stp)->key[pd->didx];
+
+ if ((*stp)->src.state == PF_TCPS_PROXY_SRC) {
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+
+ if (pd->dir != (*stp)->direction) {
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+ }
+ if (th->th_flags & TH_SYN) {
+ if (ntohl(th->th_seq) != (*stp)->src.seqlo) {
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_DROP);
+ }
+ pf_send_tcp((*stp)->rule.ptr, pd->af, pd->dst,
+ pd->src, th->th_dport, th->th_sport,
+ (*stp)->src.seqhi, ntohl(th->th_seq) + 1,
+ TH_SYN|TH_ACK, 0, (*stp)->src.mss, 0, 1,
+ 0, pd->rdomain, reason);
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+ } else if ((th->th_flags & (TH_ACK|TH_RST|TH_FIN)) != TH_ACK ||
+ (ntohl(th->th_ack) != (*stp)->src.seqhi + 1) ||
+ (ntohl(th->th_seq) != (*stp)->src.seqlo + 1)) {
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_DROP);
+ } else if (!SLIST_EMPTY(&(*stp)->src_nodes) &&
+ pf_src_connlimit(stp)) {
+ REASON_SET(reason, PFRES_SRCLIMIT);
+ return (PF_DROP);
+ } else
+ pf_set_protostate(*stp, PF_PEER_SRC,
+ PF_TCPS_PROXY_DST);
+ }
+ if ((*stp)->src.state == PF_TCPS_PROXY_DST) {
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+
+ if (pd->dir == (*stp)->direction) {
+ if (((th->th_flags & (TH_SYN|TH_ACK)) != TH_ACK) ||
+ (ntohl(th->th_ack) != (*stp)->src.seqhi + 1) ||
+ (ntohl(th->th_seq) != (*stp)->src.seqlo + 1)) {
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_DROP);
+ }
+ (*stp)->src.max_win = MAX(ntohs(th->th_win), 1);
+ if ((*stp)->dst.seqhi == 1)
+ (*stp)->dst.seqhi = arc4random();
+ pf_send_tcp((*stp)->rule.ptr, pd->af,
+ &sk->addr[pd->sidx], &sk->addr[pd->didx],
+ sk->port[pd->sidx], sk->port[pd->didx],
+ (*stp)->dst.seqhi, 0, TH_SYN, 0,
+ (*stp)->src.mss, 0, 0, (*stp)->tag,
+ sk->rdomain, reason);
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+ } else if (((th->th_flags & (TH_SYN|TH_ACK)) !=
+ (TH_SYN|TH_ACK)) ||
+ (ntohl(th->th_ack) != (*stp)->dst.seqhi + 1)) {
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_DROP);
+ } else {
+ (*stp)->dst.max_win = MAX(ntohs(th->th_win), 1);
+ (*stp)->dst.seqlo = ntohl(th->th_seq);
+ pf_send_tcp((*stp)->rule.ptr, pd->af, pd->dst,
+ pd->src, th->th_dport, th->th_sport,
+ ntohl(th->th_ack), ntohl(th->th_seq) + 1,
+ TH_ACK, (*stp)->src.max_win, 0, 0, 0,
+ (*stp)->tag, pd->rdomain, reason);
+ pf_send_tcp((*stp)->rule.ptr, pd->af,
+ &sk->addr[pd->sidx], &sk->addr[pd->didx],
+ sk->port[pd->sidx], sk->port[pd->didx],
+ (*stp)->src.seqhi + 1, (*stp)->src.seqlo + 1,
+ TH_ACK, (*stp)->dst.max_win, 0, 0, 1,
+ 0, sk->rdomain, reason);
+ (*stp)->src.seqdiff = (*stp)->dst.seqhi -
+ (*stp)->src.seqlo;
+ (*stp)->dst.seqdiff = (*stp)->src.seqhi -
+ (*stp)->dst.seqlo;
+ (*stp)->src.seqhi = (*stp)->src.seqlo +
+ (*stp)->dst.max_win;
+ (*stp)->dst.seqhi = (*stp)->dst.seqlo +
+ (*stp)->src.max_win;
+ (*stp)->src.wscale = (*stp)->dst.wscale = 0;
+ pf_set_protostate(*stp, PF_PEER_BOTH,
+ TCPS_ESTABLISHED);
+ REASON_SET(reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+ }
+ }
+ return (PF_PASS);
+}
+
+static __inline int
+pf_synproxy_ack(struct pf_rule *r, struct pf_pdesc *pd, struct pf_state **sm,
+ struct pf_rule_actions *act)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ struct pf_state *s;
+ u_int16_t mss, mssdflt;
+ int rtid;
+ u_short reason;
+
+ if ((th->th_flags & (TH_SYN|TH_ACK)) != TH_SYN)
+ return (PF_PASS);
+
+ s = *sm;
+ rtid = (act->rtableid >= 0) ? act->rtableid : pd->rdomain;
+
+ pf_set_protostate(s, PF_PEER_SRC, PF_TCPS_PROXY_SRC);
+ s->src.seqhi = arc4random();
+ /* Find mss option */
+ mssdflt = atomic_load_int(&tcp_mssdflt);
+ mss = pf_get_mss(pd, mssdflt);
+ mss = pf_calc_mss(pd->src, pd->af, rtid, mss, mssdflt);
+ mss = pf_calc_mss(pd->dst, pd->af, rtid, mss, mssdflt);
+ s->src.mss = mss;
+
+ pf_send_tcp(r, pd->af, pd->dst, pd->src, th->th_dport,
+ th->th_sport, s->src.seqhi, ntohl(th->th_seq) + 1,
+ TH_SYN|TH_ACK, 0, s->src.mss, 0, 1, 0, pd->rdomain, NULL);
+
+ REASON_SET(&reason, PFRES_SYNPROXY);
+ return (PF_SYNPROXY_DROP);
+}
+
+int
+pf_test_state(struct pf_pdesc *pd, struct pf_state **stp, u_short *reason)
+{
+ int copyback = 0;
+ struct pf_state_peer *src, *dst;
+ int action;
+ u_int8_t psrc, pdst;
+
+ action = PF_PASS;
+ if (pd->dir == (*stp)->direction) {
+ src = &(*stp)->src;
+ dst = &(*stp)->dst;
+ psrc = PF_PEER_SRC;
+ pdst = PF_PEER_DST;
+ } else {
+ src = &(*stp)->dst;
+ dst = &(*stp)->src;
+ psrc = PF_PEER_DST;
+ pdst = PF_PEER_SRC;
+ }
+
+ switch (pd->virtual_proto) {
+ case IPPROTO_TCP:
+ if ((action = pf_synproxy(pd, stp, reason)) != PF_PASS)
+ return (action);
+ if ((pd->hdr.tcp.th_flags & (TH_SYN|TH_ACK)) == TH_SYN) {
+
+ if (dst->state >= TCPS_FIN_WAIT_2 &&
+ src->state >= TCPS_FIN_WAIT_2) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: state reuse ");
+ pf_print_state(*stp);
+ pf_print_flags(pd->hdr.tcp.th_flags);
+ addlog("\n");
+ }
+ /* XXX make sure it's the same direction ?? */
+ pf_update_state_timeout(*stp, PFTM_PURGE);
+ pf_state_unref(*stp);
+ *stp = NULL;
+ return (PF_DROP);
+ } else if (dst->state >= TCPS_ESTABLISHED &&
+ src->state >= TCPS_ESTABLISHED) {
+ /*
+ * SYN matches existing state???
+ * Typically happens when sender boots up after
+ * sudden panic. Certain protocols (NFSv3) are
+ * always using same port numbers. Challenge
+ * ACK enables all parties (firewall and peers)
+ * to get in sync again.
+ */
+ pf_send_challenge_ack(pd, *stp, src, dst,
+ reason);
+ return (PF_DROP);
+ }
+ }
+
+ if ((*stp)->state_flags & PFSTATE_SLOPPY) {
+ if (pf_tcp_track_sloppy(pd, stp, reason) == PF_DROP)
+ return (PF_DROP);
+ } else {
+ if (pf_tcp_track_full(pd, stp, reason, ©back,
+ PF_REVERSED_KEY((*stp)->key, pd->af)) == PF_DROP)
+ return (PF_DROP);
+ }
+ break;
+ case IPPROTO_UDP:
+ /* update states */
+ if (src->state < PFUDPS_SINGLE)
+ pf_set_protostate(*stp, psrc, PFUDPS_SINGLE);
+ if (dst->state == PFUDPS_SINGLE)
+ pf_set_protostate(*stp, pdst, PFUDPS_MULTIPLE);
+
+ /* update expire time */
+ (*stp)->expire = getuptime();
+ if (src->state == PFUDPS_MULTIPLE &&
+ dst->state == PFUDPS_MULTIPLE)
+ pf_update_state_timeout(*stp, PFTM_UDP_MULTIPLE);
+ else
+ pf_update_state_timeout(*stp, PFTM_UDP_SINGLE);
+ break;
+ default:
+ /* update states */
+ if (src->state < PFOTHERS_SINGLE)
+ pf_set_protostate(*stp, psrc, PFOTHERS_SINGLE);
+ if (dst->state == PFOTHERS_SINGLE)
+ pf_set_protostate(*stp, pdst, PFOTHERS_MULTIPLE);
+
+ /* update expire time */
+ (*stp)->expire = getuptime();
+ if (src->state == PFOTHERS_MULTIPLE &&
+ dst->state == PFOTHERS_MULTIPLE)
+ pf_update_state_timeout(*stp, PFTM_OTHER_MULTIPLE);
+ else
+ pf_update_state_timeout(*stp, PFTM_OTHER_SINGLE);
+ break;
+ }
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] != (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd->didx : pd->sidx;
+ didx = afto ? pd->sidx : pd->didx;
+
+#ifdef INET6
+ if (afto) {
+ pf_addrcpy(&pd->nsaddr, &nk->addr[sidx], nk->af);
+ pf_addrcpy(&pd->ndaddr, &nk->addr[didx], nk->af);
+ pd->naf = nk->af;
+ action = PF_AFRT;
+ }
+#endif /* INET6 */
+
+ if (!afto)
+ pf_translate_a(pd, pd->src, &nk->addr[sidx]);
+
+ if (pd->sport != NULL)
+ pf_patch_16(pd, pd->sport, nk->port[sidx]);
+
+ if (afto || PF_ANEQ(pd->dst, &nk->addr[didx], pd->af) ||
+ pd->rdomain != nk->rdomain)
+ pd->destchg = 1;
+
+ if (!afto)
+ pf_translate_a(pd, pd->dst, &nk->addr[didx]);
+
+ if (pd->dport != NULL)
+ pf_patch_16(pd, pd->dport, nk->port[didx]);
+
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+ copyback = 1;
+ }
+
+ if (copyback && pd->hdrlen > 0) {
+ m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT);
+ }
+
+ return (action);
+}
+
+int
+pf_icmp_state_lookup(struct pf_pdesc *pd, struct pf_state_key_cmp *key,
+ struct pf_state **stp, u_int16_t icmpid, u_int16_t type,
+ int icmp_dir, int *iidx, int multi, int inner)
+{
+ int direction, action;
+
+ key->af = pd->af;
+ key->proto = pd->proto;
+ key->rdomain = pd->rdomain;
+ if (icmp_dir == PF_IN) {
+ *iidx = pd->sidx;
+ key->port[pd->sidx] = icmpid;
+ key->port[pd->didx] = type;
+ } else {
+ *iidx = pd->didx;
+ key->port[pd->sidx] = type;
+ key->port[pd->didx] = icmpid;
+ }
+
+ if (pf_state_key_addr_setup(pd, key, pd->sidx, pd->src, pd->didx,
+ pd->dst, pd->af, multi))
+ return (PF_DROP);
+
+ key->hash = pf_pkt_hash(key->af, key->proto,
+ &key->addr[0], &key->addr[1], 0, 0);
+
+ action = pf_find_state(pd, key, stp);
+ if (action != PF_MATCH)
+ return (action);
+
+ if ((*stp)->state_flags & PFSTATE_SLOPPY)
+ return (-1);
+
+ /* Is this ICMP message flowing in right direction? */
+ if ((*stp)->key[PF_SK_WIRE]->af != (*stp)->key[PF_SK_STACK]->af)
+ direction = (pd->af == (*stp)->key[PF_SK_WIRE]->af) ?
+ PF_IN : PF_OUT;
+ else
+ direction = (*stp)->direction;
+ if ((((!inner && direction == pd->dir) ||
+ (inner && direction != pd->dir)) ?
+ PF_IN : PF_OUT) != icmp_dir) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: icmp type %d in wrong direction (%d): ",
+ ntohs(type), icmp_dir);
+ pf_print_state(*stp);
+ addlog("\n");
+ }
+ return (PF_DROP);
+ }
+ return (-1);
+}
+
+int
+pf_test_state_icmp(struct pf_pdesc *pd, struct pf_state **stp,
+ u_short *reason)
+{
+ u_int16_t virtual_id, virtual_type;
+ u_int8_t icmptype, icmpcode;
+ int icmp_dir, iidx, ret, copyback = 0;
+
+ struct pf_state_key_cmp key;
+
+ switch (pd->proto) {
+ case IPPROTO_ICMP:
+ icmptype = pd->hdr.icmp.icmp_type;
+ icmpcode = pd->hdr.icmp.icmp_code;
+ break;
+#ifdef INET6
+ case IPPROTO_ICMPV6:
+ icmptype = pd->hdr.icmp6.icmp6_type;
+ icmpcode = pd->hdr.icmp6.icmp6_code;
+ break;
+#endif /* INET6 */
+ default:
+ panic("unhandled proto %d", pd->proto);
+ }
+
+ if (pf_icmp_mapping(pd, icmptype, &icmp_dir, &virtual_id,
+ &virtual_type) == 0) {
+ /*
+ * ICMP query/reply message not related to a TCP/UDP packet.
+ * Search for an ICMP state.
+ */
+ ret = pf_icmp_state_lookup(pd, &key, stp,
+ virtual_id, virtual_type, icmp_dir, &iidx,
+ 0, 0);
+ /* IPv6? try matching a multicast address */
+ if (ret == PF_DROP && pd->af == AF_INET6 && icmp_dir == PF_OUT)
+ ret = pf_icmp_state_lookup(pd, &key, stp, virtual_id,
+ virtual_type, icmp_dir, &iidx, 1, 0);
+ if (ret >= 0)
+ return (ret);
+
+ (*stp)->expire = getuptime();
+ pf_update_state_timeout(*stp, PFTM_ICMP_ERROR_REPLY);
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] != (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd->didx : pd->sidx;
+ didx = afto ? pd->sidx : pd->didx;
+ iidx = afto ? !iidx : iidx;
+#ifdef INET6
+ if (afto) {
+ pf_addrcpy(&pd->nsaddr, &nk->addr[sidx],
+ nk->af);
+ pf_addrcpy(&pd->ndaddr, &nk->addr[didx],
+ nk->af);
+ pd->naf = nk->af;
+ }
+#endif /* INET6 */
+ if (!afto) {
+ pf_translate_a(pd, pd->src, &nk->addr[sidx]);
+ pf_translate_a(pd, pd->dst, &nk->addr[didx]);
+ }
+
+ if (pd->rdomain != nk->rdomain)
+ pd->destchg = 1;
+ if (!afto && PF_ANEQ(pd->dst,
+ &nk->addr[didx], pd->af))
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ switch (pd->af) {
+ case AF_INET:
+#ifdef INET6
+ if (afto) {
+ if (pf_translate_icmp_af(pd, AF_INET6,
+ &pd->hdr.icmp))
+ return (PF_DROP);
+ pd->proto = IPPROTO_ICMPV6;
+ }
+#endif /* INET6 */
+ pf_patch_16(pd,
+ &pd->hdr.icmp.icmp_id, nk->port[iidx]);
+
+ m_copyback(pd->m, pd->off, ICMP_MINLEN,
+ &pd->hdr.icmp, M_NOWAIT);
+ copyback = 1;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (afto) {
+ if (pf_translate_icmp_af(pd, AF_INET,
+ &pd->hdr.icmp6))
+ return (PF_DROP);
+ pd->proto = IPPROTO_ICMP;
+ }
+
+ pf_patch_16(pd,
+ &pd->hdr.icmp6.icmp6_id, nk->port[iidx]);
+
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr), &pd->hdr.icmp6,
+ M_NOWAIT);
+ copyback = 1;
+ break;
+#endif /* INET6 */
+ }
+#ifdef INET6
+ if (afto)
+ return (PF_AFRT);
+#endif /* INET6 */
+ }
+ } else {
+ /*
+ * ICMP error message in response to a TCP/UDP packet.
+ * Extract the inner TCP/UDP header and search for that state.
+ */
+ struct pf_pdesc pd2;
+ struct pf_ip h2;
+#ifdef INET6
+ struct pf_ip6_hdr h2_6;
+#endif /* INET6 */
+ int ipoff2;
+
+ /* Initialize pd2 fields valid for both packets with pd. */
+ memset(&pd2, 0, sizeof(pd2));
+ pd2.af = pd->af;
+ pd2.dir = pd->dir;
+ pd2.kif = pd->kif;
+ pd2.m = pd->m;
+ pd2.rdomain = pd->rdomain;
+ /* Payload packet is from the opposite direction. */
+ pd2.sidx = (pd2.dir == PF_IN) ? 1 : 0;
+ pd2.didx = (pd2.dir == PF_IN) ? 0 : 1;
+ switch (pd->af) {
+ case AF_INET:
+ /* offset of h2 in mbuf chain */
+ ipoff2 = pd->off + ICMP_MINLEN;
+
+ if (!pf_pull_hdr(pd2.m, ipoff2, &h2, sizeof(h2),
+ reason, pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (ip)");
+ return (PF_DROP);
+ }
+ /*
+ * ICMP error messages don't refer to non-first
+ * fragments
+ */
+ if (h2.ip_off & htons(IP_OFFMASK)) {
+ REASON_SET(reason, PFRES_FRAG);
+ return (PF_DROP);
+ }
+
+ /* offset of protocol header that follows h2 */
+ pd2.off = ipoff2;
+ if (pf_walk_header(&pd2, &h2, reason) != PF_PASS)
+ return (PF_DROP);
+
+ pd2.tot_len = ntohs(h2.ip_len);
+ pd2.ttl = h2.ip_ttl;
+ pd2.src = (struct pf_addr *)&h2.ip_src;
+ pd2.dst = (struct pf_addr *)&h2.ip_dst;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ipoff2 = pd->off + sizeof(struct icmp6hdr);
+
+ if (!pf_pull_hdr(pd2.m, ipoff2, &h2_6, sizeof(h2_6),
+ reason, pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (ip6)");
+ return (PF_DROP);
+ }
+
+ pd2.off = ipoff2;
+ if (pf_walk_header6(&pd2, &h2_6, reason) != PF_PASS)
+ return (PF_DROP);
+
+ pd2.tot_len = ntohs(h2_6.ip6_plen) +
+ sizeof(struct pf_ip6_hdr);
+ pd2.ttl = h2_6.ip6_hlim;
+ pd2.src = (struct pf_addr *)&h2_6.ip6_src;
+ pd2.dst = (struct pf_addr *)&h2_6.ip6_dst;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(pd->af);
+ }
+
+ if (PF_ANEQ(pd->dst, pd2.src, pd->af)) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: BAD ICMP %d:%d outer dst: ",
+ icmptype, icmpcode);
+ pf_print_host(pd->src, 0, pd->af);
+ addlog(" -> ");
+ pf_print_host(pd->dst, 0, pd->af);
+ addlog(" inner src: ");
+ pf_print_host(pd2.src, 0, pd2.af);
+ addlog(" -> ");
+ pf_print_host(pd2.dst, 0, pd2.af);
+ addlog("\n");
+ }
+ REASON_SET(reason, PFRES_BADSTATE);
+ return (PF_DROP);
+ }
+
+ switch (pd2.proto) {
+ case IPPROTO_TCP: {
+ struct pf_tcphdr *th = &pd2.hdr.tcp;
+ u_int32_t seq;
+ struct pf_state_peer *src, *dst;
+ u_int8_t dws;
+ int action;
+
+ /*
+ * Only the first 8 bytes of the TCP header can be
+ * expected. Don't access any TCP header fields after
+ * th_seq, an ackskew test is not possible.
+ */
+ if (!pf_pull_hdr(pd2.m, pd2.off, th, 8, reason,
+ pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (tcp)");
+ return (PF_DROP);
+ }
+
+ key.af = pd2.af;
+ key.proto = IPPROTO_TCP;
+ key.rdomain = pd2.rdomain;
+ pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af);
+ pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af);
+ key.port[pd2.sidx] = th->th_sport;
+ key.port[pd2.didx] = th->th_dport;
+ key.hash = pf_pkt_hash(pd2.af, pd2.proto,
+ pd2.src, pd2.dst, th->th_sport, th->th_dport);
+
+ action = pf_find_state(&pd2, &key, stp);
+ if (action != PF_MATCH)
+ return (action);
+
+ if (pd2.dir == (*stp)->direction) {
+ if (PF_REVERSED_KEY((*stp)->key, pd->af)) {
+ src = &(*stp)->src;
+ dst = &(*stp)->dst;
+ } else {
+ src = &(*stp)->dst;
+ dst = &(*stp)->src;
+ }
+ } else {
+ if (PF_REVERSED_KEY((*stp)->key, pd->af)) {
+ src = &(*stp)->dst;
+ dst = &(*stp)->src;
+ } else {
+ src = &(*stp)->src;
+ dst = &(*stp)->dst;
+ }
+ }
+
+ if (src->wscale && dst->wscale)
+ dws = dst->wscale & PF_WSCALE_MASK;
+ else
+ dws = 0;
+
+ /* Demodulate sequence number */
+ seq = ntohl(th->th_seq) - src->seqdiff;
+ if (src->seqdiff) {
+ pf_patch_32(pd, &th->th_seq, htonl(seq));
+ copyback = 1;
+ }
+
+ if (!((*stp)->state_flags & PFSTATE_SLOPPY) &&
+ (!SEQ_GEQ(src->seqhi, seq) || !SEQ_GEQ(seq,
+ src->seqlo - (dst->max_win << dws)))) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: BAD ICMP %d:%d ",
+ icmptype, icmpcode);
+ pf_print_host(pd->src, 0, pd->af);
+ addlog(" -> ");
+ pf_print_host(pd->dst, 0, pd->af);
+ addlog(" state: ");
+ pf_print_state(*stp);
+ addlog(" seq=%u\n", seq);
+ }
+ REASON_SET(reason, PFRES_BADSTATE);
+ return (PF_DROP);
+ } else {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG,
+ "pf: OK ICMP %d:%d ",
+ icmptype, icmpcode);
+ pf_print_host(pd->src, 0, pd->af);
+ addlog(" -> ");
+ pf_print_host(pd->dst, 0, pd->af);
+ addlog(" state: ");
+ pf_print_state(*stp);
+ addlog(" seq=%u\n", seq);
+ }
+ }
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] !=
+ (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd2.didx : pd2.sidx;
+ didx = afto ? pd2.sidx : pd2.didx;
+
+#ifdef INET6
+ if (afto) {
+ if (pf_translate_icmp_af(pd, nk->af,
+ &pd->hdr.icmp))
+ return (PF_DROP);
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ if (pf_change_icmp_af(pd->m, ipoff2,
+ pd, &pd2, &nk->addr[sidx],
+ &nk->addr[didx], pd->af, nk->af))
+ return (PF_DROP);
+ pd->m->m_pkthdr.ph_rtableid =
+ nk->rdomain;
+ pd->destchg = 1;
+ pf_addrcpy(&pd->nsaddr,
+ &nk->addr[pd2.sidx], nk->af);
+ pf_addrcpy(&pd->ndaddr,
+ &nk->addr[pd2.didx], nk->af);
+ if (nk->af == AF_INET) {
+ pd->proto = IPPROTO_ICMP;
+ } else {
+ pd->proto = IPPROTO_ICMPV6;
+ /*
+ * IPv4 becomes IPv6 so we must
+ * copy IPv4 src addr to least
+ * 32bits in IPv6 address to
+ * keep traceroute/icmp
+ * working.
+ */
+ pd->nsaddr.addr32[3] =
+ pd->src->addr32[0];
+ }
+ pd->naf = nk->af;
+
+ pf_patch_16(pd,
+ &th->th_sport, nk->port[sidx]);
+ pf_patch_16(pd,
+ &th->th_dport, nk->port[didx]);
+
+ m_copyback(pd2.m, pd2.off, 8, th,
+ M_NOWAIT);
+ return (PF_AFRT);
+ }
+#endif /* INET6 */
+ if (PF_ANEQ(pd2.src,
+ &nk->addr[pd2.sidx], pd2.af) ||
+ nk->port[pd2.sidx] != th->th_sport)
+ pf_translate_icmp(pd, pd2.src,
+ &th->th_sport, pd->dst,
+ &nk->addr[pd2.sidx],
+ nk->port[pd2.sidx]);
+
+ if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx],
+ pd2.af) || pd2.rdomain != nk->rdomain)
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ if (PF_ANEQ(pd2.dst,
+ &nk->addr[pd2.didx], pd2.af) ||
+ nk->port[pd2.didx] != th->th_dport)
+ pf_translate_icmp(pd, pd2.dst,
+ &th->th_dport, pd->src,
+ &nk->addr[pd2.didx],
+ nk->port[pd2.didx]);
+ copyback = 1;
+ }
+
+ if (copyback) {
+ switch (pd2.af) {
+ case AF_INET:
+ m_copyback(pd->m, pd->off, ICMP_MINLEN,
+ &pd->hdr.icmp, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2),
+ &h2, M_NOWAIT);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2_6),
+ &h2_6, M_NOWAIT);
+ break;
+#endif /* INET6 */
+ }
+ m_copyback(pd2.m, pd2.off, 8, th, M_NOWAIT);
+ }
+ break;
+ }
+ case IPPROTO_UDP: {
+ struct pf_udphdr *uh = &pd2.hdr.udp;
+ int action;
+
+ if (!pf_pull_hdr(pd2.m, pd2.off, uh, sizeof(*uh),
+ reason, pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (udp)");
+ return (PF_DROP);
+ }
+
+ key.af = pd2.af;
+ key.proto = IPPROTO_UDP;
+ key.rdomain = pd2.rdomain;
+ pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af);
+ pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af);
+ key.port[pd2.sidx] = uh->uh_sport;
+ key.port[pd2.didx] = uh->uh_dport;
+ key.hash = pf_pkt_hash(pd2.af, pd2.proto,
+ pd2.src, pd2.dst, uh->uh_sport, uh->uh_dport);
+
+ action = pf_find_state(&pd2, &key, stp);
+ if (action != PF_MATCH)
+ return (action);
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] !=
+ (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd2.didx : pd2.sidx;
+ didx = afto ? pd2.sidx : pd2.didx;
+
+#ifdef INET6
+ if (afto) {
+ if (pf_translate_icmp_af(pd, nk->af,
+ &pd->hdr.icmp))
+ return (PF_DROP);
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ if (pf_change_icmp_af(pd->m, ipoff2,
+ pd, &pd2, &nk->addr[sidx],
+ &nk->addr[didx], pd->af, nk->af))
+ return (PF_DROP);
+ pd->m->m_pkthdr.ph_rtableid =
+ nk->rdomain;
+ pd->destchg = 1;
+ pf_addrcpy(&pd->nsaddr,
+ &nk->addr[pd2.sidx], nk->af);
+ pf_addrcpy(&pd->ndaddr,
+ &nk->addr[pd2.didx], nk->af);
+ if (nk->af == AF_INET) {
+ pd->proto = IPPROTO_ICMP;
+ } else {
+ pd->proto = IPPROTO_ICMPV6;
+ /*
+ * IPv4 becomes IPv6 so we must
+ * copy IPv4 src addr to least
+ * 32bits in IPv6 address to
+ * keep traceroute/icmp
+ * working.
+ */
+ pd->nsaddr.addr32[3] =
+ pd->src->addr32[0];
+ }
+ pd->naf = nk->af;
+
+ pf_patch_16(pd,
+ &uh->uh_sport, nk->port[sidx]);
+ pf_patch_16(pd,
+ &uh->uh_dport, nk->port[didx]);
+
+ m_copyback(pd2.m, pd2.off, sizeof(*uh),
+ uh, M_NOWAIT);
+ return (PF_AFRT);
+ }
+#endif /* INET6 */
+
+ if (PF_ANEQ(pd2.src,
+ &nk->addr[pd2.sidx], pd2.af) ||
+ nk->port[pd2.sidx] != uh->uh_sport)
+ pf_translate_icmp(pd, pd2.src,
+ &uh->uh_sport, pd->dst,
+ &nk->addr[pd2.sidx],
+ nk->port[pd2.sidx]);
+
+ if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx],
+ pd2.af) || pd2.rdomain != nk->rdomain)
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ if (PF_ANEQ(pd2.dst,
+ &nk->addr[pd2.didx], pd2.af) ||
+ nk->port[pd2.didx] != uh->uh_dport)
+ pf_translate_icmp(pd, pd2.dst,
+ &uh->uh_dport, pd->src,
+ &nk->addr[pd2.didx],
+ nk->port[pd2.didx]);
+
+ switch (pd2.af) {
+ case AF_INET:
+ m_copyback(pd->m, pd->off, ICMP_MINLEN,
+ &pd->hdr.icmp, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2),
+ &h2, M_NOWAIT);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2_6),
+ &h2_6, M_NOWAIT);
+ break;
+#endif /* INET6 */
+ }
+ /* Avoid recomputing quoted UDP checksum.
+ * note: udp6 0 csum invalid per rfc2460 p27.
+ * but presumed nothing cares in this context */
+ pf_patch_16(pd, &uh->uh_sum, 0);
+ m_copyback(pd2.m, pd2.off, sizeof(*uh), uh,
+ M_NOWAIT);
+ copyback = 1;
+ }
+ break;
+ }
+ case IPPROTO_ICMP: {
+ struct pf_icmp *iih = &pd2.hdr.icmp;
+
+ if (pd2.af != AF_INET) {
+ REASON_SET(reason, PFRES_NORM);
+ return (PF_DROP);
+ }
+
+ if (!pf_pull_hdr(pd2.m, pd2.off, iih, ICMP_MINLEN,
+ reason, pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (icmp)");
+ return (PF_DROP);
+ }
+
+ pf_icmp_mapping(&pd2, iih->icmp_type,
+ &icmp_dir, &virtual_id, &virtual_type);
+
+ ret = pf_icmp_state_lookup(&pd2, &key, stp,
+ virtual_id, virtual_type, icmp_dir, &iidx, 0, 1);
+ if (ret >= 0)
+ return (ret);
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] !=
+ (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd2.didx : pd2.sidx;
+ didx = afto ? pd2.sidx : pd2.didx;
+ iidx = afto ? !iidx : iidx;
+
+#ifdef INET6
+ if (afto) {
+ if (nk->af != AF_INET6)
+ return (PF_DROP);
+ if (pf_translate_icmp_af(pd, nk->af,
+ &pd->hdr.icmp))
+ return (PF_DROP);
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ if (pf_change_icmp_af(pd->m, ipoff2,
+ pd, &pd2, &nk->addr[sidx],
+ &nk->addr[didx], pd->af, nk->af))
+ return (PF_DROP);
+ pd->proto = IPPROTO_ICMPV6;
+ if (pf_translate_icmp_af(pd,
+ nk->af, iih))
+ return (PF_DROP);
+ if (virtual_type == htons(ICMP_ECHO))
+ pf_patch_16(pd, &iih->icmp_id,
+ nk->port[iidx]);
+ m_copyback(pd2.m, pd2.off, ICMP_MINLEN,
+ iih, M_NOWAIT);
+ pd->m->m_pkthdr.ph_rtableid =
+ nk->rdomain;
+ pd->destchg = 1;
+ pf_addrcpy(&pd->nsaddr,
+ &nk->addr[pd2.sidx], nk->af);
+ pf_addrcpy(&pd->ndaddr,
+ &nk->addr[pd2.didx], nk->af);
+ /*
+ * IPv4 becomes IPv6 so we must copy
+ * IPv4 src addr to least 32bits in
+ * IPv6 address to keep traceroute
+ * working.
+ */
+ pd->nsaddr.addr32[3] =
+ pd->src->addr32[0];
+ pd->naf = nk->af;
+ return (PF_AFRT);
+ }
+#endif /* INET6 */
+
+ if (PF_ANEQ(pd2.src,
+ &nk->addr[pd2.sidx], pd2.af) ||
+ (virtual_type == htons(ICMP_ECHO) &&
+ nk->port[iidx] != iih->icmp_id))
+ pf_translate_icmp(pd, pd2.src,
+ (virtual_type == htons(ICMP_ECHO)) ?
+ &iih->icmp_id : NULL,
+ pd->dst, &nk->addr[pd2.sidx],
+ (virtual_type == htons(ICMP_ECHO)) ?
+ nk->port[iidx] : 0);
+
+ if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx],
+ pd2.af) || pd2.rdomain != nk->rdomain)
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ if (PF_ANEQ(pd2.dst,
+ &nk->addr[pd2.didx], pd2.af))
+ pf_translate_icmp(pd, pd2.dst, NULL,
+ pd->src, &nk->addr[pd2.didx], 0);
+
+ m_copyback(pd->m, pd->off, ICMP_MINLEN,
+ &pd->hdr.icmp, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2), &h2,
+ M_NOWAIT);
+ m_copyback(pd2.m, pd2.off, ICMP_MINLEN, iih,
+ M_NOWAIT);
+ copyback = 1;
+ }
+ break;
+ }
+#ifdef INET6
+ case IPPROTO_ICMPV6: {
+ struct icmp6hdr *iih = &pd2.hdr.icmp6;
+
+ if (pd2.af != AF_INET6) {
+ REASON_SET(reason, PFRES_NORM);
+ return (PF_DROP);
+ }
+
+ if (!pf_pull_hdr(pd2.m, pd2.off, iih,
+ sizeof(struct icmp6hdr), reason, pd2.af)) {
+ DPFPRINTF(LOG_NOTICE,
+ "ICMP error message too short (icmp6)");
+ return (PF_DROP);
+ }
+
+ pf_icmp_mapping(&pd2, iih->icmp6_type,
+ &icmp_dir, &virtual_id, &virtual_type);
+ ret = pf_icmp_state_lookup(&pd2, &key, stp,
+ virtual_id, virtual_type, icmp_dir, &iidx, 0, 1);
+ /* IPv6? try matching a multicast address */
+ if (ret == PF_DROP && pd2.af == AF_INET6 &&
+ icmp_dir == PF_OUT)
+ ret = pf_icmp_state_lookup(&pd2, &key, stp,
+ virtual_id, virtual_type, icmp_dir, &iidx,
+ 1, 1);
+ if (ret >= 0)
+ return (ret);
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] !=
+ (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk;
+ int afto, sidx, didx;
+
+ if (PF_REVERSED_KEY((*stp)->key, pd->af))
+ nk = (*stp)->key[pd->sidx];
+ else
+ nk = (*stp)->key[pd->didx];
+
+ afto = pd->af != nk->af;
+ sidx = afto ? pd2.didx : pd2.sidx;
+ didx = afto ? pd2.sidx : pd2.didx;
+ iidx = afto ? !iidx : iidx;
+
+ if (afto) {
+ if (nk->af != AF_INET)
+ return (PF_DROP);
+ if (pf_translate_icmp_af(pd, nk->af,
+ &pd->hdr.icmp))
+ return (PF_DROP);
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ if (pf_change_icmp_af(pd->m, ipoff2,
+ pd, &pd2, &nk->addr[sidx],
+ &nk->addr[didx], pd->af, nk->af))
+ return (PF_DROP);
+ pd->proto = IPPROTO_ICMP;
+ if (pf_translate_icmp_af(pd,
+ nk->af, iih))
+ return (PF_DROP);
+ if (virtual_type ==
+ htons(ICMP6_ECHO_REQUEST))
+ pf_patch_16(pd, &iih->icmp6_id,
+ nk->port[iidx]);
+ m_copyback(pd2.m, pd2.off,
+ sizeof(struct icmp6hdr), iih,
+ M_NOWAIT);
+ pd->m->m_pkthdr.ph_rtableid =
+ nk->rdomain;
+ pd->destchg = 1;
+ pf_addrcpy(&pd->nsaddr,
+ &nk->addr[pd2.sidx], nk->af);
+ pf_addrcpy(&pd->ndaddr,
+ &nk->addr[pd2.didx], nk->af);
+ pd->naf = nk->af;
+ return (PF_AFRT);
+ }
+
+ if (PF_ANEQ(pd2.src,
+ &nk->addr[pd2.sidx], pd2.af) ||
+ ((virtual_type ==
+ htons(ICMP6_ECHO_REQUEST)) &&
+ nk->port[pd2.sidx] != iih->icmp6_id))
+ pf_translate_icmp(pd, pd2.src,
+ (virtual_type ==
+ htons(ICMP6_ECHO_REQUEST))
+ ? &iih->icmp6_id : NULL,
+ pd->dst, &nk->addr[pd2.sidx],
+ (virtual_type ==
+ htons(ICMP6_ECHO_REQUEST))
+ ? nk->port[iidx] : 0);
+
+ if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx],
+ pd2.af) || pd2.rdomain != nk->rdomain)
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ if (PF_ANEQ(pd2.dst,
+ &nk->addr[pd2.didx], pd2.af))
+ pf_translate_icmp(pd, pd2.dst, NULL,
+ pd->src, &nk->addr[pd2.didx], 0);
+
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr), &pd->hdr.icmp6,
+ M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2_6), &h2_6,
+ M_NOWAIT);
+ m_copyback(pd2.m, pd2.off,
+ sizeof(struct icmp6hdr), iih, M_NOWAIT);
+ copyback = 1;
+ }
+ break;
+ }
+#endif /* INET6 */
+ default: {
+ int action;
+
+ key.af = pd2.af;
+ key.proto = pd2.proto;
+ key.rdomain = pd2.rdomain;
+ pf_addrcpy(&key.addr[pd2.sidx], pd2.src, key.af);
+ pf_addrcpy(&key.addr[pd2.didx], pd2.dst, key.af);
+ key.port[0] = key.port[1] = 0;
+ key.hash = pf_pkt_hash(pd2.af, pd2.proto,
+ pd2.src, pd2.dst, 0, 0);
+
+ action = pf_find_state(&pd2, &key, stp);
+ if (action != PF_MATCH)
+ return (action);
+
+ /* translate source/destination address, if necessary */
+ if ((*stp)->key[PF_SK_WIRE] !=
+ (*stp)->key[PF_SK_STACK]) {
+ struct pf_state_key *nk =
+ (*stp)->key[pd->didx];
+
+ if (PF_ANEQ(pd2.src,
+ &nk->addr[pd2.sidx], pd2.af))
+ pf_translate_icmp(pd, pd2.src, NULL,
+ pd->dst, &nk->addr[pd2.sidx], 0);
+
+ if (PF_ANEQ(pd2.dst, &nk->addr[pd2.didx],
+ pd2.af) || pd2.rdomain != nk->rdomain)
+ pd->destchg = 1;
+ pd->m->m_pkthdr.ph_rtableid = nk->rdomain;
+
+ if (PF_ANEQ(pd2.dst,
+ &nk->addr[pd2.didx], pd2.af))
+ pf_translate_icmp(pd, pd2.dst, NULL,
+ pd->src, &nk->addr[pd2.didx], 0);
+
+ switch (pd2.af) {
+ case AF_INET:
+ m_copyback(pd->m, pd->off, ICMP_MINLEN,
+ &pd->hdr.icmp, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2),
+ &h2, M_NOWAIT);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ m_copyback(pd->m, pd->off,
+ sizeof(struct icmp6hdr),
+ &pd->hdr.icmp6, M_NOWAIT);
+ m_copyback(pd2.m, ipoff2, sizeof(h2_6),
+ &h2_6, M_NOWAIT);
+ break;
+#endif /* INET6 */
+ }
+ copyback = 1;
+ }
+ break;
+ }
+ }
+ }
+ if (copyback) {
+ m_copyback(pd->m, pd->off, pd->hdrlen, &pd->hdr, M_NOWAIT);
+ }
+
+ return (PF_PASS);
+}
+
+/*
+ * ipoff and off are measured from the start of the mbuf chain.
+ * h must be at "ipoff" on the mbuf chain.
+ */
+void *
+pf_pull_hdr(struct mbuf *m, int off, void *p, int len,
+ u_short *reasonp, sa_family_t af)
+{
+ int iplen = 0;
+
+ switch (af) {
+ case AF_INET: {
+ struct pf_ip *h = mtod(m, struct pf_ip *);
+ u_int16_t fragoff = (ntohs(h->ip_off) & IP_OFFMASK) << 3;
+
+ if (fragoff) {
+ REASON_SET(reasonp, PFRES_FRAG);
+ return (NULL);
+ }
+ iplen = ntohs(h->ip_len);
+ break;
+ }
+#ifdef INET6
+ case AF_INET6: {
+ struct pf_ip6_hdr *h = mtod(m, struct pf_ip6_hdr *);
+
+ iplen = ntohs(h->ip6_plen) + sizeof(struct pf_ip6_hdr);
+ break;
+ }
+#endif /* INET6 */
+ }
+ if (m->m_pkthdr.len < off + len || iplen < off + len) {
+ REASON_SET(reasonp, PFRES_SHORT);
+ return (NULL);
+ }
+ m_copydata(m, off, len, p);
+ return (p);
+}
+
+int
+pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *kif,
+ int rtableid)
+{
+ struct sockaddr_storage ss;
+ struct sockaddr_in *dst;
+ int ret = 1;
+ int check_mpath;
+#ifdef INET6
+ struct sockaddr_in6 *dst6;
+#endif /* INET6 */
+ struct rtentry *rt = NULL;
+
+ check_mpath = 0;
+ memset(&ss, 0, sizeof(ss));
+ switch (af) {
+ case AF_INET:
+ dst = (struct sockaddr_in *)&ss;
+ dst->sin_family = AF_INET;
+ dst->/* PFLINUX sin_len */;
+ dst->sin_addr = addr->v4;
+ if (atomic_load_int(&ipmultipath))
+ check_mpath = 1;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ /*
+ * Skip check for addresses with embedded interface scope,
+ * as they would always match anyway.
+ */
+ if (IN6_IS_SCOPE_EMBED(&addr->v6))
+ goto out;
+ dst6 = (struct sockaddr_in6 *)&ss;
+ dst6->sin6_family = AF_INET6;
+ dst6->sin6_len = sizeof(*dst6);
+ dst6->sin6_addr = addr->v6;
+ if (atomic_load_int(&ip6_multipath))
+ check_mpath = 1;
+ break;
+#endif /* INET6 */
+ }
+
+ /* Skip checks for ipsec interfaces */
+ if (kif != NULL && kif->pfik_ifp->if_type == IFT_ENC)
+ goto out;
+
+ rt = rtalloc(sstosa(&ss), 0, rtableid);
+ if (rt != NULL) {
+ /* No interface given, this is a no-route check */
+ if (kif == NULL)
+ goto out;
+
+ if (kif->pfik_ifp == NULL) {
+ ret = 0;
+ goto out;
+ }
+
+ /* Perform uRPF check if passed input interface */
+ ret = 0;
+ do {
+ if (rt->rt_ifidx == kif->pfik_ifp->if_index) {
+ ret = 1;
+#if NCARP > 0
+ } else {
+ struct ifnet *ifp;
+
+ smr_read_enter();
+ ifp = if_get_smr(rt->rt_ifidx);
+ if (ifp != NULL && ifp->if_type == IFT_CARP &&
+ ifp->if_carpdevidx ==
+ kif->pfik_ifp->if_index)
+ ret = 1;
+ smr_read_leave();
+#endif /* NCARP */
+ }
+
+ rt = rtable_iterate(rt);
+ } while (check_mpath == 1 && rt != NULL && ret == 0);
+ } else
+ ret = 0;
+out:
+ rtfree(rt);
+ return (ret);
+}
+
+int
+pf_rtlabel_match(struct pf_addr *addr, sa_family_t af, struct pf_addr_wrap *aw,
+ int rtableid)
+{
+ struct sockaddr_storage ss;
+ struct sockaddr_in *dst;
+#ifdef INET6
+ struct sockaddr_in6 *dst6;
+#endif /* INET6 */
+ struct rtentry *rt;
+ int ret = 0;
+
+ memset(&ss, 0, sizeof(ss));
+ switch (af) {
+ case AF_INET:
+ dst = (struct sockaddr_in *)&ss;
+ dst->sin_family = AF_INET;
+ dst->/* PFLINUX sin_len */;
+ dst->sin_addr = addr->v4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ dst6 = (struct sockaddr_in6 *)&ss;
+ dst6->sin6_family = AF_INET6;
+ dst6->sin6_len = sizeof(*dst6);
+ dst6->sin6_addr = addr->v6;
+ break;
+#endif /* INET6 */
+ }
+
+ rt = rtalloc(sstosa(&ss), RT_RESOLVE, rtableid);
+ if (rt != NULL) {
+ if (rt->rt_labelid == aw->v.rtlabel)
+ ret = 1;
+ rtfree(rt);
+ }
+
+ return (ret);
+}
+
+/* pf_route() may change pd->m, adjust local copies after calling */
+void
+pf_route(struct pf_pdesc *pd, struct pf_state *st)
+{
+ struct mbuf *m0;
+ struct mbuf_list ml;
+ struct sockaddr_in *dst, sin;
+ struct rtentry *rt = NULL;
+ struct pf_ip *ip;
+ struct ifnet *ifp = NULL;
+ unsigned int rtableid;
+
+ if (pd->m->m_pkthdr.pf.routed++ > 3) {
+ m_freem(pd->m);
+ pd->m = NULL;
+ return;
+ }
+
+ if (st->rt == PF_DUPTO) {
+ if ((m0 = m_dup_pkt(pd->m, max_linkhdr, M_NOWAIT)) == NULL)
+ return;
+ } else {
+ if ((st->rt == PF_REPLYTO) == (st->direction == pd->dir))
+ return;
+ m0 = pd->m;
+ pd->m = NULL;
+ }
+
+ if (m0->m_len < sizeof(struct pf_ip)) {
+ DPFPRINTF(LOG_ERR,
+ "%s: m0->m_len < sizeof(struct pf_ip)", __func__);
+ goto bad;
+ }
+
+ ip = mtod(m0, struct pf_ip *);
+
+ if (pd->dir == PF_IN) {
+ if (ip->ip_ttl <= IPTTLDEC) {
+ if (st->rt != PF_DUPTO) {
+ pf_send_icmp(m0, ICMP_TIMXCEED,
+ ICMP_TIMXCEED_INTRANS, 0,
+ pd->af, st->rule.ptr, pd->rdomain);
+ }
+ goto bad;
+ }
+ ip->ip_ttl -= IPTTLDEC;
+ }
+
+ memset(&sin, 0, sizeof(sin));
+ dst = &sin;
+ dst->sin_family = AF_INET;
+ dst->/* PFLINUX sin_len */;
+ dst->sin_addr = st->rt_addr.v4;
+ rtableid = m0->m_pkthdr.ph_rtableid;
+
+ rt = rtalloc_mpath(sintosa(dst), &ip->ip_src.s_addr, rtableid);
+ if (!rtisvalid(rt)) {
+ if (st->rt != PF_DUPTO) {
+ pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_HOST,
+ 0, pd->af, st->rule.ptr, pd->rdomain);
+ }
+ ipstat_inc(ips_noroute);
+ goto bad;
+ }
+
+ ifp = if_get(rt->rt_ifidx);
+ if (ifp == NULL)
+ goto bad;
+
+ /* A locally generated packet may have invalid source address. */
+ if ((ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET &&
+ (ifp->if_flags & PFIFF_LOOPBACK) == 0)
+ ip->ip_src = ifatoia(rt->rt_ifa)->ia_addr.sin_addr;
+
+ if (st->rt != PF_DUPTO && pd->dir == PF_IN) {
+ if (pf_test(AF_INET, PF_OUT, ifp, &m0) != PF_PASS)
+ goto bad;
+ else if (m0 == NULL)
+ goto done;
+ if (m0->m_len < sizeof(struct pf_ip)) {
+ DPFPRINTF(LOG_ERR,
+ "%s: m0->m_len < sizeof(struct pf_ip)", __func__);
+ goto bad;
+ }
+ ip = mtod(m0, struct pf_ip *);
+ }
+
+ if (if_output_tso(ifp, &m0, sintosa(dst), rt, ifp->if_mtu) ||
+ m0 == NULL)
+ goto done;
+
+ /*
+ * Too large for interface; fragment if possible.
+ * Must be able to put at least 8 bytes per fragment.
+ */
+ if (ip->ip_off & htons(IP_DF)) {
+ ipstat_inc(ips_cantfrag);
+ if (st->rt != PF_DUPTO)
+ pf_send_icmp(m0, ICMP_UNREACH, ICMP_UNREACH_NEEDFRAG,
+ ifp->if_mtu, pd->af, st->rule.ptr, pd->rdomain);
+ goto bad;
+ }
+
+ if (ip_fragment(m0, &ml, ifp, ifp->if_mtu) ||
+ if_output_ml(ifp, &ml, sintosa(dst), rt))
+ goto done;
+ ipstat_inc(ips_fragmented);
+
+done:
+ if_put(ifp);
+ rtfree(rt);
+ return;
+
+bad:
+ m_freem(m0);
+ goto done;
+}
+
+#ifdef INET6
+/* pf_route6() may change pd->m, adjust local copies after calling */
+void
+pf_route6(struct pf_pdesc *pd, struct pf_state *st)
+{
+ struct mbuf *m0;
+ struct sockaddr_in6 *dst, sin6;
+ struct rtentry *rt = NULL;
+ struct pf_ip6_hdr *ip6;
+ struct ifnet *ifp = NULL;
+ struct m_tag *mtag;
+ unsigned int rtableid;
+
+ if (pd->m->m_pkthdr.pf.routed++ > 3) {
+ m_freem(pd->m);
+ pd->m = NULL;
+ return;
+ }
+
+ if (st->rt == PF_DUPTO) {
+ if ((m0 = m_dup_pkt(pd->m, max_linkhdr, M_NOWAIT)) == NULL)
+ return;
+ } else {
+ if ((st->rt == PF_REPLYTO) == (st->direction == pd->dir))
+ return;
+ m0 = pd->m;
+ pd->m = NULL;
+ }
+
+ if (m0->m_len < sizeof(struct pf_ip6_hdr)) {
+ DPFPRINTF(LOG_ERR,
+ "%s: m0->m_len < sizeof(struct pf_ip6_hdr)", __func__);
+ goto bad;
+ }
+ ip6 = mtod(m0, struct pf_ip6_hdr *);
+
+ if (pd->dir == PF_IN) {
+ if (ip6->ip6_hlim <= IPV6_HLIMDEC) {
+ if (st->rt != PF_DUPTO) {
+ pf_send_icmp(m0, ICMP6_TIME_EXCEEDED,
+ ICMP6_TIME_EXCEED_TRANSIT, 0,
+ pd->af, st->rule.ptr, pd->rdomain);
+ }
+ goto bad;
+ }
+ ip6->ip6_hlim -= IPV6_HLIMDEC;
+ }
+
+ memset(&sin6, 0, sizeof(sin6));
+ dst = &sin6;
+ dst->sin6_family = AF_INET6;
+ dst->sin6_len = sizeof(*dst);
+ dst->sin6_addr = st->rt_addr.v6;
+ rtableid = m0->m_pkthdr.ph_rtableid;
+
+ rt = rtalloc_mpath(sin6tosa(dst), &ip6->ip6_src.s6_addr32[0],
+ rtableid);
+ if (!rtisvalid(rt)) {
+ if (st->rt != PF_DUPTO) {
+ pf_send_icmp(m0, ICMP6_DST_UNREACH,
+ ICMP6_DST_UNREACH_NOROUTE, 0,
+ pd->af, st->rule.ptr, pd->rdomain);
+ }
+ ip6stat_inc(ip6s_noroute);
+ goto bad;
+ }
+
+ ifp = if_get(rt->rt_ifidx);
+ if (ifp == NULL)
+ goto bad;
+
+ /* A locally generated packet may have invalid source address. */
+ if (IN6_IS_ADDR_LOOPBACK(&ip6->ip6_src) &&
+ (ifp->if_flags & PFIFF_LOOPBACK) == 0)
+ ip6->ip6_src = ifatoia6(rt->rt_ifa)->ia_addr.sin6_addr;
+
+ if (st->rt != PF_DUPTO && pd->dir == PF_IN) {
+ if (pf_test(AF_INET6, PF_OUT, ifp, &m0) != PF_PASS)
+ goto bad;
+ else if (m0 == NULL)
+ goto done;
+ if (m0->m_len < sizeof(struct pf_ip6_hdr)) {
+ DPFPRINTF(LOG_ERR,
+ "%s: m0->m_len < sizeof(struct pf_ip6_hdr)", __func__);
+ goto bad;
+ }
+ }
+
+ /*
+ * If packet has been reassembled by PF earlier, we have to
+ * use pf_refragment6() here to turn it back to fragments.
+ */
+ if ((mtag = m_tag_find(m0, PACKET_TAG_PF_REASSEMBLED, NULL))) {
+ (void) pf_refragment6(&m0, mtag, dst, ifp, rt);
+ goto done;
+ }
+
+ if (if_output_tso(ifp, &m0, sin6tosa(dst), rt, ifp->if_mtu) ||
+ m0 == NULL)
+ goto done;
+
+ ip6stat_inc(ip6s_cantfrag);
+ if (st->rt != PF_DUPTO)
+ pf_send_icmp(m0, ICMP6_PACKET_TOO_BIG, 0,
+ ifp->if_mtu, pd->af, st->rule.ptr, pd->rdomain);
+ goto bad;
+
+done:
+ if_put(ifp);
+ rtfree(rt);
+ return;
+
+bad:
+ m_freem(m0);
+ goto done;
+}
+#endif /* INET6 */
+
+/*
+ * check TCP checksum and set mbuf flag
+ * off is the offset where the protocol header starts
+ * len is the total length of protocol header plus payload
+ * returns 0 when the checksum is valid, otherwise returns 1.
+ * if the _OUT flag is set the checksum isn't done yet, consider these ok
+ */
+int
+pf_check_tcp_cksum(struct mbuf *m, int off, int len, sa_family_t af)
+{
+ u_int16_t sum;
+
+ if (m->m_pkthdr.csum_flags &
+ (M_TCP_CSUM_IN_OK | M_TCP_CSUM_OUT)) {
+ return (0);
+ }
+ if (m->m_pkthdr.csum_flags & M_TCP_CSUM_IN_BAD ||
+ off < sizeof(struct pf_ip) ||
+ m->m_pkthdr.len < off + len) {
+ return (1);
+ }
+
+ /* need to do it in software */
+ tcpstat_inc(tcps_inswcsum);
+
+ switch (af) {
+ case AF_INET:
+ if (m->m_len < sizeof(struct pf_ip))
+ return (1);
+
+ sum = in4_cksum(m, IPPROTO_TCP, off, len);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (m->m_len < sizeof(struct pf_ip6_hdr))
+ return (1);
+
+ sum = in6_cksum(m, IPPROTO_TCP, off, len);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ if (sum) {
+ tcpstat_inc(tcps_rcvbadsum);
+ m->m_pkthdr.csum_flags |= M_TCP_CSUM_IN_BAD;
+ return (1);
+ }
+
+ m->m_pkthdr.csum_flags |= M_TCP_CSUM_IN_OK;
+ return (0);
+}
+
+struct pf_divert *
+pf_find_divert(struct mbuf *m)
+{
+ struct m_tag *mtag;
+
+ if ((mtag = m_tag_find(m, PACKET_TAG_PF_DIVERT, NULL)) == NULL)
+ return (NULL);
+
+ return ((struct pf_divert *)(mtag + 1));
+}
+
+struct pf_divert *
+pf_get_divert(struct mbuf *m)
+{
+ struct m_tag *mtag;
+
+ if ((mtag = m_tag_find(m, PACKET_TAG_PF_DIVERT, NULL)) == NULL) {
+ mtag = m_tag_get(PACKET_TAG_PF_DIVERT, sizeof(struct pf_divert),
+ M_NOWAIT);
+ if (mtag == NULL)
+ return (NULL);
+ memset(mtag + 1, 0, sizeof(struct pf_divert));
+ m_tag_prepend(m, mtag);
+ }
+
+ return ((struct pf_divert *)(mtag + 1));
+}
+
+int
+pf_walk_option(struct pf_pdesc *pd, struct pf_ip *h, int off, int end,
+ u_short *reason)
+{
+ uint8_t type, length, opts[15 * 4 - sizeof(struct pf_ip)];
+
+ /* IP header in payload of ICMP packet may be too short */
+ if (pd->m->m_pkthdr.len < end) {
+ DPFPRINTF(LOG_NOTICE, "IP option too short");
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+
+ KASSERT(end - off <= sizeof(opts));
+ m_copydata(pd->m, off, end - off, opts);
+ end -= off;
+ off = 0;
+
+ while (off < end) {
+ type = opts[off];
+ if (type == IPOPT_EOL)
+ break;
+ if (type == IPOPT_NOP) {
+ off++;
+ continue;
+ }
+ if (off + 2 > end) {
+ DPFPRINTF(LOG_NOTICE, "IP length opt");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ length = opts[off + 1];
+ if (length < 2) {
+ DPFPRINTF(LOG_NOTICE, "IP short opt");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ if (off + length > end) {
+ DPFPRINTF(LOG_NOTICE, "IP long opt");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ switch (type) {
+ case IPOPT_RA:
+ SET(pd->badopts, PF_OPT_ROUTER_ALERT);
+ break;
+ default:
+ SET(pd->badopts, PF_OPT_OTHER);
+ break;
+ }
+ off += length;
+ }
+
+ return (PF_PASS);
+}
+
+int
+pf_walk_header(struct pf_pdesc *pd, struct pf_ip *h, u_short *reason)
+{
+ struct ip6_ext ext;
+ u_int32_t hlen, end;
+ int hdr_cnt;
+
+ hlen = h->ip_hl << 2;
+ if (hlen < sizeof(struct pf_ip) || hlen > ntohs(h->ip_len)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+ if (hlen != sizeof(struct pf_ip)) {
+ if (pf_walk_option(pd, h, pd->off + sizeof(struct pf_ip),
+ pd->off + hlen, reason) != PF_PASS)
+ return (PF_DROP);
+ /* header options which contain only padding is fishy */
+ if (pd->badopts == 0)
+ SET(pd->badopts, PF_OPT_OTHER);
+ }
+ end = pd->off + ntohs(h->ip_len);
+ pd->off += hlen;
+ pd->proto = h->ip_p;
+ /* IGMP packets have router alert options, allow them */
+ if (pd->proto == IPPROTO_IGMP) {
+ /*
+ * According to RFC 1112 ttl must be set to 1 in all IGMP
+ * packets sent to 224.0.0.1
+ */
+ if ((h->ip_ttl != 1) &&
+ (h->ip_dst.s_addr == INADDR_ALLHOSTS_GROUP)) {
+ DPFPRINTF(LOG_NOTICE, "Invalid IGMP");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ CLR(pd->badopts, PF_OPT_ROUTER_ALERT);
+ }
+ /* stop walking over non initial fragments */
+ if ((h->ip_off & htons(IP_OFFMASK)) != 0)
+ return (PF_PASS);
+
+ for (hdr_cnt = 0; hdr_cnt < pf_hdr_limit; hdr_cnt++) {
+ switch (pd->proto) {
+ case IPPROTO_AH:
+ /* fragments may be short */
+ if ((h->ip_off & htons(IP_MF | IP_OFFMASK)) != 0 &&
+ end < pd->off + sizeof(ext))
+ return (PF_PASS);
+ if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext),
+ reason, AF_INET)) {
+ DPFPRINTF(LOG_NOTICE, "IP short exthdr");
+ return (PF_DROP);
+ }
+ pd->off += (ext.ip6e_len + 2) * 4;
+ pd->proto = ext.ip6e_nxt;
+ break;
+ default:
+ return (PF_PASS);
+ }
+ }
+ DPFPRINTF(LOG_NOTICE, "IPv4 nested authentication header limit");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+}
+
+#ifdef INET6
+int
+pf_walk_option6(struct pf_pdesc *pd, struct pf_ip6_hdr *h, int off, int end,
+ u_short *reason)
+{
+ struct ip6_opt opt;
+ struct ip6_opt_jumbo jumbo;
+
+ while (off < end) {
+ if (!pf_pull_hdr(pd->m, off, &opt.ip6o_type,
+ sizeof(opt.ip6o_type), reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short opt type");
+ return (PF_DROP);
+ }
+ if (opt.ip6o_type == IP6OPT_PAD1) {
+ off++;
+ continue;
+ }
+ if (!pf_pull_hdr(pd->m, off, &opt, sizeof(opt),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short opt");
+ return (PF_DROP);
+ }
+ if (off + sizeof(opt) + opt.ip6o_len > end) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 long opt");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ switch (opt.ip6o_type) {
+ case IP6OPT_PADN:
+ break;
+ case IP6OPT_JUMBO:
+ SET(pd->badopts, PF_OPT_JUMBO);
+ if (pd->jumbolen != 0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 multiple jumbo");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ if (ntohs(h->ip6_plen) != 0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 bad jumbo plen");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ if (!pf_pull_hdr(pd->m, off, &jumbo, sizeof(jumbo),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short jumbo");
+ return (PF_DROP);
+ }
+ memcpy(&pd->jumbolen, jumbo.ip6oj_jumbo_len,
+ sizeof(pd->jumbolen));
+ pd->jumbolen = ntohl(pd->jumbolen);
+ if (pd->jumbolen < IPV6_MAXPACKET) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short jumbolen");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ break;
+ case IP6OPT_ROUTER_ALERT:
+ SET(pd->badopts, PF_OPT_ROUTER_ALERT);
+ break;
+ default:
+ SET(pd->badopts, PF_OPT_OTHER);
+ break;
+ }
+ off += sizeof(opt) + opt.ip6o_len;
+ }
+
+ return (PF_PASS);
+}
+
+int
+pf_walk_header6(struct pf_pdesc *pd, struct pf_ip6_hdr *h, u_short *reason)
+{
+ struct ip6_frag frag;
+ struct ip6_ext ext;
+ struct icmp6hdr icmp6;
+ struct ip6_rthdr rthdr;
+ u_int32_t end;
+ int hdr_cnt, fraghdr_cnt = 0, rthdr_cnt = 0;
+
+ pd->off += sizeof(struct pf_ip6_hdr);
+ end = pd->off + ntohs(h->ip6_plen);
+ pd->fragoff = pd->extoff = pd->jumbolen = 0;
+ pd->proto = h->ip6_nxt;
+
+ for (hdr_cnt = 0; hdr_cnt < pf_hdr_limit; hdr_cnt++) {
+ switch (pd->proto) {
+ case IPPROTO_ROUTING:
+ case IPPROTO_DSTOPTS:
+ SET(pd->badopts, PF_OPT_OTHER);
+ break;
+ case IPPROTO_HOPOPTS:
+ if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short exthdr");
+ return (PF_DROP);
+ }
+ if (pf_walk_option6(pd, h, pd->off + sizeof(ext),
+ pd->off + (ext.ip6e_len + 1) * 8, reason)
+ != PF_PASS)
+ return (PF_DROP);
+ /* option header which contains only padding is fishy */
+ if (pd->badopts == 0)
+ SET(pd->badopts, PF_OPT_OTHER);
+ break;
+ }
+ switch (pd->proto) {
+ case IPPROTO_FRAGMENT:
+ if (fraghdr_cnt++) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 multiple fragment");
+ REASON_SET(reason, PFRES_FRAG);
+ return (PF_DROP);
+ }
+ /* jumbo payload packets cannot be fragmented */
+ if (pd->jumbolen != 0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 fragmented jumbo");
+ REASON_SET(reason, PFRES_FRAG);
+ return (PF_DROP);
+ }
+ if (!pf_pull_hdr(pd->m, pd->off, &frag, sizeof(frag),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short fragment");
+ return (PF_DROP);
+ }
+ /* stop walking over non initial fragments */
+ if (ntohs((frag.ip6f_offlg & IP6F_OFF_MASK)) != 0) {
+ pd->fragoff = pd->off;
+ return (PF_PASS);
+ }
+ /* RFC6946: reassemble only non atomic fragments */
+ if (frag.ip6f_offlg & IP6F_MORE_FRAG)
+ pd->fragoff = pd->off;
+ pd->off += sizeof(frag);
+ pd->proto = frag.ip6f_nxt;
+ break;
+ case IPPROTO_ROUTING:
+ if (rthdr_cnt++) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 multiple rthdr");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ /* fragments may be short */
+ if (pd->fragoff != 0 && end < pd->off + sizeof(rthdr)) {
+ pd->off = pd->fragoff;
+ pd->proto = IPPROTO_FRAGMENT;
+ return (PF_PASS);
+ }
+ if (!pf_pull_hdr(pd->m, pd->off, &rthdr, sizeof(rthdr),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short rthdr");
+ return (PF_DROP);
+ }
+ if (rthdr.ip6r_type == IPV6_RTHDR_TYPE_0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 rthdr0");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ /* FALLTHROUGH */
+ case IPPROTO_HOPOPTS:
+ /* RFC2460 4.1: Hop-by-Hop only after IPv6 header */
+ if (pd->proto == IPPROTO_HOPOPTS && hdr_cnt > 0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 hopopts not first");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ /* FALLTHROUGH */
+ case IPPROTO_AH:
+ case IPPROTO_DSTOPTS:
+ /* fragments may be short */
+ if (pd->fragoff != 0 && end < pd->off + sizeof(ext)) {
+ pd->off = pd->fragoff;
+ pd->proto = IPPROTO_FRAGMENT;
+ return (PF_PASS);
+ }
+ if (!pf_pull_hdr(pd->m, pd->off, &ext, sizeof(ext),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short exthdr");
+ return (PF_DROP);
+ }
+ /* reassembly needs the ext header before the frag */
+ if (pd->fragoff == 0)
+ pd->extoff = pd->off;
+ if (pd->proto == IPPROTO_HOPOPTS && pd->fragoff == 0 &&
+ ntohs(h->ip6_plen) == 0 && pd->jumbolen != 0) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 missing jumbo");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ if (pd->proto == IPPROTO_AH)
+ pd->off += (ext.ip6e_len + 2) * 4;
+ else
+ pd->off += (ext.ip6e_len + 1) * 8;
+ pd->proto = ext.ip6e_nxt;
+ break;
+ case IPPROTO_ICMPV6:
+ /* fragments may be short, ignore inner header then */
+ if (pd->fragoff != 0 && end < pd->off + sizeof(icmp6)) {
+ pd->off = pd->fragoff;
+ pd->proto = IPPROTO_FRAGMENT;
+ return (PF_PASS);
+ }
+ if (!pf_pull_hdr(pd->m, pd->off, &icmp6, sizeof(icmp6),
+ reason, AF_INET6)) {
+ DPFPRINTF(LOG_NOTICE, "IPv6 short icmp6hdr");
+ return (PF_DROP);
+ }
+ /* ICMP multicast packets have router alert options */
+ switch (icmp6.icmp6_type) {
+ case MLD_LISTENER_QUERY:
+ case MLD_LISTENER_REPORT:
+ case MLD_LISTENER_DONE:
+ case MLDV2_LISTENER_REPORT:
+ /*
+ * According to RFC 2710 all MLD messages are
+ * sent with hop-limit (ttl) set to 1, and link
+ * local source address. If either one is
+ * missing then MLD message is invalid and
+ * should be discarded.
+ * RFC 3590 clarifies that during initial
+ * duplicate address detection nodes may not
+ * have an address, so are permitted to use
+ * the unspecified address, but only for Report
+ * and Done messages.
+ */
+ if ((h->ip6_hlim != 1) ||
+ (!IN6_IS_ADDR_LINKLOCAL(&h->ip6_src) &&
+ icmp6.icmp6_type == MLD_LISTENER_QUERY) ||
+ (!IN6_IS_ADDR_LINKLOCAL(&h->ip6_src) &&
+ !IN6_IS_ADDR_UNSPECIFIED(&h->ip6_src))) {
+ DPFPRINTF(LOG_NOTICE, "Invalid MLD");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+ }
+ CLR(pd->badopts, PF_OPT_ROUTER_ALERT);
+ break;
+ }
+ return (PF_PASS);
+ case IPPROTO_TCP:
+ case IPPROTO_UDP:
+ /* fragments may be short, ignore inner header then */
+ if (pd->fragoff != 0 && end < pd->off +
+ (pd->proto == IPPROTO_TCP ? sizeof(struct pf_tcphdr) :
+ pd->proto == IPPROTO_UDP ? sizeof(struct pf_udphdr) :
+ sizeof(struct icmp6hdr))) {
+ pd->off = pd->fragoff;
+ pd->proto = IPPROTO_FRAGMENT;
+ }
+ /* FALLTHROUGH */
+ default:
+ return (PF_PASS);
+ }
+ }
+ DPFPRINTF(LOG_NOTICE, "IPv6 nested extension header limit");
+ REASON_SET(reason, PFRES_IPOPTIONS);
+ return (PF_DROP);
+}
+#endif /* INET6 */
+
+u_int16_t
+pf_pkt_hash(sa_family_t af, uint8_t proto,
+ const struct pf_addr *src, const struct pf_addr *dst,
+ uint16_t sport, uint16_t dport)
+{
+ uint32_t hash;
+
+ hash = src->addr32[0] ^ dst->addr32[0];
+#ifdef INET6
+ if (af == AF_INET6) {
+ hash ^= src->addr32[1] ^ dst->addr32[1];
+ hash ^= src->addr32[2] ^ dst->addr32[2];
+ hash ^= src->addr32[3] ^ dst->addr32[3];
+ }
+#endif
+
+ switch (proto) {
+ case IPPROTO_TCP:
+ case IPPROTO_UDP:
+ hash ^= sport ^ dport;
+ break;
+ }
+
+ return stoeplitz_n32(hash);
+}
+
+int
+pf_setup_pdesc(struct pf_pdesc *pd, sa_family_t af, int dir,
+ struct pfi_kif *kif, struct mbuf *m, u_short *reason)
+{
+ memset(pd, 0, sizeof(*pd));
+ pd->dir = dir;
+ pd->kif = kif; /* kif is NULL when called by pflog */
+ pd->m = m;
+ pd->sidx = (dir == PF_IN) ? 0 : 1;
+ pd->didx = (dir == PF_IN) ? 1 : 0;
+ pd->af = pd->naf = af;
+ pd->rdomain = rtable_l2(pd->m->m_pkthdr.ph_rtableid);
+
+ switch (pd->af) {
+ case AF_INET: {
+ struct pf_ip *h;
+
+ /* Check for illegal packets */
+ if (pd->m->m_pkthdr.len < (int)sizeof(struct pf_ip)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+
+ h = mtod(pd->m, struct pf_ip *);
+ if (pd->m->m_pkthdr.len < ntohs(h->ip_len)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+
+ if (pf_walk_header(pd, h, reason) != PF_PASS)
+ return (PF_DROP);
+
+ pd->src = (struct pf_addr *)&h->ip_src;
+ pd->dst = (struct pf_addr *)&h->ip_dst;
+ pd->tot_len = ntohs(h->ip_len);
+ pd->tos = h->ip_tos & ~IPTOS_ECN_MASK;
+ pd->ttl = h->ip_ttl;
+ pd->virtual_proto = (h->ip_off & htons(IP_MF | IP_OFFMASK)) ?
+ PF_VPROTO_FRAGMENT : pd->proto;
+
+ break;
+ }
+#ifdef INET6
+ case AF_INET6: {
+ struct pf_ip6_hdr *h;
+
+ /* Check for illegal packets */
+ if (pd->m->m_pkthdr.len < (int)sizeof(struct pf_ip6_hdr)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+
+ h = mtod(pd->m, struct pf_ip6_hdr *);
+ if (pd->m->m_pkthdr.len <
+ sizeof(struct pf_ip6_hdr) + ntohs(h->ip6_plen)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+
+ if (pf_walk_header6(pd, h, reason) != PF_PASS)
+ return (PF_DROP);
+
+#if 1
+ /*
+ * we do not support jumbogram yet. if we keep going, zero
+ * ip6_plen will do something bad, so drop the packet for now.
+ */
+ if (pd->jumbolen != 0) {
+ REASON_SET(reason, PFRES_NORM);
+ return (PF_DROP);
+ }
+#endif /* 1 */
+
+ pd->src = (struct pf_addr *)&h->ip6_src;
+ pd->dst = (struct pf_addr *)&h->ip6_dst;
+ pd->tot_len = ntohs(h->ip6_plen) + sizeof(struct pf_ip6_hdr);
+ pd->tos = (ntohl(h->ip6_flow) & 0x0fc00000) >> 20;
+ pd->ttl = h->ip6_hlim;
+ pd->virtual_proto = (pd->fragoff != 0) ?
+ PF_VPROTO_FRAGMENT : pd->proto;
+
+ break;
+ }
+#endif /* INET6 */
+ default:
+ panic("pf_setup_pdesc called with illegal af %u", pd->af);
+
+ }
+
+ pf_addrcpy(&pd->nsaddr, pd->src, pd->af);
+ pf_addrcpy(&pd->ndaddr, pd->dst, pd->af);
+
+ switch (pd->virtual_proto) {
+ case IPPROTO_TCP: {
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+
+ if (!pf_pull_hdr(pd->m, pd->off, th, sizeof(*th),
+ reason, pd->af))
+ return (PF_DROP);
+ pd->hdrlen = sizeof(*th);
+ if (th->th_dport == 0 ||
+ pd->off + (th->th_off << 2) > pd->tot_len ||
+ (th->th_off << 2) < sizeof(struct pf_tcphdr)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+ pd->p_len = pd->tot_len - pd->off - (th->th_off << 2);
+ pd->sport = &th->th_sport;
+ pd->dport = &th->th_dport;
+ pd->pcksum = &th->th_sum;
+ break;
+ }
+ case IPPROTO_UDP: {
+ struct pf_udphdr *uh = &pd->hdr.udp;
+
+ if (!pf_pull_hdr(pd->m, pd->off, uh, sizeof(*uh),
+ reason, pd->af))
+ return (PF_DROP);
+ pd->hdrlen = sizeof(*uh);
+ if (uh->uh_dport == 0 ||
+ pd->off + ntohs(uh->uh_ulen) > pd->tot_len ||
+ ntohs(uh->uh_ulen) < sizeof(struct pf_udphdr)) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+ pd->sport = &uh->uh_sport;
+ pd->dport = &uh->uh_dport;
+ pd->pcksum = &uh->uh_sum;
+ break;
+ }
+ case IPPROTO_ICMP: {
+ if (!pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp, ICMP_MINLEN,
+ reason, pd->af))
+ return (PF_DROP);
+ pd->hdrlen = ICMP_MINLEN;
+ if (pd->off + pd->hdrlen > pd->tot_len) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+ pd->pcksum = &pd->hdr.icmp.icmp_cksum;
+ break;
+ }
+#ifdef INET6
+ case IPPROTO_ICMPV6: {
+ size_t icmp_hlen = sizeof(struct icmp6hdr);
+
+ if (!pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp6, icmp_hlen,
+ reason, pd->af))
+ return (PF_DROP);
+ /* ICMP headers we look further into to match state */
+ switch (pd->hdr.icmp6.icmp6_type) {
+ case MLD_LISTENER_QUERY:
+ case MLD_LISTENER_REPORT:
+ icmp_hlen = sizeof(struct mld_hdr);
+ break;
+ case ND_NEIGHBOR_SOLICIT:
+ case ND_NEIGHBOR_ADVERT:
+ icmp_hlen = sizeof(struct nd_neighbor_solicit);
+ /* FALLTHROUGH */
+ case ND_ROUTER_SOLICIT:
+ case ND_ROUTER_ADVERT:
+ case ND_REDIRECT:
+ if (pd->ttl != 255) {
+ REASON_SET(reason, PFRES_NORM);
+ return (PF_DROP);
+ }
+ break;
+ }
+ if (icmp_hlen > sizeof(struct icmp6hdr) &&
+ !pf_pull_hdr(pd->m, pd->off, &pd->hdr.icmp6, icmp_hlen,
+ reason, pd->af))
+ return (PF_DROP);
+ pd->hdrlen = icmp_hlen;
+ if (pd->off + pd->hdrlen > pd->tot_len) {
+ REASON_SET(reason, PFRES_SHORT);
+ return (PF_DROP);
+ }
+ pd->pcksum = &pd->hdr.icmp6.icmp6_cksum;
+ break;
+ }
+#endif /* INET6 */
+ }
+
+ if (pd->sport)
+ pd->osport = pd->nsport = *pd->sport;
+ if (pd->dport)
+ pd->odport = pd->ndport = *pd->dport;
+
+ pd->hash = pf_pkt_hash(pd->af, pd->proto,
+ pd->src, pd->dst, pd->osport, pd->odport);
+
+ return (PF_PASS);
+}
+
+void
+pf_counters_inc(int action, struct pf_pdesc *pd, struct pf_state *st,
+ struct pf_rule *r, struct pf_rule *a)
+{
+ int dirndx;
+ pd->kif->pfik_bytes[pd->af == AF_INET6][pd->dir == PF_OUT]
+ [action != PF_PASS] += pd->tot_len;
+ pd->kif->pfik_packets[pd->af == AF_INET6][pd->dir == PF_OUT]
+ [action != PF_PASS]++;
+
+ if (action == PF_PASS || action == PF_AFRT || r->action == PF_DROP) {
+ dirndx = (pd->dir == PF_OUT);
+ r->packets[dirndx]++;
+ r->bytes[dirndx] += pd->tot_len;
+ if (a != NULL) {
+ a->packets[dirndx]++;
+ a->bytes[dirndx] += pd->tot_len;
+ }
+ if (st != NULL) {
+ struct pf_rule_item *ri;
+ struct pf_sn_item *sni;
+
+ SLIST_FOREACH(sni, &st->src_nodes, next) {
+ sni->sn->packets[dirndx]++;
+ sni->sn->bytes[dirndx] += pd->tot_len;
+ }
+ dirndx = (pd->dir == st->direction) ? 0 : 1;
+ st->packets[dirndx]++;
+ st->bytes[dirndx] += pd->tot_len;
+
+ SLIST_FOREACH(ri, &st->match_rules, entry) {
+ ri->r->packets[dirndx]++;
+ ri->r->bytes[dirndx] += pd->tot_len;
+
+ if (ri->r->src.addr.type == PF_ADDR_TABLE)
+ pfr_update_stats(ri->r->src.addr.p.tbl,
+ &st->key[(st->direction == PF_IN)]->
+ addr[(st->direction == PF_OUT)],
+ pd, ri->r->action, ri->r->src.neg);
+ if (ri->r->dst.addr.type == PF_ADDR_TABLE)
+ pfr_update_stats(ri->r->dst.addr.p.tbl,
+ &st->key[(st->direction == PF_IN)]->
+ addr[(st->direction == PF_IN)],
+ pd, ri->r->action, ri->r->dst.neg);
+ }
+ }
+ if (r->src.addr.type == PF_ADDR_TABLE)
+ pfr_update_stats(r->src.addr.p.tbl,
+ (st == NULL) ? pd->src :
+ &st->key[(st->direction == PF_IN)]->
+ addr[(st->direction == PF_OUT)],
+ pd, r->action, r->src.neg);
+ if (r->dst.addr.type == PF_ADDR_TABLE)
+ pfr_update_stats(r->dst.addr.p.tbl,
+ (st == NULL) ? pd->dst :
+ &st->key[(st->direction == PF_IN)]->
+ addr[(st->direction == PF_IN)],
+ pd, r->action, r->dst.neg);
+ }
+}
+
+int
+pf_test(sa_family_t af, int fwdir, struct ifnet *ifp, struct mbuf **m0)
+{
+ struct pfi_kif *kif = NULL;
+ u_short action, reason = 0;
+ struct pf_rule *a = NULL, *r = &pf_default_rule;
+ struct pf_state *st = NULL;
+ struct pf_state_key_cmp key;
+ struct pf_ruleset *ruleset = NULL;
+ struct pf_pdesc pd;
+ int dir = (fwdir == PF_FWD) ? PF_OUT : fwdir;
+ u_int32_t qid, pqid = 0;
+ int have_pf_lock = 0;
+
+ if (!pf_status.running)
+ return (PF_PASS);
+
+#if NCARP > 0
+ if (ifp->if_type == IFT_CARP) {
+ struct ifnet *ifp0;
+
+ smr_read_enter();
+ ifp0 = if_get_smr(ifp->if_carpdevidx);
+ if (ifp0 != NULL)
+ kif = (struct pfi_kif *)ifp0->if_pf_kif;
+ smr_read_leave();
+ } else
+#endif /* NCARP */
+ kif = (struct pfi_kif *)ifp->if_pf_kif;
+
+ if (kif == NULL) {
+ DPFPRINTF(LOG_ERR,
+ "%s: kif == NULL, if_xname %s", __func__, ifp->if_xname);
+ return (PF_DROP);
+ }
+ if (kif->pfik_flags & PFI_IFLAG_SKIP)
+ return (PF_PASS);
+
+#ifdef DIAGNOSTIC
+ if (((*m0)->m_flags & M_PKTHDR) == 0)
+ panic("non-M_PKTHDR is passed to pf_test");
+#endif /* DIAGNOSTIC */
+
+ if ((*m0)->m_pkthdr.pf.flags & PF_TAG_GENERATED)
+ return (PF_PASS);
+
+ if ((*m0)->m_pkthdr.pf.flags & PF_TAG_DIVERTED_PACKET) {
+ (*m0)->m_pkthdr.pf.flags &= ~PF_TAG_DIVERTED_PACKET;
+ return (PF_PASS);
+ }
+
+ if ((*m0)->m_pkthdr.pf.flags & PF_TAG_REFRAGMENTED) {
+ (*m0)->m_pkthdr.pf.flags &= ~PF_TAG_REFRAGMENTED;
+ return (PF_PASS);
+ }
+
+ action = pf_setup_pdesc(&pd, af, dir, kif, *m0, &reason);
+ if (action != PF_PASS) {
+#if NPFLOG > 0
+ pd.pflog |= PF_LOG_FORCE;
+#endif /* NPFLOG > 0 */
+ goto done;
+ }
+
+ /* packet normalization and reassembly */
+ switch (pd.af) {
+ case AF_INET:
+ action = pf_normalize_ip(&pd, &reason);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ action = pf_normalize_ip6(&pd, &reason);
+ break;
+#endif /* INET6 */
+ }
+ *m0 = pd.m;
+ /* if packet sits in reassembly queue, return without error */
+ if (pd.m == NULL)
+ return PF_PASS;
+
+ if (action != PF_PASS) {
+#if NPFLOG > 0
+ pd.pflog |= PF_LOG_FORCE;
+#endif /* NPFLOG > 0 */
+ goto done;
+ }
+
+ /* if packet has been reassembled, update packet description */
+ if (pf_status.reass && pd.virtual_proto == PF_VPROTO_FRAGMENT) {
+ action = pf_setup_pdesc(&pd, af, dir, kif, pd.m, &reason);
+ if (action != PF_PASS) {
+#if NPFLOG > 0
+ pd.pflog |= PF_LOG_FORCE;
+#endif /* NPFLOG > 0 */
+ goto done;
+ }
+ }
+ pd.m->m_pkthdr.pf.flags |= PF_TAG_PROCESSED;
+
+ /*
+ * Avoid pcb-lookups from the forwarding path. They should never
+ * match and would cause MP locking problems.
+ */
+ if (fwdir == PF_FWD) {
+ pd.lookup.done = -1;
+ pd.lookup.uid = -1;
+ pd.lookup.gid = -1;
+ pd.lookup.pid = NO_PID;
+ }
+
+ switch (pd.virtual_proto) {
+
+ case PF_VPROTO_FRAGMENT: {
+ /*
+ * handle fragments that aren't reassembled by
+ * normalization
+ */
+ PF_LOCK();
+ have_pf_lock = 1;
+ action = pf_test_rule(&pd, &r, &st, &a, &ruleset, &reason);
+ st = pf_state_ref(st);
+ if (action != PF_PASS)
+ REASON_SET(&reason, PFRES_FRAG);
+ break;
+ }
+
+ case IPPROTO_ICMP: {
+ if (pd.af != AF_INET) {
+ action = PF_DROP;
+ REASON_SET(&reason, PFRES_NORM);
+ DPFPRINTF(LOG_NOTICE,
+ "dropping IPv6 packet with ICMPv4 payload");
+ break;
+ }
+ PF_STATE_ENTER_READ();
+ action = pf_test_state_icmp(&pd, &st, &reason);
+ st = pf_state_ref(st);
+ PF_STATE_EXIT_READ();
+ if (action == PF_PASS || action == PF_AFRT) {
+#if NPFSYNC > 0
+ pfsync_update_state(st);
+#endif /* NPFSYNC > 0 */
+ r = st->rule.ptr;
+ a = st->anchor.ptr;
+#if NPFLOG > 0
+ pd.pflog |= st->log;
+#endif /* NPFLOG > 0 */
+ } else if (st == NULL) {
+ PF_LOCK();
+ have_pf_lock = 1;
+ action = pf_test_rule(&pd, &r, &st, &a, &ruleset,
+ &reason);
+ st = pf_state_ref(st);
+ }
+ break;
+ }
+
+#ifdef INET6
+ case IPPROTO_ICMPV6: {
+ if (pd.af != AF_INET6) {
+ action = PF_DROP;
+ REASON_SET(&reason, PFRES_NORM);
+ DPFPRINTF(LOG_NOTICE,
+ "dropping IPv4 packet with ICMPv6 payload");
+ break;
+ }
+ PF_STATE_ENTER_READ();
+ action = pf_test_state_icmp(&pd, &st, &reason);
+ st = pf_state_ref(st);
+ PF_STATE_EXIT_READ();
+ if (action == PF_PASS || action == PF_AFRT) {
+#if NPFSYNC > 0
+ pfsync_update_state(st);
+#endif /* NPFSYNC > 0 */
+ r = st->rule.ptr;
+ a = st->anchor.ptr;
+#if NPFLOG > 0
+ pd.pflog |= st->log;
+#endif /* NPFLOG > 0 */
+ } else if (st == NULL) {
+ PF_LOCK();
+ have_pf_lock = 1;
+ action = pf_test_rule(&pd, &r, &st, &a, &ruleset,
+ &reason);
+ st = pf_state_ref(st);
+ }
+ break;
+ }
+#endif /* INET6 */
+
+ case IPPROTO_TCP:
+ if (pd.dir == PF_IN &&
+ (pd.hdr.tcp.th_flags & (TH_SYN|TH_ACK)) == TH_SYN &&
+ pf_synflood_check(&pd)) {
+ PF_LOCK();
+ have_pf_lock = 1;
+ pf_syncookie_send(&pd, &reason);
+ action = PF_DROP;
+ break;
+ }
+ if ((pd.hdr.tcp.th_flags & TH_ACK) && pd.p_len == 0)
+ pqid = 1;
+ action = pf_normalize_tcp(&pd);
+ if (action == PF_DROP)
+ break;
+
+ /* FALLTHROUGH */
+ default:
+ key.af = pd.af;
+ key.proto = pd.virtual_proto;
+ key.rdomain = pd.rdomain;
+ pf_addrcpy(&key.addr[pd.sidx], pd.src, key.af);
+ pf_addrcpy(&key.addr[pd.didx], pd.dst, key.af);
+ key.port[pd.sidx] = pd.osport;
+ key.port[pd.didx] = pd.odport;
+ key.hash = pd.hash;
+
+ PF_STATE_ENTER_READ();
+ action = pf_find_state(&pd, &key, &st);
+ st = pf_state_ref(st);
+ PF_STATE_EXIT_READ();
+
+ /* check for syncookies if tcp ack and no active state */
+ if (pd.dir == PF_IN && pd.virtual_proto == IPPROTO_TCP &&
+ (st == NULL || (st->src.state >= TCPS_FIN_WAIT_2 &&
+ st->dst.state >= TCPS_FIN_WAIT_2)) &&
+ (pd.hdr.tcp.th_flags & (TH_SYN|TH_ACK|TH_RST)) == TH_ACK &&
+ pf_syncookie_validate(&pd)) {
+ struct mbuf *msyn;
+ msyn = pf_syncookie_recreate_syn(&pd, &reason);
+ if (msyn) {
+ action = pf_test(af, fwdir, ifp, &msyn);
+ m_freem(msyn);
+ if (action == PF_PASS || action == PF_AFRT) {
+ PF_STATE_ENTER_READ();
+ pf_state_unref(st);
+ action = pf_find_state(&pd, &key, &st);
+ st = pf_state_ref(st);
+ PF_STATE_EXIT_READ();
+ if (st == NULL)
+ return (PF_DROP);
+ st->src.seqhi = st->dst.seqhi =
+ ntohl(pd.hdr.tcp.th_ack) - 1;
+ st->src.seqlo =
+ ntohl(pd.hdr.tcp.th_seq) - 1;
+ pf_set_protostate(st, PF_PEER_SRC,
+ PF_TCPS_PROXY_DST);
+ }
+ } else
+ action = PF_DROP;
+ }
+
+ if (action == PF_MATCH)
+ action = pf_test_state(&pd, &st, &reason);
+
+ if (action == PF_PASS || action == PF_AFRT) {
+#if NPFSYNC > 0
+ pfsync_update_state(st);
+#endif /* NPFSYNC > 0 */
+ r = st->rule.ptr;
+ a = st->anchor.ptr;
+#if NPFLOG > 0
+ pd.pflog |= st->log;
+#endif /* NPFLOG > 0 */
+ } else if (st == NULL) {
+ PF_LOCK();
+ have_pf_lock = 1;
+ action = pf_test_rule(&pd, &r, &st, &a, &ruleset,
+ &reason);
+ st = pf_state_ref(st);
+ }
+
+ if (pd.virtual_proto == IPPROTO_TCP) {
+ if (st) {
+ if (st->max_mss)
+ pf_normalize_mss(&pd, st->max_mss);
+ } else if (r->max_mss)
+ pf_normalize_mss(&pd, r->max_mss);
+ }
+
+ break;
+ }
+
+ if (have_pf_lock != 0)
+ PF_UNLOCK();
+
+ /*
+ * At the moment, we rely on NET_LOCK() to prevent removal of items
+ * we've collected above ('r', 'anchor' and 'ruleset'). They'll have
+ * to be refcounted when NET_LOCK() is gone.
+ */
+
+done:
+ if (action != PF_DROP) {
+ if (st) {
+ /* The non-state case is handled in pf_test_rule() */
+ if (action == PF_PASS && pd.badopts != 0 &&
+ !(st->state_flags & PFSTATE_ALLOWOPTS)) {
+ action = PF_DROP;
+ REASON_SET(&reason, PFRES_IPOPTIONS);
+#if NPFLOG > 0
+ pd.pflog |= PF_LOG_FORCE;
+#endif /* NPFLOG > 0 */
+ DPFPRINTF(LOG_NOTICE, "dropping packet with "
+ "ip/ipv6 options in pf_test()");
+ }
+
+ pf_scrub(pd.m, st->state_flags, pd.af, st->min_ttl,
+ st->set_tos);
+ pf_tag_packet(pd.m, st->tag, st->rtableid[pd.didx]);
+ if (pqid || (pd.tos & IPTOS_LOWDELAY)) {
+ qid = st->pqid;
+ if (st->state_flags & PFSTATE_SETPRIO) {
+ pd.m->m_pkthdr.pf.prio =
+ st->set_prio[1];
+ }
+ } else {
+ qid = st->qid;
+ if (st->state_flags & PFSTATE_SETPRIO) {
+ pd.m->m_pkthdr.pf.prio =
+ st->set_prio[0];
+ }
+ }
+ pd.m->m_pkthdr.pf.delay = st->delay;
+ } else {
+ pf_scrub(pd.m, r->scrub_flags, pd.af, r->min_ttl,
+ r->set_tos);
+ if (pqid || (pd.tos & IPTOS_LOWDELAY)) {
+ qid = r->pqid;
+ if (r->scrub_flags & PFSTATE_SETPRIO)
+ pd.m->m_pkthdr.pf.prio = r->set_prio[1];
+ } else {
+ qid = r->qid;
+ if (r->scrub_flags & PFSTATE_SETPRIO)
+ pd.m->m_pkthdr.pf.prio = r->set_prio[0];
+ }
+ pd.m->m_pkthdr.pf.delay = r->delay;
+ }
+ }
+
+ if (action == PF_PASS && qid)
+ pd.m->m_pkthdr.pf.qid = qid;
+ if (st != NULL) {
+ struct mbuf *m = pd.m;
+ struct inpcb *inp = m->m_pkthdr.pf.inp;
+
+ if (pd.dir == PF_IN) {
+ KASSERT(inp == NULL);
+ pf_mbuf_link_state_key(m, st->key[PF_SK_STACK]);
+ } else if (pd.dir == PF_OUT)
+ pf_state_key_link_inpcb(st->key[PF_SK_STACK], inp);
+
+ if (!ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) {
+ m->m_pkthdr.ph_flowid = st->key[PF_SK_WIRE]->hash;
+ SET(m->m_pkthdr.csum_flags, M_FLOWID);
+ }
+ }
+
+ /*
+ * connections redirected to loopback should not match sockets
+ * bound specifically to loopback due to security implications,
+ * see in_pcblookup_listen().
+ */
+ if (pd.destchg)
+ if ((pd.af == AF_INET && (ntohl(pd.dst->v4.s_addr) >>
+ IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) ||
+ (pd.af == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&pd.dst->v6)))
+ pd.m->m_pkthdr.pf.flags |= PF_TAG_TRANSLATE_LOCALHOST;
+ /* We need to redo the route lookup on outgoing routes. */
+ if (pd.destchg && pd.dir == PF_OUT)
+ pd.m->m_pkthdr.pf.flags |= PF_TAG_REROUTE;
+
+ if (pd.dir == PF_IN && action == PF_PASS &&
+ (r->divert.type == PF_DIVERT_TO ||
+ r->divert.type == PF_DIVERT_REPLY)) {
+ struct pf_divert *divert;
+
+ if ((divert = pf_get_divert(pd.m))) {
+ pd.m->m_pkthdr.pf.flags |= PF_TAG_DIVERTED;
+ divert->addr = r->divert.addr;
+ divert->port = r->divert.port;
+ divert->rdomain = pd.rdomain;
+ divert->type = r->divert.type;
+ }
+ }
+
+ if (action == PF_PASS && r->divert.type == PF_DIVERT_PACKET)
+ action = PF_DIVERT;
+
+#if NPFLOG > 0
+ if (pd.pflog) {
+ struct pf_rule_item *ri;
+
+ if (pd.pflog & PF_LOG_FORCE || r->log & PF_LOG_ALL)
+ pflog_packet(&pd, reason, r, a, ruleset, NULL);
+ if (st) {
+ SLIST_FOREACH(ri, &st->match_rules, entry)
+ if (ri->r->log & PF_LOG_ALL)
+ pflog_packet(&pd, reason, ri->r, a,
+ ruleset, NULL);
+ }
+ }
+#endif /* NPFLOG > 0 */
+
+ pf_counters_inc(action, &pd, st, r, a);
+
+ switch (action) {
+ case PF_SYNPROXY_DROP:
+ m_freem(pd.m);
+ /* FALLTHROUGH */
+ case PF_DEFER:
+ pd.m = NULL;
+ action = PF_PASS;
+ break;
+ case PF_DIVERT:
+ switch (pd.af) {
+ case AF_INET:
+ divert_packet(pd.m, pd.dir, r->divert.port);
+ pd.m = NULL;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ divert6_packet(pd.m, pd.dir, r->divert.port);
+ pd.m = NULL;
+ break;
+#endif /* INET6 */
+ }
+ action = PF_PASS;
+ break;
+#ifdef INET6
+ case PF_AFRT:
+ if (pf_translate_af(&pd)) {
+ action = PF_DROP;
+ goto out;
+ }
+ pd.m->m_pkthdr.pf.flags |= PF_TAG_GENERATED;
+ switch (pd.naf) {
+ case AF_INET:
+ if (pd.dir == PF_IN) {
+ int flags = IP_REDIRECT;
+
+ switch (atomic_load_int(&ip_forwarding)) {
+ case 2:
+ SET(flags, IP_FORWARDING_IPSEC);
+ /* FALLTHROUGH */
+ case 1:
+ SET(flags, IP_FORWARDING);
+ break;
+ default:
+ ipstat_inc(ips_cantforward);
+ action = PF_DROP;
+ goto out;
+ }
+ if (atomic_load_int(&ip_directedbcast))
+ SET(flags, IP_ALLOWBROADCAST);
+ ip_forward(pd.m, ifp, NULL, flags);
+ } else
+ ip_output(pd.m, NULL, NULL, 0, NULL, NULL, 0);
+ break;
+ case AF_INET6:
+ if (pd.dir == PF_IN) {
+ int flags = IPV6_REDIRECT;
+
+ switch (atomic_load_int(&ip6_forwarding)) {
+ case 2:
+ SET(flags, IPV6_FORWARDING_IPSEC);
+ /* FALLTHROUGH */
+ case 1:
+ SET(flags, IPV6_FORWARDING);
+ break;
+ default:
+ ip6stat_inc(ip6s_cantforward);
+ action = PF_DROP;
+ goto out;
+ }
+ ip6_forward(pd.m, NULL, flags);
+ } else
+ ip6_output(pd.m, NULL, NULL, 0, NULL, NULL);
+ break;
+ }
+ pd.m = NULL;
+ action = PF_PASS;
+ break;
+#endif /* INET6 */
+ case PF_DROP:
+ m_freem(pd.m);
+ pd.m = NULL;
+ break;
+ default:
+ if (st && st->rt) {
+ switch (pd.af) {
+ case AF_INET:
+ pf_route(&pd, st);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ pf_route6(&pd, st);
+ break;
+#endif /* INET6 */
+ }
+ }
+ break;
+ }
+
+#ifdef INET6
+ /* if reassembled packet passed, create new fragments */
+ if (pf_status.reass && action == PF_PASS && pd.m && fwdir == PF_FWD &&
+ pd.af == AF_INET6) {
+ struct m_tag *mtag;
+
+ if ((mtag = m_tag_find(pd.m, PACKET_TAG_PF_REASSEMBLED, NULL)))
+ action = pf_refragment6(&pd.m, mtag, NULL, NULL, NULL);
+ }
+#endif /* INET6 */
+ if (st && action != PF_DROP) {
+ if (!st->if_index_in && dir == PF_IN)
+ st->if_index_in = ifp->if_index;
+ else if (!st->if_index_out && dir == PF_OUT)
+ st->if_index_out = ifp->if_index;
+ }
+
+#ifdef INET6
+out:
+#endif /* INET6 */
+ *m0 = pd.m;
+
+ pf_state_unref(st);
+
+ return (action);
+}
+
+int
+pf_ouraddr(struct mbuf *m)
+{
+ struct pf_state_key *sk;
+
+ if (m->m_pkthdr.pf.flags & PF_TAG_DIVERTED)
+ return (1);
+
+ sk = m->m_pkthdr.pf.statekey;
+ if (sk != NULL) {
+ if (READ_ONCE(sk->sk_inp) != NULL)
+ return (1);
+ }
+
+ return (-1);
+}
+
+/*
+ * must be called whenever any addressing information such as
+ * address, port, protocol has changed
+ */
+void
+pf_pkt_addr_changed(struct mbuf *m)
+{
+ pf_mbuf_unlink_state_key(m);
+ pf_mbuf_unlink_inpcb(m);
+}
+
+struct inpcb *
+pf_inp_lookup(struct mbuf *m)
+{
+ struct inpcb *inp = NULL;
+ struct pf_state_key *sk = m->m_pkthdr.pf.statekey;
+
+ if (!pf_state_key_isvalid(sk))
+ pf_mbuf_unlink_state_key(m);
+ else if (READ_ONCE(sk->sk_inp) != NULL) {
+ mtx_enter(&pf_inp_mtx);
+ inp = in_pcbref(sk->sk_inp);
+ mtx_leave(&pf_inp_mtx);
+ }
+
+ return (inp);
+}
+
+void
+pf_inp_link(struct mbuf *m, struct inpcb *inp)
+{
+ struct pf_state_key *sk = m->m_pkthdr.pf.statekey;
+
+ if (!pf_state_key_isvalid(sk)) {
+ pf_mbuf_unlink_state_key(m);
+ return;
+ }
+
+ /*
+ * we don't need to grab PF-lock here. At worst case we link inp to
+ * state, which might be just being marked as deleted by another
+ * thread.
+ */
+ pf_state_key_link_inpcb(sk, inp);
+
+ /* The statekey has finished finding the inp, it is no longer needed. */
+ pf_mbuf_unlink_state_key(m);
+}
+
+void
+pf_inp_unlink(struct inpcb *inp)
+{
+ struct pf_state_key *sk;
+
+ if (READ_ONCE(inp->inp_pf_sk) == NULL)
+ return;
+
+ mtx_enter(&pf_inp_mtx);
+ sk = inp->inp_pf_sk;
+ if (sk == NULL) {
+ mtx_leave(&pf_inp_mtx);
+ return;
+ }
+ KASSERT(sk->sk_inp == inp);
+ sk->sk_inp = NULL;
+ inp->inp_pf_sk = NULL;
+ mtx_leave(&pf_inp_mtx);
+
+ pf_state_key_unref(sk);
+ in_pcbunref(inp);
+}
+
+void
+pf_state_key_link_reverse(struct pf_state_key *sk, struct pf_state_key *skrev)
+{
+ struct pf_state_key *old_reverse;
+
+ old_reverse = atomic_cas_ptr(&sk->sk_reverse, NULL, skrev);
+ if (old_reverse != NULL)
+ KASSERT(old_reverse == skrev);
+ else {
+ pf_state_key_ref(skrev);
+
+ /*
+ * NOTE: if sk == skrev, then KASSERT() below holds true, we
+ * still want to grab a reference in such case, because
+ * pf_state_key_unlink_reverse() does not check whether keys
+ * are identical or not.
+ */
+ old_reverse = atomic_cas_ptr(&skrev->sk_reverse, NULL, sk);
+ if (old_reverse != NULL)
+ KASSERT(old_reverse == sk);
+
+ pf_state_key_ref(sk);
+ }
+}
+
+#if NPFLOG > 0
+void
+pf_log_matches(struct pf_pdesc *pd, struct pf_rule *rm, struct pf_rule *am,
+ struct pf_ruleset *ruleset, struct pf_rule_slist *matchrules)
+{
+ struct pf_rule_item *ri;
+
+ /* if this is the log(matches) rule, packet has been logged already */
+ if (rm->log & PF_LOG_MATCHES)
+ return;
+
+ SLIST_FOREACH(ri, matchrules, entry)
+ if (ri->r->log & PF_LOG_MATCHES)
+ pflog_packet(pd, PFRES_MATCH, rm, am, ruleset, ri->r);
+}
+#endif /* NPFLOG > 0 */
+
+struct pf_state_key *
+pf_state_key_ref(struct pf_state_key *sk)
+{
+ if (sk != NULL)
+ PF_REF_TAKE(sk->sk_refcnt);
+
+ return (sk);
+}
+
+void
+pf_state_key_unref(struct pf_state_key *sk)
+{
+ if (PF_REF_RELE(sk->sk_refcnt)) {
+ /* state key must be removed from tree */
+ KASSERT(!pf_state_key_isvalid(sk));
+ /* state key must be unlinked from reverse key */
+ KASSERT(sk->sk_reverse == NULL);
+ /* state key must be unlinked from socket */
+ KASSERT(sk->sk_inp == NULL);
+ pool_put(&pf_state_key_pl, sk);
+ }
+}
+
+int
+pf_state_key_isvalid(struct pf_state_key *sk)
+{
+ return ((sk != NULL) && (sk->sk_removed == 0));
+}
+
+void
+pf_mbuf_link_state_key(struct mbuf *m, struct pf_state_key *sk)
+{
+ KASSERT(m->m_pkthdr.pf.statekey == NULL);
+ m->m_pkthdr.pf.statekey = pf_state_key_ref(sk);
+}
+
+void
+pf_mbuf_unlink_state_key(struct mbuf *m)
+{
+ struct pf_state_key *sk = m->m_pkthdr.pf.statekey;
+
+ if (sk != NULL) {
+ m->m_pkthdr.pf.statekey = NULL;
+ pf_state_key_unref(sk);
+ }
+}
+
+void
+pf_mbuf_link_inpcb(struct mbuf *m, struct inpcb *inp)
+{
+ KASSERT(m->m_pkthdr.pf.inp == NULL);
+ m->m_pkthdr.pf.inp = in_pcbref(inp);
+}
+
+void
+pf_mbuf_unlink_inpcb(struct mbuf *m)
+{
+ struct inpcb *inp = m->m_pkthdr.pf.inp;
+
+ if (inp != NULL) {
+ m->m_pkthdr.pf.inp = NULL;
+ in_pcbunref(inp);
+ }
+}
+
+void
+pf_state_key_link_inpcb(struct pf_state_key *sk, struct inpcb *inp)
+{
+ if (inp == NULL || READ_ONCE(sk->sk_inp) != NULL)
+ return;
+
+ mtx_enter(&pf_inp_mtx);
+ if (inp->inp_pf_sk != NULL || sk->sk_inp != NULL) {
+ mtx_leave(&pf_inp_mtx);
+ return;
+ }
+ sk->sk_inp = in_pcbref(inp);
+ inp->inp_pf_sk = pf_state_key_ref(sk);
+ mtx_leave(&pf_inp_mtx);
+}
+
+void
+pf_state_key_unlink_inpcb(struct pf_state_key *sk)
+{
+ struct inpcb *inp;
+
+ if (READ_ONCE(sk->sk_inp) == NULL)
+ return;
+
+ mtx_enter(&pf_inp_mtx);
+ inp = sk->sk_inp;
+ if (inp == NULL) {
+ mtx_leave(&pf_inp_mtx);
+ return;
+ }
+ KASSERT(inp->inp_pf_sk == sk);
+ sk->sk_inp = NULL;
+ inp->inp_pf_sk = NULL;
+ mtx_leave(&pf_inp_mtx);
+
+ pf_state_key_unref(sk);
+ in_pcbunref(inp);
+}
+
+void
+pf_state_key_unlink_reverse(struct pf_state_key *sk)
+{
+ struct pf_state_key *skrev = sk->sk_reverse;
+
+ /* Note that sk and skrev may be equal, then we unref twice. */
+ if (skrev != NULL) {
+ KASSERT(skrev->sk_reverse == sk);
+ sk->sk_reverse = NULL;
+ skrev->sk_reverse = NULL;
+ pf_state_key_unref(skrev);
+ pf_state_key_unref(sk);
+ }
+}
+
+struct pf_state *
+pf_state_ref(struct pf_state *st)
+{
+ if (st != NULL)
+ PF_REF_TAKE(st->refcnt);
+ return (st);
+}
+
+void
+pf_state_unref(struct pf_state *st)
+{
+ if ((st != NULL) && PF_REF_RELE(st->refcnt)) {
+ /* never inserted or removed */
+#if NPFSYNC > 0
+ KASSERT((TAILQ_NEXT(st, sync_list) == NULL) ||
+ ((TAILQ_NEXT(st, sync_list) == _Q_INVALID) &&
+ (st->sync_state >= PFSYNC_S_NONE)));
+#endif /* NPFSYNC */
+ KASSERT((TAILQ_NEXT(st, entry_list) == NULL) ||
+ (TAILQ_NEXT(st, entry_list) == _Q_INVALID));
+
+ pf_state_key_unref(st->key[PF_SK_WIRE]);
+ pf_state_key_unref(st->key[PF_SK_STACK]);
+
+ KASSERT(SLIST_EMPTY(&st->linkage));
+
+ pool_put(&pf_state_pl, st);
+ }
+}
+
+int
+pf_delay_pkt(struct mbuf *m, u_int ifidx)
+{
+ struct pf_pktdelay *pdy;
+
+ if ((pdy = pool_get(&pf_pktdelay_pl, PR_NOWAIT)) == NULL) {
+ m_freem(m);
+ return (ENOBUFS);
+ }
+ pdy->ifidx = ifidx;
+ pdy->m = m;
+ timeout_set(&pdy->to, pf_pktenqueue_delayed, pdy);
+ timeout_add_msec(&pdy->to, m->m_pkthdr.pf.delay);
+ m->m_pkthdr.pf.delay = 0;
+ return (0);
+}
+
+void
+pf_pktenqueue_delayed(void *arg)
+{
+ struct pf_pktdelay *pdy = arg;
+ struct ifnet *ifp;
+
+ ifp = if_get(pdy->ifidx);
+ if (ifp != NULL) {
+ if_enqueue(ifp, pdy->m);
+ if_put(ifp);
+ } else
+ m_freem(pdy->m);
+
+ pool_put(&pf_pktdelay_pl, pdy);
+}
+
+void
+pf_status_init(void)
+{
+ memset(&pf_status, 0, sizeof(pf_status));
+ pf_status.debug = LOG_ERR;
+ pf_status.reass = PF_REASS_ENABLED;
+
+ /* XXX do our best to avoid a conflict */
+ pf_status.hostid = arc4random();
+
+ pf_status_fcounters = counters_alloc(FCNT_MAX);
+}
+
+void
+pf_status_clear(void)
+{
+ PF_ASSERT_LOCKED();
+ counters_zero(pf_status_fcounters, FCNT_MAX);
+}
+
+int
+pf_status_read(struct pf_status *pfs)
+{
+ uint64_t scratch[FCNT_MAX];
+
+ if (strnlen(pfs->ifname, sizeof(pfs->ifname)) >=
+ sizeof(pfs->ifname))
+ return ENAMETOOLONG;
+ NET_LOCK();
+ PF_LOCK();
+ PF_FRAG_LOCK();
+ memcpy(pfs, &pf_status, sizeof(struct pf_status));
+ PF_FRAG_UNLOCK();
+ pfi_update_status(pfs->ifname, pfs);
+ PF_UNLOCK();
+ NET_UNLOCK();
+
+ counters_read(pf_status_fcounters, pfs->fcounters, FCNT_MAX, scratch);
+ return 0;
+}
diff --git a/module/pfsrc/pf_if.c b/module/pfsrc/pf_if.c
new file mode 100644
index 0000000..d558a47
--- /dev/null
+++ b/module/pfsrc/pf_if.c
@@ -0,0 +1,910 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_if.c — see docs/porting-notes.md */
+#include
+
+#define isupper(c) ((c) >= 'A' && (c) <= 'Z')
+#define islower(c) ((c) >= 'a' && (c) <= 'z')
+#define isalpha(c) (isupper(c)||islower(c))
+
+struct pfi_kif *pfi_all = NULL;
+struct pool pfi_addr_pl;
+struct pfi_ifhead pfi_ifs;
+long pfi_update = 1;
+struct pfr_addr *pfi_buffer;
+int pfi_buffer_cnt;
+int pfi_buffer_max;
+
+void pfi_kif_update(struct pfi_kif *);
+void pfi_dynaddr_update(struct pfi_dynaddr *dyn);
+void pfi_table_update(struct pfr_ktable *, struct pfi_kif *,
+ u_int8_t, int);
+void pfi_kifaddr_update(void *);
+void pfi_instance_add(struct ifnet *, u_int8_t, int);
+void pfi_address_add(struct sockaddr *, sa_family_t, u_int8_t);
+int pfi_if_compare(struct pfi_kif *, struct pfi_kif *);
+int pfi_skip_if(const char *, struct pfi_kif *);
+int pfi_unmask(void *);
+void pfi_group_change(const char *);
+
+RB_PROTOTYPE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare);
+RB_GENERATE(pfi_ifhead, pfi_kif, pfik_tree, pfi_if_compare);
+
+#define PFI_BUFFER_MAX 0x10000
+#define PFI_MTYPE M_PF
+
+struct pfi_kif *
+pfi_kif_alloc(const char *kif_name, int mflags)
+{
+ struct pfi_kif *kif;
+
+ kif = malloc(sizeof(*pfi_all), PFI_MTYPE, mflags|M_ZERO);
+ if (kif == NULL)
+ return (NULL);
+ strlcpy(kif->pfik_name, kif_name, sizeof(kif->pfik_name));
+ kif->pfik_tzero = gettime();
+ TAILQ_INIT(&kif->pfik_dynaddrs);
+
+ if (!strcmp(kif->pfik_name, "any")) {
+ /* both so it works in the ioctl and the regular case */
+ kif->pfik_flags |= PFI_IFLAG_ANY;
+ kif->pfik_flags_new |= PFI_IFLAG_ANY;
+ }
+
+ return (kif);
+}
+
+void
+pfi_kif_free(struct pfi_kif *kif)
+{
+ if (kif == NULL)
+ return;
+
+ if (kif->pfik_rules || kif->pfik_states || kif->pfik_routes ||
+ kif->pfik_srcnodes || kif->pfik_flagrefs)
+ panic("kif is still alive");
+
+ free(kif, PFI_MTYPE, sizeof(*kif));
+}
+
+void
+pfi_initialize(void)
+{
+ /*
+ * The first time we arrive here is during kernel boot,
+ * when if_attachsetup() for the first time. No locking
+ * is needed in this case, because it's granted there
+ * is a single thread, which sets pfi_all global var.
+ */
+ if (pfi_all != NULL) /* already initialized */
+ return;
+
+ pool_init(&pfi_addr_pl, sizeof(struct pfi_dynaddr), 0, IPL_SOFTNET, 0,
+ "pfiaddrpl", NULL);
+ pfi_buffer_max = 64;
+ pfi_buffer = mallocarray(pfi_buffer_max, sizeof(*pfi_buffer),
+ PFI_MTYPE, M_WAITOK);
+
+ pfi_all = pfi_kif_alloc(IFG_ALL, M_WAITOK);
+
+ if (RB_INSERT(pfi_ifhead, &pfi_ifs, pfi_all) != NULL)
+ panic("IFG_ALL kif found already");
+}
+
+struct pfi_kif *
+pfi_kif_find(const char *kif_name)
+{
+ struct pfi_kif_cmp s;
+
+ PF_ASSERT_LOCKED();
+
+ memset(&s, 0, sizeof(s));
+ strlcpy(s.pfik_name, kif_name, sizeof(s.pfik_name));
+ return (RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&s));
+}
+
+struct pfi_kif *
+pfi_kif_get(const char *kif_name, struct pfi_kif **prealloc)
+{
+ struct pfi_kif *kif;
+
+ PF_ASSERT_LOCKED();
+
+ if ((kif = pfi_kif_find(kif_name)))
+ return (kif);
+
+ /* create new one */
+ if ((prealloc == NULL) || (*prealloc == NULL)) {
+ kif = pfi_kif_alloc(kif_name, M_NOWAIT);
+ if (kif == NULL)
+ return (NULL);
+ } else {
+ kif = *prealloc;
+ *prealloc = NULL;
+ }
+
+ RB_INSERT(pfi_ifhead, &pfi_ifs, kif);
+ return (kif);
+}
+
+void
+pfi_kif_ref(struct pfi_kif *kif, enum pfi_kif_refs what)
+{
+ PF_ASSERT_LOCKED();
+
+ switch (what) {
+ case PFI_KIF_REF_RULE:
+ kif->pfik_rules++;
+ break;
+ case PFI_KIF_REF_STATE:
+ kif->pfik_states++;
+ break;
+ case PFI_KIF_REF_ROUTE:
+ kif->pfik_routes++;
+ break;
+ case PFI_KIF_REF_SRCNODE:
+ kif->pfik_srcnodes++;
+ break;
+ case PFI_KIF_REF_FLAG:
+ kif->pfik_flagrefs++;
+ break;
+ default:
+ panic("pfi_kif_ref with unknown type");
+ }
+}
+
+void
+pfi_kif_unref(struct pfi_kif *kif, enum pfi_kif_refs what)
+{
+ if (kif == NULL)
+ return;
+
+ PF_ASSERT_LOCKED();
+
+ switch (what) {
+ case PFI_KIF_REF_NONE:
+ break;
+ case PFI_KIF_REF_RULE:
+ if (kif->pfik_rules <= 0) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_kif_unref (%s): rules refcount <= 0",
+ kif->pfik_name);
+ return;
+ }
+ kif->pfik_rules--;
+ break;
+ case PFI_KIF_REF_STATE:
+ if (kif->pfik_states <= 0) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_kif_unref (%s): state refcount <= 0",
+ kif->pfik_name);
+ return;
+ }
+ kif->pfik_states--;
+ break;
+ case PFI_KIF_REF_ROUTE:
+ if (kif->pfik_routes <= 0) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_kif_unref (%s): route refcount <= 0",
+ kif->pfik_name);
+ return;
+ }
+ kif->pfik_routes--;
+ break;
+ case PFI_KIF_REF_SRCNODE:
+ if (kif->pfik_srcnodes <= 0) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_kif_unref (%s): src-node refcount <= 0",
+ kif->pfik_name);
+ return;
+ }
+ kif->pfik_srcnodes--;
+ break;
+ case PFI_KIF_REF_FLAG:
+ if (kif->pfik_flagrefs <= 0) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_kif_unref (%s): flags refcount <= 0",
+ kif->pfik_name);
+ return;
+ }
+ kif->pfik_flagrefs--;
+ break;
+ default:
+ panic("pfi_kif_unref (%s) with unknown type", kif->pfik_name);
+ }
+
+ if (kif->pfik_ifp != NULL || kif->pfik_group != NULL || kif == pfi_all)
+ return;
+
+ if (kif->pfik_rules || kif->pfik_states || kif->pfik_routes ||
+ kif->pfik_srcnodes || kif->pfik_flagrefs)
+ return;
+
+ RB_REMOVE(pfi_ifhead, &pfi_ifs, kif);
+ free(kif, PFI_MTYPE, sizeof(*kif));
+}
+
+int
+pfi_kif_match(struct pfi_kif *rule_kif, struct pfi_kif *packet_kif)
+{
+ struct ifg_list *p;
+
+ if (rule_kif == NULL || rule_kif == packet_kif)
+ return (1);
+
+ if (rule_kif->pfik_group != NULL)
+ TAILQ_FOREACH(p, &packet_kif->pfik_ifp->if_groups, ifgl_next)
+ if (p->ifgl_group == rule_kif->pfik_group)
+ return (1);
+
+ if (rule_kif->pfik_flags & PFI_IFLAG_ANY && packet_kif->pfik_ifp &&
+ !(packet_kif->pfik_ifp->if_flags & PFIFF_LOOPBACK))
+ return (1);
+
+ return (0);
+}
+
+void
+pfi_attach_ifnet(struct ifnet *ifp)
+{
+ struct pfi_kif *kif;
+ struct task *t;
+
+ PF_LOCK();
+ pfi_initialize();
+ pfi_update++;
+ if ((kif = pfi_kif_get(ifp->if_xname, NULL)) == NULL)
+ panic("%s: pfi_kif_get failed", __func__);
+
+ kif->pfik_ifp = ifp;
+ ifp->if_pf_kif = (caddr_t)kif;
+
+ t = malloc(sizeof(*t), PFI_MTYPE, M_WAITOK);
+ task_set(t, pfi_kifaddr_update, kif);
+ if_addrhook_add(ifp, t);
+ kif->pfik_ah_cookie = t;
+
+ pfi_kif_update(kif);
+ PF_UNLOCK();
+}
+
+void
+pfi_detach_ifnet(struct ifnet *ifp)
+{
+ struct pfi_kif *kif;
+ struct task *t;
+
+ if ((kif = (struct pfi_kif *)ifp->if_pf_kif) == NULL)
+ return;
+
+ PF_LOCK();
+ pfi_update++;
+ t = kif->pfik_ah_cookie;
+ kif->pfik_ah_cookie = NULL;
+ if_addrhook_del(ifp, t);
+ free(t, PFI_MTYPE, sizeof(*t));
+
+ pfi_kif_update(kif);
+
+ kif->pfik_ifp = NULL;
+ ifp->if_pf_kif = NULL;
+ pfi_kif_unref(kif, PFI_KIF_REF_NONE);
+ PF_UNLOCK();
+}
+
+void
+pfi_attach_ifgroup(struct ifg_group *ifg)
+{
+ struct pfi_kif *kif;
+
+ PF_LOCK();
+ pfi_initialize();
+ pfi_update++;
+ if ((kif = pfi_kif_get(ifg->ifg_group, NULL)) == NULL)
+ panic("%s: pfi_kif_get failed", __func__);
+
+ kif->pfik_group = ifg;
+ ifg->ifg_pf_kif = (caddr_t)kif;
+ PF_UNLOCK();
+}
+
+void
+pfi_detach_ifgroup(struct ifg_group *ifg)
+{
+ struct pfi_kif *kif;
+
+ if ((kif = (struct pfi_kif *)ifg->ifg_pf_kif) == NULL)
+ return;
+
+ PF_LOCK();
+ pfi_update++;
+
+ kif->pfik_group = NULL;
+ ifg->ifg_pf_kif = NULL;
+ pfi_kif_unref(kif, PFI_KIF_REF_NONE);
+ PF_UNLOCK();
+}
+
+void
+pfi_group_change(const char *group)
+{
+ struct pfi_kif *kif;
+
+ pfi_update++;
+ if ((kif = pfi_kif_get(group, NULL)) == NULL)
+ panic("%s: pfi_kif_get failed", __func__);
+
+ pfi_kif_update(kif);
+}
+
+void
+pfi_group_delmember(const char *group)
+{
+ PF_LOCK();
+ pfi_group_change(group);
+ pfi_xcommit();
+ PF_UNLOCK();
+}
+
+void
+pfi_group_addmember(const char *group)
+{
+ PF_LOCK();
+ pfi_group_change(group);
+ pfi_xcommit();
+ PF_UNLOCK();
+}
+
+int
+pfi_match_addr(struct pfi_dynaddr *dyn, struct pf_addr *a, sa_family_t af)
+{
+ switch (af) {
+ case AF_INET:
+ switch (dyn->pfid_acnt4) {
+ case 0:
+ return (0);
+ case 1:
+ return (pf_match_addr(0, &dyn->pfid_addr4,
+ &dyn->pfid_mask4, a, AF_INET));
+ default:
+ return (pfr_match_addr(dyn->pfid_kt, a, AF_INET));
+ }
+ break;
+#ifdef INET6
+ case AF_INET6:
+ switch (dyn->pfid_acnt6) {
+ case 0:
+ return (0);
+ case 1:
+ return (pf_match_addr(0, &dyn->pfid_addr6,
+ &dyn->pfid_mask6, a, AF_INET6));
+ default:
+ return (pfr_match_addr(dyn->pfid_kt, a, AF_INET6));
+ }
+ break;
+#endif /* INET6 */
+ default:
+ return (0);
+ }
+}
+
+int
+pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af, int wait)
+{
+ struct pfi_dynaddr *dyn;
+ char tblname[PF_TABLE_NAME_SIZE];
+ struct pf_ruleset *ruleset = NULL;
+ int rv = 0;
+
+ if (aw->type != PF_ADDR_DYNIFTL)
+ return (0);
+ if ((dyn = pool_get(&pfi_addr_pl, wait|PR_LIMITFAIL|PR_ZERO)) == NULL)
+ return (1);
+
+ if (!strcmp(aw->v.ifname, "self"))
+ dyn->pfid_kif = pfi_kif_get(IFG_ALL, NULL);
+ else
+ dyn->pfid_kif = pfi_kif_get(aw->v.ifname, NULL);
+ if (dyn->pfid_kif == NULL) {
+ rv = 1;
+ goto _bad;
+ }
+ pfi_kif_ref(dyn->pfid_kif, PFI_KIF_REF_RULE);
+
+ dyn->pfid_net = pfi_unmask(&aw->v.a.mask);
+ if (af == AF_INET && dyn->pfid_net == 32)
+ dyn->pfid_net = 128;
+ strlcpy(tblname, aw->v.ifname, sizeof(tblname));
+ if (aw->iflags & PFI_AFLAG_NETWORK)
+ strlcat(tblname, ":network", sizeof(tblname));
+ if (aw->iflags & PFI_AFLAG_BROADCAST)
+ strlcat(tblname, ":broadcast", sizeof(tblname));
+ if (aw->iflags & PFI_AFLAG_PEER)
+ strlcat(tblname, ":peer", sizeof(tblname));
+ if (aw->iflags & PFI_AFLAG_NOALIAS)
+ strlcat(tblname, ":0", sizeof(tblname));
+ if (dyn->pfid_net != 128)
+ snprintf(tblname + strlen(tblname),
+ sizeof(tblname) - strlen(tblname), "/%d", dyn->pfid_net);
+ if ((ruleset = pf_find_or_create_ruleset(PF_RESERVED_ANCHOR)) == NULL) {
+ rv = 1;
+ goto _bad;
+ }
+
+ if ((dyn->pfid_kt = pfr_attach_table(ruleset, tblname, wait)) == NULL) {
+ rv = 1;
+ goto _bad;
+ }
+
+ dyn->pfid_kt->pfrkt_flags |= PFR_TFLAG_ACTIVE;
+ dyn->pfid_iflags = aw->iflags;
+ dyn->pfid_af = af;
+
+ TAILQ_INSERT_TAIL(&dyn->pfid_kif->pfik_dynaddrs, dyn, entry);
+ aw->p.dyn = dyn;
+ pfi_kif_update(dyn->pfid_kif);
+ return (0);
+
+_bad:
+ if (dyn->pfid_kt != NULL)
+ pfr_detach_table(dyn->pfid_kt);
+ if (ruleset != NULL)
+ pf_remove_if_empty_ruleset(ruleset);
+ if (dyn->pfid_kif != NULL)
+ pfi_kif_unref(dyn->pfid_kif, PFI_KIF_REF_RULE);
+ pool_put(&pfi_addr_pl, dyn);
+ return (rv);
+}
+
+void
+pfi_kif_update(struct pfi_kif *kif)
+{
+ struct ifg_list *ifgl;
+ struct pfi_dynaddr *p;
+
+ /* update all dynaddr */
+ TAILQ_FOREACH(p, &kif->pfik_dynaddrs, entry)
+ pfi_dynaddr_update(p);
+
+ /* again for all groups kif is member of */
+ if (kif->pfik_ifp != NULL)
+ TAILQ_FOREACH(ifgl, &kif->pfik_ifp->if_groups, ifgl_next)
+ pfi_kif_update((struct pfi_kif *)
+ ifgl->ifgl_group->ifg_pf_kif);
+}
+
+void
+pfi_dynaddr_update(struct pfi_dynaddr *dyn)
+{
+ struct pfi_kif *kif;
+ struct pfr_ktable *kt;
+
+ if (dyn == NULL || dyn->pfid_kif == NULL || dyn->pfid_kt == NULL)
+ panic("pfi_dynaddr_update");
+
+ kif = dyn->pfid_kif;
+ kt = dyn->pfid_kt;
+
+ if (kt->pfrkt_larg != pfi_update) {
+ /* this table needs to be brought up-to-date */
+ pfi_table_update(kt, kif, dyn->pfid_net, dyn->pfid_iflags);
+ kt->pfrkt_larg = pfi_update;
+ }
+ pfr_dynaddr_update(kt, dyn);
+}
+
+void
+pfi_table_update(struct pfr_ktable *kt, struct pfi_kif *kif, u_int8_t net, int flags)
+{
+ int e, size2 = 0;
+ struct ifg_member *ifgm;
+
+ pfi_buffer_cnt = 0;
+
+ if (kif->pfik_ifp != NULL)
+ pfi_instance_add(kif->pfik_ifp, net, flags);
+ else if (kif->pfik_group != NULL)
+ TAILQ_FOREACH(ifgm, &kif->pfik_group->ifg_members, ifgm_next)
+ pfi_instance_add(ifgm->ifgm_ifp, net, flags);
+
+ if ((e = pfr_set_addrs(&kt->pfrkt_t, pfi_buffer, pfi_buffer_cnt, &size2,
+ NULL, NULL, NULL, 0, PFR_TFLAG_ALLMASK)))
+ DPFPRINTF(LOG_ERR,
+ "pfi_table_update: cannot set %d new addresses "
+ "into table %s: %d", pfi_buffer_cnt, kt->pfrkt_name, e);
+}
+
+void
+pfi_instance_add(struct ifnet *ifp, u_int8_t net, int flags)
+{
+ struct ifaddr *ifa;
+ int got4 = 0, got6 = 0;
+ int net2, af;
+
+ if (ifp == NULL)
+ return;
+ TAILQ_FOREACH(ifa, &ifp->if_addrlist, ifa_list) {
+ if (ifa->ifa_addr == NULL)
+ continue;
+ af = ifa->ifa_addr->sa_family;
+ if (af != AF_INET && af != AF_INET6)
+ continue;
+ if ((flags & PFI_AFLAG_BROADCAST) && af == AF_INET6)
+ continue;
+ if ((flags & PFI_AFLAG_BROADCAST) &&
+ !(ifp->if_flags & PFIFF_BROADCAST))
+ continue;
+ if ((flags & PFI_AFLAG_PEER) &&
+ !(ifp->if_flags & PFIFF_POINTOPOINT))
+ continue;
+ if ((flags & PFI_AFLAG_NETWORK) && af == AF_INET6 &&
+ IN6_IS_ADDR_LINKLOCAL(
+ &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr))
+ continue;
+ if (flags & PFI_AFLAG_NOALIAS) {
+ if (af == AF_INET && got4)
+ continue;
+ if (af == AF_INET6 && got6)
+ continue;
+ }
+ if (af == AF_INET)
+ got4 = 1;
+ else if (af == AF_INET6)
+ got6 = 1;
+ net2 = net;
+ if (net2 == 128 && (flags & PFI_AFLAG_NETWORK)) {
+ if (af == AF_INET)
+ net2 = pfi_unmask(&((struct sockaddr_in *)
+ ifa->ifa_netmask)->sin_addr);
+ else if (af == AF_INET6)
+ net2 = pfi_unmask(&((struct sockaddr_in6 *)
+ ifa->ifa_netmask)->sin6_addr);
+ }
+ if (af == AF_INET && net2 > 32)
+ net2 = 32;
+ if (flags & PFI_AFLAG_BROADCAST)
+ pfi_address_add(ifa->ifa_broadaddr, af, net2);
+ else if (flags & PFI_AFLAG_PEER)
+ pfi_address_add(ifa->ifa_dstaddr, af, net2);
+ else
+ pfi_address_add(ifa->ifa_addr, af, net2);
+ }
+}
+
+void
+pfi_address_add(struct sockaddr *sa, sa_family_t af, u_int8_t net)
+{
+ struct pfr_addr *p;
+ int i;
+
+ if (pfi_buffer_cnt >= pfi_buffer_max) {
+ int new_max = pfi_buffer_max * 2;
+
+ if (new_max > PFI_BUFFER_MAX) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_address_add: address buffer full (%d/%d)",
+ pfi_buffer_cnt, PFI_BUFFER_MAX);
+ return;
+ }
+ p = mallocarray(new_max, sizeof(*pfi_buffer), PFI_MTYPE,
+ M_DONTWAIT);
+ if (p == NULL) {
+ DPFPRINTF(LOG_ERR,
+ "pfi_address_add: no memory to grow buffer "
+ "(%d/%d)", pfi_buffer_cnt, PFI_BUFFER_MAX);
+ return;
+ }
+ memcpy(p, pfi_buffer, pfi_buffer_max * sizeof(*pfi_buffer));
+ /* no need to zero buffer */
+ free(pfi_buffer, PFI_MTYPE, pfi_buffer_max * sizeof(*pfi_buffer));
+ pfi_buffer = p;
+ pfi_buffer_max = new_max;
+ }
+ if (af == AF_INET && net > 32)
+ net = 128;
+ p = pfi_buffer + pfi_buffer_cnt++;
+ memset(p, 0, sizeof(*p));
+ p->pfra_af = af;
+ p->pfra_net = net;
+ if (af == AF_INET)
+ p->pfra_ip4addr = ((struct sockaddr_in *)sa)->sin_addr;
+ else if (af == AF_INET6) {
+ p->pfra_ip6addr = ((struct sockaddr_in6 *)sa)->sin6_addr;
+ if (IN6_IS_SCOPE_EMBED(&p->pfra_ip6addr))
+ p->pfra_ip6addr.s6_addr16[1] = 0;
+ }
+ /* mask network address bits */
+ if (net < 128)
+ ((caddr_t)p)[p->pfra_net/8] &= ~(0xFF >> (p->pfra_net%8));
+ for (i = (p->pfra_net+7)/8; i < sizeof(p->pfra_u); i++)
+ ((caddr_t)p)[i] = 0;
+}
+
+void
+pfi_dynaddr_remove(struct pf_addr_wrap *aw)
+{
+ if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL ||
+ aw->p.dyn->pfid_kif == NULL || aw->p.dyn->pfid_kt == NULL)
+ return;
+
+ TAILQ_REMOVE(&aw->p.dyn->pfid_kif->pfik_dynaddrs, aw->p.dyn, entry);
+ pfi_kif_unref(aw->p.dyn->pfid_kif, PFI_KIF_REF_RULE);
+ aw->p.dyn->pfid_kif = NULL;
+ pfr_detach_table(aw->p.dyn->pfid_kt);
+ aw->p.dyn->pfid_kt = NULL;
+ pool_put(&pfi_addr_pl, aw->p.dyn);
+ aw->p.dyn = NULL;
+}
+
+void
+pfi_dynaddr_copyout(struct pf_addr_wrap *aw)
+{
+ if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL ||
+ aw->p.dyn->pfid_kif == NULL)
+ return;
+ aw->p.dyncnt = aw->p.dyn->pfid_acnt4 + aw->p.dyn->pfid_acnt6;
+}
+
+void
+pfi_kifaddr_update(void *v)
+{
+ struct pfi_kif *kif = (struct pfi_kif *)v;
+
+ NET_ASSERT_LOCKED();
+
+ PF_LOCK();
+ pfi_update++;
+ pfi_kif_update(kif);
+ PF_UNLOCK();
+}
+
+int
+pfi_if_compare(struct pfi_kif *p, struct pfi_kif *q)
+{
+ return (strncmp(p->pfik_name, q->pfik_name, IFNAMSIZ));
+}
+
+void
+pfi_update_status(const char *name, struct pf_status *pfs)
+{
+ struct pfi_kif *p;
+ struct pfi_kif_cmp key;
+ struct ifg_member p_member, *ifgm;
+ TAILQ_HEAD(, ifg_member) ifg_members;
+ int i, j, k;
+
+ if (*name == '\0' && pfs == NULL) {
+ RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
+ memset(p->pfik_packets, 0, sizeof(p->pfik_packets));
+ memset(p->pfik_bytes, 0, sizeof(p->pfik_bytes));
+ p->pfik_tzero = gettime();
+ }
+ return;
+ }
+
+ strlcpy(key.pfik_name, name, sizeof(key.pfik_name));
+ p = RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&key);
+ if (p == NULL) {
+ return;
+ }
+ if (p->pfik_group != NULL) {
+ memcpy(&ifg_members, &p->pfik_group->ifg_members,
+ sizeof(ifg_members));
+ } else {
+ /* build a temporary list for p only */
+ memset(&p_member, 0, sizeof(p_member));
+ p_member.ifgm_ifp = p->pfik_ifp;
+ TAILQ_INIT(&ifg_members);
+ TAILQ_INSERT_TAIL(&ifg_members, &p_member, ifgm_next);
+ }
+ if (pfs) {
+ memset(pfs->pcounters, 0, sizeof(pfs->pcounters));
+ memset(pfs->bcounters, 0, sizeof(pfs->bcounters));
+ }
+ TAILQ_FOREACH(ifgm, &ifg_members, ifgm_next) {
+ if (ifgm->ifgm_ifp == NULL)
+ continue;
+ p = (struct pfi_kif *)ifgm->ifgm_ifp->if_pf_kif;
+
+ /* just clear statistics */
+ if (pfs == NULL) {
+ memset(p->pfik_packets, 0, sizeof(p->pfik_packets));
+ memset(p->pfik_bytes, 0, sizeof(p->pfik_bytes));
+ p->pfik_tzero = gettime();
+ continue;
+ }
+ for (i = 0; i < 2; i++)
+ for (j = 0; j < 2; j++)
+ for (k = 0; k < 2; k++) {
+ pfs->pcounters[i][j][k] +=
+ p->pfik_packets[i][j][k];
+ pfs->bcounters[i][j] +=
+ p->pfik_bytes[i][j][k];
+ }
+ }
+}
+
+void
+pfi_get_ifaces(const char *name, struct pfi_kif *buf, int *size)
+{
+ struct pfi_kif *p;
+ int n = 0;
+
+ RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
+ if (pfi_skip_if(name, p))
+ continue;
+ if (n >= *size)
+ break;
+ n++;
+ if (!p->pfik_tzero)
+ p->pfik_tzero = gettime();
+ memcpy(buf++, p, sizeof(*buf));
+ }
+ *size = n;
+}
+
+int
+pfi_skip_if(const char *filter, struct pfi_kif *p)
+{
+ struct ifg_list *i;
+ int n;
+
+ PF_ASSERT_LOCKED();
+
+ if (filter == NULL || !*filter)
+ return (0);
+ if (!strcmp(p->pfik_name, filter))
+ return (0); /* exact match */
+ n = strlen(filter);
+ if (n < 1 || n >= IFNAMSIZ)
+ return (1); /* sanity check */
+ if (filter[n-1] >= '0' && filter[n-1] <= '9')
+ return (1); /* group names may not end in a digit */
+ if (p->pfik_ifp != NULL)
+ TAILQ_FOREACH(i, &p->pfik_ifp->if_groups, ifgl_next)
+ if (!strncmp(i->ifgl_group->ifg_group, filter, IFNAMSIZ))
+ return (0); /* iface is in group "filter" */
+ return (1);
+}
+
+int
+pfi_set_flags(const char *name, int flags)
+{
+ struct pfi_kif *p;
+ size_t n;
+
+ PF_ASSERT_LOCKED();
+
+ if (name != NULL && name[0] != '\0') {
+ p = pfi_kif_find(name);
+ if (p == NULL) {
+ n = strlen(name);
+ if (n < 1 || n >= IFNAMSIZ)
+ return (EINVAL);
+
+ if (!isalpha(name[0]))
+ return (EINVAL);
+
+ p = pfi_kif_get(name, NULL);
+ if (p != NULL) {
+ p->pfik_flags_new = p->pfik_flags | flags;
+ /*
+ * We use pfik_flagrefs counter as an
+ * indication whether the kif has been created
+ * on behalf of 'pfi_set_flags()' or not.
+ */
+ KASSERT(p->pfik_flagrefs == 0);
+ if (ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP))
+ pfi_kif_ref(p, PFI_KIF_REF_FLAG);
+ } else
+ panic("%s pfi_kif_get() returned NULL\n",
+ __func__);
+ } else {
+ /*
+ * pf.conf may accidentally contain two set skip on ...
+ * statements. For example:
+ * set skip lo
+ * set skip lo
+ * We need to grab reference only when skip flag is
+ * set to avoid tripping assert pfi_clear_flags()
+ */
+ if (ISSET(flags, PFI_IFLAG_SKIP) &&
+ !ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) &&
+ !ISSET(p->pfik_flags, PFI_IFLAG_SKIP))
+ pfi_kif_ref(p, PFI_KIF_REF_FLAG);
+
+ p->pfik_flags_new = p->pfik_flags | flags;
+ }
+ } else {
+ RB_FOREACH(p, pfi_ifhead, &pfi_ifs)
+ p->pfik_flags_new = p->pfik_flags | flags;
+ }
+
+ return (0);
+}
+
+int
+pfi_clear_flags(const char *name, int flags)
+{
+ struct pfi_kif *p, *w;
+
+ PF_ASSERT_LOCKED();
+
+ if (name != NULL && name[0] != '\0') {
+ p = pfi_kif_find(name);
+ if (p != NULL) {
+ p->pfik_flags_new = p->pfik_flags & ~flags;
+
+ KASSERT((p->pfik_flagrefs == 0) ||
+ (p->pfik_flagrefs == 1));
+
+ if (!ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) &&
+ (p->pfik_flagrefs == 1))
+ pfi_kif_unref(p, PFI_KIF_REF_FLAG);
+ } else
+ return (ESRCH);
+
+ } else
+ RB_FOREACH_SAFE(p, pfi_ifhead, &pfi_ifs, w) {
+ p->pfik_flags_new = p->pfik_flags & ~flags;
+
+ KASSERT((p->pfik_flagrefs == 0) ||
+ (p->pfik_flagrefs == 1));
+
+ if (!ISSET(p->pfik_flags_new, PFI_IFLAG_SKIP) &&
+ (p->pfik_flagrefs == 1))
+ pfi_kif_unref(p, PFI_KIF_REF_FLAG);
+ }
+
+ return (0);
+}
+
+void
+pfi_xcommit(void)
+{
+ struct pfi_kif *p, *gkif;
+ struct ifg_list *g;
+ struct ifnet *ifp;
+ size_t n;
+
+ PF_ASSERT_LOCKED();
+
+ RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
+ p->pfik_flags = p->pfik_flags_new;
+ n = strlen(p->pfik_name);
+ ifp = p->pfik_ifp;
+ /*
+ * if kif is backed by existing interface, then we must use
+ * skip flags found in groups. We use pfik_flags_new, otherwise
+ * we would need to do two RB_FOREACH() passes: the first to
+ * commit group changes the second to commit flag changes for
+ * interfaces.
+ */
+ if (ifp != NULL)
+ TAILQ_FOREACH(g, &ifp->if_groups, ifgl_next) {
+ gkif =
+ (struct pfi_kif *)g->ifgl_group->ifg_pf_kif;
+ KASSERT(gkif != NULL);
+ p->pfik_flags |= gkif->pfik_flags_new;
+ }
+ }
+}
+
+/* from pf_print_state.c */
+int
+pfi_unmask(void *addr)
+{
+ struct pf_addr *m = addr;
+ int i = 31, j = 0, b = 0;
+ u_int32_t tmp;
+
+ while (j < 4 && m->addr32[j] == 0xffffffff) {
+ b += 32;
+ j++;
+ }
+ if (j < 4) {
+ tmp = ntohl(m->addr32[j]);
+ for (i = 31; tmp & (1 << i); --i)
+ b++;
+ }
+ return (b);
+}
+
diff --git a/module/pfsrc/pf_ioctl.c b/module/pfsrc/pf_ioctl.c
new file mode 100644
index 0000000..9d0904b
--- /dev/null
+++ b/module/pfsrc/pf_ioctl.c
@@ -0,0 +1,218 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_ioctl.c — see docs/porting-notes.md */
+#include
+
+struct pf_statelim_kstat {
+ struct kstat_kv name;
+ struct kstat_kv inuse;
+ struct kstat_kv limit;
+ struct kstat_kv admitted;
+ struct kstat_kv hardlimited;
+ struct kstat_kv ratelimited;
+};
+
+static int
+pf_statelim_kstat_read(struct kstat *ks)
+{
+ struct pf_statelim *pfstlim = ks->ks_softc;
+ struct pf_statelim_kstat *d = ks->ks_data;
+ unsigned int gen;
+
+ strlcpy(kstat_kv_istr(&d->name), pfstlim->pfstlim_nm,
+ sizeof(kstat_kv_istr(&d->name)));
+ kstat_kv_u32(&d->limit) = pfstlim->pfstlim_limit;
+
+ pc_cons_enter(&pfstlim->pfstlim_lock, &gen);
+ do {
+ kstat_kv_u32(&d->inuse) = pfstlim->pfstlim_inuse;
+ kstat_kv_u64(&d->admitted) =
+ pfstlim->pfstlim_counters.admitted;
+ kstat_kv_u64(&d->hardlimited) =
+ pfstlim->pfstlim_counters.hardlimited;
+ kstat_kv_u64(&d->ratelimited) =
+ pfstlim->pfstlim_counters.ratelimited;
+ } while (pc_cons_leave(&pfstlim->pfstlim_lock, &gen) != 0);
+
+ nanouptime(&ks->ks_updated);
+
+ return (0);
+};
+
+static void
+pf_statelim_kstat_attach(struct pf_statelim *pfstlim)
+{
+ struct kstat *ks = pfstlim->pfstlim_ks;
+ struct pf_statelim_kstat *d;
+
+ if (ks != NULL)
+ return;
+
+ d = malloc(sizeof(*d), M_DEVBUF, M_WAITOK|M_CANFAIL|M_ZERO);
+ if (d == NULL) {
+ printf("pf: unable to allocate state-limiter kstat\n");
+ return;
+ }
+
+ ks = kstat_create("pf", 0, "state-limiter", pfstlim->pfstlim_id,
+ KSTAT_T_KV, 0);
+ if (ks == NULL) {
+ printf("pf: unable to create state-limiter kstat\n");
+ free(d, M_DEVBUF, sizeof(*d));
+ return;
+ }
+
+ kstat_kv_init(&d->name, "name", KSTAT_KV_T_ISTR);
+ kstat_kv_init(&d->inuse, "in-use", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->limit, "limit", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->admitted, "admitted", KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->hardlimited, "hard-limited", KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->ratelimited, "rate-limited", KSTAT_KV_T_COUNTER64);
+
+ ks->ks_softc = pfstlim;
+ ks->ks_data = d;
+ ks->ks_datalen = sizeof(*d);
+ ks->ks_read = pf_statelim_kstat_read;
+
+ kstat_install(ks);
+
+ pfstlim->pfstlim_ks = ks;
+}
+
+static void
+pf_statelim_kstat_detach(struct pf_statelim *pfstlim)
+{
+ struct kstat *ks = pfstlim->pfstlim_ks;
+ struct pf_statelim_kstat *d;
+
+ if (ks == NULL)
+ return;
+
+ kstat_remove(ks);
+ d = ks->ks_data;
+ kstat_destroy(ks);
+
+ free(d, M_DEVBUF, sizeof(*d));
+}
+
+struct pf_sourcelim_kstat {
+ struct kstat_kv name;
+
+ /* pf_source/address/prefix counters */
+ struct kstat_kv sourceinuse;
+ struct kstat_kv sourcelimit;
+ struct kstat_kv sourceallocs;
+ struct kstat_kv sourcelimited;
+ struct kstat_kv sourcenomem;
+
+ /* state counters */
+ struct kstat_kv inuse;
+ struct kstat_kv limit;
+ struct kstat_kv admitted;
+ struct kstat_kv hardlimited;
+ struct kstat_kv ratelimited;
+};
+
+static int
+pf_sourcelim_kstat_read(struct kstat *ks)
+{
+ struct pf_sourcelim *pfsrlim = ks->ks_softc;
+ struct pf_sourcelim_kstat *d = ks->ks_data;
+ unsigned int gen;
+
+ strlcpy(kstat_kv_istr(&d->name), pfsrlim->pfsrlim_nm,
+ sizeof(kstat_kv_istr(&d->name)));
+ kstat_kv_u32(&d->sourcelimit) = pfsrlim->pfsrlim_entries;
+ kstat_kv_u32(&d->limit) = pfsrlim->pfsrlim_limit;
+
+ pc_cons_enter(&pfsrlim->pfsrlim_lock, &gen);
+ do {
+ kstat_kv_u32(&d->sourceinuse) =
+ pfsrlim->pfsrlim_nsources;
+ kstat_kv_u64(&d->sourceallocs) =
+ pfsrlim->pfsrlim_counters.addrallocs;
+ kstat_kv_u64(&d->sourcelimited) =
+ pfsrlim->pfsrlim_counters.addrlimited;
+ kstat_kv_u64(&d->sourcenomem) =
+ pfsrlim->pfsrlim_counters.addrnomem;
+
+ kstat_kv_u32(&d->inuse) =
+ pfsrlim->pfsrlim_counters.inuse;
+ kstat_kv_u64(&d->admitted) =
+ pfsrlim->pfsrlim_counters.admitted;
+ kstat_kv_u64(&d->hardlimited) =
+ pfsrlim->pfsrlim_counters.hardlimited;
+ kstat_kv_u64(&d->ratelimited) =
+ pfsrlim->pfsrlim_counters.ratelimited;
+ } while (pc_cons_leave(&pfsrlim->pfsrlim_lock, &gen) != 0);
+
+ nanouptime(&ks->ks_updated);
+
+ return (0);
+};
+
+static void
+pf_sourcelim_kstat_attach(struct pf_sourcelim *pfsrlim)
+{
+ struct kstat *ks = pfsrlim->pfsrlim_ks;
+ struct pf_sourcelim_kstat *d;
+
+ if (ks != NULL)
+ return;
+
+ d = malloc(sizeof(*d), M_DEVBUF, M_WAITOK|M_CANFAIL|M_ZERO);
+ if (d == NULL) {
+ printf("pf: unable to allocate source-limiter kstat\n");
+ return;
+ }
+
+ ks = kstat_create("pf", 0, "source-limiter", pfsrlim->pfsrlim_id,
+ KSTAT_T_KV, 0);
+ if (ks == NULL) {
+ printf("pf: unable to create source-limiter kstat\n");
+ free(d, M_DEVBUF, sizeof(*d));
+ return;
+ }
+
+ kstat_kv_init(&d->name, "name", KSTAT_KV_T_ISTR);
+
+ kstat_kv_init(&d->sourceinuse, "source-in-use", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->sourcelimit, "source-limit", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->sourceallocs, "source-allocs",
+ KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->sourcelimited, "source-limited",
+ KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->sourcenomem, "source-nomem",
+ KSTAT_KV_T_COUNTER64);
+
+ kstat_kv_init(&d->inuse, "in-use", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->limit, "limit", KSTAT_KV_T_UINT32);
+ kstat_kv_init(&d->admitted, "admitted", KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->hardlimited, "hard-limited", KSTAT_KV_T_COUNTER64);
+ kstat_kv_init(&d->ratelimited, "rate-limited", KSTAT_KV_T_COUNTER64);
+
+ ks->ks_softc = pfsrlim;
+ ks->ks_data = d;
+ ks->ks_datalen = sizeof(*d);
+ ks->ks_read = pf_sourcelim_kstat_read;
+
+ kstat_install(ks);
+
+ pfsrlim->pfsrlim_ks = ks;
+}
+
+static void
+pf_sourcelim_kstat_detach(struct pf_sourcelim *pfsrlim)
+{
+ struct kstat *ks = pfsrlim->pfsrlim_ks;
+ struct pf_sourcelim_kstat *d;
+
+ if (ks == NULL)
+ return;
+
+ kstat_remove(ks);
+ d = ks->ks_data;
+ kstat_destroy(ks);
+
+ free(d, M_DEVBUF, sizeof(*d));
+}
+
+#endif /* NKSTAT > 0 */
diff --git a/module/pfsrc/pf_lb.c b/module/pfsrc/pf_lb.c
new file mode 100644
index 0000000..bf18a6a
--- /dev/null
+++ b/module/pfsrc/pf_lb.c
@@ -0,0 +1,945 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_lb.c — see docs/porting-notes.md */
+#include
+
+u_int64_t pf_hash(struct pf_addr *, struct pf_addr *,
+ struct pf_poolhashkey *, sa_family_t);
+int pf_get_sport(struct pf_pdesc *, struct pf_rule *,
+ struct pf_addr *, u_int16_t *, u_int16_t,
+ u_int16_t, struct pf_src_node **);
+int pf_map_addr_states_increase(sa_family_t,
+ struct pf_pool *, struct pf_addr *);
+int pf_get_transaddr_af(struct pf_rule *,
+ struct pf_pdesc *, struct pf_src_node **);
+int pf_map_addr_sticky(sa_family_t, struct pf_rule *,
+ struct pf_addr *, struct pf_addr *,
+ struct pf_src_node **, struct pf_pool *,
+ enum pf_sn_types);
+int pf_pool_states_decrease_addr(struct pf_pool *, int,
+ struct pf_addr *);
+
+u_int64_t
+pf_hash(struct pf_addr *inaddr, struct pf_addr *hash,
+ struct pf_poolhashkey *key, sa_family_t af)
+{
+ uint64_t res = 0;
+#ifdef INET6
+ union {
+ uint64_t hash64;
+ uint32_t hash32[2];
+ } h;
+#endif /* INET6 */
+
+ switch (af) {
+ case AF_INET:
+ res = SipHash24((SIPHASH_KEY *)key,
+ &inaddr->addr32[0], sizeof(inaddr->addr32[0]));
+ hash->addr32[0] = res;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ res = SipHash24((SIPHASH_KEY *)key, &inaddr->addr32[0],
+ 4 * sizeof(inaddr->addr32[0]));
+ h.hash64 = res;
+ hash->addr32[0] = h.hash32[0];
+ hash->addr32[1] = h.hash32[1];
+ /*
+ * siphash isn't big enough, but flipping it around is
+ * good enough here.
+ */
+ hash->addr32[2] = ~h.hash32[1];
+ hash->addr32[3] = ~h.hash32[0];
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ return (res);
+}
+
+int
+pf_get_sport(struct pf_pdesc *pd, struct pf_rule *r,
+ struct pf_addr *naddr, u_int16_t *nport, u_int16_t low, u_int16_t high,
+ struct pf_src_node **sn)
+{
+ struct pf_state_key_cmp key;
+ struct pf_addr init_addr;
+ u_int16_t cut;
+ int dir = (pd->dir == PF_IN) ? PF_OUT : PF_IN;
+ int sidx = pd->sidx;
+ int didx = pd->didx;
+
+ memset(&init_addr, 0, sizeof(init_addr));
+ if (pf_map_addr(pd->naf, r, &pd->nsaddr, naddr, &init_addr, sn, &r->nat,
+ PF_SN_NAT))
+ return (1);
+
+ if (pd->proto == IPPROTO_ICMP) {
+ if (pd->ndport == htons(ICMP_ECHO)) {
+ low = 1;
+ high = 65535;
+ } else
+ return (0); /* Don't try to modify non-echo ICMP */
+ }
+#ifdef INET6
+ if (pd->proto == IPPROTO_ICMPV6) {
+ if (pd->ndport == htons(ICMP6_ECHO_REQUEST)) {
+ low = 1;
+ high = 65535;
+ } else
+ return (0); /* Don't try to modify non-echo ICMP */
+ }
+#endif /* INET6 */
+
+ do {
+ key.af = pd->naf;
+ key.proto = pd->proto;
+ key.rdomain = pd->rdomain;
+ pf_addrcpy(&key.addr[didx], &pd->ndaddr, key.af);
+ pf_addrcpy(&key.addr[sidx], naddr, key.af);
+ key.port[didx] = pd->ndport;
+
+ /*
+ * port search; start random, step;
+ * similar 2 portloop in in_pcbbind
+ */
+ if (!(pd->proto == IPPROTO_TCP || pd->proto == IPPROTO_UDP ||
+ pd->proto == IPPROTO_ICMP || pd->proto == IPPROTO_ICMPV6)) {
+ /* XXX bug: icmp states dont use the id on both
+ * XXX sides (traceroute -I through nat) */
+ key.port[sidx] = pd->nsport;
+ key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0],
+ &key.addr[1], key.port[0], key.port[1]);
+ if (pf_find_state_all(&key, dir, NULL) == NULL) {
+ *nport = pd->nsport;
+ return (0);
+ }
+ } else if (low == 0 && high == 0) {
+ key.port[sidx] = pd->nsport;
+ key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0],
+ &key.addr[1], key.port[0], key.port[1]);
+ if (pf_find_state_all(&key, dir, NULL) == NULL) {
+ *nport = pd->nsport;
+ return (0);
+ }
+ } else if (low == high) {
+ key.port[sidx] = htons(low);
+ key.hash = pf_pkt_hash(key.af, key.proto, &key.addr[0],
+ &key.addr[1], key.port[0], key.port[1]);
+ if (pf_find_state_all(&key, dir, NULL) == NULL) {
+ *nport = htons(low);
+ return (0);
+ }
+ } else {
+ u_int32_t tmp;
+
+ if (low > high) {
+ tmp = low;
+ low = high;
+ high = tmp;
+ }
+ /* low < high */
+ cut = arc4random_uniform(1 + high - low) + low;
+ /* low <= cut <= high */
+ for (tmp = cut; tmp <= high && tmp <= 0xffff; ++tmp) {
+ key.port[sidx] = htons(tmp);
+ key.hash = pf_pkt_hash(key.af, key.proto,
+ &key.addr[0], &key.addr[1], key.port[0],
+ key.port[1]);
+ if (pf_find_state_all(&key, dir, NULL) ==
+ NULL && !in_baddynamic(tmp, pd->proto)) {
+ *nport = htons(tmp);
+ return (0);
+ }
+ }
+ tmp = cut;
+ for (tmp -= 1; tmp >= low && tmp <= 0xffff; --tmp) {
+ key.port[sidx] = htons(tmp);
+ key.hash = pf_pkt_hash(key.af, key.proto,
+ &key.addr[0], &key.addr[1], key.port[0],
+ key.port[1]);
+ if (pf_find_state_all(&key, dir, NULL) ==
+ NULL && !in_baddynamic(tmp, pd->proto)) {
+ *nport = htons(tmp);
+ return (0);
+ }
+ }
+ }
+
+ switch (r->nat.opts & PF_POOL_TYPEMASK) {
+ case PF_POOL_RANDOM:
+ case PF_POOL_ROUNDROBIN:
+ case PF_POOL_LEASTSTATES:
+ /*
+ * pick a different source address since we're out
+ * of free port choices for the current one.
+ */
+ if (pf_map_addr(pd->naf, r, &pd->nsaddr, naddr,
+ &init_addr, sn, &r->nat, PF_SN_NAT))
+ return (1);
+ break;
+ case PF_POOL_NONE:
+ case PF_POOL_SRCHASH:
+ case PF_POOL_BITMASK:
+ default:
+ return (1);
+ }
+ } while (! PF_AEQ(&init_addr, naddr, pd->naf) );
+ return (1); /* none available */
+}
+
+int
+pf_map_addr_sticky(sa_family_t af, struct pf_rule *r, struct pf_addr *saddr,
+ struct pf_addr *naddr, struct pf_src_node **sns, struct pf_pool *rpool,
+ enum pf_sn_types type)
+{
+ struct pf_addr *raddr, *rmask, *cached;
+ struct pf_state *s;
+ struct pf_src_node k;
+ int valid;
+
+ k.af = af;
+ k.type = type;
+ pf_addrcpy(&k.addr, saddr, af);
+ k.rule.ptr = r;
+ pf_status.scounters[SCNT_SRC_NODE_SEARCH]++;
+ sns[type] = RB_FIND(pf_src_tree, &tree_src_tracking, &k);
+ if (sns[type] == NULL)
+ return (-1);
+
+ /* check if the cached entry is still valid */
+ cached = &(sns[type])->raddr;
+ valid = 0;
+ if (PF_AZERO(cached, af)) {
+ valid = 1;
+ } else if (rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_kentry_byaddr(rpool->addr.p.dyn->pfid_kt, cached,
+ af, 0))
+ valid = 1;
+ } else if (rpool->addr.type == PF_ADDR_TABLE) {
+ if (pfr_kentry_byaddr(rpool->addr.p.tbl, cached, af, 0))
+ valid = 1;
+ } else if (rpool->addr.type != PF_ADDR_NOROUTE) {
+ raddr = &rpool->addr.v.a.addr;
+ rmask = &rpool->addr.v.a.mask;
+ valid = pf_match_addr(0, raddr, rmask, cached, af);
+ }
+ if (!valid) {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: pf_map_addr: "
+ "stale src tracking (%u) ", type);
+ pf_print_host(&k.addr, 0, af);
+ addlog(" to ");
+ pf_print_host(cached, 0, af);
+ addlog("\n");
+ }
+ if (sns[type]->states != 0) {
+ /* XXX expensive */
+ RBT_FOREACH(s, pf_state_tree_id, &tree_id)
+ pf_state_rm_src_node(s, sns[type]);
+ }
+ sns[type]->expire = 1;
+ pf_remove_src_node(sns[type]);
+ sns[type] = NULL;
+ return (-1);
+ }
+
+
+ if (!PF_AZERO(cached, af)) {
+ pf_addrcpy(naddr, cached, af);
+ if ((rpool->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES &&
+ pf_map_addr_states_increase(af, rpool, cached) == -1)
+ return (-1);
+ }
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: pf_map_addr: "
+ "src tracking (%u) maps ", type);
+ pf_print_host(&k.addr, 0, af);
+ addlog(" to ");
+ pf_print_host(naddr, 0, af);
+ addlog("\n");
+ }
+
+ if (sns[type]->kif != NULL)
+ rpool->kif = sns[type]->kif;
+
+ return (0);
+}
+
+uint32_t
+pf_rand_addr(uint32_t mask)
+{
+ uint32_t addr;
+
+ mask = ~ntohl(mask);
+ addr = arc4random_uniform(mask + 1);
+
+ return (htonl(addr));
+}
+
+int
+pf_map_addr(sa_family_t af, struct pf_rule *r, struct pf_addr *saddr,
+ struct pf_addr *naddr, struct pf_addr *init_addr, struct pf_src_node **sns,
+ struct pf_pool *rpool, enum pf_sn_types type)
+{
+ struct pf_addr hash;
+ struct pf_addr faddr;
+ struct pf_addr *raddr = &rpool->addr.v.a.addr;
+ struct pf_addr *rmask = &rpool->addr.v.a.mask;
+ struct pfr_ktable *kt;
+ struct pfi_kif *kif;
+ u_int64_t states;
+ u_int16_t weight;
+ u_int64_t load;
+ u_int64_t cload;
+ u_int64_t hashidx;
+ int cnt;
+
+ if (sns[type] == NULL && rpool->opts & PF_POOL_STICKYADDR &&
+ (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE &&
+ pf_map_addr_sticky(af, r, saddr, naddr, sns, rpool, type) == 0)
+ return (0);
+
+ if (rpool->addr.type == PF_ADDR_NOROUTE)
+ return (1);
+ if (rpool->addr.type == PF_ADDR_DYNIFTL) {
+ switch (af) {
+ case AF_INET:
+ if (rpool->addr.p.dyn->pfid_acnt4 < 1 &&
+ !PF_POOL_DYNTYPE(rpool->opts))
+ return (1);
+ raddr = &rpool->addr.p.dyn->pfid_addr4;
+ rmask = &rpool->addr.p.dyn->pfid_mask4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (rpool->addr.p.dyn->pfid_acnt6 < 1 &&
+ !PF_POOL_DYNTYPE(rpool->opts))
+ return (1);
+ raddr = &rpool->addr.p.dyn->pfid_addr6;
+ rmask = &rpool->addr.p.dyn->pfid_mask6;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ } else if (rpool->addr.type == PF_ADDR_TABLE) {
+ if (!PF_POOL_DYNTYPE(rpool->opts))
+ return (1); /* unsupported */
+ } else {
+ raddr = &rpool->addr.v.a.addr;
+ rmask = &rpool->addr.v.a.mask;
+ }
+
+ switch (rpool->opts & PF_POOL_TYPEMASK) {
+ case PF_POOL_NONE:
+ pf_addrcpy(naddr, raddr, af);
+ break;
+ case PF_POOL_BITMASK:
+ pf_poolmask(naddr, raddr, rmask, saddr, af);
+ break;
+ case PF_POOL_RANDOM:
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (rpool->addr.type == PF_ADDR_TABLE)
+ kt = rpool->addr.p.tbl;
+ else
+ kt = rpool->addr.p.dyn->pfid_kt;
+ kt = pfr_ktable_select_active(kt);
+ if (kt == NULL)
+ return (1);
+
+ cnt = kt->pfrkt_cnt;
+ if (cnt == 0)
+ rpool->tblidx = 0;
+ else
+ rpool->tblidx = (int)arc4random_uniform(cnt);
+ memset(&rpool->counter, 0, sizeof(rpool->counter));
+ if (pfr_pool_get(rpool, &raddr, &rmask, af))
+ return (1);
+ pf_addrcpy(naddr, &rpool->counter, af);
+ } else if (init_addr != NULL && PF_AZERO(init_addr, af)) {
+ switch (af) {
+ case AF_INET:
+ rpool->counter.addr32[0] = pf_rand_addr(
+ rmask->addr32[0]);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (rmask->addr32[3] != 0xffffffff)
+ rpool->counter.addr32[3] = pf_rand_addr(
+ rmask->addr32[3]);
+ else
+ break;
+ if (rmask->addr32[2] != 0xffffffff)
+ rpool->counter.addr32[2] = pf_rand_addr(
+ rmask->addr32[2]);
+ else
+ break;
+ if (rmask->addr32[1] != 0xffffffff)
+ rpool->counter.addr32[1] = pf_rand_addr(
+ rmask->addr32[1]);
+ else
+ break;
+ if (rmask->addr32[0] != 0xffffffff)
+ rpool->counter.addr32[0] = pf_rand_addr(
+ rmask->addr32[0]);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ pf_poolmask(naddr, raddr, rmask, &rpool->counter, af);
+ pf_addrcpy(init_addr, naddr, af);
+
+ } else {
+ pf_addr_inc(&rpool->counter, af);
+ pf_poolmask(naddr, raddr, rmask, &rpool->counter, af);
+ }
+ break;
+ case PF_POOL_SRCHASH:
+ hashidx = pf_hash(saddr, &hash, &rpool->key, af);
+
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (rpool->addr.type == PF_ADDR_TABLE)
+ kt = rpool->addr.p.tbl;
+ else
+ kt = rpool->addr.p.dyn->pfid_kt;
+ kt = pfr_ktable_select_active(kt);
+ if (kt == NULL)
+ return (1);
+
+ cnt = kt->pfrkt_cnt;
+ if (cnt == 0)
+ rpool->tblidx = 0;
+ else
+ rpool->tblidx = (int)(hashidx % cnt);
+ memset(&rpool->counter, 0, sizeof(rpool->counter));
+ if (pfr_pool_get(rpool, &raddr, &rmask, af))
+ return (1);
+ pf_addrcpy(naddr, &rpool->counter, af);
+ } else {
+ pf_poolmask(naddr, raddr, rmask, &hash, af);
+ }
+ break;
+ case PF_POOL_ROUNDROBIN:
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_pool_get(rpool, &raddr, &rmask, af)) {
+ /*
+ * reset counter in case its value
+ * has been removed from the pool.
+ */
+ memset(&rpool->counter, 0,
+ sizeof(rpool->counter));
+ if (pfr_pool_get(rpool, &raddr, &rmask, af))
+ return (1);
+ }
+ } else if (PF_AZERO(&rpool->counter, af)) {
+ /*
+ * fall back to POOL_NONE if there is a single host
+ * address in pool.
+ */
+ if (af == AF_INET &&
+ rmask->addr32[0] == INADDR_BROADCAST) {
+ pf_addrcpy(naddr, raddr, af);
+ break;
+ }
+#ifdef INET6
+ if (af == AF_INET6 &&
+ IN6_ARE_ADDR_EQUAL(&rmask->v6, &in6mask128)) {
+ pf_addrcpy(naddr, raddr, af);
+ break;
+ }
+#endif
+ } else if (pf_match_addr(0, raddr, rmask, &rpool->counter, af))
+ return (1);
+
+ /* iterate over table if it contains entries which are weighted */
+ if ((rpool->addr.type == PF_ADDR_TABLE &&
+ rpool->addr.p.tbl->pfrkt_refcntcost > 0) ||
+ (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0)) {
+ do {
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_pool_get(rpool,
+ &raddr, &rmask, af))
+ return (1);
+ } else {
+ log(LOG_ERR, "pf: pf_map_addr: "
+ "weighted RR failure");
+ return (1);
+ }
+ if (rpool->weight >= rpool->curweight)
+ break;
+ pf_addr_inc(&rpool->counter, af);
+ } while (1);
+
+ weight = rpool->weight;
+ }
+
+ pf_poolmask(naddr, raddr, rmask, &rpool->counter, af);
+ if (init_addr != NULL && PF_AZERO(init_addr, af))
+ pf_addrcpy(init_addr, &rpool->counter, af);
+ pf_addr_inc(&rpool->counter, af);
+ break;
+ case PF_POOL_LEASTSTATES:
+ /* retrieve an address first */
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_pool_get(rpool, &raddr, &rmask, af)) {
+ /* see PF_POOL_ROUNDROBIN */
+ memset(&rpool->counter, 0,
+ sizeof(rpool->counter));
+ if (pfr_pool_get(rpool, &raddr, &rmask, af))
+ return (1);
+ }
+ } else if (pf_match_addr(0, raddr, rmask, &rpool->counter, af))
+ return (1);
+
+ states = rpool->states;
+ weight = rpool->weight;
+ kif = rpool->kif;
+
+ if ((rpool->addr.type == PF_ADDR_TABLE &&
+ rpool->addr.p.tbl->pfrkt_refcntcost > 0) ||
+ (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0))
+ load = ((UINT16_MAX * rpool->states) / rpool->weight);
+ else
+ load = states;
+
+ pf_addrcpy(&faddr, &rpool->counter, af);
+
+ pf_addrcpy(naddr, &rpool->counter, af);
+ if (init_addr != NULL && PF_AZERO(init_addr, af))
+ pf_addrcpy(init_addr, naddr, af);
+
+ /*
+ * iterate *once* over whole table and find destination with
+ * least connection
+ */
+ do {
+ pf_addr_inc(&rpool->counter, af);
+ if (rpool->addr.type == PF_ADDR_TABLE ||
+ rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_pool_get(rpool, &raddr, &rmask, af))
+ return (1);
+ } else if (pf_match_addr(0, raddr, rmask,
+ &rpool->counter, af))
+ return (1);
+
+ if ((rpool->addr.type == PF_ADDR_TABLE &&
+ rpool->addr.p.tbl->pfrkt_refcntcost > 0) ||
+ (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0))
+ cload = ((UINT16_MAX * rpool->states)
+ / rpool->weight);
+ else
+ cload = rpool->states;
+
+ /* find lc minimum */
+ if (cload < load) {
+ states = rpool->states;
+ weight = rpool->weight;
+ kif = rpool->kif;
+ load = cload;
+
+ pf_addrcpy(naddr, &rpool->counter, af);
+ if (init_addr != NULL &&
+ PF_AZERO(init_addr, af))
+ pf_addrcpy(init_addr, naddr, af);
+ }
+ } while (pf_match_addr(1, &faddr, rmask, &rpool->counter, af) &&
+ (states > 0));
+
+ if (pf_map_addr_states_increase(af, rpool, naddr) == -1)
+ return (1);
+ /* revert the kif which was set by pfr_pool_get() */
+ rpool->kif = kif;
+ break;
+ }
+
+ if (rpool->opts & PF_POOL_STICKYADDR) {
+ if (sns[type] != NULL) {
+ pf_remove_src_node(sns[type]);
+ sns[type] = NULL;
+ }
+ if (pf_insert_src_node(&sns[type], r, type, af, saddr, naddr,
+ rpool->kif))
+ return (1);
+ }
+
+ if (pf_status.debug >= LOG_INFO &&
+ (rpool->opts & PF_POOL_TYPEMASK) != PF_POOL_NONE) {
+ log(LOG_INFO, "pf: pf_map_addr: selected address ");
+ pf_print_host(naddr, 0, af);
+ if ((rpool->opts & PF_POOL_TYPEMASK) ==
+ PF_POOL_LEASTSTATES)
+ addlog(" with state count %llu", states);
+ if ((rpool->addr.type == PF_ADDR_TABLE &&
+ rpool->addr.p.tbl->pfrkt_refcntcost > 0) ||
+ (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ rpool->addr.p.dyn->pfid_kt->pfrkt_refcntcost > 0))
+ addlog(" with weight %u", weight);
+ addlog("\n");
+ }
+
+ return (0);
+}
+
+int
+pf_map_addr_states_increase(sa_family_t af, struct pf_pool *rpool,
+ struct pf_addr *naddr)
+{
+ if (rpool->addr.type == PF_ADDR_TABLE) {
+ if (pfr_states_increase(rpool->addr.p.tbl,
+ naddr, af) == -1) {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG,
+ "pf: pf_map_addr_states_increase: "
+ "selected address ");
+ pf_print_host(naddr, 0, af);
+ addlog(". Failed to increase count!\n");
+ }
+ return (-1);
+ }
+ } else if (rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if (pfr_states_increase(rpool->addr.p.dyn->pfid_kt,
+ naddr, af) == -1) {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG,
+ "pf: pf_map_addr_states_increase: "
+ "selected address ");
+ pf_print_host(naddr, 0, af);
+ addlog(". Failed to increase count!\n");
+ }
+ return (-1);
+ }
+ }
+ return (0);
+}
+
+int
+pf_get_transaddr(struct pf_rule *r, struct pf_pdesc *pd,
+ struct pf_src_node **sns, struct pf_rule **nr)
+{
+ struct pf_addr naddr;
+ u_int16_t nport;
+
+#ifdef INET6
+ if (pd->af != pd->naf)
+ return (pf_get_transaddr_af(r, pd, sns));
+#endif /* INET6 */
+
+ if (r->nat.addr.type != PF_ADDR_NONE) {
+ /* XXX is this right? what if rtable is changed at the same
+ * XXX time? where do I need to figure out the sport? */
+ nport = 0;
+ if (pf_get_sport(pd, r, &naddr, &nport,
+ r->nat.proxy_port[0], r->nat.proxy_port[1], sns)) {
+ DPFPRINTF(LOG_NOTICE,
+ "pf: NAT proxy port allocation (%u-%u) failed",
+ r->nat.proxy_port[0],
+ r->nat.proxy_port[1]);
+ return (-1);
+ }
+ /* decrease least-connection state counter of the previous */
+ if ((*nr) != NULL && (*nr)->nat.addr.type != PF_ADDR_NONE &&
+ ((*nr)->nat.opts & PF_POOL_TYPEMASK) ==
+ PF_POOL_LEASTSTATES)
+ pf_pool_states_decrease_addr(&(*nr)->nat, pd->af,
+ &pd->nsaddr);
+ *nr = r;
+ pf_addrcpy(&pd->nsaddr, &naddr, pd->af);
+ pd->nsport = nport;
+ }
+ if (r->rdr.addr.type != PF_ADDR_NONE) {
+ if (pf_map_addr(pd->af, r, &pd->nsaddr, &naddr, NULL, sns,
+ &r->rdr, PF_SN_RDR))
+ return (-1);
+ if ((r->rdr.opts & PF_POOL_TYPEMASK) == PF_POOL_BITMASK)
+ pf_poolmask(&naddr, &naddr, &r->rdr.addr.v.a.mask,
+ &pd->ndaddr, pd->af);
+
+ nport = 0;
+ if (r->rdr.proxy_port[1]) {
+ u_int32_t tmp_nport;
+ u_int16_t div;
+
+ div = r->rdr.proxy_port[1] - r->rdr.proxy_port[0] + 1;
+ div = (div == 0) ? 1 : div;
+
+ tmp_nport = ((ntohs(pd->ndport) - ntohs(r->dst.port[0])) % div) +
+ r->rdr.proxy_port[0];
+
+ /* wrap around if necessary */
+ if (tmp_nport > 65535)
+ tmp_nport -= 65535;
+ nport = htons((u_int16_t)tmp_nport);
+ } else if (r->rdr.proxy_port[0])
+ nport = htons(r->rdr.proxy_port[0]);
+ /* decrease least-connection state counter of the previous */
+ if ((*nr) != NULL && (*nr)->rdr.addr.type != PF_ADDR_NONE &&
+ ((*nr)->rdr.opts & PF_POOL_TYPEMASK) ==
+ PF_POOL_LEASTSTATES)
+ pf_pool_states_decrease_addr(&(*nr)->rdr, pd->af,
+ &pd->ndaddr);
+ *nr = r;
+ pf_addrcpy(&pd->ndaddr, &naddr, pd->af);
+ if (nport)
+ pd->ndport = nport;
+ }
+
+ return (0);
+}
+
+#ifdef INET6
+int
+pf_get_transaddr_af(struct pf_rule *r, struct pf_pdesc *pd,
+ struct pf_src_node **sns)
+{
+ struct pf_addr ndaddr, nsaddr, naddr;
+ u_int16_t nport;
+ int prefixlen = 96;
+
+ if (pf_status.debug >= LOG_INFO) {
+ log(LOG_INFO, "pf: af-to %s %s, ",
+ pd->naf == AF_INET ? "inet" : "inet6",
+ r->rdr.addr.type == PF_ADDR_NONE ? "nat" : "rdr");
+ pf_print_host(&pd->nsaddr, pd->nsport, pd->af);
+ addlog(" -> ");
+ pf_print_host(&pd->ndaddr, pd->ndport, pd->af);
+ addlog("\n");
+ }
+
+ if (r->nat.addr.type == PF_ADDR_NONE)
+ panic("pf_get_transaddr_af: no nat pool for source address");
+
+ /* get source address and port */
+ nport = 0;
+ if (pf_get_sport(pd, r, &nsaddr, &nport,
+ r->nat.proxy_port[0], r->nat.proxy_port[1], sns)) {
+ DPFPRINTF(LOG_NOTICE,
+ "pf: af-to NAT proxy port allocation (%u-%u) failed",
+ r->nat.proxy_port[0],
+ r->nat.proxy_port[1]);
+ return (-1);
+ }
+ pd->nsport = nport;
+
+ if (pd->proto == IPPROTO_ICMPV6 && pd->naf == AF_INET) {
+ if (pd->dir == PF_IN) {
+ pd->ndport = ntohs(pd->ndport);
+ if (pd->ndport == ICMP6_ECHO_REQUEST)
+ pd->ndport = ICMP_ECHO;
+ else if (pd->ndport == ICMP6_ECHO_REPLY)
+ pd->ndport = ICMP_ECHOREPLY;
+ pd->ndport = htons(pd->ndport);
+ } else {
+ pd->nsport = ntohs(pd->nsport);
+ if (pd->nsport == ICMP6_ECHO_REQUEST)
+ pd->nsport = ICMP_ECHO;
+ else if (pd->nsport == ICMP6_ECHO_REPLY)
+ pd->nsport = ICMP_ECHOREPLY;
+ pd->nsport = htons(pd->nsport);
+ }
+ } else if (pd->proto == IPPROTO_ICMP && pd->naf == AF_INET6) {
+ if (pd->dir == PF_IN) {
+ pd->ndport = ntohs(pd->ndport);
+ if (pd->ndport == ICMP_ECHO)
+ pd->ndport = ICMP6_ECHO_REQUEST;
+ else if (pd->ndport == ICMP_ECHOREPLY)
+ pd->ndport = ICMP6_ECHO_REPLY;
+ pd->ndport = htons(pd->ndport);
+ } else {
+ pd->nsport = ntohs(pd->nsport);
+ if (pd->nsport == ICMP_ECHO)
+ pd->nsport = ICMP6_ECHO_REQUEST;
+ else if (pd->nsport == ICMP_ECHOREPLY)
+ pd->nsport = ICMP6_ECHO_REPLY;
+ pd->nsport = htons(pd->nsport);
+ }
+ }
+
+ /* get the destination address and port */
+ if (r->rdr.addr.type != PF_ADDR_NONE) {
+ if (pf_map_addr(pd->naf, r, &nsaddr, &naddr, NULL, sns,
+ &r->rdr, PF_SN_RDR))
+ return (-1);
+ if (r->rdr.proxy_port[0])
+ pd->ndport = htons(r->rdr.proxy_port[0]);
+
+ if (pd->naf == AF_INET) {
+ /* The prefix is the IPv4 rdr address */
+ prefixlen = in_mask2len((struct in_addr *)
+ &r->rdr.addr.v.a.mask);
+ inet_nat46(pd->naf, &pd->ndaddr,
+ &ndaddr, &naddr, prefixlen);
+ } else {
+ /* The prefix is the IPv6 rdr address */
+ prefixlen =
+ in6_mask2len((struct in6_addr *)
+ &r->rdr.addr.v.a.mask, NULL);
+ inet_nat64(pd->naf, &pd->ndaddr,
+ &ndaddr, &naddr, prefixlen);
+ }
+ } else {
+ if (pd->naf == AF_INET) {
+ /* The prefix is the IPv6 dst address */
+ prefixlen =
+ in6_mask2len((struct in6_addr *)
+ &r->dst.addr.v.a.mask, NULL);
+ if (prefixlen < 32)
+ prefixlen = 96;
+ inet_nat64(pd->naf, &pd->ndaddr,
+ &ndaddr, &pd->ndaddr, prefixlen);
+ } else {
+ /*
+ * The prefix is the IPv6 nat address
+ * (that was stored in pd->nsaddr)
+ */
+ prefixlen = in6_mask2len((struct in6_addr *)
+ &r->nat.addr.v.a.mask, NULL);
+ if (prefixlen > 96)
+ prefixlen = 96;
+ inet_nat64(pd->naf, &pd->ndaddr,
+ &ndaddr, &nsaddr, prefixlen);
+ }
+ }
+
+ pf_addrcpy(&pd->nsaddr, &nsaddr, pd->naf);
+ pf_addrcpy(&pd->ndaddr, &ndaddr, pd->naf);
+
+ if (pf_status.debug >= LOG_INFO) {
+ log(LOG_INFO, "pf: af-to %s %s done, prefixlen %d, ",
+ pd->naf == AF_INET ? "inet" : "inet6",
+ r->rdr.addr.type == PF_ADDR_NONE ? "nat" : "rdr",
+ prefixlen);
+ pf_print_host(&pd->nsaddr, pd->nsport, pd->naf);
+ addlog(" -> ");
+ pf_print_host(&pd->ndaddr, pd->ndport, pd->naf);
+ addlog("\n");
+ }
+
+ return (0);
+}
+#endif /* INET6 */
+
+int
+pf_postprocess_addr(struct pf_state *cur)
+{
+ struct pf_state_key *sks;
+ struct pf_addr *addr;
+ struct pf_pool *rpool, *natpl = NULL, *rdrpl = NULL;
+ struct pf_rule_item *ri;
+ int ret = 0;
+
+ /* decrease the states counter in pool for "least-states" */
+ if (cur->natrule.ptr != NULL) { /* this is the final */
+ if (cur->natrule.ptr->nat.addr.type != PF_ADDR_NONE)
+ natpl = &cur->natrule.ptr->nat;
+ if (cur->natrule.ptr->rdr.addr.type != PF_ADDR_NONE)
+ rdrpl = &cur->natrule.ptr->rdr;
+ }
+ if (natpl == NULL || rdrpl == NULL) {
+ /* nat or rdr might be done by a previous "match" */
+ SLIST_FOREACH(ri, &cur->match_rules, entry) {
+ /* first match since the list order is reversed */
+ if (natpl == NULL &&
+ ri->r->nat.addr.type != PF_ADDR_NONE)
+ natpl = &ri->r->nat;
+ if (rdrpl == NULL &&
+ ri->r->rdr.addr.type != PF_ADDR_NONE)
+ rdrpl = &ri->r->rdr;
+ if (natpl != NULL && rdrpl != NULL)
+ break;
+ }
+ }
+ if (natpl != NULL &&
+ (natpl->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) {
+ /* nat-to least-state */
+ if (cur->direction == PF_IN) {
+ sks = cur->key[PF_SK_STACK];
+ addr = &sks->addr[0];
+ } else {
+ sks = cur->key[PF_SK_WIRE];
+ addr = &sks->addr[1];
+ }
+ if (pf_pool_states_decrease_addr(natpl, sks->af, addr) != 0)
+ ret = 1;
+ }
+ if (rdrpl != NULL &&
+ (rdrpl->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) {
+ /* rdr least-state */
+ if (cur->direction == PF_IN) {
+ sks = cur->key[PF_SK_STACK];
+ addr = &sks->addr[1];
+ } else {
+ sks = cur->key[PF_SK_WIRE];
+ addr = &sks->addr[0];
+ }
+ if (pf_pool_states_decrease_addr(rdrpl, sks->af, addr) != 0)
+ ret = 1;
+ }
+ if (cur->rule.ptr != NULL) {
+ /* route-to least-state */
+ rpool = &cur->rule.ptr->route;
+ if (rpool->addr.type != PF_ADDR_NONE &&
+ (rpool->opts & PF_POOL_TYPEMASK) == PF_POOL_LEASTSTATES) {
+ sks = cur->key[(cur->direction == PF_IN)
+ ? PF_SK_STACK : PF_SK_WIRE];
+ addr = &cur->rt_addr;
+ KASSERT(sks != NULL);
+ if (pf_pool_states_decrease_addr(rpool, sks->af, addr)
+ != 0)
+ ret = 1;
+ }
+ }
+
+ return (ret);
+}
+
+int
+pf_pool_states_decrease_addr(struct pf_pool *rpool, int af,
+ struct pf_addr *addr)
+{
+ int slbcount = -1;
+
+ if (rpool->addr.type == PF_ADDR_TABLE) {
+ if ((slbcount = pfr_states_decrease(
+ rpool->addr.p.tbl, addr, af)) == -1) {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: %s: selected address ",
+ __func__);
+ pf_print_host(addr, 0, af);
+ addlog(". Failed to "
+ "decrease count!\n");
+ }
+ return (1);
+ }
+ } else if (rpool->addr.type == PF_ADDR_DYNIFTL) {
+ if ((slbcount = pfr_states_decrease(
+ rpool->addr.p.dyn->pfid_kt, addr, af)) == -1) {
+ if (pf_status.debug >= LOG_DEBUG) {
+ log(LOG_DEBUG, "pf: %s: selected address ",
+ __func__);
+ pf_print_host(addr, 0, af);
+ addlog(". Failed to "
+ "decrease count!\n");
+ }
+ return (1);
+ }
+ }
+ if (slbcount > -1) {
+ if (pf_status.debug >= LOG_INFO) {
+ log(LOG_INFO, "pf: %s: selected address ", __func__);
+ pf_print_host(addr, 0, af);
+ addlog(" decreased state count to %u\n",
+ slbcount);
+ }
+ }
+
+ return (0);
+}
diff --git a/module/pfsrc/pf_norm.c b/module/pfsrc/pf_norm.c
new file mode 100644
index 0000000..9b362d3
--- /dev/null
+++ b/module/pfsrc/pf_norm.c
@@ -0,0 +1,1664 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_norm.c — see docs/porting-notes.md */
+#include
+
+struct pf_frent {
+ TAILQ_ENTRY(pf_frent) fr_next;
+ struct mbuf *fe_m;
+ u_int16_t fe_hdrlen; /* ipv4 header length with ip options
+ ipv6, extension, fragment header */
+ u_int16_t fe_extoff; /* last extension header offset or 0 */
+ u_int16_t fe_len; /* fragment length */
+ u_int16_t fe_off; /* fragment offset */
+ u_int16_t fe_mff; /* more fragment flag */
+};
+
+RB_HEAD(pf_frag_tree, pf_fragment);
+struct pf_frnode {
+ struct pf_addr fn_src; /* ip source address */
+ struct pf_addr fn_dst; /* ip destination address */
+ u_int32_t fn_fragments; /* number of entries in fn_tree */
+ u_int32_t fn_gen; /* fr_gen of newest entry in fn_tree */
+ u_int16_t fn_rdomain; /* routing domain */
+ sa_family_t fn_af; /* address family */
+ u_int8_t fn_proto; /* protocol for fragments in fn_tree */
+ u_int8_t fn_direction; /* pf packet direction */
+
+ RB_ENTRY(pf_frnode) fn_entry;
+ struct pf_frag_tree fn_tree; /* matching fragments, lookup by id */
+};
+
+struct pf_fragment {
+ struct pf_frent *fr_firstoff[PF_FRAG_ENTRY_POINTS];
+ /* pointers to queue element */
+ u_int8_t fr_entries[PF_FRAG_ENTRY_POINTS];
+ /* count entries between pointers */
+ RB_ENTRY(pf_fragment) fr_entry;
+ TAILQ_ENTRY(pf_fragment) frag_next;
+ TAILQ_HEAD(pf_fragq, pf_frent) fr_queue;
+ u_int32_t fr_id; /* fragment id for reassemble */
+ int32_t fr_timeout;
+ u_int32_t fr_gen; /* generation number (per pf_frnode) */
+ u_int16_t fr_maxlen; /* maximum length of single fragment */
+ u_int16_t fr_holes; /* number of holes in the queue */
+ struct pf_frnode *fr_node; /* ip src/dst/proto/af for fragments */
+};
+
+struct pf_fragment_tag {
+ u_int16_t ft_hdrlen; /* header length of reassembled pkt */
+ u_int16_t ft_extoff; /* last extension header offset or 0 */
+ u_int16_t ft_maxlen; /* maximum fragment payload length */
+};
+
+TAILQ_HEAD(pf_fragqueue, pf_fragment) pf_fragqueue;
+
+static __inline int pf_frnode_compare(struct pf_frnode *,
+ struct pf_frnode *);
+RB_HEAD(pf_frnode_tree, pf_frnode) pf_frnode_tree;
+RB_PROTOTYPE(pf_frnode_tree, pf_frnode, fn_entry, pf_frnode_compare);
+RB_GENERATE(pf_frnode_tree, pf_frnode, fn_entry, pf_frnode_compare);
+
+static __inline int pf_frag_compare(struct pf_fragment *,
+ struct pf_fragment *);
+RB_PROTOTYPE(pf_frag_tree, pf_fragment, fr_entry, pf_frag_compare);
+RB_GENERATE(pf_frag_tree, pf_fragment, fr_entry, pf_frag_compare);
+
+/* Private prototypes */
+void pf_flush_fragments(void);
+void pf_free_fragment(struct pf_fragment *);
+struct pf_fragment *pf_find_fragment(struct pf_frnode *, u_int32_t);
+struct pf_frent *pf_create_fragment(u_short *);
+int pf_frent_holes(struct pf_frent *);
+static inline int pf_frent_index(struct pf_frent *);
+int pf_frent_insert(struct pf_fragment *,
+ struct pf_frent *, struct pf_frent *);
+void pf_frent_remove(struct pf_fragment *,
+ struct pf_frent *);
+struct pf_frent *pf_frent_previous(struct pf_fragment *,
+ struct pf_frent *);
+struct pf_fragment *pf_fillup_fragment(struct pf_frnode *, u_int32_t,
+ struct pf_frent *, u_short *);
+struct mbuf *pf_join_fragment(struct pf_fragment *);
+int pf_reassemble(struct mbuf **, int, u_int16_t,
+ u_short *);
+#ifdef INET6
+int pf_reassemble6(struct mbuf **, struct ip6_frag *,
+ u_int16_t, u_int16_t, int, u_int16_t, u_short *);
+#endif /* INET6 */
+
+/* Globals */
+struct pool pf_frent_pl, pf_frag_pl, pf_frnode_pl;
+struct pool pf_state_scrub_pl;
+
+struct mutex pf_frag_mtx;
+
+#define PF_FRAG_LOCK_INIT() mtx_init(&pf_frag_mtx, IPL_SOFTNET)
+
+void
+pf_normalize_init(void)
+{
+ pool_init(&pf_frent_pl, sizeof(struct pf_frent), 0,
+ IPL_SOFTNET, 0, "pffrent", NULL);
+ pool_init(&pf_frnode_pl, sizeof(struct pf_frnode), 0,
+ IPL_SOFTNET, 0, "pffrnode", NULL);
+ pool_init(&pf_frag_pl, sizeof(struct pf_fragment), 0,
+ IPL_SOFTNET, 0, "pffrag", NULL);
+ pool_init(&pf_state_scrub_pl, sizeof(struct pf_state_scrub), 0,
+ IPL_SOFTNET, 0, "pfstscr", NULL);
+
+ pool_sethiwat(&pf_frag_pl, PFFRAG_FRAG_HIWAT);
+ pool_sethardlimit(&pf_frent_pl, PFFRAG_FRENT_HIWAT);
+
+ TAILQ_INIT(&pf_fragqueue);
+
+ PF_FRAG_LOCK_INIT();
+}
+
+static __inline int
+pf_frnode_compare(struct pf_frnode *a, struct pf_frnode *b)
+{
+ int diff;
+
+ if ((diff = a->fn_proto - b->fn_proto) != 0)
+ return (diff);
+ if ((diff = a->fn_af - b->fn_af) != 0)
+ return (diff);
+ if ((diff = a->fn_direction - b->fn_direction) != 0)
+ return (diff);
+ if ((diff = a->fn_rdomain - b->fn_rdomain) != 0)
+ return (diff);
+ if ((diff = pf_addr_compare(&a->fn_src, &b->fn_src, a->fn_af)) != 0)
+ return (diff);
+ if ((diff = pf_addr_compare(&a->fn_dst, &b->fn_dst, a->fn_af)) != 0)
+ return (diff);
+
+ return (0);
+}
+
+static __inline int
+pf_frag_compare(struct pf_fragment *a, struct pf_fragment *b)
+{
+ if (a->fr_id > b->fr_id)
+ return (1);
+ if (a->fr_id < b->fr_id)
+ return (-1);
+
+ return (0);
+}
+
+void
+pf_purge_expired_fragments(void)
+{
+ struct pf_fragment *frag;
+ int32_t expire;
+
+ PF_ASSERT_UNLOCKED();
+
+ expire = getuptime() - pf_default_rule.timeout[PFTM_FRAG];
+
+ PF_FRAG_LOCK();
+ while ((frag = TAILQ_LAST(&pf_fragqueue, pf_fragqueue)) != NULL) {
+ if (frag->fr_timeout > expire)
+ break;
+ DPFPRINTF(LOG_NOTICE, "expiring %d(%p)", frag->fr_id, frag);
+ pf_free_fragment(frag);
+ }
+ PF_FRAG_UNLOCK();
+}
+
+/*
+ * Try to flush old fragments to make space for new ones
+ */
+void
+pf_flush_fragments(void)
+{
+ struct pf_fragment *frag;
+ u_int goal;
+
+ goal = pf_status.fragments * 9 / 10;
+ DPFPRINTF(LOG_NOTICE, "trying to free > %u frents",
+ pf_status.fragments - goal);
+ while (goal < pf_status.fragments) {
+ if ((frag = TAILQ_LAST(&pf_fragqueue, pf_fragqueue)) == NULL)
+ break;
+ pf_free_fragment(frag);
+ }
+}
+
+/*
+ * Remove a fragment from the fragment queue, free its fragment entries,
+ * and free the fragment itself.
+ */
+void
+pf_free_fragment(struct pf_fragment *frag)
+{
+ struct pf_frent *frent;
+ struct pf_frnode *frnode;
+
+ frnode = frag->fr_node;
+ RB_REMOVE(pf_frag_tree, &frnode->fn_tree, frag);
+ KASSERT(frnode->fn_fragments >= 1);
+ frnode->fn_fragments--;
+ if (frnode->fn_fragments == 0) {
+ KASSERT(RB_EMPTY(&frnode->fn_tree));
+ RB_REMOVE(pf_frnode_tree, &pf_frnode_tree, frnode);
+ pool_put(&pf_frnode_pl, frnode);
+ }
+ TAILQ_REMOVE(&pf_fragqueue, frag, frag_next);
+
+ /* Free all fragment entries */
+ while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) {
+ TAILQ_REMOVE(&frag->fr_queue, frent, fr_next);
+ pf_status.ncounters[NCNT_FRAG_REMOVALS]++;
+ m_freem(frent->fe_m);
+ pool_put(&pf_frent_pl, frent);
+ pf_status.fragments--;
+ }
+ pool_put(&pf_frag_pl, frag);
+}
+
+struct pf_fragment *
+pf_find_fragment(struct pf_frnode *key, u_int32_t id)
+{
+ struct pf_fragment *frag, idkey;
+ struct pf_frnode *frnode;
+ u_int32_t stale;
+
+ frnode = RB_FIND(pf_frnode_tree, &pf_frnode_tree, key);
+ pf_status.ncounters[NCNT_FRAG_SEARCH]++;
+ if (frnode == NULL)
+ return (NULL);
+ KASSERT(frnode->fn_fragments >= 1);
+ idkey.fr_id = id;
+ frag = RB_FIND(pf_frag_tree, &frnode->fn_tree, &idkey);
+ if (frag == NULL)
+ return (NULL);
+ /*
+ * Limit the number of fragments we accept for each (proto,src,dst,af)
+ * combination (aka pf_frnode), so we can deal better with a high rate
+ * of fragments. Problem analysis is in RFC 4963.
+ * Store the current generation for each pf_frnode in fn_gen and on
+ * lookup discard 'stale' fragments (pf_fragment, based on the fr_gen
+ * member). Instead of adding another button interpret the pf fragment
+ * timeout in multiples of 200 fragments. This way the default of 60s
+ * means: pf_fragment objects older than 60*200 = 12,000 generations
+ * are considered stale.
+ */
+ stale = pf_default_rule.timeout[PFTM_FRAG] * PF_FRAG_STALE;
+ if ((frnode->fn_gen - frag->fr_gen) >= stale) {
+ DPFPRINTF(LOG_NOTICE, "stale fragment %d(%p), gen %u, num %u",
+ frag->fr_id, frag, frag->fr_gen, frnode->fn_fragments);
+ pf_free_fragment(frag);
+ return (NULL);
+ }
+ TAILQ_REMOVE(&pf_fragqueue, frag, frag_next);
+ TAILQ_INSERT_HEAD(&pf_fragqueue, frag, frag_next);
+
+ return (frag);
+}
+
+struct pf_frent *
+pf_create_fragment(u_short *reason)
+{
+ struct pf_frent *frent;
+
+ frent = pool_get(&pf_frent_pl, PR_NOWAIT);
+ if (frent == NULL) {
+ pf_flush_fragments();
+ frent = pool_get(&pf_frent_pl, PR_NOWAIT);
+ if (frent == NULL) {
+ REASON_SET(reason, PFRES_MEMORY);
+ return (NULL);
+ }
+ }
+ pf_status.fragments++;
+
+ return (frent);
+}
+
+/*
+ * Calculate the additional holes that were created in the fragment
+ * queue by inserting this fragment. A fragment in the middle
+ * creates one more hole by splitting. For each connected side,
+ * it loses one hole.
+ * Fragment entry must be in the queue when calling this function.
+ */
+int
+pf_frent_holes(struct pf_frent *frent)
+{
+ struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next);
+ struct pf_frent *next = TAILQ_NEXT(frent, fr_next);
+ int holes = 1;
+
+ if (prev == NULL) {
+ if (frent->fe_off == 0)
+ holes--;
+ } else {
+ KASSERT(frent->fe_off != 0);
+ if (frent->fe_off == prev->fe_off + prev->fe_len)
+ holes--;
+ }
+ if (next == NULL) {
+ if (!frent->fe_mff)
+ holes--;
+ } else {
+ KASSERT(frent->fe_mff);
+ if (next->fe_off == frent->fe_off + frent->fe_len)
+ holes--;
+ }
+ return holes;
+}
+
+static inline int
+pf_frent_index(struct pf_frent *frent)
+{
+ /*
+ * We have an array of 16 entry points to the queue. A full size
+ * 65535 octet IP packet can have 8192 fragments. So the queue
+ * traversal length is at most 512 and at most 16 entry points are
+ * checked. We need 128 additional bytes on a 64 bit architecture.
+ */
+ CTASSERT(((u_int16_t)0xffff &~ 7) / (0x10000 / PF_FRAG_ENTRY_POINTS) ==
+ 16 - 1);
+ CTASSERT(((u_int16_t)0xffff >> 3) / PF_FRAG_ENTRY_POINTS == 512 - 1);
+
+ return frent->fe_off / (0x10000 / PF_FRAG_ENTRY_POINTS);
+}
+
+int
+pf_frent_insert(struct pf_fragment *frag, struct pf_frent *frent,
+ struct pf_frent *prev)
+{
+ CTASSERT(PF_FRAG_ENTRY_LIMIT <= 0xff);
+ int index;
+
+ /*
+ * A packet has at most 65536 octets. With 16 entry points, each one
+ * spawns 4096 octets. We limit these to 64 fragments each, which
+ * means on average every fragment must have at least 64 octets.
+ */
+ index = pf_frent_index(frent);
+ if (frag->fr_entries[index] >= PF_FRAG_ENTRY_LIMIT)
+ return ENOBUFS;
+ frag->fr_entries[index]++;
+
+ if (prev == NULL) {
+ TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next);
+ } else {
+ KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off);
+ TAILQ_INSERT_AFTER(&frag->fr_queue, prev, frent, fr_next);
+ }
+ pf_status.ncounters[NCNT_FRAG_INSERT]++;
+
+ if (frag->fr_firstoff[index] == NULL) {
+ KASSERT(prev == NULL || pf_frent_index(prev) < index);
+ frag->fr_firstoff[index] = frent;
+ } else {
+ if (frent->fe_off < frag->fr_firstoff[index]->fe_off) {
+ KASSERT(prev == NULL || pf_frent_index(prev) < index);
+ frag->fr_firstoff[index] = frent;
+ } else {
+ KASSERT(prev != NULL);
+ KASSERT(pf_frent_index(prev) == index);
+ }
+ }
+
+ frag->fr_holes += pf_frent_holes(frent);
+
+ return 0;
+}
+
+void
+pf_frent_remove(struct pf_fragment *frag, struct pf_frent *frent)
+{
+#ifdef DIAGNOSTIC
+ struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next);
+#endif
+ struct pf_frent *next = TAILQ_NEXT(frent, fr_next);
+ int index;
+
+ frag->fr_holes -= pf_frent_holes(frent);
+
+ index = pf_frent_index(frent);
+ KASSERT(frag->fr_firstoff[index] != NULL);
+ if (frag->fr_firstoff[index]->fe_off == frent->fe_off) {
+ if (next == NULL) {
+ frag->fr_firstoff[index] = NULL;
+ } else {
+ KASSERT(frent->fe_off + frent->fe_len <= next->fe_off);
+ if (pf_frent_index(next) == index) {
+ frag->fr_firstoff[index] = next;
+ } else {
+ frag->fr_firstoff[index] = NULL;
+ }
+ }
+ } else {
+ KASSERT(frag->fr_firstoff[index]->fe_off < frent->fe_off);
+ KASSERT(prev != NULL);
+ KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off);
+ KASSERT(pf_frent_index(prev) == index);
+ }
+
+ TAILQ_REMOVE(&frag->fr_queue, frent, fr_next);
+ pf_status.ncounters[NCNT_FRAG_REMOVALS]++;
+
+ KASSERT(frag->fr_entries[index] > 0);
+ frag->fr_entries[index]--;
+}
+
+struct pf_frent *
+pf_frent_previous(struct pf_fragment *frag, struct pf_frent *frent)
+{
+ struct pf_frent *prev, *next;
+ int index;
+
+ /*
+ * If there are no fragments after frag, take the final one. Assume
+ * that the global queue is not empty.
+ */
+ prev = TAILQ_LAST(&frag->fr_queue, pf_fragq);
+ KASSERT(prev != NULL);
+ if (prev->fe_off <= frent->fe_off)
+ return prev;
+ /*
+ * We want to find a fragment entry that is before frag, but still
+ * close to it. Find the first fragment entry that is in the same
+ * entry point or in the first entry point after that. As we have
+ * already checked that there are entries behind frag, this will
+ * succeed.
+ */
+ for (index = pf_frent_index(frent); index < PF_FRAG_ENTRY_POINTS;
+ index++) {
+ prev = frag->fr_firstoff[index];
+ if (prev != NULL)
+ break;
+ }
+ KASSERT(prev != NULL);
+ /*
+ * In prev we may have a fragment from the same entry point that is
+ * before frent, or one that is just one position behind frent.
+ * In the latter case, we go back one step and have the predecessor.
+ * There may be none if the new fragment will be the first one.
+ */
+ if (prev->fe_off > frent->fe_off) {
+ prev = TAILQ_PREV(prev, pf_fragq, fr_next);
+ if (prev == NULL)
+ return NULL;
+ KASSERT(prev->fe_off <= frent->fe_off);
+ return prev;
+ }
+ /*
+ * In prev is the first fragment of the entry point. The offset
+ * of frag is behind it. Find the closest previous fragment.
+ */
+ for (next = TAILQ_NEXT(prev, fr_next); next != NULL;
+ next = TAILQ_NEXT(next, fr_next)) {
+ if (next->fe_off > frent->fe_off)
+ break;
+ prev = next;
+ }
+ return prev;
+}
+
+struct pf_fragment *
+pf_fillup_fragment(struct pf_frnode *key, u_int32_t id,
+ struct pf_frent *frent, u_short *reason)
+{
+ struct pf_frent *after, *next, *prev;
+ struct pf_fragment *frag;
+ struct pf_frnode *frnode;
+ u_int16_t total;
+
+ /* No empty fragments */
+ if (frent->fe_len == 0) {
+ DPFPRINTF(LOG_NOTICE, "bad fragment: len 0");
+ goto bad_fragment;
+ }
+
+ /* All fragments are 8 byte aligned */
+ if (frent->fe_mff && (frent->fe_len & 0x7)) {
+ DPFPRINTF(LOG_NOTICE, "bad fragment: mff and len %d",
+ frent->fe_len);
+ goto bad_fragment;
+ }
+
+ /* Respect maximum length, IP_MAXPACKET == IPV6_MAXPACKET */
+ if (frent->fe_off + frent->fe_len > IP_MAXPACKET) {
+ DPFPRINTF(LOG_NOTICE, "bad fragment: max packet %d",
+ frent->fe_off + frent->fe_len);
+ goto bad_fragment;
+ }
+
+ DPFPRINTF(LOG_INFO, key->fn_af == AF_INET ?
+ "reass frag %d @ %d-%d" : "reass frag %#08x @ %d-%d",
+ id, frent->fe_off, frent->fe_off + frent->fe_len);
+
+ /* Fully buffer all of the fragments in this fragment queue */
+ frag = pf_find_fragment(key, id);
+
+ /* Create a new reassembly queue for this packet */
+ if (frag == NULL) {
+ frag = pool_get(&pf_frag_pl, PR_NOWAIT);
+ if (frag == NULL) {
+ pf_flush_fragments();
+ frag = pool_get(&pf_frag_pl, PR_NOWAIT);
+ if (frag == NULL) {
+ REASON_SET(reason, PFRES_MEMORY);
+ goto drop_fragment;
+ }
+ }
+ frnode = RB_FIND(pf_frnode_tree, &pf_frnode_tree, key);
+ if (frnode == NULL) {
+ frnode = pool_get(&pf_frnode_pl, PR_NOWAIT);
+ if (frnode == NULL) {
+ pf_flush_fragments();
+ frnode = pool_get(&pf_frnode_pl, PR_NOWAIT);
+ if (frnode == NULL) {
+ REASON_SET(reason, PFRES_MEMORY);
+ pool_put(&pf_frag_pl, frag);
+ goto drop_fragment;
+ }
+ }
+ *frnode = *key;
+ RB_INIT(&frnode->fn_tree);
+ frnode->fn_fragments = 0;
+ frnode->fn_gen = 0;
+ }
+ memset(frag->fr_firstoff, 0, sizeof(frag->fr_firstoff));
+ memset(frag->fr_entries, 0, sizeof(frag->fr_entries));
+ TAILQ_INIT(&frag->fr_queue);
+ frag->fr_id = id;
+ frag->fr_timeout = getuptime();
+ frag->fr_gen = frnode->fn_gen++;
+ frag->fr_maxlen = frent->fe_len;
+ frag->fr_holes = 1;
+ frag->fr_node = frnode;
+ /* RB_INSERT cannot fail as pf_find_fragment() found nothing */
+ RB_INSERT(pf_frag_tree, &frnode->fn_tree, frag);
+ frnode->fn_fragments++;
+ if (frnode->fn_fragments == 1)
+ RB_INSERT(pf_frnode_tree, &pf_frnode_tree, frnode);
+ TAILQ_INSERT_HEAD(&pf_fragqueue, frag, frag_next);
+
+ /* We do not have a previous fragment, cannot fail. */
+ pf_frent_insert(frag, frent, NULL);
+
+ return (frag);
+ }
+
+ KASSERT(!TAILQ_EMPTY(&frag->fr_queue));
+ KASSERT(frag->fr_node);
+
+ /* Remember maximum fragment len for refragmentation */
+ if (frent->fe_len > frag->fr_maxlen)
+ frag->fr_maxlen = frent->fe_len;
+
+ /* Maximum data we have seen already */
+ total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off +
+ TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len;
+
+ /* Non terminal fragments must have more fragments flag */
+ if (frent->fe_off + frent->fe_len < total && !frent->fe_mff)
+ goto free_ipv6_fragment;
+
+ /* Check if we saw the last fragment already */
+ if (!TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_mff) {
+ if (frent->fe_off + frent->fe_len > total ||
+ (frent->fe_off + frent->fe_len == total && frent->fe_mff))
+ goto free_ipv6_fragment;
+ } else {
+ if (frent->fe_off + frent->fe_len == total && !frent->fe_mff)
+ goto free_ipv6_fragment;
+ }
+
+ /* Find neighbors for newly inserted fragment */
+ prev = pf_frent_previous(frag, frent);
+ if (prev == NULL) {
+ after = TAILQ_FIRST(&frag->fr_queue);
+ KASSERT(after != NULL);
+ } else {
+ after = TAILQ_NEXT(prev, fr_next);
+ }
+
+ if (prev != NULL && prev->fe_off + prev->fe_len > frent->fe_off) {
+ u_int16_t precut;
+
+#ifdef INET6
+ if (frag->fr_node->fn_af == AF_INET6)
+ goto free_ipv6_fragment;
+#endif /* INET6 */
+
+ precut = prev->fe_off + prev->fe_len - frent->fe_off;
+ if (precut >= frent->fe_len) {
+ DPFPRINTF(LOG_NOTICE, "new frag overlapped");
+ goto drop_fragment;
+ }
+ DPFPRINTF(LOG_NOTICE, "frag head overlap %d", precut);
+ m_adj(frent->fe_m, precut);
+ frent->fe_off += precut;
+ frent->fe_len -= precut;
+ }
+
+ for (; after != NULL && frent->fe_off + frent->fe_len > after->fe_off;
+ after = next) {
+ u_int16_t aftercut;
+
+#ifdef INET6
+ if (frag->fr_node->fn_af == AF_INET6)
+ goto free_ipv6_fragment;
+#endif /* INET6 */
+
+ aftercut = frent->fe_off + frent->fe_len - after->fe_off;
+ if (aftercut < after->fe_len) {
+ DPFPRINTF(LOG_NOTICE, "frag tail overlap %d", aftercut);
+ m_adj(after->fe_m, aftercut);
+ /* Fragment may switch queue as fe_off changes */
+ pf_frent_remove(frag, after);
+ after->fe_off += aftercut;
+ after->fe_len -= aftercut;
+ /* Insert into correct queue */
+ if (pf_frent_insert(frag, after, prev)) {
+ DPFPRINTF(LOG_WARNING,
+ "fragment requeue limit exceeded");
+ m_freem(after->fe_m);
+ pool_put(&pf_frent_pl, after);
+ pf_status.fragments--;
+ /* There is not way to recover */
+ goto free_fragment;
+ }
+ break;
+ }
+
+ /* This fragment is completely overlapped, lose it */
+ DPFPRINTF(LOG_NOTICE, "old frag overlapped");
+ next = TAILQ_NEXT(after, fr_next);
+ pf_frent_remove(frag, after);
+ m_freem(after->fe_m);
+ pool_put(&pf_frent_pl, after);
+ pf_status.fragments--;
+ }
+
+ /* If part of the queue gets too long, there is not way to recover. */
+ if (pf_frent_insert(frag, frent, prev)) {
+ DPFPRINTF(LOG_WARNING, "fragment queue limit exceeded");
+ goto free_fragment;
+ }
+
+ return (frag);
+
+free_ipv6_fragment:
+ if (frag->fr_node->fn_af == AF_INET)
+ goto bad_fragment;
+ /*
+ * RFC 5722, Errata 3089: When reassembling an IPv6 datagram, if one
+ * or more its constituent fragments is determined to be an overlapping
+ * fragment, the entire datagram (and any constituent fragments) MUST
+ * be silently discarded.
+ */
+ DPFPRINTF(LOG_NOTICE, "flush overlapping fragments");
+free_fragment:
+ pf_free_fragment(frag);
+bad_fragment:
+ REASON_SET(reason, PFRES_FRAG);
+drop_fragment:
+ pool_put(&pf_frent_pl, frent);
+ pf_status.fragments--;
+ return (NULL);
+}
+
+struct mbuf *
+pf_join_fragment(struct pf_fragment *frag)
+{
+ struct mbuf *m, *m2;
+ struct pf_frent *frent;
+
+ frent = TAILQ_FIRST(&frag->fr_queue);
+ TAILQ_REMOVE(&frag->fr_queue, frent, fr_next);
+ pf_status.ncounters[NCNT_FRAG_REMOVALS]++;
+
+ m = frent->fe_m;
+ /* Strip off any trailing bytes */
+ if ((frent->fe_hdrlen + frent->fe_len) < m->m_pkthdr.len)
+ m_adj(m, (frent->fe_hdrlen + frent->fe_len) - m->m_pkthdr.len);
+ /* Magic from ip_input */
+ m2 = m->m_next;
+ m->m_next = NULL;
+ m_cat(m, m2);
+ pool_put(&pf_frent_pl, frent);
+ pf_status.fragments--;
+
+ while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) {
+ TAILQ_REMOVE(&frag->fr_queue, frent, fr_next);
+ pf_status.ncounters[NCNT_FRAG_REMOVALS]++;
+ m2 = frent->fe_m;
+ /* Strip off ip header */
+ m_adj(m2, frent->fe_hdrlen);
+ /* Strip off any trailing bytes */
+ if (frent->fe_len < m2->m_pkthdr.len)
+ m_adj(m2, frent->fe_len - m2->m_pkthdr.len);
+ pool_put(&pf_frent_pl, frent);
+ pf_status.fragments--;
+ m_removehdr(m2);
+ m_cat(m, m2);
+ }
+
+ /* Remove from fragment queue */
+ pf_free_fragment(frag);
+
+ return (m);
+}
+
+int
+pf_reassemble(struct mbuf **m0, int dir, u_int16_t rdomain, u_short *reason)
+{
+ struct mbuf *m = *m0;
+ struct pf_ip *ip = mtod(m, struct pf_ip *);
+ struct pf_frent *frent;
+ struct pf_fragment *frag;
+ struct pf_frnode key;
+ u_int16_t total, hdrlen;
+
+ /* Get an entry for the fragment queue */
+ if ((frent = pf_create_fragment(reason)) == NULL)
+ return (PF_DROP);
+
+ frent->fe_m = m;
+ frent->fe_hdrlen = ip->ip_hl << 2;
+ frent->fe_extoff = 0;
+ frent->fe_len = ntohs(ip->ip_len) - (ip->ip_hl << 2);
+ frent->fe_off = (ntohs(ip->ip_off) & IP_OFFMASK) << 3;
+ frent->fe_mff = ntohs(ip->ip_off) & IP_MF;
+
+ key.fn_src.v4 = ip->ip_src;
+ key.fn_dst.v4 = ip->ip_dst;
+ key.fn_af = AF_INET;
+ key.fn_proto = ip->ip_p;
+ key.fn_direction = dir;
+ key.fn_rdomain = rdomain;
+
+ if ((frag = pf_fillup_fragment(&key, ip->ip_id, frent, reason))
+ == NULL)
+ return (PF_DROP);
+
+ /* The mbuf is part of the fragment entry, no direct free or access */
+ m = *m0 = NULL;
+
+ if (frag->fr_holes) {
+ DPFPRINTF(LOG_DEBUG, "frag %d, holes %d",
+ frag->fr_id, frag->fr_holes);
+ return (PF_PASS); /* drop because *m0 is NULL, no error */
+ }
+
+ /* We have all the data */
+ frent = TAILQ_FIRST(&frag->fr_queue);
+ KASSERT(frent != NULL);
+ total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off +
+ TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len;
+ hdrlen = frent->fe_hdrlen;
+ m = *m0 = pf_join_fragment(frag);
+ frag = NULL;
+ m_calchdrlen(m);
+
+ ip = mtod(m, struct pf_ip *);
+ ip->ip_len = htons(hdrlen + total);
+ ip->ip_off &= ~(IP_MF|IP_OFFMASK);
+
+ if (hdrlen + total > IP_MAXPACKET) {
+ DPFPRINTF(LOG_NOTICE, "drop: too big: %d", total);
+ ip->ip_len = 0;
+ REASON_SET(reason, PFRES_SHORT);
+ /* PF_DROP requires a valid mbuf *m0 in pf_test() */
+ return (PF_DROP);
+ }
+
+ DPFPRINTF(LOG_INFO, "complete: %p(%d)", m, ntohs(ip->ip_len));
+ return (PF_PASS);
+}
+
+#ifdef INET6
+int
+pf_reassemble6(struct mbuf **m0, struct ip6_frag *fraghdr, u_int16_t hdrlen,
+ u_int16_t extoff, int dir, u_int16_t rdomain, u_short *reason)
+{
+ struct mbuf *m = *m0;
+ struct pf_ip6_hdr *ip6 = mtod(m, struct pf_ip6_hdr *);
+ struct m_tag *mtag;
+ struct pf_fragment_tag *ftag;
+ struct pf_frent *frent;
+ struct pf_fragment *frag;
+ struct pf_frnode key;
+ int off;
+ u_int16_t total, maxlen;
+ u_int8_t proto;
+
+ /* Get an entry for the fragment queue */
+ if ((frent = pf_create_fragment(reason)) == NULL)
+ return (PF_DROP);
+
+ frent->fe_m = m;
+ frent->fe_hdrlen = hdrlen;
+ frent->fe_extoff = extoff;
+ frent->fe_len = sizeof(struct pf_ip6_hdr) + ntohs(ip6->ip6_plen) - hdrlen;
+ frent->fe_off = ntohs(fraghdr->ip6f_offlg & IP6F_OFF_MASK);
+ frent->fe_mff = fraghdr->ip6f_offlg & IP6F_MORE_FRAG;
+
+ key.fn_src.v6 = ip6->ip6_src;
+ key.fn_dst.v6 = ip6->ip6_dst;
+ key.fn_af = AF_INET6;
+ /* Only the first fragment's protocol is relevant */
+ key.fn_proto = 0;
+ key.fn_direction = dir;
+ key.fn_rdomain = rdomain;
+
+ if ((frag = pf_fillup_fragment(&key, fraghdr->ip6f_ident, frent,
+ reason)) == NULL)
+ return (PF_DROP);
+
+ /* The mbuf is part of the fragment entry, no direct free or access */
+ m = *m0 = NULL;
+
+ if (frag->fr_holes) {
+ DPFPRINTF(LOG_DEBUG, "frag %#08x, holes %d",
+ frag->fr_id, frag->fr_holes);
+ return (PF_PASS); /* drop because *m0 is NULL, no error */
+ }
+
+ /* We have all the data */
+ frent = TAILQ_FIRST(&frag->fr_queue);
+ KASSERT(frent != NULL);
+ extoff = frent->fe_extoff;
+ maxlen = frag->fr_maxlen;
+ total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off +
+ TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len;
+ hdrlen = frent->fe_hdrlen - sizeof(struct ip6_frag);
+ m = *m0 = pf_join_fragment(frag);
+ frag = NULL;
+
+ /* Take protocol from first fragment header */
+ if ((m = m_getptr(m, hdrlen + offsetof(struct ip6_frag, ip6f_nxt),
+ &off)) == NULL)
+ panic("%s: short frag mbuf chain", __func__);
+ proto = *(mtod(m, caddr_t) + off);
+ m = *m0;
+
+ /* Delete frag6 header */
+ if (frag6_deletefraghdr(m, hdrlen) != 0)
+ goto fail;
+
+ m_calchdrlen(m);
+
+ if ((mtag = m_tag_get(PACKET_TAG_PF_REASSEMBLED, sizeof(struct
+ pf_fragment_tag), M_NOWAIT)) == NULL)
+ goto fail;
+ ftag = (struct pf_fragment_tag *)(mtag + 1);
+ ftag->ft_hdrlen = hdrlen;
+ ftag->ft_extoff = extoff;
+ ftag->ft_maxlen = maxlen;
+ m_tag_prepend(m, mtag);
+
+ ip6 = mtod(m, struct pf_ip6_hdr *);
+ ip6->ip6_plen = htons(hdrlen - sizeof(struct pf_ip6_hdr) + total);
+ if (extoff) {
+ /* Write protocol into next field of last extension header */
+ if ((m = m_getptr(m, extoff + offsetof(struct ip6_ext,
+ ip6e_nxt), &off)) == NULL)
+ panic("%s: short ext mbuf chain", __func__);
+ *(mtod(m, caddr_t) + off) = proto;
+ m = *m0;
+ } else
+ ip6->ip6_nxt = proto;
+
+ if (hdrlen - sizeof(struct pf_ip6_hdr) + total > IPV6_MAXPACKET) {
+ DPFPRINTF(LOG_NOTICE, "drop: too big: %d", total);
+ ip6->ip6_plen = 0;
+ REASON_SET(reason, PFRES_SHORT);
+ /* PF_DROP requires a valid mbuf *m0 in pf_test6() */
+ return (PF_DROP);
+ }
+
+ DPFPRINTF(LOG_INFO, "complete: %p(%d)", m, ntohs(ip6->ip6_plen));
+ return (PF_PASS);
+
+fail:
+ REASON_SET(reason, PFRES_MEMORY);
+ /* PF_DROP requires a valid mbuf *m0 in pf_test6(), will free later */
+ return (PF_DROP);
+}
+
+int
+pf_refragment6(struct mbuf **m0, struct m_tag *mtag, struct sockaddr_in6 *dst,
+ struct ifnet *ifp, struct rtentry *rt)
+{
+ struct mbuf *m = *m0;
+ struct mbuf_list ml;
+ struct pf_fragment_tag *ftag = (struct pf_fragment_tag *)(mtag + 1);
+ u_int32_t mtu;
+ u_int16_t hdrlen, extoff, maxlen;
+ u_int8_t proto;
+ int error;
+
+ hdrlen = ftag->ft_hdrlen;
+ extoff = ftag->ft_extoff;
+ maxlen = ftag->ft_maxlen;
+ m_tag_delete(m, mtag);
+ mtag = NULL;
+ ftag = NULL;
+
+ /* Checksum must be calculated for the whole packet */
+ in6_proto_cksum_out(m, NULL);
+
+ if (extoff) {
+ int off;
+
+ /* Use protocol from next field of last extension header */
+ if ((m = m_getptr(m, extoff + offsetof(struct ip6_ext,
+ ip6e_nxt), &off)) == NULL)
+ panic("%s: short ext mbuf chain", __func__);
+ proto = *(mtod(m, caddr_t) + off);
+ *(mtod(m, caddr_t) + off) = IPPROTO_FRAGMENT;
+ m = *m0;
+ } else {
+ struct pf_ip6_hdr *hdr;
+
+ hdr = mtod(m, struct pf_ip6_hdr *);
+ proto = hdr->ip6_nxt;
+ hdr->ip6_nxt = IPPROTO_FRAGMENT;
+ }
+
+ /*
+ * Maxlen may be less than 8 iff there was only a single
+ * fragment. As it was fragmented before, add a fragment
+ * header also for a single fragment. If total or maxlen
+ * is less than 8, ip6_fragment() will return EMSGSIZE and
+ * we drop the packet.
+ */
+ mtu = hdrlen + sizeof(struct ip6_frag) + maxlen;
+ error = ip6_fragment(m, &ml, hdrlen, proto, mtu);
+ *m0 = NULL; /* ip6_fragment() has consumed original packet. */
+ if (error) {
+ DPFPRINTF(LOG_NOTICE, "refragment error %d", error);
+ return (PF_DROP);
+ }
+
+ while ((m = ml_dequeue(&ml)) != NULL) {
+ m->m_pkthdr.pf.flags |= PF_TAG_REFRAGMENTED;
+ if (ifp == NULL) {
+ int flags = 0;
+
+ switch (atomic_load_int(&ip6_forwarding)) {
+ case 2:
+ SET(flags, IPV6_FORWARDING_IPSEC);
+ /* FALLTHROUGH */
+ case 1:
+ SET(flags, IPV6_FORWARDING);
+ break;
+ default:
+ ip6stat_inc(ip6s_cantforward);
+ return (PF_DROP);
+ }
+ ip6_forward(m, NULL, flags);
+ } else if ((u_long)m->m_pkthdr.len <= ifp->if_mtu) {
+ ifp->if_output(ifp, m, sin6tosa(dst), rt);
+ } else {
+ icmp6_error(m, ICMP6_PACKET_TOO_BIG, 0, ifp->if_mtu);
+ }
+ }
+
+ return (PF_PASS);
+}
+#endif /* INET6 */
+
+int
+pf_normalize_ip(struct pf_pdesc *pd, u_short *reason)
+{
+ struct pf_ip *h = mtod(pd->m, struct pf_ip *);
+ u_int16_t fragoff = (ntohs(h->ip_off) & IP_OFFMASK) << 3;
+ u_int16_t mff = (ntohs(h->ip_off) & IP_MF);
+
+ if (!fragoff && !mff)
+ goto no_fragment;
+
+ /* Clear IP_DF if we're in no-df mode */
+ if (pf_status.reass & PF_REASS_NODF && h->ip_off & htons(IP_DF))
+ h->ip_off &= htons(~IP_DF);
+
+ /* We're dealing with a fragment now. Don't allow fragments
+ * with IP_DF to enter the cache. If the flag was cleared by
+ * no-df above, fine. Otherwise drop it.
+ */
+ if (h->ip_off & htons(IP_DF)) {
+ DPFPRINTF(LOG_NOTICE, "bad fragment: IP_DF");
+ REASON_SET(reason, PFRES_FRAG);
+ return (PF_DROP);
+ }
+
+ if (!pf_status.reass)
+ return (PF_PASS); /* no reassembly */
+
+ /* Returns PF_DROP or m is NULL or completely reassembled mbuf */
+ PF_FRAG_LOCK();
+ if (pf_reassemble(&pd->m, pd->dir, pd->rdomain, reason) != PF_PASS) {
+ PF_FRAG_UNLOCK();
+ return (PF_DROP);
+ }
+ PF_FRAG_UNLOCK();
+ if (pd->m == NULL)
+ return (PF_PASS); /* packet has been reassembled, no error */
+
+ h = mtod(pd->m, struct pf_ip *);
+
+no_fragment:
+ /* At this point, only IP_DF is allowed in ip_off */
+ if (h->ip_off & ~htons(IP_DF))
+ h->ip_off &= htons(IP_DF);
+
+ return (PF_PASS);
+}
+
+#ifdef INET6
+int
+pf_normalize_ip6(struct pf_pdesc *pd, u_short *reason)
+{
+ struct ip6_frag frag;
+
+ if (pd->fragoff == 0)
+ goto no_fragment;
+
+ if (!pf_pull_hdr(pd->m, pd->fragoff, &frag, sizeof(frag), reason,
+ AF_INET6))
+ return (PF_DROP);
+
+ if (!pf_status.reass)
+ return (PF_PASS); /* no reassembly */
+
+ /* Returns PF_DROP or m is NULL or completely reassembled mbuf */
+ PF_FRAG_LOCK();
+ if (pf_reassemble6(&pd->m, &frag, pd->fragoff + sizeof(frag),
+ pd->extoff, pd->dir, pd->rdomain, reason) != PF_PASS) {
+ PF_FRAG_UNLOCK();
+ return (PF_DROP);
+ }
+ PF_FRAG_UNLOCK();
+ if (pd->m == NULL)
+ return (PF_PASS); /* packet has been reassembled, no error */
+
+no_fragment:
+ return (PF_PASS);
+}
+#endif /* INET6 */
+
+struct pf_state_scrub *
+pf_state_scrub_get(void)
+{
+ return (pool_get(&pf_state_scrub_pl, PR_NOWAIT | PR_ZERO));
+}
+
+void
+pf_state_scrub_put(struct pf_state_scrub *scrub)
+{
+ pool_put(&pf_state_scrub_pl, scrub);
+}
+
+int
+pf_normalize_tcp_alloc(struct pf_state_peer *src)
+{
+ src->scrub = pf_state_scrub_get();
+ if (src->scrub == NULL)
+ return (ENOMEM);
+
+ return (0);
+}
+
+int
+pf_normalize_tcp(struct pf_pdesc *pd)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ u_short reason;
+ u_int8_t flags;
+ u_int rewrite = 0;
+
+ flags = th->th_flags;
+ if (flags & TH_SYN) {
+ /* Illegal packet */
+ if (flags & TH_RST)
+ goto tcp_drop;
+
+ if (flags & TH_FIN) /* XXX why clear instead of drop? */
+ flags &= ~TH_FIN;
+ } else {
+ /* Illegal packet */
+ if (!(flags & (TH_ACK|TH_RST)))
+ goto tcp_drop;
+ }
+
+ if (!(flags & TH_ACK)) {
+ /* These flags are only valid if ACK is set */
+ if (flags & (TH_FIN|TH_PUSH|TH_URG))
+ goto tcp_drop;
+ }
+
+ /* If flags changed, or reserved data set, then adjust */
+ if (flags != th->th_flags || th->th_x2 != 0) {
+ /* hack: set 4-bit th_x2 = 0 */
+ u_int8_t *th_off = (u_int8_t*)(&th->th_ack+1);
+ pf_patch_8(pd, th_off, th->th_off << 4, PF_HI);
+
+ pf_patch_8(pd, &th->th_flags, flags, PF_LO);
+ rewrite = 1;
+ }
+
+ /* Remove urgent pointer, if TH_URG is not set */
+ if (!(flags & TH_URG) && th->th_urp) {
+ pf_patch_16(pd, &th->th_urp, 0);
+ rewrite = 1;
+ }
+
+ /* copy back packet headers if we sanitized */
+ if (rewrite) {
+ m_copyback(pd->m, pd->off, sizeof(*th), th, M_NOWAIT);
+ }
+
+ return (PF_PASS);
+
+tcp_drop:
+ REASON_SET(&reason, PFRES_NORM);
+ return (PF_DROP);
+}
+
+int
+pf_normalize_tcp_init(struct pf_pdesc *pd, struct pf_state_peer *src)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ u_int32_t tsval, tsecr;
+ int olen;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt;
+
+
+ KASSERT(src->scrub == NULL);
+
+ if (pf_normalize_tcp_alloc(src) != 0)
+ return (1);
+
+ switch (pd->af) {
+ case AF_INET: {
+ struct pf_ip *h = mtod(pd->m, struct pf_ip *);
+ src->scrub->pfss_ttl = h->ip_ttl;
+ break;
+ }
+#ifdef INET6
+ case AF_INET6: {
+ struct pf_ip6_hdr *h = mtod(pd->m, struct pf_ip6_hdr *);
+ src->scrub->pfss_ttl = h->ip6_hlim;
+ break;
+ }
+#endif /* INET6 */
+ default:
+ unhandled_af(pd->af);
+ }
+
+ /*
+ * All normalizations below are only begun if we see the start of
+ * the connections. They must all set an enabled bit in pfss_flags
+ */
+ if ((th->th_flags & TH_SYN) == 0)
+ return (0);
+
+ olen = (th->th_off << 2) - sizeof(*th);
+ if (olen < TCPOLEN_TIMESTAMP || !pf_pull_hdr(pd->m,
+ pd->off + sizeof(*th), opts, olen, NULL, pd->af))
+ return (0);
+
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_TIMESTAMP, TCPOLEN_TIMESTAMP)) != NULL) {
+
+ src->scrub->pfss_flags |= PFSS_TIMESTAMP;
+ src->scrub->pfss_ts_mod = arc4random();
+ /* note PFSS_PAWS not set yet */
+ memcpy(&tsval, &opt[2], sizeof(u_int32_t));
+ memcpy(&tsecr, &opt[6], sizeof(u_int32_t));
+ src->scrub->pfss_tsval0 = ntohl(tsval);
+ src->scrub->pfss_tsval = ntohl(tsval);
+ src->scrub->pfss_tsecr = ntohl(tsecr);
+ getmicrouptime(&src->scrub->pfss_last);
+
+ opt += opt[1];
+ }
+
+ return (0);
+}
+
+void
+pf_normalize_tcp_cleanup(struct pf_state *state)
+{
+ if (state->src.scrub)
+ pool_put(&pf_state_scrub_pl, state->src.scrub);
+ if (state->dst.scrub)
+ pool_put(&pf_state_scrub_pl, state->dst.scrub);
+
+ /* Someday... flush the TCP segment reassembly descriptors. */
+}
+
+int
+pf_normalize_tcp_stateful(struct pf_pdesc *pd, u_short *reason,
+ struct pf_state *state, struct pf_state_peer *src,
+ struct pf_state_peer *dst, int *writeback)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ struct timeval uptime;
+ u_int tsval_from_last;
+ u_int32_t tsval, tsecr;
+ int copyback = 0;
+ int got_ts = 0;
+ int olen;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt;
+
+ KASSERT(src->scrub || dst->scrub);
+
+ /*
+ * Enforce the minimum TTL seen for this connection. Negate a common
+ * technique to evade an intrusion detection system and confuse
+ * firewall state code.
+ */
+ switch (pd->af) {
+ case AF_INET:
+ if (src->scrub) {
+ struct pf_ip *h = mtod(pd->m, struct pf_ip *);
+ if (h->ip_ttl > src->scrub->pfss_ttl)
+ src->scrub->pfss_ttl = h->ip_ttl;
+ h->ip_ttl = src->scrub->pfss_ttl;
+ }
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (src->scrub) {
+ struct pf_ip6_hdr *h = mtod(pd->m, struct pf_ip6_hdr *);
+ if (h->ip6_hlim > src->scrub->pfss_ttl)
+ src->scrub->pfss_ttl = h->ip6_hlim;
+ h->ip6_hlim = src->scrub->pfss_ttl;
+ }
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(pd->af);
+ }
+
+ olen = (th->th_off << 2) - sizeof(*th);
+
+ if (olen >= TCPOLEN_TIMESTAMP &&
+ ((src->scrub && (src->scrub->pfss_flags & PFSS_TIMESTAMP)) ||
+ (dst->scrub && (dst->scrub->pfss_flags & PFSS_TIMESTAMP))) &&
+ pf_pull_hdr(pd->m, pd->off + sizeof(*th), opts, olen, NULL,
+ pd->af)) {
+
+ /* Modulate the timestamps. Can be used for NAT detection, OS
+ * uptime determination or reboot detection.
+ */
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_TIMESTAMP, TCPOLEN_TIMESTAMP)) != NULL) {
+
+ u_int8_t *ts = opt + 2;
+ u_int8_t *tsr = opt + 6;
+
+ if (got_ts) {
+ /* Huh? Multiple timestamps!? */
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: %s: multiple TS??", __func__);
+ pf_print_state(state);
+ addlog("\n");
+ }
+ REASON_SET(reason, PFRES_TS);
+ return (PF_DROP);
+ }
+
+ memcpy(&tsval, ts, sizeof(u_int32_t));
+ memcpy(&tsecr, tsr, sizeof(u_int32_t));
+
+ /* modulate TS */
+ if (tsval && src->scrub &&
+ (src->scrub->pfss_flags & PFSS_TIMESTAMP)) {
+ /* tsval used further on */
+ tsval = ntohl(tsval);
+ pf_patch_32_unaligned(pd,
+ ts, htonl(tsval + src->scrub->pfss_ts_mod),
+ PF_ALGNMNT(ts - opts));
+ copyback = 1;
+ }
+
+ /* modulate TS reply if any (!0) */
+ if (tsecr && dst->scrub &&
+ (dst->scrub->pfss_flags & PFSS_TIMESTAMP)) {
+ /* tsecr used further on */
+ tsecr = ntohl(tsecr) - dst->scrub->pfss_ts_mod;
+ pf_patch_32_unaligned(pd,
+ tsr, htonl(tsecr), PF_ALGNMNT(tsr - opts));
+ copyback = 1;
+ }
+
+ got_ts = 1;
+ opt += opt[1];
+ }
+
+ if (copyback) {
+ /* Copyback the options, caller copies back header */
+ *writeback = 1;
+ m_copyback(pd->m, pd->off + sizeof(*th), olen, opts, M_NOWAIT);
+ }
+ }
+
+
+ /*
+ * Must invalidate PAWS checks on connections idle for too long.
+ * The fastest allowed timestamp clock is 1ms. That turns out to
+ * be about 24 days before it wraps. XXX Right now our lowerbound
+ * TS echo check only works for the first 12 days of a connection
+ * when the TS has exhausted half its 32bit space
+ */
+#define TS_MAX_IDLE (24*24*60*60)
+#define TS_MAX_CONN (12*24*60*60) /* XXX remove when better tsecr check */
+
+ getmicrouptime(&uptime);
+ if (src->scrub && (src->scrub->pfss_flags & PFSS_PAWS) &&
+ (uptime.tv_sec - src->scrub->pfss_last.tv_sec > TS_MAX_IDLE ||
+ getuptime() - state->creation > TS_MAX_CONN)) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: src idled out of PAWS ");
+ pf_print_state(state);
+ addlog("\n");
+ }
+ src->scrub->pfss_flags =
+ (src->scrub->pfss_flags & ~PFSS_PAWS) | PFSS_PAWS_IDLED;
+ }
+ if (dst->scrub && (dst->scrub->pfss_flags & PFSS_PAWS) &&
+ uptime.tv_sec - dst->scrub->pfss_last.tv_sec > TS_MAX_IDLE) {
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: dst idled out of PAWS ");
+ pf_print_state(state);
+ addlog("\n");
+ }
+ dst->scrub->pfss_flags =
+ (dst->scrub->pfss_flags & ~PFSS_PAWS) | PFSS_PAWS_IDLED;
+ }
+
+ if (got_ts && src->scrub && dst->scrub &&
+ (src->scrub->pfss_flags & PFSS_PAWS) &&
+ (dst->scrub->pfss_flags & PFSS_PAWS)) {
+ /* Validate that the timestamps are "in-window".
+ * RFC1323 describes TCP Timestamp options that allow
+ * measurement of RTT (round trip time) and PAWS
+ * (protection against wrapped sequence numbers). PAWS
+ * gives us a set of rules for rejecting packets on
+ * long fat pipes (packets that were somehow delayed
+ * in transit longer than the time it took to send the
+ * full TCP sequence space of 4Gb). We can use these
+ * rules and infer a few others that will let us treat
+ * the 32bit timestamp and the 32bit echoed timestamp
+ * as sequence numbers to prevent a blind attacker from
+ * inserting packets into a connection.
+ *
+ * RFC1323 tells us:
+ * - The timestamp on this packet must be greater than
+ * or equal to the last value echoed by the other
+ * endpoint. The RFC says those will be discarded
+ * since it is a dup that has already been acked.
+ * This gives us a lowerbound on the timestamp.
+ * timestamp >= other last echoed timestamp
+ * - The timestamp will be less than or equal to
+ * the last timestamp plus the time between the
+ * last packet and now. The RFC defines the max
+ * clock rate as 1ms. We will allow clocks to be
+ * up to 10% fast and will allow a total difference
+ * or 30 seconds due to a route change. And this
+ * gives us an upperbound on the timestamp.
+ * timestamp <= last timestamp + max ticks
+ * We have to be careful here. Windows will send an
+ * initial timestamp of zero and then initialize it
+ * to a random value after the 3whs; presumably to
+ * avoid a DoS by having to call an expensive RNG
+ * during a SYN flood. Proof MS has at least one
+ * good security geek.
+ *
+ * - The TCP timestamp option must also echo the other
+ * endpoints timestamp. The timestamp echoed is the
+ * one carried on the earliest unacknowledged segment
+ * on the left edge of the sequence window. The RFC
+ * states that the host will reject any echoed
+ * timestamps that were larger than any ever sent.
+ * This gives us an upperbound on the TS echo.
+ * tescr <= largest_tsval
+ * - The lowerbound on the TS echo is a little more
+ * tricky to determine. The other endpoint's echoed
+ * values will not decrease. But there may be
+ * network conditions that re-order packets and
+ * cause our view of them to decrease. For now the
+ * only lowerbound we can safely determine is that
+ * the TS echo will never be less than the original
+ * TS. XXX There is probably a better lowerbound.
+ * Remove TS_MAX_CONN with better lowerbound check.
+ * tescr >= other original TS
+ *
+ * It is also important to note that the fastest
+ * timestamp clock of 1ms will wrap its 32bit space in
+ * 24 days. So we just disable TS checking after 24
+ * days of idle time. We actually must use a 12d
+ * connection limit until we can come up with a better
+ * lowerbound to the TS echo check.
+ */
+ struct timeval delta_ts;
+ int ts_fudge;
+
+ /*
+ * PFTM_TS_DIFF is how many seconds of leeway to allow
+ * a host's timestamp. This can happen if the previous
+ * packet got delayed in transit for much longer than
+ * this packet.
+ */
+ if ((ts_fudge = state->rule.ptr->timeout[PFTM_TS_DIFF]) == 0)
+ ts_fudge = pf_default_rule.timeout[PFTM_TS_DIFF];
+
+ /* Calculate max ticks since the last timestamp */
+#define TS_MAXFREQ 1100 /* RFC max TS freq of 1Khz + 10% skew */
+#define TS_MICROSECS 1000000 /* microseconds per second */
+ timersub(&uptime, &src->scrub->pfss_last, &delta_ts);
+ tsval_from_last = (delta_ts.tv_sec + ts_fudge) * TS_MAXFREQ;
+ tsval_from_last += delta_ts.tv_usec / (TS_MICROSECS/TS_MAXFREQ);
+
+ if ((src->state >= TCPS_ESTABLISHED &&
+ dst->state >= TCPS_ESTABLISHED) &&
+ (SEQ_LT(tsval, dst->scrub->pfss_tsecr) ||
+ SEQ_GT(tsval, src->scrub->pfss_tsval + tsval_from_last) ||
+ (tsecr && (SEQ_GT(tsecr, dst->scrub->pfss_tsval) ||
+ SEQ_LT(tsecr, dst->scrub->pfss_tsval0))))) {
+ /* Bad RFC1323 implementation or an insertion attack.
+ *
+ * - Solaris 2.6 and 2.7 are known to send another ACK
+ * after the FIN,FIN|ACK,ACK closing that carries
+ * an old timestamp.
+ */
+
+ DPFPRINTF(LOG_NOTICE, "Timestamp failed %c%c%c%c",
+ SEQ_LT(tsval, dst->scrub->pfss_tsecr) ? '0' : ' ',
+ SEQ_GT(tsval, src->scrub->pfss_tsval +
+ tsval_from_last) ? '1' : ' ',
+ SEQ_GT(tsecr, dst->scrub->pfss_tsval) ? '2' : ' ',
+ SEQ_LT(tsecr, dst->scrub->pfss_tsval0)? '3' : ' ');
+ DPFPRINTF(LOG_NOTICE, " tsval: %u tsecr: %u "
+ "+ticks: %u idle: %llu.%06lus", tsval, tsecr,
+ tsval_from_last, (long long)delta_ts.tv_sec,
+ delta_ts.tv_usec);
+ DPFPRINTF(LOG_NOTICE, " src->tsval: %u tsecr: %u",
+ src->scrub->pfss_tsval, src->scrub->pfss_tsecr);
+ DPFPRINTF(LOG_NOTICE, " dst->tsval: %u tsecr: %u "
+ "tsval0: %u", dst->scrub->pfss_tsval,
+ dst->scrub->pfss_tsecr, dst->scrub->pfss_tsval0);
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE, "pf: ");
+ pf_print_state(state);
+ pf_print_flags(th->th_flags);
+ addlog("\n");
+ }
+ REASON_SET(reason, PFRES_TS);
+ return (PF_DROP);
+ }
+ /* XXX I'd really like to require tsecr but it's optional */
+ } else if (!got_ts && (th->th_flags & TH_RST) == 0 &&
+ ((src->state == TCPS_ESTABLISHED && dst->state == TCPS_ESTABLISHED)
+ || pd->p_len > 0 || (th->th_flags & TH_SYN)) &&
+ src->scrub && dst->scrub &&
+ (src->scrub->pfss_flags & PFSS_PAWS) &&
+ (dst->scrub->pfss_flags & PFSS_PAWS)) {
+ /* Didn't send a timestamp. Timestamps aren't really useful
+ * when:
+ * - connection opening or closing (often not even sent).
+ * but we must not let an attacker to put a FIN on a
+ * data packet to sneak it through our ESTABLISHED check.
+ * - on a TCP reset. RFC suggests not even looking at TS.
+ * - on an empty ACK. The TS will not be echoed so it will
+ * probably not help keep the RTT calculation in sync and
+ * there isn't as much danger when the sequence numbers
+ * got wrapped. So some stacks don't include TS on empty
+ * ACKs :-(
+ *
+ * To minimize the disruption to mostly RFC1323 conformant
+ * stacks, we will only require timestamps on data packets.
+ *
+ * And what do ya know, we cannot require timestamps on data
+ * packets. There appear to be devices that do legitimate
+ * TCP connection hijacking. There are HTTP devices that allow
+ * a 3whs (with timestamps) and then buffer the HTTP request.
+ * If the intermediate device has the HTTP response cache, it
+ * will spoof the response but not bother timestamping its
+ * packets. So we can look for the presence of a timestamp in
+ * the first data packet and if there, require it in all future
+ * packets.
+ */
+
+ if (pd->p_len > 0 && (src->scrub->pfss_flags & PFSS_DATA_TS)) {
+ /*
+ * Hey! Someone tried to sneak a packet in. Or the
+ * stack changed its RFC1323 behavior?!?!
+ */
+ if (pf_status.debug >= LOG_NOTICE) {
+ log(LOG_NOTICE,
+ "pf: did not receive expected RFC1323 "
+ "timestamp");
+ pf_print_state(state);
+ pf_print_flags(th->th_flags);
+ addlog("\n");
+ }
+ REASON_SET(reason, PFRES_TS);
+ return (PF_DROP);
+ }
+ }
+
+ /*
+ * We will note if a host sends his data packets with or without
+ * timestamps. And require all data packets to contain a timestamp
+ * if the first does. PAWS implicitly requires that all data packets be
+ * timestamped. But I think there are middle-man devices that hijack
+ * TCP streams immediately after the 3whs and don't timestamp their
+ * packets (seen in a WWW accelerator or cache).
+ */
+ if (pd->p_len > 0 && src->scrub && (src->scrub->pfss_flags &
+ (PFSS_TIMESTAMP|PFSS_DATA_TS|PFSS_DATA_NOTS)) == PFSS_TIMESTAMP) {
+ if (got_ts)
+ src->scrub->pfss_flags |= PFSS_DATA_TS;
+ else {
+ src->scrub->pfss_flags |= PFSS_DATA_NOTS;
+ if (pf_status.debug >= LOG_NOTICE && dst->scrub &&
+ (dst->scrub->pfss_flags & PFSS_TIMESTAMP)) {
+ /* Don't warn if other host rejected RFC1323 */
+ log(LOG_NOTICE,
+ "pf: broken RFC1323 stack did not "
+ "timestamp data packet. Disabled PAWS "
+ "security.");
+ pf_print_state(state);
+ pf_print_flags(th->th_flags);
+ addlog("\n");
+ }
+ }
+ }
+
+ /*
+ * Update PAWS values
+ */
+ if (got_ts && src->scrub && PFSS_TIMESTAMP == (src->scrub->pfss_flags &
+ (PFSS_PAWS_IDLED|PFSS_TIMESTAMP))) {
+ getmicrouptime(&src->scrub->pfss_last);
+ if (SEQ_GEQ(tsval, src->scrub->pfss_tsval) ||
+ (src->scrub->pfss_flags & PFSS_PAWS) == 0)
+ src->scrub->pfss_tsval = tsval;
+
+ if (tsecr) {
+ if (SEQ_GEQ(tsecr, src->scrub->pfss_tsecr) ||
+ (src->scrub->pfss_flags & PFSS_PAWS) == 0)
+ src->scrub->pfss_tsecr = tsecr;
+
+ if ((src->scrub->pfss_flags & PFSS_PAWS) == 0 &&
+ (SEQ_LT(tsval, src->scrub->pfss_tsval0) ||
+ src->scrub->pfss_tsval0 == 0)) {
+ /* tsval0 MUST be the lowest timestamp */
+ src->scrub->pfss_tsval0 = tsval;
+ }
+
+ /* Only fully initialized after a TS gets echoed */
+ if ((src->scrub->pfss_flags & PFSS_PAWS) == 0)
+ src->scrub->pfss_flags |= PFSS_PAWS;
+ }
+ }
+
+ /* I have a dream.... TCP segment reassembly.... */
+ return (0);
+}
+
+int
+pf_normalize_mss(struct pf_pdesc *pd, u_int16_t maxmss)
+{
+ int olen, optsoff;
+ u_int8_t opts[MAX_TCPOPTLEN], *opt;
+
+ olen = (pd->hdr.tcp.th_off << 2) - sizeof(struct pf_tcphdr);
+ optsoff = pd->off + sizeof(struct pf_tcphdr);
+ if (olen < TCPOLEN_MAXSEG ||
+ !pf_pull_hdr(pd->m, optsoff, opts, olen, NULL, pd->af))
+ return (0);
+
+ opt = opts;
+ while ((opt = pf_find_tcpopt(opt, opts, olen,
+ TCPOPT_MAXSEG, TCPOLEN_MAXSEG)) != NULL) {
+ u_int16_t mss;
+ u_int8_t *mssp = opt + 2;
+ memcpy(&mss, mssp, sizeof(mss));
+ if (ntohs(mss) > maxmss) {
+ size_t mssoffopts = mssp - opts;
+ pf_patch_16_unaligned(pd, &mss,
+ htons(maxmss), PF_ALGNMNT(mssoffopts));
+ m_copyback(pd->m, optsoff + mssoffopts,
+ sizeof(mss), &mss, M_NOWAIT);
+ m_copyback(pd->m, pd->off,
+ sizeof(struct pf_tcphdr), &pd->hdr.tcp, M_NOWAIT);
+ }
+
+ opt += opt[1];
+ }
+
+ return (0);
+}
+
+void
+pf_scrub(struct mbuf *m, u_int16_t flags, sa_family_t af, u_int8_t min_ttl,
+ u_int8_t tos)
+{
+ struct pf_ip *h = mtod(m, struct pf_ip *);
+#ifdef INET6
+ struct pf_ip6_hdr *h6 = mtod(m, struct pf_ip6_hdr *);
+#endif /* INET6 */
+ u_int16_t old;
+
+ /* Clear IP_DF if no-df was requested */
+ if (flags & PFSTATE_NODF && af == AF_INET && h->ip_off & htons(IP_DF)) {
+ old = h->ip_off;
+ h->ip_off &= htons(~IP_DF);
+ pf_cksum_fixup(&h->ip_sum, old, h->ip_off, 0);
+ }
+
+ /* Enforce a minimum ttl, may cause endless packet loops */
+ if (min_ttl && af == AF_INET && h->ip_ttl < min_ttl) {
+ old = h->ip_ttl;
+ h->ip_ttl = min_ttl;
+ pf_cksum_fixup(&h->ip_sum, old, h->ip_ttl, 0);
+ }
+#ifdef INET6
+ if (min_ttl && af == AF_INET6 && h6->ip6_hlim < min_ttl)
+ h6->ip6_hlim = min_ttl;
+#endif /* INET6 */
+
+ /* Enforce tos */
+ if (flags & PFSTATE_SETTOS) {
+ if (af == AF_INET) {
+ /*
+ * ip_tos is 8 bit field at offset 1. Use 16 bit value
+ * at offset 0.
+ */
+ old = *(u_int16_t *)h;
+ h->ip_tos = tos | (h->ip_tos & IPTOS_ECN_MASK);
+ pf_cksum_fixup(&h->ip_sum, old, *(u_int16_t *)h, 0);
+ }
+#ifdef INET6
+ if (af == AF_INET6) {
+ /* drugs are unable to explain such idiocy */
+ h6->ip6_flow &= ~htonl(0x0fc00000);
+ h6->ip6_flow |= htonl(((u_int32_t)tos) << 20);
+ }
+#endif /* INET6 */
+ }
+
+ /* random-id, but not for fragments */
+ if (flags & PFSTATE_RANDOMID && af == AF_INET &&
+ !(h->ip_off & ~htons(IP_DF))) {
+ old = h->ip_id;
+ h->ip_id = htons(ip_randomid());
+ pf_cksum_fixup(&h->ip_sum, old, h->ip_id, 0);
+ }
+}
diff --git a/module/pfsrc/pf_osfp.c b/module/pfsrc/pf_osfp.c
new file mode 100644
index 0000000..d1ccd5e
--- /dev/null
+++ b/module/pfsrc/pf_osfp.c
@@ -0,0 +1,560 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_osfp.c — see docs/porting-notes.md */
+#include
+#endif /* PFDEBUG */
+
+#endif /* _KERNEL */
+
+/*
+ * Protection/ownership:
+ * I immutable after pf_osfp_initialize()
+ * p pf_lock
+ */
+
+SLIST_HEAD(pf_osfp_list, pf_os_fingerprint) pf_osfp_list =
+ SLIST_HEAD_INITIALIZER(pf_osfp_list); /* [p] */
+pool_t pf_osfp_entry_pl; /* [I] */
+pool_t pf_osfp_pl; /* [I] */
+
+struct pf_os_fingerprint *pf_osfp_find(struct pf_os_fingerprint *,
+ u_int8_t);
+struct pf_os_fingerprint *pf_osfp_find_exact(struct pf_os_fingerprint *);
+void pf_osfp_insert(struct pf_os_fingerprint *);
+
+
+#ifdef _KERNEL
+/*
+ * Passively fingerprint the OS of the host (IPv4 TCP SYN packets only)
+ * Returns the list of possible OSes.
+ */
+struct pf_osfp_enlist *
+pf_osfp_fingerprint(struct pf_pdesc *pd)
+{
+ struct pf_tcphdr *th = &pd->hdr.tcp;
+ struct pf_ip *ip = NULL;
+ struct pf_ip6_hdr *ip6 = NULL;
+ char hdr[60];
+
+ if (pd->proto != IPPROTO_TCP)
+ return (NULL);
+
+ switch (pd->af) {
+ case AF_INET:
+ ip = mtod(pd->m, struct pf_ip *);
+ break;
+ case AF_INET6:
+ ip6 = mtod(pd->m, struct pf_ip6_hdr *);
+ break;
+ }
+ if (!pf_pull_hdr(pd->m, pd->off, hdr, th->th_off << 2, NULL, pd->af))
+ return (NULL);
+
+ return (pf_osfp_fingerprint_hdr(ip, ip6, (struct pf_tcphdr *)hdr));
+}
+#endif /* _KERNEL */
+
+struct pf_osfp_enlist *
+pf_osfp_fingerprint_hdr(const struct pf_ip *ip, const struct pf_ip6_hdr *ip6,
+ const struct pf_tcphdr *tcp)
+{
+ struct pf_os_fingerprint fp, *fpresult;
+ int cnt, optlen = 0;
+ const u_int8_t *optp;
+#ifdef _KERNEL
+ char srcname[128];
+#else /* !_KERNEL */
+ char srcname[NI_MAXHOST];
+#endif /* _KERNEL */
+
+ if ((tcp->th_flags & (TH_SYN|TH_ACK)) != TH_SYN)
+ return (NULL);
+ if (ip) {
+ if ((ip->ip_off & htons(IP_OFFMASK)) != 0)
+ return (NULL);
+ }
+
+ memset(&fp, 0, sizeof(fp));
+
+ if (ip) {
+#ifndef _KERNEL
+ struct sockaddr_in sin;
+#endif /* _KERNEL */
+
+ fp.fp_psize = ntohs(ip->ip_len);
+ fp.fp_ttl = ip->ip_ttl;
+ if (ip->ip_off & htons(IP_DF))
+ fp.fp_flags |= PF_OSFP_DF;
+#ifdef _KERNEL
+ inet_ntop(AF_INET, &ip->ip_src, srcname, sizeof(srcname));
+#else /* !_KERNEL */
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin./* PFLINUX sin_len */;
+ sin.sin_addr = ip->ip_src;
+ (void)getnameinfo((struct sockaddr *)&sin,
+ sizeof(struct sockaddr_in), srcname, sizeof(srcname),
+ NULL, 0, NI_NUMERICHOST);
+#endif /* _KERNEL */
+ }
+#ifdef INET6
+ else if (ip6) {
+#ifndef _KERNEL
+ struct sockaddr_in6 sin6;
+#endif /* !_KERNEL */
+
+ /* jumbo payload? */
+ fp.fp_psize = sizeof(struct pf_ip6_hdr) + ntohs(ip6->ip6_plen);
+ fp.fp_ttl = ip6->ip6_hlim;
+ fp.fp_flags |= PF_OSFP_DF;
+ fp.fp_flags |= PF_OSFP_INET6;
+#ifdef _KERNEL
+ inet_ntop(AF_INET6, &ip6->ip6_src, srcname, sizeof(srcname));
+#else /* !_KERNEL */
+ memset(&sin6, 0, sizeof(sin6));
+ sin6.sin6_family = AF_INET6;
+ sin6.sin6_len = sizeof(struct sockaddr_in6);
+ sin6.sin6_addr = ip6->ip6_src;
+ (void)getnameinfo((struct sockaddr *)&sin6,
+ sizeof(struct sockaddr_in6), srcname, sizeof(srcname),
+ NULL, 0, NI_NUMERICHOST);
+#endif /* !_KERNEL */
+ }
+#endif /* INET6 */
+ else
+ return (NULL);
+ fp.fp_wsize = ntohs(tcp->th_win);
+
+
+ cnt = (tcp->th_off << 2) - sizeof(*tcp);
+ optp = (const u_int8_t *)((const char *)tcp + sizeof(*tcp));
+ for (; cnt > 0; cnt -= optlen, optp += optlen) {
+ if (*optp == TCPOPT_EOL)
+ break;
+
+ fp.fp_optcnt++;
+ if (*optp == TCPOPT_NOP) {
+ fp.fp_tcpopts = (fp.fp_tcpopts << PF_OSFP_TCPOPT_BITS) |
+ PF_OSFP_TCPOPT_NOP;
+ optlen = 1;
+ } else {
+ if (cnt < 2)
+ return (NULL);
+ optlen = optp[1];
+ if (optlen > cnt || optlen < 2)
+ return (NULL);
+ switch (*optp) {
+ case TCPOPT_MAXSEG:
+ if (optlen >= TCPOLEN_MAXSEG)
+ memcpy(&fp.fp_mss, &optp[2],
+ sizeof(fp.fp_mss));
+ fp.fp_tcpopts = (fp.fp_tcpopts <<
+ PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_MSS;
+ fp.fp_mss = ntohs(fp.fp_mss);
+ break;
+ case TCPOPT_WINDOW:
+ if (optlen >= TCPOLEN_WINDOW)
+ memcpy(&fp.fp_wscale, &optp[2],
+ sizeof(fp.fp_wscale));
+ fp.fp_tcpopts = (fp.fp_tcpopts <<
+ PF_OSFP_TCPOPT_BITS) |
+ PF_OSFP_TCPOPT_WSCALE;
+ break;
+ case TCPOPT_SACK_PERMITTED:
+ fp.fp_tcpopts = (fp.fp_tcpopts <<
+ PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_SACK;
+ break;
+ case TCPOPT_TIMESTAMP:
+ if (optlen >= TCPOLEN_TIMESTAMP) {
+ u_int32_t ts;
+ memcpy(&ts, &optp[2], sizeof(ts));
+ if (ts == 0)
+ fp.fp_flags |= PF_OSFP_TS0;
+
+ }
+ fp.fp_tcpopts = (fp.fp_tcpopts <<
+ PF_OSFP_TCPOPT_BITS) | PF_OSFP_TCPOPT_TS;
+ break;
+ default:
+ return (NULL);
+ }
+ }
+ optlen = MAX(optlen, 1); /* paranoia */
+ }
+
+ DPFPRINTF(LOG_INFO,
+ "fingerprinted %s:%d %d:%d:%d:%d:%llx (%d) "
+ "(TS=%s,M=%s%d,W=%s%d)",
+ srcname, ntohs(tcp->th_sport),
+ fp.fp_wsize, fp.fp_ttl, (fp.fp_flags & PF_OSFP_DF) != 0,
+ fp.fp_psize, (long long int)fp.fp_tcpopts, fp.fp_optcnt,
+ (fp.fp_flags & PF_OSFP_TS0) ? "0" : "",
+ (fp.fp_flags & PF_OSFP_MSS_MOD) ? "%" :
+ (fp.fp_flags & PF_OSFP_MSS_DC) ? "*" : "",
+ fp.fp_mss,
+ (fp.fp_flags & PF_OSFP_WSCALE_MOD) ? "%" :
+ (fp.fp_flags & PF_OSFP_WSCALE_DC) ? "*" : "",
+ fp.fp_wscale);
+
+ if ((fpresult = pf_osfp_find(&fp, PF_OSFP_MAXTTL_OFFSET)))
+ return (&fpresult->fp_oses);
+ return (NULL);
+}
+
+/* Match a fingerprint ID against a list of OSes */
+int
+pf_osfp_match(struct pf_osfp_enlist *list, pf_osfp_t os)
+{
+ struct pf_osfp_entry *entry;
+ int os_class, os_version, os_subtype;
+ int en_class, en_version, en_subtype;
+
+ if (os == PF_OSFP_ANY)
+ return (1);
+ if (list == NULL) {
+ DPFPRINTF(LOG_INFO, "osfp no match against %x", os);
+ return (os == PF_OSFP_UNKNOWN);
+ }
+ PF_OSFP_UNPACK(os, os_class, os_version, os_subtype);
+ SLIST_FOREACH(entry, list, fp_entry) {
+ PF_OSFP_UNPACK(entry->fp_os, en_class, en_version, en_subtype);
+ if ((os_class == PF_OSFP_ANY || en_class == os_class) &&
+ (os_version == PF_OSFP_ANY || en_version == os_version) &&
+ (os_subtype == PF_OSFP_ANY || en_subtype == os_subtype)) {
+ DPFPRINTF(LOG_INFO,
+ "osfp matched %s %s %s %x==%x",
+ entry->fp_class_nm, entry->fp_version_nm,
+ entry->fp_subtype_nm, os, entry->fp_os);
+ return (1);
+ }
+ }
+ DPFPRINTF(LOG_INFO, "fingerprint 0x%x didn't match", os);
+ return (0);
+}
+
+/* Initialize the OS fingerprint system */
+void
+pf_osfp_initialize(void)
+{
+ pool_init(&pf_osfp_entry_pl, sizeof(struct pf_osfp_entry), 0,
+ IPL_NONE, PR_WAITOK, "pfosfpen", NULL);
+ pool_init(&pf_osfp_pl, sizeof(struct pf_os_fingerprint), 0,
+ IPL_NONE, PR_WAITOK, "pfosfp", NULL);
+}
+
+/* Flush the fingerprint list */
+void
+pf_osfp_flush(void)
+{
+ struct pf_os_fingerprint *fp;
+ struct pf_osfp_entry *entry;
+
+ PF_LOCK();
+ while ((fp = SLIST_FIRST(&pf_osfp_list))) {
+ SLIST_REMOVE_HEAD(&pf_osfp_list, fp_next);
+ while ((entry = SLIST_FIRST(&fp->fp_oses))) {
+ SLIST_REMOVE_HEAD(&fp->fp_oses, fp_entry);
+ pool_put(&pf_osfp_entry_pl, entry);
+ }
+ pool_put(&pf_osfp_pl, fp);
+ }
+ PF_UNLOCK();
+}
+
+
+/* Add a fingerprint */
+int
+pf_osfp_add(struct pf_osfp_ioctl *fpioc)
+{
+ struct pf_os_fingerprint *fp, *fp_prealloc, fpadd;
+ struct pf_osfp_entry *entry;
+
+ if (strnlen(fpioc->fp_os.fp_class_nm, sizeof(fpioc->fp_os.fp_class_nm)) >=
+ sizeof(fpioc->fp_os.fp_class_nm))
+ return ENAMETOOLONG;
+ if (strnlen(fpioc->fp_os.fp_version_nm, sizeof(fpioc->fp_os.fp_version_nm)) >=
+ sizeof(fpioc->fp_os.fp_version_nm))
+ return ENAMETOOLONG;
+ if (strnlen(fpioc->fp_os.fp_subtype_nm, sizeof(fpioc->fp_os.fp_subtype_nm)) >=
+ sizeof(fpioc->fp_os.fp_subtype_nm))
+ return ENAMETOOLONG;
+
+ memset(&fpadd, 0, sizeof(fpadd));
+ fpadd.fp_tcpopts = fpioc->fp_tcpopts;
+ fpadd.fp_wsize = fpioc->fp_wsize;
+ fpadd.fp_psize = fpioc->fp_psize;
+ fpadd.fp_mss = fpioc->fp_mss;
+ fpadd.fp_flags = fpioc->fp_flags;
+ fpadd.fp_optcnt = fpioc->fp_optcnt;
+ fpadd.fp_wscale = fpioc->fp_wscale;
+ fpadd.fp_ttl = fpioc->fp_ttl;
+
+ DPFPRINTF(LOG_DEBUG,
+ "adding osfp %s %s %s = %s%d:%d:%d:%s%d:0x%llx %d "
+ "(TS=%s,M=%s%d,W=%s%d) %x",
+ fpioc->fp_os.fp_class_nm, fpioc->fp_os.fp_version_nm,
+ fpioc->fp_os.fp_subtype_nm,
+ (fpadd.fp_flags & PF_OSFP_WSIZE_MOD) ? "%" :
+ (fpadd.fp_flags & PF_OSFP_WSIZE_MSS) ? "S" :
+ (fpadd.fp_flags & PF_OSFP_WSIZE_MTU) ? "T" :
+ (fpadd.fp_flags & PF_OSFP_WSIZE_DC) ? "*" : "",
+ fpadd.fp_wsize,
+ fpadd.fp_ttl,
+ (fpadd.fp_flags & PF_OSFP_DF) ? 1 : 0,
+ (fpadd.fp_flags & PF_OSFP_PSIZE_MOD) ? "%" :
+ (fpadd.fp_flags & PF_OSFP_PSIZE_DC) ? "*" : "",
+ fpadd.fp_psize,
+ (long long int)fpadd.fp_tcpopts, fpadd.fp_optcnt,
+ (fpadd.fp_flags & PF_OSFP_TS0) ? "0" : "",
+ (fpadd.fp_flags & PF_OSFP_MSS_MOD) ? "%" :
+ (fpadd.fp_flags & PF_OSFP_MSS_DC) ? "*" : "",
+ fpadd.fp_mss,
+ (fpadd.fp_flags & PF_OSFP_WSCALE_MOD) ? "%" :
+ (fpadd.fp_flags & PF_OSFP_WSCALE_DC) ? "*" : "",
+ fpadd.fp_wscale,
+ fpioc->fp_os.fp_os);
+
+ entry = pool_get(&pf_osfp_entry_pl, PR_WAITOK|PR_LIMITFAIL);
+ if (entry == NULL)
+ return (ENOMEM);
+
+ fp_prealloc = pool_get(&pf_osfp_pl, PR_WAITOK|PR_ZERO|PR_LIMITFAIL);
+ if (fp_prealloc == NULL) {
+ pool_put(&pf_osfp_entry_pl, entry);
+ return (ENOMEM);
+ }
+
+ PF_LOCK();
+ if ((fp = pf_osfp_find_exact(&fpadd))) {
+ struct pf_osfp_entry *tentry;
+
+ SLIST_FOREACH(tentry, &fp->fp_oses, fp_entry) {
+ if (PF_OSFP_ENTRY_EQ(tentry, &fpioc->fp_os)) {
+ PF_UNLOCK();
+ pool_put(&pf_osfp_entry_pl, entry);
+ pool_put(&pf_osfp_pl, fp_prealloc);
+ return (EEXIST);
+ }
+ }
+ } else {
+ fp = fp_prealloc;
+ fp_prealloc = NULL;
+ fp->fp_tcpopts = fpioc->fp_tcpopts;
+ fp->fp_wsize = fpioc->fp_wsize;
+ fp->fp_psize = fpioc->fp_psize;
+ fp->fp_mss = fpioc->fp_mss;
+ fp->fp_flags = fpioc->fp_flags;
+ fp->fp_optcnt = fpioc->fp_optcnt;
+ fp->fp_wscale = fpioc->fp_wscale;
+ fp->fp_ttl = fpioc->fp_ttl;
+ SLIST_INIT(&fp->fp_oses);
+ pf_osfp_insert(fp);
+ }
+ memcpy(entry, &fpioc->fp_os, sizeof(*entry));
+
+ SLIST_INSERT_HEAD(&fp->fp_oses, entry, fp_entry);
+ PF_UNLOCK();
+
+#ifdef PFDEBUG
+ if ((fp = pf_osfp_validate()))
+ DPFPRINTF(LOG_NOTICE,
+ "Invalid fingerprint list");
+#endif /* PFDEBUG */
+
+ if (fp_prealloc != NULL)
+ pool_put(&pf_osfp_pl, fp_prealloc);
+
+ return (0);
+}
+
+
+/* Find a fingerprint in the list */
+struct pf_os_fingerprint *
+pf_osfp_find(struct pf_os_fingerprint *find, u_int8_t ttldiff)
+{
+ struct pf_os_fingerprint *f;
+
+ PF_ASSERT_LOCKED();
+
+#define MATCH_INT(_MOD, _DC, _field) \
+ if ((f->fp_flags & _DC) == 0) { \
+ if ((f->fp_flags & _MOD) == 0) { \
+ if (f->_field != find->_field) \
+ continue; \
+ } else { \
+ if (f->_field == 0 || find->_field % f->_field) \
+ continue; \
+ } \
+ }
+
+ SLIST_FOREACH(f, &pf_osfp_list, fp_next) {
+ if (f->fp_tcpopts != find->fp_tcpopts ||
+ f->fp_optcnt != find->fp_optcnt ||
+ f->fp_ttl < find->fp_ttl ||
+ f->fp_ttl - find->fp_ttl > ttldiff ||
+ (f->fp_flags & (PF_OSFP_DF|PF_OSFP_TS0)) !=
+ (find->fp_flags & (PF_OSFP_DF|PF_OSFP_TS0)))
+ continue;
+
+ MATCH_INT(PF_OSFP_PSIZE_MOD, PF_OSFP_PSIZE_DC, fp_psize)
+ MATCH_INT(PF_OSFP_MSS_MOD, PF_OSFP_MSS_DC, fp_mss)
+ MATCH_INT(PF_OSFP_WSCALE_MOD, PF_OSFP_WSCALE_DC, fp_wscale)
+ if ((f->fp_flags & PF_OSFP_WSIZE_DC) == 0) {
+ if (f->fp_flags & PF_OSFP_WSIZE_MSS) {
+ if (find->fp_mss == 0)
+ continue;
+
+/* Some "smart" NAT devices and DSL routers will tweak the MSS size and
+ * will set it to whatever is suitable for the link type.
+ */
+#define SMART_MSS 1460
+ if ((find->fp_wsize % find->fp_mss ||
+ find->fp_wsize / find->fp_mss !=
+ f->fp_wsize) &&
+ (find->fp_wsize % SMART_MSS ||
+ find->fp_wsize / SMART_MSS !=
+ f->fp_wsize))
+ continue;
+ } else if (f->fp_flags & PF_OSFP_WSIZE_MTU) {
+ if (find->fp_mss == 0)
+ continue;
+
+#define MTUOFF (sizeof(struct pf_ip) + sizeof(struct pf_tcphdr))
+#define SMART_MTU (SMART_MSS + MTUOFF)
+ if ((find->fp_wsize % (find->fp_mss + MTUOFF) ||
+ find->fp_wsize / (find->fp_mss + MTUOFF) !=
+ f->fp_wsize) &&
+ (find->fp_wsize % SMART_MTU ||
+ find->fp_wsize / SMART_MTU !=
+ f->fp_wsize))
+ continue;
+ } else if (f->fp_flags & PF_OSFP_WSIZE_MOD) {
+ if (f->fp_wsize == 0 || find->fp_wsize %
+ f->fp_wsize)
+ continue;
+ } else {
+ if (f->fp_wsize != find->fp_wsize)
+ continue;
+ }
+ }
+ return (f);
+ }
+
+ return (NULL);
+}
+
+/* Find an exact fingerprint in the list */
+struct pf_os_fingerprint *
+pf_osfp_find_exact(struct pf_os_fingerprint *find)
+{
+ struct pf_os_fingerprint *f;
+
+ PF_ASSERT_LOCKED();
+
+ SLIST_FOREACH(f, &pf_osfp_list, fp_next) {
+ if (f->fp_tcpopts == find->fp_tcpopts &&
+ f->fp_wsize == find->fp_wsize &&
+ f->fp_psize == find->fp_psize &&
+ f->fp_mss == find->fp_mss &&
+ f->fp_flags == find->fp_flags &&
+ f->fp_optcnt == find->fp_optcnt &&
+ f->fp_wscale == find->fp_wscale &&
+ f->fp_ttl == find->fp_ttl)
+ return (f);
+ }
+
+ return (NULL);
+}
+
+/* Insert a fingerprint into the list */
+void
+pf_osfp_insert(struct pf_os_fingerprint *ins)
+{
+ struct pf_os_fingerprint *f, *prev = NULL;
+
+ PF_ASSERT_LOCKED();
+
+ /* XXX need to go semi tree based. can key on tcp options */
+
+ SLIST_FOREACH(f, &pf_osfp_list, fp_next)
+ prev = f;
+ if (prev)
+ SLIST_INSERT_AFTER(prev, ins, fp_next);
+ else
+ SLIST_INSERT_HEAD(&pf_osfp_list, ins, fp_next);
+}
+
+/* Fill a fingerprint by its number (from an ioctl) */
+int
+pf_osfp_get(struct pf_osfp_ioctl *fpioc)
+{
+ struct pf_os_fingerprint *fp;
+ struct pf_osfp_entry *entry;
+ int num = fpioc->fp_getnum;
+ int i = 0;
+
+ memset(fpioc, 0, sizeof(*fpioc));
+ PF_LOCK();
+ SLIST_FOREACH(fp, &pf_osfp_list, fp_next) {
+ SLIST_FOREACH(entry, &fp->fp_oses, fp_entry) {
+ if (i++ == num) {
+ fpioc->fp_mss = fp->fp_mss;
+ fpioc->fp_wsize = fp->fp_wsize;
+ fpioc->fp_flags = fp->fp_flags;
+ fpioc->fp_psize = fp->fp_psize;
+ fpioc->fp_ttl = fp->fp_ttl;
+ fpioc->fp_wscale = fp->fp_wscale;
+ fpioc->fp_getnum = num;
+ memcpy(&fpioc->fp_os, entry,
+ sizeof(fpioc->fp_os));
+ PF_UNLOCK();
+ return (0);
+ }
+ }
+ }
+ PF_UNLOCK();
+
+ return (EBUSY);
+}
+
+
+/* Validate that each signature is reachable */
+struct pf_os_fingerprint *
+pf_osfp_validate(void)
+{
+ struct pf_os_fingerprint *f, *f2, find;
+
+ PF_ASSERT_LOCKED();
+
+ SLIST_FOREACH(f, &pf_osfp_list, fp_next) {
+ memcpy(&find, f, sizeof(find));
+
+ /* We do a few MSS/th_win percolations to make things unique */
+ if (find.fp_mss == 0)
+ find.fp_mss = 128;
+ if (f->fp_flags & PF_OSFP_WSIZE_MSS)
+ find.fp_wsize *= find.fp_mss;
+ else if (f->fp_flags & PF_OSFP_WSIZE_MTU)
+ find.fp_wsize *= (find.fp_mss + 40);
+ else if (f->fp_flags & PF_OSFP_WSIZE_MOD)
+ find.fp_wsize *= 2;
+ if (f != (f2 = pf_osfp_find(&find, 0))) {
+ if (f2)
+ DPFPRINTF(LOG_NOTICE,
+ "Found \"%s %s %s\" instead of "
+ "\"%s %s %s\"\n",
+ SLIST_FIRST(&f2->fp_oses)->fp_class_nm,
+ SLIST_FIRST(&f2->fp_oses)->fp_version_nm,
+ SLIST_FIRST(&f2->fp_oses)->fp_subtype_nm,
+ SLIST_FIRST(&f->fp_oses)->fp_class_nm,
+ SLIST_FIRST(&f->fp_oses)->fp_version_nm,
+ SLIST_FIRST(&f->fp_oses)->fp_subtype_nm);
+ else
+ DPFPRINTF(LOG_NOTICE,
+ "Couldn't find \"%s %s %s\"\n",
+ SLIST_FIRST(&f->fp_oses)->fp_class_nm,
+ SLIST_FIRST(&f->fp_oses)->fp_version_nm,
+ SLIST_FIRST(&f->fp_oses)->fp_subtype_nm);
+ return (f);
+ }
+ }
+ return (NULL);
+}
diff --git a/module/pfsrc/pf_ruleset.c b/module/pfsrc/pf_ruleset.c
new file mode 100644
index 0000000..64a99ce
--- /dev/null
+++ b/module/pfsrc/pf_ruleset.c
@@ -0,0 +1,380 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_ruleset.c — see docs/porting-notes.md */
+#include
+#endif /* PFDEBUG */
+#endif /* _KERNEL */
+
+
+struct pf_anchor_global pf_anchors;
+struct pf_anchor pf_main_anchor;
+
+static __inline int pf_anchor_compare(struct pf_anchor *, struct pf_anchor *);
+
+RB_GENERATE(pf_anchor_global, pf_anchor, entry_global, pf_anchor_compare);
+RB_GENERATE(pf_anchor_node, pf_anchor, entry_node, pf_anchor_compare);
+
+static __inline int
+pf_anchor_compare(struct pf_anchor *a, struct pf_anchor *b)
+{
+ int c = strcmp(a->path, b->path);
+
+ return (c ? (c < 0 ? -1 : 1) : 0);
+}
+
+void
+pf_init_ruleset(struct pf_ruleset *ruleset)
+{
+ memset(ruleset, 0, sizeof(struct pf_ruleset));
+ TAILQ_INIT(&ruleset->rules.queues[0]);
+ TAILQ_INIT(&ruleset->rules.queues[1]);
+ ruleset->rules.active.ptr = &ruleset->rules.queues[0];
+ ruleset->rules.inactive.ptr = &ruleset->rules.queues[1];
+}
+
+struct pf_anchor *
+pf_find_anchor(const char *path)
+{
+ struct pf_anchor *key, *found;
+
+ key = rs_malloc(sizeof(*key));
+ if (key == NULL)
+ return (NULL);
+ strlcpy(key->path, path, sizeof(key->path));
+ found = RB_FIND(pf_anchor_global, &pf_anchors, key);
+ rs_free(key, sizeof(*key));
+ return (found);
+}
+
+struct pf_ruleset *
+pf_find_ruleset(const char *path)
+{
+ struct pf_anchor *anchor;
+
+ while (*path == '/')
+ path++;
+ if (!*path)
+ return (&pf_main_ruleset);
+ anchor = pf_find_anchor(path);
+ if (anchor == NULL)
+ return (NULL);
+ else
+ return (&anchor->ruleset);
+}
+
+struct pf_ruleset *
+pf_get_leaf_ruleset(char *path, char **path_remainder)
+{
+ struct pf_ruleset *ruleset;
+ char *leaf, *p;
+ int i = 0;
+
+ p = path;
+ while (*p == '/')
+ p++;
+
+ ruleset = pf_find_ruleset(p);
+ leaf = p;
+ while (ruleset == NULL) {
+ leaf = strrchr(p, '/');
+ if (leaf != NULL) {
+ *leaf = '\0';
+ i++;
+ ruleset = pf_find_ruleset(p);
+ } else {
+ leaf = path;
+ /*
+ * if no path component exists, then main ruleset is
+ * our parent.
+ */
+ ruleset = &pf_main_ruleset;
+ }
+ }
+
+ if (path_remainder != NULL)
+ *path_remainder = leaf;
+
+ /* restore slashes in path. */
+ while (i != 0) {
+ while (*leaf != '\0')
+ leaf++;
+ *leaf = '/';
+ i--;
+ }
+
+ return (ruleset);
+}
+
+struct pf_anchor *
+pf_create_anchor(struct pf_anchor *parent, const char *aname)
+{
+ struct pf_anchor *anchor, *dup;
+
+ if (!*aname || (strlen(aname) >= PF_ANCHOR_NAME_SIZE) ||
+ ((parent != NULL) && (strlen(parent->path) >= PF_ANCHOR_MAXPATH)))
+ return (NULL);
+
+ anchor = rs_pool_get_anchor();
+ if (anchor == NULL)
+ return (NULL);
+
+ RB_INIT(&anchor->children);
+ strlcpy(anchor->name, aname, sizeof(anchor->name));
+ if (parent != NULL) {
+ /*
+ * Make sure path for levels 2, 3, ... is terminated by '/':
+ * 1/2/3/...
+ */
+ strlcpy(anchor->path, parent->path, sizeof(anchor->path));
+ strlcat(anchor->path, "/", sizeof(anchor->path));
+ }
+ strlcat(anchor->path, anchor->name, sizeof(anchor->path));
+
+ if ((dup = RB_INSERT(pf_anchor_global, &pf_anchors, anchor)) != NULL) {
+ DPFPRINTF(LOG_NOTICE,
+ "%s: RB_INSERT to global '%s' '%s' collides with '%s' '%s'",
+ __func__, anchor->path, anchor->name, dup->path, dup->name);
+ rs_pool_put_anchor(anchor);
+ return (NULL);
+ }
+
+ if (parent != NULL) {
+ anchor->parent = parent;
+ dup = RB_INSERT(pf_anchor_node, &parent->children, anchor);
+ if (dup != NULL) {
+ DPFPRINTF(LOG_NOTICE,
+ "%s: RB_INSERT to parent '%s' '%s' collides with "
+ "'%s' '%s'", __func__, anchor->path, anchor->name,
+ dup->path, dup->name);
+ RB_REMOVE(pf_anchor_global, &pf_anchors,
+ anchor);
+ rs_pool_put_anchor(anchor);
+ return (NULL);
+ }
+ }
+
+ pf_init_ruleset(&anchor->ruleset);
+ anchor->ruleset.anchor = anchor;
+#ifdef _KERNEL
+ refcnt_init(&anchor->ref);
+#endif
+
+ return (anchor);
+}
+
+struct pf_ruleset *
+pf_find_or_create_ruleset(const char *path)
+{
+ char *p, *aname, *r;
+ struct pf_ruleset *ruleset;
+ struct pf_anchor *anchor;
+
+ if (path[0] == 0)
+ return (&pf_main_ruleset);
+
+ while (*path == '/')
+ path++;
+
+ ruleset = pf_find_ruleset(path);
+ if (ruleset != NULL)
+ return (ruleset);
+
+ p = rs_malloc(MAXPATHLEN);
+ if (p == NULL)
+ return (NULL);
+ strlcpy(p, path, MAXPATHLEN);
+
+ ruleset = pf_get_leaf_ruleset(p, &aname);
+ anchor = ruleset->anchor;
+
+ while (*aname == '/')
+ aname++;
+ /*
+ * aname is a path remainder, which contains nodes we must create. We
+ * process the aname path from left to right, effectively descending
+ * from parents to children.
+ */
+ while ((r = strchr(aname, '/')) != NULL || *aname) {
+ if (r != NULL)
+ *r = 0;
+
+ anchor = pf_create_anchor(anchor, aname);
+ if (anchor == NULL) {
+ rs_free(p, MAXPATHLEN);
+ return (NULL);
+ }
+
+ if (r == NULL)
+ break;
+ else
+ aname = r + 1;
+ }
+
+ rs_free(p, MAXPATHLEN);
+ return (&anchor->ruleset);
+}
+
+void
+pf_remove_if_empty_ruleset(struct pf_ruleset *ruleset)
+{
+ struct pf_anchor *parent;
+
+ while (ruleset != NULL) {
+ if (ruleset == &pf_main_ruleset ||
+ !RB_EMPTY(&ruleset->anchor->children) ||
+ ruleset->anchor->refcnt > 0 || ruleset->tables > 0 ||
+ ruleset->topen)
+ return;
+ if (!TAILQ_EMPTY(ruleset->rules.active.ptr) ||
+ !TAILQ_EMPTY(ruleset->rules.inactive.ptr) ||
+ ruleset->rules.inactive.open)
+ return;
+ RB_REMOVE(pf_anchor_global, &pf_anchors, ruleset->anchor);
+ if ((parent = ruleset->anchor->parent) != NULL)
+ RB_REMOVE(pf_anchor_node, &parent->children,
+ ruleset->anchor);
+ pf_anchor_rele(ruleset->anchor);
+ if (parent == NULL)
+ return;
+ ruleset = &parent->ruleset;
+ }
+}
+
+int
+pf_anchor_setup(struct pf_rule *r, const struct pf_ruleset *s,
+ const char *name)
+{
+ char *p, *path;
+ struct pf_ruleset *ruleset;
+
+ r->anchor = NULL;
+ r->anchor_relative = 0;
+ r->anchor_wildcard = 0;
+ if (!name[0])
+ return (0);
+ path = rs_malloc(MAXPATHLEN);
+ if (path == NULL)
+ return (1);
+ if (name[0] == '/')
+ strlcpy(path, name + 1, MAXPATHLEN);
+ else {
+ /* relative path */
+ r->anchor_relative = 1;
+ if (s->anchor == NULL || !s->anchor->path[0])
+ path[0] = 0;
+ else
+ strlcpy(path, s->anchor->path, MAXPATHLEN);
+ while (name[0] == '.' && name[1] == '.' && name[2] == '/') {
+ if (!path[0]) {
+ DPFPRINTF(LOG_NOTICE,
+ "pf_anchor_setup: .. beyond root");
+ rs_free(path, MAXPATHLEN);
+ return (1);
+ }
+ if ((p = strrchr(path, '/')) != NULL)
+ *p = 0;
+ else
+ path[0] = 0;
+ r->anchor_relative++;
+ name += 3;
+ }
+ if (path[0])
+ strlcat(path, "/", MAXPATHLEN);
+ strlcat(path, name, MAXPATHLEN);
+ }
+ if ((p = strrchr(path, '/')) != NULL && !strcmp(p, "/*")) {
+ r->anchor_wildcard = 1;
+ *p = 0;
+ }
+ ruleset = pf_find_or_create_ruleset(path);
+ rs_free(path, MAXPATHLEN);
+ if (ruleset == NULL || ruleset == &pf_main_ruleset) {
+ DPFPRINTF(LOG_NOTICE,
+ "pf_anchor_setup: ruleset");
+ return (1);
+ }
+ r->anchor = ruleset->anchor;
+ r->anchor->refcnt++;
+ return (0);
+}
+
+int
+pf_anchor_copyout(const struct pf_ruleset *rs, const struct pf_rule *r,
+ struct pfioc_rule *pr)
+{
+ pr->anchor_call[0] = 0;
+ if (r->anchor == NULL)
+ return (0);
+ if (!r->anchor_relative) {
+ strlcpy(pr->anchor_call, "/", sizeof(pr->anchor_call));
+ strlcat(pr->anchor_call, r->anchor->path,
+ sizeof(pr->anchor_call));
+ } else {
+ char *a, *p;
+ int i;
+
+ a = rs_malloc(MAXPATHLEN);
+ if (a == NULL)
+ return (1);
+ if (rs == &pf_main_ruleset)
+ a[0] = 0;
+ else
+ strlcpy(a, rs->anchor->path, MAXPATHLEN);
+ for (i = 1; i < r->anchor_relative; ++i) {
+ if ((p = strrchr(a, '/')) == NULL)
+ p = a;
+ *p = 0;
+ strlcat(pr->anchor_call, "../",
+ sizeof(pr->anchor_call));
+ }
+ if (strncmp(a, r->anchor->path, strlen(a))) {
+ DPFPRINTF(LOG_NOTICE,
+ "pf_anchor_copyout: '%s' '%s'", a,
+ r->anchor->path);
+ rs_free(a, MAXPATHLEN);
+ return (1);
+ }
+ if (strlen(r->anchor->path) > strlen(a))
+ strlcat(pr->anchor_call, r->anchor->path + (a[0] ?
+ strlen(a) + 1 : 0), sizeof(pr->anchor_call));
+ rs_free(a, MAXPATHLEN);
+ }
+ if (r->anchor_wildcard)
+ strlcat(pr->anchor_call, pr->anchor_call[0] ? "/*" : "*",
+ sizeof(pr->anchor_call));
+ return (0);
+}
+
+void
+pf_remove_anchor(struct pf_rule *r)
+{
+ if (r->anchor == NULL)
+ return;
+ if (r->anchor->refcnt <= 0)
+ DPFPRINTF(LOG_NOTICE, "pf_remove_anchor: broken refcount");
+ else if (!--r->anchor->refcnt)
+ pf_remove_if_empty_ruleset(&r->anchor->ruleset);
+ r->anchor = NULL;
+}
+
+void
+pf_anchor_rele(struct pf_anchor *anchor)
+{
+ if ((anchor == NULL) || (anchor == &pf_main_anchor))
+ return;
+
+#ifdef _KERNEL
+ if (refcnt_rele(&anchor->ref))
+ rs_pool_put_anchor(anchor);
+#else
+ rs_pool_put_anchor(anchor);
+#endif
+}
+
+struct pf_anchor *
+pf_anchor_take(struct pf_anchor *anchor)
+{
+#ifdef _KERNEL
+ if (anchor != NULL && anchor != &pf_main_anchor)
+ refcnt_take(&anchor->ref);
+#endif
+ return (anchor);
+}
diff --git a/module/pfsrc/pf_syncookies.c b/module/pfsrc/pf_syncookies.c
new file mode 100644
index 0000000..c623fe2
--- /dev/null
+++ b/module/pfsrc/pf_syncookies.c
@@ -0,0 +1,294 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_syncookies.c — see docs/porting-notes.md */
+#include
+
+union pf_syncookie {
+ uint8_t cookie;
+ struct {
+ uint8_t oddeven:1,
+ sack_ok:1,
+ wscale_idx:3,
+ mss_idx:3;
+ } flags;
+};
+
+#define PF_SYNCOOKIE_SECRET_SIZE SIPHASH_KEY_LENGTH
+#define PF_SYNCOOKIE_SECRET_LIFETIME 15 /* seconds */
+
+static struct {
+ struct timeout keytimeout;
+ volatile uint oddeven;
+ SIPHASH_KEY key[2];
+ uint32_t hiwat; /* absolute; # of states */
+ uint32_t lowat;
+} pf_syncookie_status;
+
+void pf_syncookie_rotate(void *);
+void pf_syncookie_newkey(void);
+uint32_t pf_syncookie_mac(struct pf_pdesc *, union pf_syncookie,
+ uint32_t);
+uint32_t pf_syncookie_generate(struct pf_pdesc *, uint16_t);
+
+void
+pf_syncookies_init(void)
+{
+ timeout_set(&pf_syncookie_status.keytimeout,
+ pf_syncookie_rotate, NULL);
+ pf_syncookie_status.hiwat = PFSTATE_HIWAT * PF_SYNCOOKIES_HIWATPCT/100;
+ pf_syncookie_status.lowat = PFSTATE_HIWAT * PF_SYNCOOKIES_LOWATPCT/100;
+ pf_syncookies_setmode(PF_SYNCOOKIES_NEVER);
+}
+
+int
+pf_syncookies_setmode(u_int8_t mode)
+{
+ if (mode > PF_SYNCOOKIES_MODE_MAX)
+ return (EINVAL);
+
+ if (pf_status.syncookies_mode == mode)
+ return (0);
+
+ pf_status.syncookies_mode = mode;
+ if (pf_status.syncookies_mode == PF_SYNCOOKIES_ALWAYS) {
+ pf_syncookie_newkey();
+ pf_status.syncookies_active = 1;
+ }
+ return (0);
+}
+
+int
+pf_syncookies_setwats(u_int32_t hiwat, u_int32_t lowat)
+{
+ if (lowat > hiwat)
+ return (EINVAL);
+
+ pf_syncookie_status.hiwat = hiwat;
+ pf_syncookie_status.lowat = lowat;
+ return (0);
+}
+
+int
+pf_syncookies_getwats(struct pfioc_synflwats *wats)
+{
+ wats->hiwat = pf_syncookie_status.hiwat;
+ wats->lowat = pf_syncookie_status.lowat;
+ return (0);
+}
+
+int
+pf_synflood_check(struct pf_pdesc *pd)
+{
+ KASSERT (pd->proto == IPPROTO_TCP);
+
+ if (pd->m && (pd->m->m_pkthdr.pf.tag & PF_TAG_SYNCOOKIE_RECREATED))
+ return (0);
+
+ if (pf_status.syncookies_mode != PF_SYNCOOKIES_ADAPTIVE)
+ return (pf_status.syncookies_mode);
+
+ if (!pf_status.syncookies_active &&
+ pf_status.states_halfopen > pf_syncookie_status.hiwat) {
+ pf_syncookie_newkey();
+ pf_status.syncookies_active = 1;
+ DPFPRINTF(LOG_WARNING,
+ "synflood detected, enabling syncookies");
+ pf_status.lcounters[LCNT_SYNFLOODS]++;
+ }
+
+ return (pf_status.syncookies_active);
+}
+
+void
+pf_syncookie_send(struct pf_pdesc *pd, u_short *reason)
+{
+ uint16_t mss, mssdflt;
+ uint32_t iss;
+
+ mssdflt = atomic_load_int(&tcp_mssdflt);
+ mss = max(pf_get_mss(pd, mssdflt), mssdflt);
+ iss = pf_syncookie_generate(pd, mss);
+ pf_send_tcp(NULL, pd->af, pd->dst, pd->src, *pd->dport, *pd->sport,
+ iss, ntohl(pd->hdr.tcp.th_seq) + 1, TH_SYN|TH_ACK, 0, mss,
+ 0, 1, 0, pd->rdomain, reason);
+ pf_status.syncookies_inflight[pf_syncookie_status.oddeven]++;
+ pf_status.lcounters[LCNT_SYNCOOKIES_SENT]++;
+}
+
+uint8_t
+pf_syncookie_validate(struct pf_pdesc *pd)
+{
+ uint32_t hash, ack, seq;
+ union pf_syncookie cookie;
+
+ KASSERT(pd->proto == IPPROTO_TCP);
+
+ seq = ntohl(pd->hdr.tcp.th_seq) - 1;
+ ack = ntohl(pd->hdr.tcp.th_ack) - 1;
+ cookie.cookie = (ack & 0xff) ^ (ack >> 24);
+
+ /* we don't know oddeven before setting the cookie (union) */
+ if (pf_status.syncookies_inflight[cookie.flags.oddeven] == 0)
+ return (0);
+
+ hash = pf_syncookie_mac(pd, cookie, seq);
+ if ((ack & ~0xff) != (hash & ~0xff))
+ return (0);
+
+ pf_status.syncookies_inflight[cookie.flags.oddeven]--;
+ pf_status.lcounters[LCNT_SYNCOOKIES_VALID]++;
+ return (1);
+}
+
+/*
+ * all following functions private
+ */
+void
+pf_syncookie_rotate(void *arg)
+{
+ /* do we want to disable syncookies? */
+ if (pf_status.syncookies_active &&
+ ((pf_status.syncookies_mode == PF_SYNCOOKIES_ADAPTIVE &&
+ pf_status.states_halfopen + pf_status.syncookies_inflight[0] +
+ pf_status.syncookies_inflight[1] < pf_syncookie_status.lowat) ||
+ pf_status.syncookies_mode == PF_SYNCOOKIES_NEVER)) {
+ pf_status.syncookies_active = 0;
+ DPFPRINTF(LOG_WARNING, "syncookies disabled");
+ }
+
+ /* nothing in flight any more? delete keys and return */
+ if (!pf_status.syncookies_active &&
+ pf_status.syncookies_inflight[0] == 0 &&
+ pf_status.syncookies_inflight[1] == 0) {
+ memset(&pf_syncookie_status.key[0], 0,
+ PF_SYNCOOKIE_SECRET_SIZE);
+ memset(&pf_syncookie_status.key[1], 0,
+ PF_SYNCOOKIE_SECRET_SIZE);
+ return;
+ }
+
+ /* new key, including timeout */
+ pf_syncookie_newkey();
+}
+
+void
+pf_syncookie_newkey(void)
+{
+ pf_syncookie_status.oddeven = (pf_syncookie_status.oddeven + 1) & 0x1;
+ pf_status.syncookies_inflight[pf_syncookie_status.oddeven] = 0;
+ arc4random_buf(&pf_syncookie_status.key[pf_syncookie_status.oddeven],
+ PF_SYNCOOKIE_SECRET_SIZE);
+ timeout_add_sec(&pf_syncookie_status.keytimeout,
+ PF_SYNCOOKIE_SECRET_LIFETIME);
+}
+
+/*
+ * Distribution and probability of certain MSS values. Those in between are
+ * rounded down to the next lower one.
+ * [An Analysis of TCP Maximum Segment Sizes, S. Alcock and R. Nelson, 2011]
+ * .2% .3% 5% 7% 7% 20% 15% 45%
+ */
+static int pf_syncookie_msstab[] =
+ { 216, 536, 1200, 1360, 1400, 1440, 1452, 1460 };
+
+/*
+ * Distribution and probability of certain WSCALE values.
+ * The absence of the WSCALE option is encoded with index zero.
+ * [WSCALE values histograms, Allman, 2012]
+ * X 10 10 35 5 6 14 10% by host
+ * X 11 4 5 5 18 49 3% by connections
+ */
+static int pf_syncookie_wstab[] = { 0, 0, 1, 2, 4, 6, 7, 8 };
+
+uint32_t
+pf_syncookie_mac(struct pf_pdesc *pd, union pf_syncookie cookie, uint32_t seq)
+{
+ SIPHASH_CTX ctx;
+ uint32_t siphash[2];
+
+ KASSERT(pd->proto == IPPROTO_TCP);
+
+ SipHash24_Init(&ctx, &pf_syncookie_status.key[cookie.flags.oddeven]);
+
+ switch (pd->af) {
+ case AF_INET:
+ SipHash24_Update(&ctx, pd->src, sizeof(pd->src->v4));
+ SipHash24_Update(&ctx, pd->dst, sizeof(pd->dst->v4));
+ break;
+ case AF_INET6:
+ SipHash24_Update(&ctx, pd->src, sizeof(pd->src->v6));
+ SipHash24_Update(&ctx, pd->dst, sizeof(pd->dst->v6));
+ break;
+ default:
+ panic("unknown address family");
+ }
+
+ SipHash24_Update(&ctx, pd->sport, sizeof(*pd->sport));
+ SipHash24_Update(&ctx, pd->dport, sizeof(*pd->dport));
+ SipHash24_Update(&ctx, &seq, sizeof(seq));
+ SipHash24_Update(&ctx, &cookie, sizeof(cookie));
+ SipHash24_Final((uint8_t *)&siphash, &ctx);
+
+ return (siphash[0] ^ siphash[1]);
+}
+
+uint32_t
+pf_syncookie_generate(struct pf_pdesc *pd, uint16_t mss)
+{
+ uint8_t i, wscale;
+ uint32_t iss, hash;
+ union pf_syncookie cookie;
+
+ cookie.cookie = 0;
+
+ /* map MSS */
+ for (i = nitems(pf_syncookie_msstab) - 1;
+ pf_syncookie_msstab[i] > mss && i > 0; i--)
+ /* nada */;
+ cookie.flags.mss_idx = i;
+
+ /* map WSCALE */
+ wscale = pf_get_wscale(pd);
+ for (i = nitems(pf_syncookie_wstab) - 1;
+ pf_syncookie_wstab[i] > wscale && i > 0; i--)
+ /* nada */;
+ cookie.flags.wscale_idx = i;
+ cookie.flags.sack_ok = 0; /* XXX */
+
+ cookie.flags.oddeven = pf_syncookie_status.oddeven;
+ hash = pf_syncookie_mac(pd, cookie, ntohl(pd->hdr.tcp.th_seq));
+
+ /*
+ * Put the flags into the hash and XOR them to get better ISS number
+ * variance. This doesn't enhance the cryptographic strength and is
+ * done to prevent the 8 cookie bits from showing up directly on the
+ * wire.
+ */
+ iss = hash & ~0xff;
+ iss |= cookie.cookie ^ (hash >> 24);
+
+ return (iss);
+}
+
+struct mbuf *
+pf_syncookie_recreate_syn(struct pf_pdesc *pd, u_short *reason)
+{
+ uint8_t wscale;
+ uint16_t mss;
+ uint32_t ack, seq;
+ union pf_syncookie cookie;
+
+ seq = ntohl(pd->hdr.tcp.th_seq) - 1;
+ ack = ntohl(pd->hdr.tcp.th_ack) - 1;
+ cookie.cookie = (ack & 0xff) ^ (ack >> 24);
+
+ if (cookie.flags.mss_idx >= nitems(pf_syncookie_msstab) ||
+ cookie.flags.wscale_idx >= nitems(pf_syncookie_wstab))
+ return (NULL);
+
+ mss = pf_syncookie_msstab[cookie.flags.mss_idx];
+ wscale = pf_syncookie_wstab[cookie.flags.wscale_idx];
+
+ return (pf_build_tcp(NULL, pd->af, pd->src, pd->dst, *pd->sport,
+ *pd->dport, seq, 0, TH_SYN, wscale, mss, pd->ttl, 0,
+ PF_TAG_SYNCOOKIE_RECREATED, cookie.flags.sack_ok, pd->rdomain,
+ reason));
+}
diff --git a/module/pfsrc/pf_table.c b/module/pfsrc/pf_table.c
new file mode 100644
index 0000000..460309a
--- /dev/null
+++ b/module/pfsrc/pf_table.c
@@ -0,0 +1,2888 @@
+/* PFLINUX port of OpenBSD 8.0 net/pf_table.c — see docs/porting-notes.md */
+#include
+
+#define ACCEPT_FLAGS(flags, oklist) \
+ do { \
+ if ((flags & ~(oklist)) & \
+ PFR_FLAG_ALLMASK) \
+ return (EINVAL); \
+ } while (0)
+
+#define COPYIN(from, to, size, flags) \
+ ((flags & PFR_FLAG_USERIOCTL) ? \
+ copyin((from), (to), (size)) : \
+ (bcopy((from), (to), (size)), 0))
+
+#define COPYOUT(from, to, size, flags) \
+ ((flags & PFR_FLAG_USERIOCTL) ? \
+ copyout((from), (to), (size)) : \
+ (bcopy((from), (to), (size)), 0))
+
+#define YIELD(ok) \
+ do { \
+ if (ok) \
+ sched_pause(preempt); \
+ } while (0)
+
+#define FILLIN_SIN(sin, addr) \
+ do { \
+ (sin)./* PFLINUX sin_len */; \
+ (sin).sin_family = AF_INET; \
+ (sin).sin_addr = (addr); \
+ } while (0)
+
+#define FILLIN_SIN6(sin6, addr) \
+ do { \
+ (sin6).sin6_len = sizeof(sin6); \
+ (sin6).sin6_family = AF_INET6; \
+ (sin6).sin6_addr = (addr); \
+ } while (0)
+
+#define SWAP(type, a1, a2) \
+ do { \
+ type tmp = a1; \
+ a1 = a2; \
+ a2 = tmp; \
+ } while (0)
+
+#define SUNION2PF(su, af) (((af)==AF_INET) ? \
+ (struct pf_addr *)&(su)->sin.sin_addr : \
+ (struct pf_addr *)&(su)->sin6.sin6_addr)
+
+#define AF_BITS(af) (((af)==AF_INET)?32:128)
+#define ADDR_NETWORK(ad) ((ad)->pfra_net < AF_BITS((ad)->pfra_af))
+#define KENTRY_NETWORK(ke) ((ke)->pfrke_net < AF_BITS((ke)->pfrke_af))
+
+#define NO_ADDRESSES (-1)
+#define ENQUEUE_UNMARKED_ONLY (1)
+#define INVERT_NEG_FLAG (1)
+
+struct pfr_walktree {
+ enum pfrw_op {
+ PFRW_MARK,
+ PFRW_SWEEP,
+ PFRW_ENQUEUE,
+ PFRW_GET_ADDRS,
+ PFRW_GET_ASTATS,
+ PFRW_POOL_GET,
+ PFRW_DYNADDR_UPDATE
+ } pfrw_op;
+ union {
+ struct pfr_addr *pfrw1_addr;
+ struct pfr_astats *pfrw1_astats;
+ struct pfr_kentryworkq *pfrw1_workq;
+ struct pfr_kentry *pfrw1_kentry;
+ struct pfi_dynaddr *pfrw1_dyn;
+ } pfrw_1;
+ int pfrw_free;
+ int pfrw_flags;
+};
+#define pfrw_addr pfrw_1.pfrw1_addr
+#define pfrw_astats pfrw_1.pfrw1_astats
+#define pfrw_workq pfrw_1.pfrw1_workq
+#define pfrw_kentry pfrw_1.pfrw1_kentry
+#define pfrw_dyn pfrw_1.pfrw1_dyn
+#define pfrw_cnt pfrw_free
+
+#define senderr(e) do { rv = (e); goto _bad; } while (0)
+
+struct pool pfr_ktable_pl;
+struct pool pfr_kentry_pl[PFRKE_MAX];
+struct pool pfr_kcounters_pl;
+union sockaddr_union pfr_mask;
+struct pf_addr pfr_ffaddr;
+
+int pfr_gcd(int, int);
+void pfr_copyout_addr(struct pfr_addr *,
+ struct pfr_kentry *ke);
+int pfr_validate_addr(struct pfr_addr *);
+void pfr_enqueue_addrs(struct pfr_ktable *,
+ struct pfr_kentryworkq *, int *, int);
+void pfr_mark_addrs(struct pfr_ktable *);
+struct pfr_kentry *pfr_lookup_addr(struct pfr_ktable *,
+ struct pfr_addr *, int);
+struct pfr_kentry *pfr_lookup_kentry(struct pfr_ktable *,
+ struct pfr_kentry *, int);
+struct pfr_kentry *pfr_create_kentry(struct pfr_addr *);
+struct pfr_kentry *pfr_create_kentry_unlocked(struct pfr_addr *, int);
+void pfr_kentry_kif_ref(struct pfr_kentry *);
+void pfr_destroy_kentries(struct pfr_kentryworkq *);
+void pfr_destroy_ioq(struct pfr_kentryworkq *, int);
+void pfr_destroy_kentry(struct pfr_kentry *);
+void pfr_insert_kentries(struct pfr_ktable *,
+ struct pfr_kentryworkq *, time_t);
+void pfr_remove_kentries(struct pfr_ktable *,
+ struct pfr_kentryworkq *);
+void pfr_clstats_kentries(struct pfr_kentryworkq *, time_t,
+ int);
+void pfr_reset_feedback(struct pfr_addr *, int, int);
+void pfr_prepare_network(union sockaddr_union *, int, int);
+int pfr_route_kentry(struct pfr_ktable *,
+ struct pfr_kentry *);
+int pfr_unroute_kentry(struct pfr_ktable *,
+ struct pfr_kentry *);
+int pfr_walktree(struct radix_node *, void *, u_int);
+int pfr_validate_table(struct pfr_table *, int, int);
+int pfr_fix_anchor(char *);
+void pfr_commit_ktable(struct pfr_ktable *, time_t);
+void pfr_insert_ktables(struct pfr_ktableworkq *);
+void pfr_insert_ktable(struct pfr_ktable *);
+void pfr_setflags_ktables(struct pfr_ktableworkq *);
+void pfr_setflags_ktable(struct pfr_ktable *, int);
+void pfr_clstats_ktables(struct pfr_ktableworkq *, time_t,
+ int);
+void pfr_clstats_ktable(struct pfr_ktable *, time_t, int);
+struct pfr_ktable *pfr_create_ktable(struct pfr_table *, time_t, int,
+ int);
+void pfr_destroy_ktables(struct pfr_ktableworkq *, int);
+void pfr_destroy_ktables_aux(struct pfr_ktableworkq *);
+void pfr_destroy_ktable(struct pfr_ktable *, int);
+int pfr_ktable_compare(struct pfr_ktable *,
+ struct pfr_ktable *);
+void pfr_ktable_winfo_update(struct pfr_ktable *,
+ struct pfr_kentry *);
+struct pfr_ktable *pfr_lookup_table(struct pfr_table *);
+void pfr_clean_node_mask(struct pfr_ktable *,
+ struct pfr_kentryworkq *);
+int pfr_table_count(struct pfr_table *, int);
+int pfr_skip_table(struct pfr_table *,
+ struct pfr_ktable *, int);
+struct pfr_kentry *pfr_kentry_byidx(struct pfr_ktable *, int, int);
+int pfr_islinklocal(sa_family_t, struct pf_addr *);
+
+RB_PROTOTYPE(pfr_ktablehead, pfr_ktable, pfrkt_tree, pfr_ktable_compare);
+RB_GENERATE(pfr_ktablehead, pfr_ktable, pfrkt_tree, pfr_ktable_compare);
+
+struct pfr_ktablehead pfr_ktables;
+struct pfr_table pfr_nulltable;
+int pfr_ktable_cnt;
+
+int
+pfr_gcd(int m, int n)
+{
+ int t;
+
+ while (m > 0) {
+ t = n % m;
+ n = m;
+ m = t;
+ }
+ return (n);
+}
+
+void
+pfr_initialize(void)
+{
+ rn_init(sizeof(struct sockaddr_in6));
+
+ pool_init(&pfr_ktable_pl, sizeof(struct pfr_ktable),
+ 0, IPL_SOFTNET, 0, "pfrktable", NULL);
+ pool_init(&pfr_kentry_pl[PFRKE_PLAIN], sizeof(struct pfr_kentry),
+ 0, IPL_SOFTNET, 0, "pfrke_plain", NULL);
+ pool_init(&pfr_kentry_pl[PFRKE_ROUTE], sizeof(struct pfr_kentry_route),
+ 0, IPL_SOFTNET, 0, "pfrke_route", NULL);
+ pool_init(&pfr_kentry_pl[PFRKE_COST], sizeof(struct pfr_kentry_cost),
+ 0, IPL_SOFTNET, 0, "pfrke_cost", NULL);
+ pool_init(&pfr_kcounters_pl, sizeof(struct pfr_kcounters),
+ 0, IPL_SOFTNET, 0, "pfrkcounters", NULL);
+
+ memset(&pfr_ffaddr, 0xff, sizeof(pfr_ffaddr));
+}
+
+int
+pfr_clr_addrs(struct pfr_table *tbl, int *ndel, int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_kentryworkq workq;
+ int error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ if (kt->pfrkt_flags & PFR_TFLAG_CONST)
+ return (EPERM);
+ pfr_enqueue_addrs(kt, &workq, ndel, 0);
+
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_remove_kentries(kt, &workq);
+ if (kt->pfrkt_cnt) {
+ DPFPRINTF(LOG_NOTICE,
+ "pfr_clr_addrs: corruption detected (%d).",
+ kt->pfrkt_cnt);
+ kt->pfrkt_cnt = 0;
+ }
+ }
+ return (0);
+}
+
+void
+pfr_fill_feedback(struct pfr_kentry_all *ke, struct pfr_addr *ad)
+{
+ ad->pfra_type = ke->pfrke_type;
+
+ switch (ke->pfrke_type) {
+ case PFRKE_PLAIN:
+ break;
+ case PFRKE_COST:
+ ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ if (ke->pfrke_rifname[0])
+ strlcpy(ad->pfra_ifname, ke->pfrke_rifname, IFNAMSIZ);
+ break;
+ }
+
+ switch (ke->pfrke_af) {
+ case AF_INET:
+ ad->pfra_ip4addr = ke->pfrke_sa.sin.sin_addr;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ad->pfra_ip6addr = ke->pfrke_sa.sin6.sin6_addr;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ke->pfrke_af);
+ }
+ ad->pfra_weight = ((struct pfr_kentry_cost *)ke)->weight;
+ ad->pfra_af = ke->pfrke_af;
+ ad->pfra_net = ke->pfrke_net;
+ if (ke->pfrke_flags & PFRKE_FLAG_NOT)
+ ad->pfra_not = 1;
+ ad->pfra_fback = ke->pfrke_fb;
+}
+
+int
+pfr_add_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *nadd, int flags)
+{
+ struct pfr_ktable *kt, *tmpkt;
+ struct pfr_kentryworkq workq, ioq;
+ struct pfr_kentry *p, *q, *ke;
+ struct pfr_addr ad;
+ int i, rv, xadd = 0, error;
+ time_t tzero = gettime();
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK);
+ error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ tmpkt = pfr_create_ktable(&pfr_nulltable, 0, 0,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (tmpkt == NULL)
+ return (ENOMEM);
+ SLIST_INIT(&workq);
+ SLIST_INIT(&ioq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ senderr(EFAULT);
+ if (pfr_validate_addr(&ad))
+ senderr(EINVAL);
+
+ ke = pfr_create_kentry_unlocked(&ad, flags);
+ if (ke == NULL)
+ senderr(ENOMEM);
+ ke->pfrke_fb = PFR_FB_NONE;
+ SLIST_INSERT_HEAD(&ioq, ke, pfrke_ioq);
+ }
+
+ NET_LOCK();
+ PF_LOCK();
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE)) {
+ PF_UNLOCK();
+ NET_UNLOCK();
+ senderr(ESRCH);
+ }
+ if (kt->pfrkt_flags & PFR_TFLAG_CONST) {
+ PF_UNLOCK();
+ NET_UNLOCK();
+ senderr(EPERM);
+ }
+ SLIST_FOREACH(ke, &ioq, pfrke_ioq) {
+ pfr_kentry_kif_ref(ke);
+ p = pfr_lookup_kentry(kt, ke, 1);
+ q = pfr_lookup_kentry(tmpkt, ke, 1);
+ if (flags & PFR_FLAG_FEEDBACK) {
+ if (q != NULL)
+ ke->pfrke_fb = PFR_FB_DUPLICATE;
+ else if (p == NULL)
+ ke->pfrke_fb = PFR_FB_ADDED;
+ else if ((p->pfrke_flags & PFRKE_FLAG_NOT) !=
+ (ke->pfrke_flags & PFRKE_FLAG_NOT))
+ ke->pfrke_fb = PFR_FB_CONFLICT;
+ else
+ ke->pfrke_fb = PFR_FB_NONE;
+ }
+ if (p == NULL && q == NULL) {
+ if (pfr_route_kentry(tmpkt, ke)) {
+ /* defer destroy after feedback is processed */
+ ke->pfrke_fb = PFR_FB_NONE;
+ } else {
+ /*
+ * mark entry as added to table, so we won't
+ * kill it with rest of the ioq
+ */
+ ke->pfrke_fb = PFR_FB_ADDED;
+ SLIST_INSERT_HEAD(&workq, ke, pfrke_workq);
+ xadd++;
+ }
+ }
+ }
+ /* remove entries, which we will insert from tmpkt */
+ pfr_clean_node_mask(tmpkt, &workq);
+ if (!(flags & PFR_FLAG_DUMMY))
+ pfr_insert_kentries(kt, &workq, tzero);
+
+ PF_UNLOCK();
+ NET_UNLOCK();
+
+ if (flags & PFR_FLAG_FEEDBACK) {
+ i = 0;
+ while ((ke = SLIST_FIRST(&ioq)) != NULL) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ pfr_fill_feedback((struct pfr_kentry_all *)ke, &ad);
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ senderr(EFAULT);
+ i++;
+ SLIST_REMOVE_HEAD(&ioq, pfrke_ioq);
+ switch (ke->pfrke_fb) {
+ case PFR_FB_CONFLICT:
+ case PFR_FB_DUPLICATE:
+ case PFR_FB_NONE:
+ pfr_destroy_kentry(ke);
+ break;
+ case PFR_FB_ADDED:
+ if (flags & PFR_FLAG_DUMMY)
+ pfr_destroy_kentry(ke);
+ }
+ }
+ } else
+ pfr_destroy_ioq(&ioq, flags);
+
+ if (nadd != NULL)
+ *nadd = xadd;
+
+ pfr_destroy_ktable(tmpkt, 0);
+ return (0);
+_bad:
+ pfr_destroy_ioq(&ioq, flags);
+ if (flags & PFR_FLAG_FEEDBACK)
+ pfr_reset_feedback(addr, size, flags);
+ pfr_destroy_ktable(tmpkt, 0);
+ return (rv);
+}
+
+int
+pfr_del_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *ndel, int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_kentryworkq workq;
+ struct pfr_kentry *p;
+ struct pfr_addr ad;
+ int i, rv, xdel = 0, log = 1, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK);
+ error = pfr_validate_table(tbl, 0, flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ if (kt->pfrkt_flags & PFR_TFLAG_CONST)
+ return (EPERM);
+ /*
+ * there are two algorithms to choose from here.
+ * with:
+ * n: number of addresses to delete
+ * N: number of addresses in the table
+ *
+ * one is O(N) and is better for large 'n'
+ * one is O(n*LOG(N)) and is better for small 'n'
+ *
+ * following code try to decide which one is best.
+ */
+ for (i = kt->pfrkt_cnt; i > 0; i >>= 1)
+ log++;
+ if (size > kt->pfrkt_cnt/log) {
+ /* full table scan */
+ pfr_mark_addrs(kt);
+ } else {
+ /* iterate over addresses to delete */
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ return (EFAULT);
+ if (pfr_validate_addr(&ad))
+ return (EINVAL);
+ p = pfr_lookup_addr(kt, &ad, 1);
+ if (p != NULL)
+ p->pfrke_flags &= ~PFRKE_FLAG_MARK;
+ }
+ }
+ SLIST_INIT(&workq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ senderr(EFAULT);
+ if (pfr_validate_addr(&ad))
+ senderr(EINVAL);
+ p = pfr_lookup_addr(kt, &ad, 1);
+ if (flags & PFR_FLAG_FEEDBACK) {
+ if (p == NULL)
+ ad.pfra_fback = PFR_FB_NONE;
+ else if ((p->pfrke_flags & PFRKE_FLAG_NOT) !=
+ ad.pfra_not)
+ ad.pfra_fback = PFR_FB_CONFLICT;
+ else if (p->pfrke_flags & PFRKE_FLAG_MARK)
+ ad.pfra_fback = PFR_FB_DUPLICATE;
+ else
+ ad.pfra_fback = PFR_FB_DELETED;
+ }
+ if (p != NULL &&
+ (p->pfrke_flags & PFRKE_FLAG_NOT) == ad.pfra_not &&
+ !(p->pfrke_flags & PFRKE_FLAG_MARK)) {
+ p->pfrke_flags |= PFRKE_FLAG_MARK;
+ SLIST_INSERT_HEAD(&workq, p, pfrke_workq);
+ xdel++;
+ }
+ if (flags & PFR_FLAG_FEEDBACK)
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ senderr(EFAULT);
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_remove_kentries(kt, &workq);
+ }
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+_bad:
+ if (flags & PFR_FLAG_FEEDBACK)
+ pfr_reset_feedback(addr, size, flags);
+ return (rv);
+}
+
+int
+pfr_set_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *size2, int *nadd, int *ndel, int *nchange, int flags,
+ u_int32_t ignore_pfrt_flags)
+{
+ struct pfr_ktable *kt, *tmpkt;
+ struct pfr_kentryworkq addq, delq, changeq;
+ struct pfr_kentry *p, *q;
+ struct pfr_addr ad;
+ int i, rv, xadd = 0, xdel = 0, xchange = 0, error;
+ time_t tzero = gettime();
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK);
+ error = pfr_validate_table(tbl, ignore_pfrt_flags, flags &
+ PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ if (kt->pfrkt_flags & PFR_TFLAG_CONST)
+ return (EPERM);
+ tmpkt = pfr_create_ktable(&pfr_nulltable, 0, 0,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (tmpkt == NULL)
+ return (ENOMEM);
+ pfr_mark_addrs(kt);
+ SLIST_INIT(&addq);
+ SLIST_INIT(&delq);
+ SLIST_INIT(&changeq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ senderr(EFAULT);
+ if (pfr_validate_addr(&ad))
+ senderr(EINVAL);
+ ad.pfra_fback = PFR_FB_NONE;
+ p = pfr_lookup_addr(kt, &ad, 1);
+ if (p != NULL) {
+ if (p->pfrke_flags & PFRKE_FLAG_MARK) {
+ ad.pfra_fback = PFR_FB_DUPLICATE;
+ goto _skip;
+ }
+ p->pfrke_flags |= PFRKE_FLAG_MARK;
+ if ((p->pfrke_flags & PFRKE_FLAG_NOT) != ad.pfra_not) {
+ SLIST_INSERT_HEAD(&changeq, p, pfrke_workq);
+ ad.pfra_fback = PFR_FB_CHANGED;
+ xchange++;
+ }
+ } else {
+ q = pfr_lookup_addr(tmpkt, &ad, 1);
+ if (q != NULL) {
+ ad.pfra_fback = PFR_FB_DUPLICATE;
+ goto _skip;
+ }
+ p = pfr_create_kentry(&ad);
+ if (p == NULL)
+ senderr(ENOMEM);
+ if (pfr_route_kentry(tmpkt, p)) {
+ pfr_destroy_kentry(p);
+ ad.pfra_fback = PFR_FB_NONE;
+ goto _skip;
+ }
+ SLIST_INSERT_HEAD(&addq, p, pfrke_workq);
+ ad.pfra_fback = PFR_FB_ADDED;
+ xadd++;
+ if (p->pfrke_type == PFRKE_COST)
+ kt->pfrkt_refcntcost++;
+ pfr_ktable_winfo_update(kt, p);
+ }
+_skip:
+ if (flags & PFR_FLAG_FEEDBACK)
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ senderr(EFAULT);
+ }
+ pfr_enqueue_addrs(kt, &delq, &xdel, ENQUEUE_UNMARKED_ONLY);
+ if ((flags & PFR_FLAG_FEEDBACK) && *size2) {
+ if (*size2 < size+xdel) {
+ *size2 = size+xdel;
+ senderr(0);
+ }
+ i = 0;
+ SLIST_FOREACH(p, &delq, pfrke_workq) {
+ pfr_copyout_addr(&ad, p);
+ ad.pfra_fback = PFR_FB_DELETED;
+ if (COPYOUT(&ad, addr+size+i, sizeof(ad), flags))
+ senderr(EFAULT);
+ i++;
+ }
+ }
+ pfr_clean_node_mask(tmpkt, &addq);
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_insert_kentries(kt, &addq, tzero);
+ pfr_remove_kentries(kt, &delq);
+ pfr_clstats_kentries(&changeq, tzero, INVERT_NEG_FLAG);
+ } else
+ pfr_destroy_kentries(&addq);
+ if (nadd != NULL)
+ *nadd = xadd;
+ if (ndel != NULL)
+ *ndel = xdel;
+ if (nchange != NULL)
+ *nchange = xchange;
+ if ((flags & PFR_FLAG_FEEDBACK) && size2)
+ *size2 = size+xdel;
+ pfr_destroy_ktable(tmpkt, 0);
+ return (0);
+_bad:
+ pfr_clean_node_mask(tmpkt, &addq);
+ pfr_destroy_kentries(&addq);
+ if (flags & PFR_FLAG_FEEDBACK)
+ pfr_reset_feedback(addr, size, flags);
+ pfr_destroy_ktable(tmpkt, 0);
+ return (rv);
+}
+
+int
+pfr_tst_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *nmatch, int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_kentry *p;
+ struct pfr_addr ad;
+ int i, xmatch = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_REPLACE);
+ error = pfr_validate_table(tbl, 0, 0);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ return (EFAULT);
+ if (pfr_validate_addr(&ad))
+ return (EINVAL);
+ if (ADDR_NETWORK(&ad))
+ return (EINVAL);
+ p = pfr_lookup_addr(kt, &ad, 0);
+ if (flags & PFR_FLAG_REPLACE)
+ pfr_copyout_addr(&ad, p);
+ ad.pfra_fback = (p == NULL) ? PFR_FB_NONE :
+ ((p->pfrke_flags & PFRKE_FLAG_NOT) ?
+ PFR_FB_NOTMATCH : PFR_FB_MATCH);
+ if (p != NULL && !(p->pfrke_flags & PFRKE_FLAG_NOT))
+ xmatch++;
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ return (EFAULT);
+ }
+ if (nmatch != NULL)
+ *nmatch = xmatch;
+ return (0);
+}
+
+int
+pfr_get_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int *size,
+ int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_walktree w;
+ int rv, error;
+
+ ACCEPT_FLAGS(flags, 0);
+ error = pfr_validate_table(tbl, 0, 0);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ if (kt->pfrkt_cnt > *size) {
+ *size = kt->pfrkt_cnt;
+ return (0);
+ }
+
+ bzero(&w, sizeof(w));
+ w.pfrw_op = PFRW_GET_ADDRS;
+ w.pfrw_addr = addr;
+ w.pfrw_free = kt->pfrkt_cnt;
+ w.pfrw_flags = flags;
+ rv = rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w);
+ if (!rv)
+ rv = rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w);
+ if (rv)
+ return (rv);
+
+ if (w.pfrw_free) {
+ DPFPRINTF(LOG_ERR,
+ "pfr_get_addrs: corruption detected (%d)", w.pfrw_free);
+ return (ENOTTY);
+ }
+ *size = kt->pfrkt_cnt;
+ return (0);
+}
+
+int
+pfr_get_astats(struct pfr_table *tbl, struct pfr_astats *addr, int *size,
+ int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_walktree w;
+ struct pfr_kentryworkq workq;
+ int rv, error;
+ time_t tzero = gettime();
+
+ error = pfr_validate_table(tbl, 0, 0);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ if (kt->pfrkt_cnt > *size) {
+ *size = kt->pfrkt_cnt;
+ return (0);
+ }
+
+ bzero(&w, sizeof(w));
+ w.pfrw_op = PFRW_GET_ASTATS;
+ w.pfrw_astats = addr;
+ w.pfrw_free = kt->pfrkt_cnt;
+ w.pfrw_flags = flags;
+ rv = rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w);
+ if (!rv)
+ rv = rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w);
+ if (!rv && (flags & PFR_FLAG_CLSTATS)) {
+ pfr_enqueue_addrs(kt, &workq, NULL, 0);
+ pfr_clstats_kentries(&workq, tzero, 0);
+ }
+ if (rv)
+ return (rv);
+
+ if (w.pfrw_free) {
+ DPFPRINTF(LOG_ERR,
+ "pfr_get_astats: corruption detected (%d)", w.pfrw_free);
+ return (ENOTTY);
+ }
+ *size = kt->pfrkt_cnt;
+ return (0);
+}
+
+int
+pfr_clr_astats(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *nzero, int flags)
+{
+ struct pfr_ktable *kt;
+ struct pfr_kentryworkq workq;
+ struct pfr_kentry *p;
+ struct pfr_addr ad;
+ int i, rv, xzero = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_FEEDBACK);
+ error = pfr_validate_table(tbl, 0, 0);
+ if (error)
+ return (error);
+ kt = pfr_lookup_table(tbl);
+ if (kt == NULL || !(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (ESRCH);
+ SLIST_INIT(&workq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ senderr(EFAULT);
+ if (pfr_validate_addr(&ad))
+ senderr(EINVAL);
+ p = pfr_lookup_addr(kt, &ad, 1);
+ if (flags & PFR_FLAG_FEEDBACK) {
+ ad.pfra_fback = (p != NULL) ?
+ PFR_FB_CLEARED : PFR_FB_NONE;
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ senderr(EFAULT);
+ }
+ if (p != NULL) {
+ SLIST_INSERT_HEAD(&workq, p, pfrke_workq);
+ xzero++;
+ }
+ }
+
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_clstats_kentries(&workq, gettime(), 0);
+ }
+ if (nzero != NULL)
+ *nzero = xzero;
+ return (0);
+_bad:
+ if (flags & PFR_FLAG_FEEDBACK)
+ pfr_reset_feedback(addr, size, flags);
+ return (rv);
+}
+
+int
+pfr_validate_addr(struct pfr_addr *ad)
+{
+ int i;
+
+ switch (ad->pfra_af) {
+ case AF_INET:
+ if (ad->pfra_net > 32)
+ return (-1);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (ad->pfra_net > 128)
+ return (-1);
+ break;
+#endif /* INET6 */
+ default:
+ return (-1);
+ }
+ if (ad->pfra_net < 128 &&
+ (((caddr_t)ad)[ad->pfra_net/8] & (0xFF >> (ad->pfra_net%8))))
+ return (-1);
+ for (i = (ad->pfra_net+7)/8; i < sizeof(ad->pfra_u); i++)
+ if (((caddr_t)ad)[i])
+ return (-1);
+ if (ad->pfra_not && ad->pfra_not != 1)
+ return (-1);
+ if (ad->pfra_fback != PFR_FB_NONE)
+ return (-1);
+ if (ad->pfra_type >= PFRKE_MAX)
+ return (-1);
+ return (0);
+}
+
+void
+pfr_enqueue_addrs(struct pfr_ktable *kt, struct pfr_kentryworkq *workq,
+ int *naddr, int sweep)
+{
+ struct pfr_walktree w;
+
+ SLIST_INIT(workq);
+ bzero(&w, sizeof(w));
+ w.pfrw_op = sweep ? PFRW_SWEEP : PFRW_ENQUEUE;
+ w.pfrw_workq = workq;
+ if (kt->pfrkt_ip4 != NULL)
+ if (rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w))
+ DPFPRINTF(LOG_ERR,
+ "pfr_enqueue_addrs: IPv4 walktree failed.");
+ if (kt->pfrkt_ip6 != NULL)
+ if (rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w))
+ DPFPRINTF(LOG_ERR,
+ "pfr_enqueue_addrs: IPv6 walktree failed.");
+ if (naddr != NULL)
+ *naddr = w.pfrw_cnt;
+}
+
+void
+pfr_mark_addrs(struct pfr_ktable *kt)
+{
+ struct pfr_walktree w;
+
+ bzero(&w, sizeof(w));
+ w.pfrw_op = PFRW_MARK;
+ if (rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w))
+ DPFPRINTF(LOG_ERR,
+ "pfr_mark_addrs: IPv4 walktree failed.");
+ if (rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w))
+ DPFPRINTF(LOG_ERR,
+ "pfr_mark_addrs: IPv6 walktree failed.");
+}
+
+
+struct pfr_kentry *
+pfr_lookup_addr(struct pfr_ktable *kt, struct pfr_addr *ad, int exact)
+{
+ union sockaddr_union sa, mask;
+ struct radix_node_head *head;
+ struct pfr_kentry *ke;
+
+ bzero(&sa, sizeof(sa));
+ switch (ad->pfra_af) {
+ case AF_INET:
+ FILLIN_SIN(sa.sin, ad->pfra_ip4addr);
+ head = kt->pfrkt_ip4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ FILLIN_SIN6(sa.sin6, ad->pfra_ip6addr);
+ head = kt->pfrkt_ip6;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ad->pfra_af);
+ }
+ if (ADDR_NETWORK(ad)) {
+ pfr_prepare_network(&mask, ad->pfra_af, ad->pfra_net);
+ ke = (struct pfr_kentry *)rn_lookup(&sa, &mask, head);
+ } else {
+ ke = (struct pfr_kentry *)rn_match(&sa, head);
+ if (exact && ke && KENTRY_NETWORK(ke))
+ ke = NULL;
+ }
+ return (ke);
+}
+
+struct pfr_kentry *
+pfr_lookup_kentry(struct pfr_ktable *kt, struct pfr_kentry *key, int exact)
+{
+ union sockaddr_union mask;
+ struct radix_node_head *head;
+ struct pfr_kentry *ke;
+
+ switch (key->pfrke_af) {
+ case AF_INET:
+ head = kt->pfrkt_ip4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ head = kt->pfrkt_ip6;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(key->pfrke_af);
+ }
+ if (KENTRY_NETWORK(key)) {
+ pfr_prepare_network(&mask, key->pfrke_af, key->pfrke_net);
+ ke = (struct pfr_kentry *)rn_lookup(&key->pfrke_sa, &mask,
+ head);
+ } else {
+ ke = (struct pfr_kentry *)rn_match(&key->pfrke_sa, head);
+ if (exact && ke && KENTRY_NETWORK(ke))
+ ke = NULL;
+ }
+ return (ke);
+}
+
+struct pfr_kentry *
+pfr_create_kentry(struct pfr_addr *ad)
+{
+ struct pfr_kentry_all *ke;
+
+ if (ad->pfra_type >= PFRKE_MAX)
+ panic("unknown pfra_type %d", ad->pfra_type);
+
+ ke = pool_get(&pfr_kentry_pl[ad->pfra_type], PR_NOWAIT | PR_ZERO);
+ if (ke == NULL)
+ return (NULL);
+
+ ke->pfrke_type = ad->pfra_type;
+
+ /* set weight allowing implicit weights */
+ if (ad->pfra_weight == 0)
+ ad->pfra_weight = 1;
+
+ switch (ke->pfrke_type) {
+ case PFRKE_PLAIN:
+ break;
+ case PFRKE_COST:
+ ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ if (ad->pfra_ifname[0])
+ ke->pfrke_rkif = pfi_kif_get(ad->pfra_ifname, NULL);
+ if (ke->pfrke_rkif)
+ pfi_kif_ref(ke->pfrke_rkif, PFI_KIF_REF_ROUTE);
+ break;
+ }
+
+ switch (ad->pfra_af) {
+ case AF_INET:
+ FILLIN_SIN(ke->pfrke_sa.sin, ad->pfra_ip4addr);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ FILLIN_SIN6(ke->pfrke_sa.sin6, ad->pfra_ip6addr);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ad->pfra_af);
+ }
+ ke->pfrke_af = ad->pfra_af;
+ ke->pfrke_net = ad->pfra_net;
+ if (ad->pfra_not)
+ ke->pfrke_flags |= PFRKE_FLAG_NOT;
+ return ((struct pfr_kentry *)ke);
+}
+
+struct pfr_kentry *
+pfr_create_kentry_unlocked(struct pfr_addr *ad, int flags)
+{
+ struct pfr_kentry_all *ke;
+ int mflags = PR_ZERO;
+
+ if (ad->pfra_type >= PFRKE_MAX)
+ panic("unknown pfra_type %d", ad->pfra_type);
+
+ if (flags & PFR_FLAG_USERIOCTL)
+ mflags |= PR_WAITOK;
+ else
+ mflags |= PR_NOWAIT;
+
+ ke = pool_get(&pfr_kentry_pl[ad->pfra_type], mflags);
+ if (ke == NULL)
+ return (NULL);
+
+ ke->pfrke_type = ad->pfra_type;
+
+ /* set weight allowing implicit weights */
+ if (ad->pfra_weight == 0)
+ ad->pfra_weight = 1;
+
+ switch (ke->pfrke_type) {
+ case PFRKE_PLAIN:
+ break;
+ case PFRKE_COST:
+ ((struct pfr_kentry_cost *)ke)->weight = ad->pfra_weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ if (ad->pfra_ifname[0])
+ (void) strlcpy(ke->pfrke_rifname, ad->pfra_ifname,
+ IFNAMSIZ);
+ break;
+ }
+
+ switch (ad->pfra_af) {
+ case AF_INET:
+ FILLIN_SIN(ke->pfrke_sa.sin, ad->pfra_ip4addr);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ FILLIN_SIN6(ke->pfrke_sa.sin6, ad->pfra_ip6addr);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ad->pfra_af);
+ }
+ ke->pfrke_af = ad->pfra_af;
+ ke->pfrke_net = ad->pfra_net;
+ if (ad->pfra_not)
+ ke->pfrke_flags |= PFRKE_FLAG_NOT;
+ return ((struct pfr_kentry *)ke);
+}
+
+void
+pfr_kentry_kif_ref(struct pfr_kentry *ke_all)
+{
+ struct pfr_kentry_all *ke = (struct pfr_kentry_all *)ke_all;
+
+ NET_ASSERT_LOCKED();
+ switch (ke->pfrke_type) {
+ case PFRKE_PLAIN:
+ break;
+ case PFRKE_COST:
+ case PFRKE_ROUTE:
+ if (ke->pfrke_rifname[0])
+ ke->pfrke_rkif = pfi_kif_get(ke->pfrke_rifname, NULL);
+ if (ke->pfrke_rkif)
+ pfi_kif_ref(ke->pfrke_rkif, PFI_KIF_REF_ROUTE);
+ break;
+ }
+}
+
+void
+pfr_destroy_kentries(struct pfr_kentryworkq *workq)
+{
+ struct pfr_kentry *p;
+
+ while ((p = SLIST_FIRST(workq)) != NULL) {
+ YIELD(1);
+ SLIST_REMOVE_HEAD(workq, pfrke_workq);
+ pfr_destroy_kentry(p);
+ }
+}
+
+void
+pfr_destroy_ioq(struct pfr_kentryworkq *ioq, int flags)
+{
+ struct pfr_kentry *p;
+
+ while ((p = SLIST_FIRST(ioq)) != NULL) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ SLIST_REMOVE_HEAD(ioq, pfrke_ioq);
+ /*
+ * we destroy only those entries, which did not make it to
+ * table
+ */
+ if ((p->pfrke_fb != PFR_FB_ADDED) || (flags & PFR_FLAG_DUMMY))
+ pfr_destroy_kentry(p);
+ }
+}
+
+void
+pfr_destroy_kentry(struct pfr_kentry *ke)
+{
+ if (ke->pfrke_counters)
+ pool_put(&pfr_kcounters_pl, ke->pfrke_counters);
+ if (ke->pfrke_type == PFRKE_COST || ke->pfrke_type == PFRKE_ROUTE)
+ pfi_kif_unref(((struct pfr_kentry_all *)ke)->pfrke_rkif,
+ PFI_KIF_REF_ROUTE);
+ pool_put(&pfr_kentry_pl[ke->pfrke_type], ke);
+}
+
+void
+pfr_insert_kentries(struct pfr_ktable *kt,
+ struct pfr_kentryworkq *workq, time_t tzero)
+{
+ struct pfr_kentry *p;
+ int rv, n = 0;
+
+ SLIST_FOREACH(p, workq, pfrke_workq) {
+ rv = pfr_route_kentry(kt, p);
+ if (rv) {
+ DPFPRINTF(LOG_ERR,
+ "pfr_insert_kentries: cannot route entry "
+ "(code=%d).", rv);
+ break;
+ }
+ p->pfrke_tzero = tzero;
+ ++n;
+ if (p->pfrke_type == PFRKE_COST)
+ kt->pfrkt_refcntcost++;
+ pfr_ktable_winfo_update(kt, p);
+ YIELD(1);
+ }
+ kt->pfrkt_cnt += n;
+}
+
+int
+pfr_insert_kentry(struct pfr_ktable *kt, struct pfr_addr *ad, time_t tzero)
+{
+ struct pfr_kentry *p;
+ int rv;
+
+ PF_ASSERT_LOCKED();
+
+ p = pfr_lookup_addr(kt, ad, 1);
+ if (p != NULL)
+ return (0);
+ p = pfr_create_kentry(ad);
+ if (p == NULL)
+ return (EINVAL);
+
+ rv = pfr_route_kentry(kt, p);
+ if (rv)
+ return (rv);
+
+ p->pfrke_tzero = tzero;
+ if (p->pfrke_type == PFRKE_COST)
+ kt->pfrkt_refcntcost++;
+ kt->pfrkt_cnt++;
+ pfr_ktable_winfo_update(kt, p);
+
+ return (0);
+}
+
+int
+pfr_remove_kentry(struct pfr_ktable *kt, struct pfr_addr *ad)
+{
+ struct pfr_kentryworkq workq = SLIST_HEAD_INITIALIZER(workq);
+ struct pfr_kentry *p;
+
+ p = pfr_lookup_addr(kt, ad, 1);
+ if (p == NULL || ISSET(p->pfrke_flags, PFRKE_FLAG_NOT))
+ return (ESRCH);
+
+ if (ISSET(p->pfrke_flags, PFRKE_FLAG_MARK))
+ return (0);
+
+ SET(p->pfrke_flags, PFRKE_FLAG_MARK);
+ SLIST_INSERT_HEAD(&workq, p, pfrke_workq);
+ pfr_remove_kentries(kt, &workq);
+
+ return (0);
+}
+
+void
+pfr_remove_kentries(struct pfr_ktable *kt,
+ struct pfr_kentryworkq *workq)
+{
+ struct pfr_kentry *p;
+ struct pfr_kentryworkq addrq;
+ int n = 0;
+
+ SLIST_FOREACH(p, workq, pfrke_workq) {
+ pfr_unroute_kentry(kt, p);
+ ++n;
+ YIELD(1);
+ if (p->pfrke_type == PFRKE_COST)
+ kt->pfrkt_refcntcost--;
+ }
+ kt->pfrkt_cnt -= n;
+ pfr_destroy_kentries(workq);
+
+ /* update maxweight and gcd for load balancing */
+ if (kt->pfrkt_refcntcost > 0) {
+ kt->pfrkt_gcdweight = 0;
+ kt->pfrkt_maxweight = 1;
+ pfr_enqueue_addrs(kt, &addrq, NULL, 0);
+ SLIST_FOREACH(p, &addrq, pfrke_workq)
+ pfr_ktable_winfo_update(kt, p);
+ }
+}
+
+void
+pfr_clean_node_mask(struct pfr_ktable *kt,
+ struct pfr_kentryworkq *workq)
+{
+ struct pfr_kentry *p;
+
+ SLIST_FOREACH(p, workq, pfrke_workq) {
+ pfr_unroute_kentry(kt, p);
+ }
+}
+
+void
+pfr_clstats_kentries(struct pfr_kentryworkq *workq, time_t tzero, int negchange)
+{
+ struct pfr_kentry *p;
+
+ SLIST_FOREACH(p, workq, pfrke_workq) {
+ if (negchange)
+ p->pfrke_flags ^= PFRKE_FLAG_NOT;
+ if (p->pfrke_counters) {
+ pool_put(&pfr_kcounters_pl, p->pfrke_counters);
+ p->pfrke_counters = NULL;
+ }
+ p->pfrke_tzero = tzero;
+ }
+}
+
+void
+pfr_reset_feedback(struct pfr_addr *addr, int size, int flags)
+{
+ struct pfr_addr ad;
+ int i;
+
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ break;
+ ad.pfra_fback = PFR_FB_NONE;
+ if (COPYOUT(&ad, addr+i, sizeof(ad), flags))
+ break;
+ }
+}
+
+void
+pfr_prepare_network(union sockaddr_union *sa, int af, int net)
+{
+#ifdef INET6
+ int i;
+#endif /* INET6 */
+
+ bzero(sa, sizeof(*sa));
+ switch (af) {
+ case AF_INET:
+ sa->sin./* PFLINUX sin_len */;
+ sa->sin.sin_family = AF_INET;
+ sa->sin.sin_addr.s_addr = net ? htonl(-1 << (32-net)) : 0;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ sa->sin6.sin6_len = sizeof(sa->sin6);
+ sa->sin6.sin6_family = AF_INET6;
+ for (i = 0; i < 4; i++) {
+ if (net <= 32) {
+ sa->sin6.sin6_addr.s6_addr32[i] =
+ net ? htonl(-1 << (32-net)) : 0;
+ break;
+ }
+ sa->sin6.sin6_addr.s6_addr32[i] = 0xFFFFFFFF;
+ net -= 32;
+ }
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+}
+
+int
+pfr_route_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke)
+{
+ union sockaddr_union mask;
+ struct radix_node *rn;
+ struct radix_node_head *head;
+
+ bzero(ke->pfrke_node, sizeof(ke->pfrke_node));
+ switch (ke->pfrke_af) {
+ case AF_INET:
+ head = kt->pfrkt_ip4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ head = kt->pfrkt_ip6;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ke->pfrke_af);
+ }
+
+ if (KENTRY_NETWORK(ke)) {
+ pfr_prepare_network(&mask, ke->pfrke_af, ke->pfrke_net);
+ rn = rn_addroute(&ke->pfrke_sa, &mask, head, ke->pfrke_node, 0);
+ } else
+ rn = rn_addroute(&ke->pfrke_sa, NULL, head, ke->pfrke_node, 0);
+
+ return (rn == NULL ? -1 : 0);
+}
+
+int
+pfr_unroute_kentry(struct pfr_ktable *kt, struct pfr_kentry *ke)
+{
+ union sockaddr_union mask;
+ struct radix_node *rn;
+ struct radix_node_head *head;
+
+ switch (ke->pfrke_af) {
+ case AF_INET:
+ head = kt->pfrkt_ip4;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ head = kt->pfrkt_ip6;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ke->pfrke_af);
+ }
+
+ if (KENTRY_NETWORK(ke)) {
+ pfr_prepare_network(&mask, ke->pfrke_af, ke->pfrke_net);
+ rn = rn_delete(&ke->pfrke_sa, &mask, head, NULL);
+ } else
+ rn = rn_delete(&ke->pfrke_sa, NULL, head, NULL);
+
+ if (rn == NULL) {
+ DPFPRINTF(LOG_ERR, "pfr_unroute_kentry: delete failed.\n");
+ return (-1);
+ }
+ return (0);
+}
+
+void
+pfr_copyout_addr(struct pfr_addr *ad, struct pfr_kentry *ke)
+{
+ bzero(ad, sizeof(*ad));
+ if (ke == NULL)
+ return;
+ ad->pfra_af = ke->pfrke_af;
+ ad->pfra_net = ke->pfrke_net;
+ ad->pfra_type = ke->pfrke_type;
+ if (ke->pfrke_flags & PFRKE_FLAG_NOT)
+ ad->pfra_not = 1;
+
+ switch (ad->pfra_af) {
+ case AF_INET:
+ ad->pfra_ip4addr = ke->pfrke_sa.sin.sin_addr;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ad->pfra_ip6addr = ke->pfrke_sa.sin6.sin6_addr;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ad->pfra_af);
+ }
+ if (ke->pfrke_counters != NULL)
+ ad->pfra_states = ke->pfrke_counters->states;
+ switch (ke->pfrke_type) {
+ case PFRKE_COST:
+ ad->pfra_weight = ((struct pfr_kentry_cost *)ke)->weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ if (((struct pfr_kentry_route *)ke)->kif != NULL)
+ strlcpy(ad->pfra_ifname,
+ ((struct pfr_kentry_route *)ke)->kif->pfik_name,
+ IFNAMSIZ);
+ break;
+ default:
+ break;
+ }
+}
+
+int
+pfr_walktree(struct radix_node *rn, void *arg, u_int id)
+{
+ struct pfr_kentry *ke = (struct pfr_kentry *)rn;
+ struct pfr_walktree *w = arg;
+ union sockaddr_union mask;
+ int flags = w->pfrw_flags;
+
+ switch (w->pfrw_op) {
+ case PFRW_MARK:
+ ke->pfrke_flags &= ~PFRKE_FLAG_MARK;
+ break;
+ case PFRW_SWEEP:
+ if (ke->pfrke_flags & PFRKE_FLAG_MARK)
+ break;
+ /* FALLTHROUGH */
+ case PFRW_ENQUEUE:
+ SLIST_INSERT_HEAD(w->pfrw_workq, ke, pfrke_workq);
+ w->pfrw_cnt++;
+ break;
+ case PFRW_GET_ADDRS:
+ if (w->pfrw_free-- > 0) {
+ struct pfr_addr ad;
+
+ pfr_copyout_addr(&ad, ke);
+ if (copyout(&ad, w->pfrw_addr, sizeof(ad)))
+ return (EFAULT);
+ w->pfrw_addr++;
+ }
+ break;
+ case PFRW_GET_ASTATS:
+ if (w->pfrw_free-- > 0) {
+ struct pfr_astats as;
+
+ pfr_copyout_addr(&as.pfras_a, ke);
+
+ if (ke->pfrke_counters) {
+ bcopy(ke->pfrke_counters->pfrkc_packets,
+ as.pfras_packets, sizeof(as.pfras_packets));
+ bcopy(ke->pfrke_counters->pfrkc_bytes,
+ as.pfras_bytes, sizeof(as.pfras_bytes));
+ } else {
+ bzero(as.pfras_packets,
+ sizeof(as.pfras_packets));
+ bzero(as.pfras_bytes, sizeof(as.pfras_bytes));
+ as.pfras_a.pfra_fback = PFR_FB_NOCOUNT;
+ }
+ as.pfras_tzero = ke->pfrke_tzero;
+
+ if (COPYOUT(&as, w->pfrw_astats, sizeof(as), flags))
+ return (EFAULT);
+ w->pfrw_astats++;
+ }
+ break;
+ case PFRW_POOL_GET:
+ if (ke->pfrke_flags & PFRKE_FLAG_NOT)
+ break; /* negative entries are ignored */
+ if (!w->pfrw_cnt--) {
+ w->pfrw_kentry = ke;
+ return (1); /* finish search */
+ }
+ break;
+ case PFRW_DYNADDR_UPDATE:
+ switch (ke->pfrke_af) {
+ case AF_INET:
+ if (w->pfrw_dyn->pfid_acnt4++ > 0)
+ break;
+ pfr_prepare_network(&mask, AF_INET, ke->pfrke_net);
+ w->pfrw_dyn->pfid_addr4 = *SUNION2PF(
+ &ke->pfrke_sa, AF_INET);
+ w->pfrw_dyn->pfid_mask4 = *SUNION2PF(
+ &mask, AF_INET);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ if (w->pfrw_dyn->pfid_acnt6++ > 0)
+ break;
+ pfr_prepare_network(&mask, AF_INET6, ke->pfrke_net);
+ w->pfrw_dyn->pfid_addr6 = *SUNION2PF(
+ &ke->pfrke_sa, AF_INET6);
+ w->pfrw_dyn->pfid_mask6 = *SUNION2PF(
+ &mask, AF_INET6);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(ke->pfrke_af);
+ }
+ break;
+ }
+ return (0);
+}
+
+int
+pfr_clr_tables(struct pfr_table *filter, int *ndel, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p;
+ int xdel = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ALLRSETS);
+ error = pfr_fix_anchor(filter->pfrt_anchor);
+ if (error)
+ return (error);
+ if (pfr_table_count(filter, flags) < 0)
+ return (ENOENT);
+
+ SLIST_INIT(&workq);
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (pfr_skip_table(filter, p, flags))
+ continue;
+ if (!strcmp(p->pfrkt_anchor, PF_RESERVED_ANCHOR))
+ continue;
+ if (!(p->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ continue;
+ p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_ACTIVE;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ xdel++;
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_setflags_ktables(&workq);
+ }
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+}
+
+int
+pfr_add_tables(struct pfr_table *tbl, int size, int *nadd, int flags)
+{
+ struct pfr_ktableworkq addq, changeq, auxq;
+ struct pfr_ktable *p, *q, *r, *n, *w, key;
+ int i, rv, xadd = 0, error;
+ time_t tzero = gettime();
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ SLIST_INIT(&addq);
+ SLIST_INIT(&changeq);
+ SLIST_INIT(&auxq);
+ /* pre-allocate all memory outside of locks */
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags))
+ senderr(EFAULT);
+ error = pfr_validate_table(&key.pfrkt_t, PFR_TFLAG_USRMASK,
+ flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ senderr(EINVAL);
+ key.pfrkt_flags |= PFR_TFLAG_ACTIVE;
+ p = pfr_create_ktable(&key.pfrkt_t, tzero, 0,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (p == NULL)
+ senderr(ENOMEM);
+
+ /*
+ * Note: we also pre-allocate a root table here. We keep it
+ * at ->pfrkt_root, which we must not forget about.
+ */
+ key.pfrkt_flags = 0;
+ memset(key.pfrkt_anchor, 0, sizeof(key.pfrkt_anchor));
+ p->pfrkt_root = pfr_create_ktable(&key.pfrkt_t, 0, 0,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (p->pfrkt_root == NULL) {
+ pfr_destroy_ktable(p, 0);
+ senderr(ENOMEM);
+ }
+
+ SLIST_FOREACH(q, &auxq, pfrkt_workq) {
+ if (!pfr_ktable_compare(p, q)) {
+ /*
+ * We need no lock here, because `p` is empty,
+ * there are no rules or shadow tables
+ * attached.
+ */
+ pfr_destroy_ktable(p->pfrkt_root, 0);
+ p->pfrkt_root = NULL;
+ pfr_destroy_ktable(p, 0);
+ p = NULL;
+ break;
+ }
+ }
+ if (q != NULL)
+ continue;
+
+ SLIST_INSERT_HEAD(&auxq, p, pfrkt_workq);
+ }
+
+ /*
+ * auxq contains freshly allocated tables with no dups.
+ * also note there are no rulesets attached, because
+ * the attach operation requires PF_LOCK().
+ */
+ NET_LOCK();
+ PF_LOCK();
+ SLIST_FOREACH_SAFE(n, &auxq, pfrkt_workq, w) {
+ p = RB_FIND(pfr_ktablehead, &pfr_ktables, n);
+ if (p == NULL) {
+ SLIST_REMOVE(&auxq, n, pfr_ktable, pfrkt_workq);
+ SLIST_INSERT_HEAD(&addq, n, pfrkt_workq);
+ xadd++;
+ } else if (!(flags & PFR_FLAG_DUMMY) &&
+ !(p->pfrkt_flags & PFR_TFLAG_ACTIVE)) {
+ p->pfrkt_nflags =
+ (p->pfrkt_flags & ~PFR_TFLAG_USRMASK) |
+ (n->pfrkt_flags & PFR_TFLAG_USRMASK) |
+ PFR_TFLAG_ACTIVE;
+ SLIST_INSERT_HEAD(&changeq, p, pfrkt_workq);
+ }
+ }
+
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ /*
+ * addq contains tables we have to insert and attach rules to
+ * them
+ *
+ * changeq contains tables we need to update
+ *
+ * auxq contains pre-allocated tables, we won't use and we must
+ * free them
+ */
+ SLIST_FOREACH_SAFE(p, &addq, pfrkt_workq, w) {
+ p->pfrkt_rs = pf_find_or_create_ruleset(
+ p->pfrkt_anchor);
+ if (p->pfrkt_rs == NULL) {
+ xadd--;
+ SLIST_REMOVE(&addq, p, pfr_ktable, pfrkt_workq);
+ SLIST_INSERT_HEAD(&auxq, p, pfrkt_workq);
+ continue;
+ }
+ p->pfrkt_rs->tables++;
+
+ if (!p->pfrkt_anchor[0]) {
+ q = p->pfrkt_root;
+ p->pfrkt_root = NULL;
+ SLIST_INSERT_HEAD(&auxq, q, pfrkt_workq);
+ continue;
+ }
+
+ /* use pre-allocated root table as a key */
+ q = p->pfrkt_root;
+ p->pfrkt_root = NULL;
+ r = RB_FIND(pfr_ktablehead, &pfr_ktables, q);
+ if (r != NULL) {
+ p->pfrkt_root = r;
+ SLIST_INSERT_HEAD(&auxq, q, pfrkt_workq);
+ continue;
+ }
+ /*
+ * there is a chance we could create root table in
+ * earlier iteration. such table may exist in addq only
+ * then.
+ */
+ SLIST_FOREACH(r, &addq, pfrkt_workq) {
+ if (!pfr_ktable_compare(r, q)) {
+ /*
+ * `r` is our root table we've found
+ * earlier, `q` can get dropped.
+ */
+ p->pfrkt_root = r;
+ SLIST_INSERT_HEAD(&auxq, q,
+ pfrkt_workq);
+ break;
+ }
+ }
+ if (r != NULL)
+ continue;
+
+ q->pfrkt_rs = pf_find_or_create_ruleset(q->pfrkt_anchor);
+ /*
+ * root tables are attached to main ruleset,
+ * because ->pfrkt_anchor[0] == '\0'
+ */
+ KASSERT(q->pfrkt_rs == &pf_main_ruleset);
+ q->pfrkt_rs->tables++;
+ p->pfrkt_root = q;
+ SLIST_INSERT_HEAD(&addq, q, pfrkt_workq);
+ }
+
+ pfr_insert_ktables(&addq);
+ pfr_setflags_ktables(&changeq);
+ }
+ PF_UNLOCK();
+ NET_UNLOCK();
+
+ pfr_destroy_ktables_aux(&auxq);
+ if (flags & PFR_FLAG_DUMMY)
+ pfr_destroy_ktables_aux(&addq);
+
+ if (nadd != NULL)
+ *nadd = xadd;
+ return (0);
+_bad:
+ pfr_destroy_ktables_aux(&auxq);
+ return (rv);
+}
+
+int
+pfr_del_tables(struct pfr_table *tbl, int size, int *ndel, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p, *q, key;
+ int i, xdel = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ SLIST_INIT(&workq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags))
+ return (EFAULT);
+ error = pfr_validate_table(&key.pfrkt_t, 0,
+ flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key);
+ if (p != NULL && (p->pfrkt_flags & PFR_TFLAG_ACTIVE)) {
+ SLIST_FOREACH(q, &workq, pfrkt_workq)
+ if (!pfr_ktable_compare(p, q))
+ goto _skip;
+ p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_ACTIVE;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ xdel++;
+ }
+_skip:
+ ;
+ }
+
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_setflags_ktables(&workq);
+ }
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+}
+
+int
+pfr_get_tables(struct pfr_table *filter, struct pfr_table *tbl, int *size,
+ int flags)
+{
+ struct pfr_ktable *p;
+ int n, nn, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_ALLRSETS);
+ error = pfr_fix_anchor(filter->pfrt_anchor);
+ if (error)
+ return (error);
+ n = nn = pfr_table_count(filter, flags);
+ if (n < 0)
+ return (ENOENT);
+ if (n > *size) {
+ *size = n;
+ return (0);
+ }
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (pfr_skip_table(filter, p, flags))
+ continue;
+ if (n-- <= 0)
+ continue;
+ if (COPYOUT(&p->pfrkt_t, tbl++, sizeof(*tbl), flags))
+ return (EFAULT);
+ }
+ if (n) {
+ DPFPRINTF(LOG_ERR,
+ "pfr_get_tables: corruption detected (%d).", n);
+ return (ENOTTY);
+ }
+ *size = nn;
+ return (0);
+}
+
+int
+pfr_get_tstats(struct pfr_table *filter, struct pfr_tstats *tbl, int *size,
+ int flags)
+{
+ struct pfr_ktable *p;
+ struct pfr_ktableworkq workq;
+ int n, nn, error;
+ time_t tzero = gettime();
+
+ /* XXX PFR_FLAG_CLSTATS disabled */
+ ACCEPT_FLAGS(flags, PFR_FLAG_ALLRSETS);
+ error = pfr_fix_anchor(filter->pfrt_anchor);
+ if (error)
+ return (error);
+ n = nn = pfr_table_count(filter, flags);
+ if (n < 0)
+ return (ENOENT);
+ if (n > *size) {
+ *size = n;
+ return (0);
+ }
+ SLIST_INIT(&workq);
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (pfr_skip_table(filter, p, flags))
+ continue;
+ if (n-- <= 0)
+ continue;
+ if (COPYOUT(&p->pfrkt_ts, tbl++, sizeof(*tbl), flags))
+ return (EFAULT);
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ }
+ if (flags & PFR_FLAG_CLSTATS)
+ pfr_clstats_ktables(&workq, tzero,
+ flags & PFR_FLAG_ADDRSTOO);
+ if (n) {
+ DPFPRINTF(LOG_ERR,
+ "pfr_get_tstats: corruption detected (%d).", n);
+ return (ENOTTY);
+ }
+ *size = nn;
+ return (0);
+}
+
+int
+pfr_clr_tstats(struct pfr_table *tbl, int size, int *nzero, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p, key;
+ int i, xzero = 0, error;
+ time_t tzero = gettime();
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ADDRSTOO);
+ SLIST_INIT(&workq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags))
+ return (EFAULT);
+ error = pfr_validate_table(&key.pfrkt_t, 0, 0);
+ if (error)
+ return (error);
+ p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key);
+ if (p != NULL) {
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ xzero++;
+ }
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_clstats_ktables(&workq, tzero, flags & PFR_FLAG_ADDRSTOO);
+ }
+ if (nzero != NULL)
+ *nzero = xzero;
+ return (0);
+}
+
+int
+pfr_set_tflags(struct pfr_table *tbl, int size, int setflag, int clrflag,
+ int *nchange, int *ndel, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p, *q, key;
+ int i, xchange = 0, xdel = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ if ((setflag & ~PFR_TFLAG_USRMASK) ||
+ (clrflag & ~PFR_TFLAG_USRMASK) ||
+ (setflag & clrflag))
+ return (EINVAL);
+ SLIST_INIT(&workq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(tbl+i, &key.pfrkt_t, sizeof(key.pfrkt_t), flags))
+ return (EFAULT);
+ error = pfr_validate_table(&key.pfrkt_t, 0,
+ flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ p = RB_FIND(pfr_ktablehead, &pfr_ktables, &key);
+ if (p != NULL && (p->pfrkt_flags & PFR_TFLAG_ACTIVE)) {
+ p->pfrkt_nflags = (p->pfrkt_flags | setflag) &
+ ~clrflag;
+ if (p->pfrkt_nflags == p->pfrkt_flags)
+ goto _skip;
+ SLIST_FOREACH(q, &workq, pfrkt_workq)
+ if (!pfr_ktable_compare(p, q))
+ goto _skip;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ if ((p->pfrkt_flags & PFR_TFLAG_PERSIST) &&
+ (clrflag & PFR_TFLAG_PERSIST) &&
+ !(p->pfrkt_flags & PFR_TFLAG_REFERENCED))
+ xdel++;
+ else
+ xchange++;
+ }
+_skip:
+ ;
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_setflags_ktables(&workq);
+ }
+ if (nchange != NULL)
+ *nchange = xchange;
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+}
+
+int
+pfr_ina_begin(struct pfr_table *trs, u_int32_t *ticket, int *ndel, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p;
+ struct pf_ruleset *rs;
+ int xdel = 0;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ rs = pf_find_or_create_ruleset(trs->pfrt_anchor);
+ if (rs == NULL)
+ return (ENOMEM);
+ SLIST_INIT(&workq);
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) ||
+ pfr_skip_table(trs, p, 0))
+ continue;
+ p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_INACTIVE;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ xdel++;
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_setflags_ktables(&workq);
+ if (ticket != NULL)
+ *ticket = ++rs->tticket;
+ rs->topen = 1;
+ } else
+ pf_remove_if_empty_ruleset(rs);
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+}
+
+int
+pfr_ina_define(struct pfr_table *tbl, struct pfr_addr *addr, int size,
+ int *nadd, int *naddr, u_int32_t ticket, int flags)
+{
+ struct pfr_ktableworkq tableq;
+ struct pfr_kentryworkq addrq;
+ struct pfr_ktable *kt, *rt, *shadow, key;
+ struct pfr_kentry *p;
+ struct pfr_addr ad;
+ struct pf_ruleset *rs;
+ int i, rv, xadd = 0, xaddr = 0, error;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY | PFR_FLAG_ADDRSTOO);
+ if (size && !(flags & PFR_FLAG_ADDRSTOO))
+ return (EINVAL);
+ error = pfr_validate_table(tbl, PFR_TFLAG_USRMASK,
+ flags & PFR_FLAG_USERIOCTL);
+ if (error)
+ return (error);
+ rs = pf_find_ruleset(tbl->pfrt_anchor);
+ if (rs == NULL || !rs->topen || ticket != rs->tticket)
+ return (EBUSY);
+ tbl->pfrt_flags |= PFR_TFLAG_INACTIVE;
+ SLIST_INIT(&tableq);
+ kt = RB_FIND(pfr_ktablehead, &pfr_ktables, (struct pfr_ktable *)tbl);
+ if (kt == NULL) {
+ kt = pfr_create_ktable(tbl, 0, 1,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (kt == NULL)
+ return (ENOMEM);
+ SLIST_INSERT_HEAD(&tableq, kt, pfrkt_workq);
+ xadd++;
+ if (!tbl->pfrt_anchor[0])
+ goto _skip;
+
+ /* find or create root table */
+ bzero(&key, sizeof(key));
+ strlcpy(key.pfrkt_name, tbl->pfrt_name, sizeof(key.pfrkt_name));
+ rt = RB_FIND(pfr_ktablehead, &pfr_ktables, &key);
+ if (rt != NULL) {
+ kt->pfrkt_root = rt;
+ goto _skip;
+ }
+ rt = pfr_create_ktable(&key.pfrkt_t, 0, 1,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (rt == NULL) {
+ pfr_destroy_ktables(&tableq, 0);
+ return (ENOMEM);
+ }
+ SLIST_INSERT_HEAD(&tableq, rt, pfrkt_workq);
+ kt->pfrkt_root = rt;
+ } else if (!(kt->pfrkt_flags & PFR_TFLAG_INACTIVE))
+ xadd++;
+_skip:
+ shadow = pfr_create_ktable(tbl, 0, 0,
+ (flags & PFR_FLAG_USERIOCTL? PR_WAITOK : PR_NOWAIT));
+ if (shadow == NULL) {
+ pfr_destroy_ktables(&tableq, 0);
+ return (ENOMEM);
+ }
+ SLIST_INIT(&addrq);
+ for (i = 0; i < size; i++) {
+ YIELD(flags & PFR_FLAG_USERIOCTL);
+ if (COPYIN(addr+i, &ad, sizeof(ad), flags))
+ senderr(EFAULT);
+ if (pfr_validate_addr(&ad))
+ senderr(EINVAL);
+ if (pfr_lookup_addr(shadow, &ad, 1) != NULL)
+ continue;
+ p = pfr_create_kentry(&ad);
+ if (p == NULL)
+ senderr(ENOMEM);
+ if (pfr_route_kentry(shadow, p)) {
+ pfr_destroy_kentry(p);
+ continue;
+ }
+ SLIST_INSERT_HEAD(&addrq, p, pfrke_workq);
+ xaddr++;
+ if (p->pfrke_type == PFRKE_COST)
+ kt->pfrkt_refcntcost++;
+ pfr_ktable_winfo_update(kt, p);
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ if (kt->pfrkt_shadow != NULL)
+ pfr_destroy_ktable(kt->pfrkt_shadow, 1);
+ kt->pfrkt_flags |= PFR_TFLAG_INACTIVE;
+ pfr_insert_ktables(&tableq);
+ shadow->pfrkt_cnt = (flags & PFR_FLAG_ADDRSTOO) ?
+ xaddr : NO_ADDRESSES;
+ kt->pfrkt_shadow = shadow;
+ } else {
+ pfr_clean_node_mask(shadow, &addrq);
+ pfr_destroy_ktable(shadow, 0);
+ pfr_destroy_ktables(&tableq, 0);
+ pfr_destroy_kentries(&addrq);
+ }
+ if (nadd != NULL)
+ *nadd = xadd;
+ if (naddr != NULL)
+ *naddr = xaddr;
+ return (0);
+_bad:
+ pfr_destroy_ktable(shadow, 0);
+ pfr_destroy_ktables(&tableq, 0);
+ pfr_destroy_kentries(&addrq);
+ return (rv);
+}
+
+int
+pfr_ina_rollback(struct pfr_table *trs, u_int32_t ticket, int *ndel, int flags)
+{
+ struct pfr_ktableworkq workq;
+ struct pfr_ktable *p;
+ struct pf_ruleset *rs;
+ int xdel = 0;
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ rs = pf_find_ruleset(trs->pfrt_anchor);
+ if (rs == NULL || !rs->topen || ticket != rs->tticket)
+ return (0);
+ SLIST_INIT(&workq);
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) ||
+ pfr_skip_table(trs, p, 0))
+ continue;
+ p->pfrkt_nflags = p->pfrkt_flags & ~PFR_TFLAG_INACTIVE;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ xdel++;
+ }
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ pfr_setflags_ktables(&workq);
+ rs->topen = 0;
+ pf_remove_if_empty_ruleset(rs);
+ }
+ if (ndel != NULL)
+ *ndel = xdel;
+ return (0);
+}
+
+int
+pfr_ina_commit(struct pfr_table *trs, u_int32_t ticket, int *nadd,
+ int *nchange, int flags)
+{
+ struct pfr_ktable *p, *q;
+ struct pfr_ktableworkq workq;
+ struct pf_ruleset *rs;
+ int xadd = 0, xchange = 0;
+ time_t tzero = gettime();
+
+ ACCEPT_FLAGS(flags, PFR_FLAG_DUMMY);
+ rs = pf_find_ruleset(trs->pfrt_anchor);
+ if (rs == NULL || !rs->topen || ticket != rs->tticket)
+ return (EBUSY);
+
+ SLIST_INIT(&workq);
+ RB_FOREACH(p, pfr_ktablehead, &pfr_ktables) {
+ if (!(p->pfrkt_flags & PFR_TFLAG_INACTIVE) ||
+ pfr_skip_table(trs, p, 0))
+ continue;
+ SLIST_INSERT_HEAD(&workq, p, pfrkt_workq);
+ if (p->pfrkt_flags & PFR_TFLAG_ACTIVE)
+ xchange++;
+ else
+ xadd++;
+ }
+
+ if (!(flags & PFR_FLAG_DUMMY)) {
+ SLIST_FOREACH_SAFE(p, &workq, pfrkt_workq, q) {
+ pfr_commit_ktable(p, tzero);
+ }
+ rs->topen = 0;
+ pf_remove_if_empty_ruleset(rs);
+ }
+ if (nadd != NULL)
+ *nadd = xadd;
+ if (nchange != NULL)
+ *nchange = xchange;
+
+ return (0);
+}
+
+void
+pfr_commit_ktable(struct pfr_ktable *kt, time_t tzero)
+{
+ struct pfr_ktable *shadow = kt->pfrkt_shadow;
+ int nflags;
+
+ if (shadow->pfrkt_cnt == NO_ADDRESSES) {
+ if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ pfr_clstats_ktable(kt, tzero, 1);
+ } else if (kt->pfrkt_flags & PFR_TFLAG_ACTIVE) {
+ /* kt might contain addresses */
+ struct pfr_kentryworkq addrq, addq, changeq, delq, garbageq;
+ struct pfr_kentry *p, *q;
+ struct pfr_addr ad;
+
+ pfr_enqueue_addrs(shadow, &addrq, NULL, 0);
+ pfr_mark_addrs(kt);
+ SLIST_INIT(&addq);
+ SLIST_INIT(&changeq);
+ SLIST_INIT(&delq);
+ SLIST_INIT(&garbageq);
+ pfr_clean_node_mask(shadow, &addrq);
+ while ((p = SLIST_FIRST(&addrq)) != NULL) {
+ SLIST_REMOVE_HEAD(&addrq, pfrke_workq);
+ pfr_copyout_addr(&ad, p);
+ q = pfr_lookup_addr(kt, &ad, 1);
+ if (q != NULL) {
+ if ((q->pfrke_flags & PFRKE_FLAG_NOT) !=
+ (p->pfrke_flags & PFRKE_FLAG_NOT))
+ SLIST_INSERT_HEAD(&changeq, q,
+ pfrke_workq);
+ q->pfrke_flags |= PFRKE_FLAG_MARK;
+ SLIST_INSERT_HEAD(&garbageq, p, pfrke_workq);
+ } else {
+ p->pfrke_tzero = tzero;
+ SLIST_INSERT_HEAD(&addq, p, pfrke_workq);
+ }
+ }
+ pfr_enqueue_addrs(kt, &delq, NULL, ENQUEUE_UNMARKED_ONLY);
+ pfr_insert_kentries(kt, &addq, tzero);
+ pfr_remove_kentries(kt, &delq);
+ pfr_clstats_kentries(&changeq, tzero, INVERT_NEG_FLAG);
+ pfr_destroy_kentries(&garbageq);
+ } else {
+ /* kt cannot contain addresses */
+ SWAP(struct radix_node_head *, kt->pfrkt_ip4,
+ shadow->pfrkt_ip4);
+ SWAP(struct radix_node_head *, kt->pfrkt_ip6,
+ shadow->pfrkt_ip6);
+ SWAP(int, kt->pfrkt_cnt, shadow->pfrkt_cnt);
+ pfr_clstats_ktable(kt, tzero, 1);
+ }
+ nflags = ((shadow->pfrkt_flags & PFR_TFLAG_USRMASK) |
+ (kt->pfrkt_flags & PFR_TFLAG_SETMASK) | PFR_TFLAG_ACTIVE)
+ & ~PFR_TFLAG_INACTIVE;
+ pfr_destroy_ktable(shadow, 0);
+ kt->pfrkt_shadow = NULL;
+ pfr_setflags_ktable(kt, nflags);
+}
+
+int
+pfr_validate_table(struct pfr_table *tbl, int allowedflags, int no_reserved)
+{
+ int error;
+
+ if (!tbl->pfrt_name[0])
+ return (EINVAL);
+ if (no_reserved && !strcmp(tbl->pfrt_anchor, PF_RESERVED_ANCHOR))
+ return (EINVAL);
+ if (strnlen(tbl->pfrt_name, sizeof(tbl->pfrt_name)) >=
+ sizeof(tbl->pfrt_name))
+ return (ENAMETOOLONG);
+ error = pfr_fix_anchor(tbl->pfrt_anchor);
+ if (error)
+ return (error);
+ if (tbl->pfrt_flags & ~allowedflags)
+ return (EINVAL);
+ return (0);
+}
+
+/*
+ * Rewrite anchors referenced by tables to remove slashes
+ * and check for validity.
+ */
+int
+pfr_fix_anchor(char *anchor)
+{
+ size_t siz = PATH_MAX;
+
+ if (strnlen(anchor, PATH_MAX) >= PATH_MAX)
+ return (ENAMETOOLONG);
+ if (anchor[0] == '/') {
+ char *path;
+ int off;
+
+ path = anchor;
+ off = 1;
+ while (*++path == '/')
+ off++;
+ bcopy(path, anchor, siz - off);
+ memset(anchor + siz - off, 0, off);
+ }
+ return (0);
+}
+
+int
+pfr_table_count(struct pfr_table *filter, int flags)
+{
+ struct pf_ruleset *rs;
+
+ if (flags & PFR_FLAG_ALLRSETS)
+ return (pfr_ktable_cnt);
+ if (filter->pfrt_anchor[0]) {
+ rs = pf_find_ruleset(filter->pfrt_anchor);
+ return ((rs != NULL) ? rs->tables : -1);
+ }
+ return (pf_main_ruleset.tables);
+}
+
+int
+pfr_skip_table(struct pfr_table *filter, struct pfr_ktable *kt, int flags)
+{
+ if (flags & PFR_FLAG_ALLRSETS)
+ return (0);
+ if (strcmp(filter->pfrt_anchor, kt->pfrkt_anchor))
+ return (1);
+ return (0);
+}
+
+void
+pfr_insert_ktables(struct pfr_ktableworkq *workq)
+{
+ struct pfr_ktable *p;
+
+ SLIST_FOREACH(p, workq, pfrkt_workq)
+ pfr_insert_ktable(p);
+}
+
+void
+pfr_insert_ktable(struct pfr_ktable *kt)
+{
+ RB_INSERT(pfr_ktablehead, &pfr_ktables, kt);
+ pfr_ktable_cnt++;
+ if (kt->pfrkt_root != NULL)
+ if (!kt->pfrkt_root->pfrkt_refcnt[PFR_REFCNT_ANCHOR]++)
+ pfr_setflags_ktable(kt->pfrkt_root,
+ kt->pfrkt_root->pfrkt_flags|PFR_TFLAG_REFDANCHOR);
+}
+
+void
+pfr_setflags_ktables(struct pfr_ktableworkq *workq)
+{
+ struct pfr_ktable *p, *q;
+
+ SLIST_FOREACH_SAFE(p, workq, pfrkt_workq, q) {
+ pfr_setflags_ktable(p, p->pfrkt_nflags);
+ }
+}
+
+void
+pfr_setflags_ktable(struct pfr_ktable *kt, int newf)
+{
+ struct pfr_kentryworkq addrq;
+
+ if (!(newf & PFR_TFLAG_REFERENCED) &&
+ !(newf & PFR_TFLAG_REFDANCHOR) &&
+ !(newf & PFR_TFLAG_PERSIST))
+ newf &= ~PFR_TFLAG_ACTIVE;
+ if (!(newf & PFR_TFLAG_ACTIVE))
+ newf &= ~PFR_TFLAG_USRMASK;
+ if (!(newf & PFR_TFLAG_SETMASK)) {
+ RB_REMOVE(pfr_ktablehead, &pfr_ktables, kt);
+ if (kt->pfrkt_root != NULL)
+ if (!--kt->pfrkt_root->pfrkt_refcnt[PFR_REFCNT_ANCHOR])
+ pfr_setflags_ktable(kt->pfrkt_root,
+ kt->pfrkt_root->pfrkt_flags &
+ ~PFR_TFLAG_REFDANCHOR);
+ pfr_destroy_ktable(kt, 1);
+ pfr_ktable_cnt--;
+ return;
+ }
+ if (!(newf & PFR_TFLAG_ACTIVE) && kt->pfrkt_cnt) {
+ pfr_enqueue_addrs(kt, &addrq, NULL, 0);
+ pfr_remove_kentries(kt, &addrq);
+ }
+ if (!(newf & PFR_TFLAG_INACTIVE) && kt->pfrkt_shadow != NULL) {
+ pfr_destroy_ktable(kt->pfrkt_shadow, 1);
+ kt->pfrkt_shadow = NULL;
+ }
+ kt->pfrkt_flags = newf;
+}
+
+void
+pfr_clstats_ktables(struct pfr_ktableworkq *workq, time_t tzero, int recurse)
+{
+ struct pfr_ktable *p;
+
+ SLIST_FOREACH(p, workq, pfrkt_workq)
+ pfr_clstats_ktable(p, tzero, recurse);
+}
+
+void
+pfr_clstats_ktable(struct pfr_ktable *kt, time_t tzero, int recurse)
+{
+ struct pfr_kentryworkq addrq;
+
+ if (recurse) {
+ pfr_enqueue_addrs(kt, &addrq, NULL, 0);
+ pfr_clstats_kentries(&addrq, tzero, 0);
+ }
+ bzero(kt->pfrkt_packets, sizeof(kt->pfrkt_packets));
+ bzero(kt->pfrkt_bytes, sizeof(kt->pfrkt_bytes));
+ kt->pfrkt_match = kt->pfrkt_nomatch = 0;
+ kt->pfrkt_tzero = tzero;
+}
+
+struct pfr_ktable *
+pfr_create_ktable(struct pfr_table *tbl, time_t tzero, int attachruleset,
+ int wait)
+{
+ struct pfr_ktable *kt;
+ struct pf_ruleset *rs;
+
+ kt = pool_get(&pfr_ktable_pl, wait|PR_ZERO|PR_LIMITFAIL);
+ if (kt == NULL)
+ return (NULL);
+ kt->pfrkt_t = *tbl;
+
+ if (attachruleset) {
+ PF_ASSERT_LOCKED();
+ rs = pf_find_or_create_ruleset(tbl->pfrt_anchor);
+ if (!rs) {
+ pfr_destroy_ktable(kt, 0);
+ return (NULL);
+ }
+ kt->pfrkt_rs = rs;
+ rs->tables++;
+ }
+
+ if (!rn_inithead((void **)&kt->pfrkt_ip4,
+ offsetof(struct sockaddr_in, sin_addr)) ||
+ !rn_inithead((void **)&kt->pfrkt_ip6,
+ offsetof(struct sockaddr_in6, sin6_addr))) {
+ pfr_destroy_ktable(kt, 0);
+ return (NULL);
+ }
+ kt->pfrkt_tzero = tzero;
+ kt->pfrkt_refcntcost = 0;
+ kt->pfrkt_gcdweight = 0;
+ kt->pfrkt_maxweight = 1;
+
+ return (kt);
+}
+
+void
+pfr_destroy_ktables(struct pfr_ktableworkq *workq, int flushaddr)
+{
+ struct pfr_ktable *p;
+
+ while ((p = SLIST_FIRST(workq)) != NULL) {
+ SLIST_REMOVE_HEAD(workq, pfrkt_workq);
+ pfr_destroy_ktable(p, flushaddr);
+ }
+}
+
+void
+pfr_destroy_ktables_aux(struct pfr_ktableworkq *auxq)
+{
+ struct pfr_ktable *p;
+
+ while ((p = SLIST_FIRST(auxq)) != NULL) {
+ SLIST_REMOVE_HEAD(auxq, pfrkt_workq);
+ /*
+ * There must be no extra data (rules, shadow tables, ...)
+ * attached, because auxq holds just empty memory to be
+ * initialized. Therefore we can also be called with no lock.
+ */
+ if (p->pfrkt_root != NULL) {
+ KASSERT(p->pfrkt_root->pfrkt_rs == NULL);
+ KASSERT(p->pfrkt_root->pfrkt_shadow == NULL);
+ KASSERT(p->pfrkt_root->pfrkt_root == NULL);
+ pfr_destroy_ktable(p->pfrkt_root, 0);
+ p->pfrkt_root = NULL;
+ }
+ KASSERT(p->pfrkt_rs == NULL);
+ KASSERT(p->pfrkt_shadow == NULL);
+ pfr_destroy_ktable(p, 0);
+ }
+}
+
+void
+pfr_destroy_ktable(struct pfr_ktable *kt, int flushaddr)
+{
+ struct pfr_kentryworkq addrq;
+
+ if (flushaddr) {
+ pfr_enqueue_addrs(kt, &addrq, NULL, 0);
+ pfr_clean_node_mask(kt, &addrq);
+ pfr_destroy_kentries(&addrq);
+ }
+ if (kt->pfrkt_ip4 != NULL)
+ free(kt->pfrkt_ip4, M_RTABLE, sizeof(*kt->pfrkt_ip4));
+ if (kt->pfrkt_ip6 != NULL)
+ free(kt->pfrkt_ip6, M_RTABLE, sizeof(*kt->pfrkt_ip6));
+ if (kt->pfrkt_shadow != NULL)
+ pfr_destroy_ktable(kt->pfrkt_shadow, flushaddr);
+ if (kt->pfrkt_rs != NULL) {
+ kt->pfrkt_rs->tables--;
+ pf_remove_if_empty_ruleset(kt->pfrkt_rs);
+ }
+ pool_put(&pfr_ktable_pl, kt);
+}
+
+int
+pfr_ktable_compare(struct pfr_ktable *p, struct pfr_ktable *q)
+{
+ int d;
+
+ if ((d = strncmp(p->pfrkt_name, q->pfrkt_name, PF_TABLE_NAME_SIZE)))
+ return (d);
+ return (strcmp(p->pfrkt_anchor, q->pfrkt_anchor));
+}
+
+struct pfr_ktable *
+pfr_lookup_table(struct pfr_table *tbl)
+{
+ /* struct pfr_ktable start like a struct pfr_table */
+ return (RB_FIND(pfr_ktablehead, &pfr_ktables,
+ (struct pfr_ktable *)tbl));
+}
+
+int
+pfr_match_addr(struct pfr_ktable *kt, struct pf_addr *a, sa_family_t af)
+{
+ struct pfr_kentry *ke = NULL;
+ int match;
+
+ ke = pfr_kentry_byaddr(kt, a, af, 0);
+
+ match = (ke && !(ke->pfrke_flags & PFRKE_FLAG_NOT));
+ if (match)
+ kt->pfrkt_match++;
+ else
+ kt->pfrkt_nomatch++;
+
+ return (match);
+}
+
+struct pfr_kentry *
+pfr_kentry_byaddr(struct pfr_ktable *kt, struct pf_addr *a, sa_family_t af,
+ int exact)
+{
+ struct pfr_kentry *ke = NULL;
+ struct sockaddr_in tmp4;
+#ifdef INET6
+ struct sockaddr_in6 tmp6;
+#endif /* INET6 */
+
+ kt = pfr_ktable_select_active(kt);
+ if (kt == NULL)
+ return (0);
+
+ switch (af) {
+ case AF_INET:
+ bzero(&tmp4, sizeof(tmp4));
+ tmp4./* PFLINUX sin_len */;
+ tmp4.sin_family = AF_INET;
+ tmp4.sin_addr.s_addr = a->addr32[0];
+ ke = (struct pfr_kentry *)rn_match(&tmp4, kt->pfrkt_ip4);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ bzero(&tmp6, sizeof(tmp6));
+ tmp6.sin6_len = sizeof(tmp6);
+ tmp6.sin6_family = AF_INET6;
+ bcopy(a, &tmp6.sin6_addr, sizeof(tmp6.sin6_addr));
+ ke = (struct pfr_kentry *)rn_match(&tmp6, kt->pfrkt_ip6);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ if (exact && ke && KENTRY_NETWORK(ke))
+ ke = NULL;
+
+ return (ke);
+}
+
+void
+pfr_update_stats(struct pfr_ktable *kt, struct pf_addr *a, struct pf_pdesc *pd,
+ int op, int notrule)
+{
+ struct pfr_kentry *ke = NULL;
+ struct sockaddr_in tmp4;
+#ifdef INET6
+ struct sockaddr_in6 tmp6;
+#endif /* INET6 */
+ sa_family_t af = pd->af;
+ u_int64_t len = pd->tot_len;
+ int dir_idx = (pd->dir == PF_OUT);
+ int op_idx;
+
+ kt = pfr_ktable_select_active(kt);
+ if (kt == NULL)
+ return;
+
+ switch (af) {
+ case AF_INET:
+ bzero(&tmp4, sizeof(tmp4));
+ tmp4./* PFLINUX sin_len */;
+ tmp4.sin_family = AF_INET;
+ tmp4.sin_addr.s_addr = a->addr32[0];
+ ke = (struct pfr_kentry *)rn_match(&tmp4, kt->pfrkt_ip4);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ bzero(&tmp6, sizeof(tmp6));
+ tmp6.sin6_len = sizeof(tmp6);
+ tmp6.sin6_family = AF_INET6;
+ bcopy(a, &tmp6.sin6_addr, sizeof(tmp6.sin6_addr));
+ ke = (struct pfr_kentry *)rn_match(&tmp6, kt->pfrkt_ip6);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+
+ switch (op) {
+ case PF_PASS:
+ op_idx = PFR_OP_PASS;
+ break;
+ case PF_MATCH:
+ op_idx = PFR_OP_MATCH;
+ break;
+ case PF_DROP:
+ op_idx = PFR_OP_BLOCK;
+ break;
+ default:
+ panic("unhandled op");
+ }
+
+ if ((ke == NULL || (ke->pfrke_flags & PFRKE_FLAG_NOT)) != notrule) {
+ if (op_idx != PFR_OP_PASS)
+ DPFPRINTF(LOG_DEBUG,
+ "pfr_update_stats: assertion failed.");
+ op_idx = PFR_OP_XPASS;
+ }
+ kt->pfrkt_packets[dir_idx][op_idx]++;
+ kt->pfrkt_bytes[dir_idx][op_idx] += len;
+ if (ke != NULL && op_idx != PFR_OP_XPASS &&
+ (kt->pfrkt_flags & PFR_TFLAG_COUNTERS)) {
+ if (ke->pfrke_counters == NULL)
+ ke->pfrke_counters = pool_get(&pfr_kcounters_pl,
+ PR_NOWAIT | PR_ZERO);
+ if (ke->pfrke_counters != NULL) {
+ ke->pfrke_counters->pfrkc_packets[dir_idx][op_idx]++;
+ ke->pfrke_counters->pfrkc_bytes[dir_idx][op_idx] += len;
+ }
+ }
+}
+
+struct pfr_ktable *
+pfr_attach_table(struct pf_ruleset *rs, char *name, int wait)
+{
+ struct pfr_ktable *kt, *rt;
+ struct pfr_table tbl;
+ struct pf_anchor *ac = rs->anchor;
+
+ bzero(&tbl, sizeof(tbl));
+ strlcpy(tbl.pfrt_name, name, sizeof(tbl.pfrt_name));
+ if (ac != NULL)
+ strlcpy(tbl.pfrt_anchor, ac->path, sizeof(tbl.pfrt_anchor));
+ kt = pfr_lookup_table(&tbl);
+ if (kt == NULL) {
+ /*
+ * Hold rs across the table creation below. A new table takes
+ * a reference on the ruleset, and pfr_destroy_ktable() drops
+ * it again on the failure paths, which lets
+ * pf_remove_if_empty_ruleset() free the anchor rs points into
+ * while our caller still holds rs.
+ */
+ rs->tables++;
+ kt = pfr_create_ktable(&tbl, gettime(), 1, wait);
+ if (kt == NULL) {
+ rs->tables--;
+ return (NULL);
+ }
+ if (ac != NULL) {
+ bzero(tbl.pfrt_anchor, sizeof(tbl.pfrt_anchor));
+ rt = pfr_lookup_table(&tbl);
+ if (rt == NULL) {
+ rt = pfr_create_ktable(&tbl, 0, 1, wait);
+ if (rt == NULL) {
+ pfr_destroy_ktable(kt, 0);
+ rs->tables--;
+ return (NULL);
+ }
+ pfr_insert_ktable(rt);
+ }
+ kt->pfrkt_root = rt;
+ }
+ pfr_insert_ktable(kt);
+ rs->tables--;
+ }
+ if (!kt->pfrkt_refcnt[PFR_REFCNT_RULE]++)
+ pfr_setflags_ktable(kt, kt->pfrkt_flags|PFR_TFLAG_REFERENCED);
+ return (kt);
+}
+
+void
+pfr_detach_table(struct pfr_ktable *kt)
+{
+ if (kt->pfrkt_refcnt[PFR_REFCNT_RULE] <= 0)
+ DPFPRINTF(LOG_NOTICE, "pfr_detach_table: refcount = %d.",
+ kt->pfrkt_refcnt[PFR_REFCNT_RULE]);
+ else if (!--kt->pfrkt_refcnt[PFR_REFCNT_RULE])
+ pfr_setflags_ktable(kt, kt->pfrkt_flags&~PFR_TFLAG_REFERENCED);
+}
+
+int
+pfr_islinklocal(sa_family_t af, struct pf_addr *addr)
+{
+#ifdef INET6
+ if (af == AF_INET6 && IN6_IS_ADDR_LINKLOCAL(&addr->v6))
+ return (1);
+#endif /* INET6 */
+ return (0);
+}
+
+int
+pfr_pool_get(struct pf_pool *rpool, struct pf_addr **raddr,
+ struct pf_addr **rmask, sa_family_t af)
+{
+ struct pfr_ktable *kt;
+ struct pfr_kentry *ke, *ke2;
+ struct pf_addr *addr, *counter;
+ union sockaddr_union mask;
+ struct sockaddr_in tmp4;
+#ifdef INET6
+ struct sockaddr_in6 tmp6;
+#endif
+ int startidx, idx = -1, loop = 0, use_counter = 0;
+
+ switch (af) {
+ case AF_INET:
+ bzero(&tmp4, sizeof(tmp4));
+ tmp4./* PFLINUX sin_len */;
+ tmp4.sin_family = AF_INET;
+ addr = (struct pf_addr *)&tmp4.sin_addr;
+ break;
+#ifdef INET6
+ case AF_INET6:
+ bzero(&tmp6, sizeof(tmp6));
+ tmp6.sin6_len = sizeof(tmp6);
+ tmp6.sin6_family = AF_INET6;
+ addr = (struct pf_addr *)&tmp6.sin6_addr;
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+
+ if (rpool->addr.type == PF_ADDR_TABLE)
+ kt = rpool->addr.p.tbl;
+ else if (rpool->addr.type == PF_ADDR_DYNIFTL)
+ kt = rpool->addr.p.dyn->pfid_kt;
+ else
+ return (-1);
+ kt = pfr_ktable_select_active(kt);
+ if (kt == NULL)
+ return (-1);
+
+ counter = &rpool->counter;
+ idx = rpool->tblidx;
+ if (idx < 0 || idx >= kt->pfrkt_cnt)
+ idx = 0;
+ else
+ use_counter = 1;
+ startidx = idx;
+
+ _next_block:
+ if (loop && startidx == idx) {
+ kt->pfrkt_nomatch++;
+ return (1);
+ }
+
+ ke = pfr_kentry_byidx(kt, idx, af);
+ if (ke == NULL) {
+ /* we don't have this idx, try looping */
+ if (loop || (ke = pfr_kentry_byidx(kt, 0, af)) == NULL) {
+ kt->pfrkt_nomatch++;
+ return (1);
+ }
+ idx = 0;
+ loop++;
+ }
+
+ /* Get current weight for weighted round-robin */
+ if (idx == 0 && use_counter == 1 && kt->pfrkt_refcntcost > 0) {
+ rpool->curweight = rpool->curweight - kt->pfrkt_gcdweight;
+
+ if (rpool->curweight < 1)
+ rpool->curweight = kt->pfrkt_maxweight;
+ }
+
+ pfr_prepare_network(&pfr_mask, af, ke->pfrke_net);
+ *raddr = SUNION2PF(&ke->pfrke_sa, af);
+ *rmask = SUNION2PF(&pfr_mask, af);
+
+ if (use_counter && !PF_AZERO(counter, af)) {
+ /* is supplied address within block? */
+ if (!pf_match_addr(0, *raddr, *rmask, counter, af)) {
+ /* no, go to next block in table */
+ idx++;
+ use_counter = 0;
+ goto _next_block;
+ }
+ pf_addrcpy(addr, counter, af);
+ } else {
+ /* use first address of block */
+ pf_addrcpy(addr, *raddr, af);
+ }
+
+ if (!KENTRY_NETWORK(ke)) {
+ /* this is a single IP address - no possible nested block */
+ if (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ pfr_islinklocal(af, addr)) {
+ idx++;
+ goto _next_block;
+ }
+ pf_addrcpy(counter, addr, af);
+ rpool->tblidx = idx;
+ kt->pfrkt_match++;
+ rpool->states = 0;
+ if (ke->pfrke_counters != NULL)
+ rpool->states = ke->pfrke_counters->states;
+ switch (ke->pfrke_type) {
+ case PFRKE_COST:
+ rpool->weight = ((struct pfr_kentry_cost *)ke)->weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ rpool->kif = ((struct pfr_kentry_route *)ke)->kif;
+ break;
+ default:
+ rpool->weight = 1;
+ break;
+ }
+ return (0);
+ }
+ for (;;) {
+ /* we don't want to use a nested block */
+ switch (af) {
+ case AF_INET:
+ ke2 = (struct pfr_kentry *)rn_match(&tmp4,
+ kt->pfrkt_ip4);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ke2 = (struct pfr_kentry *)rn_match(&tmp6,
+ kt->pfrkt_ip6);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(af);
+ }
+ if (ke2 == ke) {
+ /* lookup return the same block - perfect */
+ if (rpool->addr.type == PF_ADDR_DYNIFTL &&
+ pfr_islinklocal(af, addr))
+ goto _next_entry;
+ pf_addrcpy(counter, addr, af);
+ rpool->tblidx = idx;
+ kt->pfrkt_match++;
+ rpool->states = 0;
+ if (ke->pfrke_counters != NULL)
+ rpool->states = ke->pfrke_counters->states;
+ switch (ke->pfrke_type) {
+ case PFRKE_COST:
+ rpool->weight =
+ ((struct pfr_kentry_cost *)ke)->weight;
+ /* FALLTHROUGH */
+ case PFRKE_ROUTE:
+ rpool->kif = ((struct pfr_kentry_route *)ke)->kif;
+ break;
+ default:
+ rpool->weight = 1;
+ break;
+ }
+ return (0);
+ }
+_next_entry:
+ /* we need to increase the counter past the nested block */
+ pfr_prepare_network(&mask, af, ke2->pfrke_net);
+ pf_poolmask(addr, addr, SUNION2PF(&mask, af), &pfr_ffaddr, af);
+ pf_addr_inc(addr, af);
+ if (!pf_match_addr(0, *raddr, *rmask, addr, af)) {
+ /* ok, we reached the end of our main block */
+ /* go to next block in table */
+ idx++;
+ use_counter = 0;
+ goto _next_block;
+ }
+ }
+}
+
+struct pfr_kentry *
+pfr_kentry_byidx(struct pfr_ktable *kt, int idx, int af)
+{
+ struct pfr_walktree w;
+
+ bzero(&w, sizeof(w));
+ w.pfrw_op = PFRW_POOL_GET;
+ w.pfrw_cnt = idx;
+
+ switch (af) {
+ case AF_INET:
+ rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w);
+ return (w.pfrw_kentry);
+#ifdef INET6
+ case AF_INET6:
+ rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w);
+ return (w.pfrw_kentry);
+#endif /* INET6 */
+ default:
+ return (NULL);
+ }
+}
+
+/* Added for load balancing state counter use. */
+int
+pfr_states_increase(struct pfr_ktable *kt, struct pf_addr *addr, int af)
+{
+ struct pfr_kentry *ke;
+
+ ke = pfr_kentry_byaddr(kt, addr, af, 1);
+ if (ke == NULL)
+ return (-1);
+
+ if (ke->pfrke_counters == NULL)
+ ke->pfrke_counters = pool_get(&pfr_kcounters_pl,
+ PR_NOWAIT | PR_ZERO);
+ if (ke->pfrke_counters == NULL)
+ return (-1);
+
+ ke->pfrke_counters->states++;
+ return ke->pfrke_counters->states;
+}
+
+/* Added for load balancing state counter use. */
+int
+pfr_states_decrease(struct pfr_ktable *kt, struct pf_addr *addr, int af)
+{
+ struct pfr_kentry *ke;
+
+ ke = pfr_kentry_byaddr(kt, addr, af, 1);
+ if (ke == NULL)
+ return (-1);
+
+ if (ke->pfrke_counters == NULL)
+ ke->pfrke_counters = pool_get(&pfr_kcounters_pl,
+ PR_NOWAIT | PR_ZERO);
+ if (ke->pfrke_counters == NULL)
+ return (-1);
+
+ if (ke->pfrke_counters->states > 0)
+ ke->pfrke_counters->states--;
+ else
+ DPFPRINTF(LOG_DEBUG,
+ "pfr_states_decrease: states-- when states <= 0");
+
+ return ke->pfrke_counters->states;
+}
+
+void
+pfr_dynaddr_update(struct pfr_ktable *kt, struct pfi_dynaddr *dyn)
+{
+ struct pfr_walktree w;
+
+ bzero(&w, sizeof(w));
+ w.pfrw_op = PFRW_DYNADDR_UPDATE;
+ w.pfrw_dyn = dyn;
+
+ dyn->pfid_acnt4 = 0;
+ dyn->pfid_acnt6 = 0;
+ switch (dyn->pfid_af) {
+ case AF_UNSPEC: /* look up all both addresses IPv4 + IPv6 */
+ rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w);
+ rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w);
+ break;
+ case AF_INET:
+ rn_walktree(kt->pfrkt_ip4, pfr_walktree, &w);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ rn_walktree(kt->pfrkt_ip6, pfr_walktree, &w);
+ break;
+#endif /* INET6 */
+ default:
+ unhandled_af(dyn->pfid_af);
+ }
+}
+
+void
+pfr_ktable_winfo_update(struct pfr_ktable *kt, struct pfr_kentry *p) {
+ /*
+ * If cost flag is set,
+ * gcdweight is needed for round-robin.
+ */
+ if (kt->pfrkt_refcntcost > 0) {
+ u_int16_t weight;
+
+ weight = (p->pfrke_type == PFRKE_COST) ?
+ ((struct pfr_kentry_cost *)p)->weight : 1;
+
+ if (kt->pfrkt_gcdweight == 0)
+ kt->pfrkt_gcdweight = weight;
+
+ kt->pfrkt_gcdweight =
+ pfr_gcd(weight, kt->pfrkt_gcdweight);
+
+ if (kt->pfrkt_maxweight < weight)
+ kt->pfrkt_maxweight = weight;
+ }
+}
+
+struct pfr_ktable *
+pfr_ktable_select_active(struct pfr_ktable *kt)
+{
+ if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE) && kt->pfrkt_root != NULL)
+ kt = kt->pfrkt_root;
+ if (!(kt->pfrkt_flags & PFR_TFLAG_ACTIVE))
+ return (NULL);
+
+ return (kt);
+}
diff --git a/module/pfsrc/pfk_hooks.c b/module/pfsrc/pfk_hooks.c
new file mode 100644
index 0000000..61a5347
--- /dev/null
+++ b/module/pfsrc/pfk_hooks.c
@@ -0,0 +1,92 @@
+/*
+ * PF-on-Linux netfilter hook registration + M1 ioctl skeleton.
+ * The real verdict logic arrives from staged pf.c (T12); this file owns
+ * hook lifecycle and /dev/pf dispatch. (ISC 2026)
+ */
+#include
+#include
+#include
+#include
+
+static int pfk_enabled = 1; /* like pf_defaultwise/pf_enable on boot */
+static struct pf_status pfk_stat;
+
+/* --- temporary M1 control surface (replaced by staged pf_ioctl.c, T7b) --- */
+static int pfk_ioctl_min(struct file *f, unsigned int cmd, unsigned long addr)
+{
+ struct pf_status s;
+
+ switch (cmd) {
+ case DIOCGETSTATUS:
+ memset(&s, 0, sizeof(s));
+ s.running = pfk_enabled;
+ strscpy(s.ifname, "pf", sizeof(s.ifname));
+ if (copy_to_user((void __user *)addr, &s, sizeof(s)))
+ return EFAULT;
+ return 0;
+ default:
+ /* Rule/state/table ioctls arrive with the staged pf_ioctl.c
+ * (plan T7b); until then they are rejected (not silently
+ * accepted) so behaviour is explicit. */
+ return EINVAL;
+ }
+}
+
+long pfk_ioctl(struct file *f, unsigned int cmd, unsigned long addr)
+{
+ return pfk_ioctl_min(f, cmd, addr);
+}
+
+void pfk_status(struct pf_status *s)
+{
+ if (s)
+ *s = pfk_stat;
+}
+int pfk_enable(int on) { pfk_enabled = on ? 1 : 0; return 0; }
+
+/* --- netfilter hooks: ingress/egress plumbing (real work lands in T12) --- */
+static unsigned int
+pfk_ipv4_hook(void *priv, struct sk_buff *skb, const struct nf_hook_state *st)
+{
+ /* PFLINUX M1: accept-everything placeholder; T12 routes to pf_test() */
+ return NF_ACCEPT;
+}
+
+static struct nf_hook_ops pfk_hooks[] = {
+ { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_PRE_ROUTING,
+ .priority = NF_IP_PRI_FIRST },
+ { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_IN,
+ .priority = NF_IP_PRI_FIRST + 1 },
+ { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_FORWARD,
+ .priority = NF_IP_PRI_FIRST },
+ { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_LOCAL_OUT,
+ .priority = NF_IP_PRI_CONNTRACK + 1 },
+ { .hook = pfk_ipv4_hook, .pf = NFPROTO_IPV4, .hooknum = NF_INET_POST_ROUTING,
+ .priority = NF_IP_PRI_LAST - 1 },
+};
+#define PFK_NHOOKS ARRAY_SIZE(pfk_hooks)
+
+int pfk_hooks_register(void)
+{
+ int i, err;
+
+ for (i = 0; i < PFK_NHOOKS; i++) {
+ pfk_hooks[i].priv = NULL;
+ err = nf_register_net_hook(&init_net, &pfk_hooks[i]);
+ if (err)
+ goto fail;
+ }
+ return 0;
+fail:
+ while (--i >= 0)
+ nf_unregister_net_hook(&init_net, &pfk_hooks[i]);
+ return err;
+}
+
+void pfk_hooks_unregister(void)
+{
+ int i;
+
+ for (i = 0; i < PFK_NHOOKS; i++)
+ nf_unregister_net_hook(&init_net, &pfk_hooks[i]);
+}
diff --git a/module/pfsrc/pfk_mod.c b/module/pfsrc/pfk_mod.c
new file mode 100644
index 0000000..daaa71f
--- /dev/null
+++ b/module/pfsrc/pfk_mod.c
@@ -0,0 +1,86 @@
+/*
+ * PF-on-Linux: pfk module core — load/exit, /dev/pf misc device,
+ * NET_LOCK bring-up, staged upstream bring-up hooks. (ISC 2026)
+ */
+#include
+#include
+#include
+#include
+
+extern void pfk_mbuf_exit(void);
+extern int pfk_if_init(void);
+extern void pfk_if_exit(void);
+
+static int pfk_open(struct inode *inode, struct file *filp)
+{
+ if (filp->f_mode & FMODE_WRITE)
+ return capable(CAP_NET_ADMIN) ? 0 : -EPERM;
+ return 0;
+}
+
+static long pfk_ioctl_io(struct file *filp, unsigned int cmd,
+ unsigned long arg)
+{
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+ return pfk_ioctl(filp, cmd, arg);
+}
+
+static const struct file_operations pfk_fops = {
+ .owner = THIS_MODULE,
+ .open = pfk_open,
+ .unlocked_ioctl = pfk_ioctl_io,
+ .compat_ioctl = compat_ptr_ioctl,
+};
+
+static struct miscdevice pfk_dev = {
+ .minor = MISC_DYNAMIC_MINOR,
+ .name = "pf",
+ .fops = &pfk_fops,
+ .mode = 0600,
+};
+
+static int __init pfk_init(void)
+{
+ int err;
+
+ pfk_net_lock_init();
+ err = pfk_mbuf_init();
+ if (err)
+ return err;
+ err = pfk_if_init();
+ if (err)
+ goto err_mbuf;
+ err = pfk_hooks_register();
+ if (err)
+ goto err_if;
+ err = misc_register(&pfk_dev);
+ if (err)
+ goto err_hooks;
+ pr_info("pfk: PF-on-Linux engine loaded (OpenBSD 8.0 base)\n");
+ return 0;
+err_hooks:
+ pfk_hooks_unregister();
+err_if:
+ pfk_if_exit();
+err_mbuf:
+ pfk_mbuf_exit();
+ return err;
+}
+
+static void __exit pfk_exit(void)
+{
+ misc_deregister(&pfk_dev);
+ pfk_hooks_unregister();
+ pfk_if_exit();
+ pfk_mbuf_exit();
+ pr_info("pfk: unloaded\n");
+}
+
+module_init(pfk_init);
+module_exit(pfk_exit);
+MODULE_LICENSE("Dual MIT/GPL"); /* ISC/BSD code; Dual MIT/GPL is the kernel-
+ * recognised tag for permissive BSD-licensed
+ * modules linking GPL exports (see LICENSE). */
+MODULE_DESCRIPTION("PF packet filter (ported from OpenBSD 8.0) for Linux");
+MODULE_AUTHOR("PF-on-Linux contributors");
diff --git a/scripts/build-kernel.sh b/scripts/build-kernel.sh
index eba6ba2..c33a25b 100755
--- a/scripts/build-kernel.sh
+++ b/scripts/build-kernel.sh
@@ -6,7 +6,11 @@ K="${KERNELDIR:-$(cd "$REPO/../linux-7.3.4" && pwd)}"
cd "$K"
"$REPO/scripts/kernel-config.sh" "${1:-}"
JOBS="${JOBS:-$(($(nproc)-2))}"
-make -j"$JOBS" -s bzImage modules
+make -j"$JOBS" -s bzImage modules_prepare
+# External module builds need Module.symvers (kbuild only writes
+# vmlinux.symvers) and scripts/module.lds (from modules_prepare above).
+[ -f Module.symvers ] || cp vmlinux.symvers Module.symvers
+[ -f scripts/module.lds ] || { echo "FATAL: scripts/module.lds missing" >&2; exit 1; }
mkdir -p "$REPO/out"
KVER="$(make -s kernelversion)"
cp -f arch/x86/boot/bzImage "$REPO/out/linux-${KVER}-bzImage"
diff --git a/scripts/build-module.sh b/scripts/build-module.sh
new file mode 100755
index 0000000..3950db4
--- /dev/null
+++ b/scripts/build-module.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# Build pf.ko out-of-tree against the patched kernel tree.
+set -euo pipefail
+REPO="$(cd "$(dirname "$0")/.." && pwd)"
+K="${KERNELDIR:-$(cd "$REPO/../linux-7.3.4" && pwd)}"
+[ -e "$K/Module.symvers" ] || {
+ if [ -f "$K/vmlinux.symvers" ]; then cp "$K/vmlinux.symvers" "$K/Module.symvers";
+ else echo "kernel tree not prepared — run scripts/build-kernel.sh first" >&2; exit 1; fi; }
+[ -f "$K/scripts/module.lds" ] || make -C "$K" -j4 modules_prepare >/dev/null
+make -C "$K" M="$REPO/module" "$@"
+echo MODULE_BUILD_OK
diff --git a/scripts/lab-lib.sh b/scripts/lab-lib.sh
new file mode 100755
index 0000000..675fd9b
--- /dev/null
+++ b/scripts/lab-lib.sh
@@ -0,0 +1,283 @@
+#!/usr/bin/env bash
+# lab-lib.sh — helpers shared by vm-create.sh / vm-destroy.sh / vm-deploy.sh.
+# Source it; it never executes anything on its own. Topology single-source:
+# lab/ips.env. Disks: per-VM qcow2 with backing_file to the shared read-only
+# alpine-base.qcow2 (fast creates, ~MBs of delta storage; the base MUST NOT be
+# modified once children exist — vm-create only re-syncs it when the laptop
+# source hash differs).
+# shellcheck disable=SC2034
+
+LAB_LIB="$(readlink -f "${BASH_SOURCE[0]}")"
+: "${REPO:=$(cd "$(dirname "$LAB_LIB")/.." && pwd)}"
+export REPO
+
+log() { printf 'pflab: %s\n' "$*"; }
+warn() { printf 'pflab WARN: %s\n' "$*" >&2; }
+die() { printf 'pflab FAIL: %s\n' "$*" >&2; exit 1; }
+
+lab_env() {
+ [ -f "$REPO/lab/ips.env" ] || die "missing $REPO/lab/ips.env"
+ # shellcheck disable=SC1091
+ . "$REPO/lab/ips.env"
+ # bare-IP derivatives (route/via fields)
+ PF0_LAN_IP=${PF0_LAN%%/*}; PF0_WAN_IP=${PF0_WAN%%/*}; PF0_WAN2_IP=${PF0_WAN2%%/*}
+ CLI_IP=${CLI%%/*}; SRV_IP=${SRV%%/*}; GW2_WAN_IP=${GW2_WAN%%/*}; GW2_WAN2_IP=${GW2_WAN2%%/*}
+ LAB_SEEDS="$REPO/lab/seeds"
+ VMS="pf0 cli srv gw2"
+}
+
+SSH_OPTS=(-o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10
+ -o LogLevel=ERROR -o ControlMaster=auto -o ControlPersist=120
+ -o "ControlPath=$HOME/.ssh/cm-pflab-%r@%h:%p")
+
+vm_name() { echo "pftest-$1"; }
+vm_ip() { local v=${1^^}_SSH; [ -n "${!v-}" ] || die "unknown vm alias: $1"; echo "${!v}"; }
+
+# Run command(s) on deb.
+deb() { ssh "${SSH_OPTS[@]}" "$DEB_USER@$DEB" "$@"; }
+deb_cmd() { deb "bash -s" <<<"$1"; }
+
+# Run a shell script inside a lab VM (nested ssh from deb with the lab key).
+vm_cmd() { local ip=$1; deb "ssh -i $LAB_KEY_DEB ${SSH_OPTS[*]} root@$ip 'bash -s'" <<<"$2"; }
+
+# --- template rendering: replace @KEY@ tokens from environment + extra K=V ---
+RENDER_KEYS=(
+ DEB DEB_USER
+ PF0_MGMT PF0_LAN PF0_WAN PF0_WAN2 CLI CLI_GW SRV SRV_GW GW2_WAN2 GW2_WAN
+ PF0_SSH CLI_SSH SRV_SSH GW2_SSH
+ PF0_LAN_IP PF0_WAN_IP PF0_WAN2_IP CLI_IP SRV_IP GW2_WAN_IP GW2_WAN2_IP
+ MGMT_NET NET_PF_LAN NET_PF_WAN NET_PF_WAN2
+ PF_LAN_HOSTIP PF_WAN_HOSTIP PF_WAN2_HOSTIP PF_NET_PREFIX
+ VM_VCPUS VM_MEM_MB
+ PF0_MAC_MGMT PF0_MAC_LAN PF0_MAC_WAN PF0_MAC_WAN2
+ CLI_MAC_MGMT CLI_MAC_LAN SRV_MAC_MGMT SRV_MAC_WAN GW2_MAC_WAN GW2_MAC_WAN2
+ ROOT_PASS LAB_PACKAGES
+ IMG_DIR BASE_IMG SEED_DIR DEPLOY_DIR BOOT_DIR
+ LAB_KEY_DEB LAB_KEY_LAPTOP LAPTOP_SSH_FRAG BASE_SRC_REL
+)
+_esc() { local s=$1; s=${s//\\/\\\\}; s=${s//&/\\&}; s=${s//\~/\\~}; s=${s//$'\n'/\\n}; printf '%s' "$s"; }
+render() { # render [KEY=VALUE ...]
+ local tmpl=$1 out=$2 kv; shift 2
+ local -a prog=()
+ for kv in "$@"; do
+ prog+=(-e "s~@${kv%%=*}@~$(_esc "${kv#*=}")~g")
+ done
+ for k in "${RENDER_KEYS[@]}"; do
+ prog+=(-e "s~@$k@~$(_esc "${!k-}")~g")
+ done
+ sed "${prog[@]}" "$tmpl" > "$out"
+}
+
+# --- deb host prerequisites ---
+host_prereqs() {
+ deb true || die "cannot ssh $DEB_USER@$DEB (key auth? host up?)"
+ deb_cmd "set -e
+systemctl is-active --quiet libvirtd || systemctl enable --now libvirtd 2>/dev/null || systemctl enable --now virtqemud
+virsh -c qemu:///system list --all >/dev/null
+command -v rsync >/dev/null || { apt-get update -qq; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq rsync; }
+command -v genisoimage >/dev/null || { DEBIAN_FRONTEND=noninteractive apt-get install -y -qq genisoimage; }
+mkdir -p $SEED_DIR $BOOT_DIR"
+}
+
+# --- libvirt networks: default (start+autostart) + isolated pf-* L2 nets ---
+# pf-* carry a host bridge IP (.254) so deb can ssh/icmp into VM data NICs;
+# no and forward=none -> pure isolated segments, guest gw IPs are
+# pf0 itself (no host/guest address conflict).
+ensure_networks() {
+ deb "virsh net-start $MGMT_NET" 2>/dev/null || true
+ deb "virsh net-autostart $MGMT_NET" || true
+ local entry n b ip
+ for entry in "pf-lan $NET_PF_LAN $PF_LAN_HOSTIP" "pf-wan $NET_PF_WAN $PF_WAN_HOSTIP" "pf-wan2 $NET_PF_WAN2 $PF_WAN2_HOSTIP"; do
+ set -- $entry; b=$1; n=$2; ip=$3
+ if ! deb "virsh net-info $n" >/dev/null 2>&1; then
+ printf '\n %s\n \n \n \n\n' \
+ "$n" "virbr-$b" "$ip" "$PF_NET_PREFIX" | deb "virsh net-define /dev/stdin" >/dev/null
+ fi
+ deb "virsh net-start $n" 2>/dev/null || true
+ deb "virsh net-autostart $n" || true
+ done
+}
+
+# --- lab SSH keypair: private stays on deb; laptop keeps a copy for ProxyJump ---
+lab_keypair() {
+ deb "test -f $LAB_KEY_DEB" || deb "ssh-keygen -q -t ed25519 -N '' -f $LAB_KEY_DEB -C pflab@deb"
+ LAB_PUBKEY=$(deb "cat $LAB_KEY_DEB.pub")
+ [ -n "$LAB_PUBKEY" ] || die "could not read lab pubkey on deb"
+ if [ ! -f "$LAB_KEY_LAPTOP" ] || ! cmp -s <(deb "cat $LAB_KEY_DEB") "$LAB_KEY_LAPTOP"; then
+ umask 077
+ deb "cat $LAB_KEY_DEB" > "$LAB_KEY_LAPTOP"
+ deb "cat $LAB_KEY_DEB.pub" > "$LAB_KEY_LAPTOP.pub"
+ fi
+}
+
+# --- shared base image (laptop _vendor -> deb), synced once by sha256 ---
+base_image_sync() {
+ local lsha rsha=""
+ [ -f "$REPO/$BASE_SRC_REL" ] || die "base image missing: $REPO/$BASE_SRC_REL"
+ lsha=$(sha256sum "$REPO/$BASE_SRC_REL" | cut -d' ' -f1)
+ if [ "${RECREATE_BASE:-0}" != 1 ]; then
+ rsha=$(deb "sha256sum $BASE_IMG 2>/dev/null" | cut -d' ' -f1 || true)
+ fi
+ if [ "$lsha" = "$rsha" ]; then log "base image current on deb"; return 0; fi
+ log "syncing base image -> deb:$BASE_IMG"
+ rsync -a --info=progress2 -e "ssh ${SSH_OPTS[*]}" "$REPO/$BASE_SRC_REL" "$DEB_USER@$DEB:$BASE_IMG"
+}
+
+# --- guest boot kernel: the alpine cloud qcow2 ships an EMPTY ESP + no MBR
+# code, so it is not BIOS- nor UEFI-bootable in QEMU as delivered. We extract
+# the image's own kernel+initramfs (once, cached on deb) and direct-boot all
+# VMs with root=UUID of the base's ext4 partition (the same backing image).
+ensure_guest_kernel() {
+ deb "test -f $BOOT_DIR/guest-vmlinuz -a -f $BOOT_DIR/guest-initramfs -a -f $BOOT_DIR/guest-root.uuid" \
+ && return 0
+ log "extracting guest kernel/initramfs from base image"
+ deb_cmd "set -e
+ modprobe nbd max_part=8 2>/dev/null || true
+ qemu-nbd -r -c /dev/nbd1 $BASE_IMG
+ trap 'umount /mnt/pflab-extract 2>/dev/null || true; qemu-nbd -d /dev/nbd1' EXIT
+ for i in 1 2 3 4 5; do [ -b /dev/nbd1p2 ] && break; sleep 1; done
+ [ -b /dev/nbd1p2 ]
+ mkdir -p /mnt/pflab-extract $BOOT_DIR
+ mount -o ro /dev/nbd1p2 /mnt/pflab-extract
+ cp /mnt/pflab-extract/boot/vmlinuz-lts $BOOT_DIR/guest-vmlinuz
+ cp /mnt/pflab-extract/boot/initramfs-lts $BOOT_DIR/guest-initramfs
+ blkid -s UUID -o value /dev/nbd1p2 > $BOOT_DIR/guest-root.uuid
+ chmod a+r $BOOT_DIR/guest-vmlinuz $BOOT_DIR/guest-initramfs $BOOT_DIR/guest-root.uuid"
+}
+
+default_kernelblock() { # prints kernelblock xml for extracted direct boot
+ local uuid
+ uuid=$(deb "cat $BOOT_DIR/guest-root.uuid")
+ printf ' %s/guest-vmlinuz\n %s/guest-initramfs\n root=UUID=%s ro console=ttyS0,115200n8' \
+ "$BOOT_DIR" "$BOOT_DIR" "$uuid"
+}
+
+# --- per-role runcmd additions ---
+runcmd_extra() {
+ case $1 in
+ pf0)
+ cat <<'EOF'
+ - |
+ mkdir -p /etc/local.d
+ cat > /etc/local.d/pflab.start <<'EOS'
+ #!/bin/sh
+ sysctl -q -p /etc/sysctl.d/00-pflab.conf 2>/dev/null
+ IF=$(ip route show default 2>/dev/null | awk '{print $5; exit}')
+ [ -n "$IF" ] || exit 0
+ iptables -t nat -A POSTROUTING -o "$IF" -j MASQUERADE
+ EOS
+ chmod +x /etc/local.d/pflab.start
+ rc-update add local boot >/dev/null 2>&1 || true
+ /etc/local.d/pflab.start
+EOF
+ ;;
+ cli) echo " - ip route replace default via $CLI_GW" ;;
+ srv) echo " - ip route replace default via $SRV_GW" ;;
+ gw2) echo " - ip route replace default via $PF0_WAN_IP" ;;
+ esac
+}
+
+# --- one VM: seed iso + backing disk + domain define/start ---
+create_domain() { # create_domain [kernelblock]
+ local a=$1 kblock=${2:-} name disk extra seeds
+ name=$(vm_name "$a"); disk="$IMG_DIR/$name.qcow2"
+ seeds="$LAB_SEEDS/$name"
+ deb_cmd "virsh destroy $name 2>/dev/null; virsh undefine $name --nvram 2>/dev/null; virsh undefine $name 2>/dev/null; rm -f /var/lib/libvirt/qemu/nvram/$name*.raw; true"
+ rm -rf "$seeds"; mkdir -p "$seeds"
+ extra=$(runcmd_extra "$a")
+ render "$REPO/lab/cloud-init/user-data.tmpl" "$seeds/user-data" \
+ "VM=$a" "RUNCMD_EXTRA=$extra" "SSH_PUBKEY=$LAB_PUBKEY"
+ render "$REPO/lab/cloud-init/meta-data.tmpl" "$seeds/meta-data" "VM=$a"
+ render "$REPO/lab/cloud-init/network-config.$a.tmpl" "$seeds/network-config"
+ render "$REPO/lab/domains/$name.xml.tmpl" "$seeds/$name.xml" \
+ "NAME=$name" "VM=$a" "DISK=$disk" "SEED=$SEED_DIR/$name/seed.iso" "KERNELBLOCK=$kblock"
+ rsync -rt --delete --chmod=D0755,F0644 -e "ssh ${SSH_OPTS[*]}" "$seeds/" "$DEB_USER@$DEB:$SEED_DIR/$name/"
+ deb_cmd "cd '$SEED_DIR/$name' && rm -f seed.iso && \
+ genisoimage -quiet -o seed.iso -volid CIDATA -joliet -rock user-data meta-data network-config"
+ deb_cmd "chmod a+rX '$SEED_DIR' '$SEED_DIR/$name'"
+ deb_cmd "rm -f '$disk' && qemu-img create -f qcow2 -F qcow2 -b '$BASE_IMG' '$disk' >/dev/null"
+ deb "virsh define $SEED_DIR/$name/$name.xml" >/dev/null
+ deb "virsh start $name" >/dev/null
+ log "started $name"
+}
+
+wait_ready() { # wait_ready [timeout-s] — polls cloud-init done marker
+ local a=$1 t=${2:-300} ip name el=0
+ ip=$(vm_ip "$a"); name=$(vm_name "$a")
+ while :; do
+ if vm_cmd "$ip" 'test -f /run/pf-lab-ready' 2>/dev/null; then
+ log "$a ready"; return 0
+ fi
+ deb "LC_ALL=C virsh dominfo $name 2>/dev/null | grep -q running" \
+ || die "$name is not running (virsh console $name)"
+ sleep 5; el=$((el+5))
+ [ "$el" -ge "$t" ] && die "timeout waiting for $a cloud-init"
+ done
+}
+
+packages_fixup() { # safety net if cloud-init ran before pf0 had transit up
+ local a ip
+ for a in $VMS; do
+ ip=$(vm_ip "$a")
+ vm_cmd "$ip" 'command -v iperf3 >/dev/null 2>&1 || {
+ . /etc/os-release
+ grep -qE "^[^#]*/community" /etc/apk/repositories || echo "${HOME}/v${VERSION_ID}/community" >> /etc/apk/repositories
+ apk update -q >/dev/null 2>&1
+ apk add -q iperf3 tcpdump python3 py3-scapy bash >/dev/null 2>&1 || warn "apk add failed on '"$a"'"
+ }' || warn "no ssh to $a for package fixup"
+ done
+}
+
+# --- ssh access plumbing: aliases pf0|cli|srv|gw2 from deb and from laptop ---
+laptop_ssh_config() {
+ mkdir -p "$(dirname "$LAPTOP_SSH_FRAG")"; chmod 700 "$(dirname "$LAPTOP_SSH_FRAG")" 2>/dev/null || true
+ cat > "$LAPTOP_SSH_FRAG" <>> generated by pf_port/scripts/vm-create.sh (topology: lab/ips.env) >>>
+Host pf0 cli srv gw2
+ User root
+ IdentityFile $LAB_KEY_LAPTOP
+ ProxyJump $DEB_USER@$DEB
+ StrictHostKeyChecking accept-new
+ UserKnownHostsFile $HOME/.ssh/known_hosts_pflab
+ ConnectTimeout 15
+ ServerAliveInterval 15
+Host pf0
+ HostName $PF0_SSH
+Host cli
+ HostName $CLI_SSH
+Host srv
+ HostName $SRV_SSH
+Host gw2
+ HostName $GW2_SSH
+# <<< generated <<<
+EOF
+ touch ~/.ssh/config
+ grep -qE '^Include[[:space:]]+~/.ssh/config.d' ~/.ssh/config || {
+ cp -p ~/.ssh/config ~/.ssh/config.pflab-bak 2>/dev/null || true
+ printf 'Include ~/.ssh/config.d/*\n' | cat - ~/.ssh/config > ~/.ssh/config.tmp && mv ~/.ssh/config.tmp ~/.ssh/config
+ log "added Include ~/.ssh/config.d/* to ~/.ssh/config (backup: ~/.ssh/config.pflab-bak)"
+ }
+}
+
+deb_ssh_config() {
+ deb_cmd 'f=$HOME/.ssh/config; touch "$f"
+ sed -i "/# >>> pflab/,/# <<< pflab/d" "$f"
+ cat >> "$f" <>> pflab (generated by vm-create.sh) >>>
+Host pf0 cli srv gw2
+ User root
+ IdentityFile '"$LAB_KEY_DEB"'
+ StrictHostKeyChecking accept-new
+ LogLevel ERROR
+ ConnectTimeout 8
+Host pf0
+ HostName '"$PF0_SSH"'
+Host cli
+ HostName '"$CLI_SSH"'
+Host srv
+ HostName '"$SRV_SSH"'
+Host gw2
+ HostName '"$GW2_SSH"'
+# <<< pflab <<<
+EOF'
+}
diff --git a/scripts/stage-port.sh b/scripts/stage-port.sh
new file mode 100755
index 0000000..ea50f07
--- /dev/null
+++ b/scripts/stage-port.sh
@@ -0,0 +1,109 @@
+#!/usr/bin/env bash
+# Deterministic staging of OpenBSD 8.0 sources into module/ ports.
+# Every transformation is logged in docs/porting-notes.md ("porting log").
+# Re-running refreshes pristine copies while PRESERVING our port edits is
+# NOT done here — ported files are committed and edited in-tree thereafter;
+# this script is used (a) first-time staging, (b) `--diff ` to compare
+# our ported copy against pristine upstream for rebase forensics.
+set -euo pipefail
+REPO="$(cd "$(dirname "$0")/.." && pwd)"
+U="$REPO/_vendor/upstream"
+M="$REPO/module"
+LOG="$REPO/docs/porting-notes.md"
+
+stage_hdrs() {
+ mkdir -p "$M/include/net" "$M/include/compat/net" "$M/include/compat/sys" "$M/include/compat/crypto"
+ cp -f "$U/sys/net/pfvar.h" "$M/include/net/pfvar.h"
+ cp -f "$U/sys/net/pfvar_priv.h" "$M/include/net/pfvar_priv.h"
+ cp -f "$U/sys/net/if_pflog.h" "$M/include/compat/net/if_pflog.h"
+ cp -f "$U/sys/net/radix.h" "$M/include/compat/net/radix.h"
+ cp -f "$U/sys/net/rtable.h" "$M/include/compat/net/rtable.h"
+ cp -f "$U/sys/net/ifq.h" "$M/include/compat/net/ifq.h"
+ cp -f "$U/sys/net/toeplitz.h" "$M/include/compat/net/toeplitz.h"
+ cp -f "$U/sys/sys/queue.h" "$M/include/compat/sys/queue.h"
+ cp -f "$U/sys/sys/tree.h" "$M/include/compat/sys/tree.h"
+ # NOTE: radix.h / siphash.h / toeplitz.h are NOT copied verbatim — our
+ # cleaned PFLINUX versions live in module/include/compat/{net,crypto}/
+ # (BSD syntax like __bounded / _BYTE_ORDER does not compile in-kernel).
+}
+
+stage_c() { # relpath upstream -> module/compat|pf
+ local up="$1" dst="$2"
+ cp -f "$up" "$dst"
+}
+
+# port_c : first-time staging of an OpenBSD
+# .c file with deterministic transformations (all logged to PORT notes):
+# 1. all original #include lines -> single '#include ' (+ keep
+# none: pfvar is pulled by pfk.h chain when needed via -I)
+# 2. BSD wire struct renames (avoid Linux-uapi collisions):
+# ip6_hdr→pf_ip6_hdr, struct ip→pf_ip, tcphdr→pf_tcphdr,
+# udphdr→pf_udphdr, struct icmp→pf_icmp, icmp6_hdr→icmp6hdr
+# 3. BSD IFF_* flag names -> PFIFF_* (Linux owns IFF_*)
+# 4. sa_len/sin_len/six_len assignment statements commented out
+# 5. '#if NPFLOG > 0'-style option headers were never included (dropped)
+port_c() {
+ local up="$U/sys/$1" dst="$M/$2"
+ [ -f "$up" ] || { echo "no upstream $1" >&2; return 1; }
+ mkdir -p "$(dirname "$dst")"
+ if [ -f "$dst" ]; then echo "EXISTS: $2 (not re-staged; use --diff)"; return 0; fi
+ {
+ printf '/* PFLINUX port of OpenBSD 8.0 %s — see docs/porting-notes.md */\n' "$1"
+ printf '#include \n'
+ # keep everything after the last original #include (body)
+ awk 'BEGIN{last=0} /^#include/{last=NR} END{print last}' "$up" |
+ { read n; tail -n +$((n+1)) "$up"; }
+ } > "$dst.part"
+ sed -i -E \
+ -e 's/\bstruct ip6_hdr\b/struct pf_ip6_hdr/g' \
+ -e 's/\bstruct ip\b/struct pf_ip/g' \
+ -e 's/\bstruct tcphdr\b/struct pf_tcphdr/g' \
+ -e 's/\bstruct udphdr\b/struct pf_udphdr/g' \
+ -e 's/\bstruct icmp\b/struct pf_icmp/g' \
+ -e 's/\bstruct icmp6_hdr\b/struct icmp6hdr/g' \
+ -e 's/\bIFF_([A-Z0-9_]+)/PFIFF_\1/g' \
+ -e 's/\bIP_OPTIONS\b/PF_IP_OPTIONS/g' \
+ -e 's/\bIP_RECORD_ROUTE\b/PF_IP_RECORD_ROUTE/g' \
+ -e 's/\bIP_TIMESTAMP\b/PF_IP_TIMESTAMP/g' \
+ -e 's/->sa_len[[:space:]]*=[^;]*;/\/* PFLINUX sa_len: *\/;/g' \
+ -e 's/([a-z0-9_]*(sa|sin|six|sun)_len)[[:space:]]*=[^;]*;/\/* PFLINUX \1 *\/;/g' \
+ "$dst.part"
+ mv "$dst.part" "$dst"
+ log "port_c $1 -> $2 (includes→pfk.h; struct renames; sa_len nulled)"
+}
+
+PORTED_LIST='net/pf.c net/pf_ioctl.c net/pf_norm.c net/pf_if.c net/pf_lb.c
+net/pf_ruleset.c net/pf_table.c net/pf_osfp.c net/pf_syncookies.c
+net/ifq.c net/hfsc.c net/fq_codel.c net/if_pflog.c netinet/ip_divert.c'
+# NOTE: radix.c/rtable.c (ported by hand in T10 against our cleaned
+# compat/net/radix.h) and siphash/toeplitz/sha2 (own PFLINUX impls) are
+# deliberately NOT in the auto-port list.
+
+log() { mkdir -p "$(dirname "$LOG")"; printf '\n%s\n```sh\n%s\n```\n' "## $(date -Is) staging" "$*" >> "$LOG"; }
+
+cmd="${1:-stage}"
+case "$cmd" in
+ stage)
+ log "stage: headers + skeletons"
+ stage_hdrs
+ echo "headers staged: $(find "$M/include/net" "$M/include/compat" -type f | wc -l)"
+ ;;
+ port)
+ shift
+ for f in ${*:-$PORTED_LIST}; do
+ case "$f" in
+ net/pf.c|net/pf_ioctl.c|net/pf_norm.c|net/pf_if.c|net/pf_lb.c|\
+ net/pf_ruleset.c|net/pf_table.c|net/pf_osfp.c|net/pf_syncookies.c|\
+ net/ifq.c|net/hfsc.c|net/fq_codel.c|net/if_pflog.c)
+ port_c "$f" "pfsrc/${f##*/}";;
+ netinet/ip_divert.c)
+ port_c "$f" "pfsrc/ip_divert.c";;
+ esac
+ done
+ ;;
+ --diff)
+ [ -f "$U/$2" ] || { echo "no pristine $2"; exit 1; }
+ diff -u "$U/$2" "$M/$2" | head -80
+ ;;
+ *) echo "usage: stage-port.sh [stage|--diff relpath]"; exit 1;;
+esac
diff --git a/scripts/vendorize.sh b/scripts/vendorize.sh
index 7d74ba9..4d4a3ab 100755
--- a/scripts/vendorize.sh
+++ b/scripts/vendorize.sh
@@ -9,8 +9,9 @@ SYS_K=(net/pf.c net/pf_ioctl.c net/pf_norm.c net/pf_if.c net/pf_lb.c net/pf_rule
net/pf_table.c net/pf_osfp.c net/pf_syncookies.c net/pfvar.h net/pfvar_priv.h
net/if_pflog.c net/if_pflog.h net/ifq.c net/ifq.h net/hfsc.c net/hfsc.h
net/fq_codel.c net/fq_codel.h netinet/ip_divert.c netinet/ip_divert.h
- net/radix.c net/radix.h net/radix_node.h net/rtable.c net/rtable.h
- sys/tree.h sys/queue.h sys/param.h sys/hash.h)
+ net/radix.c net/radix.h net/rtable.c net/rtable.h net/toeplitz.c net/toeplitz.h
+ crypto/sha2.c crypto/sha2.h crypto/siphash.c crypto/siphash.h
+ sys/tree.h sys/queue.h sys/param.h sys/hash.h sys/_endian.h sys/_lock.h)
SRC_K=(sbin/pfctl/parse.y sbin/pfctl/pfctl.c sbin/pfctl/pfctl.h sbin/pfctl/pfctl_parser.c
sbin/pfctl/pfctl_parser.h sbin/pfctl/pfctl_optimize.c sbin/pfctl/pfctl_print.c
sbin/pfctl/pfctl_osfp.c sbin/pfctl/pfctl_queue.c sbin/pfctl/pfctl_radix.c
diff --git a/scripts/vm-create.sh b/scripts/vm-create.sh
new file mode 100755
index 0000000..50fe360
--- /dev/null
+++ b/scripts/vm-create.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+# vm-create.sh — build (or rebuild) the pftest-* libvirt lab on deb.
+# Topology + paths: lab/ips.env. Idempotent: pre-existing pftest-* domains,
+# disks and seeds are torn down and recreated; shared base image and data
+# networks are reused when already correct. Leave all VMs running at exit.
+#
+# --pf0-kernel=PATH direct kernel boot for pf0 (laptop path is rsynced to
+# deb:BOOT_DIR/bzImage; a deb-local path is used as-is).
+# cmdline: root=/dev/vda2 ro console=ttyS0
+# --pf0-initrd=PATH optional initrd alongside --pf0-kernel
+# --recreate-base force re-sync of alpine-base.qcow2 from _vendor
+# -h help
+set -euo pipefail
+REPO="$(cd "$(dirname "$0")/.." && pwd)"
+# shellcheck disable=SC1091
+. "$REPO/scripts/lab-lib.sh"
+
+PF0_KERNEL=""; PF0_INITRD=""; RECREATE_BASE=0
+for arg in "$@"; do
+ case $arg in
+ --pf0-kernel=*) PF0_KERNEL=${arg#*=}; [ -n "$PF0_KERNEL" ] || die "--pf0-kernel needs a value" ;;
+ --pf0-initrd=*) PF0_INITRD=${arg#*=} ;;
+ --recreate-base) RECREATE_BASE=1 ;;
+ -h|--help) sed -n '2,12p' "$0"; exit 0 ;;
+ *) die "unknown arg: $arg (-h for usage)" ;;
+ esac
+done
+
+lab_env
+command -v rsync >/dev/null || die "rsync missing on laptop"
+command -v genisoimage >/dev/null 2>&1 || true # iso is built on deb, not here
+
+host_prereqs
+ensure_networks
+lab_keypair
+base_image_sync
+
+# direct kernel boot: every VM boots via the image's own extracted kernel
+# (base image is not BIOS/UEFI bootable, see lab-lib.sh); --pf0-kernel
+# replaces pf0's kernel with a built bzImage (T6), keeping its root on vda2.
+ensure_guest_kernel
+DEFAULT_KB=$(default_kernelblock)
+PF0_KB="$DEFAULT_KB"
+if [ -n "$PF0_KERNEL" ]; then
+ deb "mkdir -p $BOOT_DIR"
+ KPATH="$PF0_KERNEL"
+ if [ -f "$PF0_KERNEL" ]; then
+ rsync -a -e "ssh ${SSH_OPTS[*]}" "$PF0_KERNEL" "$DEB_USER@$DEB:$BOOT_DIR/bzImage"
+ KPATH="$BOOT_DIR/bzImage"
+ fi
+ PF0_KB=" $KPATH"$'\n'" root=/dev/vda2 ro console=ttyS0,115200n8"
+ if [ -n "$PF0_INITRD" ]; then
+ IPATH="$PF0_INITRD"
+ if [ -f "$PF0_INITRD" ]; then
+ rsync -a -e "ssh ${SSH_OPTS[*]}" "$PF0_INITRD" "$DEB_USER@$DEB:$BOOT_DIR/initrd"
+ IPATH="$BOOT_DIR/initrd"
+ fi
+ PF0_KB=" $KPATH"$'\n'" $IPATH"$'\n'" root=/dev/vda2 ro console=ttyS0,115200n8"
+ fi
+ log "pf0 direct kernel boot override: $KPATH"
+fi
+
+# pf0 first: cli/srv/gw2 cloud-init needs pf0's transit+masq for pkgs
+create_domain pf0 "$PF0_KB"
+wait_ready pf0 420
+
+for a in cli srv gw2; do create_domain "$a" "$DEFAULT_KB"; done
+for a in cli srv gw2; do wait_ready "$a"; done
+
+packages_fixup
+deb_ssh_config
+laptop_ssh_config
+
+log "validate: ssh pf0 'ip -br a'"
+ssh "${SSH_OPTS[@]}" pf0 'ip -br a' || warn "ssh pf0 failed — check $LAPTOP_SSH_FRAG"
+log "LAB UP: aliases on laptop: ssh pf0|cli|srv|gw2 (ProxyJump $DEB_USER@$DEB)"
+deb "virsh list" || true
diff --git a/scripts/vm-deploy.sh b/scripts/vm-deploy.sh
new file mode 100755
index 0000000..c4a489e
--- /dev/null
+++ b/scripts/vm-deploy.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+# vm-deploy.sh — ship build artifacts laptop -> deb -> pf0.
+# Default sources (tolerated when absent): out/linux-*-bzImage / out/bzImage,
+# module/*.ko, tools/out/* (files or dirs). Explicit paths as args override.
+# deb landing zone: $DEPLOY_DIR (/var/lib/pflab/deploy); pf0 gets /opt/pf/.
+# Transfer into the guest uses rsync when the guest has it, else scp.
+# Exit 0 with a warning when there is nothing to deploy (T6/T7 call freely).
+set -euo pipefail
+REPO="$(cd "$(dirname "$0")/.." && pwd)"
+# shellcheck disable=SC1091
+. "$REPO/scripts/lab-lib.sh"
+lab_env
+
+cd "$REPO"
+FILES=()
+add() { # add — files only; dirs expanded
+ local p
+ for p in "$@"; do
+ if [ -d "$p" ]; then add "$p"/*
+ elif [ -f "$p" ]; then FILES+=("$p")
+ fi
+ done
+}
+if [ $# -gt 0 ]; then
+ add "$@"
+else
+ shopt -s nullglob
+ add out/linux-*-bzImage out/bzImage out/*.ko module/*.ko tools/out/*
+fi
+if [ ${#FILES[@]} -eq 0 ]; then
+ log "nothing to deploy (out/ bzImage, module/*.ko, tools/out/* all absent) — OK"
+ exit 0
+fi
+log "deploying ${#FILES[@]} artifact(s): ${FILES[*]#$REPO/}"
+
+vm_cmd "$(vm_ip pf0)" 'true' 2>/dev/null || die "pf0 unreachable — run ./scripts/vm-create.sh first"
+
+deb "mkdir -p $DEPLOY_DIR"
+rsync -a -e "ssh ${SSH_OPTS[*]}" "${FILES[@]}" "$DEB_USER@$DEB:$DEPLOY_DIR/"
+log "staged on deb: $DEPLOY_DIR"
+
+vm_cmd "$(vm_ip pf0)" 'mkdir -p /opt/pf'
+if deb "command -v rsync" >/dev/null 2>&1 && \
+ vm_cmd "$(vm_ip pf0)" 'command -v rsync' >/dev/null 2>&1; then
+ deb_cmd "rsync -a -e 'ssh -i $LAB_KEY_DEB ${SSH_OPTS[*]}' '$DEPLOY_DIR/' root@$(vm_ip pf0):/opt/pf/"
+else
+ # no rsync in guest: per-file scp
+ deb_cmd "for f in '$DEPLOY_DIR'/*; do scp -i $LAB_KEY_DEB ${SSH_OPTS[*]} -q \"\$f\" root@$(vm_ip pf0):/opt/pf/; done"
+fi
+log "pf0:/opt/pf ->"
+vm_cmd "$(vm_ip pf0)" 'ls -l /opt/pf'
diff --git a/scripts/vm-destroy.sh b/scripts/vm-destroy.sh
new file mode 100755
index 0000000..5c8ff19
--- /dev/null
+++ b/scripts/vm-destroy.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+# vm-destroy.sh — tear the lab down: pftest-* domains, their qcow2 disks,
+# seed ISOs/dirs, the pf-lan/pf-wan/pf-wan2 networks, and the generated
+# laptop ssh fragment. The shared alpine-base.qcow2 and 'default' network are
+# KEPT by default (re-create is then fast); --purge-base removes the base,
+# --purge-keys also drops the lab keypair on deb + laptop copies.
+# Never touches non-pftest domains or the 'default' network state.
+set -euo pipefail
+REPO="$(cd "$(dirname "$0")/.." && pwd)"
+# shellcheck disable=SC1091
+. "$REPO/scripts/lab-lib.sh"
+
+PURGE_BASE=0; PURGE_KEYS=0; QUIET=0
+for arg in "$@"; do
+ case $arg in
+ --purge-base) PURGE_BASE=1 ;;
+ --purge-keys) PURGE_KEYS=1 ;;
+ --quiet) QUIET=1 ;;
+ -h|--help) sed -n '2,8p' "$0"; exit 0 ;;
+ *) die "unknown arg: $arg (-h for usage)" ;;
+ esac
+done
+[ $QUIET = 1 ] && exec >/dev/null 2>&1
+
+lab_env
+deb true || { warn "deb unreachable; removing laptop artifacts only"; rm -f "$LAPTOP_SSH_FRAG"; exit 0; }
+
+for a in $VMS; do
+ name=$(vm_name "$a")
+ deb_cmd "virsh destroy $name 2>/dev/null; virsh undefine $name --nvram 2>/dev/null; virsh undefine $name 2>/dev/null; rm -f /var/lib/libvirt/qemu/nvram/$name*.raw; true"
+ deb_cmd "rm -rf '$SEED_DIR/$name' '$IMG_DIR/$name.qcow2' /tmp/$name.xml"
+ log "removed domain+disk+seed: $name"
+done
+rm -rf "$LAB_SEEDS"
+
+for n in "$NET_PF_LAN" "$NET_PF_WAN" "$NET_PF_WAN2"; do
+ deb_cmd "virsh net-destroy $n 2>/dev/null; virsh net-undefine $n 2>/dev/null; true"
+done
+log "removed networks: $NET_PF_LAN $NET_PF_WAN $NET_PF_WAN2 (default left as-is)"
+
+deb_cmd 'f=$HOME/.ssh/config; [ -f "$f" ] && sed -i "/# >>> pflab/,/# <<< pflab/d" "$f" || true'
+rm -f "$LAPTOP_SSH_FRAG" "$HOME/.ssh/known_hosts_pflab"
+log "removed generated ssh fragments (laptop + deb config blocks)"
+
+if [ $PURGE_BASE = 1 ]; then
+ deb "rm -f $BASE_IMG"
+ log "removed base image on deb"
+fi
+if [ $PURGE_KEYS = 1 ]; then
+ deb "rm -f $LAB_KEY_DEB $LAB_KEY_DEB.pub"
+ rm -f "$LAB_KEY_LAPTOP" "$LAB_KEY_LAPTOP.pub"
+ log "removed lab keypair (deb + laptop)"
+fi
+
+log "VERIFY state on deb:"
+deb 'virsh list --all; echo ---; virsh net-list --all; echo ---; ls -l /var/lib/libvirt/images/ /var/lib/libvirt/pflab/ 2>/dev/null || true'