//! ```cargo
//! [dependencies]
//! aya = { path = "../../../../aya" }
//! ```

use aya::{
    Bpf, BpfLoader,
    programs::{Extension, ProgramFd, Xdp, XdpFlags},
};
use std::convert::TryInto;

fn main() {
    println!("Loading Root XDP program");
    let mut bpf = Bpf::load_file("main.o").unwrap();
    let pass: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
    pass.load().unwrap();
    pass.attach("lo", XdpFlags::default()).unwrap();

    println!("Loading Extension Program");
    let mut bpf = BpfLoader::new().extension("drop").load_file("ext.o").unwrap();
    let drop_: &mut Extension = bpf.program_mut("drop").unwrap().try_into().unwrap();
    drop_.load(pass.fd().unwrap(), "xdp_pass").unwrap();
    println!("Success...");
}