ebpf::BPF bpf(0, nullptr, false);
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFArrayTable<int> t = bpf.get_array_table<int>("myarray");
v1 = 42;
// update element
res = t.update_value(i, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(i, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2 == 42);
// update another element
i = 2;
v1 = 69;
res = t.update_value(i, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(i, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2 == 69);
// get non existing element
i = 1024;
res = t.get_value(i, v2);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
SECTION("full table") {
int v = dist(rng);
res = t.update_value(i, v);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// save it in the local table to compare later on
localtable[i] = v;
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFPercpuArrayTable<uint64_t> t = bpf.get_percpu_array_table<uint64_t>("myarray");
size_t ncpus = ebpf::BPFTable::get_possible_cpu_count();
i = 1;
// update element
res = t.update_value(i, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(i, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2.size() == ncpus);
for (size_t j = 0; j < ncpus; j++) {
REQUIRE(v2.at(j) == 42 * j);
// get non existing element
i = 1024;
res = t.get_value(i, v2);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
#endif
ebpf::StatusTuple res(0);
std::vector<std::pair<std::string, std::string>> elements;
res = bpf->init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFTable t = bpf->get_table("myhash");
// update element
std::string value;
res = t.update_value("0x07", "0x42");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value("0x7", value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value == "0x42");
// update another element
res = t.update_value("0x11", "0x777");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value("0x11", value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value == "0x777");
// remove value
res = t.remove_value("0x11");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value("0x11", value);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = t.update_value("0x15", "0x888");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_table_offline(elements);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(elements.size() == 2);
// check that elements match what is in the table
}
res = t.clear_table_non_atomic();
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_table_offline(elements);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(elements.size() == 0);
// delete bpf_module, call to key/leaf printf/scanf must fail
delete bpf;
res = t.update_value("0x07", "0x42");
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = t.get_value("0x07", value);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = t.remove_value("0x07");
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFTable t = bpf.get_table("myhash");
size_t ncpus = ebpf::BPFTable::get_possible_cpu_count();
// update element
std::vector<std::string> value;
res = t.update_value("0x07", v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value("0x07", value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
for (size_t i = 0; i < ncpus; i++) {
REQUIRE(42 * i == std::stoul(value.at(i), nullptr, 16));
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto t = bpf.get_hash_table<int, int>("myhash");
key = 0x08;
value = 0x43;
res = t.update_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(t[key] == value);
// update another element
key = 0x12;
value = 0x778;
res = t.update_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
key = 0x31;
value = 0x123;
res = t.update_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
key = 0x12;
value = 0;
res = t.get_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value == 0x778);
// remove value and dump table
key = 0x12;
res = t.remove_value(key);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto values = t.get_table_offline();
REQUIRE(values.size() == 2);
// clear table
res = t.clear_table_non_atomic();
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
values = t.get_table_offline();
REQUIRE(values.size() == 0);
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "on_sys_getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(getuid() >= 0);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto id = bpf.get_hash_table<int, int>("id");
auto stack_traces = bpf.get_stack_table("stack_traces");
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "on_sys_getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(getuid() >= 0);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto id = bpf.get_hash_table<int, int>("id");
auto stack_traces = bpf.get_stackbuildid_table("stack_traces");
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto cg_storage = bpf.get_cg_storage_table<int>("cg_storage1");
struct bpf_cgroup_storage_key key = {0};
// all the following lookup/update will fail since
// cgroup local storage only created during prog attachment time.
res = cg_storage.get_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = cg_storage.update_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
#endif
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto cg_storage = bpf.get_percpu_cg_storage_table<long long>("cg_storage1");
struct bpf_cgroup_storage_key key = {0};
// all the following lookup/update will fail since
// cgroup local storage only created during prog attachment time.
res = cg_storage.get_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = cg_storage.update_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFHashTable<int, int> t = bpf.get_hash_table<int, int>("myhash");
v1 = 42;
// create new element
res = t.update_value(k, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(k, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2 == 42);
// update existing element
v1 = 69;
res = t.update_value(k, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(k, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2 == 69);
// remove existing element
res = t.remove_value(k);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// remove non existing element
res = t.remove_value(k);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// get non existing element
res = t.get_value(k, v2);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
SECTION("walk table") {
for (int i = 1; i <= 10; i++) {
res = t.update_value(i * 3, i);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
auto offline = t.get_table_offline();
REQUIRE(offline.size() == 10);
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFPercpuHashTable<int, uint64_t> t =
bpf.get_percpu_hash_table<int, uint64_t>("myhash");
// create new element
res = t.update_value(k, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(k, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
for (size_t j = 0; j < ncpus; j++) {
REQUIRE(v2.at(j) == 42 * j);
}
v1[j] = 69 * j;
}
res = t.update_value(k, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.get_value(k, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
for (size_t j = 0; j < ncpus; j++) {
REQUIRE(v2.at(j) == 69 * j);
}
// remove existing element
res = t.remove_value(k);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// remove non existing element
res = t.remove_value(k);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// get non existing element
res = t.get_value(k, v2);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
SECTION("walk table") {
v[cpu] = k * cpu;
}
res = t.update_value(k, v);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
// get whole table
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto t = bpf.get_map_in_map_table<int>("maps_hash");
auto ex1_table = bpf.get_array_table<int>("ex1");
int key = 0, value = 0;
res = t.update_value(key, ex1_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// updating already-occupied slot will succeed.
res = t.update_value(key, ex2_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.update_value(key, ex1_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// an in-compatible map
key = 1;
// as hash table is not full.
key = 10;
res = t.update_value(key, ex2_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.remove_value(key);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// test effectiveness of map-in-map
key = 0;
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "syscall__getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto cntl_table = bpf.get_array_table<int>("cntl");
cntl_table.update_value(0, 1);
REQUIRE(getuid() >= 0);
res = ex1_table.get_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value > 0);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.remove_value(key);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto t = bpf.get_map_in_map_table<struct custom_key>("maps_hash");
auto ex1_table = bpf.get_hash_table<int, int>("ex1");
// test effectiveness of map-in-map
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "syscall__getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
struct custom_key hash_key = {1, 1};
res = t.update_value(hash_key, ex1_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
struct custom_key hash_key2 = {1, 2};
res = t.update_value(hash_key2, ex2_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
int key = 0, value = 0, value2 = 0;
// Can't get value when value didn't set.
res = ex1_table.get_value(key, value);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
REQUIRE(value == 0);
// Call syscall__getuid, then set value to ex1_table
res = cntl_table.update_value(key, 1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(getuid() >= 0);
// Now we can get value from ex1_table
res = ex1_table.get_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value >= 1);
// Can't get value when value didn't set.
res = ex2_table.get_value(key, value2);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
REQUIRE(value2 == 0);
// Call syscall__getuid, then set value to ex2_table
res = cntl_table.update_value(key, 2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(getuid() >= 0);
// Now we can get value from ex2_table
res = ex2_table.get_value(key, value2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value > 0);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.remove_value(hash_key);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.remove_value(hash_key2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto t = bpf.get_map_in_map_table<int>("maps_array");
auto ex1_table = bpf.get_hash_table<int, int>("ex1");
int key = 0, value = 0;
res = t.update_value(key, ex1_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// updating already-occupied slot will succeed.
res = t.update_value(key, ex2_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.update_value(key, ex1_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// an in-compatible map
key = 1;
key = 0;
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "syscall__getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto cntl_table = bpf.get_array_table<int>("cntl");
cntl_table.update_value(0, 1);
REQUIRE(getuid() >= 0);
res = ex1_table.get_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(value == 1);
cntl_table.update_value(0, 2);
REQUIRE(res.code() == -1);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t.remove_value(key);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
}
#endif
res = bpf.init(
BPF_PROGRAM,
{"-DNUM_CPUS=" + std::to_string(sysconf(_SC_NPROCESSORS_ONLN))}, {});
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res =
bpf.open_perf_event("cnt", PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
std::string getuid_fnname = bpf.get_syscall_fnname("getuid");
res = bpf.attach_kprobe(getuid_fnname, "on_sys_getuid");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(getuid() >= 0);
res = bpf.detach_kprobe(getuid_fnname);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.close_perf_event("cnt");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto val = bpf.get_hash_table<int, uint64_t>("val");
REQUIRE(val[0] >= 0);
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_perf_event(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK,
"on_event", 0, 1000);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
sleep(1);
res = bpf.detach_perf_event(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto pid = bpf.get_hash_table<int, uint64_t>("pid");
REQUIRE(pid[0] >= 0);
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(bpf_obj_pin(bpf.get_hash_table<int, int>("ids").get_fd(), "/sys/fs/bpf/test_pinned_table") == 0);
}
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
unlink("/sys/fs/bpf/test_pinned_table"); // can delete table here already
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
auto t = bpf.get_hash_table<int, int>("ids");
int key, value;
key = 0x08;
value = 0x43;
res = t.update_value(key, value);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(t[key] == value);
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
unlink("/sys/fs/bpf/test_pinned_table");
}
ebpf::BPF bpf;
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFProgTable t = bpf.get_prog_table("myprog");
ebpf::BPF bpf2;
res = bpf2.init(BPF_PROGRAM2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
int fd;
res = bpf2.load_func("hello", BPF_PROG_TYPE_SCHED_CLS, fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
SECTION("update and remove") {
// update element
res = t.update_value(0, fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// remove element
res = t.remove_value(0);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// update out of range element
res = t.update_value(17, fd);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// remove out of range element
res = t.remove_value(17);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFQueueStackTable<int> t = bpf.get_queuestack_table<int>("myqueue");
// insert elements
for (i=0; i<30; i++) {
res = t.push_value(i);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
// checking head (peek)
res = t.get_head(val);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(val == 0);
// retrieve elements
for (i=0; i<30; i++) {
res = t.pop_value(val);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(val == i);
}
// get non existing element
res = t.pop_value(val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
ebpf::BPFQueueStackTable<int> t = bpf.get_queuestack_table<int>("mystack");
// insert elements
for (i=0; i<30; i++) {
res = t.push_value(i);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
// checking head (peek)
res = t.get_head(val);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(val == 29);
// retrieve elements
for (i=0; i<30; i++) {
res = t.pop_value(val);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE( val == (30 - 1 - i));
}
// get non existing element
res = t.pop_value(val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
#endif
ebpf::StatusTuple res(0);
res = bpf_ns1_a.init(BPF_PROGRAM1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf_ns1_b.init(BPF_PROGRAM2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf_ns2_a.init(BPF_PROGRAM1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf_ns2_b.init(BPF_PROGRAM2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// get references to all tables
ebpf::BPFArrayTable<int> t_ns1_a = bpf_ns1_a.get_array_table<int>("mysharedtable");
// test that tables within the same ns are shared
int v1, v2, v3;
res = t_ns1_a.update_value(13, 42);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t_ns1_b.get_value(13, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v1 == 42);
// test that tables are isolated within different ns
res = t_ns2_a.update_value(13, 69);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = t_ns2_b.get_value(13, v2);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v2 == 69);
res = t_ns1_b.get_value(13, v3);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v3 == 42); // value should still be 42
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
int prog_fd;
res = bpf.load_func("test", BPF_PROG_TYPE_CGROUP_SKB, prog_fd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// create a udp socket so we can do some map operations.
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
// no sk_storage for the table yet.
res = sk_table.get_value(sockfd, v);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// nothing to remove yet.
res = sk_table.remove_value(sockfd);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// update the table with a certain value.
res = sk_table.update_value(sockfd, v1);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// get_value should be successful now.
res = sk_table.get_value(sockfd, v);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(v == 10);
// remove the sk_storage.
res = sk_table.remove_value(sockfd);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// create a udp socket so we can do some map operations.
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
int key = 0, val = sockfd;
res = sk_map.remove_value(key);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// the socket must be TCP established socket.
res = sk_map.update_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
ebpf::BPF bpf;
ebpf::StatusTuple res(0);
res = bpf.init(BPF_PROGRAM);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
// create a udp socket so we can do some map operations.
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
int key = 0, val = sockfd;
res = sk_hash.remove_value(key);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// the socket must be TCP established socket.
res = sk_hash.update_value(key, val);
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
}
}
ebpf::USDT u("/proc/self/exe", "libbcc_test", "sample_probe_1", "on_event");
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.detach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
TEST_CASE("test fine probes in our own binary with C++ API", "[usdt]") {
ebpf::USDT u(::getpid(), "libbcc_test", "sample_probe_1", "on_event");
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.detach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
TEST_CASE("test find a probe in our process' shared libs with c++ API", "[usdt]") {
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
REQUIRE(res.msg() == "");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
TEST_CASE("test usdt partial init w/ fail init_usdt", "[usdt]") {
// successfully
auto res = bpf.init_usdt(u);
REQUIRE(res.msg() != "");
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
// Shouldn't be necessary to re-init bpf object either after failure to init w/
// bad USDT
res = bpf.init("int on_event() { return 0; }", {}, {u});
REQUIRE(res.msg() != "");
- REQUIRE(res.code() != 0);
+ REQUIRE(!res.ok());
res = bpf.init_usdt(p);
REQUIRE(res.msg() == "");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.init("int on_event() { return 0; }", {}, {});
REQUIRE(res.msg() == "");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
class ChildProcess {
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
REQUIRE(res.msg() == "");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_usdt(u, ruby_pid);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.detach_usdt(u, ruby_pid);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
}
SECTION("in separate mount namespace and separate PID namespace") {
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
REQUIRE(res.msg() == "");
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_usdt(u, ruby_pid);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.detach_usdt(u, ruby_pid);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
struct bcc_symbol sym;
std::string pid_root= "/proc/" + std::to_string(ruby_pid) + "/root/";
ebpf::USDT u("/proc/self/exe", "libbcc_test", "sample_probe_2", "on_event");
auto res = bpf.init("int on_event() { return 0; }", {}, {u});
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
res = bpf.attach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(FOLLY_SDT_IS_ENABLED(libbcc_test, sample_probe_2));
res = bpf.detach_usdt(u);
- REQUIRE(res.code() == 0);
+ REQUIRE(res.ok());
REQUIRE(a_probed_function_with_sem() != 0);
}