Commit f744d35e authored by Yafang Shao's avatar Yafang Shao Committed by Alexei Starovoitov

selftests/bpf: Add parallel support for classid

Include the current pid in the classid cgroup path. This way, different
testers relying on classid-based configurations will have distinct classid
cgroup directories, enabling them to run concurrently. Additionally, we
leverage the current pid as the classid, ensuring unique identification.
Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
Link: https://lore.kernel.org/r/20231111090034.4248-4-laoar.shao@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 48497755
...@@ -45,9 +45,12 @@ ...@@ -45,9 +45,12 @@
#define format_parent_cgroup_path(buf, path) \ #define format_parent_cgroup_path(buf, path) \
format_cgroup_path_pid(buf, path, getppid()) format_cgroup_path_pid(buf, path, getppid())
#define format_classid_path(buf) \ #define format_classid_path_pid(buf, pid) \
snprintf(buf, sizeof(buf), "%s%s", NETCLS_MOUNT_PATH, \ snprintf(buf, sizeof(buf), "%s%s%d", NETCLS_MOUNT_PATH, \
CGROUP_WORK_DIR) CGROUP_WORK_DIR, pid)
#define format_classid_path(buf) \
format_classid_path_pid(buf, getpid())
static __thread bool cgroup_workdir_mounted; static __thread bool cgroup_workdir_mounted;
...@@ -551,15 +554,16 @@ int setup_classid_environment(void) ...@@ -551,15 +554,16 @@ int setup_classid_environment(void)
/** /**
* set_classid() - Set a cgroupv1 net_cls classid * set_classid() - Set a cgroupv1 net_cls classid
* @id: the numeric classid
* *
* Writes the passed classid into the cgroup work dir's net_cls.classid * Writes the classid into the cgroup work dir's net_cls.classid
* file in order to later on trigger socket tagging. * file in order to later on trigger socket tagging.
* *
* We leverage the current pid as the classid, ensuring unique identification.
*
* On success, it returns 0, otherwise on failure it returns 1. If there * On success, it returns 0, otherwise on failure it returns 1. If there
* is a failure, it prints the error to stderr. * is a failure, it prints the error to stderr.
*/ */
int set_classid(unsigned int id) int set_classid(void)
{ {
char cgroup_workdir[PATH_MAX - 42]; char cgroup_workdir[PATH_MAX - 42];
char cgroup_classid_path[PATH_MAX + 1]; char cgroup_classid_path[PATH_MAX + 1];
...@@ -575,7 +579,7 @@ int set_classid(unsigned int id) ...@@ -575,7 +579,7 @@ int set_classid(unsigned int id)
return 1; return 1;
} }
if (dprintf(fd, "%u\n", id) < 0) { if (dprintf(fd, "%u\n", getpid()) < 0) {
log_err("Setting cgroup classid"); log_err("Setting cgroup classid");
rc = 1; rc = 1;
} }
......
...@@ -29,7 +29,7 @@ int setup_cgroup_environment(void); ...@@ -29,7 +29,7 @@ int setup_cgroup_environment(void);
void cleanup_cgroup_environment(void); void cleanup_cgroup_environment(void);
/* cgroupv1 related */ /* cgroupv1 related */
int set_classid(unsigned int id); int set_classid(void);
int join_classid(void); int join_classid(void);
int setup_classid_environment(void); int setup_classid_environment(void);
......
...@@ -71,7 +71,7 @@ void test_cgroup_v1v2(void) ...@@ -71,7 +71,7 @@ void test_cgroup_v1v2(void)
} }
ASSERT_OK(run_test(cgroup_fd, server_fd, false), "cgroup-v2-only"); ASSERT_OK(run_test(cgroup_fd, server_fd, false), "cgroup-v2-only");
setup_classid_environment(); setup_classid_environment();
set_classid(42); set_classid();
ASSERT_OK(run_test(cgroup_fd, server_fd, true), "cgroup-v1v2"); ASSERT_OK(run_test(cgroup_fd, server_fd, true), "cgroup-v1v2");
cleanup_classid_environment(); cleanup_classid_environment();
close(server_fd); close(server_fd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment