Example #1
0
def BpfProgLoad(prog_type, insn_ptr, prog_len, insn_len):
    gpl_license = ctypes.create_string_buffer(b"GPL")
    log_buf = ctypes.create_string_buffer(b"", LOG_SIZE)
    attr = BpfAttrProgLoad((prog_type, prog_len / insn_len, insn_ptr,
                            ctypes.addressof(gpl_license), LOG_LEVEL, LOG_SIZE,
                            ctypes.addressof(log_buf), 0))
    ret = libc.syscall(__NR_bpf, BPF_PROG_LOAD, attr.CPointer(), len(attr))
    csocket.MaybeRaiseSocketError(ret)
    return ret
Example #2
0
def GetNextKey(map_fd, key):
    c_key = ctypes.c_uint32(key)
    c_next_key = ctypes.c_uint32(0)
    attr = BpfAttrOps(
        (map_fd, ctypes.addressof(c_key), ctypes.addressof(c_next_key), 0))
    ret = libc.syscall(__NR_bpf, BPF_MAP_GET_NEXT_KEY, attr.CPointer(),
                       len(attr))
    csocket.MaybeRaiseSocketError(ret)
    return c_next_key
Example #3
0
def LookupMap(map_fd, key):
    c_value = ctypes.c_uint32(0)
    c_key = ctypes.c_uint32(key)
    attr = BpfAttrOps(
        (map_fd, ctypes.addressof(c_key), ctypes.addressof(c_value), 0))
    ret = libc.syscall(__NR_bpf, BPF_MAP_LOOKUP_ELEM, attr.CPointer(),
                       len(attr))
    csocket.MaybeRaiseSocketError(ret)
    return c_value
Example #4
0
def UpdateMap(map_fd, key, value, flags=0):
    c_value = ctypes.c_uint32(value)
    c_key = ctypes.c_uint32(key)
    value_ptr = ctypes.addressof(c_value)
    key_ptr = ctypes.addressof(c_key)
    attr = BpfAttrOps((map_fd, key_ptr, value_ptr, flags))
    ret = libc.syscall(__NR_bpf, BPF_MAP_UPDATE_ELEM, attr.CPointer(),
                       len(attr))
    csocket.MaybeRaiseSocketError(ret)
Example #5
0
def BpfProgAttachSocket(sock_fd, prog_fd):
    prog_ptr = ctypes.c_uint32(prog_fd)
    ret = libc.setsockopt(sock_fd, socket.SOL_SOCKET, SO_ATTACH_BPF,
                          ctypes.addressof(prog_ptr), ctypes.sizeof(prog_ptr))
    csocket.MaybeRaiseSocketError(ret)
Example #6
0
def DeleteMap(map_fd, key):
    c_key = ctypes.c_uint32(key)
    attr = BpfAttrOps((map_fd, ctypes.addressof(c_key), 0, 0))
    ret = libc.syscall(__NR_bpf, BPF_MAP_DELETE_ELEM, attr.CPointer(),
                       len(attr))
    csocket.MaybeRaiseSocketError(ret)
Example #7
0
def CreateMap(map_type, key_size, value_size, max_entries):
    attr = BpfAttrCreate((map_type, key_size, value_size, max_entries))
    ret = libc.syscall(__NR_bpf, BPF_MAP_CREATE, attr.CPointer(), len(attr))
    csocket.MaybeRaiseSocketError(ret)
    return ret
Example #8
0
def BpfSyscall(op, attr):
    ret = libc.syscall(__NR_bpf, op, attr.CPointer(), len(attr))
    csocket.MaybeRaiseSocketError(ret)
    return ret
Example #9
0
def BpfProgAttachSocket(sock_fd, prog_fd):
    uint_fd = ctypes.c_uint32(prog_fd)
    ret = libc.setsockopt(sock_fd, socket.SOL_SOCKET, SO_ATTACH_BPF,
                          ctypes.pointer(uint_fd), ctypes.sizeof(uint_fd))
    csocket.MaybeRaiseSocketError(ret)