1234567891011121314151617181920212223242526272829303132333435363738394041 |
- use core::ffi::c_void;
- use crate::{bindings::xdp_md, BpfContext};
- pub struct XdpContext {
- pub ctx: *mut xdp_md,
- }
- impl XdpContext {
- pub fn new(ctx: *mut xdp_md) -> XdpContext {
- XdpContext { ctx }
- }
- #[inline]
- pub fn data(&self) -> usize {
- unsafe { (*self.ctx).data as usize }
- }
- #[inline]
- pub fn data_end(&self) -> usize {
- unsafe { (*self.ctx).data_end as usize }
- }
- /// Return the raw address of the XdpContext metadata.
- #[inline(always)]
- pub fn metadata(&self) -> usize {
- unsafe { (*self.ctx).data_meta as usize }
- }
- /// Return the raw address immediately after the XdpContext's metadata.
- #[inline(always)]
- pub fn metadata_end(&self) -> usize {
- self.data()
- }
- }
- impl BpfContext for XdpContext {
- fn as_ptr(&self) -> *mut c_void {
- self.ctx as *mut _
- }
- }
|