8#ifndef __LIBCG_INTERNAL
10#define __LIBCG_INTERNAL
30#define MAX_MNT_ELEMENTS 17
31#define MAX_GROUP_ELEMENTS 128
33#define CG_CONTROL_VALUE_MAX 4096
36#define CG_CONTROLLER_MAX 100
37#define CG_OPTIONS_MAX 100
43#define CG_HIER_MAX CG_CONTROLLER_MAX
45#define CONTROL_NAMELEN_MAX 32
48#define CGRULE_INVALID ((uid_t) -1)
49#define CGRULE_WILD ((uid_t) -2)
51#define CGRULE_SUCCESS_STORE_PID "SUCCESS_STORE_PID"
53#define CGRULE_OPTION_IGNORE "ignore"
54#define CGRULE_OPTION_IGNORE_RT "ignore_rt"
55#define CGRULE_OPT_IGNORE 1
56#define CGRULE_OPT_IGNORE_RT 2
58#define CGCONFIG_CONF_FILE "/etc/cgconfig.conf"
60#define CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE 4
61#define CGCONFIG_CONF_DIR "/etc/cgconfig.d"
63#define CGRULES_CONF_FILE "/etc/cgrules.conf"
64#define CGRULES_CONF_DIR "/etc/cgrules.d"
65#define CGRULES_MAX_FIELDS_PER_LINE 3
67#define CGRP_BUFFER_LEN (5 * FILENAME_MAX)
70#define CGRP_RULE_MAXKEY (LOGIN_NAME_MAX + FILENAME_MAX + 1)
73#define CGRP_RULE_MAXLINE (FILENAME_MAX + CGRP_RULE_MAXKEY + CG_CONTROLLER_MAX + \
76#define CGRP_FILE_PREFIX "cgroup"
79#define CGV2_CONTROLLERS_FILE "cgroup.controllers"
80#define CGV2_SUBTREE_CTRL_FILE "cgroup.subtree_control"
83#define CGV2_CONTROLLERS_LL_MAX 100
85#define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, "Error: " x)
86#define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, "Warning: " x)
87#define cgroup_info(x...) cgroup_log(CGROUP_LOG_INFO, "Info: " x)
88#define cgroup_dbg(x...) cgroup_log(CGROUP_LOG_DEBUG, x)
89#define cgroup_cont(x...) cgroup_log(CGROUP_LOG_CONT, x)
91#define CGRP_DEFAULT_LOGLEVEL CGROUP_LOG_ERROR
93#define max(x, y) ((y) < (x)?(x):(y))
94#define min(x, y) ((y) > (x)?(x):(y))
96#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
99 char name[FILENAME_MAX];
100 char value[CG_CONTROL_VALUE_MAX];
103 char *multiline_value;
115 char name[CONTROL_NAMELEN_MAX];
119 enum cg_version_t version;
123 char name[FILENAME_MAX];
131 mode_t control_fperm;
132 mode_t control_dperm;
136 char path[FILENAME_MAX];
142 char name[CONTROL_NAMELEN_MAX];
149 enum cg_version_t version;
167 char username[LOGIN_NAME_MAX];
168 char destination[FILENAME_MAX];
169 char *controllers[MAX_MNT_ELEMENTS];
205#define CG_DICT_DONT_FREE_ITEMS 1
229extern __thread
int last_errno;
234extern jmp_buf parser_error_env;
237char *cg_build_path(
const char *name,
char *path,
const char *type);
238int cgroup_get_uid_gid_from_procfs(pid_t pid, uid_t *euid, gid_t *egid);
239int cgroup_get_procname_from_procfs(pid_t pid,
char **procname);
240int cg_mkdir_p(
const char *path);
241struct cgroup *create_cgroup_from_name_value_pairs(
const char *name,
243void init_cgroup_table(
struct cgroup *cgrps,
size_t count);
253extern char cg_cgroup_v2_mount_path[FILENAME_MAX];
254extern pthread_rwlock_t cg_mount_table_lock;
259extern __thread
char *cg_namespace_table[CG_CONTROLLER_MAX];
265extern char systemd_default_cgroup[FILENAME_MAX * 2 + 1];
270int cgroup_config_insert_cgroup(
char *cg_name);
271int cgroup_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
272int template_config_insert_cgroup(
char *cg_name);
273int template_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
274int template_config_group_task_perm(
char *perm_type,
char *value);
275int template_config_group_admin_perm(
char *perm_type,
char *value);
276int cgroup_config_group_task_perm(
char *perm_type,
char *value);
277int cgroup_config_group_admin_perm(
char *perm_type,
char *value);
278int cgroup_config_insert_into_mount_table(
char *
name,
char *mount_point);
279int cgroup_config_insert_into_namespace_table(
char *
name,
char *mount_point);
280void cgroup_config_cleanup_mount_table(
void);
281void cgroup_config_cleanup_namespace_table(
void);
282int cgroup_config_define_default(
void);
304extern int cgroup_dictionary_iterator_begin(
struct cgroup_dictionary *dict,
void **handle,
305 const char **
name,
const char **value);
309extern int cgroup_dictionary_iterator_next(
void **handle,
const char **
name,
const char **value);
314extern void cgroup_dictionary_iterator_end(
void **handle);
326int cg_chmod_path(
const char *path, mode_t mode,
int owner_is_umask);
337int cgroup_build_tasks_procs_path(
char *
const path,
size_t path_sz,
const char *
const cg_name,
338 const char *
const ctrl_name);
351char *cg_build_path_locked(
const char *setting,
char *path,
const char *controller);
372int cgroup_test_subsys_mounted(
const char *ctrl_name);
409#define TEST_PROC_PID_CGROUP_FILE "test-procpidcgroup"
411int cgroup_parse_rules_options(
char *options,
struct cgroup_rule *
const rule);
412int cg_get_cgroups_from_proc_cgroups(pid_t pid,
char *cgrp_list[],
char *controller_list[],
414bool cgroup_compare_ignore_rule(
const struct cgroup_rule *
const rule, pid_t pid,
415 const char *
const procname);
416bool cgroup_compare_wildcard_procname(
const char *
const rule_procname,
417 const char *
const procname);
418int cgroup_process_v1_mnt(
char *controllers[],
struct mntent *ent,
int *mnt_tbl_idx);
419int cgroup_process_v2_mnt(
struct mntent *ent,
int *mnt_tbl_idx);
420int cgroup_set_values_recursive(
const char *
const base,
422 bool ignore_non_dirty_failures);
423int cgroup_chown_chmod_tasks(
const char *
const cg_path, uid_t uid, gid_t gid, mode_t fperm);
424int cgroupv2_subtree_control(
const char *path,
const char *ctrl_name,
bool enable);
425int cgroupv2_get_subtree_control(
const char *path,
const char *ctrl_name,
bool *
const enabled);
426int cgroupv2_controller_enabled(
const char *
const cg_name,
const char *
const ctrl_name);
427int get_next_rule_field(
char *rule,
char *field,
size_t field_len,
bool expect_quotes);
Definition libcgroup-internal.h:135
Definition libcgroup-internal.h:140
struct cg_mount_point mount
Definition libcgroup-internal.h:146
char name[CONTROL_NAMELEN_MAX]
Definition libcgroup-internal.h:142
Definition libcgroup-internal.h:114
Definition libcgroup-internal.h:193
Definition libcgroup-internal.h:222
Definition libcgroup-internal.h:215
Definition libcgroup-internal.h:174
Definition libcgroup-internal.h:162
Definition libcgroup-internal.h:152
Definition libcgroup-internal.h:181
Definition libcgroup-internal.h:122
Definition libcgroup-internal.h:98