bpf-script 0.5.4

A small scripting language and compiler for creating eBPF programs at runtime.
Documentation
use bpf_script::compiler::Compiler;
use bpf_script::types::{Field, TypeDatabase};

fn main() {
    let prog = r#"
            fn(vec: &iovec)
              vec_copy: iovec = 0
              vec_copy.iov_base = vec.iov_base
              vec_copy.iov_len = vec.iov_len
              return 50
        "#;

    let mut database = TypeDatabase::default();

    let u64id = database
        .add_integer(Some("__u64"), 8, false)
        .expect("Failed to add type.");

    let iov_base = Field {
        offset: 0,
        type_id: u64id,
    };

    let iov_len = Field {
        offset: 64,
        type_id: u64id,
    };

    database
        .add_struct(
            Some("iovec"),
            &[("iov_base", iov_base), ("iov_len", iov_len)],
        )
        .expect("Failed to add type.");
    let mut compiler = Compiler::create(&database);
    compiler.compile(prog).unwrap();

    for ins in compiler.get_instructions() {
        println!("{}", ins);
    }
}