Its handy to not have to setup a cgroup environment when running test_sockmap with user specified options. This patch setups a cgroup environment, similar to how it is done with the auto test suite, when the user does not provide a cgroup arg. Signed-off-by: John Fastabend <john.fastabend@xxxxxxxxx> --- tools/testing/selftests/bpf/test_sockmap.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c index 3845144e2c91..11dfb1f10e15 100644 --- a/tools/testing/selftests/bpf/test_sockmap.c +++ b/tools/testing/selftests/bpf/test_sockmap.c @@ -1734,6 +1734,7 @@ int main(int argc, char **argv) int opt, longindex, err, cg_fd = 0; char *bpf_file = BPF_SOCKMAP_FILENAME; int test = PING_PONG; + bool cleanup = true; if (argc < 2) return test_suite(-1); @@ -1773,6 +1774,7 @@ int main(int argc, char **argv) cg_fd, optarg); return cg_fd; } + cleanup = false; break; case 'r': rate = atoi(optarg); @@ -1818,9 +1820,23 @@ int main(int argc, char **argv) return test_suite(cg_fd); if (!cg_fd) { - fprintf(stderr, "%s requires cgroup option: --cgroup <path>\n", - argv[0]); - return -1; + if (setup_cgroup_environment()) { + fprintf(stderr, "ERROR: cgroup env failed\n"); + return -EINVAL; + } + + cg_fd = create_and_get_cgroup(CG_PATH); + if (cg_fd < 0) { + fprintf(stderr, + "ERROR: (%i) open cg path failed: %s\n", + cg_fd, optarg); + return cg_fd; + } + + if (join_cgroup(CG_PATH)) { + fprintf(stderr, "ERROR: failed to join cgroup\n"); + return -EINVAL; + } } err = populate_progs(bpf_file); @@ -1839,6 +1855,8 @@ int main(int argc, char **argv) options.rate = rate; err = run_options(&options, cg_fd, test); + if (cleanup) + cleanup_cgroup_environment(); close(cg_fd); return err; }