libcgroup
Loading...
Searching...
No Matches
groups.h
1/* SPDX-License-Identifier: LGPL-2.1-only */
2#ifndef _LIBCGROUP_GROUPS_H
3#define _LIBCGROUP_GROUPS_H
4
5#ifndef _LIBCGROUP_H_INSIDE
6#error "Only <libcgroup.h> should be included directly."
7#endif
8
9#ifndef SWIG
10#include <features.h>
11#include <sys/types.h>
12#include <stdbool.h>
13#endif
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19enum cg_version_t {
20 CGROUP_UNK = 0,
21 CGROUP_V1,
22 CGROUP_V2,
23 CGROUP_DISK = 0xFF,
24};
25
26enum cg_setup_mode_t {
27 CGROUP_MODE_UNK = 0,
28 CGROUP_MODE_LEGACY,
29 CGROUP_MODE_HYBRID,
30 CGROUP_MODE_UNIFIED,
31};
32
36enum cgroup_delete_flag {
40 CGFLAG_DELETE_IGNORE_MIGRATION = 1,
41
45 CGFLAG_DELETE_RECURSIVE = 2,
46
52 CGFLAG_DELETE_EMPTY_ONLY = 4,
53};
54
125struct cgroup;
126
134struct cgroup_controller;
135
139#define NO_PERMS (-1U)
140
144#define NO_UID_GID (-1U)
145
156struct cgroup *cgroup_new_cgroup(const char *name);
157
166struct cgroup_controller *cgroup_add_controller(struct cgroup *cgrp, const char *name);
167
175int cgroup_add_all_controllers(struct cgroup *cgrp);
176
177
185struct cgroup_controller *cgroup_get_controller(struct cgroup *cgrp, const char *name);
186
192void cgroup_free(struct cgroup **cgrp);
193
199void cgroup_free_controllers(struct cgroup *cgrp);
200
224int cgroup_create_cgroup(struct cgroup *cgrp, int ignore_ownership);
225
247int cgroup_create_cgroup_from_parent(struct cgroup *cgrp, int ignore_ownership);
248
256int cgroup_modify_cgroup(struct cgroup *cgrp);
257
272int cgroup_delete_cgroup(struct cgroup *cgrp, int ignore_migration);
273
288int cgroup_delete_cgroup_ext(struct cgroup *cgrp, int flags);
289
317int cgroup_get_cgroup(struct cgroup *cgrp);
318
327int cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src);
328
340int cgroup_compare_cgroup(struct cgroup *cgrp_a, struct cgroup *cgrp_b);
341
342
353
367int cgroup_set_uid_gid(struct cgroup *cgrp, uid_t tasks_uid, gid_t tasks_gid,
368 uid_t control_uid, gid_t control_gid);
369
375int cgroup_get_uid_gid(struct cgroup *cgrp, uid_t *tasks_uid,
376 gid_t *tasks_gid, uid_t *control_uid,
377 gid_t *control_gid);
378
391void cgroup_set_permissions(struct cgroup *cgrp,
392 mode_t control_dperm, mode_t control_fperm,
393 mode_t task_fperm);
394
415int cgroup_add_value_string(struct cgroup_controller *controller,
416 const char *name, const char *value);
417
429int cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value);
430
440int cgroup_add_value_uint64(struct cgroup_controller *controller,
441 const char *name, u_int64_t value);
442
452int cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value);
453
469int cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value);
478int cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value);
479
488int cgroup_get_value_uint64(struct cgroup_controller *controller,
489 const char *name, u_int64_t *value);
490
499int cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value);
500
509int cgroup_set_value_string(struct cgroup_controller *controller,
510 const char *name, const char *value);
511
522int cgroup_set_value_int64(struct cgroup_controller *controller,
523 const char *name, int64_t value);
532int cgroup_set_value_uint64(struct cgroup_controller *controller,
533 const char *name, u_int64_t value);
534
543int cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value);
544
554int cgroup_get_value_name_count(struct cgroup_controller *controller);
555
568char *cgroup_get_value_name(struct cgroup_controller *controller, int index);
569
579int cgroup_get_procs(const char *name, const char *controller, pid_t **pids, int *size);
580
590int cgroup_get_threads(const char *name, const char *controller, pid_t **pids, int *size);
591
600int cg_chmod_recursive(struct cgroup *cgrp, mode_t dir_mode,
601 int dirm_change, mode_t file_mode, int filem_change);
602
607char *cgroup_get_cgroup_name(struct cgroup *cgrp);
608
609/*
610 * Convert from one cgroup version to another version
611 *
612 * @param out_cgroup Destination cgroup
613 * @param out_version Destination cgroup version
614 * @param in_cgroup Source cgroup
615 * @param in_version Source cgroup version, only used if set to v1 or v2
616 *
617 * @return 0 on success
618 * ECGFAIL conversion failed
619 * ECGCONTROLLERNOTEQUAL incorrect controller version provided
620 */
621int cgroup_convert_cgroup(struct cgroup * const out_cgrp,
622 enum cg_version_t out_version,
623 const struct cgroup * const in_cgrp,
624 enum cg_version_t in_version);
625
634int cgroup_list_mount_points(const enum cg_version_t cgrp_version, char ***mount_paths);
635
643int cgroup_get_controller_version(const char * const controller, enum cg_version_t * const version);
644
650enum cg_setup_mode_t cgroup_setup_mode(void);
651
659int cgroup_get_controller_count(struct cgroup *cgrp);
660
667struct cgroup_controller *cgroup_get_controller_by_index(struct cgroup *cgrp, int index);
668
675char *cgroup_get_controller_name(struct cgroup_controller *controller);
676
681bool is_cgroup_mode_legacy(void);
682
687bool is_cgroup_mode_hybrid(void);
688
693bool is_cgroup_mode_unified(void);
694
701#ifdef __cplusplus
702} /* extern "C" */
703#endif
704
705#endif /* _LIBCGROUP_GROUPS_H */
int cgroup_list_mount_points(const enum cg_version_t cgrp_version, char ***mount_paths)
Definition api.c:6654
int cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value)
Definition wrapper.c:558
bool is_cgroup_mode_hybrid(void)
Definition wrapper.c:815
int cgroup_get_value_name_count(struct cgroup_controller *controller)
Definition wrapper.c:769
int cgroup_get_cgroup(struct cgroup *cgrp)
Definition api.c:3855
int cgroup_get_uid_gid(struct cgroup *cgrp, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid)
Definition wrapper.c:480
void cgroup_free_controllers(struct cgroup *cgrp)
Definition wrapper.c:243
int cgroup_get_controller_count(struct cgroup *cgrp)
Definition api.c:6800
int cgroup_get_controller_version(const char *const controller, enum cg_version_t *const version)
Definition api.c:6586
int cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value)
Definition wrapper.c:269
int cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value)
Definition wrapper.c:347
int cgroup_create_cgroup_from_parent(struct cgroup *cgrp, int ignore_ownership)
Definition api.c:3321
int cgroup_delete_cgroup(struct cgroup *cgrp, int ignore_migration)
Definition api.c:3550
bool is_cgroup_mode_legacy(void)
Definition wrapper.c:803
int cgroup_set_uid_gid(struct cgroup *cgrp, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid)
Definition wrapper.c:466
int cgroup_get_threads(const char *name, const char *controller, pid_t **pids, int *size)
Definition api.c:6388
int cgroup_get_procs(const char *name, const char *controller, pid_t **pids, int *size)
Definition api.c:6378
int cgroup_add_all_controllers(struct cgroup *cgrp)
Definition wrapper.c:111
int cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
Definition wrapper.c:312
int cgroup_create_cgroup(struct cgroup *cgrp, int ignore_ownership)
Definition api.c:3113
bool is_cgroup_mode_unified(void)
Definition wrapper.c:827
char * cgroup_get_cgroup_name(struct cgroup *cgrp)
Definition wrapper.c:790
void cgroup_free(struct cgroup **cgrp)
Definition wrapper.c:256
struct cgroup_controller * cgroup_add_controller(struct cgroup *cgrp, const char *name)
Definition wrapper.c:61
int cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value)
Definition wrapper.c:536
int cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value)
Definition wrapper.c:603
char * cgroup_get_value_name(struct cgroup_controller *controller, int index)
Definition wrapper.c:778
int cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
Definition wrapper.c:579
int cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src)
Definition api.c:2933
int cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb)
Definition wrapper.c:390
int cgroup_delete_cgroup_ext(struct cgroup *cgrp, int flags)
Definition api.c:3557
int cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value)
Definition wrapper.c:650
struct cgroup_controller * cgroup_get_controller_by_index(struct cgroup *cgrp, int index)
Definition api.c:6808
char * cgroup_get_controller_name(struct cgroup_controller *controller)
Definition api.c:6819
int cg_chmod_recursive(struct cgroup *cgrp, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change)
Definition api.c:347
struct cgroup * cgroup_new_cgroup(const char *name)
Definition wrapper.c:43
int cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value)
Definition wrapper.c:329
int cgroup_modify_cgroup(struct cgroup *cgrp)
Definition api.c:2824
int cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value)
Definition wrapper.c:625
void cgroup_set_permissions(struct cgroup *cgrp, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm)
Definition api.c:375
enum cg_setup_mode_t cgroup_setup_mode(void)
Definition api.c:6755
int cgroup_compare_cgroup(struct cgroup *cgrp_a, struct cgroup *cgrp_b)
Definition wrapper.c:417
int cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value)
Definition wrapper.c:512
int cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value)
Definition wrapper.c:678
struct cgroup_controller * cgroup_get_controller(struct cgroup *cgrp, const char *name)
Definition wrapper.c:494
Definition libcgroup-internal.h:113
Definition libcgroup-internal.h:121