From 744a50925ea44f5034be08869fea190b0d8c152b Mon Sep 17 00:00:00 2001 From: Pragyansh Chaturvedi Date: Sun, 19 Oct 2025 02:40:06 +0530 Subject: [PATCH] Modify bindings for newly designed classes --- src/bindings/main.cpp | 69 +++++++++++++++++++++++++--------------- src/core/bpf_program.cpp | 1 + src/core/bpf_program.h | 5 +-- 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/bindings/main.cpp b/src/bindings/main.cpp index ea3a6e3..b6bb779 100644 --- a/src/bindings/main.cpp +++ b/src/bindings/main.cpp @@ -6,9 +6,11 @@ extern "C" { #include } +#include "core/bpf_object.h" #include "core/bpf_program.h" #include "core/bpf_exception.h" #include "core/bpf_map.h" +#include "core/bpf_perf_buffer.h" namespace py = pybind11; @@ -30,33 +32,48 @@ PYBIND11_MODULE(pylibbpf, m) { // Register the custom exception py::register_exception(m, "BpfException"); - py::class_(m, "BpfProgram") - .def(py::init()) - .def(py::init()) - .def("load", &BpfProgram::load) - .def("attach", &BpfProgram::attach) - .def("destroy", &BpfProgram::destroy) - .def("load_and_attach", &BpfProgram::load_and_attach) - .def("is_loaded", &BpfProgram::is_loaded) - .def("is_attached", &BpfProgram::is_attached); + // BpfObject + py::class_>(m, "BpfObject") + .def(py::init(), py::arg("object_path")) + .def("load", &BpfObject::load) + .def("is_loaded", &BpfObject::is_loaded) + .def("get_program_names", &BpfObject::get_program_names) + .def("get_program", &BpfObject::get_program, py::arg("name")) + .def("attach_all", &BpfObject::attach_all) + .def("get_map_names", &BpfObject::get_map_names) + .def("get_map", &BpfObject::get_map, py::arg("name")); - py::class_(m, "BpfMap") - .def(py::init()) - .def("lookup", &BpfMap::lookup) - .def("update", &BpfMap::update) - .def("delete", &BpfMap::delete_elem) - .def("get_next_key", &BpfMap::get_next_key, py::arg("key") = py::none()) - .def("items", &BpfMap::items) - .def("keys", &BpfMap::keys) - .def("values", &BpfMap::values) - .def("get_name", &BpfMap::get_name) - .def("get_type", &BpfMap::get_type) - .def("get_key_size", &BpfMap::get_key_size) - .def("get_value_size", &BpfMap::get_value_size) - .def("get_max_entries", &BpfMap::get_max_entries) - .def("__getitem__", &BpfMap::lookup) - .def("__setitem__", &BpfMap::update) - .def("__delitem__", &BpfMap::delete_elem); + // BpfProgram + py::class_>(m, "BpfProgram") + .def("attach", &BpfProgram::attach) + .def("detach", &BpfProgram::detach) + .def("is_attached", &BpfProgram::is_attached) + .def("get_name", &BpfProgram::get_name); + + // BpfMap + py::class_>(m, "BpfMap") + .def("lookup", &BpfMap::lookup, py::arg("key")) + .def("update", &BpfMap::update, py::arg("key"), py::arg("value")) + .def("delete_elem", &BpfMap::delete_elem, py::arg("key")) + .def("get_next_key", &BpfMap::get_next_key, py::arg("key") = py::none()) + .def("items", &BpfMap::items) + .def("keys", &BpfMap::keys) + .def("values", &BpfMap::values) + .def("get_name", &BpfMap::get_name) + .def("get_fd", &BpfMap::get_fd) + .def("get_type", &BpfMap::get_type) + .def("get_key_size", &BpfMap::get_key_size) + .def("get_value_size", &BpfMap::get_value_size) + .def("get_max_entries", &BpfMap::get_max_entries); + + py::class_(m, "BpfPerfBuffer") + .def(py::init(), + py::arg("map_fd"), + py::arg("page_cnt") = 8, + py::arg("callback"), + py::arg("lost_callback") = py::none()) + .def("poll", &BpfPerfBuffer::poll, py::arg("timeout_ms") = -1) + .def("consume", &BpfPerfBuffer::consume); #ifdef VERSION_INFO diff --git a/src/core/bpf_program.cpp b/src/core/bpf_program.cpp index 1979e5e..3da1b78 100644 --- a/src/core/bpf_program.cpp +++ b/src/core/bpf_program.cpp @@ -1,3 +1,4 @@ +#include "bpf_object.h" #include "bpf_program.h" #include "bpf_exception.h" #include diff --git a/src/core/bpf_program.h b/src/core/bpf_program.h index 3863ee6..4f7dfc6 100644 --- a/src/core/bpf_program.h +++ b/src/core/bpf_program.h @@ -4,6 +4,7 @@ #include #include #include +#include class BpfObject; @@ -26,8 +27,8 @@ public: BpfProgram(BpfProgram &&) noexcept; BpfProgram &operator=(BpfProgram &&) noexcept; - bool attach(); - bool detach(); + void attach(); + void detach(); [[nodiscard]] bool is_attached() const { return link_ != nullptr; } [[nodiscard]] std::string get_name() const { return program_name_; }