-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
All helper functions and context methods are returning `c_long` as an error. Before this change, aya-template and book examples were adjusting the error type in `try_*` functionns return type of the program. For example, for XDP programs programs, which return `u32`, the type returned by `try_*` functions, was `Result<u32, u32>`. This approach is forcing people to write boilerplate code for casting errors from `c_long` to the expected type, like: ```rust MY_MAP.insert(k, v, 0).map_err(|_| 1u32)?; ``` This change solves that problem by: * Using `Result<i32, c_long>` as a type for `try_*` functions for SKB-based programs and then replacing errors with `TC_ACT_SHOT` or `0` once in the main program function. * Using `Result<u32, c_long>` as a type for `try_*` functions in `try_*` funnctions for XDP programs and then replacing errors with `XDP_ABORT`. * Using either `Result<u32, c_long>` or `Result<i32, c_long>` as types in `try_*` functions for all other program types where the return value matters (LSM, sysctl etc.) and replacing the error either with `0` or `1` (depending on which number means "block the action" for particular type of program). * Using `Result<(), c_long` for all other program types where the return value doesn't matter (kprobe, uprobe etc.). So errors can be handled without casting, like: ```rust MY_MAP.insert(k, v, 0)?; ``` The other changes included in this commit are: * Using `core::ffi::c_long` instead of `aya_cty::c_long`, like book examples (they have to be changed too). * Fixing return values of cgroup_skb, sockopt and sysctl programs (1 means "allow", 0 means "deny"). Signed-off-by: Michal Rostecki <[email protected]>
- Loading branch information
1 parent
4ce0e28
commit 84cff20
Showing
1 changed file
with
69 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters