#ifndef _VX_CVIRT_PROC_H
#define _VX_CVIRT_PROC_H
-#include <linux/sched.h>
-
+#include <linux/nsproxy.h>
+#include <linux/mnt_namespace.h>
+#include <linux/utsname.h>
+#include <linux/ipc.h>
-#define LOAD_INT(x) ((x) >> FSHIFT)
-#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
-static inline int vx_info_proc_cvirt(struct _vx_cvirt *cvirt, char *buffer)
+static inline
+int vx_info_proc_nsproxy(struct nsproxy *nsproxy, char *buffer)
{
+ struct mnt_namespace *ns;
+ struct uts_namespace *uts;
+ struct ipc_namespace *ipc;
+ struct vfsmount *mnt;
+ char *path, *root;
int length = 0;
- int a, b, c;
+
+ if (!nsproxy)
+ goto out;
length += sprintf(buffer + length,
- "BiasUptime:\t%lu.%02lu\n",
- (unsigned long)cvirt->bias_uptime.tv_sec,
- (cvirt->bias_uptime.tv_nsec / (NSEC_PER_SEC / 100)));
+ "NSProxy:\t%p [%p,%p,%p]\n",
+ nsproxy, nsproxy->mnt_ns,
+ nsproxy->uts_ns, nsproxy->ipc_ns);
+
+ ns = nsproxy->mnt_ns;
+ if (!ns)
+ goto skip_ns;
+
+ path = kmalloc(PATH_MAX, GFP_KERNEL);
+ if (!path)
+ goto skip_ns;
+
+ mnt = ns->root;
+ root = d_path(mnt->mnt_root, mnt->mnt_parent, path, PATH_MAX-2);
+ length += sprintf(buffer + length,
+ "Namespace:\t%p [#%u]\n"
+ "RootPath:\t%s\n"
+ ,ns , atomic_read(&ns->count)
+ ,root);
+ kfree(path);
+skip_ns:
+
+ uts = nsproxy->uts_ns;
+ if (!uts)
+ goto skip_uts;
+
length += sprintf(buffer + length,
"SysName:\t%.*s\n"
"NodeName:\t%.*s\n"
"Version:\t%.*s\n"
"Machine:\t%.*s\n"
"DomainName:\t%.*s\n"
- ,__NEW_UTS_LEN, cvirt->utsname.sysname
- ,__NEW_UTS_LEN, cvirt->utsname.nodename
- ,__NEW_UTS_LEN, cvirt->utsname.release
- ,__NEW_UTS_LEN, cvirt->utsname.version
- ,__NEW_UTS_LEN, cvirt->utsname.machine
- ,__NEW_UTS_LEN, cvirt->utsname.domainname
+ ,__NEW_UTS_LEN, uts->name.sysname
+ ,__NEW_UTS_LEN, uts->name.nodename
+ ,__NEW_UTS_LEN, uts->name.release
+ ,__NEW_UTS_LEN, uts->name.version
+ ,__NEW_UTS_LEN, uts->name.machine
+ ,__NEW_UTS_LEN, uts->name.domainname
+ );
+skip_uts:
+
+ ipc = nsproxy->ipc_ns;
+ if (!ipc)
+ goto skip_ipc;
+
+ length += sprintf(buffer + length,
+ "SEMS:\t\t%d %d %d %d %d\n"
+ "MSG:\t\t%d %d %d\n"
+ "SHM:\t\t%lu %lu %d %d\n"
+ ,ipc->sem_ctls[0], ipc->sem_ctls[1]
+ ,ipc->sem_ctls[2], ipc->sem_ctls[3]
+ ,ipc->used_sems
+ ,ipc->msg_ctlmax, ipc->msg_ctlmnb, ipc->msg_ctlmni
+ ,(unsigned long)ipc->shm_ctlmax
+ ,(unsigned long)ipc->shm_ctlall
+ ,ipc->shm_ctlmni, ipc->shm_tot
);
+skip_ipc:
+
+out:
+ return length;
+}
+
+
+#include <linux/sched.h>
+
+#define LOAD_INT(x) ((x) >> FSHIFT)
+#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
+
+static inline
+int vx_info_proc_cvirt(struct _vx_cvirt *cvirt, char *buffer)
+{
+ int length = 0;
+ int a, b, c;
+
+ length += sprintf(buffer + length,
+ "BiasUptime:\t%lu.%02lu\n",
+ (unsigned long)cvirt->bias_uptime.tv_sec,
+ (cvirt->bias_uptime.tv_nsec / (NSEC_PER_SEC / 100)));
a = cvirt->load[0] + (FIXED_1/200);
b = cvirt->load[1] + (FIXED_1/200);
,LOAD_INT(c), LOAD_FRAC(c)
,atomic_read(&cvirt->total_forks)
);
- return length;
-}
-
-
-static inline long vx_sock_count(struct _vx_cacct *cacct, int type, int pos)
-{
- return atomic_read(&cacct->sock[type][pos].count);
-}
-
-static inline long vx_sock_total(struct _vx_cacct *cacct, int type, int pos)
-{
- return atomic_read(&cacct->sock[type][pos].total);
+ return length;
}
-static inline int vx_info_proc_cacct(struct _vx_cacct *cacct, char *buffer)
+static inline
+int vx_info_proc_cvirt_pc(struct _vx_cvirt_pc *cvirt_pc,
+ char *buffer, int cpu)
{
- int i,j, length = 0;
- static char *type[] = { "UNSPEC", "UNIX", "INET", "INET6", "OTHER" };
-
- for (i=0; i<5; i++) {
- length += sprintf(buffer + length,
- "%s:", type[i]);
- for (j=0; j<3; j++) {
- length += sprintf(buffer + length,
- "\t%12lu/%-12lu"
- ,vx_sock_count(cacct, i, j)
- ,vx_sock_total(cacct, i, j)
- );
- }
- buffer[length++] = '\n';
- }
- length += sprintf(buffer + length,
- "forks:\t%lu\n", cacct->total_forks);
+ int length = 0;
return length;
}