mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
add cgroup helper
This commit is contained in:
@ -16,6 +16,7 @@ from .helpers import (
|
|||||||
smp_processor_id,
|
smp_processor_id,
|
||||||
uid,
|
uid,
|
||||||
skb_store_bytes,
|
skb_store_bytes,
|
||||||
|
get_current_cgroup_id,
|
||||||
get_stack,
|
get_stack,
|
||||||
XDP_DROP,
|
XDP_DROP,
|
||||||
XDP_PASS,
|
XDP_PASS,
|
||||||
@ -79,6 +80,7 @@ __all__ = [
|
|||||||
"handle_helper_call",
|
"handle_helper_call",
|
||||||
"emit_probe_read_kernel_str_call",
|
"emit_probe_read_kernel_str_call",
|
||||||
"emit_probe_read_kernel_call",
|
"emit_probe_read_kernel_call",
|
||||||
|
"get_current_cgroup_id",
|
||||||
"ktime",
|
"ktime",
|
||||||
"pid",
|
"pid",
|
||||||
"deref",
|
"deref",
|
||||||
|
|||||||
@ -30,6 +30,7 @@ class BPFHelperID(Enum):
|
|||||||
BPF_SKB_STORE_BYTES = 9
|
BPF_SKB_STORE_BYTES = 9
|
||||||
BPF_GET_CURRENT_PID_TGID = 14
|
BPF_GET_CURRENT_PID_TGID = 14
|
||||||
BPF_GET_CURRENT_UID_GID = 15
|
BPF_GET_CURRENT_UID_GID = 15
|
||||||
|
BPF_GET_CURRENT_CGROUP_ID = 80
|
||||||
BPF_GET_CURRENT_COMM = 16
|
BPF_GET_CURRENT_COMM = 16
|
||||||
BPF_PERF_EVENT_OUTPUT = 25
|
BPF_PERF_EVENT_OUTPUT = 25
|
||||||
BPF_GET_STACK = 67
|
BPF_GET_STACK = 67
|
||||||
@ -67,6 +68,32 @@ def bpf_ktime_get_ns_emitter(
|
|||||||
result = builder.call(fn_ptr, [], tail=False)
|
result = builder.call(fn_ptr, [], tail=False)
|
||||||
return result, ir.IntType(64)
|
return result, ir.IntType(64)
|
||||||
|
|
||||||
|
@HelperHandlerRegistry.register(
|
||||||
|
"get_current_cgroup_id",
|
||||||
|
param_types=[],
|
||||||
|
return_type=ir.IntType(64),
|
||||||
|
)
|
||||||
|
def bpf_get_current_cgroup_id(
|
||||||
|
call,
|
||||||
|
map_ptr,
|
||||||
|
module,
|
||||||
|
builder,
|
||||||
|
func,
|
||||||
|
local_sym_tab=None,
|
||||||
|
struct_sym_tab=None,
|
||||||
|
map_sym_tab=None,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Emit LLVM IR for bpf_get_current_cgroup_id helper function call.
|
||||||
|
"""
|
||||||
|
# func is an arg to just have a uniform signature with other emitters
|
||||||
|
helper_id = ir.Constant(ir.IntType(64), BPFHelperID.BPF_GET_CURRENT_CGROUP_ID.value)
|
||||||
|
fn_type = ir.FunctionType(ir.IntType(64), [], var_arg=False)
|
||||||
|
fn_ptr_type = ir.PointerType(fn_type)
|
||||||
|
fn_ptr = builder.inttoptr(helper_id, fn_ptr_type)
|
||||||
|
result = builder.call(fn_ptr, [], tail=False)
|
||||||
|
return result, ir.IntType(64)
|
||||||
|
|
||||||
|
|
||||||
@HelperHandlerRegistry.register(
|
@HelperHandlerRegistry.register(
|
||||||
"lookup",
|
"lookup",
|
||||||
|
|||||||
@ -57,6 +57,11 @@ def get_stack(buf, flags=0):
|
|||||||
return ctypes.c_int64(0)
|
return ctypes.c_int64(0)
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_cgroup_id():
|
||||||
|
"""Get the current cgroup ID"""
|
||||||
|
return ctypes.c_int64(0)
|
||||||
|
|
||||||
|
|
||||||
XDP_ABORTED = ctypes.c_int64(0)
|
XDP_ABORTED = ctypes.c_int64(0)
|
||||||
XDP_DROP = ctypes.c_int64(1)
|
XDP_DROP = ctypes.c_int64(1)
|
||||||
XDP_PASS = ctypes.c_int64(2)
|
XDP_PASS = ctypes.c_int64(2)
|
||||||
|
|||||||
Reference in New Issue
Block a user