Fix Bindings and PerfEventArray

This commit is contained in:
Pragyansh Chaturvedi
2025-10-20 00:28:27 +05:30
parent 8babf3087b
commit 1eb7ed460e
2 changed files with 65 additions and 46 deletions

View File

@ -6,11 +6,12 @@ extern "C" {
#include <libbpf.h> #include <libbpf.h>
} }
#include "core/bpf_object.h"
#include "core/bpf_program.h"
#include "core/bpf_exception.h" #include "core/bpf_exception.h"
#include "core/bpf_map.h" #include "core/bpf_map.h"
#include "core/bpf_object.h"
#include "core/bpf_program.h"
#include "maps/perf_event_array.h" #include "maps/perf_event_array.h"
#include "utils/struct_parser.h"
namespace py = pybind11; namespace py = pybind11;
@ -34,14 +35,17 @@ PYBIND11_MODULE(pylibbpf, m) {
// BpfObject // BpfObject
py::class_<BpfObject, std::shared_ptr<BpfObject>>(m, "BpfObject") py::class_<BpfObject, std::shared_ptr<BpfObject>>(m, "BpfObject")
.def(py::init<std::string>(), py::arg("object_path")) .def(py::init<std::string, py::dict>(), py::arg("object_path"),
py::arg("structs") = py::dict())
.def("load", &BpfObject::load) .def("load", &BpfObject::load)
.def("is_loaded", &BpfObject::is_loaded) .def("is_loaded", &BpfObject::is_loaded)
.def("get_program_names", &BpfObject::get_program_names) .def("get_program_names", &BpfObject::get_program_names)
.def("get_program", &BpfObject::get_program, py::arg("name")) .def("get_program", &BpfObject::get_program, py::arg("name"))
.def("attach_all", &BpfObject::attach_all) .def("attach_all", &BpfObject::attach_all)
.def("get_map_names", &BpfObject::get_map_names) .def("get_map_names", &BpfObject::get_map_names)
.def("get_map", &BpfObject::get_map, py::arg("name")); .def("get_map", &BpfObject::get_map, py::arg("name"))
.def("get_struct_defs", &BpfObject::get_struct_defs)
.def("__getitem__", &BpfObject::get_map, py::arg("name"));
// BpfProgram // BpfProgram
py::class_<BpfProgram, std::shared_ptr<BpfProgram>>(m, "BpfProgram") py::class_<BpfProgram, std::shared_ptr<BpfProgram>>(m, "BpfProgram")
@ -64,17 +68,30 @@ PYBIND11_MODULE(pylibbpf, m) {
.def("get_type", &BpfMap::get_type) .def("get_type", &BpfMap::get_type)
.def("get_key_size", &BpfMap::get_key_size) .def("get_key_size", &BpfMap::get_key_size)
.def("get_value_size", &BpfMap::get_value_size) .def("get_value_size", &BpfMap::get_value_size)
.def("get_max_entries", &BpfMap::get_max_entries); .def("get_max_entries", &BpfMap::get_max_entries)
.def("__getitem__", &BpfMap::lookup, py::arg("key"))
.def("__setitem__", &BpfMap::update, py::arg("key"), py::arg("value"));
py::class_<PerfEventArray>(m, "PerfEventArray") // StructParser
.def(py::init<int, int, py::function, py::object>(), py::class_<StructParser>(m, "StructParser")
py::arg("map_fd"), .def(py::init<py::dict>(), py::arg("structs"))
py::arg("page_cnt") = 8, .def("parse", &StructParser::parse, py::arg("struct_name"),
py::arg("callback"), py::arg("data"))
.def("has_struct", &StructParser::has_struct, py::arg("struct_name"));
// PerfEventArray
py::class_<PerfEventArray, std::shared_ptr<PerfEventArray>>(m,
"PerfEventArray")
.def(py::init<std::shared_ptr<BpfMap>, int, py::function, py::object>(),
py::arg("map"), py::arg("page_cnt"), py::arg("callback"),
py::arg("lost_callback") = py::none()) py::arg("lost_callback") = py::none())
.def("poll", &PerfEventArray::poll, py::arg("timeout_ms") = -1) .def(py::init<std::shared_ptr<BpfMap>, int, py::function, std::string,
.def("consume", &PerfEventArray::consume); py::object>(),
py::arg("map"), py::arg("page_cnt"), py::arg("callback"),
py::arg("struct_name"), py::arg("lost_callback") = py::none())
.def("poll", &PerfEventArray::poll, py::arg("timeout_ms"))
.def("consume", &PerfEventArray::consume)
.def("get_map", &PerfEventArray::get_map);
#ifdef VERSION_INFO #ifdef VERSION_INFO
m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO); m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO);

View File

@ -1,6 +1,8 @@
#include "perf_event_array.h" #include "perf_event_array.h"
#include "core/bpf_exception.h" #include "core/bpf_exception.h"
#include "core/bpf_map.h" #include "core/bpf_map.h"
#include "core/bpf_object.h"
#include "utils/struct_parser.h"
PerfEventArray::PerfEventArray(std::shared_ptr<BpfMap> map, int page_cnt, PerfEventArray::PerfEventArray(std::shared_ptr<BpfMap> map, int page_cnt,
py::function callback, py::object lost_callback) py::function callback, py::object lost_callback)