/* Check whether tc is built with libbpf. */
tc = popen("tc -V", "r"); if (CHECK_FAIL(!tc)) returnfalse; if (CHECK_FAIL(!fgets(tc_version, sizeof(tc_version), tc))) {
pclose(tc); returnfalse;
} if (strstr(tc_version, ", libbpf "))
prog = "test_sk_assign_libbpf.bpf.o"; else
prog = "test_sk_assign.bpf.o"; if (CHECK_FAIL(pclose(tc))) returnfalse;
/* Move to a new networking namespace */ if (CHECK_FAIL(unshare(CLONE_NEWNET))) returnfalse;
/* Configure necessary links, routes */ if (CHECK_FAIL(system("ip link set dev lo up"))) returnfalse; if (CHECK_FAIL(system("ip route add local default dev lo"))) returnfalse; if (CHECK_FAIL(system("ip -6 route add local default dev lo"))) returnfalse;
/* Load qdisc, BPF program */ if (CHECK_FAIL(system("tc qdisc add dev lo clsact"))) returnfalse;
sprintf(tc_cmd, "%s %s %s %s %s", "tc filter add dev lo ingress bpf", "direct-action object-file", prog, "section tc",
(env.verbosity < VERBOSE_VERY) ? " 2>/dev/null" : "verbose"); if (CHECK(system(tc_cmd), "BPF load failed;", "run with -vv for more info\n")) returnfalse;
self_net = open(NS_SELF, O_RDONLY); if (CHECK_FAIL(self_net < 0)) {
perror("Unable to open "NS_SELF); return;
}
if (!configure_stack()) {
perror("configure_stack"); goto cleanup;
}
server_map = bpf_obj_get(SERVER_MAP_PATH); if (CHECK_FAIL(server_map < 0)) {
perror("Unable to open " SERVER_MAP_PATH); goto cleanup;
}
for (i = 0; i < ARRAY_SIZE(tests) && !READ_ONCE(stop); i++) { struct test_sk_cfg *test = &tests[i]; conststruct sockaddr *addr; constint zero = 0; int err;
if (!test__start_subtest(test->name)) continue;
prepare_addr(test->addr, test->family, BIND_PORT, false);
addr = (conststruct sockaddr *)test->addr;
server = start_server_addr(test->type,
(conststruct sockaddr_storage *)addr,
test->len, NULL); if (server == -1) goto close;
err = bpf_map_update_elem(server_map, &zero, &server, BPF_ANY); if (CHECK_FAIL(err)) {
perror("Unable to update server_map"); goto close;
}
/* connect to unbound ports */
prepare_addr(test->addr, test->family, CONNECT_PORT,
test->rewrite_addr); if (run_test(server, addr, test->len, test->type)) goto close;
close(server);
server = -1;
}
close:
close(server);
close(server_map);
cleanup: if (CHECK_FAIL(unlink(SERVER_MAP_PATH)))
perror("Unable to unlink " SERVER_MAP_PATH); if (CHECK_FAIL(setns(self_net, CLONE_NEWNET)))
perror("Failed to setns("NS_SELF")");
close(self_net);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-10-12)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.