|
|
@ -3,7 +3,7 @@ use core::{
|
|
|
|
mem::{self, MaybeUninit},
|
|
|
|
mem::{self, MaybeUninit},
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
use aya_bpf_bindings::helpers::{bpf_l4_csum_replace, bpf_skb_load_bytes, bpf_skb_store_bytes};
|
|
|
|
use aya_bpf_bindings::helpers::{bpf_l3_csum_replace, bpf_l4_csum_replace, bpf_skb_load_bytes, bpf_skb_store_bytes};
|
|
|
|
use aya_bpf_cty::c_long;
|
|
|
|
use aya_bpf_cty::c_long;
|
|
|
|
|
|
|
|
|
|
|
|
use crate::{bindings::__sk_buff, BpfContext};
|
|
|
|
use crate::{bindings::__sk_buff, BpfContext};
|
|
|
@ -17,6 +17,11 @@ impl SkSkbContext {
|
|
|
|
SkSkbContext { skb }
|
|
|
|
SkSkbContext { skb }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
|
|
|
|
pub fn set_mark(&mut self, mark: u32) {
|
|
|
|
|
|
|
|
unsafe { *self.skb }.mark = mark;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
#[inline]
|
|
|
|
pub fn load<T>(&self, offset: usize) -> Result<T, c_long> {
|
|
|
|
pub fn load<T>(&self, offset: usize) -> Result<T, c_long> {
|
|
|
|
unsafe {
|
|
|
|
unsafe {
|
|
|
@ -36,7 +41,7 @@ impl SkSkbContext {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
#[inline]
|
|
|
|
pub fn store<T>(&self, offset: usize, v: &T) -> Result<(), c_long> {
|
|
|
|
pub fn store<T>(&mut self, offset: usize, v: &T) -> Result<(), c_long> {
|
|
|
|
unsafe {
|
|
|
|
unsafe {
|
|
|
|
let ret = bpf_skb_store_bytes(
|
|
|
|
let ret = bpf_skb_store_bytes(
|
|
|
|
self.skb as *mut _,
|
|
|
|
self.skb as *mut _,
|
|
|
@ -53,6 +58,24 @@ impl SkSkbContext {
|
|
|
|
Ok(())
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
|
|
|
|
pub fn l3_csum_replace(
|
|
|
|
|
|
|
|
&self,
|
|
|
|
|
|
|
|
offset: usize,
|
|
|
|
|
|
|
|
from: u64,
|
|
|
|
|
|
|
|
to: u64,
|
|
|
|
|
|
|
|
size: u64,
|
|
|
|
|
|
|
|
) -> Result<(), c_long> {
|
|
|
|
|
|
|
|
unsafe {
|
|
|
|
|
|
|
|
let ret = bpf_l3_csum_replace(self.skb as *mut _, offset as u32, from, to, size);
|
|
|
|
|
|
|
|
if ret < 0 {
|
|
|
|
|
|
|
|
return Err(ret);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
#[inline]
|
|
|
|
pub fn l4_csum_replace(
|
|
|
|
pub fn l4_csum_replace(
|
|
|
|
&self,
|
|
|
|
&self,
|
|
|
|