selftests/bpf: Add a new cgroup helper get_classid_cgroup_id()
authorYafang Shao <laoar.shao@gmail.com>
Sat, 11 Nov 2023 09:00:32 +0000 (09:00 +0000)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 14 Nov 2023 16:56:56 +0000 (08:56 -0800)
Introduce a new helper function to retrieve the cgroup ID from a net_cls
cgroup directory.

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Link: https://lore.kernel.org/r/20231111090034.4248-5-laoar.shao@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/cgroup_helpers.c
tools/testing/selftests/bpf/cgroup_helpers.h

index f18649a..63bfa72 100644 (file)
@@ -422,26 +422,23 @@ int create_and_get_cgroup(const char *relative_path)
 }
 
 /**
- * get_cgroup_id() - Get cgroup id for a particular cgroup path
- * @relative_path: The cgroup path, relative to the workdir, to join
+ * get_cgroup_id_from_path - Get cgroup id for a particular cgroup path
+ * @cgroup_workdir: The absolute cgroup path
  *
  * On success, it returns the cgroup id. On failure it returns 0,
  * which is an invalid cgroup id.
  * If there is a failure, it prints the error to stderr.
  */
-unsigned long long get_cgroup_id(const char *relative_path)
+unsigned long long get_cgroup_id_from_path(const char *cgroup_workdir)
 {
        int dirfd, err, flags, mount_id, fhsize;
        union {
                unsigned long long cgid;
                unsigned char raw_bytes[8];
        } id;
-       char cgroup_workdir[PATH_MAX + 1];
        struct file_handle *fhp, *fhp2;
        unsigned long long ret = 0;
 
-       format_cgroup_path(cgroup_workdir, relative_path);
-
        dirfd = AT_FDCWD;
        flags = 0;
        fhsize = sizeof(*fhp);
@@ -477,6 +474,14 @@ free_mem:
        return ret;
 }
 
+unsigned long long get_cgroup_id(const char *relative_path)
+{
+       char cgroup_workdir[PATH_MAX + 1];
+
+       format_cgroup_path(cgroup_workdir, relative_path);
+       return get_cgroup_id_from_path(cgroup_workdir);
+}
+
 int cgroup_setup_and_join(const char *path) {
        int cg_fd;
 
@@ -621,3 +626,14 @@ void cleanup_classid_environment(void)
        join_cgroup_from_top(NETCLS_MOUNT_PATH);
        nftw(cgroup_workdir, nftwfunc, WALK_FD_LIMIT, FTW_DEPTH | FTW_MOUNT);
 }
+
+/**
+ * get_classid_cgroup_id - Get the cgroup id of a net_cls cgroup
+ */
+unsigned long long get_classid_cgroup_id(void)
+{
+       char cgroup_workdir[PATH_MAX + 1];
+
+       format_classid_path(cgroup_workdir);
+       return get_cgroup_id_from_path(cgroup_workdir);
+}
index 92fc41d..e71da4e 100644 (file)
@@ -31,6 +31,7 @@ void cleanup_cgroup_environment(void);
 /* cgroupv1 related */
 int set_classid(void);
 int join_classid(void);
+unsigned long long get_classid_cgroup_id(void);
 
 int setup_classid_environment(void);
 void cleanup_classid_environment(void);