Lines Matching refs:nsi
63 static int nsinfo__get_nspid(struct nsinfo *nsi, const char *path) in nsinfo__get_nspid() argument
77 nsi->tgid = (pid_t)strtol(strrchr(statln, '\t'), in nsinfo__get_nspid()
79 nsi->nstgid = nsinfo__tgid(nsi); in nsinfo__get_nspid()
84 nsi->nstgid = (pid_t)strtol(nspid, NULL, 10); in nsinfo__get_nspid()
89 nsi->in_pidns = (statln + sizeof("NStgid:") - 1) != nspid; in nsinfo__get_nspid()
99 int nsinfo__init(struct nsinfo *nsi) in nsinfo__init() argument
111 if (asprintf(&newns, "/proc/%d/ns/mnt", nsinfo__pid(nsi)) == -1) in nsinfo__init()
124 nsi->need_setns = true; in nsinfo__init()
125 nsi->mntns_path = newns; in nsinfo__init()
132 if (snprintf(spath, PATH_MAX, "/proc/%d/status", nsinfo__pid(nsi)) >= PATH_MAX) in nsinfo__init()
135 rv = nsinfo__get_nspid(nsi, spath); in nsinfo__init()
144 struct nsinfo *nsi; in nsinfo__new() local
149 nsi = calloc(1, sizeof(*nsi)); in nsinfo__new()
150 if (nsi != NULL) { in nsinfo__new()
151 nsi->pid = pid; in nsinfo__new()
152 nsi->tgid = pid; in nsinfo__new()
153 nsi->nstgid = pid; in nsinfo__new()
154 nsi->need_setns = false; in nsinfo__new()
155 nsi->in_pidns = false; in nsinfo__new()
160 if (nsinfo__init(nsi) == -1) in nsinfo__new()
161 nsi->need_setns = false; in nsinfo__new()
163 refcount_set(&nsi->refcnt, 1); in nsinfo__new()
166 return nsi; in nsinfo__new()
169 struct nsinfo *nsinfo__copy(const struct nsinfo *nsi) in nsinfo__copy() argument
173 if (nsi == NULL) in nsinfo__copy()
178 nnsi->pid = nsinfo__pid(nsi); in nsinfo__copy()
179 nnsi->tgid = nsinfo__tgid(nsi); in nsinfo__copy()
180 nnsi->nstgid = nsinfo__nstgid(nsi); in nsinfo__copy()
181 nnsi->need_setns = nsinfo__need_setns(nsi); in nsinfo__copy()
182 nnsi->in_pidns = nsinfo__in_pidns(nsi); in nsinfo__copy()
183 if (nsi->mntns_path) { in nsinfo__copy()
184 nnsi->mntns_path = strdup(nsi->mntns_path); in nsinfo__copy()
196 static void nsinfo__delete(struct nsinfo *nsi) in nsinfo__delete() argument
198 zfree(&nsi->mntns_path); in nsinfo__delete()
199 free(nsi); in nsinfo__delete()
202 struct nsinfo *nsinfo__get(struct nsinfo *nsi) in nsinfo__get() argument
204 if (nsi) in nsinfo__get()
205 refcount_inc(&nsi->refcnt); in nsinfo__get()
206 return nsi; in nsinfo__get()
209 void nsinfo__put(struct nsinfo *nsi) in nsinfo__put() argument
211 if (nsi && refcount_dec_and_test(&nsi->refcnt)) in nsinfo__put()
212 nsinfo__delete(nsi); in nsinfo__put()
215 bool nsinfo__need_setns(const struct nsinfo *nsi) in nsinfo__need_setns() argument
217 return nsi->need_setns; in nsinfo__need_setns()
220 void nsinfo__clear_need_setns(struct nsinfo *nsi) in nsinfo__clear_need_setns() argument
222 nsi->need_setns = false; in nsinfo__clear_need_setns()
225 pid_t nsinfo__tgid(const struct nsinfo *nsi) in nsinfo__tgid() argument
227 return nsi->tgid; in nsinfo__tgid()
230 pid_t nsinfo__nstgid(const struct nsinfo *nsi) in nsinfo__nstgid() argument
232 return nsi->nstgid; in nsinfo__nstgid()
235 pid_t nsinfo__pid(const struct nsinfo *nsi) in nsinfo__pid() argument
237 return nsi->pid; in nsinfo__pid()
240 pid_t nsinfo__in_pidns(const struct nsinfo *nsi) in nsinfo__in_pidns() argument
242 return nsi->in_pidns; in nsinfo__in_pidns()
245 void nsinfo__mountns_enter(struct nsinfo *nsi, in nsinfo__mountns_enter() argument
259 if (!nsi || !nsi->need_setns) in nsinfo__mountns_enter()
273 newns = open(nsi->mntns_path, O_RDONLY); in nsinfo__mountns_enter()
316 char *nsinfo__realpath(const char *path, struct nsinfo *nsi) in nsinfo__realpath() argument
321 nsinfo__mountns_enter(nsi, &nsc); in nsinfo__realpath()
328 int nsinfo__stat(const char *filename, struct stat *st, struct nsinfo *nsi) in nsinfo__stat() argument
333 nsinfo__mountns_enter(nsi, &nsc); in nsinfo__stat()
342 struct nsinfo nsi; in nsinfo__is_in_root_namespace() local
344 memset(&nsi, 0x0, sizeof(nsi)); in nsinfo__is_in_root_namespace()
345 nsinfo__get_nspid(&nsi, "/proc/self/status"); in nsinfo__is_in_root_namespace()
346 return !nsi.in_pidns; in nsinfo__is_in_root_namespace()