int cgroup_get_uid_gid_from_procfs(pid_t pid, uid_t *euid, gid_t *egid);
int cgroup_get_procname_from_procfs(pid_t pid, char **procname);
int cg_mkdir_p(const char *path);
+struct cgroup *create_cgroup_from_name_value_pairs(const char *name,
+ struct control_value *name_value, int nv_number);
/*
cgroup_register_unchanged_process;
cgroup_change_cgroup_flags;
} CGROUP_0.33;
+
+CGROUP_0.35 {
+global:
+ create_cgroup_from_name_value_pairs;
+} CGROUP_0.34;
}
-struct cgroup *copy_name_value_from_rules(int nv_number,
- struct control_value *name_value)
-{
- struct cgroup *src_cgroup;
- struct cgroup_controller *cgc;
- char con[FILENAME_MAX];
-
- int ret;
- int i;
-
- /* create source cgroup */
- src_cgroup = cgroup_new_cgroup("tmp");
- if (!src_cgroup) {
- fprintf(stderr, "can't create cgroup: %s\n",
- cgroup_strerror(ECGFAIL));
- goto scgroup_err;
- }
-
- /* add pairs name-value to
- relevant controllers of this cgroup */
- for (i = 0; i < nv_number; i++) {
-
- if ((strchr(name_value[i].name, '.')) == NULL) {
- fprintf(stderr, "wrong -r parameter (%s=%s)\n",
- name_value[i].name, name_value[i].value);
- goto scgroup_err;
- }
-
- strncpy(con, name_value[i].name, FILENAME_MAX);
- strtok(con, ".");
-
- /* add relevant controller */
- cgc = cgroup_add_controller(src_cgroup, con);
- if (!cgc) {
- fprintf(stderr, "controller %s can't be add\n",
- con);
- goto scgroup_err;
- }
-
- /* add name-value pair to this controller */
- ret = cgroup_add_value_string(cgc,
- name_value[i].name, name_value[i].value);
- if (ret) {
- fprintf(stderr, "name-value pair %s=%s can't be set\n",
- name_value[i].name, name_value[i].value);
- goto scgroup_err;
- }
- }
-
- return src_cgroup;
-scgroup_err:
- cgroup_free(&src_cgroup);
- return NULL;
-}
-
void usage(int status, char *program_name)
{
if (status != 0)
/* copy the name-value pairs from -r options */
if ((flags & FL_RULES) != 0) {
- src_cgroup = copy_name_value_from_rules(nv_number, name_value);
+ src_cgroup = create_cgroup_from_name_value_pairs(
+ "tmp", name_value, nv_number);
if (src_cgroup == NULL)
goto err;
}
return cgroup_add_value_bool(controller, name, value);
}
+
+struct cgroup *create_cgroup_from_name_value_pairs(const char *name,
+ struct control_value *name_value, int nv_number)
+{
+ struct cgroup *src_cgroup;
+ struct cgroup_controller *cgc;
+ char con[FILENAME_MAX];
+
+ int ret;
+ int i;
+
+ /* create source cgroup */
+ src_cgroup = cgroup_new_cgroup(name);
+ if (!src_cgroup) {
+ fprintf(stderr, "can't create cgroup: %s\n",
+ cgroup_strerror(ECGFAIL));
+ goto scgroup_err;
+ }
+
+ /* add pairs name-value to
+ relevant controllers of this cgroup */
+ for (i = 0; i < nv_number; i++) {
+
+ if ((strchr(name_value[i].name, '.')) == NULL) {
+ fprintf(stderr, "wrong -r parameter (%s=%s)\n",
+ name_value[i].name, name_value[i].value);
+ goto scgroup_err;
+ }
+
+ strncpy(con, name_value[i].name, FILENAME_MAX);
+ strtok(con, ".");
+
+ /* add relevant controller */
+ cgc = cgroup_add_controller(src_cgroup, con);
+ if (!cgc) {
+ fprintf(stderr, "controller %s can't be add\n",
+ con);
+ goto scgroup_err;
+ }
+
+ /* add name-value pair to this controller */
+ ret = cgroup_add_value_string(cgc,
+ name_value[i].name, name_value[i].value);
+ if (ret) {
+ fprintf(stderr, "name-value pair %s=%s can't be set\n",
+ name_value[i].name, name_value[i].value);
+ goto scgroup_err;
+ }
+ }
+
+ return src_cgroup;
+scgroup_err:
+ cgroup_free(&src_cgroup);
+ return NULL;
+}