162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* Copyright (c) 2022 Google */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include "bpf_iter.h" 562306a36Sopenharmony_ci#include <bpf/bpf_helpers.h> 662306a36Sopenharmony_ci#include <bpf/bpf_tracing.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_cichar _license[] SEC("license") = "GPL"; 962306a36Sopenharmony_ciint terminate_early = 0; 1062306a36Sopenharmony_ciu64 terminal_cgroup = 0; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistatic inline u64 cgroup_id(struct cgroup *cgrp) 1362306a36Sopenharmony_ci{ 1462306a36Sopenharmony_ci return cgrp->kn->id; 1562306a36Sopenharmony_ci} 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciSEC("iter/cgroup") 1862306a36Sopenharmony_ciint cgroup_id_printer(struct bpf_iter__cgroup *ctx) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci struct seq_file *seq = ctx->meta->seq; 2162306a36Sopenharmony_ci struct cgroup *cgrp = ctx->cgroup; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci /* epilogue */ 2462306a36Sopenharmony_ci if (cgrp == NULL) { 2562306a36Sopenharmony_ci BPF_SEQ_PRINTF(seq, "epilogue\n"); 2662306a36Sopenharmony_ci return 0; 2762306a36Sopenharmony_ci } 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* prologue */ 3062306a36Sopenharmony_ci if (ctx->meta->seq_num == 0) 3162306a36Sopenharmony_ci BPF_SEQ_PRINTF(seq, "prologue\n"); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci BPF_SEQ_PRINTF(seq, "%8llu\n", cgroup_id(cgrp)); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci if (terminal_cgroup == cgroup_id(cgrp)) 3662306a36Sopenharmony_ci return 1; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci return terminate_early ? 1 : 0; 3962306a36Sopenharmony_ci} 40