diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2/include/linux/vserver/cacct_cmd.h linux-2.6.17.8-vs2.1.1-rc29.2.1/include/linux/vserver/cacct_cmd.h --- linux-2.6.17.8-vs2.1.1-rc29.2/include/linux/vserver/cacct_cmd.h 2006-08-19 02:55:24 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.1/include/linux/vserver/cacct_cmd.h 2006-08-19 03:37:21 +0200 @@ -8,8 +8,8 @@ struct vcmd_sock_stat_v0 { uint32_t field; - uint32_t count; - uint64_t total; + uint32_t count[3]; + uint64_t total[3]; }; diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/Makefile linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/Makefile --- linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/Makefile 2006-07-09 17:07:14 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/Makefile 2006-08-19 04:03:39 +0200 @@ -6,7 +6,7 @@ obj-y += vserver.o vserver-y := switch.o context.o namespace.o sched.o network.o inode.o \ - limit.o cvirt.o signal.o helper.o init.o dlimit.o + limit.o cvirt.o cacct.o signal.o helper.o init.o dlimit.o vserver-$(CONFIG_PROC_FS) += proc.o vserver-$(CONFIG_VSERVER_DEBUG) += sysctl.o debug.o diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2/include/linux/vserver/cacct_int.h linux-2.6.17.8-vs2.1.1-rc29.2.1/include/linux/vserver/cacct_int.h --- linux-2.6.17.8-vs2.1.1-rc29.2/include/linux/vserver/cacct_int.h 1970-01-01 01:00:00 +0100 +++ linux-2.6.17.8-vs2.1.1-rc29.2.1/include/linux/vserver/cacct_int.h 2006-08-19 03:49:15 +0200 @@ -0,0 +1,21 @@ +#ifndef _VX_CACCT_INT_H +#define _VX_CACCT_INT_H + + +#ifdef __KERNEL__ + +static inline +unsigned long vx_sock_count(struct _vx_cacct *cacct, int type, int pos) +{ + return atomic_read(&cacct->sock[type][pos].count); +} + + +static inline +unsigned long vx_sock_total(struct _vx_cacct *cacct, int type, int pos) +{ + return atomic_read(&cacct->sock[type][pos].total); +} + +#endif /* __KERNEL__ */ +#endif /* _VX_CACCT_INT_H */ diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/cacct.c linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/cacct.c --- linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/cacct.c 1970-01-01 01:00:00 +0100 +++ linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/cacct.c 2006-08-19 03:51:16 +0200 @@ -0,0 +1,43 @@ +/* + * linux/kernel/vserver/cacct.c + * + * Virtual Server: Context Accounting + * + * Copyright (C) 2006 Herbert Pötzl + * + * V0.01 added accounting stats + * + */ + +#include +#include +#include +#include +#include + +#include +#include + + +int vc_sock_stat(struct vx_info *vxi, void __user *data) +{ + struct vcmd_sock_stat_v0 vc_data; + int j, field; + + if (copy_from_user (&vc_data, data, sizeof(vc_data))) + return -EFAULT; + + field = vc_data.field; + if ((field < 0) || (field >= VXA_SOCK_SIZE)) + return -EINVAL; + + for (j=0; j<3; j++) { + vc_data.count[j] = vx_sock_count(&vxi->cacct, field, j); + vc_data.total[j] = vx_sock_total(&vxi->cacct, field, j); + } + + if (copy_to_user (data, &vc_data, sizeof(vc_data))) + return -EFAULT; + return 0; +} + diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2/kernel/vserver/cacct_proc.h linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/cacct_proc.h --- linux-2.6.17.8-vs2.1.1-rc29.2/kernel/vserver/cacct_proc.h 2006-08-19 03:01:43 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/cacct_proc.h 2006-08-19 03:52:45 +0200 @@ -1,17 +1,7 @@ #ifndef _VX_CACCT_PROC_H #define _VX_CACCT_PROC_H - -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); -} +#include #define VX_SOCKA_TOP \ diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/switch.c linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/switch.c --- linux-2.6.17.8-vs2.1.1-rc29.2.1/kernel/vserver/switch.c 2006-08-06 21:53:40 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/switch.c 2006-08-19 04:02:56 +0200 @@ -117,6 +117,9 @@ long do_vcmd(uint32_t cmd, uint32_t id, case VCMD_set_vhi_name: return vc_set_vhi_name(vxi, data); + case VCMD_sock_stat: + return vc_sock_stat(vxi, data); + case VCMD_set_cflags: return vc_set_cflags(vxi, data); case VCMD_get_cflags: @@ -267,6 +270,8 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(get_vhi_name, 3, VCA_VXI, VCF_INFO); __VCMD(get_rlimit, 3, VCA_VXI, VCF_INFO); + __VCMD(sock_stat, 3, VCA_VXI, VCF_INFO); + __VCMD(task_nid, 2, VCA_NONE, 0); __VCMD(nx_info, 3, VCA_NXI, VCF_INFO); __VCMD(get_ncaps, 3, VCA_NXI, VCF_INFO);