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():