summaryrefslogtreecommitdiffstats
path: root/collectors/cgroups.plugin/sys_fs_cgroup.h
blob: 017aa8fb5c36f5fd8a38671a10f05d0458773d49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef NETDATA_SYS_FS_CGROUP_H
#define NETDATA_SYS_FS_CGROUP_H 1

#include "daemon/common.h"

#if (TARGET_OS == OS_LINUX)

#define NETDATA_PLUGIN_HOOK_LINUX_CGROUPS \
    { \
        .name = "PLUGIN[cgroups]", \
        .config_section = CONFIG_SECTION_PLUGINS, \
        .config_name = "cgroups", \
        .enabled = 1, \
        .thread = NULL, \
        .init_routine = NULL, \
        .start_routine = cgroups_main \
    },

extern void *cgroups_main(void *ptr);

#define CGROUP_OPTIONS_DISABLED_DUPLICATE   0x00000001
#define CGROUP_OPTIONS_SYSTEM_SLICE_SERVICE 0x00000002
#define CGROUP_OPTIONS_IS_UNIFIED           0x00000004

typedef struct netdata_ebpf_cgroup_shm_header {
    int cgroup_root_count;
    int cgroup_max;
    int systemd_enabled;
    int __pad;
    size_t body_length;
} netdata_ebpf_cgroup_shm_header_t;

#define CGROUP_EBPF_NAME_SHARED_LENGTH 256

typedef struct netdata_ebpf_cgroup_shm_body {
    // Considering what is exposed in this link https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits
    // this length is enough to store what we want.
    char name[CGROUP_EBPF_NAME_SHARED_LENGTH];
    uint32_t hash;
    uint32_t options;
    int enabled;
    char path[FILENAME_MAX + 1];
} netdata_ebpf_cgroup_shm_body_t;

typedef struct netdata_ebpf_cgroup_shm {
    netdata_ebpf_cgroup_shm_header_t *header;
    netdata_ebpf_cgroup_shm_body_t *body;
} netdata_ebpf_cgroup_shm_t;

#define NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME "netdata_shm_cgroup_ebpf"
#define NETDATA_NAMED_SEMAPHORE_EBPF_CGROUP_NAME "/netdata_sem_cgroup_ebpf"

#include "../proc.plugin/plugin_proc.h"

#else // (TARGET_OS == OS_LINUX)

#define NETDATA_PLUGIN_HOOK_LINUX_CGROUPS

#endif // (TARGET_OS == OS_LINUX)

extern char *parse_k8s_data(struct label **labels, char *data);

#endif //NETDATA_SYS_FS_CGROUP_H