|
|
|
@ -1,24 +1,25 @@
|
|
|
|
|
use aya::{EbpfLoader, maps::Array, programs::UProbe};
|
|
|
|
|
use std::ffi::c_int;
|
|
|
|
|
|
|
|
|
|
const PEEK_INDEX: u32 = 0;
|
|
|
|
|
const POP_INDEX: u32 = 1;
|
|
|
|
|
|
|
|
|
|
#[unsafe(no_mangle)]
|
|
|
|
|
#[inline(never)]
|
|
|
|
|
pub extern "C" fn trigger_push(arg: i64) {
|
|
|
|
|
pub extern "C" fn trigger_queue_push(arg: c_int) {
|
|
|
|
|
core::hint::black_box(arg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[unsafe(no_mangle)]
|
|
|
|
|
#[inline(never)]
|
|
|
|
|
pub extern "C" fn trigger_peek() {
|
|
|
|
|
core::hint::black_box(trigger_peek);
|
|
|
|
|
pub extern "C" fn trigger_queue_peek() {
|
|
|
|
|
core::hint::black_box(trigger_queue_peek);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[unsafe(no_mangle)]
|
|
|
|
|
#[inline(never)]
|
|
|
|
|
pub extern "C" fn trigger_pop() {
|
|
|
|
|
core::hint::black_box(trigger_pop);
|
|
|
|
|
pub extern "C" fn trigger_queue_pop() {
|
|
|
|
|
core::hint::black_box(trigger_queue_pop);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[test_log::test]
|
|
|
|
@ -31,7 +32,7 @@ fn queue_basic() {
|
|
|
|
|
.try_into()
|
|
|
|
|
.unwrap();
|
|
|
|
|
prog.load().unwrap();
|
|
|
|
|
prog.attach("trigger_push", "/proc/self/exe", None, None)
|
|
|
|
|
prog.attach("trigger_queue_push", "/proc/self/exe", None, None)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let prog: &mut UProbe = bpf
|
|
|
|
@ -40,7 +41,7 @@ fn queue_basic() {
|
|
|
|
|
.try_into()
|
|
|
|
|
.unwrap();
|
|
|
|
|
prog.load().unwrap();
|
|
|
|
|
prog.attach("trigger_peek", "/proc/self/exe", None, None)
|
|
|
|
|
prog.attach("trigger_queue_peek", "/proc/self/exe", None, None)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let prog: &mut UProbe = bpf
|
|
|
|
@ -49,18 +50,19 @@ fn queue_basic() {
|
|
|
|
|
.try_into()
|
|
|
|
|
.unwrap();
|
|
|
|
|
prog.load().unwrap();
|
|
|
|
|
prog.attach("trigger_pop", "/proc/self/exe", None, None)
|
|
|
|
|
prog.attach("trigger_queue_pop", "/proc/self/exe", None, None)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
//let queue = Queue::<_, u64>::try_from(bpf.take_map("TEST_QUEUE").unwrap()).unwrap();
|
|
|
|
|
let array = Array::<_, i64>::try_from(bpf.map("RESULT").unwrap()).unwrap();
|
|
|
|
|
let array_map = bpf.map("RESULT").unwrap();
|
|
|
|
|
let array = Array::<_, c_int>::try_from(array_map).unwrap();
|
|
|
|
|
|
|
|
|
|
for i in 0..5 {
|
|
|
|
|
trigger_push(i);
|
|
|
|
|
trigger_peek();
|
|
|
|
|
trigger_pop();
|
|
|
|
|
for i in 0..9 {
|
|
|
|
|
trigger_queue_push(i);
|
|
|
|
|
|
|
|
|
|
assert_eq!(array.get(&PEEK_INDEX, 0).unwrap(), i);
|
|
|
|
|
assert_eq!(array.get(&POP_INDEX, 0).unwrap(), i);
|
|
|
|
|
trigger_queue_peek();
|
|
|
|
|
assert_eq!(array.get(&PEEK_INDEX, 0).unwrap(), i as c_int);
|
|
|
|
|
|
|
|
|
|
trigger_queue_pop();
|
|
|
|
|
assert_eq!(array.get(&POP_INDEX, 0).unwrap(), i as c_int);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|