diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 00000000..f0ccbc9a
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,2 @@
+[alias]
+xtask = "run --package xtask --"
\ No newline at end of file
diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml
new file mode 100644
index 00000000..345d671b
--- /dev/null
+++ b/.github/workflows/audit.yml
@@ -0,0 +1,32 @@
+name: Audit
+
+on:
+ push:
+ paths:
+ - '**/Cargo.toml'
+ - '**/Cargo.lock'
+ schedule:
+ - cron: '0 0 * * *'
+
+jobs:
+
+ rust-quality-gate:
+ name: Rust Quality Gate
+ runs-on: ubuntu-latest
+ permissions: write-all
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Install Rust toolchain
+ uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af
+ with:
+ profile: minimal
+ toolchain: stable
+ components: clippy
+ override: true
+
+ - name: Cargo audit
+ uses: actions-rs/audit-check@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0e44643e..009e2539 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -10,52 +10,15 @@ on:
jobs:
build:
runs-on: ubuntu-latest
- env:
- DOCKER: 1
steps:
- - uses: actions/checkout@v2
-
+ - uses: actions/checkout@v3
- name: Update version
run: sudo apt-get update
- name: Install Dependencies
- run: sudo ./configure.sh -yd
- - name: Configure PAM
run: |
- sudo bash -c 'echo "#%PAM-1.0
- auth [success=1 default=ignore] pam_permit.so
- auth requisite pam_permit.so
- auth required pam_permit.so
- account [success=1 default=ignore] pam_permit.so
- account requisite pam_permit.so
- account required pam_permit.so
- session [success=1 default=ignore] pam_permit.so
- session requisite pam_permit.so
- session required pam_permit.so" | tee /etc/pam.d/sr'
- - name: Build Project
- run: sudo -E make -e install
- - name: Run Project
- run: sr -h
- - name: Print capabilities with sr
- run: sr cat /proc/self/status
- rust-build:
- runs-on: ubuntu-latest
- env:
- working-directory: "role-manager"
- steps:
- - uses: actions/checkout@v2
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- override: true
- - name: rustup update
- run: rustup update
- - name: cargo version
- run: cargo version
- - name: Update version
- run: sudo apt-get update
- - name: Install Dependencies
- run: sudo ./configure.sh -yd
+ sudo ./configure.sh -yd
+ sudo cp /root/.cargo/bin/bpf-linker /usr/bin/
+ echo "/home/runner/.cargo/bin" >> $GITHUB_PATH
- name: Configure PAM
run: |
sudo bash -c 'echo "#%PAM-1.0
@@ -68,24 +31,15 @@ jobs:
session [success=1 default=ignore] pam_permit.so
session requisite pam_permit.so
session required pam_permit.so" | tee /etc/pam.d/sr'
- - name: Install sr tool
- run: sudo -E make -e install
- env:
- DEBUG: 1
- name: Add read access on config on rootasrole... Because Github Actions...
run: sudo chmod a+r /etc/security/rootasrole.xml
- name: print config
- run: |
- sr cat /etc/security/rootasrole.xml
+ run: cat /etc/security/rootasrole.xml
- name: getenv
run: env
- - name: sr getenv
- run: sr env
- - name: Print capabilities with sr
- run: sr cat /proc/self/status
- - name: Build Project
- run: cargo build --release
- working-directory: ${{ env.working-directory }}
- - name: Run Project
- run: cargo run --release -- -h
- working-directory: ${{ env.working-directory }}
\ No newline at end of file
+ - name: Install Project
+ run: sudo -E make -e install
+ - name: Run Sr
+ run: /usr/bin/sr -h
+ - name: Run Chsr
+ run: /usr/bin/chsr -h
\ No newline at end of file
diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml
index ee5a3a54..0ab1f023 100644
--- a/.github/workflows/quality.yml
+++ b/.github/workflows/quality.yml
@@ -21,116 +21,34 @@ on:
branches:
- 'main'
-permissions:
- contents: read
-
jobs:
- codacy-security-scan:
- permissions:
- contents: read # for actions/checkout to fetch code
- security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
- actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
- name: Codacy Security Scan
- runs-on: ubuntu-latest
- steps:
- # Checkout the repository to the GitHub Actions runner
- - name: Checkout code
- uses: actions/checkout@v3
-
- # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- - name: Run Codacy Analysis CLI
- uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b
- with:
- # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
- # You can also omit the token and run the tools that support default configurations
- project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
- verbose: true
- output: results.sarif
- format: sarif
- # Adjust severity of non-security issues
- gh-code-scanning-compat: true
- # Force 0 exit code to allow SARIF file generation
- # This will handover control about PR rejection to the GitHub side
- max-allowed-issues: 2147483647
- # Upload the SARIF file generated in the previous step
- - name: Upload SARIF results file
- uses: github/codeql-action/upload-sarif@v2
- with:
- sarif_file: results.sarif
rust-quality-gate:
name: Rust Quality Gate
- env:
- working-directory: "role-manager"
runs-on: ubuntu-latest
+ permissions: write-all
steps:
- name: Checkout code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- - name: Install Rust
- uses: actions-rs/toolchain@v1
+ - name: Install Rust toolchain
+ uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af #@v1
with:
+ profile: minimal
toolchain: stable
+ components: clippy
override: true
- - name: Build code
- run: cargo build --all --release
- working-directory: ${{ env.working-directory }}
-
- - name: Install required cargo
- run: cargo install clippy-sarif sarif-fmt
-
- - name: Run rust-clippy
- run:
- cargo clippy
- --all-features
- --message-format=json | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt
- continue-on-error: true
- working-directory: ${{ env.working-directory }}
-
- - name: Upload analysis results to GitHub
- uses: github/codeql-action/upload-sarif@v1
- with:
- sarif_file: ${{ env.working-directory }}/rust-clippy-results.sarif
- wait-for-processing: true
+ - name: Install Dependencies
+ run: sudo ./configure.sh -yd
- rust-format:
- name: Rust Formatting Gate
- env:
- working-directory: "role-manager"
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v2
-
- - name: Install Rust
- uses: actions-rs/toolchain@v1
+ # if pull request review only
+ - uses: mbrobbel/rustfmt-check@master
with:
- toolchain: stable
- override: true
- - name: Build code
- run: cargo build --all --release
- working-directory: ${{ env.working-directory }}
- - name: Format code with Rustfmt
- run: cargo fmt --all -- --check
- working-directory: ${{ env.working-directory }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+ continue-on-error: true #TODO: remove this line when rustfmt-check is fixed
- rust-security:
- name: Rust Security Gate
- env:
- working-directory: "role-manager"
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v2
-
- - name: Install Rust
- uses: actions-rs/toolchain@v1
+ - uses: actions-rs/clippy-check@v1
with:
- toolchain: stable
- override: true
-
- - name: Cargo audit
- run: cargo audit --json | tee cargo-audit.json
- working-directory: ${{ env.working-directory }}
- id: cargo-audit
\ No newline at end of file
+ token: ${{ secrets.GITHUB_TOKEN }}
+ args: --all-features
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index ae2e4025..fe6d3eb2 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -9,36 +9,8 @@ on:
- 'main'
jobs:
- criterion:
- runs-on: ubuntu-latest
-
- env:
- TEST: 1
- DEBUG: 1
- COV: 1
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Update version
- run: sudo apt-get update
- - name: Install Dependencies
- run: sudo -E ./configure.sh
- - name: Build Unit Tests
- run: make -e build_unit_test
- - name: Run Unit Tests
- run: ./bin/unit_test
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v3
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- with:
- gcov: true
rust-coverage:
runs-on: ubuntu-latest
- needs: criterion # cannot upload concurrenlty to codecov
- env:
- working-directory: role-manager
steps:
- name: Checkout code
uses: actions/checkout@v2
@@ -47,37 +19,31 @@ jobs:
uses: actions-rs/toolchain@v1
with:
toolchain: stable
+ components: llvm-tools-preview
override: true
- name: Install grcov
- working-directory: ${{ env.working-directory }}
run: cargo install grcov
- - name: Install llvm-tools-preview
- working-directory: ${{ env.working-directory }}
- run: rustup component add llvm-tools-preview
-
- - name: Build project for generating version.rs
- working-directory: ${{ env.working-directory }}
- run: cargo build
+ - name: Install Dependencies
+ run: sudo ./configure.sh -yd
- name: run tests with coverage
- working-directory: ${{ env.working-directory }}
run: cargo test
env:
+ RUST_LOG: debug
CARGO_INCREMENTAL: 0
RUSTFLAGS: '-Cinstrument-coverage'
LLVM_PROFILE_FILE: 'cargo-test-%p-%m.profraw'
continue-on-error: true
- name: generate report
- working-directory: ${{ env.working-directory }}
- run: grcov . --binary-path ./target/debug/deps/ -s . -t lcov --branch --ignore-not-existing --ignore '../*' --ignore "/*" -o target/debug/role-manager.lcov
+ run: grcov . --binary-path ./target/debug/deps/ -s . -t lcov --branch --ignore-not-existing --ignore '../*' --ignore "/*" -o target/debug/rootasrole.lcov
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
- file: role-manager/target/debug/role-manager.lcov
+ file: target/debug/rootasrole.lcov
flags: unittests
diff --git a/.gitignore b/.gitignore
index d07103e3..77bca196 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,6 +43,7 @@
*.su
*.idb
*.pdb
+*.sarif
# Kernel Module Compile Results
*.mod*
@@ -60,7 +61,7 @@ bin/
# Hidden folders (for Linux IDE)
/.idea/
*target/
-version.rs
+*/src/xml_version.rs
# Rust crates
Cargo.lock
diff --git a/.vscode/gdb_root.sh b/.vscode/gdb_root.sh
new file mode 100755
index 00000000..a6644d91
--- /dev/null
+++ b/.vscode/gdb_root.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+SELF_PATH=$(realpath -s "$0")
+
+if [[ "$SUDO_ASKPASS" = "$SELF_PATH" ]]; then
+ zenity --password --title="$1"
+else
+ exec env SUDO_ASKPASS="$SELF_PATH" sudo -A /usr/bin/gdb $@
+fi
diff --git a/.vscode/launch.json b/.vscode/launch.json
index fcbd543c..76ea54be 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -45,6 +45,7 @@
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
+ "miDebuggerPath": "${workspaceFolder}/.vscode/gdb_root.sh",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
@@ -56,23 +57,7 @@
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
- ]
- },
- {
- "type": "lldb",
- "request": "launch",
- "name": "Debug",
- "cargo": {
- "args": [
- "run"
- ],
- "filter": {
- "name": "role-manager",
- "kind": "bin"
- }
- },
- "args": [],
- "cwd": "${workspaceFolder}/role-manager/"
- }
+ ],
+ }
]
}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5c84b70a..07f87f89 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -27,11 +27,9 @@
"typeinfo": "c"
},
"rust-analyzer.linkedProjects": [
- "./role-manager/Cargo.toml",
- "./role-manager/Cargo.toml",
- "./role-manager/Cargo.toml",
- "./role-manager/Cargo.toml",
- "./role-manager/libs/sudoers_reader/Cargo.toml"
+ "sudoers-reader/Cargo.toml",
+ "Cargo.toml",
+ "./capable/Cargo.toml"
],
"c-cpp-flylint.clang.includePaths": [
"${workspaceFolder}/src"
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 23cebefc..ce4d4d7a 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -76,7 +76,11 @@
"build_unit_test"
],
"options": {
- "cwd": "${cwd}"
+ "cwd": "${workspaceFolder}",
+ "env": {
+ "GDB_DEBUG": "1",
+ "DEBUG": "1"
+ }
},
"problemMatcher": [
"$gcc"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 00000000..10aa0448
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,55 @@
+[workspace]
+members = ["xtask", "capable", "capable-common"]
+
+[package]
+name = "RootAsRole"
+version = "3.0.0-alpha.3"
+authors = ["Eddie Billoir "]
+edition = "2021"
+default-run = "sr"
+
+#[features]
+#cursive_lib = [ "cursive" ]
+#srlibs = [ "pam-client", "bitflags" ]
+
+[[bin]]
+name = "sr"
+path = "src/sr/main.rs"
+
+
+[[bin]]
+name = "chsr"
+path = "src/chsr/main.rs"
+
+[build-dependencies]
+reqwest = { version = "0.11.18", features = ["blocking", "json"] }
+pcre2 = "0.2.4"
+regex = "1.9.1"
+
+[dependencies]
+tracing = "0.1.37"
+tracing-subscriber = "0.3.16"
+libc = "0.2.139"
+semver = "1.0.18"
+nix = { version = "0.26.2", features = ["user"] }
+#sudoers-reader = { path = "sudoers-reader" }
+clap = { version = "4.3.0", features = ["derive"] }
+cursive = { version = "0.20.0", default-features = false, features = ["termion-backend"] }
+capctl = "0.2.3"
+pcre2 = "0.2.4"
+chrono = "0.4.26"
+sxd-document = "0.3.2"
+sxd-xpath = "0.4.2"
+serde = "1.0.185"
+ciborium = "0.2.1"
+glob = "0.3.1"
+pam-client = { version = "0.5.0" }
+bitflags = { version = "2.4.0" }
+shell-words = "1.1.0"
+syslog-tracing = "0.2.0"
+
+[dev-dependencies]
+env_logger = "*"
+test-log = { version = "0.2.12", features = ["trace"] }
+tracing = "0.1.37"
+tracing-subscriber = { version = "0.3.16", default-features = false, features = ["env-filter", "fmt"] }
diff --git a/Makefile b/Makefile
index e0f9794c..b86e1c27 100644
--- a/Makefile
+++ b/Makefile
@@ -1,74 +1,40 @@
-#Makefile for sr
-#Author: Rémi Venant, Eddie BILLOIR
-COMP = gcc
-
-SRC_DIR := src
-MANAGER_DIR := new_role_manager
-OBJ_DIR := obj
-BIN_DIR := bin
-TEST_DIR := tests/unit
-WARNINGS := -Wall -Wextra
-LIBCAP := -lcap -lcap-ng
-LIBPAM := -lpam -lpam_misc
-STDOPT=-std=c11
-GDB_D = $(if $(GDB_DEBUG), -DGDB_DEBUG,)
-DEBUGLD := $(if $(DEBUG),-g $(GDB_D),-pedantic -Werror)
-DEBUGCOMP := $(if $(DEBUG),$(DEBUGLD) -static-libasan,$(DEBUGLD))
-COVOPT := $(if $(COV),--coverage -fprofile-abs-path,)
-
-ALLOPT := $(STDOPT) $(WARNINGS) $(COVOPT)
-
-COMPOPTIONS = $(shell xml2-config --cflags) $(DEBUGCOMP) $(ALLOPT)
-SR_LDOPTIONS := $(LIBCAP) $(LIBPAM) $(shell xml2-config --libs) $(DEBUGLD) $(ALLOPT)
-LDUNIT := -lcriterion $(LIBCAP) -I$(SRC_DIR) $(shell xml2-config --libs) $(DEBUGLD) $(ALLOPT)
-COMPUNIT := -lcriterion $(LIBCAP) -I$(SRC_DIR) $(shell xml2-config --cflags) $(DEBUGCOMP) $(ALLOPT)
-EXECUTABLES := sr
-
-OBJS := $(addprefix $(SRC_DIR)/,capabilities.o user.o xml_manager.o env.o sr.o params.o command.o)
-BINS := $(addprefix $(BIN_DIR)/,sr)
-
-all: $(BINS)
-
-.PHONY: clean
-
-$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c | $(OBJ_DIR)
- $(COMP) -o $@ -c $< $(COMPOPTIONS)
-
-$(OBJ_DIR)/%.o : $(TEST_DIR)/%.c | $(OBJ_DIR)
- $(COMP) -o $@ -c $< $(COMPUNIT)
-
-$(OBJS): | $(OBJ_DIR)
-
-$(OBJ_DIR):
- mkdir $(OBJ_DIR)
-
-$(BIN_DIR)/sr: $(addprefix $(OBJ_DIR)/,capabilities.o xml_manager.o user.o env.o sr.o params.o command.o) | $(BIN_DIR)
- $(COMP) -o $@ $^ $(SR_LDOPTIONS)
-
-$(BIN_DIR)/unit_test: $(addprefix $(OBJ_DIR)/test_,xml_manager.o command.o params.o capabilities.o env.o) | $(BIN_DIR)
- $(COMP) -o $@ $^ $(LDUNIT)
+CARGO ?= /usr/bin/cargo
+PROFILE ?= release
+RELEASE = $(if $(filter $(PROFILE),release),--release,)
+BIN_DIR := target/$(PROFILE)
+SR_VERSION = $(shell xmllint --xpath "string(/rootasrole/@version)" resources/rootasrole.xml)
+BINS := $(addprefix $(BIN_DIR)/,sr chsr capable)
+.PHONY: $(BIN_DIR)/sr $(BIN_DIR)/chsr
+$(BIN_DIR)/sr:
+ cargo build $(RELEASE) --bin sr
+
+$(BIN_DIR)/chsr:
+ cargo build $(RELEASE) --bin chsr
+
+$(BIN_DIR)/capable:
+ cargo xtask build-ebpf $(RELEASE)
+ cargo build --package capable $(RELEASE)
$(BINS): | $(BIN_DIR)
$(BIN_DIR):
- mkdir $(BIN_DIR)
+ mkdir -p $(BIN_DIR)
-#run as root
-install: $(BINS)
- cp $(BINS) /usr/bin
- setcap "=p" /usr/bin/sr
+build: $(BINS)
-build_unit_test: clean $(BIN_DIR)/unit_test
+install: build
+ cp -f $(BINS) /usr/bin
+ setcap "=p" /usr/bin/sr
-unit_test: build_unit_test
- $(BIN_DIR)/unit_test --verbose=1
+test:
+ cargo test
uninstall:
rm -f /usr/bin/sr
+ rm -f /usr/bin/chsr
rm -f /usr/bin/capable
chattr -i /etc/security/rootasrole.xml
rm -f /etc/security/rootasrole.xml
clean:
- @rm -rf $(BIN_DIR) $(OBJ_DIR) ebpf/$(BIN_DIR) ebpf/$(OBJ_DIR)
-
+ cargo clean
\ No newline at end of file
diff --git a/Makefile.toml.off b/Makefile.toml.off
new file mode 100644
index 00000000..1cfa231f
--- /dev/null
+++ b/Makefile.toml.off
@@ -0,0 +1,25 @@
+[tasks.build_release]
+command = "cargo"
+args = ["build", "--release"]
+env = { "SR_BINARY" = "${CARGO_MAKE_WORKING_DIRECTORY}/target/release/sr" }
+
+[tasks.build_debug]
+command = "cargo"
+args = ["build", "--debug"]
+env = { "SR_BINARY" = "${CARGO_MAKE_WORKING_DIRECTORY}/target/debug/sr" }
+
+[tasks.setcap]
+command = "/usr/bin/setcap"
+args = ["=pi", "${INSTALL_BIN}"]
+
+[tasks.cp]
+command = "/usr/bin/cp"
+args = ["${SR_BINARY}", "${INSTALL_BIN}"]
+
+[tasks.release]
+dependencies = ["build_release", "cp", "setcap", ]
+env = { "INSTALL_BIN" = "/usr/bin/sr" }
+
+[tasks.debug]
+dependencies = ["build_debug", "setcap", ]
+env = { "INSTALL_BIN" = "${CARGO_MAKE_WORKING_DIRECTORY}/target/debug/sr" }
\ No newline at end of file
diff --git a/README.md b/README.md
index eb63415a..a203b037 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,6 @@
-
@@ -16,43 +15,93 @@
-# RootAsRole (V3.0-alpha.1) : a secure alternative to sudo/su on Linux systems
+# RootAsRole (V3.0.0-alpha.3) : a secure alternative to sudo/su on Linux systems
-A role-based access control tool for administrative tasks on Linux. This tool tries to convince the least privilege and ease of use. We design this tool to being least privilege and least vulnerability prone by default.
+This tool allows you to configure your privilege access management more securely on a single operating system.
+
+Unlike sudo, this project sets the principle least privilege on its core features. Like sudo, this project wants to be usable. More than sudo, we care about configurators, and we try to warn configurators about dangerous manipulations.
+
+By using a role-based access control model, this project allows us to better manage administrative tasks. With this project, you could distribute privileges and prevent them from escalating directly. Unlike sudo does, we don't want to give entire privileges for any insignificant administrative task, so you could configure it easily with `capable` command.
## Installation
### How to Build
+Requirement: rustc >= 1.70.0
+
1. git clone
2. cd RootAsRole
3. sudo sh ./configure.sh
- 4. make
- 5. sudo make install
+ 4. sudo make install
+
+> [!WARNING]
+> **This installation process gives by default the entire privileges set for the user which execute sudo. This means that the user which install this program will be privileged.**
+
+### Usage
+
+
+Execute privileged commands with a role-based access control system
+
+Usage: sr [OPTIONS] [COMMAND]...
+
+Arguments:
+ [COMMAND]... Command to execute
+
+Options:
+ -r, --role <ROLE> Role to select
+ -i, --info Display rights of executor
+ -h, --help Print help (see more with '--help')
+ -V, --version Print version
+
+
+If you're used to using the sudo tool, and you can't change your habit, you could perform an alias :
+```sh
+alias sudo="sr"
+```
### How to Configure
-Our role manager is currently under development. But you can manually execute these commands :
+To configure this program you could use the `chsr` command.
+
+
+Configure Roles for RootAsRole
+
+Usage: chsr [COMMAND]
+
+Commands:
+ list List all roles
+ newrole Create a new role, you can add users, groups, tasks. You can assign tasks through the command "addtask"
+ grant You can grant users/groups to role
+ revoke You can revoke users/groups from role
+ addtask Add a task to a role, you can add commands and capabilities
+ deltask Delete a task from a role
+ delrole Delete a role, this is not reversible
+ config You could configure options for all roles, specific role, or specific task
+ import NOT IMPLEMENTED: Import sudoers file
+ help Print this message or the help of the given subcommand(s)
+
+Options:
+ -h, --help Print help (see more with '--help')
+ -V, --version Print version
+
+
+You could also use the fancy TUI configuration manager :
+
+![Chsr TUI](assets/chsr-tui.png)
+
+This role manager is currently under development and does not provide entire configuration edition. So you can manually execute these commands :
```sh
sr chattr -i /etc/security/rootasrole.xml
sr nano /etc/security/rootasrole.xml
```
-With the new role management features, you will be able to restrict the responsibilities of configurators, but this remains dangerous and there is still a contract of trust with them.
+This will remove immutable bit flag on the configuration and open text editor for the configuration file.
-However, today, you can start to configure this tool with the rootasrole.xml file configuration. Some examples are commented on the preinstalled configuration file.
+### How to find out the privileges needed for your command
-### Usage
+Use `capable` program, it will listen every capabilities requests and display them to you.
-```txt
-Usage: sr [options] [command [args]]
-Options:
- -r, --role Role to use
- -i, --info Display rights of executor
- -v, --version Display version
- -h, --help Display this help
-```
## Feedback
@@ -85,8 +134,8 @@ As you may know with this RBAC model, it is possible for multiple roles to refer
1. wildcarded command path is more precise than wildcarded command path and regex args
1. wildcarded command path and regex args is more precise than complete wildcard
1. A role granting no capability is less privileged than one granting at least one capability
- 1. A role granting no "ADMIN" capability is less privileged than one granting "ADMIN" capability
- 1. A role granting the "ADMIN" capability is less privileged than one granting all capabilities.
+ 1. A role granting no insecure capability is less privileged than one at least one insecure capability
+ 1. A role granting insecure capability is less privileged than one granting all capabilities.
1. A role without setuid is less privileged than one has setuid.
1. if no root is disabled, a role without 'root' setuid is less privileged than a role with 'root' setuid
1. A role without setgid is less privileged than one has setgid.
@@ -98,7 +147,7 @@ As you may know with this RBAC model, it is possible for multiple roles to refer
After these step, if two roles are conflicting, these roles are considered equal (only the environment variables are different), so configurator is being warned that roles could be in conflict and these could not be reached without specifing precisely the role to choose (with `--role` option). In such cases, we highly recommend to review the design of the configured access control.
-Regarding the (vii),(viii), and (ix) points, the choice of least privilege is somewhat arbitrary. We are currently working on a explaination on a paper.
+Regarding the (vii),(viii), and (ix) points, the insecure criteria is somewhat arbitrary. We are working on a explaination on a paper.
## Tested Platforms
@@ -108,18 +157,12 @@ Our module has been tested on:
* Debian>=10
* ArchLinux
-After the installation you will find a file called rootasrole.xml in the /etc/security directory. You should configure this file in order to define the set of roles and assign them to users or group of users on your system. Once configuration is done, a user can assume a role using the ‘sr’ tool that is installed with our package.
+After the installation you will find a file called rootasrole.xml in the /etc/security directory. You could configure it with `chsr` command or you could configure this file in order to define the set of roles and assign them to users or group of users on your system. Once configuration is done, a user can assume a role using the ‘sr’ tool that is installed with our package.
## Capable Tool
Since V2.0 of RootAsRole, we created a new tool that permits to retrieve capabilities asked by a program or a service. This can be very important when a user wants to configure the sr tool in order to inject the capabilities requested by a program. Please note that you should pay attention to the output of the tool, especially with regards the cap_sys_admin capability. In most cases, programs don't need this capability but we show it because this what Linux kernel returns to the capable tool.
-For more information please see [Here](https://github.com/SamerW/RootAsRole/tree/master/ebpf)
-
-## Role Manager
-
-Since V2.3 We created a set of tools that allow to add/edit/delete roles without ncessarily needs to edit XML file manaualy.
-For more information please check here [Here](https://github.com/SamerW/RootAsRole/tree/master/role-manager)
## [Motivations and Some Working Scenarios](https://github.com/SamerW/RootAsRole/wiki/Motivations-and-Some-Working-Scenarios)
diff --git a/assets/chsr-tui.png b/assets/chsr-tui.png
new file mode 100644
index 00000000..2ba1f883
Binary files /dev/null and b/assets/chsr-tui.png differ
diff --git a/book/.gitignore b/book/.gitignore
new file mode 100644
index 00000000..7585238e
--- /dev/null
+++ b/book/.gitignore
@@ -0,0 +1 @@
+book
diff --git a/book/book.toml b/book/book.toml
new file mode 100644
index 00000000..4eb2e729
--- /dev/null
+++ b/book/book.toml
@@ -0,0 +1,16 @@
+[book]
+authors = ["LeChatP"]
+language = "en"
+multilingual = false
+src = "src"
+title = "RootAsRole Guide Book"
+description = "A Book for understanding RootAsRole concepts and how to use it"
+
+[output.html]
+git-repository-url = "https://github.com/LeChatP/RootAsRole/tree/master/book"
+edit-url-template = "https://github.com/LeChatP/RootAsRole/edit/master/book/{path}"
+
+
+[preprocessor.graphviz]
+command = "mdbook-graphviz"
+output-to-file = false
\ No newline at end of file
diff --git a/book/src/README.md b/book/src/README.md
new file mode 100644
index 00000000..cdedfc3f
--- /dev/null
+++ b/book/src/README.md
@@ -0,0 +1,17 @@
+# Introduction
+
+**RootAsRole** is a prject to allow Linux/Unix administrators to delegate their administrative tasks access rights to users. This tool allows you to configure your privilege access management more securely on a single operating system.
+
+Unlike sudo, this project sets the principle least privilege on its core features. Like sudo, this project wants to be usable. More than sudo, we care about configurators, and we try to warn configurators about dangerous manipulations.
+
+By using a role-based access control model, this project allows us to better manage administrative tasks. With this project, you could distribute privileges and prevent them from escalating directly. Unlike sudo does, we don't want to give entire privileges for any insignificant administrative task, so you could configure it easily with `chsr` command. To find out which capability is needed for a administrative command, we provide the `capable` command. With these two tools, administrators could respect the least privilege principle on their system.
+
+What we offer that sudo don't :
+* [Linux Capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) managed and simplified
+* [A structured access control model based on Roles](https://dl.acm.org/doi/10.1145/501978.501980)
+* Command matching based on commonly-used open-source libraries
+ * [glob](https://docs.rs/glob/latest/glob/) for binary path
+ * [PCRE2](https://www.pcre.org/) for command arguments
+* Separation of duties.
+* Configuration file formatted in XML and with DTD Schema Validation.
+
diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md
new file mode 100644
index 00000000..09949bb0
--- /dev/null
+++ b/book/src/SUMMARY.md
@@ -0,0 +1,39 @@
+# Summary
+
+[Introduction](README.md)
+
+# User Guide
+
+- [Installation](guide/installation.md)
+- [Use RootAsRole](guide/use.md)
+- [Configure RootAsRole](guide/configure.md)
+
+# Knowledge Guide
+
+- [Why you need to use Linux Capabilities](knowledge/linux_capabilities.md)
+- [Why you need to use Role-Based Access Model](knowledge/rbac.md)
+- [Static/Dynamic Separation of Duties notion](knowledge/sod.md)
+- [How does work role hierarchy feature](knowledge/role_hierarchy.md)
+- [RootAsRole Command matching](knowledge/command_match.md)
+- [What is eBPF ?](knowledge/ebpf.md)
+
+# Reference Guide
+
+- [`sr` Command Line Tool](sr/README.md)
+- [`chsr` Terminal User Interface](chsr/tui.md)
+- [`chsr` Command Line Tool](chsr/README.md)
+ - [newrole](chsr/newrole.md)
+ - [grant](chsr/grant.md)
+ - [revoke](chsr/revoke.md)
+ - [addtask](chsr/addtask.md)
+ - [deltask](chsr/deltask.md)
+ - [delrole](chsr/delrole.md)
+ - [config](chsr/config.md)
+ - [import](chsr/import.md)
+
+- [Continuous Integration](continuous-integration.md)
+- [How to contribute](dev/CONTRIBUTE.md)
+
+-----------
+
+[Contributors](misc/contributors.md)
\ No newline at end of file
diff --git a/book/src/chsr/README.md b/book/src/chsr/README.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/README.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/addtask.md b/book/src/chsr/addtask.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/addtask.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/config.md b/book/src/chsr/config.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/config.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/delrole.md b/book/src/chsr/delrole.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/delrole.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/deltask.md b/book/src/chsr/deltask.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/deltask.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/grant.md b/book/src/chsr/grant.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/grant.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/import.md b/book/src/chsr/import.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/import.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/newrole.md b/book/src/chsr/newrole.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/newrole.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/revoke.md b/book/src/chsr/revoke.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/revoke.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/chsr/tui.md b/book/src/chsr/tui.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/chsr/tui.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/continuous-integration.md b/book/src/continuous-integration.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/continuous-integration.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/dev/CONTRIBUTE.md b/book/src/dev/CONTRIBUTE.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/dev/CONTRIBUTE.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/dev/README.md b/book/src/dev/README.md
new file mode 100644
index 00000000..35c74211
--- /dev/null
+++ b/book/src/dev/README.md
@@ -0,0 +1 @@
+# For Developers
diff --git a/book/src/dev/backends.md b/book/src/dev/backends.md
new file mode 100644
index 00000000..bf154dc6
--- /dev/null
+++ b/book/src/dev/backends.md
@@ -0,0 +1 @@
+# Alternative Backends
diff --git a/book/src/dev/preprocessors.md b/book/src/dev/preprocessors.md
new file mode 100644
index 00000000..eafd8949
--- /dev/null
+++ b/book/src/dev/preprocessors.md
@@ -0,0 +1 @@
+# Preprocessors
diff --git a/book/src/guide/configure.md b/book/src/guide/configure.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/guide/configure.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/guide/installation.md b/book/src/guide/installation.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/guide/installation.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/guide/use.md b/book/src/guide/use.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/guide/use.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/command_match.md b/book/src/knowledge/command_match.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/command_match.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/ebpf.md b/book/src/knowledge/ebpf.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/ebpf.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/linux_capabilities.md b/book/src/knowledge/linux_capabilities.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/linux_capabilities.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/rbac.md b/book/src/knowledge/rbac.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/rbac.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/role_hierarchy.md b/book/src/knowledge/role_hierarchy.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/role_hierarchy.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/knowledge/sod.md b/book/src/knowledge/sod.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/knowledge/sod.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/book/src/misc/contributors.md b/book/src/misc/contributors.md
new file mode 100644
index 00000000..9f93d8b0
--- /dev/null
+++ b/book/src/misc/contributors.md
@@ -0,0 +1 @@
+# Incoming
\ No newline at end of file
diff --git a/role-manager/libs/sudoers_reader/src/alias.rs b/book/src/sr/README.md
similarity index 100%
rename from role-manager/libs/sudoers_reader/src/alias.rs
rename to book/src/sr/README.md
diff --git a/build.rs b/build.rs
new file mode 100644
index 00000000..9e979a41
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,200 @@
+use pcre2::bytes::RegexBuilder;
+use std::error::Error;
+use std::fs::File;
+use std::io::{BufRead, BufReader, Write};
+
+use std::process::Command;
+
+fn write_version<'a>(f: &'a mut File, xml_contents: &'a str) -> Result<&'a str, Box> {
+ let package_version = xml_contents
+ .split("::from("Version not found"))?
+ .split('"')
+ .next()
+ .ok_or(Box::::from("Version not found"))?;
+ f.write_all(
+ format!(
+ "pub const PACKAGE_VERSION: &'static str = \"{}\";\n",
+ package_version
+ )
+ .as_bytes(),
+ )?;
+ Ok(package_version)
+}
+
+fn write_dtd(f: &mut File, xml_contents: &str) -> Result<(), Box> {
+ let mut dtd = xml_contents
+ .split("?>")
+ .nth(1)
+ .ok_or(Box::::from("DTD not found"))?
+ .split("]>")
+ .next()
+ .ok_or(Box::::from("DTD not found"))?
+ .to_string();
+ dtd.push_str("]>");
+
+ f.write_all(
+ format!(
+ "pub const DTD: &'static str = \"{}\n\";\n",
+ dtd.replace('"', "\\\"")
+ )
+ .as_bytes(),
+ )
+ .map_err(|e| e.into())
+}
+
+fn set_cargo_version(package_version: &str, file: &str) -> Result<(), Box> {
+ let cargo_toml = File::open(std::path::Path::new(file)).expect("Cargo.toml not found");
+ let reader = BufReader::new(cargo_toml);
+ let lines = reader.lines().map(|l| l.unwrap()).collect::>();
+ let mut cargo_toml = File::create(std::path::Path::new(file)).expect("Cargo.toml not found");
+ for line in lines {
+ if line.starts_with("version") {
+ writeln!(cargo_toml, "version = \"{}\"", package_version)?;
+ } else {
+ writeln!(cargo_toml, "{}", line)?;
+ }
+ }
+ cargo_toml.sync_all()?;
+ Ok(())
+}
+
+fn write_doc(f: &mut File) -> Result<(), Box> {
+ let docresp = reqwest::blocking::get(
+ "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/plain/man7/capabilities.7",
+ )
+ .expect("request failed");
+ let haystack = docresp.text()?;
+
+ //write to new temporary file
+ let temp = std::path::Path::new("temp.7");
+ let mut tempf = File::create(temp)?;
+ tempf.write_all(haystack.as_bytes())?;
+ tempf.flush()?;
+ //now execute man command to convert to ascii
+ let res = String::from_utf8(
+ Command::new("/usr/bin/man")
+ .args(["--nh", "--nj", "-al", "-P", "/usr/bin/cat", "temp.7"])
+ .output()?
+ .stdout,
+ )?;
+ //delete temp file
+ std::fs::remove_file(temp)?;
+ //now parse the output
+ let mut re = RegexBuilder::new();
+ re.multi_line(true);
+ let re = re.build(r"^ (CAP_[A-Z_]+)\K((?!^ CAP_[A-Z_]+|^ Past).|\R)+")?;
+ let spacere = regex::Regex::new(r" +")?;
+ f.write_all(
+ r#"use capctl::Cap;
+"#
+ .as_bytes(),
+ )?;
+ f.write_all(
+ r#"#[rustfmt::skip]
+pub fn get_capability_description(cap : &Cap) -> &'static str {
+ match *cap {
+"#
+ .as_bytes(),
+ )?;
+ let mut caplist = Vec::new();
+ for cap in re.captures_iter(res.as_bytes()) {
+ let cap = cap?;
+ let name = std::str::from_utf8(cap.get(1).unwrap().as_bytes())?;
+ if caplist.contains(&name) {
+ continue;
+ }
+ caplist.push(name);
+ let mut desc = std::string::String::from_utf8(cap.get(0).unwrap().as_bytes().to_vec())?;
+ desc = spacere.replace_all(&desc, " ").to_string();
+ let desc = desc.trim().to_string();
+ f.write_all(
+ format!(
+ " Cap::{} => r#\"{}\"#,\n",
+ name.replace("CAP_", ""),
+ desc
+ )
+ .as_bytes(),
+ )?;
+ }
+ f.write_all(
+ r#" _ => "Unknown capability",
+ }
+}"#
+ .as_bytes(),
+ )?;
+ Ok(())
+}
+
+fn set_readme_version(package_version: &str, file: &str) -> Result<(), Box> {
+ let readme = File::open(std::path::Path::new(file)).expect("README.md not found");
+ let reader = BufReader::new(readme);
+ let lines = reader.lines().map(|l| l.unwrap()).collect::>();
+ let mut readme = File::create(std::path::Path::new(file)).expect("README.md not found");
+ for line in lines {
+ if line.starts_with("# RootAsRole (V") {
+ let mut s = line.split("(V").nth(0).unwrap().to_string();
+ let end = line.split(')').nth(1).unwrap();
+ s.push_str(&format!("(V{}){}", package_version, end));
+ writeln!(readme, "{}", s)?;
+ } else {
+ writeln!(readme, "{}", line)?;
+ }
+ }
+ readme.sync_all()?;
+ Ok(())
+}
+
+fn main() {
+ println!("cargo:rerun-if-changed=resources/rootasrole.xml");
+ println!("cargo:rerun-if-changed=build.rs");
+ let caps_path = std::path::Path::new("src").join("descriptions.rs");
+ let mut capsf = File::create(caps_path).unwrap();
+ capsf
+ .write_all(b"// This file is generated by build.rs\n")
+ .unwrap();
+ capsf
+ .write_all(b"// Do not edit this file directly\n")
+ .unwrap();
+ capsf
+ .write_all(b"// Instead edit build.rs and run cargo build\n")
+ .unwrap();
+ write_doc(&mut capsf).unwrap();
+ capsf.flush().unwrap();
+ let cargo_toml = include_str!("resources/rootasrole.xml");
+ let dest_path = std::path::Path::new("src").join("xml_version.rs");
+ let mut f = File::create(dest_path).unwrap();
+ f.write_all(b"// This file is generated by build.rs\n")
+ .unwrap();
+ f.write_all(b"// Do not edit this file directly\n").unwrap();
+ f.write_all(b"// Instead edit build.rs and run cargo build\n")
+ .unwrap();
+ match write_version(&mut f, cargo_toml) {
+ Ok(package_version) => {
+ if let Err(err) = set_cargo_version(package_version, "Cargo.toml") {
+ eprintln!("cargo:warning={}", err);
+ }
+ if let Err(err) = set_cargo_version(package_version, "capable/Cargo.toml") {
+ eprintln!("cargo:warning={}", err);
+ }
+ if let Err(err) = set_cargo_version(package_version, "capable-ebpf/Cargo.toml") {
+ eprintln!("cargo:warning={}", err);
+ }
+ if let Err(err) = set_cargo_version(package_version, "xtask/Cargo.toml") {
+ eprintln!("cargo:warning={}", err);
+ }
+ if let Err(err) = set_readme_version(package_version, "README.md") {
+ eprintln!("cargo:warning={}", err);
+ }
+ }
+ Err(err) => {
+ eprintln!("cargo:warning={}", err);
+ }
+ }
+ if let Err(err) = write_dtd(&mut f, cargo_toml) {
+ eprintln!("cargo:warning={}", err);
+ }
+
+ f.flush().unwrap();
+}
diff --git a/capable-common/Cargo.toml b/capable-common/Cargo.toml
new file mode 100644
index 00000000..06eb4bf9
--- /dev/null
+++ b/capable-common/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "capable-common"
+version = "0.1.0"
+edition = "2021"
+
+[features]
+default = []
+user = ["aya"]
+
+[dependencies]
+aya = { git = "https://github.com/aya-rs/aya", optional = true }
+
+[lib]
+path = "src/lib.rs"
diff --git a/capable-common/src/lib.rs b/capable-common/src/lib.rs
new file mode 100644
index 00000000..0c9ac1ac
--- /dev/null
+++ b/capable-common/src/lib.rs
@@ -0,0 +1 @@
+#![no_std]
diff --git a/capable-ebpf/.cargo/config.toml b/capable-ebpf/.cargo/config.toml
new file mode 100644
index 00000000..4302a7f1
--- /dev/null
+++ b/capable-ebpf/.cargo/config.toml
@@ -0,0 +1,6 @@
+[build]
+target-dir = "../target"
+target = "bpfel-unknown-none"
+
+[unstable]
+build-std = ["core"]
diff --git a/capable-ebpf/.vim/coc-settings.json b/capable-ebpf/.vim/coc-settings.json
new file mode 100644
index 00000000..e2211a64
--- /dev/null
+++ b/capable-ebpf/.vim/coc-settings.json
@@ -0,0 +1,4 @@
+{
+ "rust-analyzer.cargo.target": "bpfel-unknown-none",
+ "rust-analyzer.checkOnSave.allTargets": false
+}
diff --git a/capable-ebpf/.vscode/settings.json b/capable-ebpf/.vscode/settings.json
new file mode 100644
index 00000000..e2211a64
--- /dev/null
+++ b/capable-ebpf/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "rust-analyzer.cargo.target": "bpfel-unknown-none",
+ "rust-analyzer.checkOnSave.allTargets": false
+}
diff --git a/capable-ebpf/Cargo.toml b/capable-ebpf/Cargo.toml
new file mode 100644
index 00000000..a7c76057
--- /dev/null
+++ b/capable-ebpf/Cargo.toml
@@ -0,0 +1,32 @@
+[package]
+name = "capable-ebpf"
+version = "3.0.0-alpha.3"
+edition = "2021"
+
+[dependencies]
+aya-bpf = { git = "https://github.com/aya-rs/aya" }
+aya-log-ebpf = { git = "https://github.com/aya-rs/aya" }
+capable-common = { path = "../capable-common" }
+
+[[bin]]
+name = "capable"
+path = "src/main.rs"
+
+[profile.dev]
+opt-level = 3
+debug = false
+debug-assertions = false
+overflow-checks = false
+lto = true
+panic = "abort"
+incremental = false
+codegen-units = 1
+rpath = false
+
+[profile.release]
+lto = true
+panic = "abort"
+codegen-units = 1
+
+[workspace]
+members = []
diff --git a/capable-ebpf/rust-toolchain.toml b/capable-ebpf/rust-toolchain.toml
new file mode 100644
index 00000000..24ce3918
--- /dev/null
+++ b/capable-ebpf/rust-toolchain.toml
@@ -0,0 +1,13 @@
+[toolchain]
+channel = "nightly"
+# The source code of rustc, provided by the rust-src component, is needed for
+# building eBPF programs.
+components = [
+ "cargo",
+ "clippy",
+ "rust-docs",
+ "rust-src",
+ "rust-std",
+ "rustc",
+ "rustfmt",
+]
diff --git a/capable-ebpf/src/main.rs b/capable-ebpf/src/main.rs
new file mode 100644
index 00000000..9be1db9a
--- /dev/null
+++ b/capable-ebpf/src/main.rs
@@ -0,0 +1,81 @@
+#![no_std]
+#![no_main]
+
+
+#[allow(non_upper_case_globals)]
+#[allow(non_snake_case)]
+#[allow(non_camel_case_types)]
+#[allow(dead_code)]
+mod vmlinux;
+
+use aya_bpf::{macros::{kprobe,map}, maps::HashMap, programs::ProbeContext, helpers::{bpf_get_current_task, bpf_get_current_uid_gid, bpf_probe_read_kernel}};
+use vmlinux::{task_struct, nsproxy, pid_namespace, ns_common};
+
+const MAX_PID : u32 = 4*1024*1024;
+
+type Key = i32;
+type TaskStructPtr = *mut task_struct;
+
+#[map]
+static KALLSYMS_MAP: HashMap = HashMap::with_max_entries(MAX_PID,0);
+#[map]
+static CAPABILITIES_MAP: HashMap = HashMap::with_max_entries(MAX_PID,0);
+#[map]
+static UID_GID_MAP: HashMap = HashMap::with_max_entries(MAX_PID,0);
+#[map]
+static PPID_MAP: HashMap = HashMap::with_max_entries(MAX_PID,0);
+#[map]
+static PNSID_NSID_MAP: HashMap = HashMap::with_max_entries(MAX_PID,0);
+
+#[kprobe]
+pub fn capable(ctx: ProbeContext) -> u32 {
+ match try_capable(ctx) {
+ Ok(ret) => ret,
+ Err(ret) => ret as u32,
+ }
+}
+
+fn try_capable(ctx: ProbeContext) -> Result {
+ unsafe {
+ let task: TaskStructPtr = bpf_get_current_task() as TaskStructPtr;
+ let task = bpf_probe_read_kernel(&task)?;
+ let ppid: i32 = get_ppid(task)?;
+ let pid: i32 = bpf_probe_read_kernel(&(*task).pid)?;
+ let cap: u64 = ctx.arg(3).unwrap();
+ let uid: u64 = bpf_get_current_uid_gid();
+ let capval = CAPABILITIES_MAP.get_ptr_mut(&pid).unwrap_or(&mut 0);
+ let pinum_inum :u64 = Into::::into(get_parent_ns_inode(task)?)<<32 | Into::::into(get_ns_inode(task)?);
+ UID_GID_MAP.insert(&pid, &uid,0).expect("failed to insert uid");
+ PNSID_NSID_MAP.insert(&pid, &pinum_inum,0).expect("failed to insert pnsid");
+ PPID_MAP.insert(&pid, &ppid,0).expect("failed to insert ppid");
+ *capval |= cap;
+ CAPABILITIES_MAP.insert(&pid, &*capval,0).expect("failed to insert cap");
+ }
+ Ok(0)
+}
+
+unsafe fn get_ppid(task : TaskStructPtr) -> Result {
+ let parent_task: TaskStructPtr = get_parent_task(task)?;
+ return bpf_probe_read_kernel(&(*parent_task).pid);
+}
+
+unsafe fn get_parent_task(task : TaskStructPtr) -> Result {
+ return bpf_probe_read_kernel(&(*task).real_parent);
+}
+
+unsafe fn get_parent_ns_inode(task : TaskStructPtr) -> Result {
+ let parent_task: TaskStructPtr = get_parent_task(task)?;
+ return get_ns_inode(parent_task);
+}
+
+unsafe fn get_ns_inode(task : TaskStructPtr) -> Result {
+ let nsp: *mut nsproxy = bpf_probe_read_kernel(&(*task).nsproxy)?;
+ let pns: *mut pid_namespace = bpf_probe_read_kernel(&(*nsp).pid_ns_for_children)?;
+ let nsc: ns_common = bpf_probe_read_kernel(&(*pns).ns)?;
+ return bpf_probe_read_kernel(&nsc.inum);
+}
+
+#[panic_handler]
+fn panic(_info: &core::panic::PanicInfo) -> ! {
+ unsafe { core::hint::unreachable_unchecked() }
+}
diff --git a/capable-ebpf/src/vmlinux.rs b/capable-ebpf/src/vmlinux.rs
new file mode 100644
index 00000000..ac92a6df
--- /dev/null
+++ b/capable-ebpf/src/vmlinux.rs
@@ -0,0 +1,47250 @@
+/* automatically generated by rust-bindgen 0.66.1 */
+
+#[repr(C)]
+#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
+pub struct __BindgenBitfieldUnit {
+ storage: Storage,
+}
+impl __BindgenBitfieldUnit {
+ #[inline]
+ pub const fn new(storage: Storage) -> Self {
+ Self { storage }
+ }
+}
+impl __BindgenBitfieldUnit
+where
+ Storage: AsRef<[u8]> + AsMut<[u8]>,
+{
+ #[inline]
+ pub fn get_bit(&self, index: usize) -> bool {
+ debug_assert!(index / 8 < self.storage.as_ref().len());
+ let byte_index = index / 8;
+ let byte = self.storage.as_ref()[byte_index];
+ let bit_index = if cfg!(target_endian = "big") {
+ 7 - (index % 8)
+ } else {
+ index % 8
+ };
+ let mask = 1 << bit_index;
+ byte & mask == mask
+ }
+ #[inline]
+ pub fn set_bit(&mut self, index: usize, val: bool) {
+ debug_assert!(index / 8 < self.storage.as_ref().len());
+ let byte_index = index / 8;
+ let byte = &mut self.storage.as_mut()[byte_index];
+ let bit_index = if cfg!(target_endian = "big") {
+ 7 - (index % 8)
+ } else {
+ index % 8
+ };
+ let mask = 1 << bit_index;
+ if val {
+ *byte |= mask;
+ } else {
+ *byte &= !mask;
+ }
+ }
+ #[inline]
+ pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 {
+ debug_assert!(bit_width <= 64);
+ debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
+ debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
+ let mut val = 0;
+ for i in 0..(bit_width as usize) {
+ if self.get_bit(i + bit_offset) {
+ let index = if cfg!(target_endian = "big") {
+ bit_width as usize - 1 - i
+ } else {
+ i
+ };
+ val |= 1 << index;
+ }
+ }
+ val
+ }
+ #[inline]
+ pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) {
+ debug_assert!(bit_width <= 64);
+ debug_assert!(bit_offset / 8 < self.storage.as_ref().len());
+ debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len());
+ for i in 0..(bit_width as usize) {
+ let mask = 1 << i;
+ let val_bit_is_set = val & mask == mask;
+ let index = if cfg!(target_endian = "big") {
+ bit_width as usize - 1 - i
+ } else {
+ i
+ };
+ self.set_bit(index + bit_offset, val_bit_is_set);
+ }
+ }
+}
+#[repr(C)]
+#[derive(Default)]
+pub struct __IncompleteArrayField(::core::marker::PhantomData, [T; 0]);
+impl __IncompleteArrayField {
+ #[inline]
+ pub const fn new() -> Self {
+ __IncompleteArrayField(::core::marker::PhantomData, [])
+ }
+ #[inline]
+ pub fn as_ptr(&self) -> *const T {
+ self as *const _ as *const T
+ }
+ #[inline]
+ pub fn as_mut_ptr(&mut self) -> *mut T {
+ self as *mut _ as *mut T
+ }
+ #[inline]
+ pub unsafe fn as_slice(&self, len: usize) -> &[T] {
+ ::core::slice::from_raw_parts(self.as_ptr(), len)
+ }
+ #[inline]
+ pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
+ ::core::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
+ }
+}
+impl ::core::fmt::Debug for __IncompleteArrayField {
+ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
+ fmt.write_str("__IncompleteArrayField")
+ }
+}
+#[repr(C)]
+pub struct __BindgenUnionField(::core::marker::PhantomData);
+impl __BindgenUnionField {
+ #[inline]
+ pub const fn new() -> Self {
+ __BindgenUnionField(::core::marker::PhantomData)
+ }
+ #[inline]
+ pub unsafe fn as_ref(&self) -> &T {
+ ::core::mem::transmute(self)
+ }
+ #[inline]
+ pub unsafe fn as_mut(&mut self) -> &mut T {
+ ::core::mem::transmute(self)
+ }
+}
+impl ::core::default::Default for __BindgenUnionField {
+ #[inline]
+ fn default() -> Self {
+ Self::new()
+ }
+}
+impl ::core::clone::Clone for __BindgenUnionField {
+ #[inline]
+ fn clone(&self) -> Self {
+ Self::new()
+ }
+}
+impl ::core::marker::Copy for __BindgenUnionField {}
+impl ::core::fmt::Debug for __BindgenUnionField {
+ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
+ fmt.write_str("__BindgenUnionField")
+ }
+}
+impl ::core::hash::Hash for __BindgenUnionField {
+ fn hash(&self, _state: &mut H) {}
+}
+impl ::core::cmp::PartialEq for __BindgenUnionField {
+ fn eq(&self, _other: &__BindgenUnionField) -> bool {
+ true
+ }
+}
+impl ::core::cmp::Eq for __BindgenUnionField {}
+pub type __u64 = ::aya_bpf::cty::c_ulonglong;
+pub type u64_ = __u64;
+pub type bool_ = bool;
+pub type __s8 = ::aya_bpf::cty::c_schar;
+pub type __u8 = ::aya_bpf::cty::c_uchar;
+pub type __s16 = ::aya_bpf::cty::c_short;
+pub type __u16 = ::aya_bpf::cty::c_ushort;
+pub type __s32 = ::aya_bpf::cty::c_int;
+pub type __u32 = ::aya_bpf::cty::c_uint;
+pub type __s64 = ::aya_bpf::cty::c_longlong;
+pub type s8 = __s8;
+pub type u8_ = __u8;
+pub type s16 = __s16;
+pub type u16_ = __u16;
+pub type s32 = __s32;
+pub type u32_ = __u32;
+pub type s64 = __s64;
+pub type __kernel_long_t = ::aya_bpf::cty::c_long;
+pub type __kernel_ulong_t = ::aya_bpf::cty::c_ulong;
+pub type __kernel_pid_t = ::aya_bpf::cty::c_int;
+pub type __kernel_uid32_t = ::aya_bpf::cty::c_uint;
+pub type __kernel_gid32_t = ::aya_bpf::cty::c_uint;
+pub type __kernel_size_t = __kernel_ulong_t;
+pub type __kernel_loff_t = ::aya_bpf::cty::c_longlong;
+pub type __kernel_time64_t = ::aya_bpf::cty::c_longlong;
+pub type __kernel_clock_t = __kernel_long_t;
+pub type __kernel_timer_t = ::aya_bpf::cty::c_int;
+pub type __kernel_clockid_t = ::aya_bpf::cty::c_int;
+pub type __poll_t = ::aya_bpf::cty::c_uint;
+pub type __kernel_dev_t = u32_;
+pub type dev_t = __kernel_dev_t;
+pub type umode_t = ::aya_bpf::cty::c_ushort;
+pub type pid_t = __kernel_pid_t;
+pub type clockid_t = __kernel_clockid_t;
+pub type uid_t = __kernel_uid32_t;
+pub type gid_t = __kernel_gid32_t;
+pub type loff_t = __kernel_loff_t;
+pub type sector_t = u64_;
+pub type blkcnt_t = u64_;
+pub type gfp_t = ::aya_bpf::cty::c_uint;
+pub type fmode_t = ::aya_bpf::cty::c_uint;
+pub type phys_addr_t = u64_;
+pub type irq_hw_number_t = ::aya_bpf::cty::c_ulong;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct atomic_t {
+ pub counter: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct atomic64_t {
+ pub counter: s64,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct list_head {
+ pub next: *mut list_head,
+ pub prev: *mut list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hlist_head {
+ pub first: *mut hlist_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hlist_node {
+ pub next: *mut hlist_node,
+ pub pprev: *mut *mut hlist_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct callback_head {
+ pub next: *mut callback_head,
+ pub func: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct lock_class_key {}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct file_system_type {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub fs_flags: ::aya_bpf::cty::c_int,
+ pub init_fs_context: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut fs_context) -> ::aya_bpf::cty::c_int,
+ >,
+ pub parameters: *const fs_parameter_spec,
+ pub mount: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file_system_type,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: *mut ::aya_bpf::cty::c_void,
+ ) -> *mut dentry,
+ >,
+ pub kill_sb: ::core::option::Option,
+ pub owner: *mut module,
+ pub next: *mut file_system_type,
+ pub fs_supers: hlist_head,
+ pub s_lock_key: lock_class_key,
+ pub s_umount_key: lock_class_key,
+ pub s_vfs_rename_key: lock_class_key,
+ pub s_writers_key: [lock_class_key; 3usize],
+ pub i_lock_key: lock_class_key,
+ pub i_mutex_key: lock_class_key,
+ pub invalidate_lock_key: lock_class_key,
+ pub i_mutex_dir_key: lock_class_key,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct jump_entry {
+ pub code: s32,
+ pub target: s32,
+ pub key: ::aya_bpf::cty::c_long,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct static_key {
+ pub enabled: atomic_t,
+ pub __bindgen_anon_1: static_key__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union static_key__bindgen_ty_1 {
+ pub type_: ::aya_bpf::cty::c_ulong,
+ pub entries: *mut jump_entry,
+ pub next: *mut static_key_mod,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct static_key_true {
+ pub key: static_key,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct static_key_false {
+ pub key: static_key,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernel_symbol {
+ pub value_offset: ::aya_bpf::cty::c_int,
+ pub name_offset: ::aya_bpf::cty::c_int,
+ pub namespace_offset: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct qspinlock {
+ pub __bindgen_anon_1: qspinlock__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union qspinlock__bindgen_ty_1 {
+ pub val: atomic_t,
+ pub __bindgen_anon_1: qspinlock__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: qspinlock__bindgen_ty_1__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qspinlock__bindgen_ty_1__bindgen_ty_1 {
+ pub locked: u8_,
+ pub pending: u8_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qspinlock__bindgen_ty_1__bindgen_ty_2 {
+ pub locked_pending: u16_,
+ pub tail: u16_,
+}
+pub type arch_spinlock_t = qspinlock;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct qrwlock {
+ pub __bindgen_anon_1: qrwlock__bindgen_ty_1,
+ pub wait_lock: arch_spinlock_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union qrwlock__bindgen_ty_1 {
+ pub cnts: atomic_t,
+ pub __bindgen_anon_1: qrwlock__bindgen_ty_1__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qrwlock__bindgen_ty_1__bindgen_ty_1 {
+ pub wlocked: u8_,
+ pub __lstate: [u8_; 3usize],
+}
+pub type arch_rwlock_t = qrwlock;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct lockdep_map {}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct raw_spinlock {
+ pub raw_lock: arch_spinlock_t,
+}
+pub type raw_spinlock_t = raw_spinlock;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ratelimit_state {
+ pub lock: raw_spinlock_t,
+ pub interval: ::aya_bpf::cty::c_int,
+ pub burst: ::aya_bpf::cty::c_int,
+ pub printed: ::aya_bpf::cty::c_int,
+ pub missed: ::aya_bpf::cty::c_int,
+ pub begin: ::aya_bpf::cty::c_ulong,
+ pub flags: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C, packed)]
+#[derive(Debug, Copy, Clone)]
+pub struct pi_entry {
+ pub fmt: *const ::aya_bpf::cty::c_char,
+ pub func: *const ::aya_bpf::cty::c_char,
+ pub file: *const ::aya_bpf::cty::c_char,
+ pub line: ::aya_bpf::cty::c_uint,
+ pub level: *const ::aya_bpf::cty::c_char,
+ pub subsys_fmt_prefix: *const ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct _ddebug {
+ pub modname: *const ::aya_bpf::cty::c_char,
+ pub function: *const ::aya_bpf::cty::c_char,
+ pub filename: *const ::aya_bpf::cty::c_char,
+ pub format: *const ::aya_bpf::cty::c_char,
+ pub _bitfield_align_1: [u32; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>,
+ pub key: _ddebug__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union _ddebug__bindgen_ty_1 {
+ pub dd_key_true: static_key_true,
+ pub dd_key_false: static_key_false,
+}
+impl _ddebug {
+ #[inline]
+ pub fn lineno(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 18u8) as u32) }
+ }
+ #[inline]
+ pub fn set_lineno(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 18u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn class_id(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(18usize, 6u8) as u32) }
+ }
+ #[inline]
+ pub fn set_class_id(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(18usize, 6u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn flags(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(24usize, 8u8) as u32) }
+ }
+ #[inline]
+ pub fn set_flags(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(24usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ lineno: ::aya_bpf::cty::c_uint,
+ class_id: ::aya_bpf::cty::c_uint,
+ flags: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 4usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 18u8, {
+ let lineno: u32 = unsafe { ::core::mem::transmute(lineno) };
+ lineno as u64
+ });
+ __bindgen_bitfield_unit.set(18usize, 6u8, {
+ let class_id: u32 = unsafe { ::core::mem::transmute(class_id) };
+ class_id as u64
+ });
+ __bindgen_bitfield_unit.set(24usize, 8u8, {
+ let flags: u32 = unsafe { ::core::mem::transmute(flags) };
+ flags as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub mod class_map_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DD_CLASS_TYPE_DISJOINT_BITS: Type = 0;
+ pub const DD_CLASS_TYPE_LEVEL_NUM: Type = 1;
+ pub const DD_CLASS_TYPE_DISJOINT_NAMES: Type = 2;
+ pub const DD_CLASS_TYPE_LEVEL_NAMES: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ddebug_class_map {
+ pub link: list_head,
+ pub mod_: *mut module,
+ pub mod_name: *const ::aya_bpf::cty::c_char,
+ pub class_names: *mut *const ::aya_bpf::cty::c_char,
+ pub length: ::aya_bpf::cty::c_int,
+ pub base: ::aya_bpf::cty::c_int,
+ pub map_type: class_map_type::Type,
+}
+pub mod module_state {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const MODULE_STATE_LIVE: Type = 0;
+ pub const MODULE_STATE_COMING: Type = 1;
+ pub const MODULE_STATE_GOING: Type = 2;
+ pub const MODULE_STATE_UNFORMED: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct refcount_struct {
+ pub refs: atomic_t,
+}
+pub type refcount_t = refcount_struct;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kref {
+ pub refcount: refcount_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kobject {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub entry: list_head,
+ pub parent: *mut kobject,
+ pub kset: *mut kset,
+ pub ktype: *const kobj_type,
+ pub sd: *mut kernfs_node,
+ pub kref: kref,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub __bindgen_padding_0: [u8; 3usize],
+}
+impl kobject {
+ #[inline]
+ pub fn state_initialized(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_state_initialized(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn state_in_sysfs(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_state_in_sysfs(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn state_add_uevent_sent(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_state_add_uevent_sent(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn state_remove_uevent_sent(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_state_remove_uevent_sent(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn uevent_suppress(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_uevent_suppress(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ state_initialized: ::aya_bpf::cty::c_uint,
+ state_in_sysfs: ::aya_bpf::cty::c_uint,
+ state_add_uevent_sent: ::aya_bpf::cty::c_uint,
+ state_remove_uevent_sent: ::aya_bpf::cty::c_uint,
+ uevent_suppress: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let state_initialized: u32 = unsafe { ::core::mem::transmute(state_initialized) };
+ state_initialized as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let state_in_sysfs: u32 = unsafe { ::core::mem::transmute(state_in_sysfs) };
+ state_in_sysfs as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let state_add_uevent_sent: u32 =
+ unsafe { ::core::mem::transmute(state_add_uevent_sent) };
+ state_add_uevent_sent as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let state_remove_uevent_sent: u32 =
+ unsafe { ::core::mem::transmute(state_remove_uevent_sent) };
+ state_remove_uevent_sent as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let uevent_suppress: u32 = unsafe { ::core::mem::transmute(uevent_suppress) };
+ uevent_suppress as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct module_kobject {
+ pub kobj: kobject,
+ pub mod_: *mut module,
+ pub drivers_dir: *mut kobject,
+ pub mp: *mut module_param_attrs,
+ pub kobj_completion: *mut completion,
+}
+pub type atomic_long_t = atomic64_t;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct optimistic_spin_queue {
+ pub tail: atomic_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct mutex {
+ pub owner: atomic_long_t,
+ pub wait_lock: raw_spinlock_t,
+ pub osq: optimistic_spin_queue,
+ pub wait_list: list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rb_node {
+ pub __rb_parent_color: ::aya_bpf::cty::c_ulong,
+ pub rb_right: *mut rb_node,
+ pub rb_left: *mut rb_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct latch_tree_node {
+ pub node: [rb_node; 2usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mod_tree_node {
+ pub mod_: *mut module,
+ pub node: latch_tree_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct module_memory {
+ pub base: *mut ::aya_bpf::cty::c_void,
+ pub size: ::aya_bpf::cty::c_uint,
+ pub mtn: mod_tree_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mod_arch_specific {
+ pub num_orcs: ::aya_bpf::cty::c_uint,
+ pub orc_unwind_ip: *mut ::aya_bpf::cty::c_int,
+ pub orc_unwind: *mut orc_entry,
+}
+pub type Elf64_Sym = elf64_sym;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mod_kallsyms {
+ pub symtab: *mut Elf64_Sym,
+ pub num_symtab: ::aya_bpf::cty::c_uint,
+ pub strtab: *mut ::aya_bpf::cty::c_char,
+ pub typetab: *mut ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct _ddebug_info {
+ pub descs: *mut _ddebug,
+ pub classes: *mut ddebug_class_map,
+ pub num_descs: ::aya_bpf::cty::c_uint,
+ pub num_classes: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct module {
+ pub state: module_state::Type,
+ pub list: list_head,
+ pub name: [::aya_bpf::cty::c_char; 56usize],
+ pub build_id: [::aya_bpf::cty::c_uchar; 20usize],
+ pub mkobj: module_kobject,
+ pub modinfo_attrs: *mut module_attribute,
+ pub version: *const ::aya_bpf::cty::c_char,
+ pub srcversion: *const ::aya_bpf::cty::c_char,
+ pub holders_dir: *mut kobject,
+ pub syms: *const kernel_symbol,
+ pub crcs: *const s32,
+ pub num_syms: ::aya_bpf::cty::c_uint,
+ pub param_lock: mutex,
+ pub kp: *mut kernel_param,
+ pub num_kp: ::aya_bpf::cty::c_uint,
+ pub num_gpl_syms: ::aya_bpf::cty::c_uint,
+ pub gpl_syms: *const kernel_symbol,
+ pub gpl_crcs: *const s32,
+ pub using_gplonly_symbols: bool_,
+ pub sig_ok: bool_,
+ pub async_probe_requested: bool_,
+ pub num_exentries: ::aya_bpf::cty::c_uint,
+ pub extable: *mut exception_table_entry,
+ pub init: ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 40usize]>,
+ pub mem: [module_memory; 7usize],
+ pub arch: mod_arch_specific,
+ pub taints: ::aya_bpf::cty::c_ulong,
+ pub num_bugs: ::aya_bpf::cty::c_uint,
+ pub bug_list: list_head,
+ pub bug_table: *mut bug_entry,
+ pub kallsyms: *mut mod_kallsyms,
+ pub core_kallsyms: mod_kallsyms,
+ pub sect_attrs: *mut module_sect_attrs,
+ pub notes_attrs: *mut module_notes_attrs,
+ pub args: *mut ::aya_bpf::cty::c_char,
+ pub percpu: *mut ::aya_bpf::cty::c_void,
+ pub percpu_size: ::aya_bpf::cty::c_uint,
+ pub noinstr_text_start: *mut ::aya_bpf::cty::c_void,
+ pub noinstr_text_size: ::aya_bpf::cty::c_uint,
+ pub num_tracepoints: ::aya_bpf::cty::c_uint,
+ pub tracepoints_ptrs: *const ::aya_bpf::cty::c_int,
+ pub num_srcu_structs: ::aya_bpf::cty::c_uint,
+ pub srcu_struct_ptrs: *mut *mut srcu_struct,
+ pub num_bpf_raw_events: ::aya_bpf::cty::c_uint,
+ pub bpf_raw_events: *mut bpf_raw_event_map,
+ pub btf_data_size: ::aya_bpf::cty::c_uint,
+ pub btf_data: *mut ::aya_bpf::cty::c_void,
+ pub jump_entries: *mut jump_entry,
+ pub num_jump_entries: ::aya_bpf::cty::c_uint,
+ pub num_trace_bprintk_fmt: ::aya_bpf::cty::c_uint,
+ pub trace_bprintk_fmt_start: *mut *const ::aya_bpf::cty::c_char,
+ pub trace_events: *mut *mut trace_event_call,
+ pub num_trace_events: ::aya_bpf::cty::c_uint,
+ pub trace_evals: *mut *mut trace_eval_map,
+ pub num_trace_evals: ::aya_bpf::cty::c_uint,
+ pub num_ftrace_callsites: ::aya_bpf::cty::c_uint,
+ pub ftrace_callsites: *mut ::aya_bpf::cty::c_ulong,
+ pub kprobes_text_start: *mut ::aya_bpf::cty::c_void,
+ pub kprobes_text_size: ::aya_bpf::cty::c_uint,
+ pub kprobe_blacklist: *mut ::aya_bpf::cty::c_ulong,
+ pub num_kprobe_blacklist: ::aya_bpf::cty::c_uint,
+ pub num_static_call_sites: ::aya_bpf::cty::c_int,
+ pub static_call_sites: *mut static_call_site,
+ pub printk_index_size: ::aya_bpf::cty::c_uint,
+ pub printk_index_start: *mut *mut pi_entry,
+ pub source_list: list_head,
+ pub target_list: list_head,
+ pub exit: ::core::option::Option,
+ pub refcnt: atomic_t,
+ pub ei_funcs: *mut error_injection_entry,
+ pub num_ei_funcs: ::aya_bpf::cty::c_uint,
+ pub dyndbg_info: _ddebug_info,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 32usize]>,
+}
+impl module {
+ #[inline]
+ pub fn new_bitfield_2() -> __BindgenBitfieldUnit<[u8; 32usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 32usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernel_param_ops {
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub set: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const ::aya_bpf::cty::c_char,
+ arg2: *const kernel_param,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut ::aya_bpf::cty::c_char,
+ arg2: *const kernel_param,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub free: ::core::option::Option,
+}
+pub type fl_owner_t = *mut ::aya_bpf::cty::c_void;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct file_operations {
+ pub owner: *mut module,
+ pub llseek: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: loff_t, arg3: ::aya_bpf::cty::c_int) -> loff_t,
+ >,
+ pub read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: usize,
+ arg4: *mut loff_t,
+ ) -> isize,
+ >,
+ pub write: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *const ::aya_bpf::cty::c_char,
+ arg3: usize,
+ arg4: *mut loff_t,
+ ) -> isize,
+ >,
+ pub read_iter: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kiocb, arg2: *mut iov_iter) -> isize,
+ >,
+ pub write_iter: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kiocb, arg2: *mut iov_iter) -> isize,
+ >,
+ pub iopoll: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kiocb,
+ arg2: *mut io_comp_batch,
+ arg3: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub iterate: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: *mut dir_context) -> ::aya_bpf::cty::c_int,
+ >,
+ pub iterate_shared: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: *mut dir_context) -> ::aya_bpf::cty::c_int,
+ >,
+ pub poll: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: *mut poll_table_struct) -> __poll_t,
+ >,
+ pub unlocked_ioctl: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+ pub compat_ioctl: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+ pub mmap: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: *mut vm_area_struct) -> ::aya_bpf::cty::c_int,
+ >,
+ pub mmap_supported_flags: ::aya_bpf::cty::c_ulong,
+ pub open: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut file) -> ::aya_bpf::cty::c_int,
+ >,
+ pub flush: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: fl_owner_t) -> ::aya_bpf::cty::c_int,
+ >,
+ pub release: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut file) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fsync: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: loff_t,
+ arg3: loff_t,
+ arg4: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fasync: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: ::aya_bpf::cty::c_int,
+ arg2: *mut file,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub lock: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *mut file_lock,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub sendpage: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut page,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: usize,
+ arg5: *mut loff_t,
+ arg6: ::aya_bpf::cty::c_int,
+ ) -> isize,
+ >,
+ pub get_unmapped_area: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: ::aya_bpf::cty::c_ulong,
+ arg4: ::aya_bpf::cty::c_ulong,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_ulong,
+ >,
+ pub check_flags: ::core::option::Option<
+ unsafe extern "C" fn(arg1: ::aya_bpf::cty::c_int) -> ::aya_bpf::cty::c_int,
+ >,
+ pub flock: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *mut file_lock,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub splice_write: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut pipe_inode_info,
+ arg2: *mut file,
+ arg3: *mut loff_t,
+ arg4: usize,
+ arg5: ::aya_bpf::cty::c_uint,
+ ) -> isize,
+ >,
+ pub splice_read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut loff_t,
+ arg3: *mut pipe_inode_info,
+ arg4: usize,
+ arg5: ::aya_bpf::cty::c_uint,
+ ) -> isize,
+ >,
+ pub setlease: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_long,
+ arg3: *mut *mut file_lock,
+ arg4: *mut *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fallocate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: loff_t,
+ arg4: loff_t,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+ pub show_fdinfo:
+ ::core::option::Option,
+ pub copy_file_range: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: loff_t,
+ arg3: *mut file,
+ arg4: loff_t,
+ arg5: usize,
+ arg6: ::aya_bpf::cty::c_uint,
+ ) -> isize,
+ >,
+ pub remap_file_range: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: loff_t,
+ arg3: *mut file,
+ arg4: loff_t,
+ arg5: loff_t,
+ arg6: ::aya_bpf::cty::c_uint,
+ ) -> loff_t,
+ >,
+ pub fadvise: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: loff_t,
+ arg3: loff_t,
+ arg4: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub uring_cmd: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut io_uring_cmd,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub uring_cmd_iopoll: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut io_uring_cmd,
+ arg2: *mut io_comp_batch,
+ arg3: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct bug_entry {
+ pub bug_addr_disp: ::aya_bpf::cty::c_int,
+ pub file_disp: ::aya_bpf::cty::c_int,
+ pub line: ::aya_bpf::cty::c_ushort,
+ pub flags: ::aya_bpf::cty::c_ushort,
+}
+pub type time64_t = __s64;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __kernel_timespec {
+ pub tv_sec: __kernel_time64_t,
+ pub tv_nsec: ::aya_bpf::cty::c_longlong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct timespec64 {
+ pub tv_sec: time64_t,
+ pub tv_nsec: ::aya_bpf::cty::c_long,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pt_regs {
+ pub r15: ::aya_bpf::cty::c_ulong,
+ pub r14: ::aya_bpf::cty::c_ulong,
+ pub r13: ::aya_bpf::cty::c_ulong,
+ pub r12: ::aya_bpf::cty::c_ulong,
+ pub bp: ::aya_bpf::cty::c_ulong,
+ pub bx: ::aya_bpf::cty::c_ulong,
+ pub r11: ::aya_bpf::cty::c_ulong,
+ pub r10: ::aya_bpf::cty::c_ulong,
+ pub r9: ::aya_bpf::cty::c_ulong,
+ pub r8: ::aya_bpf::cty::c_ulong,
+ pub ax: ::aya_bpf::cty::c_ulong,
+ pub cx: ::aya_bpf::cty::c_ulong,
+ pub dx: ::aya_bpf::cty::c_ulong,
+ pub si: ::aya_bpf::cty::c_ulong,
+ pub di: ::aya_bpf::cty::c_ulong,
+ pub orig_ax: ::aya_bpf::cty::c_ulong,
+ pub ip: ::aya_bpf::cty::c_ulong,
+ pub cs: ::aya_bpf::cty::c_ulong,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub sp: ::aya_bpf::cty::c_ulong,
+ pub ss: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct desc_struct {
+ pub limit0: u16_,
+ pub base0: u16_,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>,
+}
+impl desc_struct {
+ #[inline]
+ pub fn base1(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 8u8) as u16) }
+ }
+ #[inline]
+ pub fn set_base1(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn type_(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 4u8) as u16) }
+ }
+ #[inline]
+ pub fn set_type(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 4u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn s(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(12usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_s(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(12usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dpl(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(13usize, 2u8) as u16) }
+ }
+ #[inline]
+ pub fn set_dpl(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(13usize, 2u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn p(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(15usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_p(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(15usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn limit1(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(16usize, 4u8) as u16) }
+ }
+ #[inline]
+ pub fn set_limit1(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(16usize, 4u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn avl(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(20usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_avl(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(20usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn l(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(21usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_l(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(21usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn d(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(22usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_d(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(22usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn g(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(23usize, 1u8) as u16) }
+ }
+ #[inline]
+ pub fn set_g(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(23usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn base2(&self) -> u16_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(24usize, 8u8) as u16) }
+ }
+ #[inline]
+ pub fn set_base2(&mut self, val: u16_) {
+ unsafe {
+ let val: u16 = ::core::mem::transmute(val);
+ self._bitfield_1.set(24usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ base1: u16_,
+ type_: u16_,
+ s: u16_,
+ dpl: u16_,
+ p: u16_,
+ limit1: u16_,
+ avl: u16_,
+ l: u16_,
+ d: u16_,
+ g: u16_,
+ base2: u16_,
+ ) -> __BindgenBitfieldUnit<[u8; 4usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 8u8, {
+ let base1: u16 = unsafe { ::core::mem::transmute(base1) };
+ base1 as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 4u8, {
+ let type_: u16 = unsafe { ::core::mem::transmute(type_) };
+ type_ as u64
+ });
+ __bindgen_bitfield_unit.set(12usize, 1u8, {
+ let s: u16 = unsafe { ::core::mem::transmute(s) };
+ s as u64
+ });
+ __bindgen_bitfield_unit.set(13usize, 2u8, {
+ let dpl: u16 = unsafe { ::core::mem::transmute(dpl) };
+ dpl as u64
+ });
+ __bindgen_bitfield_unit.set(15usize, 1u8, {
+ let p: u16 = unsafe { ::core::mem::transmute(p) };
+ p as u64
+ });
+ __bindgen_bitfield_unit.set(16usize, 4u8, {
+ let limit1: u16 = unsafe { ::core::mem::transmute(limit1) };
+ limit1 as u64
+ });
+ __bindgen_bitfield_unit.set(20usize, 1u8, {
+ let avl: u16 = unsafe { ::core::mem::transmute(avl) };
+ avl as u64
+ });
+ __bindgen_bitfield_unit.set(21usize, 1u8, {
+ let l: u16 = unsafe { ::core::mem::transmute(l) };
+ l as u64
+ });
+ __bindgen_bitfield_unit.set(22usize, 1u8, {
+ let d: u16 = unsafe { ::core::mem::transmute(d) };
+ d as u64
+ });
+ __bindgen_bitfield_unit.set(23usize, 1u8, {
+ let g: u16 = unsafe { ::core::mem::transmute(g) };
+ g as u64
+ });
+ __bindgen_bitfield_unit.set(24usize, 8u8, {
+ let base2: u16 = unsafe { ::core::mem::transmute(base2) };
+ base2 as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub type pteval_t = ::aya_bpf::cty::c_ulong;
+pub type pmdval_t = ::aya_bpf::cty::c_ulong;
+pub type pudval_t = ::aya_bpf::cty::c_ulong;
+pub type pgdval_t = ::aya_bpf::cty::c_ulong;
+pub type pgprotval_t = ::aya_bpf::cty::c_ulong;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pte_t {
+ pub pte: pteval_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pmd_t {
+ pub pmd: pmdval_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pgprot {
+ pub pgprot: pgprotval_t,
+}
+pub type pgprot_t = pgprot;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pgd_t {
+ pub pgd: pgdval_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pud_t {
+ pub pud: pudval_t,
+}
+pub type pgtable_t = *mut page;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct spinlock {
+ pub __bindgen_anon_1: spinlock__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union spinlock__bindgen_ty_1 {
+ pub rlock: raw_spinlock,
+}
+pub type spinlock_t = spinlock;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct page {
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: page__bindgen_ty_1,
+ pub __bindgen_anon_2: page__bindgen_ty_2,
+ pub _refcount: atomic_t,
+ pub memcg_data: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_1 {
+ pub __bindgen_anon_1: page__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: page__bindgen_ty_1__bindgen_ty_2,
+ pub __bindgen_anon_3: page__bindgen_ty_1__bindgen_ty_3,
+ pub __bindgen_anon_4: page__bindgen_ty_1__bindgen_ty_4,
+ pub __bindgen_anon_5: page__bindgen_ty_1__bindgen_ty_5,
+ pub callback_head: callback_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_1 {
+ pub __bindgen_anon_1: page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1,
+ pub mapping: *mut address_space,
+ pub __bindgen_anon_2: page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_2,
+ pub private: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {
+ pub lru: list_head,
+ pub __bindgen_anon_1: page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1,
+ pub buddy_list: list_head,
+ pub pcp_list: list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {
+ pub __filler: *mut ::aya_bpf::cty::c_void,
+ pub mlock_count: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_1__bindgen_ty_1__bindgen_ty_2 {
+ pub index: ::aya_bpf::cty::c_ulong,
+ pub share: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_2 {
+ pub pp_magic: ::aya_bpf::cty::c_ulong,
+ pub pp: *mut page_pool,
+ pub _pp_mapping_pad: ::aya_bpf::cty::c_ulong,
+ pub dma_addr: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: page__bindgen_ty_1__bindgen_ty_2__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_1__bindgen_ty_2__bindgen_ty_1 {
+ pub dma_addr_upper: ::aya_bpf::cty::c_ulong,
+ pub pp_frag_count: atomic_long_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_3 {
+ pub compound_head: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_4 {
+ pub _pt_pad_1: ::aya_bpf::cty::c_ulong,
+ pub pmd_huge_pte: pgtable_t,
+ pub _pt_pad_2: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: page__bindgen_ty_1__bindgen_ty_4__bindgen_ty_1,
+ pub ptl: spinlock_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_1__bindgen_ty_4__bindgen_ty_1 {
+ pub pt_mm: *mut mm_struct,
+ pub pt_frag_refcount: atomic_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct page__bindgen_ty_1__bindgen_ty_5 {
+ pub pgmap: *mut dev_pagemap,
+ pub zone_device_data: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union page__bindgen_ty_2 {
+ pub _mapcount: atomic_t,
+ pub page_type: ::aya_bpf::cty::c_uint,
+}
+#[repr(C, packed)]
+#[derive(Debug, Copy, Clone)]
+pub struct orc_entry {
+ pub sp_offset: s16,
+ pub bp_offset: s16,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
+}
+impl orc_entry {
+ #[inline]
+ pub fn sp_reg(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 4u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sp_reg(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 4u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn bp_reg(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 4u8) as u32) }
+ }
+ #[inline]
+ pub fn set_bp_reg(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 4u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn type_(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 3u8) as u32) }
+ }
+ #[inline]
+ pub fn set_type(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn signal(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(11usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_signal(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(11usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ sp_reg: ::aya_bpf::cty::c_uint,
+ bp_reg: ::aya_bpf::cty::c_uint,
+ type_: ::aya_bpf::cty::c_uint,
+ signal: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 4u8, {
+ let sp_reg: u32 = unsafe { ::core::mem::transmute(sp_reg) };
+ sp_reg as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 4u8, {
+ let bp_reg: u32 = unsafe { ::core::mem::transmute(bp_reg) };
+ bp_reg as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 3u8, {
+ let type_: u32 = unsafe { ::core::mem::transmute(type_) };
+ type_ as u64
+ });
+ __bindgen_bitfield_unit.set(11usize, 1u8, {
+ let signal: u32 = unsafe { ::core::mem::transmute(signal) };
+ signal as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct static_call_site {
+ pub addr: s32,
+ pub key: s32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct static_call_mod {
+ pub next: *mut static_call_mod,
+ pub mod_: *mut module,
+ pub sites: *mut static_call_site,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct static_call_key {
+ pub func: *mut ::aya_bpf::cty::c_void,
+ pub __bindgen_anon_1: static_call_key__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union static_call_key__bindgen_ty_1 {
+ pub type_: ::aya_bpf::cty::c_ulong,
+ pub mods: *mut static_call_mod,
+ pub sites: *mut static_call_site,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct thread_info {
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub syscall_work: ::aya_bpf::cty::c_ulong,
+ pub status: u32_,
+ pub cpu: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct llist_node {
+ pub next: *mut llist_node,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct __call_single_node {
+ pub llist: llist_node,
+ pub __bindgen_anon_1: __call_single_node__bindgen_ty_1,
+ pub src: u16_,
+ pub dst: u16_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union __call_single_node__bindgen_ty_1 {
+ pub u_flags: ::aya_bpf::cty::c_uint,
+ pub a_flags: atomic_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct load_weight {
+ pub weight: ::aya_bpf::cty::c_ulong,
+ pub inv_weight: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct util_est {
+ pub enqueued: ::aya_bpf::cty::c_uint,
+ pub ewma: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_avg {
+ pub last_update_time: u64_,
+ pub load_sum: u64_,
+ pub runnable_sum: u64_,
+ pub util_sum: u32_,
+ pub period_contrib: u32_,
+ pub load_avg: ::aya_bpf::cty::c_ulong,
+ pub runnable_avg: ::aya_bpf::cty::c_ulong,
+ pub util_avg: ::aya_bpf::cty::c_ulong,
+ pub util_est: util_est,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_entity {
+ pub load: load_weight,
+ pub run_node: rb_node,
+ pub group_node: list_head,
+ pub on_rq: ::aya_bpf::cty::c_uint,
+ pub exec_start: u64_,
+ pub sum_exec_runtime: u64_,
+ pub vruntime: u64_,
+ pub prev_sum_exec_runtime: u64_,
+ pub nr_migrations: u64_,
+ pub depth: ::aya_bpf::cty::c_int,
+ pub parent: *mut sched_entity,
+ pub cfs_rq: *mut cfs_rq,
+ pub my_q: *mut cfs_rq,
+ pub runnable_weight: ::aya_bpf::cty::c_ulong,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 48usize]>,
+ pub avg: sched_avg,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_rt_entity {
+ pub run_list: list_head,
+ pub timeout: ::aya_bpf::cty::c_ulong,
+ pub watchdog_stamp: ::aya_bpf::cty::c_ulong,
+ pub time_slice: ::aya_bpf::cty::c_uint,
+ pub on_rq: ::aya_bpf::cty::c_ushort,
+ pub on_list: ::aya_bpf::cty::c_ushort,
+ pub back: *mut sched_rt_entity,
+}
+pub type ktime_t = s64;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct timerqueue_node {
+ pub node: rb_node,
+ pub expires: ktime_t,
+}
+pub mod hrtimer_restart {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const HRTIMER_NORESTART: Type = 0;
+ pub const HRTIMER_RESTART: Type = 1;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hrtimer {
+ pub node: timerqueue_node,
+ pub _softexpires: ktime_t,
+ pub function:
+ ::core::option::Option hrtimer_restart::Type>,
+ pub base: *mut hrtimer_clock_base,
+ pub state: u8_,
+ pub is_rel: u8_,
+ pub is_soft: u8_,
+ pub is_hard: u8_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_dl_entity {
+ pub rb_node: rb_node,
+ pub dl_runtime: u64_,
+ pub dl_deadline: u64_,
+ pub dl_period: u64_,
+ pub dl_bw: u64_,
+ pub dl_density: u64_,
+ pub runtime: s64,
+ pub deadline: u64_,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub dl_timer: hrtimer,
+ pub inactive_timer: hrtimer,
+ pub pi_se: *mut sched_dl_entity,
+}
+impl sched_dl_entity {
+ #[inline]
+ pub fn dl_throttled(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dl_throttled(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dl_yielded(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dl_yielded(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dl_non_contending(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dl_non_contending(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dl_overrun(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dl_overrun(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ dl_throttled: ::aya_bpf::cty::c_uint,
+ dl_yielded: ::aya_bpf::cty::c_uint,
+ dl_non_contending: ::aya_bpf::cty::c_uint,
+ dl_overrun: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let dl_throttled: u32 = unsafe { ::core::mem::transmute(dl_throttled) };
+ dl_throttled as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let dl_yielded: u32 = unsafe { ::core::mem::transmute(dl_yielded) };
+ dl_yielded as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let dl_non_contending: u32 = unsafe { ::core::mem::transmute(dl_non_contending) };
+ dl_non_contending as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let dl_overrun: u32 = unsafe { ::core::mem::transmute(dl_overrun) };
+ dl_overrun as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[repr(align(4))]
+#[derive(Debug, Copy, Clone)]
+pub struct uclamp_se {
+ pub _bitfield_align_1: [u16; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
+ pub __bindgen_padding_0: u16,
+}
+impl uclamp_se {
+ #[inline]
+ pub fn value(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 11u8) as u32) }
+ }
+ #[inline]
+ pub fn set_value(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 11u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn bucket_id(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(11usize, 3u8) as u32) }
+ }
+ #[inline]
+ pub fn set_bucket_id(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(11usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn active(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(14usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_active(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(14usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn user_defined(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(15usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_user_defined(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(15usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ value: ::aya_bpf::cty::c_uint,
+ bucket_id: ::aya_bpf::cty::c_uint,
+ active: ::aya_bpf::cty::c_uint,
+ user_defined: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 11u8, {
+ let value: u32 = unsafe { ::core::mem::transmute(value) };
+ value as u64
+ });
+ __bindgen_bitfield_unit.set(11usize, 3u8, {
+ let bucket_id: u32 = unsafe { ::core::mem::transmute(bucket_id) };
+ bucket_id as u64
+ });
+ __bindgen_bitfield_unit.set(14usize, 1u8, {
+ let active: u32 = unsafe { ::core::mem::transmute(active) };
+ active as u64
+ });
+ __bindgen_bitfield_unit.set(15usize, 1u8, {
+ let user_defined: u32 = unsafe { ::core::mem::transmute(user_defined) };
+ user_defined as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_statistics {
+ pub wait_start: u64_,
+ pub wait_max: u64_,
+ pub wait_count: u64_,
+ pub wait_sum: u64_,
+ pub iowait_count: u64_,
+ pub iowait_sum: u64_,
+ pub sleep_start: u64_,
+ pub sleep_max: u64_,
+ pub sum_sleep_runtime: s64,
+ pub block_start: u64_,
+ pub block_max: u64_,
+ pub sum_block_runtime: s64,
+ pub exec_max: u64_,
+ pub slice_max: u64_,
+ pub nr_migrations_cold: u64_,
+ pub nr_failed_migrations_affine: u64_,
+ pub nr_failed_migrations_running: u64_,
+ pub nr_failed_migrations_hot: u64_,
+ pub nr_forced_migrations: u64_,
+ pub nr_wakeups: u64_,
+ pub nr_wakeups_sync: u64_,
+ pub nr_wakeups_migrate: u64_,
+ pub nr_wakeups_local: u64_,
+ pub nr_wakeups_remote: u64_,
+ pub nr_wakeups_affine: u64_,
+ pub nr_wakeups_affine_attempts: u64_,
+ pub nr_wakeups_passive: u64_,
+ pub nr_wakeups_idle: u64_,
+ pub core_forceidle_sum: u64_,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 24usize]>,
+}
+impl sched_statistics {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 24usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 24usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cpumask {
+ pub bits: [::aya_bpf::cty::c_ulong; 5usize],
+}
+pub type cpumask_t = cpumask;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union rcu_special {
+ pub b: rcu_special__bindgen_ty_1,
+ pub s: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rcu_special__bindgen_ty_1 {
+ pub blocked: u8_,
+ pub need_qs: u8_,
+ pub exp_hint: u8_,
+ pub need_mb: u8_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_info {
+ pub pcount: ::aya_bpf::cty::c_ulong,
+ pub run_delay: ::aya_bpf::cty::c_ulonglong,
+ pub last_arrival: ::aya_bpf::cty::c_ulonglong,
+ pub last_queued: ::aya_bpf::cty::c_ulonglong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct plist_node {
+ pub prio: ::aya_bpf::cty::c_int,
+ pub prio_list: list_head,
+ pub node_list: list_head,
+}
+pub mod timespec_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const TT_NONE: Type = 0;
+ pub const TT_NATIVE: Type = 1;
+ pub const TT_COMPAT: Type = 2;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct restart_block {
+ pub arch_data: ::aya_bpf::cty::c_ulong,
+ pub fn_: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut restart_block) -> ::aya_bpf::cty::c_long,
+ >,
+ pub __bindgen_anon_1: restart_block__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union restart_block__bindgen_ty_1 {
+ pub futex: restart_block__bindgen_ty_1__bindgen_ty_1,
+ pub nanosleep: restart_block__bindgen_ty_1__bindgen_ty_2,
+ pub poll: restart_block__bindgen_ty_1__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct restart_block__bindgen_ty_1__bindgen_ty_1 {
+ pub uaddr: *mut u32_,
+ pub val: u32_,
+ pub flags: u32_,
+ pub bitset: u32_,
+ pub time: u64_,
+ pub uaddr2: *mut u32_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct restart_block__bindgen_ty_1__bindgen_ty_2 {
+ pub clockid: clockid_t,
+ pub type_: timespec_type::Type,
+ pub __bindgen_anon_1: restart_block__bindgen_ty_1__bindgen_ty_2__bindgen_ty_1,
+ pub expires: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union restart_block__bindgen_ty_1__bindgen_ty_2__bindgen_ty_1 {
+ pub rmtp: *mut __kernel_timespec,
+ pub compat_rmtp: *mut old_timespec32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct restart_block__bindgen_ty_1__bindgen_ty_3 {
+ pub ufds: *mut pollfd,
+ pub nfds: ::aya_bpf::cty::c_int,
+ pub has_timeout: ::aya_bpf::cty::c_int,
+ pub tv_sec: ::aya_bpf::cty::c_ulong,
+ pub tv_nsec: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct prev_cputime {
+ pub utime: u64_,
+ pub stime: u64_,
+ pub lock: raw_spinlock_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct seqcount {
+ pub sequence: ::aya_bpf::cty::c_uint,
+}
+pub type seqcount_t = seqcount;
+pub mod vtime_state {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const VTIME_INACTIVE: Type = 0;
+ pub const VTIME_IDLE: Type = 1;
+ pub const VTIME_SYS: Type = 2;
+ pub const VTIME_USER: Type = 3;
+ pub const VTIME_GUEST: Type = 4;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vtime {
+ pub seqcount: seqcount_t,
+ pub starttime: ::aya_bpf::cty::c_ulonglong,
+ pub state: vtime_state::Type,
+ pub cpu: ::aya_bpf::cty::c_uint,
+ pub utime: u64_,
+ pub stime: u64_,
+ pub gtime: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rb_root {
+ pub rb_node: *mut rb_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rb_root_cached {
+ pub rb_root: rb_root,
+ pub rb_leftmost: *mut rb_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct timerqueue_head {
+ pub rb_root: rb_root_cached,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct posix_cputimer_base {
+ pub nextevt: u64_,
+ pub tqhead: timerqueue_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct posix_cputimers {
+ pub bases: [posix_cputimer_base; 3usize],
+ pub timers_active: ::aya_bpf::cty::c_uint,
+ pub expiry_active: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct posix_cputimers_work {
+ pub work: callback_head,
+ pub mutex: mutex,
+ pub scheduled: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sysv_sem {
+ pub undo_list: *mut sem_undo_list,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sysv_shm {
+ pub shm_clist: list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sigset_t {
+ pub sig: [::aya_bpf::cty::c_ulong; 1usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sigpending {
+ pub list: list_head,
+ pub signal: sigset_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kuid_t {
+ pub val: uid_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct seccomp {
+ pub mode: ::aya_bpf::cty::c_int,
+ pub filter_count: atomic_t,
+ pub filter: *mut seccomp_filter,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct syscall_user_dispatch {
+ pub selector: *mut ::aya_bpf::cty::c_char,
+ pub offset: ::aya_bpf::cty::c_ulong,
+ pub len: ::aya_bpf::cty::c_ulong,
+ pub on_dispatch: bool_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct wake_q_node {
+ pub next: *mut wake_q_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct task_io_accounting {
+ pub rchar: u64_,
+ pub wchar: u64_,
+ pub syscr: u64_,
+ pub syscw: u64_,
+ pub read_bytes: u64_,
+ pub write_bytes: u64_,
+ pub cancelled_write_bytes: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct nodemask_t {
+ pub bits: [::aya_bpf::cty::c_ulong; 1usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct seqcount_spinlock {
+ pub seqcount: seqcount_t,
+}
+pub type seqcount_spinlock_t = seqcount_spinlock;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct arch_tlbflush_unmap_batch {
+ pub cpumask: cpumask,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct tlbflush_unmap_batch {
+ pub arch: arch_tlbflush_unmap_batch,
+ pub flush_required: bool_,
+ pub writable: bool_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct page_frag {
+ pub page: *mut page,
+ pub offset: __u32,
+ pub size: __u32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct latency_record {
+ pub backtrace: [::aya_bpf::cty::c_ulong; 12usize],
+ pub count: ::aya_bpf::cty::c_uint,
+ pub time: ::aya_bpf::cty::c_ulong,
+ pub max: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kmap_ctrl {}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct timer_list {
+ pub entry: hlist_node,
+ pub expires: ::aya_bpf::cty::c_ulong,
+ pub function: ::core::option::Option,
+ pub flags: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct llist_head {
+ pub first: *mut llist_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fpu_state_perm {
+ pub __state_perm: u64_,
+ pub __state_size: ::aya_bpf::cty::c_uint,
+ pub __user_state_size: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fregs_state {
+ pub cwd: u32_,
+ pub swd: u32_,
+ pub twd: u32_,
+ pub fip: u32_,
+ pub fcs: u32_,
+ pub foo: u32_,
+ pub fos: u32_,
+ pub st_space: [u32_; 20usize],
+ pub status: u32_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct fxregs_state {
+ pub cwd: u16_,
+ pub swd: u16_,
+ pub twd: u16_,
+ pub fop: u16_,
+ pub __bindgen_anon_1: fxregs_state__bindgen_ty_1,
+ pub mxcsr: u32_,
+ pub mxcsr_mask: u32_,
+ pub st_space: [u32_; 32usize],
+ pub xmm_space: [u32_; 64usize],
+ pub padding: [u32_; 12usize],
+ pub __bindgen_anon_2: fxregs_state__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union fxregs_state__bindgen_ty_1 {
+ pub __bindgen_anon_1: fxregs_state__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: fxregs_state__bindgen_ty_1__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fxregs_state__bindgen_ty_1__bindgen_ty_1 {
+ pub rip: u64_,
+ pub rdp: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fxregs_state__bindgen_ty_1__bindgen_ty_2 {
+ pub fip: u32_,
+ pub fcs: u32_,
+ pub foo: u32_,
+ pub fos: u32_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union fxregs_state__bindgen_ty_2 {
+ pub padding1: [u32_; 12usize],
+ pub sw_reserved: [u32_; 12usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct swregs_state {
+ pub cwd: u32_,
+ pub swd: u32_,
+ pub twd: u32_,
+ pub fip: u32_,
+ pub fcs: u32_,
+ pub foo: u32_,
+ pub fos: u32_,
+ pub st_space: [u32_; 20usize],
+ pub ftop: u8_,
+ pub changed: u8_,
+ pub lookahead: u8_,
+ pub no_update: u8_,
+ pub rm: u8_,
+ pub alimit: u8_,
+ pub info: *mut math_emu_info,
+ pub entry_eip: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct xstate_header {
+ pub xfeatures: u64_,
+ pub xcomp_bv: u64_,
+ pub reserved: [u64_; 6usize],
+}
+#[repr(C)]
+pub struct xregs_state {
+ pub i387: fxregs_state,
+ pub header: xstate_header,
+ pub extended_state_area: __IncompleteArrayField,
+}
+#[repr(C)]
+pub struct fpregs_state {
+ pub fsave: __BindgenUnionField,
+ pub fxsave: __BindgenUnionField,
+ pub soft: __BindgenUnionField,
+ pub xsave: __BindgenUnionField,
+ pub __padding: __BindgenUnionField<[u8_; 4096usize]>,
+ pub bindgen_union_field: [u64; 512usize],
+}
+#[repr(C)]
+pub struct fpstate {
+ pub size: ::aya_bpf::cty::c_uint,
+ pub user_size: ::aya_bpf::cty::c_uint,
+ pub xfeatures: u64_,
+ pub user_xfeatures: u64_,
+ pub xfd: u64_,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 32usize]>,
+ pub regs: fpregs_state,
+}
+impl fpstate {
+ #[inline]
+ pub fn is_valloc(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_valloc(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_guest(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_guest(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_confidential(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_confidential(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_use(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_use(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ is_valloc: ::aya_bpf::cty::c_uint,
+ is_guest: ::aya_bpf::cty::c_uint,
+ is_confidential: ::aya_bpf::cty::c_uint,
+ in_use: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 32usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 32usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let is_valloc: u32 = unsafe { ::core::mem::transmute(is_valloc) };
+ is_valloc as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let is_guest: u32 = unsafe { ::core::mem::transmute(is_guest) };
+ is_guest as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let is_confidential: u32 = unsafe { ::core::mem::transmute(is_confidential) };
+ is_confidential as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let in_use: u32 = unsafe { ::core::mem::transmute(in_use) };
+ in_use as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+pub struct fpu {
+ pub last_cpu: ::aya_bpf::cty::c_uint,
+ pub avx512_timestamp: ::aya_bpf::cty::c_ulong,
+ pub fpstate: *mut fpstate,
+ pub __task_fpstate: *mut fpstate,
+ pub perm: fpu_state_perm,
+ pub guest_perm: fpu_state_perm,
+ pub __fpstate: fpstate,
+}
+#[repr(C)]
+pub struct thread_struct {
+ pub tls_array: [desc_struct; 3usize],
+ pub sp: ::aya_bpf::cty::c_ulong,
+ pub es: ::aya_bpf::cty::c_ushort,
+ pub ds: ::aya_bpf::cty::c_ushort,
+ pub fsindex: ::aya_bpf::cty::c_ushort,
+ pub gsindex: ::aya_bpf::cty::c_ushort,
+ pub fsbase: ::aya_bpf::cty::c_ulong,
+ pub gsbase: ::aya_bpf::cty::c_ulong,
+ pub ptrace_bps: [*mut perf_event; 4usize],
+ pub virtual_dr6: ::aya_bpf::cty::c_ulong,
+ pub ptrace_dr7: ::aya_bpf::cty::c_ulong,
+ pub cr2: ::aya_bpf::cty::c_ulong,
+ pub trap_nr: ::aya_bpf::cty::c_ulong,
+ pub error_code: ::aya_bpf::cty::c_ulong,
+ pub io_bitmap: *mut io_bitmap,
+ pub iopl_emul: ::aya_bpf::cty::c_ulong,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub pkru: u32_,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 40usize]>,
+ pub fpu: fpu,
+}
+impl thread_struct {
+ #[inline]
+ pub fn iopl_warn(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_iopl_warn(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sig_on_uaccess_err(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sig_on_uaccess_err(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ iopl_warn: ::aya_bpf::cty::c_uint,
+ sig_on_uaccess_err: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let iopl_warn: u32 = unsafe { ::core::mem::transmute(iopl_warn) };
+ iopl_warn as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let sig_on_uaccess_err: u32 = unsafe { ::core::mem::transmute(sig_on_uaccess_err) };
+ sig_on_uaccess_err as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub type kernel_siginfo_t = kernel_siginfo;
+#[repr(C)]
+pub struct task_struct {
+ pub thread_info: thread_info,
+ pub __state: ::aya_bpf::cty::c_uint,
+ pub stack: *mut ::aya_bpf::cty::c_void,
+ pub usage: refcount_t,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub ptrace: ::aya_bpf::cty::c_uint,
+ pub on_cpu: ::aya_bpf::cty::c_int,
+ pub wake_entry: __call_single_node,
+ pub wakee_flips: ::aya_bpf::cty::c_uint,
+ pub wakee_flip_decay_ts: ::aya_bpf::cty::c_ulong,
+ pub last_wakee: *mut task_struct,
+ pub recent_used_cpu: ::aya_bpf::cty::c_int,
+ pub wake_cpu: ::aya_bpf::cty::c_int,
+ pub on_rq: ::aya_bpf::cty::c_int,
+ pub prio: ::aya_bpf::cty::c_int,
+ pub static_prio: ::aya_bpf::cty::c_int,
+ pub normal_prio: ::aya_bpf::cty::c_int,
+ pub rt_priority: ::aya_bpf::cty::c_uint,
+ pub se: sched_entity,
+ pub rt: sched_rt_entity,
+ pub dl: sched_dl_entity,
+ pub sched_class: *const sched_class,
+ pub core_node: rb_node,
+ pub core_cookie: ::aya_bpf::cty::c_ulong,
+ pub core_occupation: ::aya_bpf::cty::c_uint,
+ pub sched_task_group: *mut task_group,
+ pub uclamp_req: [uclamp_se; 2usize],
+ pub uclamp: [uclamp_se; 2usize],
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 40usize]>,
+ pub stats: sched_statistics,
+ pub preempt_notifiers: hlist_head,
+ pub btrace_seq: ::aya_bpf::cty::c_uint,
+ pub policy: ::aya_bpf::cty::c_uint,
+ pub nr_cpus_allowed: ::aya_bpf::cty::c_int,
+ pub cpus_ptr: *const cpumask_t,
+ pub user_cpus_ptr: *mut cpumask_t,
+ pub cpus_mask: cpumask_t,
+ pub migration_pending: *mut ::aya_bpf::cty::c_void,
+ pub migration_disabled: ::aya_bpf::cty::c_ushort,
+ pub migration_flags: ::aya_bpf::cty::c_ushort,
+ pub rcu_read_lock_nesting: ::aya_bpf::cty::c_int,
+ pub rcu_read_unlock_special: rcu_special,
+ pub rcu_node_entry: list_head,
+ pub rcu_blocked_node: *mut rcu_node,
+ pub rcu_tasks_nvcsw: ::aya_bpf::cty::c_ulong,
+ pub rcu_tasks_holdout: u8_,
+ pub rcu_tasks_idx: u8_,
+ pub rcu_tasks_idle_cpu: ::aya_bpf::cty::c_int,
+ pub rcu_tasks_holdout_list: list_head,
+ pub trc_reader_nesting: ::aya_bpf::cty::c_int,
+ pub trc_ipi_to_cpu: ::aya_bpf::cty::c_int,
+ pub trc_reader_special: rcu_special,
+ pub trc_holdout_list: list_head,
+ pub trc_blkd_node: list_head,
+ pub trc_blkd_cpu: ::aya_bpf::cty::c_int,
+ pub sched_info: sched_info,
+ pub tasks: list_head,
+ pub pushable_tasks: plist_node,
+ pub pushable_dl_tasks: rb_node,
+ pub mm: *mut mm_struct,
+ pub active_mm: *mut mm_struct,
+ pub exit_state: ::aya_bpf::cty::c_int,
+ pub exit_code: ::aya_bpf::cty::c_int,
+ pub exit_signal: ::aya_bpf::cty::c_int,
+ pub pdeath_signal: ::aya_bpf::cty::c_int,
+ pub jobctl: ::aya_bpf::cty::c_ulong,
+ pub personality: ::aya_bpf::cty::c_uint,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 6usize]>,
+ pub atomic_flags: ::aya_bpf::cty::c_ulong,
+ pub restart_block: restart_block,
+ pub pid: pid_t,
+ pub tgid: pid_t,
+ pub stack_canary: ::aya_bpf::cty::c_ulong,
+ pub real_parent: *mut task_struct,
+ pub parent: *mut task_struct,
+ pub children: list_head,
+ pub sibling: list_head,
+ pub group_leader: *mut task_struct,
+ pub ptraced: list_head,
+ pub ptrace_entry: list_head,
+ pub thread_pid: *mut pid,
+ pub pid_links: [hlist_node; 4usize],
+ pub thread_group: list_head,
+ pub thread_node: list_head,
+ pub vfork_done: *mut completion,
+ pub set_child_tid: *mut ::aya_bpf::cty::c_int,
+ pub clear_child_tid: *mut ::aya_bpf::cty::c_int,
+ pub worker_private: *mut ::aya_bpf::cty::c_void,
+ pub utime: u64_,
+ pub stime: u64_,
+ pub gtime: u64_,
+ pub prev_cputime: prev_cputime,
+ pub vtime: vtime,
+ pub tick_dep_mask: atomic_t,
+ pub nvcsw: ::aya_bpf::cty::c_ulong,
+ pub nivcsw: ::aya_bpf::cty::c_ulong,
+ pub start_time: u64_,
+ pub start_boottime: u64_,
+ pub min_flt: ::aya_bpf::cty::c_ulong,
+ pub maj_flt: ::aya_bpf::cty::c_ulong,
+ pub posix_cputimers: posix_cputimers,
+ pub posix_cputimers_work: posix_cputimers_work,
+ pub ptracer_cred: *const cred,
+ pub real_cred: *const cred,
+ pub cred: *const cred,
+ pub cached_requested_key: *mut key,
+ pub comm: [::aya_bpf::cty::c_char; 16usize],
+ pub nameidata: *mut nameidata,
+ pub sysvsem: sysv_sem,
+ pub sysvshm: sysv_shm,
+ pub last_switch_count: ::aya_bpf::cty::c_ulong,
+ pub last_switch_time: ::aya_bpf::cty::c_ulong,
+ pub fs: *mut fs_struct,
+ pub files: *mut files_struct,
+ pub io_uring: *mut io_uring_task,
+ pub nsproxy: *mut nsproxy,
+ pub signal: *mut signal_struct,
+ pub sighand: *mut sighand_struct,
+ pub blocked: sigset_t,
+ pub real_blocked: sigset_t,
+ pub saved_sigmask: sigset_t,
+ pub pending: sigpending,
+ pub sas_ss_sp: ::aya_bpf::cty::c_ulong,
+ pub sas_ss_size: usize,
+ pub sas_ss_flags: ::aya_bpf::cty::c_uint,
+ pub task_works: *mut callback_head,
+ pub audit_context: *mut audit_context,
+ pub loginuid: kuid_t,
+ pub sessionid: ::aya_bpf::cty::c_uint,
+ pub seccomp: seccomp,
+ pub syscall_dispatch: syscall_user_dispatch,
+ pub parent_exec_id: u64_,
+ pub self_exec_id: u64_,
+ pub alloc_lock: spinlock_t,
+ pub pi_lock: raw_spinlock_t,
+ pub wake_q: wake_q_node,
+ pub pi_waiters: rb_root_cached,
+ pub pi_top_task: *mut task_struct,
+ pub pi_blocked_on: *mut rt_mutex_waiter,
+ pub journal_info: *mut ::aya_bpf::cty::c_void,
+ pub bio_list: *mut bio_list,
+ pub plug: *mut blk_plug,
+ pub reclaim_state: *mut reclaim_state,
+ pub backing_dev_info: *mut backing_dev_info,
+ pub io_context: *mut io_context,
+ pub capture_control: *mut capture_control,
+ pub ptrace_message: ::aya_bpf::cty::c_ulong,
+ pub last_siginfo: *mut kernel_siginfo_t,
+ pub ioac: task_io_accounting,
+ pub psi_flags: ::aya_bpf::cty::c_uint,
+ pub acct_rss_mem1: u64_,
+ pub acct_vm_mem1: u64_,
+ pub acct_timexpd: u64_,
+ pub mems_allowed: nodemask_t,
+ pub mems_allowed_seq: seqcount_spinlock_t,
+ pub cpuset_mem_spread_rotor: ::aya_bpf::cty::c_int,
+ pub cpuset_slab_spread_rotor: ::aya_bpf::cty::c_int,
+ pub cgroups: *mut css_set,
+ pub cg_list: list_head,
+ pub closid: u32_,
+ pub rmid: u32_,
+ pub robust_list: *mut robust_list_head,
+ pub compat_robust_list: *mut compat_robust_list_head,
+ pub pi_state_list: list_head,
+ pub pi_state_cache: *mut futex_pi_state,
+ pub futex_exit_mutex: mutex,
+ pub futex_state: ::aya_bpf::cty::c_uint,
+ pub perf_event_ctxp: *mut perf_event_context,
+ pub perf_event_mutex: mutex,
+ pub perf_event_list: list_head,
+ pub mempolicy: *mut mempolicy,
+ pub il_prev: ::aya_bpf::cty::c_short,
+ pub pref_node_fork: ::aya_bpf::cty::c_short,
+ pub numa_scan_seq: ::aya_bpf::cty::c_int,
+ pub numa_scan_period: ::aya_bpf::cty::c_uint,
+ pub numa_scan_period_max: ::aya_bpf::cty::c_uint,
+ pub numa_preferred_nid: ::aya_bpf::cty::c_int,
+ pub numa_migrate_retry: ::aya_bpf::cty::c_ulong,
+ pub node_stamp: u64_,
+ pub last_task_numa_placement: u64_,
+ pub last_sum_exec_runtime: u64_,
+ pub numa_work: callback_head,
+ pub numa_group: *mut numa_group,
+ pub numa_faults: *mut ::aya_bpf::cty::c_ulong,
+ pub total_numa_faults: ::aya_bpf::cty::c_ulong,
+ pub numa_faults_locality: [::aya_bpf::cty::c_ulong; 3usize],
+ pub numa_pages_migrated: ::aya_bpf::cty::c_ulong,
+ pub rseq: *mut rseq,
+ pub rseq_len: u32_,
+ pub rseq_sig: u32_,
+ pub rseq_event_mask: ::aya_bpf::cty::c_ulong,
+ pub mm_cid: ::aya_bpf::cty::c_int,
+ pub last_mm_cid: ::aya_bpf::cty::c_int,
+ pub migrate_from_cpu: ::aya_bpf::cty::c_int,
+ pub mm_cid_active: ::aya_bpf::cty::c_int,
+ pub cid_work: callback_head,
+ pub tlb_ubc: tlbflush_unmap_batch,
+ pub splice_pipe: *mut pipe_inode_info,
+ pub task_frag: page_frag,
+ pub delays: *mut task_delay_info,
+ pub nr_dirtied: ::aya_bpf::cty::c_int,
+ pub nr_dirtied_pause: ::aya_bpf::cty::c_int,
+ pub dirty_paused_when: ::aya_bpf::cty::c_ulong,
+ pub latency_record_count: ::aya_bpf::cty::c_int,
+ pub latency_record: [latency_record; 32usize],
+ pub timer_slack_ns: u64_,
+ pub default_timer_slack_ns: u64_,
+ pub curr_ret_stack: ::aya_bpf::cty::c_int,
+ pub curr_ret_depth: ::aya_bpf::cty::c_int,
+ pub ret_stack: *mut ftrace_ret_stack,
+ pub ftrace_timestamp: ::aya_bpf::cty::c_ulonglong,
+ pub trace_overrun: atomic_t,
+ pub tracing_graph_pause: atomic_t,
+ pub trace_recursion: ::aya_bpf::cty::c_ulong,
+ pub memcg_in_oom: *mut mem_cgroup,
+ pub memcg_oom_gfp_mask: gfp_t,
+ pub memcg_oom_order: ::aya_bpf::cty::c_int,
+ pub memcg_nr_pages_over_high: ::aya_bpf::cty::c_uint,
+ pub active_memcg: *mut mem_cgroup,
+ pub throttle_disk: *mut gendisk,
+ pub utask: *mut uprobe_task,
+ pub sequential_io: ::aya_bpf::cty::c_uint,
+ pub sequential_io_avg: ::aya_bpf::cty::c_uint,
+ pub kmap_ctrl: kmap_ctrl,
+ pub rcu: callback_head,
+ pub rcu_users: refcount_t,
+ pub pagefault_disabled: ::aya_bpf::cty::c_int,
+ pub oom_reaper_list: *mut task_struct,
+ pub oom_reaper_timer: timer_list,
+ pub stack_vm_area: *mut vm_struct,
+ pub stack_refcount: refcount_t,
+ pub security: *mut ::aya_bpf::cty::c_void,
+ pub bpf_storage: *mut bpf_local_storage,
+ pub bpf_ctx: *mut bpf_run_ctx,
+ pub mce_vaddr: *mut ::aya_bpf::cty::c_void,
+ pub mce_kflags: __u64,
+ pub mce_addr: u64_,
+ pub _bitfield_align_3: [u64; 0],
+ pub _bitfield_3: __BindgenBitfieldUnit<[u8; 8usize]>,
+ pub mce_kill_me: callback_head,
+ pub mce_count: ::aya_bpf::cty::c_int,
+ pub kretprobe_instances: llist_head,
+ pub rethooks: llist_head,
+ pub l1d_flush_kill: callback_head,
+ pub user_event_mm: *mut user_event_mm,
+ pub _bitfield_align_4: [u8; 0],
+ pub _bitfield_4: __BindgenBitfieldUnit<[u8; 8usize]>,
+ pub thread: thread_struct,
+}
+impl task_struct {
+ #[inline]
+ pub fn sched_reset_on_fork(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sched_reset_on_fork(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sched_contributes_to_load(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sched_contributes_to_load(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sched_migrated(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sched_migrated(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sched_remote_wakeup(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(32usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_sched_remote_wakeup(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(32usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_execve(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(33usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_execve(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(33usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_iowait(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(34usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_iowait(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(34usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn restore_sigmask(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(35usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_restore_sigmask(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(35usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_user_fault(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(36usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_user_fault(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(36usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_lru_fault(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(37usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_lru_fault(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(37usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn no_cgroup_migration(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(38usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_no_cgroup_migration(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(38usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn frozen(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(39usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_frozen(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(39usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn use_memdelay(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(40usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_use_memdelay(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(40usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_memstall(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(41usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_memstall(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(41usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_eventfd(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(42usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_eventfd(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(42usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn pasid_activated(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(43usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_pasid_activated(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(43usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn reported_split_lock(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(44usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_reported_split_lock(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(44usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_thrashing(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(45usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_thrashing(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(45usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_2(
+ sched_reset_on_fork: ::aya_bpf::cty::c_uint,
+ sched_contributes_to_load: ::aya_bpf::cty::c_uint,
+ sched_migrated: ::aya_bpf::cty::c_uint,
+ sched_remote_wakeup: ::aya_bpf::cty::c_uint,
+ in_execve: ::aya_bpf::cty::c_uint,
+ in_iowait: ::aya_bpf::cty::c_uint,
+ restore_sigmask: ::aya_bpf::cty::c_uint,
+ in_user_fault: ::aya_bpf::cty::c_uint,
+ in_lru_fault: ::aya_bpf::cty::c_uint,
+ no_cgroup_migration: ::aya_bpf::cty::c_uint,
+ frozen: ::aya_bpf::cty::c_uint,
+ use_memdelay: ::aya_bpf::cty::c_uint,
+ in_memstall: ::aya_bpf::cty::c_uint,
+ in_eventfd: ::aya_bpf::cty::c_uint,
+ pasid_activated: ::aya_bpf::cty::c_uint,
+ reported_split_lock: ::aya_bpf::cty::c_uint,
+ in_thrashing: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 6usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 6usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let sched_reset_on_fork: u32 = unsafe { ::core::mem::transmute(sched_reset_on_fork) };
+ sched_reset_on_fork as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let sched_contributes_to_load: u32 =
+ unsafe { ::core::mem::transmute(sched_contributes_to_load) };
+ sched_contributes_to_load as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let sched_migrated: u32 = unsafe { ::core::mem::transmute(sched_migrated) };
+ sched_migrated as u64
+ });
+ __bindgen_bitfield_unit.set(32usize, 1u8, {
+ let sched_remote_wakeup: u32 = unsafe { ::core::mem::transmute(sched_remote_wakeup) };
+ sched_remote_wakeup as u64
+ });
+ __bindgen_bitfield_unit.set(33usize, 1u8, {
+ let in_execve: u32 = unsafe { ::core::mem::transmute(in_execve) };
+ in_execve as u64
+ });
+ __bindgen_bitfield_unit.set(34usize, 1u8, {
+ let in_iowait: u32 = unsafe { ::core::mem::transmute(in_iowait) };
+ in_iowait as u64
+ });
+ __bindgen_bitfield_unit.set(35usize, 1u8, {
+ let restore_sigmask: u32 = unsafe { ::core::mem::transmute(restore_sigmask) };
+ restore_sigmask as u64
+ });
+ __bindgen_bitfield_unit.set(36usize, 1u8, {
+ let in_user_fault: u32 = unsafe { ::core::mem::transmute(in_user_fault) };
+ in_user_fault as u64
+ });
+ __bindgen_bitfield_unit.set(37usize, 1u8, {
+ let in_lru_fault: u32 = unsafe { ::core::mem::transmute(in_lru_fault) };
+ in_lru_fault as u64
+ });
+ __bindgen_bitfield_unit.set(38usize, 1u8, {
+ let no_cgroup_migration: u32 = unsafe { ::core::mem::transmute(no_cgroup_migration) };
+ no_cgroup_migration as u64
+ });
+ __bindgen_bitfield_unit.set(39usize, 1u8, {
+ let frozen: u32 = unsafe { ::core::mem::transmute(frozen) };
+ frozen as u64
+ });
+ __bindgen_bitfield_unit.set(40usize, 1u8, {
+ let use_memdelay: u32 = unsafe { ::core::mem::transmute(use_memdelay) };
+ use_memdelay as u64
+ });
+ __bindgen_bitfield_unit.set(41usize, 1u8, {
+ let in_memstall: u32 = unsafe { ::core::mem::transmute(in_memstall) };
+ in_memstall as u64
+ });
+ __bindgen_bitfield_unit.set(42usize, 1u8, {
+ let in_eventfd: u32 = unsafe { ::core::mem::transmute(in_eventfd) };
+ in_eventfd as u64
+ });
+ __bindgen_bitfield_unit.set(43usize, 1u8, {
+ let pasid_activated: u32 = unsafe { ::core::mem::transmute(pasid_activated) };
+ pasid_activated as u64
+ });
+ __bindgen_bitfield_unit.set(44usize, 1u8, {
+ let reported_split_lock: u32 = unsafe { ::core::mem::transmute(reported_split_lock) };
+ reported_split_lock as u64
+ });
+ __bindgen_bitfield_unit.set(45usize, 1u8, {
+ let in_thrashing: u32 = unsafe { ::core::mem::transmute(in_thrashing) };
+ in_thrashing as u64
+ });
+ __bindgen_bitfield_unit
+ }
+ #[inline]
+ pub fn mce_ripv(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(0usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_mce_ripv(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_3.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn mce_whole_page(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(1usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_mce_whole_page(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_3.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn __mce_reserved(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(2usize, 62u8) as u64) }
+ }
+ #[inline]
+ pub fn set___mce_reserved(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_3.set(2usize, 62u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_3(
+ mce_ripv: __u64,
+ mce_whole_page: __u64,
+ __mce_reserved: __u64,
+ ) -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let mce_ripv: u64 = unsafe { ::core::mem::transmute(mce_ripv) };
+ mce_ripv as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let mce_whole_page: u64 = unsafe { ::core::mem::transmute(mce_whole_page) };
+ mce_whole_page as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 62u8, {
+ let __mce_reserved: u64 = unsafe { ::core::mem::transmute(__mce_reserved) };
+ __mce_reserved as u64
+ });
+ __bindgen_bitfield_unit
+ }
+ #[inline]
+ pub fn new_bitfield_4() -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct lockdep_map_p {}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct maple_tree {
+ pub __bindgen_anon_1: maple_tree__bindgen_ty_1,
+ pub ma_root: *mut ::aya_bpf::cty::c_void,
+ pub ma_flags: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union maple_tree__bindgen_ty_1 {
+ pub ma_lock: spinlock_t,
+ pub ma_external_lock: lockdep_map_p,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct rw_semaphore {
+ pub count: atomic_long_t,
+ pub owner: atomic_long_t,
+ pub osq: optimistic_spin_queue,
+ pub wait_lock: raw_spinlock_t,
+ pub wait_list: list_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct percpu_counter {
+ pub lock: raw_spinlock_t,
+ pub count: s64,
+ pub list: list_head,
+ pub counters: *mut s32,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct mm_context_t {
+ pub ctx_id: u64_,
+ pub tlb_gen: atomic64_t,
+ pub ldt_usr_sem: rw_semaphore,
+ pub ldt: *mut ldt_struct,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub lam_cr3_mask: ::aya_bpf::cty::c_ulong,
+ pub untag_mask: u64_,
+ pub lock: mutex,
+ pub vdso: *mut ::aya_bpf::cty::c_void,
+ pub vdso_image: *const vdso_image,
+ pub perf_rdpmc_allowed: atomic_t,
+ pub pkey_allocation_map: u16_,
+ pub execute_only_pkey: s16,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uprobes_state {
+ pub xol_area: *mut xol_area,
+}
+pub type work_func_t = ::core::option::Option;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct work_struct {
+ pub data: atomic_long_t,
+ pub entry: list_head,
+ pub func: work_func_t,
+}
+#[repr(C)]
+pub struct mm_struct {
+ pub __bindgen_anon_1: mm_struct__bindgen_ty_1,
+ pub cpu_bitmap: __IncompleteArrayField<::aya_bpf::cty::c_ulong>,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct mm_struct__bindgen_ty_1 {
+ pub __bindgen_anon_1: mm_struct__bindgen_ty_1__bindgen_ty_1,
+ pub mm_mt: maple_tree,
+ pub get_unmapped_area: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: ::aya_bpf::cty::c_ulong,
+ arg4: ::aya_bpf::cty::c_ulong,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_ulong,
+ >,
+ pub mmap_base: ::aya_bpf::cty::c_ulong,
+ pub mmap_legacy_base: ::aya_bpf::cty::c_ulong,
+ pub mmap_compat_base: ::aya_bpf::cty::c_ulong,
+ pub mmap_compat_legacy_base: ::aya_bpf::cty::c_ulong,
+ pub task_size: ::aya_bpf::cty::c_ulong,
+ pub pgd: *mut pgd_t,
+ pub membarrier_state: atomic_t,
+ pub mm_users: atomic_t,
+ pub pcpu_cid: *mut mm_cid,
+ pub mm_cid_next_scan: ::aya_bpf::cty::c_ulong,
+ pub pgtables_bytes: atomic_long_t,
+ pub map_count: ::aya_bpf::cty::c_int,
+ pub page_table_lock: spinlock_t,
+ pub mmap_lock: rw_semaphore,
+ pub mmlist: list_head,
+ pub mm_lock_seq: ::aya_bpf::cty::c_int,
+ pub hiwater_rss: ::aya_bpf::cty::c_ulong,
+ pub hiwater_vm: ::aya_bpf::cty::c_ulong,
+ pub total_vm: ::aya_bpf::cty::c_ulong,
+ pub locked_vm: ::aya_bpf::cty::c_ulong,
+ pub pinned_vm: atomic64_t,
+ pub data_vm: ::aya_bpf::cty::c_ulong,
+ pub exec_vm: ::aya_bpf::cty::c_ulong,
+ pub stack_vm: ::aya_bpf::cty::c_ulong,
+ pub def_flags: ::aya_bpf::cty::c_ulong,
+ pub write_protect_seq: seqcount_t,
+ pub arg_lock: spinlock_t,
+ pub start_code: ::aya_bpf::cty::c_ulong,
+ pub end_code: ::aya_bpf::cty::c_ulong,
+ pub start_data: ::aya_bpf::cty::c_ulong,
+ pub end_data: ::aya_bpf::cty::c_ulong,
+ pub start_brk: ::aya_bpf::cty::c_ulong,
+ pub brk: ::aya_bpf::cty::c_ulong,
+ pub start_stack: ::aya_bpf::cty::c_ulong,
+ pub arg_start: ::aya_bpf::cty::c_ulong,
+ pub arg_end: ::aya_bpf::cty::c_ulong,
+ pub env_start: ::aya_bpf::cty::c_ulong,
+ pub env_end: ::aya_bpf::cty::c_ulong,
+ pub saved_auxv: [::aya_bpf::cty::c_ulong; 52usize],
+ pub rss_stat: [percpu_counter; 4usize],
+ pub binfmt: *mut linux_binfmt,
+ pub context: mm_context_t,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub ioctx_lock: spinlock_t,
+ pub ioctx_table: *mut kioctx_table,
+ pub owner: *mut task_struct,
+ pub user_ns: *mut user_namespace,
+ pub exe_file: *mut file,
+ pub notifier_subscriptions: *mut mmu_notifier_subscriptions,
+ pub numa_next_scan: ::aya_bpf::cty::c_ulong,
+ pub numa_scan_offset: ::aya_bpf::cty::c_ulong,
+ pub numa_scan_seq: ::aya_bpf::cty::c_int,
+ pub tlb_flush_pending: atomic_t,
+ pub tlb_flush_batched: atomic_t,
+ pub uprobes_state: uprobes_state,
+ pub hugetlb_usage: atomic_long_t,
+ pub async_put_work: work_struct,
+ pub pasid: u32_,
+ pub ksm_merging_pages: ::aya_bpf::cty::c_ulong,
+ pub ksm_rmap_items: ::aya_bpf::cty::c_ulong,
+ pub lru_gen: mm_struct__bindgen_ty_1__bindgen_ty_2,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 8usize]>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mm_struct__bindgen_ty_1__bindgen_ty_1 {
+ pub mm_count: atomic_t,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 56usize]>,
+ pub __bindgen_padding_0: u32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mm_struct__bindgen_ty_1__bindgen_ty_2 {
+ pub list: list_head,
+ pub bitmap: ::aya_bpf::cty::c_ulong,
+ pub memcg: *mut mem_cgroup,
+}
+impl mm_struct__bindgen_ty_1 {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+pub type vm_flags_t = ::aya_bpf::cty::c_ulong;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_userfaultfd_ctx {
+ pub ctx: *mut userfaultfd_ctx,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct vm_area_struct {
+ pub __bindgen_anon_1: vm_area_struct__bindgen_ty_1,
+ pub vm_mm: *mut mm_struct,
+ pub vm_page_prot: pgprot_t,
+ pub __bindgen_anon_2: vm_area_struct__bindgen_ty_2,
+ pub vm_lock_seq: ::aya_bpf::cty::c_int,
+ pub vm_lock: *mut vma_lock,
+ pub detached: bool_,
+ pub shared: vm_area_struct__bindgen_ty_3,
+ pub anon_vma_chain: list_head,
+ pub anon_vma: *mut anon_vma,
+ pub vm_ops: *const vm_operations_struct,
+ pub vm_pgoff: ::aya_bpf::cty::c_ulong,
+ pub vm_file: *mut file,
+ pub vm_private_data: *mut ::aya_bpf::cty::c_void,
+ pub anon_name: *mut anon_vma_name,
+ pub swap_readahead_info: atomic_long_t,
+ pub vm_policy: *mut mempolicy,
+ pub numab_state: *mut vma_numab_state,
+ pub vm_userfaultfd_ctx: vm_userfaultfd_ctx,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union vm_area_struct__bindgen_ty_1 {
+ pub __bindgen_anon_1: vm_area_struct__bindgen_ty_1__bindgen_ty_1,
+ pub vm_rcu: callback_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_area_struct__bindgen_ty_1__bindgen_ty_1 {
+ pub vm_start: ::aya_bpf::cty::c_ulong,
+ pub vm_end: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union vm_area_struct__bindgen_ty_2 {
+ pub vm_flags: vm_flags_t,
+ pub __vm_flags: vm_flags_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_area_struct__bindgen_ty_3 {
+ pub rb: rb_node,
+ pub rb_subtree_last: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct math_emu_info {
+ pub ___orig_eip: ::aya_bpf::cty::c_long,
+ pub regs: *mut pt_regs,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct attribute_group {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub is_visible: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kobject,
+ arg2: *mut attribute,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> umode_t,
+ >,
+ pub is_bin_visible: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kobject,
+ arg2: *mut bin_attribute,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> umode_t,
+ >,
+ pub attrs: *mut *mut attribute,
+ pub bin_attrs: *mut *mut bin_attribute,
+}
+pub type cpumask_var_t = [cpumask; 1usize];
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct range {
+ pub start: u64_,
+ pub end: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct tracepoint_func {
+ pub func: *mut ::aya_bpf::cty::c_void,
+ pub data: *mut ::aya_bpf::cty::c_void,
+ pub prio: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct tracepoint {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub key: static_key,
+ pub static_call_key: *mut static_call_key,
+ pub static_call_tramp: *mut ::aya_bpf::cty::c_void,
+ pub iterator: *mut ::aya_bpf::cty::c_void,
+ pub regfunc: ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub unregfunc: ::core::option::Option,
+ pub funcs: *mut tracepoint_func,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct bpf_raw_event_map {
+ pub tp: *mut tracepoint,
+ pub bpf_func: *mut ::aya_bpf::cty::c_void,
+ pub num_args: u32_,
+ pub writable_size: u32_,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 8usize]>,
+}
+impl bpf_raw_event_map {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct seq_operations {
+ pub start: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut loff_t) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub stop: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut ::aya_bpf::cty::c_void),
+ >,
+ pub next: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut seq_file,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ arg3: *mut loff_t,
+ ) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub show: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut seq_file,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+pub mod perf_event_state {
+ pub type Type = ::aya_bpf::cty::c_int;
+ pub const PERF_EVENT_STATE_DEAD: Type = -4;
+ pub const PERF_EVENT_STATE_EXIT: Type = -3;
+ pub const PERF_EVENT_STATE_ERROR: Type = -2;
+ pub const PERF_EVENT_STATE_OFF: Type = -1;
+ pub const PERF_EVENT_STATE_INACTIVE: Type = 0;
+ pub const PERF_EVENT_STATE_ACTIVE: Type = 1;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct local_t {
+ pub a: atomic_long_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct local64_t {
+ pub a: local_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct perf_event_attr {
+ pub type_: __u32,
+ pub size: __u32,
+ pub config: __u64,
+ pub __bindgen_anon_1: perf_event_attr__bindgen_ty_1,
+ pub sample_type: __u64,
+ pub read_format: __u64,
+ pub _bitfield_align_1: [u32; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 8usize]>,
+ pub __bindgen_anon_2: perf_event_attr__bindgen_ty_2,
+ pub bp_type: __u32,
+ pub __bindgen_anon_3: perf_event_attr__bindgen_ty_3,
+ pub __bindgen_anon_4: perf_event_attr__bindgen_ty_4,
+ pub branch_sample_type: __u64,
+ pub sample_regs_user: __u64,
+ pub sample_stack_user: __u32,
+ pub clockid: __s32,
+ pub sample_regs_intr: __u64,
+ pub aux_watermark: __u32,
+ pub sample_max_stack: __u16,
+ pub __reserved_2: __u16,
+ pub aux_sample_size: __u32,
+ pub __reserved_3: __u32,
+ pub sig_data: __u64,
+ pub config3: __u64,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union perf_event_attr__bindgen_ty_1 {
+ pub sample_period: __u64,
+ pub sample_freq: __u64,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union perf_event_attr__bindgen_ty_2 {
+ pub wakeup_events: __u32,
+ pub wakeup_watermark: __u32,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union perf_event_attr__bindgen_ty_3 {
+ pub bp_addr: __u64,
+ pub kprobe_func: __u64,
+ pub uprobe_path: __u64,
+ pub config1: __u64,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union perf_event_attr__bindgen_ty_4 {
+ pub bp_len: __u64,
+ pub kprobe_addr: __u64,
+ pub probe_offset: __u64,
+ pub config2: __u64,
+}
+impl perf_event_attr {
+ #[inline]
+ pub fn disabled(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_disabled(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn inherit(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_inherit(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn pinned(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_pinned(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclusive(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclusive(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_user(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_user(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_kernel(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(5usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_kernel(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(5usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_hv(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(6usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_hv(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(6usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_idle(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_idle(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(7usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn mmap(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_mmap(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn comm(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(9usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_comm(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(9usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn freq(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(10usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_freq(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(10usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn inherit_stat(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(11usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_inherit_stat(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(11usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn enable_on_exec(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(12usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_enable_on_exec(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(12usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn task(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(13usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_task(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(13usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn watermark(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(14usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_watermark(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(14usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn precise_ip(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(15usize, 2u8) as u64) }
+ }
+ #[inline]
+ pub fn set_precise_ip(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(15usize, 2u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn mmap_data(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(17usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_mmap_data(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(17usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sample_id_all(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(18usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_sample_id_all(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(18usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_host(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(19usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_host(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(19usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_guest(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(20usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_guest(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(20usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_callchain_kernel(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(21usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_callchain_kernel(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(21usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn exclude_callchain_user(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(22usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_exclude_callchain_user(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(22usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn mmap2(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(23usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_mmap2(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(23usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn comm_exec(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(24usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_comm_exec(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(24usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn use_clockid(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(25usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_use_clockid(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(25usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn context_switch(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(26usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_context_switch(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(26usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn write_backward(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(27usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_write_backward(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(27usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn namespaces(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(28usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_namespaces(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(28usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn ksymbol(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(29usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_ksymbol(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(29usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn bpf_event(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(30usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_bpf_event(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(30usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn aux_output(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(31usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_aux_output(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(31usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn cgroup(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(32usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_cgroup(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(32usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn text_poke(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(33usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_text_poke(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(33usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn build_id(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(34usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_build_id(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(34usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn inherit_thread(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(35usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_inherit_thread(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(35usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn remove_on_exec(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(36usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_remove_on_exec(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(36usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn sigtrap(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(37usize, 1u8) as u64) }
+ }
+ #[inline]
+ pub fn set_sigtrap(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(37usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn __reserved_1(&self) -> __u64 {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(38usize, 26u8) as u64) }
+ }
+ #[inline]
+ pub fn set___reserved_1(&mut self, val: __u64) {
+ unsafe {
+ let val: u64 = ::core::mem::transmute(val);
+ self._bitfield_1.set(38usize, 26u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ disabled: __u64,
+ inherit: __u64,
+ pinned: __u64,
+ exclusive: __u64,
+ exclude_user: __u64,
+ exclude_kernel: __u64,
+ exclude_hv: __u64,
+ exclude_idle: __u64,
+ mmap: __u64,
+ comm: __u64,
+ freq: __u64,
+ inherit_stat: __u64,
+ enable_on_exec: __u64,
+ task: __u64,
+ watermark: __u64,
+ precise_ip: __u64,
+ mmap_data: __u64,
+ sample_id_all: __u64,
+ exclude_host: __u64,
+ exclude_guest: __u64,
+ exclude_callchain_kernel: __u64,
+ exclude_callchain_user: __u64,
+ mmap2: __u64,
+ comm_exec: __u64,
+ use_clockid: __u64,
+ context_switch: __u64,
+ write_backward: __u64,
+ namespaces: __u64,
+ ksymbol: __u64,
+ bpf_event: __u64,
+ aux_output: __u64,
+ cgroup: __u64,
+ text_poke: __u64,
+ build_id: __u64,
+ inherit_thread: __u64,
+ remove_on_exec: __u64,
+ sigtrap: __u64,
+ __reserved_1: __u64,
+ ) -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let disabled: u64 = unsafe { ::core::mem::transmute(disabled) };
+ disabled as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let inherit: u64 = unsafe { ::core::mem::transmute(inherit) };
+ inherit as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let pinned: u64 = unsafe { ::core::mem::transmute(pinned) };
+ pinned as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let exclusive: u64 = unsafe { ::core::mem::transmute(exclusive) };
+ exclusive as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let exclude_user: u64 = unsafe { ::core::mem::transmute(exclude_user) };
+ exclude_user as u64
+ });
+ __bindgen_bitfield_unit.set(5usize, 1u8, {
+ let exclude_kernel: u64 = unsafe { ::core::mem::transmute(exclude_kernel) };
+ exclude_kernel as u64
+ });
+ __bindgen_bitfield_unit.set(6usize, 1u8, {
+ let exclude_hv: u64 = unsafe { ::core::mem::transmute(exclude_hv) };
+ exclude_hv as u64
+ });
+ __bindgen_bitfield_unit.set(7usize, 1u8, {
+ let exclude_idle: u64 = unsafe { ::core::mem::transmute(exclude_idle) };
+ exclude_idle as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 1u8, {
+ let mmap: u64 = unsafe { ::core::mem::transmute(mmap) };
+ mmap as u64
+ });
+ __bindgen_bitfield_unit.set(9usize, 1u8, {
+ let comm: u64 = unsafe { ::core::mem::transmute(comm) };
+ comm as u64
+ });
+ __bindgen_bitfield_unit.set(10usize, 1u8, {
+ let freq: u64 = unsafe { ::core::mem::transmute(freq) };
+ freq as u64
+ });
+ __bindgen_bitfield_unit.set(11usize, 1u8, {
+ let inherit_stat: u64 = unsafe { ::core::mem::transmute(inherit_stat) };
+ inherit_stat as u64
+ });
+ __bindgen_bitfield_unit.set(12usize, 1u8, {
+ let enable_on_exec: u64 = unsafe { ::core::mem::transmute(enable_on_exec) };
+ enable_on_exec as u64
+ });
+ __bindgen_bitfield_unit.set(13usize, 1u8, {
+ let task: u64 = unsafe { ::core::mem::transmute(task) };
+ task as u64
+ });
+ __bindgen_bitfield_unit.set(14usize, 1u8, {
+ let watermark: u64 = unsafe { ::core::mem::transmute(watermark) };
+ watermark as u64
+ });
+ __bindgen_bitfield_unit.set(15usize, 2u8, {
+ let precise_ip: u64 = unsafe { ::core::mem::transmute(precise_ip) };
+ precise_ip as u64
+ });
+ __bindgen_bitfield_unit.set(17usize, 1u8, {
+ let mmap_data: u64 = unsafe { ::core::mem::transmute(mmap_data) };
+ mmap_data as u64
+ });
+ __bindgen_bitfield_unit.set(18usize, 1u8, {
+ let sample_id_all: u64 = unsafe { ::core::mem::transmute(sample_id_all) };
+ sample_id_all as u64
+ });
+ __bindgen_bitfield_unit.set(19usize, 1u8, {
+ let exclude_host: u64 = unsafe { ::core::mem::transmute(exclude_host) };
+ exclude_host as u64
+ });
+ __bindgen_bitfield_unit.set(20usize, 1u8, {
+ let exclude_guest: u64 = unsafe { ::core::mem::transmute(exclude_guest) };
+ exclude_guest as u64
+ });
+ __bindgen_bitfield_unit.set(21usize, 1u8, {
+ let exclude_callchain_kernel: u64 =
+ unsafe { ::core::mem::transmute(exclude_callchain_kernel) };
+ exclude_callchain_kernel as u64
+ });
+ __bindgen_bitfield_unit.set(22usize, 1u8, {
+ let exclude_callchain_user: u64 =
+ unsafe { ::core::mem::transmute(exclude_callchain_user) };
+ exclude_callchain_user as u64
+ });
+ __bindgen_bitfield_unit.set(23usize, 1u8, {
+ let mmap2: u64 = unsafe { ::core::mem::transmute(mmap2) };
+ mmap2 as u64
+ });
+ __bindgen_bitfield_unit.set(24usize, 1u8, {
+ let comm_exec: u64 = unsafe { ::core::mem::transmute(comm_exec) };
+ comm_exec as u64
+ });
+ __bindgen_bitfield_unit.set(25usize, 1u8, {
+ let use_clockid: u64 = unsafe { ::core::mem::transmute(use_clockid) };
+ use_clockid as u64
+ });
+ __bindgen_bitfield_unit.set(26usize, 1u8, {
+ let context_switch: u64 = unsafe { ::core::mem::transmute(context_switch) };
+ context_switch as u64
+ });
+ __bindgen_bitfield_unit.set(27usize, 1u8, {
+ let write_backward: u64 = unsafe { ::core::mem::transmute(write_backward) };
+ write_backward as u64
+ });
+ __bindgen_bitfield_unit.set(28usize, 1u8, {
+ let namespaces: u64 = unsafe { ::core::mem::transmute(namespaces) };
+ namespaces as u64
+ });
+ __bindgen_bitfield_unit.set(29usize, 1u8, {
+ let ksymbol: u64 = unsafe { ::core::mem::transmute(ksymbol) };
+ ksymbol as u64
+ });
+ __bindgen_bitfield_unit.set(30usize, 1u8, {
+ let bpf_event: u64 = unsafe { ::core::mem::transmute(bpf_event) };
+ bpf_event as u64
+ });
+ __bindgen_bitfield_unit.set(31usize, 1u8, {
+ let aux_output: u64 = unsafe { ::core::mem::transmute(aux_output) };
+ aux_output as u64
+ });
+ __bindgen_bitfield_unit.set(32usize, 1u8, {
+ let cgroup: u64 = unsafe { ::core::mem::transmute(cgroup) };
+ cgroup as u64
+ });
+ __bindgen_bitfield_unit.set(33usize, 1u8, {
+ let text_poke: u64 = unsafe { ::core::mem::transmute(text_poke) };
+ text_poke as u64
+ });
+ __bindgen_bitfield_unit.set(34usize, 1u8, {
+ let build_id: u64 = unsafe { ::core::mem::transmute(build_id) };
+ build_id as u64
+ });
+ __bindgen_bitfield_unit.set(35usize, 1u8, {
+ let inherit_thread: u64 = unsafe { ::core::mem::transmute(inherit_thread) };
+ inherit_thread as u64
+ });
+ __bindgen_bitfield_unit.set(36usize, 1u8, {
+ let remove_on_exec: u64 = unsafe { ::core::mem::transmute(remove_on_exec) };
+ remove_on_exec as u64
+ });
+ __bindgen_bitfield_unit.set(37usize, 1u8, {
+ let sigtrap: u64 = unsafe { ::core::mem::transmute(sigtrap) };
+ sigtrap as u64
+ });
+ __bindgen_bitfield_unit.set(38usize, 26u8, {
+ let __reserved_1: u64 = unsafe { ::core::mem::transmute(__reserved_1) };
+ __reserved_1 as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event_extra {
+ pub config: u64_,
+ pub reg: ::aya_bpf::cty::c_uint,
+ pub alloc: ::aya_bpf::cty::c_int,
+ pub idx: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct arch_hw_breakpoint {
+ pub address: ::aya_bpf::cty::c_ulong,
+ pub mask: ::aya_bpf::cty::c_ulong,
+ pub len: u8_,
+ pub type_: u8_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rhash_head {
+ pub next: *mut rhash_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rhlist_head {
+ pub rhead: rhash_head,
+ pub next: *mut rhlist_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct hw_perf_event {
+ pub __bindgen_anon_1: hw_perf_event__bindgen_ty_1,
+ pub target: *mut task_struct,
+ pub addr_filters: *mut ::aya_bpf::cty::c_void,
+ pub addr_filters_gen: ::aya_bpf::cty::c_ulong,
+ pub state: ::aya_bpf::cty::c_int,
+ pub prev_count: local64_t,
+ pub sample_period: u64_,
+ pub __bindgen_anon_2: hw_perf_event__bindgen_ty_2,
+ pub interrupts_seq: u64_,
+ pub interrupts: u64_,
+ pub freq_time_stamp: u64_,
+ pub freq_count_stamp: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union hw_perf_event__bindgen_ty_1 {
+ pub __bindgen_anon_1: hw_perf_event__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: hw_perf_event__bindgen_ty_1__bindgen_ty_2,
+ pub __bindgen_anon_3: hw_perf_event__bindgen_ty_1__bindgen_ty_3,
+ pub __bindgen_anon_4: hw_perf_event__bindgen_ty_1__bindgen_ty_4,
+ pub __bindgen_anon_5: hw_perf_event__bindgen_ty_1__bindgen_ty_5,
+ pub __bindgen_anon_6: hw_perf_event__bindgen_ty_1__bindgen_ty_6,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_1 {
+ pub config: u64_,
+ pub last_tag: u64_,
+ pub config_base: ::aya_bpf::cty::c_ulong,
+ pub event_base: ::aya_bpf::cty::c_ulong,
+ pub event_base_rdpmc: ::aya_bpf::cty::c_int,
+ pub idx: ::aya_bpf::cty::c_int,
+ pub last_cpu: ::aya_bpf::cty::c_int,
+ pub flags: ::aya_bpf::cty::c_int,
+ pub extra_reg: hw_perf_event_extra,
+ pub branch_reg: hw_perf_event_extra,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_2 {
+ pub hrtimer: hrtimer,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_3 {
+ pub tp_list: list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_4 {
+ pub pwr_acc: u64_,
+ pub ptsc: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_5 {
+ pub info: arch_hw_breakpoint,
+ pub bp_list: rhlist_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_1__bindgen_ty_6 {
+ pub iommu_bank: u8_,
+ pub iommu_cntr: u8_,
+ pub padding: u16_,
+ pub conf: u64_,
+ pub conf1: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union hw_perf_event__bindgen_ty_2 {
+ pub __bindgen_anon_1: hw_perf_event__bindgen_ty_2__bindgen_ty_1,
+ pub __bindgen_anon_2: hw_perf_event__bindgen_ty_2__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_2__bindgen_ty_1 {
+ pub last_period: u64_,
+ pub period_left: local64_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hw_perf_event__bindgen_ty_2__bindgen_ty_2 {
+ pub saved_metric: u64_,
+ pub saved_slots: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct wait_queue_head {
+ pub lock: spinlock_t,
+ pub head: list_head,
+}
+pub type wait_queue_head_t = wait_queue_head;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rcuwait {
+ pub task: *mut task_struct,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct irq_work {
+ pub node: __call_single_node,
+ pub func: ::core::option::Option,
+ pub irqwait: rcuwait,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct perf_addr_filters_head {
+ pub list: list_head,
+ pub lock: raw_spinlock_t,
+ pub nr_file_filters: ::aya_bpf::cty::c_uint,
+}
+pub type perf_overflow_handler_t = ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut perf_event, arg2: *mut perf_sample_data, arg3: *mut pt_regs),
+>;
+pub type ftrace_func_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: ::aya_bpf::cty::c_ulong,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: *mut ftrace_ops,
+ arg4: *mut ftrace_regs,
+ ),
+>;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ftrace_ops_hash {
+ pub notrace_hash: *mut ftrace_hash,
+ pub filter_hash: *mut ftrace_hash,
+ pub regex_lock: mutex,
+}
+pub mod ftrace_ops_cmd {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_SELF: Type = 0;
+ pub const FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER: Type = 1;
+ pub const FTRACE_OPS_CMD_DISABLE_SHARE_IPMODIFY_PEER: Type = 2;
+}
+pub type ftrace_ops_func_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut ftrace_ops,
+ arg2: ftrace_ops_cmd::Type,
+ ) -> ::aya_bpf::cty::c_int,
+>;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ftrace_ops {
+ pub func: ftrace_func_t,
+ pub next: *mut ftrace_ops,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub private: *mut ::aya_bpf::cty::c_void,
+ pub saved_func: ftrace_func_t,
+ pub local_hash: ftrace_ops_hash,
+ pub func_hash: *mut ftrace_ops_hash,
+ pub old_hash: ftrace_ops_hash,
+ pub trampoline: ::aya_bpf::cty::c_ulong,
+ pub trampoline_size: ::aya_bpf::cty::c_ulong,
+ pub list: list_head,
+ pub ops_func: ftrace_ops_func_t,
+ pub direct_call: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct perf_event {
+ pub event_entry: list_head,
+ pub sibling_list: list_head,
+ pub active_list: list_head,
+ pub group_node: rb_node,
+ pub group_index: u64_,
+ pub migrate_entry: list_head,
+ pub hlist_entry: hlist_node,
+ pub active_entry: list_head,
+ pub nr_siblings: ::aya_bpf::cty::c_int,
+ pub event_caps: ::aya_bpf::cty::c_int,
+ pub group_caps: ::aya_bpf::cty::c_int,
+ pub group_leader: *mut perf_event,
+ pub pmu: *mut pmu,
+ pub pmu_private: *mut ::aya_bpf::cty::c_void,
+ pub state: perf_event_state::Type,
+ pub attach_state: ::aya_bpf::cty::c_uint,
+ pub count: local64_t,
+ pub child_count: atomic64_t,
+ pub total_time_enabled: u64_,
+ pub total_time_running: u64_,
+ pub tstamp: u64_,
+ pub attr: perf_event_attr,
+ pub header_size: u16_,
+ pub id_header_size: u16_,
+ pub read_size: u16_,
+ pub hw: hw_perf_event,
+ pub ctx: *mut perf_event_context,
+ pub pmu_ctx: *mut perf_event_pmu_context,
+ pub refcount: atomic_long_t,
+ pub child_total_time_enabled: atomic64_t,
+ pub child_total_time_running: atomic64_t,
+ pub child_mutex: mutex,
+ pub child_list: list_head,
+ pub parent: *mut perf_event,
+ pub oncpu: ::aya_bpf::cty::c_int,
+ pub cpu: ::aya_bpf::cty::c_int,
+ pub owner_entry: list_head,
+ pub owner: *mut task_struct,
+ pub mmap_mutex: mutex,
+ pub mmap_count: atomic_t,
+ pub rb: *mut perf_buffer,
+ pub rb_entry: list_head,
+ pub rcu_batches: ::aya_bpf::cty::c_ulong,
+ pub rcu_pending: ::aya_bpf::cty::c_int,
+ pub waitq: wait_queue_head_t,
+ pub fasync: *mut fasync_struct,
+ pub pending_wakeup: ::aya_bpf::cty::c_uint,
+ pub pending_kill: ::aya_bpf::cty::c_uint,
+ pub pending_disable: ::aya_bpf::cty::c_uint,
+ pub pending_sigtrap: ::aya_bpf::cty::c_uint,
+ pub pending_addr: ::aya_bpf::cty::c_ulong,
+ pub pending_irq: irq_work,
+ pub pending_task: callback_head,
+ pub pending_work: ::aya_bpf::cty::c_uint,
+ pub event_limit: atomic_t,
+ pub addr_filters: perf_addr_filters_head,
+ pub addr_filter_ranges: *mut perf_addr_filter_range,
+ pub addr_filters_gen: ::aya_bpf::cty::c_ulong,
+ pub aux_event: *mut perf_event,
+ pub destroy: ::core::option::Option,
+ pub callback_head: callback_head,
+ pub ns: *mut pid_namespace,
+ pub id: u64_,
+ pub lost_samples: atomic64_t,
+ pub clock: ::core::option::Option u64_>,
+ pub overflow_handler: perf_overflow_handler_t,
+ pub overflow_handler_context: *mut ::aya_bpf::cty::c_void,
+ pub orig_overflow_handler: perf_overflow_handler_t,
+ pub prog: *mut bpf_prog,
+ pub bpf_cookie: u64_,
+ pub tp_event: *mut trace_event_call,
+ pub filter: *mut event_filter,
+ pub ftrace_ops: ftrace_ops,
+ pub cgrp: *mut perf_cgroup,
+ pub security: *mut ::aya_bpf::cty::c_void,
+ pub sb_list: list_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct io_bitmap {
+ pub sequence: u64_,
+ pub refcnt: refcount_t,
+ pub max: ::aya_bpf::cty::c_uint,
+ pub bitmap: [::aya_bpf::cty::c_ulong; 1024usize],
+}
+pub type old_time32_t = s32;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct old_timespec32 {
+ pub tv_sec: old_time32_t,
+ pub tv_nsec: s32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pollfd {
+ pub fd: ::aya_bpf::cty::c_int,
+ pub events: ::aya_bpf::cty::c_short,
+ pub revents: ::aya_bpf::cty::c_short,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct rwlock_t {
+ pub raw_lock: arch_rwlock_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hlist_bl_head {
+ pub first: *mut hlist_bl_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hlist_bl_node {
+ pub next: *mut hlist_bl_node,
+ pub pprev: *mut *mut hlist_bl_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct seqcount_raw_spinlock {
+ pub seqcount: seqcount_t,
+}
+pub type seqcount_raw_spinlock_t = seqcount_raw_spinlock;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct seqlock_t {
+ pub seqcount: seqcount_spinlock_t,
+ pub lock: spinlock_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct lockref {
+ pub __bindgen_anon_1: lockref__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union lockref__bindgen_ty_1 {
+ pub lock_count: __u64,
+ pub __bindgen_anon_1: lockref__bindgen_ty_1__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct lockref__bindgen_ty_1__bindgen_ty_1 {
+ pub lock: spinlock_t,
+ pub count: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct qstr {
+ pub __bindgen_anon_1: qstr__bindgen_ty_1,
+ pub name: *const ::aya_bpf::cty::c_uchar,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union qstr__bindgen_ty_1 {
+ pub __bindgen_anon_1: qstr__bindgen_ty_1__bindgen_ty_1,
+ pub hash_len: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qstr__bindgen_ty_1__bindgen_ty_1 {
+ pub hash: u32_,
+ pub len: u32_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct dentry {
+ pub d_flags: ::aya_bpf::cty::c_uint,
+ pub d_seq: seqcount_spinlock_t,
+ pub d_hash: hlist_bl_node,
+ pub d_parent: *mut dentry,
+ pub d_name: qstr,
+ pub d_inode: *mut inode,
+ pub d_iname: [::aya_bpf::cty::c_uchar; 32usize],
+ pub d_lockref: lockref,
+ pub d_op: *const dentry_operations,
+ pub d_sb: *mut super_block,
+ pub d_time: ::aya_bpf::cty::c_ulong,
+ pub d_fsdata: *mut ::aya_bpf::cty::c_void,
+ pub __bindgen_anon_1: dentry__bindgen_ty_1,
+ pub d_child: list_head,
+ pub d_subdirs: list_head,
+ pub d_u: dentry__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union dentry__bindgen_ty_1 {
+ pub d_lru: list_head,
+ pub d_wait: *mut wait_queue_head_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union dentry__bindgen_ty_2 {
+ pub d_alias: hlist_node,
+ pub d_in_lookup_hash: hlist_bl_node,
+ pub d_rcu: callback_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kgid_t {
+ pub val: gid_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct xarray {
+ pub xa_lock: spinlock_t,
+ pub xa_flags: gfp_t,
+ pub xa_head: *mut ::aya_bpf::cty::c_void,
+}
+pub type errseq_t = u32_;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct address_space {
+ pub host: *mut inode,
+ pub i_pages: xarray,
+ pub invalidate_lock: rw_semaphore,
+ pub gfp_mask: gfp_t,
+ pub i_mmap_writable: atomic_t,
+ pub nr_thps: atomic_t,
+ pub i_mmap: rb_root_cached,
+ pub i_mmap_rwsem: rw_semaphore,
+ pub nrpages: ::aya_bpf::cty::c_ulong,
+ pub writeback_index: ::aya_bpf::cty::c_ulong,
+ pub a_ops: *const address_space_operations,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub wb_err: errseq_t,
+ pub private_lock: spinlock_t,
+ pub private_list: list_head,
+ pub private_data: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct inode {
+ pub i_mode: umode_t,
+ pub i_opflags: ::aya_bpf::cty::c_ushort,
+ pub i_uid: kuid_t,
+ pub i_gid: kgid_t,
+ pub i_flags: ::aya_bpf::cty::c_uint,
+ pub i_acl: *mut posix_acl,
+ pub i_default_acl: *mut posix_acl,
+ pub i_op: *const inode_operations,
+ pub i_sb: *mut super_block,
+ pub i_mapping: *mut address_space,
+ pub i_security: *mut ::aya_bpf::cty::c_void,
+ pub i_ino: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: inode__bindgen_ty_1,
+ pub i_rdev: dev_t,
+ pub i_size: loff_t,
+ pub i_atime: timespec64,
+ pub i_mtime: timespec64,
+ pub i_ctime: timespec64,
+ pub i_lock: spinlock_t,
+ pub i_bytes: ::aya_bpf::cty::c_ushort,
+ pub i_blkbits: u8_,
+ pub i_write_hint: u8_,
+ pub i_blocks: blkcnt_t,
+ pub i_state: ::aya_bpf::cty::c_ulong,
+ pub i_rwsem: rw_semaphore,
+ pub dirtied_when: ::aya_bpf::cty::c_ulong,
+ pub dirtied_time_when: ::aya_bpf::cty::c_ulong,
+ pub i_hash: hlist_node,
+ pub i_io_list: list_head,
+ pub i_wb: *mut bdi_writeback,
+ pub i_wb_frn_winner: ::aya_bpf::cty::c_int,
+ pub i_wb_frn_avg_time: u16_,
+ pub i_wb_frn_history: u16_,
+ pub i_lru: list_head,
+ pub i_sb_list: list_head,
+ pub i_wb_list: list_head,
+ pub __bindgen_anon_2: inode__bindgen_ty_2,
+ pub i_version: atomic64_t,
+ pub i_sequence: atomic64_t,
+ pub i_count: atomic_t,
+ pub i_dio_count: atomic_t,
+ pub i_writecount: atomic_t,
+ pub i_readcount: atomic_t,
+ pub __bindgen_anon_3: inode__bindgen_ty_3,
+ pub i_flctx: *mut file_lock_context,
+ pub i_data: address_space,
+ pub i_devices: list_head,
+ pub __bindgen_anon_4: inode__bindgen_ty_4,
+ pub i_generation: __u32,
+ pub i_fsnotify_mask: __u32,
+ pub i_fsnotify_marks: *mut fsnotify_mark_connector,
+ pub i_crypt_info: *mut fscrypt_info,
+ pub i_verity_info: *mut fsverity_info,
+ pub i_private: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union inode__bindgen_ty_1 {
+ pub i_nlink: ::aya_bpf::cty::c_uint,
+ pub __i_nlink: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union inode__bindgen_ty_2 {
+ pub i_dentry: hlist_head,
+ pub i_rcu: callback_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union inode__bindgen_ty_3 {
+ pub i_fop: *const file_operations,
+ pub free_inode: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union inode__bindgen_ty_4 {
+ pub i_pipe: *mut pipe_inode_info,
+ pub i_cdev: *mut cdev,
+ pub i_link: *mut ::aya_bpf::cty::c_char,
+ pub i_dir_seq: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dentry_operations {
+ pub d_revalidate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub d_weak_revalidate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub d_hash: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const dentry, arg2: *mut qstr) -> ::aya_bpf::cty::c_int,
+ >,
+ pub d_compare: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const dentry,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: *const qstr,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub d_delete:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub d_init:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub d_release: ::core::option::Option,
+ pub d_prune: ::core::option::Option,
+ pub d_iput: ::core::option::Option,
+ pub d_dname: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> *mut ::aya_bpf::cty::c_char,
+ >,
+ pub d_automount: ::core::option::Option *mut vfsmount>,
+ pub d_manage: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const path, arg2: bool_) -> ::aya_bpf::cty::c_int,
+ >,
+ pub d_real: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut dentry, arg2: *const inode) -> *mut dentry,
+ >,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 24usize]>,
+}
+impl dentry_operations {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 24usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 24usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mtd_info {
+ _unused: [u8; 0],
+}
+pub type qsize_t = ::aya_bpf::cty::c_longlong;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mem_dqinfo {
+ pub dqi_format: *mut quota_format_type,
+ pub dqi_fmt_id: ::aya_bpf::cty::c_int,
+ pub dqi_dirty_list: list_head,
+ pub dqi_flags: ::aya_bpf::cty::c_ulong,
+ pub dqi_bgrace: ::aya_bpf::cty::c_uint,
+ pub dqi_igrace: ::aya_bpf::cty::c_uint,
+ pub dqi_max_spc_limit: qsize_t,
+ pub dqi_max_ino_limit: qsize_t,
+ pub dqi_priv: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct quota_info {
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub dqio_sem: rw_semaphore,
+ pub files: [*mut inode; 3usize],
+ pub info: [mem_dqinfo; 3usize],
+ pub ops: [*const quota_format_ops; 3usize],
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct rcu_sync {
+ pub gp_state: ::aya_bpf::cty::c_int,
+ pub gp_count: ::aya_bpf::cty::c_int,
+ pub gp_wait: wait_queue_head_t,
+ pub cb_head: callback_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct percpu_rw_semaphore {
+ pub rss: rcu_sync,
+ pub read_count: *mut ::aya_bpf::cty::c_uint,
+ pub writer: rcuwait,
+ pub waiters: wait_queue_head_t,
+ pub block: atomic_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct sb_writers {
+ pub frozen: ::aya_bpf::cty::c_int,
+ pub wait_unfrozen: wait_queue_head_t,
+ pub rw_sem: [percpu_rw_semaphore; 3usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uuid_t {
+ pub b: [__u8; 16usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct shrinker {
+ pub count_objects: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut shrinker,
+ arg2: *mut shrink_control,
+ ) -> ::aya_bpf::cty::c_ulong,
+ >,
+ pub scan_objects: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut shrinker,
+ arg2: *mut shrink_control,
+ ) -> ::aya_bpf::cty::c_ulong,
+ >,
+ pub batch: ::aya_bpf::cty::c_long,
+ pub seeks: ::aya_bpf::cty::c_int,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub list: list_head,
+ pub id: ::aya_bpf::cty::c_int,
+ pub debugfs_id: ::aya_bpf::cty::c_int,
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub debugfs_entry: *mut dentry,
+ pub nr_deferred: *mut atomic_long_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct list_lru {
+ pub node: *mut list_lru_node,
+ pub list: list_head,
+ pub shrinker_id: ::aya_bpf::cty::c_int,
+ pub memcg_aware: bool_,
+ pub xa: xarray,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct super_block {
+ pub s_list: list_head,
+ pub s_dev: dev_t,
+ pub s_blocksize_bits: ::aya_bpf::cty::c_uchar,
+ pub s_blocksize: ::aya_bpf::cty::c_ulong,
+ pub s_maxbytes: loff_t,
+ pub s_type: *mut file_system_type,
+ pub s_op: *const super_operations,
+ pub dq_op: *const dquot_operations,
+ pub s_qcop: *const quotactl_ops,
+ pub s_export_op: *const export_operations,
+ pub s_flags: ::aya_bpf::cty::c_ulong,
+ pub s_iflags: ::aya_bpf::cty::c_ulong,
+ pub s_magic: ::aya_bpf::cty::c_ulong,
+ pub s_root: *mut dentry,
+ pub s_umount: rw_semaphore,
+ pub s_count: ::aya_bpf::cty::c_int,
+ pub s_active: atomic_t,
+ pub s_security: *mut ::aya_bpf::cty::c_void,
+ pub s_xattr: *mut *const xattr_handler,
+ pub s_cop: *const fscrypt_operations,
+ pub s_master_keys: *mut fscrypt_keyring,
+ pub s_vop: *const fsverity_operations,
+ pub s_encoding: *mut unicode_map,
+ pub s_encoding_flags: __u16,
+ pub s_roots: hlist_bl_head,
+ pub s_mounts: list_head,
+ pub s_bdev: *mut block_device,
+ pub s_bdi: *mut backing_dev_info,
+ pub s_mtd: *mut mtd_info,
+ pub s_instances: hlist_node,
+ pub s_quota_types: ::aya_bpf::cty::c_uint,
+ pub s_dquot: quota_info,
+ pub s_writers: sb_writers,
+ pub s_fs_info: *mut ::aya_bpf::cty::c_void,
+ pub s_time_gran: u32_,
+ pub s_time_min: time64_t,
+ pub s_time_max: time64_t,
+ pub s_fsnotify_mask: __u32,
+ pub s_fsnotify_marks: *mut fsnotify_mark_connector,
+ pub s_id: [::aya_bpf::cty::c_char; 32usize],
+ pub s_uuid: uuid_t,
+ pub s_max_links: ::aya_bpf::cty::c_uint,
+ pub s_mode: fmode_t,
+ pub s_vfs_rename_mutex: mutex,
+ pub s_subtype: *const ::aya_bpf::cty::c_char,
+ pub s_d_op: *const dentry_operations,
+ pub s_shrink: shrinker,
+ pub s_remove_count: atomic_long_t,
+ pub s_fsnotify_connectors: atomic_long_t,
+ pub s_readonly_remount: ::aya_bpf::cty::c_int,
+ pub s_wb_err: errseq_t,
+ pub s_dio_done_wq: *mut workqueue_struct,
+ pub s_pins: hlist_head,
+ pub s_user_ns: *mut user_namespace,
+ pub s_dentry_lru: list_lru,
+ pub s_inode_lru: list_lru,
+ pub rcu: callback_head,
+ pub destroy_work: work_struct,
+ pub s_sync_lock: mutex,
+ pub s_stack_depth: ::aya_bpf::cty::c_int,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 24usize]>,
+ pub __bindgen_padding_0: u32,
+ pub s_inode_list_lock: spinlock_t,
+ pub s_inodes: list_head,
+ pub s_inode_wblist_lock: spinlock_t,
+ pub s_inodes_wb: list_head,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 16usize]>,
+}
+impl super_block {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 24usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 24usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+ #[inline]
+ pub fn new_bitfield_2() -> __BindgenBitfieldUnit<[u8; 16usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 16usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vfsmount {
+ pub mnt_root: *mut dentry,
+ pub mnt_sb: *mut super_block,
+ pub mnt_flags: ::aya_bpf::cty::c_int,
+ pub mnt_idmap: *mut mnt_idmap,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct path {
+ pub mnt: *mut vfsmount,
+ pub dentry: *mut dentry,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uid_gid_extent {
+ pub first: u32_,
+ pub lower_first: u32_,
+ pub count: u32_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct uid_gid_map {
+ pub nr_extents: u32_,
+ pub __bindgen_anon_1: uid_gid_map__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union uid_gid_map__bindgen_ty_1 {
+ pub extent: [uid_gid_extent; 5usize],
+ pub __bindgen_anon_1: uid_gid_map__bindgen_ty_1__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uid_gid_map__bindgen_ty_1__bindgen_ty_1 {
+ pub forward: *mut uid_gid_extent,
+ pub reverse: *mut uid_gid_extent,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ns_common {
+ pub stashed: atomic_long_t,
+ pub ops: *const proc_ns_operations,
+ pub inum: ::aya_bpf::cty::c_uint,
+ pub count: refcount_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ctl_table_header {
+ pub __bindgen_anon_1: ctl_table_header__bindgen_ty_1,
+ pub unregistering: *mut completion,
+ pub ctl_table_arg: *mut ctl_table,
+ pub root: *mut ctl_table_root,
+ pub set: *mut ctl_table_set,
+ pub parent: *mut ctl_dir,
+ pub node: *mut ctl_node,
+ pub inodes: hlist_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union ctl_table_header__bindgen_ty_1 {
+ pub __bindgen_anon_1: ctl_table_header__bindgen_ty_1__bindgen_ty_1,
+ pub rcu: callback_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ctl_table_header__bindgen_ty_1__bindgen_ty_1 {
+ pub ctl_table: *mut ctl_table,
+ pub used: ::aya_bpf::cty::c_int,
+ pub count: ::aya_bpf::cty::c_int,
+ pub nreg: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ctl_dir {
+ pub header: ctl_table_header,
+ pub root: rb_root,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ctl_table_set {
+ pub is_seen: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut ctl_table_set) -> ::aya_bpf::cty::c_int,
+ >,
+ pub dir: ctl_dir,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct user_namespace {
+ pub uid_map: uid_gid_map,
+ pub gid_map: uid_gid_map,
+ pub projid_map: uid_gid_map,
+ pub parent: *mut user_namespace,
+ pub level: ::aya_bpf::cty::c_int,
+ pub owner: kuid_t,
+ pub group: kgid_t,
+ pub ns: ns_common,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub parent_could_setfcap: bool_,
+ pub keyring_name_list: list_head,
+ pub user_keyring_register: *mut key,
+ pub keyring_sem: rw_semaphore,
+ pub persistent_keyring_register: *mut key,
+ pub work: work_struct,
+ pub set: ctl_table_set,
+ pub sysctls: *mut ctl_table_header,
+ pub ucounts: *mut ucounts,
+ pub ucount_max: [::aya_bpf::cty::c_long; 12usize],
+ pub rlimit_max: [::aya_bpf::cty::c_long; 4usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kstat {
+ pub result_mask: u32_,
+ pub mode: umode_t,
+ pub nlink: ::aya_bpf::cty::c_uint,
+ pub blksize: u32,
+ pub attributes: u64_,
+ pub attributes_mask: u64_,
+ pub ino: u64_,
+ pub dev: dev_t,
+ pub rdev: dev_t,
+ pub uid: kuid_t,
+ pub gid: kgid_t,
+ pub size: loff_t,
+ pub atime: timespec64,
+ pub mtime: timespec64,
+ pub ctime: timespec64,
+ pub btime: timespec64,
+ pub blocks: u64_,
+ pub mnt_id: u64_,
+ pub dio_mem_align: u32_,
+ pub dio_offset_align: u32_,
+ pub change_cookie: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct shrink_control {
+ pub gfp_mask: gfp_t,
+ pub nid: ::aya_bpf::cty::c_int,
+ pub nr_to_scan: ::aya_bpf::cty::c_ulong,
+ pub nr_scanned: ::aya_bpf::cty::c_ulong,
+ pub memcg: *mut mem_cgroup,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct swait_queue_head {
+ pub lock: raw_spinlock_t,
+ pub task_list: list_head,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct completion {
+ pub done: ::aya_bpf::cty::c_uint,
+ pub wait: swait_queue_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct delayed_work {
+ pub work: work_struct,
+ pub timer: timer_list,
+ pub wq: *mut workqueue_struct,
+ pub cpu: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rcu_work {
+ pub work: work_struct,
+ pub rcu: callback_head,
+ pub wq: *mut workqueue_struct,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rcu_segcblist {
+ pub head: *mut callback_head,
+ pub tails: [*mut *mut callback_head; 4usize],
+ pub gp_seq: [::aya_bpf::cty::c_ulong; 4usize],
+ pub len: atomic_long_t,
+ pub seglen: [::aya_bpf::cty::c_long; 4usize],
+ pub flags: u8_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct srcu_data {
+ pub srcu_lock_count: [atomic_long_t; 2usize],
+ pub srcu_unlock_count: [atomic_long_t; 2usize],
+ pub srcu_nmi_safety: ::aya_bpf::cty::c_int,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 24usize]>,
+ pub __bindgen_padding_0: u32,
+ pub lock: spinlock_t,
+ pub srcu_cblist: rcu_segcblist,
+ pub srcu_gp_seq_needed: ::aya_bpf::cty::c_ulong,
+ pub srcu_gp_seq_needed_exp: ::aya_bpf::cty::c_ulong,
+ pub srcu_cblist_invoking: bool_,
+ pub delay_work: timer_list,
+ pub work: work_struct,
+ pub srcu_barrier_head: callback_head,
+ pub mynode: *mut srcu_node,
+ pub grpmask: ::aya_bpf::cty::c_ulong,
+ pub cpu: ::aya_bpf::cty::c_int,
+ pub ssp: *mut srcu_struct,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 48usize]>,
+}
+impl srcu_data {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 24usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 24usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct srcu_node {
+ pub lock: spinlock_t,
+ pub srcu_have_cbs: [::aya_bpf::cty::c_ulong; 4usize],
+ pub srcu_data_have_cbs: [::aya_bpf::cty::c_ulong; 4usize],
+ pub srcu_gp_seq_needed_exp: ::aya_bpf::cty::c_ulong,
+ pub srcu_parent: *mut srcu_node,
+ pub grplo: ::aya_bpf::cty::c_int,
+ pub grphi: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct srcu_struct {
+ pub srcu_idx: ::aya_bpf::cty::c_uint,
+ pub sda: *mut srcu_data,
+ pub dep_map: lockdep_map,
+ pub srcu_sup: *mut srcu_usage,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct srcu_usage {
+ pub node: *mut srcu_node,
+ pub level: [*mut srcu_node; 3usize],
+ pub srcu_size_state: ::aya_bpf::cty::c_int,
+ pub srcu_cb_mutex: mutex,
+ pub lock: spinlock_t,
+ pub srcu_gp_mutex: mutex,
+ pub srcu_gp_seq: ::aya_bpf::cty::c_ulong,
+ pub srcu_gp_seq_needed: ::aya_bpf::cty::c_ulong,
+ pub srcu_gp_seq_needed_exp: ::aya_bpf::cty::c_ulong,
+ pub srcu_gp_start: ::aya_bpf::cty::c_ulong,
+ pub srcu_last_gp_end: ::aya_bpf::cty::c_ulong,
+ pub srcu_size_jiffies: ::aya_bpf::cty::c_ulong,
+ pub srcu_n_lock_retries: ::aya_bpf::cty::c_ulong,
+ pub srcu_n_exp_nodelay: ::aya_bpf::cty::c_ulong,
+ pub sda_is_static: bool_,
+ pub srcu_barrier_seq: ::aya_bpf::cty::c_ulong,
+ pub srcu_barrier_mutex: mutex,
+ pub srcu_barrier_completion: completion,
+ pub srcu_barrier_cpu_cnt: atomic_t,
+ pub reschedule_jiffies: ::aya_bpf::cty::c_ulong,
+ pub reschedule_count: ::aya_bpf::cty::c_ulong,
+ pub work: delayed_work,
+ pub srcu_ssp: *mut srcu_struct,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct arch_uprobe_task {
+ pub saved_scratch_register: ::aya_bpf::cty::c_ulong,
+ pub saved_trap_nr: ::aya_bpf::cty::c_uint,
+ pub saved_tf: ::aya_bpf::cty::c_uint,
+}
+pub mod uprobe_task_state {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const UTASK_RUNNING: Type = 0;
+ pub const UTASK_SSTEP: Type = 1;
+ pub const UTASK_SSTEP_ACK: Type = 2;
+ pub const UTASK_SSTEP_TRAPPED: Type = 3;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct uprobe_task {
+ pub state: uprobe_task_state::Type,
+ pub __bindgen_anon_1: uprobe_task__bindgen_ty_1,
+ pub active_uprobe: *mut uprobe,
+ pub xol_vaddr: ::aya_bpf::cty::c_ulong,
+ pub return_instances: *mut return_instance,
+ pub depth: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union uprobe_task__bindgen_ty_1 {
+ pub __bindgen_anon_1: uprobe_task__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: uprobe_task__bindgen_ty_1__bindgen_ty_2,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uprobe_task__bindgen_ty_1__bindgen_ty_1 {
+ pub autask: arch_uprobe_task,
+ pub vaddr: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uprobe_task__bindgen_ty_1__bindgen_ty_2 {
+ pub dup_xol_work: callback_head,
+ pub dup_xol_addr: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct return_instance {
+ pub uprobe: *mut uprobe,
+ pub func: ::aya_bpf::cty::c_ulong,
+ pub stack: ::aya_bpf::cty::c_ulong,
+ pub orig_ret_vaddr: ::aya_bpf::cty::c_ulong,
+ pub chained: bool_,
+ pub next: *mut return_instance,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vdso_image {
+ pub data: *mut ::aya_bpf::cty::c_void,
+ pub size: ::aya_bpf::cty::c_ulong,
+ pub alt: ::aya_bpf::cty::c_ulong,
+ pub alt_len: ::aya_bpf::cty::c_ulong,
+ pub extable_base: ::aya_bpf::cty::c_ulong,
+ pub extable_len: ::aya_bpf::cty::c_ulong,
+ pub extable: *const ::aya_bpf::cty::c_void,
+ pub sym_vvar_start: ::aya_bpf::cty::c_long,
+ pub sym_vvar_page: ::aya_bpf::cty::c_long,
+ pub sym_pvclock_page: ::aya_bpf::cty::c_long,
+ pub sym_hvclock_page: ::aya_bpf::cty::c_long,
+ pub sym_timens_page: ::aya_bpf::cty::c_long,
+ pub sym_VDSO32_NOTE_MASK: ::aya_bpf::cty::c_long,
+ pub sym___kernel_sigreturn: ::aya_bpf::cty::c_long,
+ pub sym___kernel_rt_sigreturn: ::aya_bpf::cty::c_long,
+ pub sym___kernel_vsyscall: ::aya_bpf::cty::c_long,
+ pub sym_int80_landing_pad: ::aya_bpf::cty::c_long,
+ pub sym_vdso32_sigreturn_landing_pad: ::aya_bpf::cty::c_long,
+ pub sym_vdso32_rt_sigreturn_landing_pad: ::aya_bpf::cty::c_long,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vmem_altmap {
+ pub base_pfn: ::aya_bpf::cty::c_ulong,
+ pub end_pfn: ::aya_bpf::cty::c_ulong,
+ pub reserve: ::aya_bpf::cty::c_ulong,
+ pub free: ::aya_bpf::cty::c_ulong,
+ pub align: ::aya_bpf::cty::c_ulong,
+ pub alloc: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct percpu_ref {
+ pub percpu_count_ptr: ::aya_bpf::cty::c_ulong,
+ pub data: *mut percpu_ref_data,
+}
+pub mod memory_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const MEMORY_DEVICE_PRIVATE: Type = 1;
+ pub const MEMORY_DEVICE_COHERENT: Type = 2;
+ pub const MEMORY_DEVICE_FS_DAX: Type = 3;
+ pub const MEMORY_DEVICE_GENERIC: Type = 4;
+ pub const MEMORY_DEVICE_PCI_P2PDMA: Type = 5;
+}
+#[repr(C)]
+pub struct dev_pagemap {
+ pub altmap: vmem_altmap,
+ pub ref_: percpu_ref,
+ pub done: completion,
+ pub type_: memory_type::Type,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub vmemmap_shift: ::aya_bpf::cty::c_ulong,
+ pub ops: *const dev_pagemap_ops,
+ pub owner: *mut ::aya_bpf::cty::c_void,
+ pub nr_range: ::aya_bpf::cty::c_int,
+ pub __bindgen_anon_1: dev_pagemap__bindgen_ty_1,
+}
+#[repr(C)]
+pub struct dev_pagemap__bindgen_ty_1 {
+ pub range: __BindgenUnionField,
+ pub __bindgen_anon_1: __BindgenUnionField,
+ pub bindgen_union_field: [u64; 2usize],
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct dev_pagemap__bindgen_ty_1__bindgen_ty_1 {
+ pub __empty_ranges: dev_pagemap__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1,
+ pub ranges: __IncompleteArrayField,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_pagemap__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct folio {
+ pub __bindgen_anon_1: folio__bindgen_ty_1,
+ pub __bindgen_anon_2: folio__bindgen_ty_2,
+ pub __bindgen_anon_3: folio__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union folio__bindgen_ty_1 {
+ pub __bindgen_anon_1: folio__bindgen_ty_1__bindgen_ty_1,
+ pub page: page,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct folio__bindgen_ty_1__bindgen_ty_1 {
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: folio__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1,
+ pub mapping: *mut address_space,
+ pub index: ::aya_bpf::cty::c_ulong,
+ pub private: *mut ::aya_bpf::cty::c_void,
+ pub _mapcount: atomic_t,
+ pub _refcount: atomic_t,
+ pub memcg_data: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union folio__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {
+ pub lru: list_head,
+ pub __bindgen_anon_1: folio__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct folio__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {
+ pub __filler: *mut ::aya_bpf::cty::c_void,
+ pub mlock_count: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union folio__bindgen_ty_2 {
+ pub __bindgen_anon_1: folio__bindgen_ty_2__bindgen_ty_1,
+ pub __page_1: page,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct folio__bindgen_ty_2__bindgen_ty_1 {
+ pub _flags_1: ::aya_bpf::cty::c_ulong,
+ pub _head_1: ::aya_bpf::cty::c_ulong,
+ pub _folio_dtor: ::aya_bpf::cty::c_uchar,
+ pub _folio_order: ::aya_bpf::cty::c_uchar,
+ pub _entire_mapcount: atomic_t,
+ pub _nr_pages_mapped: atomic_t,
+ pub _pincount: atomic_t,
+ pub _folio_nr_pages: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union folio__bindgen_ty_3 {
+ pub __bindgen_anon_1: folio__bindgen_ty_3__bindgen_ty_1,
+ pub __bindgen_anon_2: folio__bindgen_ty_3__bindgen_ty_2,
+ pub __page_2: page,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct folio__bindgen_ty_3__bindgen_ty_1 {
+ pub _flags_2: ::aya_bpf::cty::c_ulong,
+ pub _head_2: ::aya_bpf::cty::c_ulong,
+ pub _hugetlb_subpool: *mut ::aya_bpf::cty::c_void,
+ pub _hugetlb_cgroup: *mut ::aya_bpf::cty::c_void,
+ pub _hugetlb_cgroup_rsvd: *mut ::aya_bpf::cty::c_void,
+ pub _hugetlb_hwpoison: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct folio__bindgen_ty_3__bindgen_ty_2 {
+ pub _flags_2a: ::aya_bpf::cty::c_ulong,
+ pub _head_2a: ::aya_bpf::cty::c_ulong,
+ pub _deferred_list: list_head,
+}
+pub mod pid_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const PIDTYPE_PID: Type = 0;
+ pub const PIDTYPE_TGID: Type = 1;
+ pub const PIDTYPE_PGID: Type = 2;
+ pub const PIDTYPE_SID: Type = 3;
+ pub const PIDTYPE_MAX: Type = 4;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct fown_struct {
+ pub lock: rwlock_t,
+ pub pid: *mut pid,
+ pub pid_type: pid_type::Type,
+ pub uid: kuid_t,
+ pub euid: kuid_t,
+ pub signum: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct file_ra_state {
+ pub start: ::aya_bpf::cty::c_ulong,
+ pub size: ::aya_bpf::cty::c_uint,
+ pub async_size: ::aya_bpf::cty::c_uint,
+ pub ra_pages: ::aya_bpf::cty::c_uint,
+ pub mmap_miss: ::aya_bpf::cty::c_uint,
+ pub prev_pos: loff_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct file {
+ pub __bindgen_anon_1: file__bindgen_ty_1,
+ pub f_path: path,
+ pub f_inode: *mut inode,
+ pub f_op: *const file_operations,
+ pub f_lock: spinlock_t,
+ pub f_count: atomic_long_t,
+ pub f_flags: ::aya_bpf::cty::c_uint,
+ pub f_mode: fmode_t,
+ pub f_pos_lock: mutex,
+ pub f_pos: loff_t,
+ pub f_owner: fown_struct,
+ pub f_cred: *const cred,
+ pub f_ra: file_ra_state,
+ pub f_version: u64_,
+ pub f_security: *mut ::aya_bpf::cty::c_void,
+ pub private_data: *mut ::aya_bpf::cty::c_void,
+ pub f_ep: *mut hlist_head,
+ pub f_mapping: *mut address_space,
+ pub f_wb_err: errseq_t,
+ pub f_sb_err: errseq_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union file__bindgen_ty_1 {
+ pub f_llist: llist_node,
+ pub f_rcuhead: callback_head,
+ pub f_iocb_flags: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct anon_vma_name {
+ pub kref: kref,
+ pub name: __IncompleteArrayField<::aya_bpf::cty::c_char>,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct vma_lock {
+ pub lock: rw_semaphore,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vma_numab_state {
+ pub next_scan: ::aya_bpf::cty::c_ulong,
+ pub next_pid_reset: ::aya_bpf::cty::c_ulong,
+ pub access_pids: [::aya_bpf::cty::c_ulong; 2usize],
+}
+pub type vm_fault_t = ::aya_bpf::cty::c_uint;
+pub mod page_entry_size {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const PE_SIZE_PTE: Type = 0;
+ pub const PE_SIZE_PMD: Type = 1;
+ pub const PE_SIZE_PUD: Type = 2;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_operations_struct {
+ pub open: ::core::option::Option,
+ pub close: ::core::option::Option,
+ pub may_split: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_area_struct,
+ arg2: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub mremap: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut vm_area_struct) -> ::aya_bpf::cty::c_int,
+ >,
+ pub mprotect: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_area_struct,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: ::aya_bpf::cty::c_ulong,
+ arg4: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fault: ::core::option::Option vm_fault_t>,
+ pub huge_fault: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut vm_fault, arg2: page_entry_size::Type) -> vm_fault_t,
+ >,
+ pub map_pages: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_fault,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: ::aya_bpf::cty::c_ulong,
+ ) -> vm_fault_t,
+ >,
+ pub pagesize: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut vm_area_struct) -> ::aya_bpf::cty::c_ulong,
+ >,
+ pub page_mkwrite:
+ ::core::option::Option vm_fault_t>,
+ pub pfn_mkwrite:
+ ::core::option::Option vm_fault_t>,
+ pub access: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_area_struct,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ arg4: ::aya_bpf::cty::c_int,
+ arg5: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub name: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut vm_area_struct) -> *const ::aya_bpf::cty::c_char,
+ >,
+ pub set_policy: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_area_struct,
+ arg2: *mut mempolicy,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_policy: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut vm_area_struct,
+ arg2: ::aya_bpf::cty::c_ulong,
+ ) -> *mut mempolicy,
+ >,
+ pub find_special_page: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut vm_area_struct, arg2: ::aya_bpf::cty::c_ulong) -> *mut page,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mm_cid {
+ pub time: u64_,
+ pub cid: ::aya_bpf::cty::c_int,
+}
+pub mod fault_flag {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const FAULT_FLAG_WRITE: Type = 1;
+ pub const FAULT_FLAG_MKWRITE: Type = 2;
+ pub const FAULT_FLAG_ALLOW_RETRY: Type = 4;
+ pub const FAULT_FLAG_RETRY_NOWAIT: Type = 8;
+ pub const FAULT_FLAG_KILLABLE: Type = 16;
+ pub const FAULT_FLAG_TRIED: Type = 32;
+ pub const FAULT_FLAG_USER: Type = 64;
+ pub const FAULT_FLAG_REMOTE: Type = 128;
+ pub const FAULT_FLAG_INSTRUCTION: Type = 256;
+ pub const FAULT_FLAG_INTERRUPTIBLE: Type = 512;
+ pub const FAULT_FLAG_UNSHARE: Type = 1024;
+ pub const FAULT_FLAG_ORIG_PTE_VALID: Type = 2048;
+ pub const FAULT_FLAG_VMA_LOCK: Type = 4096;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct vm_fault {
+ pub __bindgen_anon_1: vm_fault__bindgen_ty_1,
+ pub flags: fault_flag::Type,
+ pub pmd: *mut pmd_t,
+ pub pud: *mut pud_t,
+ pub __bindgen_anon_2: vm_fault__bindgen_ty_2,
+ pub cow_page: *mut page,
+ pub page: *mut page,
+ pub pte: *mut pte_t,
+ pub ptl: *mut spinlock_t,
+ pub prealloc_pte: pgtable_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_fault__bindgen_ty_1 {
+ pub vma: *mut vm_area_struct,
+ pub gfp_mask: gfp_t,
+ pub pgoff: ::aya_bpf::cty::c_ulong,
+ pub address: ::aya_bpf::cty::c_ulong,
+ pub real_address: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union vm_fault__bindgen_ty_2 {
+ pub orig_pte: pte_t,
+ pub orig_pmd: pmd_t,
+}
+pub mod irq_domain_bus_token {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DOMAIN_BUS_ANY: Type = 0;
+ pub const DOMAIN_BUS_WIRED: Type = 1;
+ pub const DOMAIN_BUS_GENERIC_MSI: Type = 2;
+ pub const DOMAIN_BUS_PCI_MSI: Type = 3;
+ pub const DOMAIN_BUS_PLATFORM_MSI: Type = 4;
+ pub const DOMAIN_BUS_NEXUS: Type = 5;
+ pub const DOMAIN_BUS_IPI: Type = 6;
+ pub const DOMAIN_BUS_FSL_MC_MSI: Type = 7;
+ pub const DOMAIN_BUS_TI_SCI_INTA_MSI: Type = 8;
+ pub const DOMAIN_BUS_WAKEUP: Type = 9;
+ pub const DOMAIN_BUS_VMD_MSI: Type = 10;
+ pub const DOMAIN_BUS_PCI_DEVICE_MSI: Type = 11;
+ pub const DOMAIN_BUS_PCI_DEVICE_MSIX: Type = 12;
+ pub const DOMAIN_BUS_DMAR: Type = 13;
+ pub const DOMAIN_BUS_AMDVI: Type = 14;
+ pub const DOMAIN_BUS_PCI_DEVICE_IMS: Type = 15;
+}
+#[repr(C)]
+pub struct irq_domain {
+ pub link: list_head,
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub ops: *const irq_domain_ops,
+ pub host_data: *mut ::aya_bpf::cty::c_void,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub mapcount: ::aya_bpf::cty::c_uint,
+ pub mutex: mutex,
+ pub root: *mut irq_domain,
+ pub fwnode: *mut fwnode_handle,
+ pub bus_token: irq_domain_bus_token::Type,
+ pub gc: *mut irq_domain_chip_generic,
+ pub dev: *mut device,
+ pub pm_dev: *mut device,
+ pub parent: *mut irq_domain,
+ pub msi_parent_ops: *const msi_parent_ops,
+ pub hwirq_max: irq_hw_number_t,
+ pub revmap_size: ::aya_bpf::cty::c_uint,
+ pub revmap_tree: xarray,
+ pub revmap: __IncompleteArrayField<*mut irq_data>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct upid {
+ pub nr: ::aya_bpf::cty::c_int,
+ pub ns: *mut pid_namespace,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct idr {
+ pub idr_rt: xarray,
+ pub idr_base: ::aya_bpf::cty::c_uint,
+ pub idr_next: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct pid_namespace {
+ pub idr: idr,
+ pub rcu: callback_head,
+ pub pid_allocated: ::aya_bpf::cty::c_uint,
+ pub child_reaper: *mut task_struct,
+ pub pid_cachep: *mut kmem_cache,
+ pub level: ::aya_bpf::cty::c_uint,
+ pub parent: *mut pid_namespace,
+ pub bacct: *mut fs_pin,
+ pub user_ns: *mut user_namespace,
+ pub ucounts: *mut ucounts,
+ pub reboot: ::aya_bpf::cty::c_int,
+ pub ns: ns_common,
+ pub memfd_noexec_scope: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct pid {
+ pub count: refcount_t,
+ pub level: ::aya_bpf::cty::c_uint,
+ pub lock: spinlock_t,
+ pub tasks: [hlist_head; 4usize],
+ pub inodes: hlist_head,
+ pub wait_pidfd: wait_queue_head_t,
+ pub rcu: callback_head,
+ pub numbers: [upid; 1usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct hrtimer_clock_base {
+ pub cpu_base: *mut hrtimer_cpu_base,
+ pub index: ::aya_bpf::cty::c_uint,
+ pub clockid: clockid_t,
+ pub seq: seqcount_raw_spinlock_t,
+ pub running: *mut hrtimer,
+ pub active: timerqueue_head,
+ pub get_time: ::core::option::Option ktime_t>,
+ pub offset: ktime_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct hrtimer_cpu_base {
+ pub lock: raw_spinlock_t,
+ pub cpu: ::aya_bpf::cty::c_uint,
+ pub active_bases: ::aya_bpf::cty::c_uint,
+ pub clock_was_set_seq: ::aya_bpf::cty::c_uint,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub nr_events: ::aya_bpf::cty::c_uint,
+ pub nr_retries: ::aya_bpf::cty::c_ushort,
+ pub nr_hangs: ::aya_bpf::cty::c_ushort,
+ pub max_hang_time: ::aya_bpf::cty::c_uint,
+ pub expires_next: ktime_t,
+ pub next_timer: *mut hrtimer,
+ pub softirq_expires_next: ktime_t,
+ pub softirq_next_timer: *mut hrtimer,
+ pub clock_base: [hrtimer_clock_base; 8usize],
+}
+impl hrtimer_cpu_base {
+ #[inline]
+ pub fn hres_active(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_hres_active(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_hrtirq(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_in_hrtirq(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn hang_detected(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_hang_detected(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn softirq_activated(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_softirq_activated(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ hres_active: ::aya_bpf::cty::c_uint,
+ in_hrtirq: ::aya_bpf::cty::c_uint,
+ hang_detected: ::aya_bpf::cty::c_uint,
+ softirq_activated: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let hres_active: u32 = unsafe { ::core::mem::transmute(hres_active) };
+ hres_active as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let in_hrtirq: u32 = unsafe { ::core::mem::transmute(in_hrtirq) };
+ in_hrtirq as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let hang_detected: u32 = unsafe { ::core::mem::transmute(hang_detected) };
+ hang_detected as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let softirq_activated: u32 = unsafe { ::core::mem::transmute(softirq_activated) };
+ softirq_activated as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct rlimit {
+ pub rlim_cur: __kernel_ulong_t,
+ pub rlim_max: __kernel_ulong_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct task_cputime {
+ pub stime: u64_,
+ pub utime: u64_,
+ pub sum_exec_runtime: ::aya_bpf::cty::c_ulonglong,
+}
+pub type __signalfn_t = ::core::option::Option;
+pub type __sighandler_t = __signalfn_t;
+pub type __restorefn_t = ::core::option::Option;
+pub type __sigrestore_t = __restorefn_t;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union sigval {
+ pub sival_int: ::aya_bpf::cty::c_int,
+ pub sival_ptr: *mut ::aya_bpf::cty::c_void,
+}
+pub type sigval_t = sigval;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union __sifields {
+ pub _kill: __sifields__bindgen_ty_1,
+ pub _timer: __sifields__bindgen_ty_2,
+ pub _rt: __sifields__bindgen_ty_3,
+ pub _sigchld: __sifields__bindgen_ty_4,
+ pub _sigfault: __sifields__bindgen_ty_5,
+ pub _sigpoll: __sifields__bindgen_ty_6,
+ pub _sigsys: __sifields__bindgen_ty_7,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_1 {
+ pub _pid: __kernel_pid_t,
+ pub _uid: __kernel_uid32_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct __sifields__bindgen_ty_2 {
+ pub _tid: __kernel_timer_t,
+ pub _overrun: ::aya_bpf::cty::c_int,
+ pub _sigval: sigval_t,
+ pub _sys_private: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct __sifields__bindgen_ty_3 {
+ pub _pid: __kernel_pid_t,
+ pub _uid: __kernel_uid32_t,
+ pub _sigval: sigval_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_4 {
+ pub _pid: __kernel_pid_t,
+ pub _uid: __kernel_uid32_t,
+ pub _status: ::aya_bpf::cty::c_int,
+ pub _utime: __kernel_clock_t,
+ pub _stime: __kernel_clock_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct __sifields__bindgen_ty_5 {
+ pub _addr: *mut ::aya_bpf::cty::c_void,
+ pub __bindgen_anon_1: __sifields__bindgen_ty_5__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union __sifields__bindgen_ty_5__bindgen_ty_1 {
+ pub _trapno: ::aya_bpf::cty::c_int,
+ pub _addr_lsb: ::aya_bpf::cty::c_short,
+ pub _addr_bnd: __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_1,
+ pub _addr_pkey: __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_2,
+ pub _perf: __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_1 {
+ pub _dummy_bnd: [::aya_bpf::cty::c_char; 8usize],
+ pub _lower: *mut ::aya_bpf::cty::c_void,
+ pub _upper: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_2 {
+ pub _dummy_pkey: [::aya_bpf::cty::c_char; 8usize],
+ pub _pkey: __u32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_5__bindgen_ty_1__bindgen_ty_3 {
+ pub _data: ::aya_bpf::cty::c_ulong,
+ pub _type: __u32,
+ pub _flags: __u32,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_6 {
+ pub _band: ::aya_bpf::cty::c_long,
+ pub _fd: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __sifields__bindgen_ty_7 {
+ pub _call_addr: *mut ::aya_bpf::cty::c_void,
+ pub _syscall: ::aya_bpf::cty::c_int,
+ pub _arch: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kernel_siginfo {
+ pub __bindgen_anon_1: kernel_siginfo__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kernel_siginfo__bindgen_ty_1 {
+ pub si_signo: ::aya_bpf::cty::c_int,
+ pub si_errno: ::aya_bpf::cty::c_int,
+ pub si_code: ::aya_bpf::cty::c_int,
+ pub _sifields: __sifields,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ucounts {
+ pub node: hlist_node,
+ pub ns: *mut user_namespace,
+ pub uid: kuid_t,
+ pub count: atomic_t,
+ pub ucount: [atomic_long_t; 12usize],
+ pub rlimit: [atomic_long_t; 4usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sigaction {
+ pub sa_handler: __sighandler_t,
+ pub sa_flags: ::aya_bpf::cty::c_ulong,
+ pub sa_restorer: __sigrestore_t,
+ pub sa_mask: sigset_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct k_sigaction {
+ pub sa: sigaction,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cpu_itimer {
+ pub expires: u64_,
+ pub incr: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct task_cputime_atomic {
+ pub utime: atomic64_t,
+ pub stime: atomic64_t,
+ pub sum_exec_runtime: atomic64_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct thread_group_cputimer {
+ pub cputime_atomic: task_cputime_atomic,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pacct_struct {
+ pub ac_flag: ::aya_bpf::cty::c_int,
+ pub ac_exitcode: ::aya_bpf::cty::c_long,
+ pub ac_mem: ::aya_bpf::cty::c_ulong,
+ pub ac_utime: u64_,
+ pub ac_stime: u64_,
+ pub ac_minflt: ::aya_bpf::cty::c_ulong,
+ pub ac_majflt: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct signal_struct {
+ pub sigcnt: refcount_t,
+ pub live: atomic_t,
+ pub nr_threads: ::aya_bpf::cty::c_int,
+ pub quick_threads: ::aya_bpf::cty::c_int,
+ pub thread_head: list_head,
+ pub wait_chldexit: wait_queue_head_t,
+ pub curr_target: *mut task_struct,
+ pub shared_pending: sigpending,
+ pub multiprocess: hlist_head,
+ pub group_exit_code: ::aya_bpf::cty::c_int,
+ pub notify_count: ::aya_bpf::cty::c_int,
+ pub group_exec_task: *mut task_struct,
+ pub group_stop_count: ::aya_bpf::cty::c_int,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub core_state: *mut core_state,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub next_posix_timer_id: ::aya_bpf::cty::c_uint,
+ pub posix_timers: list_head,
+ pub real_timer: hrtimer,
+ pub it_real_incr: ktime_t,
+ pub it: [cpu_itimer; 2usize],
+ pub cputimer: thread_group_cputimer,
+ pub posix_cputimers: posix_cputimers,
+ pub pids: [*mut pid; 4usize],
+ pub tick_dep_mask: atomic_t,
+ pub tty_old_pgrp: *mut pid,
+ pub leader: ::aya_bpf::cty::c_int,
+ pub tty: *mut tty_struct,
+ pub autogroup: *mut autogroup,
+ pub stats_lock: seqlock_t,
+ pub utime: u64_,
+ pub stime: u64_,
+ pub cutime: u64_,
+ pub cstime: u64_,
+ pub gtime: u64_,
+ pub cgtime: u64_,
+ pub prev_cputime: prev_cputime,
+ pub nvcsw: ::aya_bpf::cty::c_ulong,
+ pub nivcsw: ::aya_bpf::cty::c_ulong,
+ pub cnvcsw: ::aya_bpf::cty::c_ulong,
+ pub cnivcsw: ::aya_bpf::cty::c_ulong,
+ pub min_flt: ::aya_bpf::cty::c_ulong,
+ pub maj_flt: ::aya_bpf::cty::c_ulong,
+ pub cmin_flt: ::aya_bpf::cty::c_ulong,
+ pub cmaj_flt: ::aya_bpf::cty::c_ulong,
+ pub inblock: ::aya_bpf::cty::c_ulong,
+ pub oublock: ::aya_bpf::cty::c_ulong,
+ pub cinblock: ::aya_bpf::cty::c_ulong,
+ pub coublock: ::aya_bpf::cty::c_ulong,
+ pub maxrss: ::aya_bpf::cty::c_ulong,
+ pub cmaxrss: ::aya_bpf::cty::c_ulong,
+ pub ioac: task_io_accounting,
+ pub sum_sched_runtime: ::aya_bpf::cty::c_ulonglong,
+ pub rlim: [rlimit; 16usize],
+ pub pacct: pacct_struct,
+ pub stats: *mut taskstats,
+ pub audit_tty: ::aya_bpf::cty::c_uint,
+ pub tty_audit_buf: *mut tty_audit_buf,
+ pub oom_flag_origin: bool_,
+ pub oom_score_adj: ::aya_bpf::cty::c_short,
+ pub oom_score_adj_min: ::aya_bpf::cty::c_short,
+ pub oom_mm: *mut mm_struct,
+ pub cred_guard_mutex: mutex,
+ pub exec_update_lock: rw_semaphore,
+}
+impl signal_struct {
+ #[inline]
+ pub fn is_child_subreaper(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_child_subreaper(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn has_child_subreaper(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_has_child_subreaper(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ is_child_subreaper: ::aya_bpf::cty::c_uint,
+ has_child_subreaper: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let is_child_subreaper: u32 = unsafe { ::core::mem::transmute(is_child_subreaper) };
+ is_child_subreaper as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let has_child_subreaper: u32 = unsafe { ::core::mem::transmute(has_child_subreaper) };
+ has_child_subreaper as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct rseq {
+ pub cpu_id_start: __u32,
+ pub cpu_id: __u32,
+ pub rseq_cs: __u64,
+ pub flags: __u32,
+ pub node_id: __u32,
+ pub mm_cid: __u32,
+ pub end: __IncompleteArrayField<::aya_bpf::cty::c_char>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sched_class {
+ pub uclamp_enabled: ::aya_bpf::cty::c_int,
+ pub enqueue_task: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: ::aya_bpf::cty::c_int),
+ >,
+ pub dequeue_task: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: ::aya_bpf::cty::c_int),
+ >,
+ pub yield_task: ::core::option::Option,
+ pub yield_to_task: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct) -> bool_,
+ >,
+ pub check_preempt_curr: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: ::aya_bpf::cty::c_int),
+ >,
+ pub pick_next_task:
+ ::core::option::Option *mut task_struct>,
+ pub put_prev_task:
+ ::core::option::Option,
+ pub set_next_task: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: bool_),
+ >,
+ pub balance: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut rq,
+ arg2: *mut task_struct,
+ arg3: *mut rq_flags,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub select_task_rq: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut task_struct,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub pick_task: ::core::option::Option *mut task_struct>,
+ pub migrate_task_rq: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut task_struct, arg2: ::aya_bpf::cty::c_int),
+ >,
+ pub task_woken:
+ ::core::option::Option,
+ pub set_cpus_allowed: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut task_struct, arg2: *mut affinity_context),
+ >,
+ pub rq_online: ::core::option::Option,
+ pub rq_offline: ::core::option::Option,
+ pub find_lock_rq: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut task_struct, arg2: *mut rq) -> *mut rq,
+ >,
+ pub task_tick: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: ::aya_bpf::cty::c_int),
+ >,
+ pub task_fork: ::core::option::Option,
+ pub task_dead: ::core::option::Option,
+ pub switched_from:
+ ::core::option::Option,
+ pub switched_to:
+ ::core::option::Option,
+ pub prio_changed: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct, arg3: ::aya_bpf::cty::c_int),
+ >,
+ pub get_rr_interval: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut rq, arg2: *mut task_struct) -> ::aya_bpf::cty::c_uint,
+ >,
+ pub update_curr: ::core::option::Option,
+ pub task_change_group: ::core::option::Option,
+ pub task_is_throttled: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut task_struct,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernel_cap_t {
+ pub val: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct cred {
+ pub usage: atomic_t,
+ pub uid: kuid_t,
+ pub gid: kgid_t,
+ pub suid: kuid_t,
+ pub sgid: kgid_t,
+ pub euid: kuid_t,
+ pub egid: kgid_t,
+ pub fsuid: kuid_t,
+ pub fsgid: kgid_t,
+ pub securebits: ::aya_bpf::cty::c_uint,
+ pub cap_inheritable: kernel_cap_t,
+ pub cap_permitted: kernel_cap_t,
+ pub cap_effective: kernel_cap_t,
+ pub cap_bset: kernel_cap_t,
+ pub cap_ambient: kernel_cap_t,
+ pub jit_keyring: ::aya_bpf::cty::c_uchar,
+ pub session_keyring: *mut key,
+ pub process_keyring: *mut key,
+ pub thread_keyring: *mut key,
+ pub request_key_auth: *mut key,
+ pub security: *mut ::aya_bpf::cty::c_void,
+ pub user: *mut user_struct,
+ pub user_ns: *mut user_namespace,
+ pub ucounts: *mut ucounts,
+ pub group_info: *mut group_info,
+ pub __bindgen_anon_1: cred__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union cred__bindgen_ty_1 {
+ pub non_rcu: ::aya_bpf::cty::c_int,
+ pub rcu: callback_head,
+}
+pub type key_serial_t = i32;
+pub type key_perm_t = u32;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct keyring_index_key {
+ pub hash: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: keyring_index_key__bindgen_ty_1,
+ pub type_: *mut key_type,
+ pub domain_tag: *mut key_tag,
+ pub description: *const ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union keyring_index_key__bindgen_ty_1 {
+ pub __bindgen_anon_1: keyring_index_key__bindgen_ty_1__bindgen_ty_1,
+ pub x: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct keyring_index_key__bindgen_ty_1__bindgen_ty_1 {
+ pub desc_len: u16_,
+ pub desc: [::aya_bpf::cty::c_char; 6usize],
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union key_payload {
+ pub rcu_data0: *mut ::aya_bpf::cty::c_void,
+ pub data: [*mut ::aya_bpf::cty::c_void; 4usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct assoc_array_ptr {
+ _unused: [u8; 0],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct assoc_array {
+ pub root: *mut assoc_array_ptr,
+ pub nr_leaves_on_tree: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct key {
+ pub usage: refcount_t,
+ pub serial: key_serial_t,
+ pub __bindgen_anon_1: key__bindgen_ty_1,
+ pub watchers: *mut watch_list,
+ pub sem: rw_semaphore,
+ pub user: *mut key_user,
+ pub security: *mut ::aya_bpf::cty::c_void,
+ pub __bindgen_anon_2: key__bindgen_ty_2,
+ pub last_used_at: time64_t,
+ pub uid: kuid_t,
+ pub gid: kgid_t,
+ pub perm: key_perm_t,
+ pub quotalen: ::aya_bpf::cty::c_ushort,
+ pub datalen: ::aya_bpf::cty::c_ushort,
+ pub state: ::aya_bpf::cty::c_short,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_3: key__bindgen_ty_3,
+ pub __bindgen_anon_4: key__bindgen_ty_4,
+ pub restrict_link: *mut key_restriction,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union key__bindgen_ty_1 {
+ pub graveyard_link: list_head,
+ pub serial_node: rb_node,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union key__bindgen_ty_2 {
+ pub expiry: time64_t,
+ pub revoked_at: time64_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union key__bindgen_ty_3 {
+ pub index_key: keyring_index_key,
+ pub __bindgen_anon_1: key__bindgen_ty_3__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct key__bindgen_ty_3__bindgen_ty_1 {
+ pub hash: ::aya_bpf::cty::c_ulong,
+ pub len_desc: ::aya_bpf::cty::c_ulong,
+ pub type_: *mut key_type,
+ pub domain_tag: *mut key_tag,
+ pub description: *mut ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union key__bindgen_ty_4 {
+ pub payload: key_payload,
+ pub __bindgen_anon_1: key__bindgen_ty_4__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct key__bindgen_ty_4__bindgen_ty_1 {
+ pub name_link: list_head,
+ pub keys: assoc_array,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct nsproxy {
+ pub count: atomic_t,
+ pub uts_ns: *mut uts_namespace,
+ pub ipc_ns: *mut ipc_namespace,
+ pub mnt_ns: *mut mnt_namespace,
+ pub pid_ns_for_children: *mut pid_namespace,
+ pub net_ns: *mut net,
+ pub time_ns: *mut time_namespace,
+ pub time_ns_for_children: *mut time_namespace,
+ pub cgroup_ns: *mut cgroup_namespace,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct sighand_struct {
+ pub siglock: spinlock_t,
+ pub count: refcount_t,
+ pub signalfd_wqh: wait_queue_head_t,
+ pub action: [k_sigaction; 64usize],
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct io_context {
+ pub refcount: atomic_long_t,
+ pub active_ref: atomic_t,
+ pub ioprio: ::aya_bpf::cty::c_ushort,
+ pub lock: spinlock_t,
+ pub icq_tree: xarray,
+ pub icq_hint: *mut io_cq,
+ pub icq_list: hlist_head,
+ pub release_work: work_struct,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct css_set {
+ pub subsys: [*mut cgroup_subsys_state; 14usize],
+ pub refcount: refcount_t,
+ pub dom_cset: *mut css_set,
+ pub dfl_cgrp: *mut cgroup,
+ pub nr_tasks: ::aya_bpf::cty::c_int,
+ pub tasks: list_head,
+ pub mg_tasks: list_head,
+ pub dying_tasks: list_head,
+ pub task_iters: list_head,
+ pub e_cset_node: [list_head; 14usize],
+ pub threaded_csets: list_head,
+ pub threaded_csets_node: list_head,
+ pub hlist: hlist_node,
+ pub cgrp_links: list_head,
+ pub mg_src_preload_node: list_head,
+ pub mg_dst_preload_node: list_head,
+ pub mg_node: list_head,
+ pub mg_src_cgrp: *mut cgroup,
+ pub mg_dst_cgrp: *mut cgroup,
+ pub mg_dst_cset: *mut css_set,
+ pub dead: bool_,
+ pub callback_head: callback_head,
+}
+pub type compat_uptr_t = u32_;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct compat_robust_list {
+ pub next: compat_uptr_t,
+}
+pub type compat_long_t = s32;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct compat_robust_list_head {
+ pub list: compat_robust_list,
+ pub futex_offset: compat_long_t,
+ pub list_op_pending: compat_uptr_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct perf_event_groups {
+ pub tree: rb_root,
+ pub index: u64_,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct perf_event_context {
+ pub lock: raw_spinlock_t,
+ pub mutex: mutex,
+ pub pmu_ctx_list: list_head,
+ pub pinned_groups: perf_event_groups,
+ pub flexible_groups: perf_event_groups,
+ pub event_list: list_head,
+ pub nr_events: ::aya_bpf::cty::c_int,
+ pub nr_user: ::aya_bpf::cty::c_int,
+ pub is_active: ::aya_bpf::cty::c_int,
+ pub nr_task_data: ::aya_bpf::cty::c_int,
+ pub nr_stat: ::aya_bpf::cty::c_int,
+ pub nr_freq: ::aya_bpf::cty::c_int,
+ pub rotate_disable: ::aya_bpf::cty::c_int,
+ pub refcount: refcount_t,
+ pub task: *mut task_struct,
+ pub time: u64_,
+ pub timestamp: u64_,
+ pub timeoffset: u64_,
+ pub parent_ctx: *mut perf_event_context,
+ pub parent_gen: u64_,
+ pub generation: u64_,
+ pub pin_count: ::aya_bpf::cty::c_int,
+ pub nr_cgroups: ::aya_bpf::cty::c_int,
+ pub callback_head: callback_head,
+ pub nr_pending: local_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ftrace_ret_stack {
+ pub ret: ::aya_bpf::cty::c_ulong,
+ pub func: ::aya_bpf::cty::c_ulong,
+ pub calltime: ::aya_bpf::cty::c_ulonglong,
+ pub subtime: ::aya_bpf::cty::c_ulonglong,
+ pub retp: *mut ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vm_struct {
+ pub next: *mut vm_struct,
+ pub addr: *mut ::aya_bpf::cty::c_void,
+ pub size: ::aya_bpf::cty::c_ulong,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub pages: *mut *mut page,
+ pub page_order: ::aya_bpf::cty::c_uint,
+ pub nr_pages: ::aya_bpf::cty::c_uint,
+ pub phys_addr: phys_addr_t,
+ pub caller: *const ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct list_lru_one {
+ pub list: list_head,
+ pub nr_items: ::aya_bpf::cty::c_long,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct list_lru_node {
+ pub lock: spinlock_t,
+ pub lru: list_lru_one,
+ pub nr_items: ::aya_bpf::cty::c_long,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 24usize]>,
+}
+impl list_lru_node {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 24usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 24usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+pub mod migrate_mode {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const MIGRATE_ASYNC: Type = 0;
+ pub const MIGRATE_SYNC_LIGHT: Type = 1;
+ pub const MIGRATE_SYNC: Type = 2;
+ pub const MIGRATE_SYNC_NO_COPY: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct exception_table_entry {
+ pub insn: ::aya_bpf::cty::c_int,
+ pub fixup: ::aya_bpf::cty::c_int,
+ pub data: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cgroup_subsys_state {
+ pub cgroup: *mut cgroup,
+ pub ss: *mut cgroup_subsys,
+ pub refcnt: percpu_ref,
+ pub sibling: list_head,
+ pub children: list_head,
+ pub rstat_css_node: list_head,
+ pub id: ::aya_bpf::cty::c_int,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub serial_nr: u64_,
+ pub online_cnt: atomic_t,
+ pub destroy_work: work_struct,
+ pub destroy_rwork: rcu_work,
+ pub parent: *mut cgroup_subsys_state,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cgroup_file {
+ pub kn: *mut kernfs_node,
+ pub notified_at: ::aya_bpf::cty::c_ulong,
+ pub notify_timer: timer_list,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cgroup_base_stat {
+ pub cputime: task_cputime,
+ pub forceidle_sum: u64_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cgroup_bpf {
+ pub effective: [*mut bpf_prog_array; 33usize],
+ pub progs: [hlist_head; 33usize],
+ pub flags: [u8_; 33usize],
+ pub storages: list_head,
+ pub inactive: *mut bpf_prog_array,
+ pub refcnt: percpu_ref,
+ pub release_work: work_struct,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cgroup_freezer_state {
+ pub freeze: bool_,
+ pub e_freeze: ::aya_bpf::cty::c_int,
+ pub nr_frozen_descendants: ::aya_bpf::cty::c_int,
+ pub nr_frozen_tasks: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+pub struct cgroup {
+ pub self_: cgroup_subsys_state,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub level: ::aya_bpf::cty::c_int,
+ pub max_depth: ::aya_bpf::cty::c_int,
+ pub nr_descendants: ::aya_bpf::cty::c_int,
+ pub nr_dying_descendants: ::aya_bpf::cty::c_int,
+ pub max_descendants: ::aya_bpf::cty::c_int,
+ pub nr_populated_csets: ::aya_bpf::cty::c_int,
+ pub nr_populated_domain_children: ::aya_bpf::cty::c_int,
+ pub nr_populated_threaded_children: ::aya_bpf::cty::c_int,
+ pub nr_threaded_children: ::aya_bpf::cty::c_int,
+ pub kn: *mut kernfs_node,
+ pub procs_file: cgroup_file,
+ pub events_file: cgroup_file,
+ pub psi_files: [cgroup_file; 4usize],
+ pub subtree_control: u16_,
+ pub subtree_ss_mask: u16_,
+ pub old_subtree_control: u16_,
+ pub old_subtree_ss_mask: u16_,
+ pub subsys: [*mut cgroup_subsys_state; 14usize],
+ pub root: *mut cgroup_root,
+ pub cset_links: list_head,
+ pub e_csets: [list_head; 14usize],
+ pub dom_cgrp: *mut cgroup,
+ pub old_dom_cgrp: *mut cgroup,
+ pub rstat_cpu: *mut cgroup_rstat_cpu,
+ pub rstat_css_list: list_head,
+ pub last_bstat: cgroup_base_stat,
+ pub bstat: cgroup_base_stat,
+ pub prev_cputime: prev_cputime,
+ pub pidlists: list_head,
+ pub pidlist_mutex: mutex,
+ pub offline_waitq: wait_queue_head_t,
+ pub release_agent_work: work_struct,
+ pub psi: *mut psi_group,
+ pub bpf: cgroup_bpf,
+ pub congestion_count: atomic_t,
+ pub freezer: cgroup_freezer_state,
+ pub bpf_cgrp_storage: *mut bpf_local_storage,
+ pub ancestors: __IncompleteArrayField<*mut cgroup>,
+}
+pub type proc_handler = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut ctl_table,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ arg4: *mut usize,
+ arg5: *mut loff_t,
+ ) -> ::aya_bpf::cty::c_int,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ctl_table {
+ pub procname: *const ::aya_bpf::cty::c_char,
+ pub data: *mut ::aya_bpf::cty::c_void,
+ pub maxlen: ::aya_bpf::cty::c_int,
+ pub mode: umode_t,
+ pub child: *mut ctl_table,
+ pub proc_handler: proc_handler,
+ pub poll: *mut ctl_table_poll,
+ pub extra1: *mut ::aya_bpf::cty::c_void,
+ pub extra2: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ctl_table_poll {
+ pub event: atomic_t,
+ pub wait: wait_queue_head_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ctl_node {
+ pub node: rb_node,
+ pub header: *mut ctl_table_header,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct ctl_table_root {
+ pub default_set: ctl_table_set,
+ pub lookup: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut ctl_table_root) -> *mut ctl_table_set,
+ >,
+ pub set_ownership: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut ctl_table_header,
+ arg2: *mut ctl_table,
+ arg3: *mut kuid_t,
+ arg4: *mut kgid_t,
+ ),
+ >,
+ pub permissions: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut ctl_table_header,
+ arg2: *mut ctl_table,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct key_tag {
+ pub rcu: callback_head,
+ pub usage: refcount_t,
+ pub removed: bool_,
+}
+pub type request_key_actor_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut key,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct key_type {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub def_datalen: usize,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub vet_description: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const ::aya_bpf::cty::c_char) -> ::aya_bpf::cty::c_int,
+ >,
+ pub preparse: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut key_preparsed_payload) -> ::aya_bpf::cty::c_int,
+ >,
+ pub free_preparse:
+ ::core::option::Option,
+ pub instantiate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut key,
+ arg2: *mut key_preparsed_payload,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub update: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut key,
+ arg2: *mut key_preparsed_payload,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub match_preparse: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut key_match_data) -> ::aya_bpf::cty::c_int,
+ >,
+ pub match_free: ::core::option::Option,
+ pub revoke: ::core::option::Option,
+ pub destroy: ::core::option::Option,
+ pub describe:
+ ::core::option::Option,
+ pub read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const key,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: usize,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+ pub request_key: request_key_actor_t,
+ pub lookup_restriction: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const ::aya_bpf::cty::c_char) -> *mut key_restriction,
+ >,
+ pub asym_query: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const kernel_pkey_params,
+ arg2: *mut kernel_pkey_query,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub asym_eds_op: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kernel_pkey_params,
+ arg2: *const ::aya_bpf::cty::c_void,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub asym_verify_signature: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kernel_pkey_params,
+ arg2: *const ::aya_bpf::cty::c_void,
+ arg3: *const ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub link: list_head,
+ pub lock_class: lock_class_key,
+}
+pub type key_restrict_link_func_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut key,
+ arg2: *const key_type,
+ arg3: *const key_payload,
+ arg4: *mut key,
+ ) -> ::aya_bpf::cty::c_int,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct key_restriction {
+ pub check: key_restrict_link_func_t,
+ pub key: *mut key,
+ pub keytype: *mut key_type,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct user_struct {
+ pub __count: refcount_t,
+ pub epoll_watches: percpu_counter,
+ pub unix_inflight: ::aya_bpf::cty::c_ulong,
+ pub pipe_bufs: atomic_long_t,
+ pub uidhash_node: hlist_node,
+ pub uid: kuid_t,
+ pub locked_vm: atomic_long_t,
+ pub nr_watches: atomic_t,
+ pub ratelimit: ratelimit_state,
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct group_info {
+ pub usage: atomic_t,
+ pub ngroups: ::aya_bpf::cty::c_int,
+ pub gid: __IncompleteArrayField,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct core_thread {
+ pub task: *mut task_struct,
+ pub next: *mut core_thread,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct core_state {
+ pub nr_threads: atomic_t,
+ pub dumper: core_thread,
+ pub startup: completion,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct taskstats {
+ pub version: __u16,
+ pub ac_exitcode: __u32,
+ pub ac_flag: __u8,
+ pub ac_nice: __u8,
+ pub cpu_count: __u64,
+ pub cpu_delay_total: __u64,
+ pub blkio_count: __u64,
+ pub blkio_delay_total: __u64,
+ pub swapin_count: __u64,
+ pub swapin_delay_total: __u64,
+ pub cpu_run_real_total: __u64,
+ pub cpu_run_virtual_total: __u64,
+ pub ac_comm: [::aya_bpf::cty::c_char; 32usize],
+ pub ac_sched: __u8,
+ pub ac_pad: [__u8; 3usize],
+ pub __bindgen_padding_0: u32,
+ pub ac_uid: __u32,
+ pub ac_gid: __u32,
+ pub ac_pid: __u32,
+ pub ac_ppid: __u32,
+ pub ac_btime: __u32,
+ pub ac_etime: __u64,
+ pub ac_utime: __u64,
+ pub ac_stime: __u64,
+ pub ac_minflt: __u64,
+ pub ac_majflt: __u64,
+ pub coremem: __u64,
+ pub virtmem: __u64,
+ pub hiwater_rss: __u64,
+ pub hiwater_vm: __u64,
+ pub read_char: __u64,
+ pub write_char: __u64,
+ pub read_syscalls: __u64,
+ pub write_syscalls: __u64,
+ pub read_bytes: __u64,
+ pub write_bytes: __u64,
+ pub cancelled_write_bytes: __u64,
+ pub nvcsw: __u64,
+ pub nivcsw: __u64,
+ pub ac_utimescaled: __u64,
+ pub ac_stimescaled: __u64,
+ pub cpu_scaled_run_real_total: __u64,
+ pub freepages_count: __u64,
+ pub freepages_delay_total: __u64,
+ pub thrashing_count: __u64,
+ pub thrashing_delay_total: __u64,
+ pub ac_btime64: __u64,
+ pub compact_count: __u64,
+ pub compact_delay_total: __u64,
+ pub ac_tgid: __u32,
+ pub ac_tgetime: __u64,
+ pub ac_exe_dev: __u64,
+ pub ac_exe_inode: __u64,
+ pub wpcopy_count: __u64,
+ pub wpcopy_delay_total: __u64,
+ pub irq_count: __u64,
+ pub irq_delay_total: __u64,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct delayed_call {
+ pub fn_: ::core::option::Option,
+ pub arg: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct io_cq {
+ pub q: *mut request_queue,
+ pub ioc: *mut io_context,
+ pub __bindgen_anon_1: io_cq__bindgen_ty_1,
+ pub __bindgen_anon_2: io_cq__bindgen_ty_2,
+ pub flags: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union io_cq__bindgen_ty_1 {
+ pub q_node: list_head,
+ pub __rcu_icq_cache: *mut kmem_cache,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union io_cq__bindgen_ty_2 {
+ pub ioc_node: hlist_node,
+ pub __rcu_head: callback_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vfsuid_t {
+ pub val: uid_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct vfsgid_t {
+ pub val: gid_t,
+}
+pub type percpu_ref_func_t = ::core::option::Option;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct percpu_ref_data {
+ pub count: atomic_long_t,
+ pub release: percpu_ref_func_t,
+ pub confirm_switch: percpu_ref_func_t,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub rcu: callback_head,
+ pub ref_: *mut percpu_ref,
+}
+impl percpu_ref_data {
+ #[inline]
+ pub fn force_atomic(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_force_atomic(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn allow_reinit(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_allow_reinit(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ force_atomic: bool_,
+ allow_reinit: bool_,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let force_atomic: u8 = unsafe { ::core::mem::transmute(force_atomic) };
+ force_atomic as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let allow_reinit: u8 = unsafe { ::core::mem::transmute(allow_reinit) };
+ allow_reinit as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kiocb {
+ pub ki_filp: *mut file,
+ pub ki_pos: loff_t,
+ pub ki_complete: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kiocb, arg2: ::aya_bpf::cty::c_long),
+ >,
+ pub private: *mut ::aya_bpf::cty::c_void,
+ pub ki_flags: ::aya_bpf::cty::c_int,
+ pub ki_ioprio: u16_,
+ pub ki_waitq: *mut wait_page_queue,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct iattr {
+ pub ia_valid: ::aya_bpf::cty::c_uint,
+ pub ia_mode: umode_t,
+ pub __bindgen_anon_1: iattr__bindgen_ty_1,
+ pub __bindgen_anon_2: iattr__bindgen_ty_2,
+ pub ia_size: loff_t,
+ pub ia_atime: timespec64,
+ pub ia_mtime: timespec64,
+ pub ia_ctime: timespec64,
+ pub ia_file: *mut file,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iattr__bindgen_ty_1 {
+ pub ia_uid: kuid_t,
+ pub ia_vfsuid: vfsuid_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iattr__bindgen_ty_2 {
+ pub ia_gid: kgid_t,
+ pub ia_vfsgid: vfsgid_t,
+}
+pub type projid_t = __kernel_uid32_t;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kprojid_t {
+ pub val: projid_t,
+}
+pub mod quota_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const USRQUOTA: Type = 0;
+ pub const GRPQUOTA: Type = 1;
+ pub const PRJQUOTA: Type = 2;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kqid {
+ pub __bindgen_anon_1: kqid__bindgen_ty_1,
+ pub type_: quota_type::Type,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union kqid__bindgen_ty_1 {
+ pub uid: kuid_t,
+ pub gid: kgid_t,
+ pub projid: kprojid_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct mem_dqblk {
+ pub dqb_bhardlimit: qsize_t,
+ pub dqb_bsoftlimit: qsize_t,
+ pub dqb_curspace: qsize_t,
+ pub dqb_rsvspace: qsize_t,
+ pub dqb_ihardlimit: qsize_t,
+ pub dqb_isoftlimit: qsize_t,
+ pub dqb_curinodes: qsize_t,
+ pub dqb_btime: time64_t,
+ pub dqb_itime: time64_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct dquot {
+ pub dq_hash: hlist_node,
+ pub dq_inuse: list_head,
+ pub dq_free: list_head,
+ pub dq_dirty: list_head,
+ pub dq_lock: mutex,
+ pub dq_dqb_lock: spinlock_t,
+ pub dq_count: atomic_t,
+ pub dq_sb: *mut super_block,
+ pub dq_id: kqid,
+ pub dq_off: loff_t,
+ pub dq_flags: ::aya_bpf::cty::c_ulong,
+ pub dq_dqb: mem_dqblk,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct quota_format_type {
+ pub qf_fmt_id: ::aya_bpf::cty::c_int,
+ pub qf_ops: *const quota_format_ops,
+ pub qf_owner: *mut module,
+ pub qf_next: *mut quota_format_type,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct quota_format_ops {
+ pub check_quota_file: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub read_file_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub write_file_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub free_file_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub read_dqblk:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub commit_dqblk:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub release_dqblk:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub get_next_id: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block, arg2: *mut kqid) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dquot_operations {
+ pub write_dquot:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub alloc_dquot: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block, arg2: ::aya_bpf::cty::c_int) -> *mut dquot,
+ >,
+ pub destroy_dquot: ::core::option::Option,
+ pub acquire_dquot:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub release_dquot:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub mark_dirty:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub write_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_reserved_space:
+ ::core::option::Option *mut qsize_t>,
+ pub get_projid: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut kprojid_t) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_inode_usage: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut qsize_t) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_next_id: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block, arg2: *mut kqid) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qc_dqblk {
+ pub d_fieldmask: ::aya_bpf::cty::c_int,
+ pub d_spc_hardlimit: u64_,
+ pub d_spc_softlimit: u64_,
+ pub d_ino_hardlimit: u64_,
+ pub d_ino_softlimit: u64_,
+ pub d_space: u64_,
+ pub d_ino_count: u64_,
+ pub d_ino_timer: s64,
+ pub d_spc_timer: s64,
+ pub d_ino_warns: ::aya_bpf::cty::c_int,
+ pub d_spc_warns: ::aya_bpf::cty::c_int,
+ pub d_rt_spc_hardlimit: u64_,
+ pub d_rt_spc_softlimit: u64_,
+ pub d_rt_space: u64_,
+ pub d_rt_spc_timer: s64,
+ pub d_rt_spc_warns: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qc_type_state {
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub spc_timelimit: ::aya_bpf::cty::c_uint,
+ pub ino_timelimit: ::aya_bpf::cty::c_uint,
+ pub rt_spc_timelimit: ::aya_bpf::cty::c_uint,
+ pub spc_warnlimit: ::aya_bpf::cty::c_uint,
+ pub ino_warnlimit: ::aya_bpf::cty::c_uint,
+ pub rt_spc_warnlimit: ::aya_bpf::cty::c_uint,
+ pub ino: ::aya_bpf::cty::c_ulonglong,
+ pub blocks: blkcnt_t,
+ pub nextents: blkcnt_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qc_state {
+ pub s_incoredqs: ::aya_bpf::cty::c_uint,
+ pub s_state: [qc_type_state; 3usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct qc_info {
+ pub i_fieldmask: ::aya_bpf::cty::c_int,
+ pub i_flags: ::aya_bpf::cty::c_uint,
+ pub i_spc_timelimit: ::aya_bpf::cty::c_uint,
+ pub i_ino_timelimit: ::aya_bpf::cty::c_uint,
+ pub i_rt_spc_timelimit: ::aya_bpf::cty::c_uint,
+ pub i_spc_warnlimit: ::aya_bpf::cty::c_uint,
+ pub i_ino_warnlimit: ::aya_bpf::cty::c_uint,
+ pub i_rt_spc_warnlimit: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct quotactl_ops {
+ pub quota_on: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: *const path,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub quota_off: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub quota_enable: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub quota_disable: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub quota_sync: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub set_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *mut qc_info,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_dqblk: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: kqid,
+ arg3: *mut qc_dqblk,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_nextdqblk: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut kqid,
+ arg3: *mut qc_dqblk,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub set_dqblk: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: kqid,
+ arg3: *mut qc_dqblk,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_state: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block, arg2: *mut qc_state) -> ::aya_bpf::cty::c_int,
+ >,
+ pub rm_xquota: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct address_space_operations {
+ pub writepage: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut page,
+ arg2: *mut writeback_control,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub read_folio: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut file, arg2: *mut folio) -> ::aya_bpf::cty::c_int,
+ >,
+ pub writepages: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut address_space,
+ arg2: *mut writeback_control,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub dirty_folio: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut address_space, arg2: *mut folio) -> bool_,
+ >,
+ pub readahead: ::core::option::Option,
+ pub write_begin: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut address_space,
+ arg3: loff_t,
+ arg4: ::aya_bpf::cty::c_uint,
+ arg5: *mut *mut page,
+ arg6: *mut *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub write_end: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut address_space,
+ arg3: loff_t,
+ arg4: ::aya_bpf::cty::c_uint,
+ arg5: ::aya_bpf::cty::c_uint,
+ arg6: *mut page,
+ arg7: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub bmap: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut address_space, arg2: sector_t) -> sector_t,
+ >,
+ pub invalidate_folio:
+ ::core::option::Option,
+ pub release_folio:
+ ::core::option::Option bool_>,
+ pub free_folio: ::core::option::Option,
+ pub direct_IO: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kiocb, arg2: *mut iov_iter) -> isize,
+ >,
+ pub migrate_folio: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut address_space,
+ arg2: *mut folio,
+ arg3: *mut folio,
+ arg4: migrate_mode::Type,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub launder_folio:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub is_partially_uptodate: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut folio, arg2: usize, arg3: usize) -> bool_,
+ >,
+ pub is_dirty_writeback: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut folio, arg2: *mut bool_, arg3: *mut bool_),
+ >,
+ pub error_remove_page: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut address_space, arg2: *mut page) -> ::aya_bpf::cty::c_int,
+ >,
+ pub swap_activate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut swap_info_struct,
+ arg2: *mut file,
+ arg3: *mut sector_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub swap_deactivate: ::core::option::Option,
+ pub swap_rw: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kiocb, arg2: *mut iov_iter) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct iovec {
+ pub iov_base: *mut ::aya_bpf::cty::c_void,
+ pub iov_len: __kernel_size_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct iov_iter {
+ pub iter_type: u8_,
+ pub copy_mc: bool_,
+ pub nofault: bool_,
+ pub data_source: bool_,
+ pub user_backed: bool_,
+ pub __bindgen_anon_1: iov_iter__bindgen_ty_1,
+ pub __bindgen_anon_2: iov_iter__bindgen_ty_2,
+ pub __bindgen_anon_3: iov_iter__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iov_iter__bindgen_ty_1 {
+ pub iov_offset: usize,
+ pub last_offset: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iov_iter__bindgen_ty_2 {
+ pub __ubuf_iovec: iovec,
+ pub __bindgen_anon_1: iov_iter__bindgen_ty_2__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct iov_iter__bindgen_ty_2__bindgen_ty_1 {
+ pub __bindgen_anon_1: iov_iter__bindgen_ty_2__bindgen_ty_1__bindgen_ty_1,
+ pub count: usize,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iov_iter__bindgen_ty_2__bindgen_ty_1__bindgen_ty_1 {
+ pub __iov: *const iovec,
+ pub kvec: *const kvec,
+ pub bvec: *const bio_vec,
+ pub xarray: *mut xarray,
+ pub pipe: *mut pipe_inode_info,
+ pub ubuf: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union iov_iter__bindgen_ty_3 {
+ pub nr_segs: ::aya_bpf::cty::c_ulong,
+ pub __bindgen_anon_1: iov_iter__bindgen_ty_3__bindgen_ty_1,
+ pub xarray_start: loff_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct iov_iter__bindgen_ty_3__bindgen_ty_1 {
+ pub head: ::aya_bpf::cty::c_uint,
+ pub start_head: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct cdev {
+ pub kobj: kobject,
+ pub owner: *mut module,
+ pub ops: *const file_operations,
+ pub list: list_head,
+ pub dev: dev_t,
+ pub count: ::aya_bpf::cty::c_uint,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct inode_operations {
+ pub lookup: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut dentry,
+ arg3: ::aya_bpf::cty::c_uint,
+ ) -> *mut dentry,
+ >,
+ pub get_link: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut inode,
+ arg3: *mut delayed_call,
+ ) -> *const ::aya_bpf::cty::c_char,
+ >,
+ pub permission: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_inode_acl: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: bool_,
+ ) -> *mut posix_acl,
+ >,
+ pub readlink: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub create: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ arg4: umode_t,
+ arg5: bool_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub link: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub unlink: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub symlink: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ arg4: *const ::aya_bpf::cty::c_char,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub mkdir: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ arg4: umode_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub rmdir: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut inode, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub mknod: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ arg4: umode_t,
+ arg5: dev_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub rename: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut dentry,
+ arg4: *mut inode,
+ arg5: *mut dentry,
+ arg6: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub setattr: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut dentry,
+ arg3: *mut iattr,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub getattr: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *const path,
+ arg3: *mut kstat,
+ arg4: u32_,
+ arg5: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub listxattr: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: usize,
+ ) -> isize,
+ >,
+ pub fiemap: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut fiemap_extent_info,
+ arg3: u64_,
+ arg4: u64_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub update_time: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut timespec64,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub atomic_open: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut dentry,
+ arg3: *mut file,
+ arg4: ::aya_bpf::cty::c_uint,
+ arg5: umode_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub tmpfile: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut inode,
+ arg3: *mut file,
+ arg4: umode_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_acl: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut dentry,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> *mut posix_acl,
+ >,
+ pub set_acl: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut dentry,
+ arg3: *mut posix_acl,
+ arg4: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fileattr_set: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut mnt_idmap,
+ arg2: *mut dentry,
+ arg3: *mut fileattr,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fileattr_get: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut dentry, arg2: *mut fileattr) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct fasync_struct {
+ pub fa_lock: rwlock_t,
+ pub magic: ::aya_bpf::cty::c_int,
+ pub fa_fd: ::aya_bpf::cty::c_int,
+ pub fa_next: *mut fasync_struct,
+ pub fa_file: *mut file,
+ pub fa_rcu: callback_head,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct super_operations {
+ pub alloc_inode:
+ ::core::option::Option *mut inode>,
+ pub destroy_inode: ::core::option::Option,
+ pub free_inode: ::core::option::Option,
+ pub dirty_inode:
+ ::core::option::Option,
+ pub write_inode: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut writeback_control,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub drop_inode:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub evict_inode: ::core::option::Option,
+ pub put_super: ::core::option::Option,
+ pub sync_fs: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub freeze_super: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block) -> ::aya_bpf::cty::c_int,
+ >,
+ pub freeze_fs: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block) -> ::aya_bpf::cty::c_int,
+ >,
+ pub thaw_super: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block) -> ::aya_bpf::cty::c_int,
+ >,
+ pub unfreeze_fs: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block) -> ::aya_bpf::cty::c_int,
+ >,
+ pub statfs: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut dentry, arg2: *mut kstatfs) -> ::aya_bpf::cty::c_int,
+ >,
+ pub remount_fs: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut ::aya_bpf::cty::c_int,
+ arg3: *mut ::aya_bpf::cty::c_char,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub umount_begin: ::core::option::Option,
+ pub show_options: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub show_devname: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub show_path: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub show_stats: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut dentry) -> ::aya_bpf::cty::c_int,
+ >,
+ pub quota_read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *mut ::aya_bpf::cty::c_char,
+ arg4: usize,
+ arg5: loff_t,
+ ) -> isize,
+ >,
+ pub quota_write: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: ::aya_bpf::cty::c_int,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: usize,
+ arg5: loff_t,
+ ) -> isize,
+ >,
+ pub get_dquots:
+ ::core::option::Option *mut *mut dquot>,
+ pub nr_cached_objects: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut shrink_control,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+ pub free_cached_objects: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut shrink_control,
+ ) -> ::aya_bpf::cty::c_long,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct export_operations {
+ pub encode_fh: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut __u32,
+ arg3: *mut ::aya_bpf::cty::c_int,
+ arg4: *mut inode,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub fh_to_dentry: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut fid,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: ::aya_bpf::cty::c_int,
+ ) -> *mut dentry,
+ >,
+ pub fh_to_parent: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut fid,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: ::aya_bpf::cty::c_int,
+ ) -> *mut dentry,
+ >,
+ pub get_name: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dentry,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: *mut dentry,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_parent: ::core::option::Option *mut dentry>,
+ pub commit_metadata:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub get_uuid: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut u8_,
+ arg3: *mut u32_,
+ arg4: *mut u64_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub map_blocks: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: loff_t,
+ arg3: u64_,
+ arg4: *mut iomap,
+ arg5: bool_,
+ arg6: *mut u32_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub commit_blocks: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut iomap,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: *mut iattr,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub flags: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct xattr_handler {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub prefix: *const ::aya_bpf::cty::c_char,
+ pub flags: ::aya_bpf::cty::c_int,
+ pub list: ::core::option::Option bool_>,
+ pub get: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const xattr_handler,
+ arg2: *mut dentry,
+ arg3: *mut inode,
+ arg4: *const ::aya_bpf::cty::c_char,
+ arg5: *mut ::aya_bpf::cty::c_void,
+ arg6: usize,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub set: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const xattr_handler,
+ arg2: *mut mnt_idmap,
+ arg3: *mut dentry,
+ arg4: *mut inode,
+ arg5: *const ::aya_bpf::cty::c_char,
+ arg6: *const ::aya_bpf::cty::c_void,
+ arg7: usize,
+ arg8: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fscrypt_operations {
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub key_prefix: *const ::aya_bpf::cty::c_char,
+ pub get_context: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ arg3: usize,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub set_context: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *const ::aya_bpf::cty::c_void,
+ arg3: usize,
+ arg4: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_dummy_policy: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut super_block) -> *const fscrypt_policy,
+ >,
+ pub empty_dir: ::core::option::Option bool_>,
+ pub has_stable_inodes:
+ ::core::option::Option bool_>,
+ pub get_ino_and_lblk_bits: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut ::aya_bpf::cty::c_int,
+ arg3: *mut ::aya_bpf::cty::c_int,
+ ),
+ >,
+ pub get_devices: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut super_block,
+ arg2: *mut ::aya_bpf::cty::c_uint,
+ ) -> *mut *mut block_device,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fsverity_operations {
+ pub begin_enable_verity:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub end_enable_verity: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *const ::aya_bpf::cty::c_void,
+ arg3: usize,
+ arg4: u64_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_verity_descriptor: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ arg3: usize,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub read_merkle_tree_page: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: ::aya_bpf::cty::c_ulong,
+ arg3: ::aya_bpf::cty::c_ulong,
+ ) -> *mut page,
+ >,
+ pub write_merkle_tree_block: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut inode,
+ arg2: *const ::aya_bpf::cty::c_void,
+ arg3: u64_,
+ arg4: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+pub type filldir_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut dir_context,
+ arg2: *const ::aya_bpf::cty::c_char,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: loff_t,
+ arg5: u64_,
+ arg6: ::aya_bpf::cty::c_uint,
+ ) -> bool_,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dir_context {
+ pub actor: filldir_t,
+ pub pos: loff_t,
+}
+pub type poll_queue_proc = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut wait_queue_head_t,
+ arg3: *mut poll_table_struct,
+ ),
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct poll_table_struct {
+ pub _qproc: poll_queue_proc,
+ pub _key: __poll_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct seq_file {
+ pub buf: *mut ::aya_bpf::cty::c_char,
+ pub size: usize,
+ pub from: usize,
+ pub count: usize,
+ pub pad_until: usize,
+ pub index: loff_t,
+ pub read_pos: loff_t,
+ pub lock: mutex,
+ pub op: *const seq_operations,
+ pub poll_event: ::aya_bpf::cty::c_int,
+ pub file: *const file,
+ pub private: *mut ::aya_bpf::cty::c_void,
+}
+pub type fs_param_type = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut p_log,
+ arg2: *const fs_parameter_spec,
+ arg3: *mut fs_parameter,
+ arg4: *mut fs_parse_result,
+ ) -> ::aya_bpf::cty::c_int,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fs_parameter_spec {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub type_: fs_param_type,
+ pub opt: u8_,
+ pub flags: ::aya_bpf::cty::c_ushort,
+ pub data: *const ::aya_bpf::cty::c_void,
+}
+pub mod irqreturn {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const IRQ_NONE: Type = 0;
+ pub const IRQ_HANDLED: Type = 1;
+ pub const IRQ_WAKE_THREAD: Type = 2;
+}
+pub use self::irqreturn::Type as irqreturn_t;
+pub type irq_handler_t = ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: ::aya_bpf::cty::c_int,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ ) -> irqreturn_t,
+>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irqaction {
+ pub handler: irq_handler_t,
+ pub dev_id: *mut ::aya_bpf::cty::c_void,
+ pub percpu_dev_id: *mut ::aya_bpf::cty::c_void,
+ pub next: *mut irqaction,
+ pub thread_fn: irq_handler_t,
+ pub thread: *mut task_struct,
+ pub secondary: *mut irqaction,
+ pub irq: ::aya_bpf::cty::c_uint,
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub thread_flags: ::aya_bpf::cty::c_ulong,
+ pub thread_mask: ::aya_bpf::cty::c_ulong,
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub dir: *mut proc_dir_entry,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 32usize]>,
+}
+impl irqaction {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 32usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 32usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_affinity_notify {
+ pub irq: ::aya_bpf::cty::c_uint,
+ pub kref: kref,
+ pub work: work_struct,
+ pub notify: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut irq_affinity_notify, arg2: *const cpumask_t),
+ >,
+ pub release: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_affinity_desc {
+ pub mask: cpumask,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub __bindgen_padding_0: [u8; 7usize],
+}
+impl irq_affinity_desc {
+ #[inline]
+ pub fn is_managed(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_managed(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ is_managed: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let is_managed: u32 = unsafe { ::core::mem::transmute(is_managed) };
+ is_managed as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub mod irqchip_irq_state {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const IRQCHIP_STATE_PENDING: Type = 0;
+ pub const IRQCHIP_STATE_ACTIVE: Type = 1;
+ pub const IRQCHIP_STATE_MASKED: Type = 2;
+ pub const IRQCHIP_STATE_LINE_LEVEL: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernfs_elem_dir {
+ pub subdirs: ::aya_bpf::cty::c_ulong,
+ pub children: rb_root,
+ pub root: *mut kernfs_root,
+ pub rev: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernfs_elem_symlink {
+ pub target_kn: *mut kernfs_node,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernfs_elem_attr {
+ pub ops: *const kernfs_ops,
+ pub open: *mut kernfs_open_node,
+ pub size: loff_t,
+ pub notify_next: *mut kernfs_node,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kernfs_node {
+ pub count: atomic_t,
+ pub active: atomic_t,
+ pub parent: *mut kernfs_node,
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub rb: rb_node,
+ pub ns: *const ::aya_bpf::cty::c_void,
+ pub hash: ::aya_bpf::cty::c_uint,
+ pub __bindgen_anon_1: kernfs_node__bindgen_ty_1,
+ pub priv_: *mut ::aya_bpf::cty::c_void,
+ pub id: u64_,
+ pub flags: ::aya_bpf::cty::c_ushort,
+ pub mode: umode_t,
+ pub iattr: *mut kernfs_iattrs,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union kernfs_node__bindgen_ty_1 {
+ pub dir: kernfs_elem_dir,
+ pub symlink: kernfs_elem_symlink,
+ pub attr: kernfs_elem_attr,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kernfs_ops {
+ pub open: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kernfs_open_file) -> ::aya_bpf::cty::c_int,
+ >,
+ pub release: ::core::option::Option,
+ pub seq_show: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut seq_file,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub seq_start: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut loff_t) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub seq_next: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut seq_file,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ arg3: *mut loff_t,
+ ) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub seq_stop: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut seq_file, arg2: *mut ::aya_bpf::cty::c_void),
+ >,
+ pub read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kernfs_open_file,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: usize,
+ arg4: loff_t,
+ ) -> isize,
+ >,
+ pub atomic_write_len: usize,
+ pub prealloc: bool_,
+ pub write: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kernfs_open_file,
+ arg2: *mut ::aya_bpf::cty::c_char,
+ arg3: usize,
+ arg4: loff_t,
+ ) -> isize,
+ >,
+ pub poll: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut kernfs_open_file, arg2: *mut poll_table_struct) -> __poll_t,
+ >,
+ pub mmap: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kernfs_open_file,
+ arg2: *mut vm_area_struct,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kernfs_open_file {
+ pub kn: *mut kernfs_node,
+ pub file: *mut file,
+ pub seq_file: *mut seq_file,
+ pub priv_: *mut ::aya_bpf::cty::c_void,
+ pub mutex: mutex,
+ pub prealloc_mutex: mutex,
+ pub event: ::aya_bpf::cty::c_int,
+ pub list: list_head,
+ pub prealloc_buf: *mut ::aya_bpf::cty::c_char,
+ pub atomic_write_len: usize,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub vm_ops: *const vm_operations_struct,
+}
+impl kernfs_open_file {
+ #[inline]
+ pub fn mmapped(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_mmapped(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn released(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_released(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(mmapped: bool_, released: bool_) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let mmapped: u8 = unsafe { ::core::mem::transmute(mmapped) };
+ mmapped as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let released: u8 = unsafe { ::core::mem::transmute(released) };
+ released as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub mod kobj_ns_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const KOBJ_NS_TYPE_NONE: Type = 0;
+ pub const KOBJ_NS_TYPE_NET: Type = 1;
+ pub const KOBJ_NS_TYPES: Type = 2;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kobj_ns_type_operations {
+ pub type_: kobj_ns_type::Type,
+ pub current_may_mount: ::core::option::Option bool_>,
+ pub grab_current_ns:
+ ::core::option::Option *mut ::aya_bpf::cty::c_void>,
+ pub netlink_ns: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut sock) -> *const ::aya_bpf::cty::c_void,
+ >,
+ pub initial_ns: ::core::option::Option *const ::aya_bpf::cty::c_void>,
+ pub drop_ns: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct attribute {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub mode: umode_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct bin_attribute {
+ pub attr: attribute,
+ pub size: usize,
+ pub private: *mut ::aya_bpf::cty::c_void,
+ pub f_mapping: ::core::option::Option *mut address_space>,
+ pub read: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut kobject,
+ arg3: *mut bin_attribute,
+ arg4: *mut ::aya_bpf::cty::c_char,
+ arg5: loff_t,
+ arg6: usize,
+ ) -> isize,
+ >,
+ pub write: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut kobject,
+ arg3: *mut bin_attribute,
+ arg4: *mut ::aya_bpf::cty::c_char,
+ arg5: loff_t,
+ arg6: usize,
+ ) -> isize,
+ >,
+ pub mmap: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut file,
+ arg2: *mut kobject,
+ arg3: *mut bin_attribute,
+ arg4: *mut vm_area_struct,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct sysfs_ops {
+ pub show: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kobject,
+ arg2: *mut attribute,
+ arg3: *mut ::aya_bpf::cty::c_char,
+ ) -> isize,
+ >,
+ pub store: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut kobject,
+ arg2: *mut attribute,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: usize,
+ ) -> isize,
+ >,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kset {
+ pub list: list_head,
+ pub list_lock: spinlock_t,
+ pub kobj: kobject,
+ pub uevent_ops: *const kset_uevent_ops,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kobj_type {
+ pub release: ::core::option::Option,
+ pub sysfs_ops: *const sysfs_ops,
+ pub default_groups: *mut *const attribute_group,
+ pub child_ns_type: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const kobject) -> *const kobj_ns_type_operations,
+ >,
+ pub namespace: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const kobject) -> *const ::aya_bpf::cty::c_void,
+ >,
+ pub get_ownership: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const kobject, arg2: *mut kuid_t, arg3: *mut kgid_t),
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kobj_uevent_env {
+ pub argv: [*mut ::aya_bpf::cty::c_char; 3usize],
+ pub envp: [*mut ::aya_bpf::cty::c_char; 64usize],
+ pub envp_idx: ::aya_bpf::cty::c_int,
+ pub buf: [::aya_bpf::cty::c_char; 2048usize],
+ pub buflen: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kset_uevent_ops {
+ pub filter:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub name: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const kobject) -> *const ::aya_bpf::cty::c_char,
+ >,
+ pub uevent: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const kobject,
+ arg2: *mut kobj_uevent_env,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pm_message {
+ pub event: ::aya_bpf::cty::c_int,
+}
+pub type pm_message_t = pm_message;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_pm_ops {
+ pub prepare:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub complete: ::core::option::Option,
+ pub suspend:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub resume:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub freeze:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub thaw:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub poweroff:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub restore:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub suspend_late:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub resume_early:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub freeze_late:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub thaw_early:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub poweroff_late:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub restore_early:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub suspend_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub resume_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub freeze_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub thaw_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub poweroff_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub restore_noirq:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub runtime_suspend:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub runtime_resume:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub runtime_idle:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+}
+pub mod dl_dev_state {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DL_DEV_NO_DRIVER: Type = 0;
+ pub const DL_DEV_PROBING: Type = 1;
+ pub const DL_DEV_DRIVER_BOUND: Type = 2;
+ pub const DL_DEV_UNBINDING: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_links_info {
+ pub suppliers: list_head,
+ pub consumers: list_head,
+ pub defer_sync: list_head,
+ pub status: dl_dev_state::Type,
+}
+pub mod rpm_request {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const RPM_REQ_NONE: Type = 0;
+ pub const RPM_REQ_IDLE: Type = 1;
+ pub const RPM_REQ_SUSPEND: Type = 2;
+ pub const RPM_REQ_AUTOSUSPEND: Type = 3;
+ pub const RPM_REQ_RESUME: Type = 4;
+}
+pub mod rpm_status {
+ pub type Type = ::aya_bpf::cty::c_int;
+ pub const RPM_INVALID: Type = -1;
+ pub const RPM_ACTIVE: Type = 0;
+ pub const RPM_RESUMING: Type = 1;
+ pub const RPM_SUSPENDED: Type = 2;
+ pub const RPM_SUSPENDING: Type = 3;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct dev_pm_info {
+ pub power_state: pm_message_t,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
+ pub driver_flags: u32_,
+ pub lock: spinlock_t,
+ pub entry: list_head,
+ pub completion: completion,
+ pub wakeup: *mut wakeup_source,
+ pub _bitfield_align_2: [u8; 0],
+ pub _bitfield_2: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub suspend_timer: hrtimer,
+ pub timer_expires: u64_,
+ pub work: work_struct,
+ pub wait_queue: wait_queue_head_t,
+ pub wakeirq: *mut wake_irq,
+ pub usage_count: atomic_t,
+ pub child_count: atomic_t,
+ pub _bitfield_align_3: [u8; 0],
+ pub _bitfield_3: __BindgenBitfieldUnit<[u8; 2usize]>,
+ pub links_count: ::aya_bpf::cty::c_uint,
+ pub request: rpm_request::Type,
+ pub runtime_status: rpm_status::Type,
+ pub last_status: rpm_status::Type,
+ pub runtime_error: ::aya_bpf::cty::c_int,
+ pub autosuspend_delay: ::aya_bpf::cty::c_int,
+ pub last_busy: u64_,
+ pub active_time: u64_,
+ pub suspended_time: u64_,
+ pub accounting_timestamp: u64_,
+ pub subsys_data: *mut pm_subsys_data,
+ pub set_latency_tolerance:
+ ::core::option::Option,
+ pub qos: *mut dev_pm_qos,
+}
+impl dev_pm_info {
+ #[inline]
+ pub fn can_wakeup(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_can_wakeup(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn async_suspend(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_async_suspend(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn in_dpm_list(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_in_dpm_list(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_prepared(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_prepared(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_suspended(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_suspended(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_noirq_suspended(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(5usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_noirq_suspended(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(5usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_late_suspended(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(6usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_late_suspended(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(6usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn no_pm(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_no_pm(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(7usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn early_init(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_early_init(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn direct_complete(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(9usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_direct_complete(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(9usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ can_wakeup: ::aya_bpf::cty::c_uint,
+ async_suspend: ::aya_bpf::cty::c_uint,
+ in_dpm_list: bool_,
+ is_prepared: bool_,
+ is_suspended: bool_,
+ is_noirq_suspended: bool_,
+ is_late_suspended: bool_,
+ no_pm: bool_,
+ early_init: bool_,
+ direct_complete: bool_,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let can_wakeup: u32 = unsafe { ::core::mem::transmute(can_wakeup) };
+ can_wakeup as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let async_suspend: u32 = unsafe { ::core::mem::transmute(async_suspend) };
+ async_suspend as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let in_dpm_list: u8 = unsafe { ::core::mem::transmute(in_dpm_list) };
+ in_dpm_list as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let is_prepared: u8 = unsafe { ::core::mem::transmute(is_prepared) };
+ is_prepared as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let is_suspended: u8 = unsafe { ::core::mem::transmute(is_suspended) };
+ is_suspended as u64
+ });
+ __bindgen_bitfield_unit.set(5usize, 1u8, {
+ let is_noirq_suspended: u8 = unsafe { ::core::mem::transmute(is_noirq_suspended) };
+ is_noirq_suspended as u64
+ });
+ __bindgen_bitfield_unit.set(6usize, 1u8, {
+ let is_late_suspended: u8 = unsafe { ::core::mem::transmute(is_late_suspended) };
+ is_late_suspended as u64
+ });
+ __bindgen_bitfield_unit.set(7usize, 1u8, {
+ let no_pm: u8 = unsafe { ::core::mem::transmute(no_pm) };
+ no_pm as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 1u8, {
+ let early_init: u8 = unsafe { ::core::mem::transmute(early_init) };
+ early_init as u64
+ });
+ __bindgen_bitfield_unit.set(9usize, 1u8, {
+ let direct_complete: u8 = unsafe { ::core::mem::transmute(direct_complete) };
+ direct_complete as u64
+ });
+ __bindgen_bitfield_unit
+ }
+ #[inline]
+ pub fn wakeup_path(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_wakeup_path(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_2.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn syscore(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(1usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_syscore(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_2.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn no_pm_callbacks(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(2usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_no_pm_callbacks(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_2.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn must_resume(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_must_resume(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn may_skip_resume(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_2.get(4usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_may_skip_resume(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_2.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_2(
+ wakeup_path: bool_,
+ syscore: bool_,
+ no_pm_callbacks: bool_,
+ must_resume: ::aya_bpf::cty::c_uint,
+ may_skip_resume: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let wakeup_path: u8 = unsafe { ::core::mem::transmute(wakeup_path) };
+ wakeup_path as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let syscore: u8 = unsafe { ::core::mem::transmute(syscore) };
+ syscore as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let no_pm_callbacks: u8 = unsafe { ::core::mem::transmute(no_pm_callbacks) };
+ no_pm_callbacks as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let must_resume: u32 = unsafe { ::core::mem::transmute(must_resume) };
+ must_resume as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let may_skip_resume: u32 = unsafe { ::core::mem::transmute(may_skip_resume) };
+ may_skip_resume as u64
+ });
+ __bindgen_bitfield_unit
+ }
+ #[inline]
+ pub fn disable_depth(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(0usize, 3u8) as u32) }
+ }
+ #[inline]
+ pub fn set_disable_depth(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(0usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn idle_notification(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_idle_notification(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn request_pending(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(4usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_request_pending(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn deferred_resume(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(5usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_deferred_resume(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(5usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn needs_force_resume(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(6usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_needs_force_resume(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(6usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn runtime_auto(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(7usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_runtime_auto(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(7usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn ignore_children(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(8usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_ignore_children(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_3.set(8usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn no_callbacks(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(9usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_no_callbacks(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(9usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn irq_safe(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(10usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_irq_safe(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(10usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn use_autosuspend(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(11usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_use_autosuspend(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(11usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn timer_autosuspends(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(12usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_timer_autosuspends(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(12usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn memalloc_noio(&self) -> ::aya_bpf::cty::c_uint {
+ unsafe { ::core::mem::transmute(self._bitfield_3.get(13usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_memalloc_noio(&mut self, val: ::aya_bpf::cty::c_uint) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_3.set(13usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_3(
+ disable_depth: ::aya_bpf::cty::c_uint,
+ idle_notification: ::aya_bpf::cty::c_uint,
+ request_pending: ::aya_bpf::cty::c_uint,
+ deferred_resume: ::aya_bpf::cty::c_uint,
+ needs_force_resume: ::aya_bpf::cty::c_uint,
+ runtime_auto: ::aya_bpf::cty::c_uint,
+ ignore_children: bool_,
+ no_callbacks: ::aya_bpf::cty::c_uint,
+ irq_safe: ::aya_bpf::cty::c_uint,
+ use_autosuspend: ::aya_bpf::cty::c_uint,
+ timer_autosuspends: ::aya_bpf::cty::c_uint,
+ memalloc_noio: ::aya_bpf::cty::c_uint,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 3u8, {
+ let disable_depth: u32 = unsafe { ::core::mem::transmute(disable_depth) };
+ disable_depth as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let idle_notification: u32 = unsafe { ::core::mem::transmute(idle_notification) };
+ idle_notification as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let request_pending: u32 = unsafe { ::core::mem::transmute(request_pending) };
+ request_pending as u64
+ });
+ __bindgen_bitfield_unit.set(5usize, 1u8, {
+ let deferred_resume: u32 = unsafe { ::core::mem::transmute(deferred_resume) };
+ deferred_resume as u64
+ });
+ __bindgen_bitfield_unit.set(6usize, 1u8, {
+ let needs_force_resume: u32 = unsafe { ::core::mem::transmute(needs_force_resume) };
+ needs_force_resume as u64
+ });
+ __bindgen_bitfield_unit.set(7usize, 1u8, {
+ let runtime_auto: u32 = unsafe { ::core::mem::transmute(runtime_auto) };
+ runtime_auto as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 1u8, {
+ let ignore_children: u8 = unsafe { ::core::mem::transmute(ignore_children) };
+ ignore_children as u64
+ });
+ __bindgen_bitfield_unit.set(9usize, 1u8, {
+ let no_callbacks: u32 = unsafe { ::core::mem::transmute(no_callbacks) };
+ no_callbacks as u64
+ });
+ __bindgen_bitfield_unit.set(10usize, 1u8, {
+ let irq_safe: u32 = unsafe { ::core::mem::transmute(irq_safe) };
+ irq_safe as u64
+ });
+ __bindgen_bitfield_unit.set(11usize, 1u8, {
+ let use_autosuspend: u32 = unsafe { ::core::mem::transmute(use_autosuspend) };
+ use_autosuspend as u64
+ });
+ __bindgen_bitfield_unit.set(12usize, 1u8, {
+ let timer_autosuspends: u32 = unsafe { ::core::mem::transmute(timer_autosuspends) };
+ timer_autosuspends as u64
+ });
+ __bindgen_bitfield_unit.set(13usize, 1u8, {
+ let memalloc_noio: u32 = unsafe { ::core::mem::transmute(memalloc_noio) };
+ memalloc_noio as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_msi_info {
+ pub domain: *mut irq_domain,
+ pub data: *mut msi_device_data,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_archdata {}
+pub mod device_removable {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DEVICE_REMOVABLE_NOT_SUPPORTED: Type = 0;
+ pub const DEVICE_REMOVABLE_UNKNOWN: Type = 1;
+ pub const DEVICE_FIXED: Type = 2;
+ pub const DEVICE_REMOVABLE: Type = 3;
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct device {
+ pub kobj: kobject,
+ pub parent: *mut device,
+ pub p: *mut device_private,
+ pub init_name: *const ::aya_bpf::cty::c_char,
+ pub type_: *const device_type,
+ pub bus: *const bus_type,
+ pub driver: *mut device_driver,
+ pub platform_data: *mut ::aya_bpf::cty::c_void,
+ pub driver_data: *mut ::aya_bpf::cty::c_void,
+ pub mutex: mutex,
+ pub links: dev_links_info,
+ pub power: dev_pm_info,
+ pub pm_domain: *mut dev_pm_domain,
+ pub em_pd: *mut em_perf_domain,
+ pub pins: *mut dev_pin_info,
+ pub msi: dev_msi_info,
+ pub dma_ops: *const dma_map_ops,
+ pub dma_mask: *mut u64_,
+ pub coherent_dma_mask: u64_,
+ pub bus_dma_limit: u64_,
+ pub dma_range_map: *const bus_dma_region,
+ pub dma_parms: *mut device_dma_parameters,
+ pub dma_pools: list_head,
+ pub cma_area: *mut cma,
+ pub dma_io_tlb_mem: *mut io_tlb_mem,
+ pub archdata: dev_archdata,
+ pub of_node: *mut device_node,
+ pub fwnode: *mut fwnode_handle,
+ pub numa_node: ::aya_bpf::cty::c_int,
+ pub devt: dev_t,
+ pub id: u32_,
+ pub devres_lock: spinlock_t,
+ pub devres_head: list_head,
+ pub class: *const class,
+ pub groups: *mut *const attribute_group,
+ pub release: ::core::option::Option,
+ pub iommu_group: *mut iommu_group,
+ pub iommu: *mut dev_iommu,
+ pub physical_location: *mut device_physical_location,
+ pub removable: device_removable::Type,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub __bindgen_padding_0: [u8; 3usize],
+}
+impl device {
+ #[inline]
+ pub fn offline_disabled(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_offline_disabled(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn offline(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_offline(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn of_node_reused(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_of_node_reused(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn state_synced(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_state_synced(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn can_match(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_can_match(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ offline_disabled: bool_,
+ offline: bool_,
+ of_node_reused: bool_,
+ state_synced: bool_,
+ can_match: bool_,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let offline_disabled: u8 = unsafe { ::core::mem::transmute(offline_disabled) };
+ offline_disabled as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let offline: u8 = unsafe { ::core::mem::transmute(offline) };
+ offline as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let of_node_reused: u8 = unsafe { ::core::mem::transmute(of_node_reused) };
+ of_node_reused as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let state_synced: u8 = unsafe { ::core::mem::transmute(state_synced) };
+ state_synced as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let can_match: u8 = unsafe { ::core::mem::transmute(can_match) };
+ can_match as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct pm_subsys_data {
+ pub lock: spinlock_t,
+ pub refcount: ::aya_bpf::cty::c_uint,
+ pub clock_op_might_sleep: ::aya_bpf::cty::c_uint,
+ pub clock_mutex: mutex,
+ pub clock_list: list_head,
+ pub domain_data: *mut pm_domain_data,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct wakeup_source {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub id: ::aya_bpf::cty::c_int,
+ pub entry: list_head,
+ pub lock: spinlock_t,
+ pub wakeirq: *mut wake_irq,
+ pub timer: timer_list,
+ pub timer_expires: ::aya_bpf::cty::c_ulong,
+ pub total_time: ktime_t,
+ pub max_time: ktime_t,
+ pub last_time: ktime_t,
+ pub start_prevent_time: ktime_t,
+ pub prevent_sleep_time: ktime_t,
+ pub event_count: ::aya_bpf::cty::c_ulong,
+ pub active_count: ::aya_bpf::cty::c_ulong,
+ pub relax_count: ::aya_bpf::cty::c_ulong,
+ pub expire_count: ::aya_bpf::cty::c_ulong,
+ pub wakeup_count: ::aya_bpf::cty::c_ulong,
+ pub dev: *mut device,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub __bindgen_padding_0: [u8; 7usize],
+}
+impl wakeup_source {
+ #[inline]
+ pub fn active(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_active(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn autosleep_enabled(&self) -> bool_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_autosleep_enabled(&mut self, val: bool_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ active: bool_,
+ autosleep_enabled: bool_,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let active: u8 = unsafe { ::core::mem::transmute(active) };
+ active as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let autosleep_enabled: u8 = unsafe { ::core::mem::transmute(autosleep_enabled) };
+ autosleep_enabled as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dev_pm_domain {
+ pub ops: dev_pm_ops,
+ pub start:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub detach: ::core::option::Option,
+ pub activate:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub sync: ::core::option::Option,
+ pub dismiss: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct bus_type {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub dev_name: *const ::aya_bpf::cty::c_char,
+ pub bus_groups: *mut *const attribute_group,
+ pub dev_groups: *mut *const attribute_group,
+ pub drv_groups: *mut *const attribute_group,
+ pub match_: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut device, arg2: *mut device_driver) -> ::aya_bpf::cty::c_int,
+ >,
+ pub uevent: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const device,
+ arg2: *mut kobj_uevent_env,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub probe:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub sync_state: ::core::option::Option,
+ pub remove: ::core::option::Option,
+ pub shutdown: ::core::option::Option,
+ pub online:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub offline:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub suspend: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut device, arg2: pm_message_t) -> ::aya_bpf::cty::c_int,
+ >,
+ pub resume:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub num_vf:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub dma_configure:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub dma_cleanup: ::core::option::Option,
+ pub pm: *const dev_pm_ops,
+ pub iommu_ops: *const iommu_ops,
+ pub need_parent_lock: bool_,
+}
+pub mod probe_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const PROBE_DEFAULT_STRATEGY: Type = 0;
+ pub const PROBE_PREFER_ASYNCHRONOUS: Type = 1;
+ pub const PROBE_FORCE_SYNCHRONOUS: Type = 2;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_driver {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub bus: *const bus_type,
+ pub owner: *mut module,
+ pub mod_name: *const ::aya_bpf::cty::c_char,
+ pub suppress_bind_attrs: bool_,
+ pub probe_type: probe_type::Type,
+ pub of_match_table: *const of_device_id,
+ pub acpi_match_table: *const acpi_device_id,
+ pub probe:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub sync_state: ::core::option::Option,
+ pub remove:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub shutdown: ::core::option::Option,
+ pub suspend: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut device, arg2: pm_message_t) -> ::aya_bpf::cty::c_int,
+ >,
+ pub resume:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub groups: *mut *const attribute_group,
+ pub dev_groups: *mut *const attribute_group,
+ pub pm: *const dev_pm_ops,
+ pub coredump: ::core::option::Option,
+ pub p: *mut driver_private,
+}
+pub mod iommu_cap {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const IOMMU_CAP_CACHE_COHERENCY: Type = 0;
+ pub const IOMMU_CAP_NOEXEC: Type = 1;
+ pub const IOMMU_CAP_PRE_BOOT_PROTECTION: Type = 2;
+ pub const IOMMU_CAP_ENFORCE_CACHE_COHERENCY: Type = 3;
+}
+pub mod iommu_dev_features {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const IOMMU_DEV_FEAT_SVA: Type = 0;
+ pub const IOMMU_DEV_FEAT_IOPF: Type = 1;
+}
+pub type ioasid_t = ::aya_bpf::cty::c_uint;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct iommu_ops {
+ pub capable: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut device, arg2: iommu_cap::Type) -> bool_,
+ >,
+ pub domain_alloc: ::core::option::Option<
+ unsafe extern "C" fn(arg1: ::aya_bpf::cty::c_uint) -> *mut iommu_domain,
+ >,
+ pub probe_device:
+ ::core::option::Option *mut iommu_device>,
+ pub release_device: ::core::option::Option,
+ pub probe_finalize: ::core::option::Option,
+ pub set_platform_dma_ops: ::core::option::Option,
+ pub device_group:
+ ::core::option::Option *mut iommu_group>,
+ pub get_resv_regions:
+ ::core::option::Option,
+ pub of_xlate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut of_phandle_args,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub is_attach_deferred:
+ ::core::option::Option bool_>,
+ pub dev_enable_feat: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: iommu_dev_features::Type,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub dev_disable_feat: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: iommu_dev_features::Type,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub page_response: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut iommu_fault_event,
+ arg3: *mut iommu_page_response,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub def_domain_type:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub remove_dev_pasid:
+ ::core::option::Option,
+ pub default_domain_ops: *const iommu_domain_ops,
+ pub pgsize_bitmap: ::aya_bpf::cty::c_ulong,
+ pub owner: *mut module,
+}
+pub type Elf64_Addr = __u64;
+pub type Elf64_Half = __u16;
+pub type Elf64_Word = __u32;
+pub type Elf64_Xword = __u64;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct elf64_sym {
+ pub st_name: Elf64_Word,
+ pub st_info: ::aya_bpf::cty::c_uchar,
+ pub st_other: ::aya_bpf::cty::c_uchar,
+ pub st_shndx: Elf64_Half,
+ pub st_value: Elf64_Addr,
+ pub st_size: Elf64_Xword,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct kernel_param {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub mod_: *mut module,
+ pub ops: *const kernel_param_ops,
+ pub perm: u16_,
+ pub level: s8,
+ pub flags: u8_,
+ pub __bindgen_anon_1: kernel_param__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union kernel_param__bindgen_ty_1 {
+ pub arg: *mut ::aya_bpf::cty::c_void,
+ pub str_: *const kparam_string,
+ pub arr: *const kparam_array,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kparam_string {
+ pub maxlen: ::aya_bpf::cty::c_uint,
+ pub string: *mut ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct kparam_array {
+ pub max: ::aya_bpf::cty::c_uint,
+ pub elemsize: ::aya_bpf::cty::c_uint,
+ pub num: *mut ::aya_bpf::cty::c_uint,
+ pub ops: *const kernel_param_ops,
+ pub elem: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct error_injection_entry {
+ pub addr: ::aya_bpf::cty::c_ulong,
+ pub etype: ::aya_bpf::cty::c_int,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct module_attribute {
+ pub attr: attribute,
+ pub show: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut module_attribute,
+ arg2: *mut module_kobject,
+ arg3: *mut ::aya_bpf::cty::c_char,
+ ) -> isize,
+ >,
+ pub store: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut module_attribute,
+ arg2: *mut module_kobject,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: usize,
+ ) -> isize,
+ >,
+ pub setup: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut module, arg2: *const ::aya_bpf::cty::c_char),
+ >,
+ pub test:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub free: ::core::option::Option,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct trace_event {
+ pub node: hlist_node,
+ pub type_: ::aya_bpf::cty::c_int,
+ pub funcs: *mut trace_event_functions,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct trace_event_call {
+ pub list: list_head,
+ pub class: *mut trace_event_class,
+ pub __bindgen_anon_1: trace_event_call__bindgen_ty_1,
+ pub event: trace_event,
+ pub print_fmt: *mut ::aya_bpf::cty::c_char,
+ pub filter: *mut event_filter,
+ pub __bindgen_anon_2: trace_event_call__bindgen_ty_2,
+ pub data: *mut ::aya_bpf::cty::c_void,
+ pub flags: ::aya_bpf::cty::c_int,
+ pub perf_refcount: ::aya_bpf::cty::c_int,
+ pub perf_events: *mut hlist_head,
+ pub prog_array: *mut bpf_prog_array,
+ pub perf_perm: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut trace_event_call,
+ arg2: *mut perf_event,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union trace_event_call__bindgen_ty_1 {
+ pub name: *mut ::aya_bpf::cty::c_char,
+ pub tp: *mut tracepoint,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union trace_event_call__bindgen_ty_2 {
+ pub module: *mut ::aya_bpf::cty::c_void,
+ pub refcnt: atomic_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct trace_eval_map {
+ pub system: *const ::aya_bpf::cty::c_char,
+ pub eval_string: *const ::aya_bpf::cty::c_char,
+ pub eval_value: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct of_device_id {
+ pub name: [::aya_bpf::cty::c_char; 32usize],
+ pub type_: [::aya_bpf::cty::c_char; 32usize],
+ pub compatible: [::aya_bpf::cty::c_char; 128usize],
+ pub data: *const ::aya_bpf::cty::c_void,
+}
+pub type kernel_ulong_t = ::aya_bpf::cty::c_ulong;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct acpi_device_id {
+ pub id: [__u8; 16usize],
+ pub driver_data: kernel_ulong_t,
+ pub cls: __u32,
+ pub cls_msk: __u32,
+}
+pub type phandle = u32_;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fwnode_handle {
+ pub secondary: *mut fwnode_handle,
+ pub ops: *const fwnode_operations,
+ pub dev: *mut device,
+ pub suppliers: list_head,
+ pub consumers: list_head,
+ pub flags: u8_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_node {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub phandle: phandle,
+ pub full_name: *const ::aya_bpf::cty::c_char,
+ pub fwnode: fwnode_handle,
+ pub properties: *mut property,
+ pub deadprops: *mut property,
+ pub parent: *mut device_node,
+ pub child: *mut device_node,
+ pub sibling: *mut device_node,
+ pub _flags: ::aya_bpf::cty::c_ulong,
+ pub data: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct em_perf_state {
+ pub frequency: ::aya_bpf::cty::c_ulong,
+ pub power: ::aya_bpf::cty::c_ulong,
+ pub cost: ::aya_bpf::cty::c_ulong,
+ pub flags: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct em_perf_domain {
+ pub table: *mut em_perf_state,
+ pub nr_perf_states: ::aya_bpf::cty::c_int,
+ pub flags: ::aya_bpf::cty::c_ulong,
+ pub cpus: __IncompleteArrayField<::aya_bpf::cty::c_ulong>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct class {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub class_groups: *mut *const attribute_group,
+ pub dev_groups: *mut *const attribute_group,
+ pub dev_uevent: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const device,
+ arg2: *mut kobj_uevent_env,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub devnode: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const device,
+ arg2: *mut umode_t,
+ ) -> *mut ::aya_bpf::cty::c_char,
+ >,
+ pub class_release: ::core::option::Option,
+ pub dev_release: ::core::option::Option,
+ pub shutdown_pre:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub ns_type: *const kobj_ns_type_operations,
+ pub namespace: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const device) -> *const ::aya_bpf::cty::c_void,
+ >,
+ pub get_ownership: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const device, arg2: *mut kuid_t, arg3: *mut kgid_t),
+ >,
+ pub pm: *const dev_pm_ops,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_type {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub groups: *mut *const attribute_group,
+ pub uevent: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const device,
+ arg2: *mut kobj_uevent_env,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub devnode: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const device,
+ arg2: *mut umode_t,
+ arg3: *mut kuid_t,
+ arg4: *mut kgid_t,
+ ) -> *mut ::aya_bpf::cty::c_char,
+ >,
+ pub release: ::core::option::Option,
+ pub pm: *const dev_pm_ops,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_attribute {
+ pub attr: attribute,
+ pub show: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut device_attribute,
+ arg3: *mut ::aya_bpf::cty::c_char,
+ ) -> isize,
+ >,
+ pub store: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut device_attribute,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: usize,
+ ) -> isize,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_dma_parameters {
+ pub max_segment_size: ::aya_bpf::cty::c_uint,
+ pub min_align_mask: ::aya_bpf::cty::c_uint,
+ pub segment_boundary_mask: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct msi_dev_domain {
+ pub store: xarray,
+ pub domain: *mut irq_domain,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct msi_device_data {
+ pub properties: ::aya_bpf::cty::c_ulong,
+ pub platform_data: *mut platform_msi_priv_data,
+ pub mutex: mutex,
+ pub __domains: [msi_dev_domain; 2usize],
+ pub __iter_idx: ::aya_bpf::cty::c_ulong,
+}
+pub mod device_physical_location_panel {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DEVICE_PANEL_TOP: Type = 0;
+ pub const DEVICE_PANEL_BOTTOM: Type = 1;
+ pub const DEVICE_PANEL_LEFT: Type = 2;
+ pub const DEVICE_PANEL_RIGHT: Type = 3;
+ pub const DEVICE_PANEL_FRONT: Type = 4;
+ pub const DEVICE_PANEL_BACK: Type = 5;
+ pub const DEVICE_PANEL_UNKNOWN: Type = 6;
+}
+pub mod device_physical_location_vertical_position {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DEVICE_VERT_POS_UPPER: Type = 0;
+ pub const DEVICE_VERT_POS_CENTER: Type = 1;
+ pub const DEVICE_VERT_POS_LOWER: Type = 2;
+}
+pub mod device_physical_location_horizontal_position {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DEVICE_HORI_POS_LEFT: Type = 0;
+ pub const DEVICE_HORI_POS_CENTER: Type = 1;
+ pub const DEVICE_HORI_POS_RIGHT: Type = 2;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct device_physical_location {
+ pub panel: device_physical_location_panel::Type,
+ pub vertical_position: device_physical_location_vertical_position::Type,
+ pub horizontal_position: device_physical_location_horizontal_position::Type,
+ pub dock: bool_,
+ pub lid: bool_,
+}
+pub type dma_addr_t = u64_;
+pub mod dma_data_direction {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DMA_BIDIRECTIONAL: Type = 0;
+ pub const DMA_TO_DEVICE: Type = 1;
+ pub const DMA_FROM_DEVICE: Type = 2;
+ pub const DMA_NONE: Type = 3;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct dma_map_ops {
+ pub flags: ::aya_bpf::cty::c_uint,
+ pub alloc: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: *mut dma_addr_t,
+ arg4: gfp_t,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub free: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ arg4: dma_addr_t,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ),
+ >,
+ pub alloc_pages: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: *mut dma_addr_t,
+ arg4: dma_data_direction::Type,
+ arg5: gfp_t,
+ ) -> *mut page,
+ >,
+ pub free_pages: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: *mut page,
+ arg4: dma_addr_t,
+ arg5: dma_data_direction::Type,
+ ),
+ >,
+ pub alloc_noncontiguous: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: dma_data_direction::Type,
+ arg4: gfp_t,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> *mut sg_table,
+ >,
+ pub free_noncontiguous: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: usize,
+ arg3: *mut sg_table,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub mmap: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut vm_area_struct,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ arg4: dma_addr_t,
+ arg5: usize,
+ arg6: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_sgtable: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut sg_table,
+ arg3: *mut ::aya_bpf::cty::c_void,
+ arg4: dma_addr_t,
+ arg5: usize,
+ arg6: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub map_page: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut page,
+ arg3: ::aya_bpf::cty::c_ulong,
+ arg4: usize,
+ arg5: dma_data_direction::Type,
+ arg6: ::aya_bpf::cty::c_ulong,
+ ) -> dma_addr_t,
+ >,
+ pub unmap_page: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: dma_addr_t,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ),
+ >,
+ pub map_sg: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut scatterlist,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: dma_data_direction::Type,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub unmap_sg: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut scatterlist,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: dma_data_direction::Type,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ),
+ >,
+ pub map_resource: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: phys_addr_t,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ) -> dma_addr_t,
+ >,
+ pub unmap_resource: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: dma_addr_t,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ arg5: ::aya_bpf::cty::c_ulong,
+ ),
+ >,
+ pub sync_single_for_cpu: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: dma_addr_t,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub sync_single_for_device: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: dma_addr_t,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub sync_sg_for_cpu: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut scatterlist,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub sync_sg_for_device: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut scatterlist,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub cache_sync: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ arg3: usize,
+ arg4: dma_data_direction::Type,
+ ),
+ >,
+ pub dma_supported: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut device, arg2: u64_) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_required_mask: ::core::option::Option u64_>,
+ pub max_mapping_size: ::core::option::Option usize>,
+ pub opt_mapping_size: ::core::option::Option usize>,
+ pub get_merge_boundary:
+ ::core::option::Option ::aya_bpf::cty::c_ulong>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct bus_dma_region {
+ pub cpu_start: phys_addr_t,
+ pub dma_start: dma_addr_t,
+ pub size: u64_,
+ pub offset: u64_,
+}
+pub mod dev_dma_attr {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const DEV_DMA_NOT_SUPPORTED: Type = 0;
+ pub const DEV_DMA_NON_COHERENT: Type = 1;
+ pub const DEV_DMA_COHERENT: Type = 2;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fwnode_operations {
+ pub get: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut fwnode_handle) -> *mut fwnode_handle,
+ >,
+ pub put: ::core::option::Option,
+ pub device_is_available:
+ ::core::option::Option bool_>,
+ pub device_get_match_data: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const device,
+ ) -> *const ::aya_bpf::cty::c_void,
+ >,
+ pub device_dma_supported:
+ ::core::option::Option bool_>,
+ pub device_get_dma_attr: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const fwnode_handle) -> dev_dma_attr::Type,
+ >,
+ pub property_present: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const ::aya_bpf::cty::c_char,
+ ) -> bool_,
+ >,
+ pub property_read_int_array: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const ::aya_bpf::cty::c_char,
+ arg3: ::aya_bpf::cty::c_uint,
+ arg4: *mut ::aya_bpf::cty::c_void,
+ arg5: usize,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub property_read_string_array: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const ::aya_bpf::cty::c_char,
+ arg3: *mut *const ::aya_bpf::cty::c_char,
+ arg4: usize,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub get_name: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const fwnode_handle) -> *const ::aya_bpf::cty::c_char,
+ >,
+ pub get_name_prefix: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const fwnode_handle) -> *const ::aya_bpf::cty::c_char,
+ >,
+ pub get_parent: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const fwnode_handle) -> *mut fwnode_handle,
+ >,
+ pub get_next_child_node: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *mut fwnode_handle,
+ ) -> *mut fwnode_handle,
+ >,
+ pub get_named_child_node: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const ::aya_bpf::cty::c_char,
+ ) -> *mut fwnode_handle,
+ >,
+ pub get_reference_args: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *const ::aya_bpf::cty::c_char,
+ arg3: *const ::aya_bpf::cty::c_char,
+ arg4: ::aya_bpf::cty::c_uint,
+ arg5: ::aya_bpf::cty::c_uint,
+ arg6: *mut fwnode_reference_args,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub graph_get_next_endpoint: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *mut fwnode_handle,
+ ) -> *mut fwnode_handle,
+ >,
+ pub graph_get_remote_endpoint: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *const fwnode_handle) -> *mut fwnode_handle,
+ >,
+ pub graph_get_port_parent: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut fwnode_handle) -> *mut fwnode_handle,
+ >,
+ pub graph_parse_endpoint: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: *mut fwnode_endpoint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub iomap: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut fwnode_handle,
+ arg2: ::aya_bpf::cty::c_int,
+ ) -> *mut ::aya_bpf::cty::c_void,
+ >,
+ pub irq_get: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *const fwnode_handle,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub add_links: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut fwnode_handle) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fwnode_endpoint {
+ pub port: ::aya_bpf::cty::c_uint,
+ pub id: ::aya_bpf::cty::c_uint,
+ pub local_fwnode: *const fwnode_handle,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct fwnode_reference_args {
+ pub fwnode: *mut fwnode_handle,
+ pub nargs: ::aya_bpf::cty::c_uint,
+ pub args: [u64_; 8usize],
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_instance_cookie {
+ pub value: u64_,
+ pub ptr: *mut ::aya_bpf::cty::c_void,
+}
+pub type irq_flow_handler_t = ::core::option::Option;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_common_data {
+ pub state_use_accessors: ::aya_bpf::cty::c_uint,
+ pub node: ::aya_bpf::cty::c_uint,
+ pub handler_data: *mut ::aya_bpf::cty::c_void,
+ pub msi_desc: *mut msi_desc,
+ pub affinity: cpumask_var_t,
+ pub effective_affinity: cpumask_var_t,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_data {
+ pub mask: u32_,
+ pub irq: ::aya_bpf::cty::c_uint,
+ pub hwirq: ::aya_bpf::cty::c_ulong,
+ pub common: *mut irq_common_data,
+ pub chip: *mut irq_chip,
+ pub domain: *mut irq_domain,
+ pub parent_data: *mut irq_data,
+ pub chip_data: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct irq_desc {
+ pub irq_common_data: irq_common_data,
+ pub irq_data: irq_data,
+ pub kstat_irqs: *mut ::aya_bpf::cty::c_uint,
+ pub handle_irq: irq_flow_handler_t,
+ pub action: *mut irqaction,
+ pub status_use_accessors: ::aya_bpf::cty::c_uint,
+ pub core_internal_state__do_not_mess_with_it: ::aya_bpf::cty::c_uint,
+ pub depth: ::aya_bpf::cty::c_uint,
+ pub wake_depth: ::aya_bpf::cty::c_uint,
+ pub tot_count: ::aya_bpf::cty::c_uint,
+ pub irq_count: ::aya_bpf::cty::c_uint,
+ pub last_unhandled: ::aya_bpf::cty::c_ulong,
+ pub irqs_unhandled: ::aya_bpf::cty::c_uint,
+ pub threads_handled: atomic_t,
+ pub threads_handled_last: ::aya_bpf::cty::c_int,
+ pub lock: raw_spinlock_t,
+ pub percpu_enabled: *mut cpumask,
+ pub percpu_affinity: *const cpumask,
+ pub affinity_hint: *const cpumask,
+ pub affinity_notify: *mut irq_affinity_notify,
+ pub pending_mask: cpumask_var_t,
+ pub threads_oneshot: ::aya_bpf::cty::c_ulong,
+ pub threads_active: atomic_t,
+ pub wait_for_threads: wait_queue_head_t,
+ pub nr_actions: ::aya_bpf::cty::c_uint,
+ pub no_suspend_depth: ::aya_bpf::cty::c_uint,
+ pub cond_suspend_depth: ::aya_bpf::cty::c_uint,
+ pub force_resume_depth: ::aya_bpf::cty::c_uint,
+ pub dir: *mut proc_dir_entry,
+ pub rcu: callback_head,
+ pub kobj: kobject,
+ pub request_mutex: mutex,
+ pub parent_irq: ::aya_bpf::cty::c_int,
+ pub owner: *mut module,
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 8usize]>,
+}
+impl irq_desc {
+ #[inline]
+ pub fn new_bitfield_1() -> __BindgenBitfieldUnit<[u8; 8usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 8usize]> = Default::default();
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct x86_msi_addr_lo {
+ pub __bindgen_anon_1: x86_msi_addr_lo__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union x86_msi_addr_lo__bindgen_ty_1 {
+ pub __bindgen_anon_1: x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_1,
+ pub __bindgen_anon_2: x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_2,
+}
+#[repr(C)]
+#[repr(align(4))]
+#[derive(Debug, Copy, Clone)]
+pub struct x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_1 {
+ pub _bitfield_align_1: [u16; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>,
+}
+impl x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_1 {
+ #[inline]
+ pub fn reserved_0(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 2u8) as u32) }
+ }
+ #[inline]
+ pub fn set_reserved_0(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 2u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dest_mode_logical(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dest_mode_logical(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn redirect_hint(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_redirect_hint(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn reserved_1(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_reserved_1(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn virt_destid_8_14(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(5usize, 7u8) as u32) }
+ }
+ #[inline]
+ pub fn set_virt_destid_8_14(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(5usize, 7u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn destid_0_7(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(12usize, 8u8) as u32) }
+ }
+ #[inline]
+ pub fn set_destid_0_7(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(12usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn base_address(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(20usize, 12u8) as u32) }
+ }
+ #[inline]
+ pub fn set_base_address(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(20usize, 12u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ reserved_0: u32_,
+ dest_mode_logical: u32_,
+ redirect_hint: u32_,
+ reserved_1: u32_,
+ virt_destid_8_14: u32_,
+ destid_0_7: u32_,
+ base_address: u32_,
+ ) -> __BindgenBitfieldUnit<[u8; 4usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 2u8, {
+ let reserved_0: u32 = unsafe { ::core::mem::transmute(reserved_0) };
+ reserved_0 as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let dest_mode_logical: u32 = unsafe { ::core::mem::transmute(dest_mode_logical) };
+ dest_mode_logical as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let redirect_hint: u32 = unsafe { ::core::mem::transmute(redirect_hint) };
+ redirect_hint as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let reserved_1: u32 = unsafe { ::core::mem::transmute(reserved_1) };
+ reserved_1 as u64
+ });
+ __bindgen_bitfield_unit.set(5usize, 7u8, {
+ let virt_destid_8_14: u32 = unsafe { ::core::mem::transmute(virt_destid_8_14) };
+ virt_destid_8_14 as u64
+ });
+ __bindgen_bitfield_unit.set(12usize, 8u8, {
+ let destid_0_7: u32 = unsafe { ::core::mem::transmute(destid_0_7) };
+ destid_0_7 as u64
+ });
+ __bindgen_bitfield_unit.set(20usize, 12u8, {
+ let base_address: u32 = unsafe { ::core::mem::transmute(base_address) };
+ base_address as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[repr(align(4))]
+#[derive(Debug, Copy, Clone)]
+pub struct x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_2 {
+ pub _bitfield_align_1: [u16; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>,
+}
+impl x86_msi_addr_lo__bindgen_ty_1__bindgen_ty_2 {
+ #[inline]
+ pub fn dmar_reserved_0(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 2u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_reserved_0(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 2u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dmar_index_15(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_index_15(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dmar_subhandle_valid(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_subhandle_valid(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(3usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dmar_format(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_format(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dmar_index_0_14(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(5usize, 15u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_index_0_14(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(5usize, 15u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dmar_base_address(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(20usize, 12u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dmar_base_address(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(20usize, 12u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ dmar_reserved_0: u32_,
+ dmar_index_15: u32_,
+ dmar_subhandle_valid: u32_,
+ dmar_format: u32_,
+ dmar_index_0_14: u32_,
+ dmar_base_address: u32_,
+ ) -> __BindgenBitfieldUnit<[u8; 4usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 2u8, {
+ let dmar_reserved_0: u32 = unsafe { ::core::mem::transmute(dmar_reserved_0) };
+ dmar_reserved_0 as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let dmar_index_15: u32 = unsafe { ::core::mem::transmute(dmar_index_15) };
+ dmar_index_15 as u64
+ });
+ __bindgen_bitfield_unit.set(3usize, 1u8, {
+ let dmar_subhandle_valid: u32 = unsafe { ::core::mem::transmute(dmar_subhandle_valid) };
+ dmar_subhandle_valid as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 1u8, {
+ let dmar_format: u32 = unsafe { ::core::mem::transmute(dmar_format) };
+ dmar_format as u64
+ });
+ __bindgen_bitfield_unit.set(5usize, 15u8, {
+ let dmar_index_0_14: u32 = unsafe { ::core::mem::transmute(dmar_index_0_14) };
+ dmar_index_0_14 as u64
+ });
+ __bindgen_bitfield_unit.set(20usize, 12u8, {
+ let dmar_base_address: u32 = unsafe { ::core::mem::transmute(dmar_base_address) };
+ dmar_base_address as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub type arch_msi_msg_addr_lo_t = x86_msi_addr_lo;
+#[repr(C)]
+#[repr(align(4))]
+#[derive(Debug, Copy, Clone)]
+pub struct x86_msi_addr_hi {
+ pub _bitfield_align_1: [u32; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>,
+}
+impl x86_msi_addr_hi {
+ #[inline]
+ pub fn reserved(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 8u8) as u32) }
+ }
+ #[inline]
+ pub fn set_reserved(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn destid_8_31(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 24u8) as u32) }
+ }
+ #[inline]
+ pub fn set_destid_8_31(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 24u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ reserved: u32_,
+ destid_8_31: u32_,
+ ) -> __BindgenBitfieldUnit<[u8; 4usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 8u8, {
+ let reserved: u32 = unsafe { ::core::mem::transmute(reserved) };
+ reserved as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 24u8, {
+ let destid_8_31: u32 = unsafe { ::core::mem::transmute(destid_8_31) };
+ destid_8_31 as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub type arch_msi_msg_addr_hi_t = x86_msi_addr_hi;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct x86_msi_data {
+ pub __bindgen_anon_1: x86_msi_data__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union x86_msi_data__bindgen_ty_1 {
+ pub __bindgen_anon_1: x86_msi_data__bindgen_ty_1__bindgen_ty_1,
+ pub dmar_subhandle: u32_,
+}
+#[repr(C)]
+#[repr(align(4))]
+#[derive(Debug, Copy, Clone)]
+pub struct x86_msi_data__bindgen_ty_1__bindgen_ty_1 {
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
+ pub __bindgen_padding_0: u16,
+}
+impl x86_msi_data__bindgen_ty_1__bindgen_ty_1 {
+ #[inline]
+ pub fn vector(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 8u8) as u32) }
+ }
+ #[inline]
+ pub fn set_vector(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 8u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn delivery_mode(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 3u8) as u32) }
+ }
+ #[inline]
+ pub fn set_delivery_mode(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn dest_mode_logical(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(11usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_dest_mode_logical(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(11usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn reserved(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(12usize, 2u8) as u32) }
+ }
+ #[inline]
+ pub fn set_reserved(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(12usize, 2u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn active_low(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(14usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_active_low(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(14usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_level(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(15usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_level(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(15usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ vector: u32_,
+ delivery_mode: u32_,
+ dest_mode_logical: u32_,
+ reserved: u32_,
+ active_low: u32_,
+ is_level: u32_,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 8u8, {
+ let vector: u32 = unsafe { ::core::mem::transmute(vector) };
+ vector as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 3u8, {
+ let delivery_mode: u32 = unsafe { ::core::mem::transmute(delivery_mode) };
+ delivery_mode as u64
+ });
+ __bindgen_bitfield_unit.set(11usize, 1u8, {
+ let dest_mode_logical: u32 = unsafe { ::core::mem::transmute(dest_mode_logical) };
+ dest_mode_logical as u64
+ });
+ __bindgen_bitfield_unit.set(12usize, 2u8, {
+ let reserved: u32 = unsafe { ::core::mem::transmute(reserved) };
+ reserved as u64
+ });
+ __bindgen_bitfield_unit.set(14usize, 1u8, {
+ let active_low: u32 = unsafe { ::core::mem::transmute(active_low) };
+ active_low as u64
+ });
+ __bindgen_bitfield_unit.set(15usize, 1u8, {
+ let is_level: u32 = unsafe { ::core::mem::transmute(is_level) };
+ is_level as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+pub type arch_msi_msg_data_t = x86_msi_data;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct msi_msg {
+ pub __bindgen_anon_1: msi_msg__bindgen_ty_1,
+ pub __bindgen_anon_2: msi_msg__bindgen_ty_2,
+ pub __bindgen_anon_3: msi_msg__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_msg__bindgen_ty_1 {
+ pub address_lo: u32_,
+ pub arch_addr_lo: arch_msi_msg_addr_lo_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_msg__bindgen_ty_2 {
+ pub address_hi: u32_,
+ pub arch_addr_hi: arch_msi_msg_addr_hi_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_msg__bindgen_ty_3 {
+ pub data: u32_,
+ pub arch_data: arch_msi_msg_data_t,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct pci_msi_desc {
+ pub __bindgen_anon_1: pci_msi_desc__bindgen_ty_1,
+ pub msi_attrib: pci_msi_desc__bindgen_ty_2,
+ pub __bindgen_anon_2: pci_msi_desc__bindgen_ty_3,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pci_msi_desc__bindgen_ty_1 {
+ pub msi_mask: u32_,
+ pub msix_ctrl: u32_,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct pci_msi_desc__bindgen_ty_2 {
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>,
+ pub default_irq: ::aya_bpf::cty::c_uint,
+}
+impl pci_msi_desc__bindgen_ty_2 {
+ #[inline]
+ pub fn is_msix(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_msix(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn multiple(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 3u8) as u8) }
+ }
+ #[inline]
+ pub fn set_multiple(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn multi_cap(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(4usize, 3u8) as u8) }
+ }
+ #[inline]
+ pub fn set_multi_cap(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(4usize, 3u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn can_mask(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_can_mask(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(7usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_64(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(8usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_64(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(8usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn is_virtual(&self) -> u8_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(9usize, 1u8) as u8) }
+ }
+ #[inline]
+ pub fn set_is_virtual(&mut self, val: u8_) {
+ unsafe {
+ let val: u8 = ::core::mem::transmute(val);
+ self._bitfield_1.set(9usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ is_msix: u8_,
+ multiple: u8_,
+ multi_cap: u8_,
+ can_mask: u8_,
+ is_64: u8_,
+ is_virtual: u8_,
+ ) -> __BindgenBitfieldUnit<[u8; 2usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let is_msix: u8 = unsafe { ::core::mem::transmute(is_msix) };
+ is_msix as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 3u8, {
+ let multiple: u8 = unsafe { ::core::mem::transmute(multiple) };
+ multiple as u64
+ });
+ __bindgen_bitfield_unit.set(4usize, 3u8, {
+ let multi_cap: u8 = unsafe { ::core::mem::transmute(multi_cap) };
+ multi_cap as u64
+ });
+ __bindgen_bitfield_unit.set(7usize, 1u8, {
+ let can_mask: u8 = unsafe { ::core::mem::transmute(can_mask) };
+ can_mask as u64
+ });
+ __bindgen_bitfield_unit.set(8usize, 1u8, {
+ let is_64: u8 = unsafe { ::core::mem::transmute(is_64) };
+ is_64 as u64
+ });
+ __bindgen_bitfield_unit.set(9usize, 1u8, {
+ let is_virtual: u8 = unsafe { ::core::mem::transmute(is_virtual) };
+ is_virtual as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pci_msi_desc__bindgen_ty_3 {
+ pub mask_pos: u8_,
+ pub mask_base: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_domain_cookie {
+ pub value: u64_,
+ pub ptr: *mut ::aya_bpf::cty::c_void,
+ pub iobase: *mut ::aya_bpf::cty::c_void,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct msi_desc_data {
+ pub dcookie: msi_domain_cookie,
+ pub icookie: msi_instance_cookie,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct msi_desc {
+ pub irq: ::aya_bpf::cty::c_uint,
+ pub nvec_used: ::aya_bpf::cty::c_uint,
+ pub dev: *mut device,
+ pub msg: msi_msg,
+ pub affinity: *mut irq_affinity_desc,
+ pub iommu_cookie: *const ::aya_bpf::cty::c_void,
+ pub sysfs_attrs: *mut device_attribute,
+ pub write_msi_msg: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut msi_desc, arg2: *mut ::aya_bpf::cty::c_void),
+ >,
+ pub write_msi_msg_data: *mut ::aya_bpf::cty::c_void,
+ pub msi_index: u16_,
+ pub __bindgen_anon_1: msi_desc__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union msi_desc__bindgen_ty_1 {
+ pub pci: pci_msi_desc,
+ pub data: msi_desc_data,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_chip {
+ pub name: *const ::aya_bpf::cty::c_char,
+ pub irq_startup:
+ ::core::option::Option ::aya_bpf::cty::c_uint>,
+ pub irq_shutdown: ::core::option::Option,
+ pub irq_enable: ::core::option::Option,
+ pub irq_disable: ::core::option::Option,
+ pub irq_ack: ::core::option::Option,
+ pub irq_mask: ::core::option::Option,
+ pub irq_mask_ack: ::core::option::Option,
+ pub irq_unmask: ::core::option::Option,
+ pub irq_eoi: ::core::option::Option,
+ pub irq_set_affinity: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: *const cpumask,
+ arg3: bool_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub irq_retrigger:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub irq_set_type: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub irq_set_wake: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub irq_bus_lock: ::core::option::Option,
+ pub irq_bus_sync_unlock: ::core::option::Option,
+ pub irq_suspend: ::core::option::Option,
+ pub irq_resume: ::core::option::Option,
+ pub irq_pm_shutdown: ::core::option::Option,
+ pub irq_calc_mask: ::core::option::Option,
+ pub irq_print_chip:
+ ::core::option::Option,
+ pub irq_request_resources:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub irq_release_resources: ::core::option::Option,
+ pub irq_compose_msi_msg:
+ ::core::option::Option,
+ pub irq_write_msi_msg:
+ ::core::option::Option,
+ pub irq_get_irqchip_state: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: irqchip_irq_state::Type,
+ arg3: *mut bool_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub irq_set_irqchip_state: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: irqchip_irq_state::Type,
+ arg3: bool_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub irq_set_vcpu_affinity: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_data,
+ arg2: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub ipi_send_single: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut irq_data, arg2: ::aya_bpf::cty::c_uint),
+ >,
+ pub ipi_send_mask:
+ ::core::option::Option,
+ pub irq_nmi_setup:
+ ::core::option::Option ::aya_bpf::cty::c_int>,
+ pub irq_nmi_teardown: ::core::option::Option,
+ pub flags: ::aya_bpf::cty::c_ulong,
+}
+pub mod irq_alloc_type {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const X86_IRQ_ALLOC_TYPE_IOAPIC: Type = 1;
+ pub const X86_IRQ_ALLOC_TYPE_HPET: Type = 2;
+ pub const X86_IRQ_ALLOC_TYPE_PCI_MSI: Type = 3;
+ pub const X86_IRQ_ALLOC_TYPE_PCI_MSIX: Type = 4;
+ pub const X86_IRQ_ALLOC_TYPE_DMAR: Type = 5;
+ pub const X86_IRQ_ALLOC_TYPE_AMDVI: Type = 6;
+ pub const X86_IRQ_ALLOC_TYPE_UV: Type = 7;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ioapic_alloc_info {
+ pub pin: ::aya_bpf::cty::c_int,
+ pub node: ::aya_bpf::cty::c_int,
+ pub _bitfield_align_1: [u8; 0],
+ pub _bitfield_1: __BindgenBitfieldUnit<[u8; 1usize]>,
+ pub __bindgen_padding_0: [u8; 3usize],
+}
+impl ioapic_alloc_info {
+ #[inline]
+ pub fn is_level(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_is_level(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(0usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn active_low(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_active_low(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(1usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn valid(&self) -> u32_ {
+ unsafe { ::core::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u32) }
+ }
+ #[inline]
+ pub fn set_valid(&mut self, val: u32_) {
+ unsafe {
+ let val: u32 = ::core::mem::transmute(val);
+ self._bitfield_1.set(2usize, 1u8, val as u64)
+ }
+ }
+ #[inline]
+ pub fn new_bitfield_1(
+ is_level: u32_,
+ active_low: u32_,
+ valid: u32_,
+ ) -> __BindgenBitfieldUnit<[u8; 1usize]> {
+ let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 1usize]> = Default::default();
+ __bindgen_bitfield_unit.set(0usize, 1u8, {
+ let is_level: u32 = unsafe { ::core::mem::transmute(is_level) };
+ is_level as u64
+ });
+ __bindgen_bitfield_unit.set(1usize, 1u8, {
+ let active_low: u32 = unsafe { ::core::mem::transmute(active_low) };
+ active_low as u64
+ });
+ __bindgen_bitfield_unit.set(2usize, 1u8, {
+ let valid: u32 = unsafe { ::core::mem::transmute(valid) };
+ valid as u64
+ });
+ __bindgen_bitfield_unit
+ }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct uv_alloc_info {
+ pub limit: ::aya_bpf::cty::c_int,
+ pub blade: ::aya_bpf::cty::c_int,
+ pub offset: ::aya_bpf::cty::c_ulong,
+ pub name: *mut ::aya_bpf::cty::c_char,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct irq_alloc_info {
+ pub type_: irq_alloc_type::Type,
+ pub flags: u32_,
+ pub devid: u32_,
+ pub hwirq: irq_hw_number_t,
+ pub mask: *const cpumask,
+ pub desc: *mut msi_desc,
+ pub data: *mut ::aya_bpf::cty::c_void,
+ pub __bindgen_anon_1: irq_alloc_info__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union irq_alloc_info__bindgen_ty_1 {
+ pub ioapic: ioapic_alloc_info,
+ pub uv: uv_alloc_info,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_chip_regs {
+ pub enable: ::aya_bpf::cty::c_ulong,
+ pub disable: ::aya_bpf::cty::c_ulong,
+ pub mask: ::aya_bpf::cty::c_ulong,
+ pub ack: ::aya_bpf::cty::c_ulong,
+ pub eoi: ::aya_bpf::cty::c_ulong,
+ pub type_: ::aya_bpf::cty::c_ulong,
+ pub polarity: ::aya_bpf::cty::c_ulong,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_chip_type {
+ pub chip: irq_chip,
+ pub regs: irq_chip_regs,
+ pub handler: irq_flow_handler_t,
+ pub type_: u32_,
+ pub mask_cache_priv: u32_,
+ pub mask_cache: *mut u32_,
+}
+#[repr(C)]
+pub struct irq_chip_generic {
+ pub lock: raw_spinlock_t,
+ pub reg_base: *mut ::aya_bpf::cty::c_void,
+ pub reg_readl:
+ ::core::option::Option u32_>,
+ pub reg_writel:
+ ::core::option::Option,
+ pub suspend: ::core::option::Option,
+ pub resume: ::core::option::Option,
+ pub irq_base: ::aya_bpf::cty::c_uint,
+ pub irq_cnt: ::aya_bpf::cty::c_uint,
+ pub mask_cache: u32_,
+ pub type_cache: u32_,
+ pub polarity_cache: u32_,
+ pub wake_enabled: u32_,
+ pub wake_active: u32_,
+ pub num_ct: ::aya_bpf::cty::c_uint,
+ pub private: *mut ::aya_bpf::cty::c_void,
+ pub installed: ::aya_bpf::cty::c_ulong,
+ pub unused: ::aya_bpf::cty::c_ulong,
+ pub domain: *mut irq_domain,
+ pub list: list_head,
+ pub chip_types: __IncompleteArrayField,
+}
+pub mod irq_gc_flags {
+ pub type Type = ::aya_bpf::cty::c_uint;
+ pub const IRQ_GC_INIT_MASK_CACHE: Type = 1;
+ pub const IRQ_GC_INIT_NESTED_LOCK: Type = 2;
+ pub const IRQ_GC_MASK_CACHE_PER_TYPE: Type = 4;
+ pub const IRQ_GC_NO_MASK: Type = 8;
+ pub const IRQ_GC_BE_IO: Type = 16;
+}
+#[repr(C)]
+#[derive(Debug)]
+pub struct irq_domain_chip_generic {
+ pub irqs_per_chip: ::aya_bpf::cty::c_uint,
+ pub num_chips: ::aya_bpf::cty::c_uint,
+ pub irq_flags_to_clear: ::aya_bpf::cty::c_uint,
+ pub irq_flags_to_set: ::aya_bpf::cty::c_uint,
+ pub gc_flags: irq_gc_flags::Type,
+ pub gc: __IncompleteArrayField<*mut irq_chip_generic>,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct property {
+ pub name: *mut ::aya_bpf::cty::c_char,
+ pub length: ::aya_bpf::cty::c_int,
+ pub value: *mut ::aya_bpf::cty::c_void,
+ pub next: *mut property,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_fwspec {
+ pub fwnode: *mut fwnode_handle,
+ pub param_count: ::aya_bpf::cty::c_int,
+ pub param: [u32_; 16usize],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct irq_domain_ops {
+ pub match_: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut device_node,
+ arg3: irq_domain_bus_token::Type,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub select: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut irq_fwspec,
+ arg3: irq_domain_bus_token::Type,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub map: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: irq_hw_number_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub unmap: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut irq_domain, arg2: ::aya_bpf::cty::c_uint),
+ >,
+ pub xlate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut device_node,
+ arg3: *const u32_,
+ arg4: ::aya_bpf::cty::c_uint,
+ arg5: *mut ::aya_bpf::cty::c_ulong,
+ arg6: *mut ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub alloc: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: ::aya_bpf::cty::c_uint,
+ arg4: *mut ::aya_bpf::cty::c_void,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub free: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: ::aya_bpf::cty::c_uint,
+ arg3: ::aya_bpf::cty::c_uint,
+ ),
+ >,
+ pub activate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut irq_data,
+ arg3: bool_,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub deactivate:
+ ::core::option::Option,
+ pub translate: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut irq_fwspec,
+ arg3: *mut ::aya_bpf::cty::c_ulong,
+ arg4: *mut ::aya_bpf::cty::c_uint,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct msi_parent_ops {
+ pub supported_flags: u32_,
+ pub prefix: *const ::aya_bpf::cty::c_char,
+ pub init_dev_msi_info: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut device,
+ arg2: *mut irq_domain,
+ arg3: *mut irq_domain,
+ arg4: *mut msi_domain_info,
+ ) -> bool_,
+ >,
+}
+pub type msi_alloc_info_t = irq_alloc_info;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct msi_domain_ops {
+ pub get_hwirq: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut msi_domain_info,
+ arg2: *mut msi_alloc_info_t,
+ ) -> irq_hw_number_t,
+ >,
+ pub msi_init: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut msi_domain_info,
+ arg3: ::aya_bpf::cty::c_uint,
+ arg4: irq_hw_number_t,
+ arg5: *mut msi_alloc_info_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub msi_free: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut msi_domain_info,
+ arg3: ::aya_bpf::cty::c_uint,
+ ),
+ >,
+ pub msi_prepare: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut device,
+ arg3: ::aya_bpf::cty::c_int,
+ arg4: *mut msi_alloc_info_t,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub prepare_desc: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut msi_alloc_info_t,
+ arg3: *mut msi_desc,
+ ),
+ >,
+ pub set_desc: ::core::option::Option<
+ unsafe extern "C" fn(arg1: *mut msi_alloc_info_t, arg2: *mut msi_desc),
+ >,
+ pub domain_alloc_irqs: ::core::option::Option<
+ unsafe extern "C" fn(
+ arg1: *mut irq_domain,
+ arg2: *mut device,
+ arg3: ::aya_bpf::cty::c_int,
+ ) -> ::aya_bpf::cty::c_int,
+ >,
+ pub domain_free_irqs:
+ ::core::option::Option,
+ pub msi_post_free:
+ ::core::option::Option