Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions os/StarryOS/kernel/src/ebpf/bpf_insn.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
pub const BPF_LD: u8 = 0x00;
pub const BPF_LDX: u8 = 0x01;
pub const BPF_ST: u8 = 0x02;
pub const BPF_STX: u8 = 0x03;
pub const BPF_ALU: u8 = 0x04;
pub const BPF_JMP: u8 = 0x05;
pub const BPF_JMP32: u8 = 0x06;
pub const BPF_ALU64: u8 = 0x07;

pub const BPF_W: u8 = 0x00;
pub const BPF_H: u8 = 0x08;
pub const BPF_B: u8 = 0x10;
pub const BPF_DW: u8 = 0x18;

pub const BPF_IMM: u8 = 0x00;
pub const BPF_MEM: u8 = 0x60;

pub const BPF_ADD: u8 = 0x00;
pub const BPF_SUB: u8 = 0x10;
pub const BPF_MUL: u8 = 0x20;
pub const BPF_DIV: u8 = 0x30;
pub const BPF_OR: u8 = 0x40;
pub const BPF_AND: u8 = 0x50;
pub const BPF_LSH: u8 = 0x60;
pub const BPF_RSH: u8 = 0x70;
pub const BPF_NEG: u8 = 0x80;
pub const BPF_MOD: u8 = 0x90;
pub const BPF_XOR: u8 = 0xa0;
pub const BPF_MOV: u8 = 0xb0;
pub const BPF_ARSH: u8 = 0xc0;
pub const BPF_END: u8 = 0xd0;

pub const BPF_JA: u8 = 0x00;
pub const BPF_EXIT: u8 = 0x90;
pub const BPF_JEQ: u8 = 0x10;
pub const BPF_JGT: u8 = 0x20;
pub const BPF_JGE: u8 = 0x30;
pub const BPF_JSET: u8 = 0x40;
pub const BPF_JNE: u8 = 0x50;
pub const BPF_JSGT: u8 = 0x60;
pub const BPF_JSGE: u8 = 0x70;
pub const BPF_JLT: u8 = 0xa0;
pub const BPF_JLE: u8 = 0xb0;
pub const BPF_JSLT: u8 = 0xc0;
pub const BPF_JSLE: u8 = 0xd0;

pub const BPF_X: u8 = 0x08;

#[repr(C)]
#[derive(Clone, Copy, Debug, Default)]
pub struct BpfInsn {
pub code: u8,
pub dst_src_reg: u8,
pub off: i16,
pub imm: i32,
}

impl BpfInsn {
pub fn dst_reg(&self) -> u8 {
self.dst_src_reg & 0xf
}

pub fn src_reg(&self) -> u8 {
(self.dst_src_reg >> 4) & 0xf
}

pub fn class(&self) -> u8 {
self.code & 0x07
}

pub fn size(&self) -> u8 {
self.code & 0x18
}

pub fn mode(&self) -> u8 {
self.code & 0xe0
}

pub fn alu_op(&self) -> u8 {
self.code & 0xf0
}

pub fn is_ld_dw_imm(&self) -> bool {
self.code == (BPF_LD | BPF_IMM | BPF_DW)
}
}
24 changes: 24 additions & 0 deletions os/StarryOS/kernel/src/ebpf/ebpf_jit/jit_aarch64.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use super::{HelperFn, JitBackend, JitBuffer, bpf_insn::BpfInsn};

pub(crate) struct Aarch64Backend;

impl JitBackend for Aarch64Backend {
fn emit_prologue(_buf: &mut JitBuffer) -> usize {
0
}
fn emit_epilogue(_buf: &mut JitBuffer) {}
fn emit_alu(_buf: &mut JitBuffer, _insn: &BpfInsn, _is_64: bool) {}
fn emit_jmp(
_buf: &mut JitBuffer,
_insn: &BpfInsn,
_offsets: &[usize],
_pc: usize,
_is_64: bool,
) {
}
fn emit_st(_buf: &mut JitBuffer, _insn: &BpfInsn) {}
fn emit_stx(_buf: &mut JitBuffer, _insn: &BpfInsn) {}
fn emit_ldx(_buf: &mut JitBuffer, _insn: &BpfInsn) {}
fn emit_ld_imm64(_buf: &mut JitBuffer, _insn: &BpfInsn, _next_imm: i32) {}
fn emit_call(_buf: &mut JitBuffer, _helper_fn: HelperFn) {}
}
Loading