diff --git a/bpf.py b/bpf.py index fb4eea4a5665c527a6c068d1e4b60cd4de734b99..7ff74741d866b0f4fb3fc5ba4097998b063be002 100644 --- a/bpf.py +++ b/bpf.py @@ -58,7 +58,8 @@ def update_elem(fd, key, value, flags): return bpf(2, "IQQQ", fd, addrof(key), addrof(value), flags)[0] def prog_load(prog_type, insns, license, - log_level=0, log_size=4096, kern_version=0): + log_level=0, log_size=4096, kern_version=0, flags=0, + name="", ifindex=0, attach_type=0): if log_level == 0: log_buf = 0 log_size = 0 @@ -67,9 +68,10 @@ def prog_load(prog_type, insns, license, log_buf = addrof(the_logbuf) license = license.encode("utf8") try: - fd, _ = bpf(5, "IIQQIIQI", prog_type.value, int(len(insns) // 8), + fd, _ = bpf(5, "IIQQIIQII16sII", prog_type.value, int(len(insns) // 8), addrof(insns), addrof(license), log_level, log_size, - log_buf, kern_version) + log_buf, kern_version, flags, name.encode("utf8"), ifindex, + attach_type) except OSError as e: if log_level != 0: raise BPFError(e.errno, the_logbuf.value.decode("utf8")) diff --git a/ebpf.py b/ebpf.py index 3e7523d6a7995f6d9b293929aae8606ee44e3a21..4ff7710e6773296b9b9db9ed42c923be741c72b4 100644 --- a/ebpf.py +++ b/ebpf.py @@ -732,12 +732,19 @@ class RegisterDesc: class EBPF: stack = 0 + name = None - def __init__(self, prog_type=0, license="", kern_version=0): + def __init__(self, prog_type=0, license="", kern_version=0, + name=None): self.opcodes = [] self.prog_type = prog_type self.license = license self.kern_version = kern_version + if name is None: + if self.name is None: + self.name = self.__class__.__name__[:16] + else: + self.name = name self.loaded = False self.m8 = MemoryDesc(self, Opcode.B) @@ -767,7 +774,8 @@ class EBPF: def load(self, log_level=0, log_size=4096): ret = bpf.prog_load(self.prog_type, self.assemble(), self.license, - log_level, log_size, self.kern_version) + log_level, log_size, self.kern_version, + name=self.name) self.loaded = True for v in self.__class__.__dict__.values():