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 <vadorovsky@gmail.com>
Change unix-specific executor to generic one
to enable xtask working on Windows and eventually
be able to cross-compile on Windows.
Fixes#76.
Signed-off-by: Dmitry Savintsev <dsavints@gmail.com>
This adds `perf_event` program type as a template entry.
The new entry comes with a skeleton example which register
scheduled events on each CPU at 1 HZ, triggered by the kernel
(based on clock ticks). The corresponding BPF logic logs each
event, and can identify kernel tasks from userland processes.
Fix template so that the generated code would not have any
clippy issues (per `cargo +nightly clippy`).
Add template conditionals on the program_type to avoid
a warning about unused 'opt' variable.
Fixes#66.
The default log level of env_logger is `error`. We are using `info!` in
the template, so let's suggest running the example with `RUST_LOG=info`.
Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
An error during `BpfLogger` initialization most likely means that
`ayalog-ebpf` is not used in the eBPF crate.
Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
Users should opt in into `unsafe` when performing particular unsafe
actions (accesing raw pointers, interacting with maps etc.), but
assuming that the whole eBPF program code is unsafe is quite an
exaggeration.
Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
That new context type exposes `data` and `data_end` fields for direct
access to the packet payload.
Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>