NetworkManager/shared/n-acd/src/test.h

214 lines
5.3 KiB
C
Raw Normal View History

#pragma once
/*
* Test Helpers
* Bunch of helpers to setup the environment for networking tests. This
* includes net-namespace setups, veth setups, and more.
*/
#undef NDEBUG
#include <assert.h>
#include <c-stdaux.h>
#include <endian.h>
#include <errno.h>
#include <fcntl.h>
#include <net/ethernet.h>
#include <net/if.h>
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
#include <sys/socket.h>
#include <netinet/in.h>
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
#include <arpa/inet.h>
#include <poll.h>
#include <sched.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/resource.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "n-acd.h"
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
static inline void test_add_child_ip(const struct in_addr *addr) {
char *p;
int r;
r = asprintf(&p, "ip addr add dev veth1 %s/8", inet_ntoa(*addr));
c_assert(r >= 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
r = system(p);
c_assert(r >= 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
free(p);
}
static inline void test_del_child_ip(const struct in_addr *addr) {
char *p;
int r;
r = asprintf(&p, "ip addr del dev veth1 %s/8", inet_ntoa(*addr));
c_assert(r >= 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
r = system(p);
c_assert(r >= 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
free(p);
}
static inline void test_if_query(const char *name, int *indexp, struct ether_addr *macp) {
struct ifreq ifr = {};
size_t l;
int r, s;
l = strlen(name);
c_assert(l <= IF_NAMESIZE);
if (indexp) {
*indexp = if_nametoindex(name);
c_assert(*indexp > 0);
}
if (macp) {
s = socket(AF_INET, SOCK_DGRAM, 0);
c_assert(s >= 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
strncpy(ifr.ifr_name, name, l + 1);
r = ioctl(s, SIOCGIFHWADDR, &ifr);
c_assert(r >= 0);
memcpy(macp->ether_addr_octet, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
close(s);
}
}
static inline void test_veth_cmd(int ifindex, const char *cmd) {
char *p, name[IF_NAMESIZE + 1] = {};
int r;
p = if_indextoname(ifindex, name);
c_assert(p);
r = asprintf(&p, "ip link set %s %s", name, cmd);
c_assert(r >= 0);
/* Again: Ewwww... */
r = system(p);
c_assert(r == 0);
free(p);
}
static inline void test_veth_new(int *parent_indexp,
struct ether_addr *parent_macp,
int *child_indexp,
struct ether_addr *child_macp) {
int r;
/* Eww... but it works. */
r = system("ip link add type veth");
c_assert(r == 0);
r = system("ip link set veth0 up");
c_assert(r == 0);
r = system("ip link set veth1 up");
c_assert(r == 0);
test_if_query("veth0", parent_indexp, parent_macp);
test_if_query("veth1", child_indexp, child_macp);
}
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
static inline void test_loopback_up(int *indexp, struct ether_addr *macp) {
int r;
r = system("ip link set lo up");
c_assert(r == 0);
Squashed 'shared/n-acd/' changes from a68b55992..a40949267 a40949267 build: add CI run without ebpf 044db2056 n-acd: drop redundant headers 6a391cd83 n-acd: fix build without eBPF bb194cf09 n-acd/config: make transport mandatory ec2865743 build: drop unused c-sundry 721d9d84f n-acd: inline c_container_of() 1a7ee317c util/timer: fix coding-style 6c96f926b util/timer: fall back to CLOCK_MONOTONIC if necessary 4ea3165fc n-acd: only use CLOCK_BOOTTIME if really necessary c1b853c6c util/timer: cleanup headers b1d6ad272 n-acd: add destructors that return void 185be55b6 test-bpf: skip test in case of unsufficient privs 84a40e8fa build: add NEWS file bf11443ff build: mention mailinglist in readme e2797984a test-bpf: drop bpf-filter.h 668ed3c82 subprojects: pull in updates dd8cab3f0 test-veth: reduce parallel execution to 9 68b09ba2b build: update AUTHORS 3f77e3e88 test: make function headers valid C 5275a5120 test: get rid of spurious tab 037df412c n-acd: make struct initializers valid C 346ec0c67 build: upgrade CI 38682a36d n-acd: fix signed vs unsigned comparison 5e7578b33 bpf: properly zero out trailing bpf_attr space ee1e432ae probe: fix coding-style a143540f9 build: use lower-case build options 835533e7d build: minor style fixes 2bd6d1d29 build: get rid of tabs b14979934 eBPF: make compile-time optional 6f13c27ee n-acd: filter out invalid packets 4e6a169a0 build: sync with c-util repositories 6c4a9117b build: document eBPF kernel requirement 3ef08394d n-acd: don't remember dropped defense attempts 4dff8771f n-acd: fix coding-style b11fb9706 n-acd/config: default to the RFC-specified timeout d885bb3b7 n-acd/event: don't expose the type of operation that caused a conflict e2f87e047 TODO: drop remaining items f06993856 test/veth: reduce the number of probed addresses 8b4f7ed64 test/veth: bump the timeout a bit 14e4606f6 n-acd/probe: don't cap the jitter at 4s a0247b86f test/veth: fix stackvariable corruption a64ac8389 n-acd/probe: update comments aa9c25bc1 n-acd/handle_timeout: update comments b6c2df3a9 timer: rename timer_pop() to timer_pop_timeout() 47c657a8d test: fix handling of child addresses 27168ba9e timer: move timer_read() from n-acd.c to util/timer.c 21a1e37aa timer: require timer to be explicitly rearmed ee1080820 bpf/map: make key/value sizes self-documenting fd444353e test/veth: rework test ba2bc433c test: rework child_ip() helper 07881b8da test: silence a warning 38da00b0a test/bpf: make tests for map modifications more comprehensive 6a2ffd23a test/timerfd: for documentation purposes verify the kernel API 01a9cf54b probe: move from ms to ns internally 4fe438dd9 n-acd: move to use the Timer utility library e098cfc79 util: add a timer utility helper 8ea196e5b subprojects: pull in c-sundry 0c0b3c29f acd/probe: do not subscribe to packets in FAILED state 9c922ea3d acd/probe: introduce probe_{un,}link() helpers 024a830e6 acd/probe: use unschedule() helper in free() b098a3bcc tests/veth: minor fixes to the test fe3d9578a acd/packet: consider unexpected packets a fatal error 34d7656d7 acd: stop state-machine after USED or CONFLICT events 7d9e5ec6b acd: don't declare iovec entries inline 7afd8d8a3 tests: add veth test 26a737b42 tests/veth: add helper for adding IP addresses to child device e73a37a11 probe: store a userdata pointer in the probe object 327e82625 test: introduce loopback helper 0682b15f8 acd: reduce default map size afead881f tests: reinstate loopback test 4527d2f71 BPF: move and document the eBPF helpers 88bacc022 socket filter: move to the new eBPF helpers 245104d5c tests: skip tests if lacking permissions 195d9ff5a n-acd: rework API to support many probes on a context ab440eb99 eBPF: never return packets that userspace should unconditionally drop ac933f412 eBPF: add eBPF helper functions git-subtree-dir: shared/n-acd git-subtree-split: a40949267923c45cb232fa4c1d60eafacee4b36e
2018-09-18 15:14:49 +02:00
test_if_query("lo", indexp, macp);
}
static inline void test_raise_memlock(void) {
const size_t wanted = 64 * 1024 * 1024;
struct rlimit get, set;
int r;
r = getrlimit(RLIMIT_MEMLOCK, &get);
c_assert(!r);
/* try raising limit to @wanted */
set.rlim_cur = wanted;
set.rlim_max = (wanted > get.rlim_max) ? wanted : get.rlim_max;
r = setrlimit(RLIMIT_MEMLOCK, &set);
if (r) {
c_assert(errno == EPERM);
/* not privileged to raise limit, so maximize soft limit */
set.rlim_cur = get.rlim_max;
set.rlim_max = get.rlim_max;
r = setrlimit(RLIMIT_MEMLOCK, &set);
c_assert(!r);
}
}
static inline void test_unshare_user_namespace(void) {
uid_t euid;
gid_t egid;
int r, fd;
/*
* Enter a new user namespace as root:root.
*/
euid = geteuid();
egid = getegid();
r = unshare(CLONE_NEWUSER);
c_assert(r >= 0);
fd = open("/proc/self/uid_map", O_WRONLY);
c_assert(fd >= 0);
r = dprintf(fd, "0 %d 1\n", euid);
c_assert(r >= 0);
close(fd);
fd = open("/proc/self/setgroups", O_WRONLY);
c_assert(fd >= 0);
r = dprintf(fd, "deny");
c_assert(r >= 0);
close(fd);
fd = open("/proc/self/gid_map", O_WRONLY);
c_assert(fd >= 0);
r = dprintf(fd, "0 %d 1\n", egid);
c_assert(r >= 0);
close(fd);
}
static inline void test_setup(void) {
int r;
/*
* Move into a new network and mount namespace both associated
* with a new user namespace where the current eUID is mapped to
* 0. Then create a a private instance of /run/netns. This ensures
* that any network devices or network namespaces are private to
* the test process.
*/
test_raise_memlock();
test_unshare_user_namespace();
r = unshare(CLONE_NEWNET | CLONE_NEWNS);
c_assert(r >= 0);
r = mount(NULL, "/", "", MS_PRIVATE | MS_REC, NULL);
c_assert(r >= 0);
r = mount(NULL, "/run", "tmpfs", 0, NULL);
c_assert(r >= 0);
r = mkdir("/run/netns", 0755);
c_assert(r >= 0);
}