162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2017 Hari Bathini, IBM Corporation 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __PERF_NAMESPACES_H 862306a36Sopenharmony_ci#define __PERF_NAMESPACES_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <sys/types.h> 1162306a36Sopenharmony_ci#include <sys/stat.h> 1262306a36Sopenharmony_ci#include <linux/stddef.h> 1362306a36Sopenharmony_ci#include <linux/perf_event.h> 1462306a36Sopenharmony_ci#include <linux/refcount.h> 1562306a36Sopenharmony_ci#include <linux/types.h> 1662306a36Sopenharmony_ci#include <internal/rc_check.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifndef HAVE_SETNS_SUPPORT 1962306a36Sopenharmony_ciint setns(int fd, int nstype); 2062306a36Sopenharmony_ci#endif 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct perf_record_namespaces; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistruct namespaces { 2562306a36Sopenharmony_ci struct list_head list; 2662306a36Sopenharmony_ci u64 end_time; 2762306a36Sopenharmony_ci struct perf_ns_link_info link_info[]; 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct namespaces *namespaces__new(struct perf_record_namespaces *event); 3162306a36Sopenharmony_civoid namespaces__free(struct namespaces *namespaces); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciDECLARE_RC_STRUCT(nsinfo) { 3462306a36Sopenharmony_ci pid_t pid; 3562306a36Sopenharmony_ci pid_t tgid; 3662306a36Sopenharmony_ci pid_t nstgid; 3762306a36Sopenharmony_ci bool need_setns; 3862306a36Sopenharmony_ci bool in_pidns; 3962306a36Sopenharmony_ci char *mntns_path; 4062306a36Sopenharmony_ci refcount_t refcnt; 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct nscookie { 4462306a36Sopenharmony_ci int oldns; 4562306a36Sopenharmony_ci int newns; 4662306a36Sopenharmony_ci char *oldcwd; 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint nsinfo__init(struct nsinfo *nsi); 5062306a36Sopenharmony_cistruct nsinfo *nsinfo__new(pid_t pid); 5162306a36Sopenharmony_cistruct nsinfo *nsinfo__copy(const struct nsinfo *nsi); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistruct nsinfo *nsinfo__get(struct nsinfo *nsi); 5462306a36Sopenharmony_civoid nsinfo__put(struct nsinfo *nsi); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cibool nsinfo__need_setns(const struct nsinfo *nsi); 5762306a36Sopenharmony_civoid nsinfo__clear_need_setns(struct nsinfo *nsi); 5862306a36Sopenharmony_cipid_t nsinfo__tgid(const struct nsinfo *nsi); 5962306a36Sopenharmony_cipid_t nsinfo__nstgid(const struct nsinfo *nsi); 6062306a36Sopenharmony_cipid_t nsinfo__pid(const struct nsinfo *nsi); 6162306a36Sopenharmony_cipid_t nsinfo__in_pidns(const struct nsinfo *nsi); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_civoid nsinfo__mountns_enter(struct nsinfo *nsi, struct nscookie *nc); 6462306a36Sopenharmony_civoid nsinfo__mountns_exit(struct nscookie *nc); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cichar *nsinfo__realpath(const char *path, struct nsinfo *nsi); 6762306a36Sopenharmony_ciint nsinfo__stat(const char *filename, struct stat *st, struct nsinfo *nsi); 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cibool nsinfo__is_in_root_namespace(void); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cistatic inline void __nsinfo__zput(struct nsinfo **nsip) 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci if (nsip) { 7462306a36Sopenharmony_ci nsinfo__put(*nsip); 7562306a36Sopenharmony_ci *nsip = NULL; 7662306a36Sopenharmony_ci } 7762306a36Sopenharmony_ci} 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#define nsinfo__zput(nsi) __nsinfo__zput(&nsi) 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciconst char *perf_ns__name(unsigned int id); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci#endif /* __PERF_NAMESPACES_H */ 84