This eBPF program does work, get loaded properly:
#![no_std]
#![no_main]
use aya_ebpf::{
bindings::xdp_action,
macros::{cgroup_skb, map, xdp},
maps::{HashMap, PerfEventArray},
programs::{SkBuffContext, XdpContext}
};
use aya_log_ebpf::info;
//(1)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
// info!(&ctx, "received a packet");
xdp_action::XDP_PASS
}
#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! {
// loop {}
unsafe { core::hint::unreachable_unchecked() }
}
But this one no longer does:
//(2)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
info!(&ctx, "received a packet"); // (!!)
xdp_action::XDP_PASS
}
// ..........
neither does this:
// (3)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
match try_t1(ctx) {
Ok(ret) => ret,
Err(_) => xdp_action::XDP_ABORTED,
}
}
#[inline(always)]
fn try_t1(ctx: XdpContext) -> Result<u32, u32> {
info!(&ctx, "received a packet");
Ok(xdp_action::XDP_PASS)
}
// ..........
An error:
Error: Failed to load XDP program: the BPF_PROG_LOAD syscall failed. Verifier output: last insn is not an exit or jmp
What's the matter?