8#ifndef __LIBCG_INTERNAL
10#define __LIBCG_INTERNAL
30#define MAX_MNT_ELEMENTS 16
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 + 3)
75#define CGRP_FILE_PREFIX "cgroup"
78#define CGV2_CONTROLLERS_FILE "cgroup.controllers"
79#define CGV2_SUBTREE_CTRL_FILE "cgroup.subtree_control"
82#define CGV2_CONTROLLERS_LL_MAX 100
84#define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, "Error: " x)
85#define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, "Warning: " x)
86#define cgroup_info(x...) cgroup_log(CGROUP_LOG_INFO, "Info: " x)
87#define cgroup_dbg(x...) cgroup_log(CGROUP_LOG_DEBUG, x)
88#define cgroup_cont(x...) cgroup_log(CGROUP_LOG_CONT, x)
90#define CGRP_DEFAULT_LOGLEVEL CGROUP_LOG_ERROR
92#define max(x, y) ((y) < (x)?(x):(y))
93#define min(x, y) ((y) > (x)?(x):(y))
95#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
98 char name[FILENAME_MAX];
99 char value[CG_CONTROL_VALUE_MAX];
102 char *multiline_value;
114 char name[CONTROL_NAMELEN_MAX];
118 enum cg_version_t version;
122 char name[FILENAME_MAX];
130 mode_t control_fperm;
131 mode_t control_dperm;
135 char path[FILENAME_MAX];
141 char name[CONTROL_NAMELEN_MAX];
148 enum cg_version_t version;
166 char username[LOGIN_NAME_MAX];
167 char destination[FILENAME_MAX];
168 char *controllers[MAX_MNT_ELEMENTS];
204#define CG_DICT_DONT_FREE_ITEMS 1
228extern __thread
int last_errno;
233extern jmp_buf parser_error_env;
236char *cg_build_path(
const char *name,
char *path,
const char *type);
237int cgroup_get_uid_gid_from_procfs(pid_t pid, uid_t *euid, gid_t *egid);
238int cgroup_get_procname_from_procfs(pid_t pid,
char **procname);
239int cg_mkdir_p(
const char *path);
240struct cgroup *create_cgroup_from_name_value_pairs(
const char *name,
242void init_cgroup_table(
struct cgroup *cgrps,
size_t count);
252extern char cg_cgroup_v2_mount_path[FILENAME_MAX];
253extern pthread_rwlock_t cg_mount_table_lock;
258extern __thread
char *cg_namespace_table[CG_CONTROLLER_MAX];
264extern char systemd_default_cgroup[FILENAME_MAX * 2 + 1];
269int cgroup_config_insert_cgroup(
char *cg_name);
270int cgroup_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
271int template_config_insert_cgroup(
char *cg_name);
272int template_config_parse_controller_options(
char *controller,
struct cgroup_dictionary *values);
273int template_config_group_task_perm(
char *perm_type,
char *value);
274int template_config_group_admin_perm(
char *perm_type,
char *value);
275int cgroup_config_group_task_perm(
char *perm_type,
char *value);
276int cgroup_config_group_admin_perm(
char *perm_type,
char *value);
277int cgroup_config_insert_into_mount_table(
char *
name,
char *mount_point);
278int cgroup_config_insert_into_namespace_table(
char *
name,
char *mount_point);
279void cgroup_config_cleanup_mount_table(
void);
280void cgroup_config_cleanup_namespace_table(
void);
281int cgroup_config_define_default(
void);
303extern int cgroup_dictionary_iterator_begin(
struct cgroup_dictionary *dict,
void **handle,
304 const char **
name,
const char **value);
308extern int cgroup_dictionary_iterator_next(
void **handle,
const char **
name,
const char **value);
313extern void cgroup_dictionary_iterator_end(
void **handle);
325int cg_chmod_path(
const char *path, mode_t mode,
int owner_is_umask);
336int cgroup_build_tasks_procs_path(
char *
const path,
size_t path_sz,
const char *
const cg_name,
337 const char *
const ctrl_name);
350char *cg_build_path_locked(
const char *setting,
char *path,
const char *controller);
371int cgroup_test_subsys_mounted(
const char *ctrl_name);
408#define TEST_PROC_PID_CGROUP_FILE "test-procpidcgroup"
410int cgroup_parse_rules_options(
char *options,
struct cgroup_rule *
const rule);
411int cg_get_cgroups_from_proc_cgroups(pid_t pid,
char *cgrp_list[],
char *controller_list[],
413bool cgroup_compare_ignore_rule(
const struct cgroup_rule *
const rule, pid_t pid,
414 const char *
const procname);
415bool cgroup_compare_wildcard_procname(
const char *
const rule_procname,
416 const char *
const procname);
417int cgroup_process_v1_mnt(
char *controllers[],
struct mntent *ent,
int *mnt_tbl_idx);
418int cgroup_process_v2_mnt(
struct mntent *ent,
int *mnt_tbl_idx);
419int cgroup_set_values_recursive(
const char *
const base,
421 bool ignore_non_dirty_failures);
422int cgroup_chown_chmod_tasks(
const char *
const cg_path, uid_t uid, gid_t gid, mode_t fperm);
423int cgroupv2_subtree_control(
const char *path,
const char *ctrl_name,
bool enable);
424int cgroupv2_get_subtree_control(
const char *path,
const char *ctrl_name,
bool *
const enabled);
425int cgroupv2_controller_enabled(
const char *
const cg_name,
const char *
const ctrl_name);
426int get_next_rule_field(
char *rule,
char *field,
size_t field_len,
bool expect_quotes);
Definition libcgroup-internal.h:134
Definition libcgroup-internal.h:139
struct cg_mount_point mount
Definition libcgroup-internal.h:145
char name[CONTROL_NAMELEN_MAX]
Definition libcgroup-internal.h:141
Definition libcgroup-internal.h:113
Definition libcgroup-internal.h:192
Definition libcgroup-internal.h:221
Definition libcgroup-internal.h:214
Definition libcgroup-internal.h:173
Definition libcgroup-internal.h:161
Definition libcgroup-internal.h:151
Definition libcgroup-internal.h:180
Definition libcgroup-internal.h:121
Definition libcgroup-internal.h:97