8#ifndef __LIBCG_INTERNAL
10#define __LIBCG_INTERNAL
31#define MAX_MNT_ELEMENTS 17
32#define MAX_GROUP_ELEMENTS 128
34#define CG_CONTROL_VALUE_MAX 4096
37#define CG_CONTROLLER_MAX 100
38#define CG_OPTIONS_MAX 100
44#define CG_HIER_MAX CG_CONTROLLER_MAX
46#define CONTROL_NAMELEN_MAX 32
49#define CGRULE_INVALID ((uid_t) -1)
50#define CGRULE_WILD ((uid_t) -2)
52#define CGRULE_SUCCESS_STORE_PID "SUCCESS_STORE_PID"
54#define CGRULE_OPTION_IGNORE "ignore"
55#define CGRULE_OPTION_IGNORE_RT "ignore_rt"
56#define CGRULE_OPT_IGNORE 1
57#define CGRULE_OPT_IGNORE_RT 2
59#define CGCONFIG_CONF_FILE "/etc/cgconfig.conf"
61#define CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE 4
62#define CGCONFIG_CONF_DIR "/etc/cgconfig.d"
64#define CGRULES_CONF_FILE "/etc/cgrules.conf"
65#define CGRULES_CONF_DIR "/etc/cgrules.d"
66#define CGRULES_MAX_FIELDS_PER_LINE 3
68#define CGRP_BUFFER_LEN (5 * FILENAME_MAX)
71#define CGRP_RULE_MAXKEY (LOGIN_NAME_MAX + FILENAME_MAX + 1)
74#define CGRP_RULE_MAXLINE (FILENAME_MAX + CGRP_RULE_MAXKEY + CG_CONTROLLER_MAX + \
77#define CGRP_FILE_PREFIX "cgroup"
80#define CGV2_CONTROLLERS_FILE "cgroup.controllers"
81#define CGV2_SUBTREE_CTRL_FILE "cgroup.subtree_control"
84#define CGV2_CONTROLLERS_LL_MAX 100
86#define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, "Error: " x)
87#define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, "Warning: " x)
88#define cgroup_info(x...) cgroup_log(CGROUP_LOG_INFO, "Info: " x)
89#define cgroup_dbg(x...) cgroup_log(CGROUP_LOG_DEBUG, x)
90#define cgroup_cont(x...) cgroup_log(CGROUP_LOG_CONT, x)
92#define CGRP_DEFAULT_LOGLEVEL CGROUP_LOG_ERROR
94#define max(x, y) ((y) < (x)?(x):(y))
95#define min(x, y) ((y) > (x)?(x):(y))
97#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
100 char name[FILENAME_MAX];
101 char value[CG_CONTROL_VALUE_MAX];
104 char *multiline_value;
116 char name[CONTROL_NAMELEN_MAX];
120 enum cg_version_t version;
124 char name[FILENAME_MAX];
132 mode_t control_fperm;
133 mode_t control_dperm;
137 char path[FILENAME_MAX];
143 char name[CONTROL_NAMELEN_MAX];
150 enum cg_version_t version;
168 char username[LOGIN_NAME_MAX];
169 char destination[FILENAME_MAX];
170 char *controllers[MAX_MNT_ELEMENTS];
206#define CG_DICT_DONT_FREE_ITEMS 1
230extern __thread
int last_errno;
235extern jmp_buf parser_error_env;
238char *cg_build_path(
const char *name,
char *path,
const char *type);
239int cgroup_get_uid_gid_from_procfs(pid_t pid, uid_t *euid, gid_t *egid);
240int cgroup_get_procname_from_procfs(pid_t pid,
char **procname);
241int cg_mkdir_p(
const char *path);
242struct cgroup *create_cgroup_from_name_value_pairs(
const char *name,
244void init_cgroup_table(
struct cgroup *cgrps,
size_t count);
254extern char cg_cgroup_v2_mount_path[FILENAME_MAX];
255extern pthread_rwlock_t cg_mount_table_lock;
260extern __thread
char *cg_namespace_table[CG_CONTROLLER_MAX];
266extern char systemd_default_cgroup[FILENAME_MAX * 2 + 1];
271int cgroup_config_insert_cgroup(
char *cg_name);
272int cgroup_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
273int template_config_insert_cgroup(
char *cg_name);
274int template_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
275int template_config_group_task_perm(
char *perm_type,
char *value);
276int template_config_group_admin_perm(
char *perm_type,
char *value);
277int cgroup_config_group_task_perm(
char *perm_type,
char *value);
278int cgroup_config_group_admin_perm(
char *perm_type,
char *value);
279int cgroup_config_insert_into_mount_table(
char *
name,
char *mount_point);
280int cgroup_config_insert_into_namespace_table(
char *
name,
char *mount_point);
281void cgroup_config_cleanup_mount_table(
void);
282void cgroup_config_cleanup_namespace_table(
void);
283int cgroup_config_define_default(
void);
305extern int cgroup_dictionary_iterator_begin(
struct cgroup_dictionary *dict,
void **handle,
306 const char **
name,
const char **value);
310extern int cgroup_dictionary_iterator_next(
void **handle,
const char **
name,
const char **value);
315extern void cgroup_dictionary_iterator_end(
void **handle);
327int cg_chmod_path(
const char *path, mode_t mode,
int owner_is_umask);
338int cgroup_build_tasks_procs_path(
char *
const path,
size_t path_sz,
const char *
const cg_name,
339 const char *
const ctrl_name);
352char *cg_build_path_locked(
const char *setting,
char *path,
const char *controller);
373int cgroup_test_subsys_mounted(
const char *ctrl_name);
410#define TEST_PROC_PID_CGROUP_FILE "test-procpidcgroup"
412int cgroup_parse_rules_options(
char *options,
struct cgroup_rule *
const rule);
413int cg_get_cgroups_from_proc_cgroups(pid_t pid,
char *cgrp_list[],
char *controller_list[],
415bool cgroup_compare_ignore_rule(
const struct cgroup_rule *
const rule, pid_t pid,
416 const char *
const procname);
417bool cgroup_compare_wildcard_procname(
const char *
const rule_procname,
418 const char *
const procname);
419int cgroup_process_v1_mnt(
char *controllers[],
struct mntent *ent,
int *mnt_tbl_idx);
420int cgroup_process_v2_mnt(
struct mntent *ent,
int *mnt_tbl_idx);
421int cgroup_set_values_recursive(
const char *
const base,
423 bool ignore_non_dirty_failures);
424int cgroup_chown_chmod_tasks(
const char *
const cg_path, uid_t uid, gid_t gid, mode_t fperm);
425int cgroupv2_subtree_control(
const char *path,
const char *ctrl_name,
bool enable);
426int cgroupv2_get_subtree_control(
const char *path,
const char *ctrl_name,
bool *
const enabled);
427int cgroupv2_controller_enabled(
const char *
const cg_name,
const char *
const ctrl_name);
428int get_next_rule_field(
char *rule,
char *field,
size_t field_len,
bool expect_quotes);
Definition libcgroup-internal.h:136
Definition libcgroup-internal.h:141
struct cg_mount_point mount
Definition libcgroup-internal.h:147
char name[CONTROL_NAMELEN_MAX]
Definition libcgroup-internal.h:143
Definition libcgroup-internal.h:115
Definition libcgroup-internal.h:194
Definition libcgroup-internal.h:223
Definition libcgroup-internal.h:216
Definition libcgroup-internal.h:175
Definition libcgroup-internal.h:163
Definition libcgroup-internal.h:153
Definition libcgroup-internal.h:182
Definition libcgroup-internal.h:123
Definition libcgroup-internal.h:99