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 change is 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