1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
use super::syscalls::bpf;
use crate::error::Error;
use std::mem::size_of;
#[allow(dead_code)]
#[derive(Copy, Clone)]
pub enum AttachType {
CgroupInetIngress,
CgroupInetEgress,
CgroupInetSockCreate,
CgroupSockOps,
SkSkbStreamParser,
SkSkbStreamVerdict,
CgroupDevice,
SkMsgVerdict,
CgroupInet4Bind,
CgroupInet6Bind,
CgroupInet4Connect,
CgroupInet6Connect,
CgroupInet4PostBind,
CgroupInet6PostBind,
CgroupUdp4Sendmsg,
CgroupUdp6Sendmsg,
LircMode2,
FlowDissector,
CgroupSysctl,
CgroupUdp4Recvmsg,
CgroupUdp6Recvmsg,
CgroupGetsockopt,
CgroupSetsockopt,
TraceRawTp,
TraceFentry,
TraceFexit,
ModifyReturn,
LsmMac,
TraceIter,
CgroupInet4Getpeername,
CgroupInet6Getpeername,
CgroupInet4Getsockname,
CgroupInet6Getsockname,
XdpDevmap,
CgroupInetSockRelease,
XdpCpumap,
SkLookup,
Xdp,
SkSkbVerdict,
SkReuseportSelect,
SkReuseportSelectOrMigrate,
PerfEvent,
TraceKprobeMulti,
}
#[allow(dead_code)]
#[derive(Copy, Clone, Debug)]
pub enum Command {
MapCreate = 0,
MapLookupElem,
MapUpdateElem,
MapDeleteElem,
MapGetNextKey,
ProgLoad,
ObjPin,
ObjGet,
ProgAttach,
ProgDetach,
ProgTestRun,
ProgGetNextId,
MapGetNextId,
ProgGetFdById,
MapGetFdById,
ObjGetInfoByFd,
ProgQuery,
RawTracepointOpen,
BtfLoad,
BtfGetFdById,
TaskFdQuery,
MapLookupAndDeleteElem,
MapFreeze,
GetNextId,
MapLookupBatch,
MapLookupAndDeleteBatch,
MapUpdateBatch,
MapDeleteBatch,
LinkCreate,
LinkUpdate,
LinkGetFdById,
LinkGetNextId,
EnableStats,
IterCreate,
LinkDetach,
ProgBindMap,
}
pub trait CallBpf {
fn call_bpf(&self, cmd: Command) -> Result<u32, Error>;
}
impl<T> CallBpf for T {
fn call_bpf(&self, cmd: Command) -> Result<u32, Error> {
let r = bpf(cmd as u32, self as *const Self as *const u8, size_of::<T>());
if r < 0 {
Err(Error::SystemError(r))
} else {
Ok(r as u32)
}
}
}