Implements SK_REUSEPORT support to enable programmable socket
selection within SO_REUSEPORT groups.
- #[sk_reuseport] macro for eBPF programs
- SkReuseport program type with load/attach methods
- SkReuseportContext with sk_reuseport_md field access
- ReusePortSockArray map for socket management
- SK_PASS/SK_DROP constants for return values
- Documentation and usage examples
- Some integration tests
This allows load balancing decisions to be made programmatically
with SO_REUSEPORT set.
Fixes: #215
In practice this will forbid unused dependencies because we run clippy
with `--deny warnings`.
Workspace lints is a nice place to ratchet up lints through the codebase
all at once and consistently.
Change FromRawTracepointArgs::arg to return T rather than *const T which
seems to have been returning a dangling pointer.
Arguably this is not strictly necessary; edition 2024 seems to be
focused on increased strictness around unsafe code which doesn't unlock
new functionality for our users. That said, this work revealed an
apparent bug (see above) that we wouldn't otherwise catch due to
allow-by-default lints.
Added logic in expand function in both kprobe.rs and uprobe.rs for valid
macros. Now, kprobe & uprobe proc macros only accept ProbeContext, and
kretprobe & uretprobe only accept RetProbeContext.
Ref: #700