The commit is pushed to "branch-rh7-3.10.0-327.10.1.vz7.12.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-327.10.1.vz7.12.3
------>
commit 76d4c9523cd5ff3a4e51717bcc55804ba50cea04
Author: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
Date:   Thu Mar 24 19:53:30 2016 +0400

    vzprivnet: Introduce basic statistics
    
    Port diff-vz-privnet-basic-statistics
      vzprivnet: Statistics
    
      Add the stat proc file which shows the statistics.
      Currently the only stats gathered is the number of slow
      lookups performed so far.
    
      Signed-off-by: Pavel Emelyanov <xe...@parallels.com>
    
    Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
---
 net/ipv4/netfilter/ip_vzprivnet.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/net/ipv4/netfilter/ip_vzprivnet.c 
b/net/ipv4/netfilter/ip_vzprivnet.c
index 2a8beb1..8eaa421 100644
--- a/net/ipv4/netfilter/ip_vzprivnet.c
+++ b/net/ipv4/netfilter/ip_vzprivnet.c
@@ -39,6 +39,8 @@ enum {
        VZPRIV_MARK_MAX
 };
 
+static DEFINE_PER_CPU(unsigned long, lookup_stat);
+
 static inline unsigned int dst_pmark_get(struct dst_entry *dst)
 {
        return dst->privnet_mark;
@@ -204,6 +206,8 @@ static noinline unsigned int vzprivnet_classify(struct 
sk_buff *skb)
        u32 saddr, daddr;
        struct vzprivnet *p1, *p2;
 
+       per_cpu(lookup_stat, smp_processor_id())++;
+
        saddr = ip_hdr(skb)->saddr;
        daddr = ip_hdr(skb)->daddr;
 
@@ -828,6 +832,33 @@ static struct file_operations proc_sparse_ops = {
        .write   = sparse_write,
 };
 
+static int stat_seq_show(struct seq_file *s, void *v)
+{
+       unsigned long sum;
+       int cpu;
+
+       sum = 0;
+       for_each_possible_cpu(cpu)
+               sum += per_cpu(lookup_stat, cpu);
+
+       seq_printf(s, "Lookups: %lu\n", sum);
+
+       return 0;
+}
+
+static int stat_seq_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, &stat_seq_show, NULL);
+}
+
+static struct file_operations proc_stat_ops = {
+       .owner   = THIS_MODULE,
+       .open    = stat_seq_open,
+       .read    = seq_read,
+       .llseek  = seq_lseek,
+       .release = seq_release,
+};
+
 static struct proc_dir_entry *vzpriv_proc_dir;
 
 static int __init iptable_vzprivnet_init(void)
@@ -849,6 +880,11 @@ static int __init iptable_vzprivnet_init(void)
        if (proc == NULL)
                goto err_net;
 
+       proc = proc_create("stat", 0644,
+                       vzpriv_proc_dir, &proc_stat_ops);
+       if (proc == NULL)
+               goto err_stat;
+
        proc = proc_symlink(VZPRIV_PROCNAME, init_net.proc_net, 
"/proc/vz/privnet/legacy");
        if (proc == NULL)
                goto err_link;
@@ -862,6 +898,8 @@ static int __init iptable_vzprivnet_init(void)
 err_reg:
        remove_proc_entry(VZPRIV_PROCNAME, init_net.proc_net);
 err_link:
+       remove_proc_entry("stat", vzpriv_proc_dir);
+err_stat:
        remove_proc_entry("sparse", vzpriv_proc_dir);
 err_net:
        remove_proc_entry("legacy", vzpriv_proc_dir);
@@ -875,6 +913,7 @@ static void __exit iptable_vzprivnet_exit(void)
 {
        nf_unregister_hook(&vzprivnet_ops);
        remove_proc_entry(VZPRIV_PROCNAME, init_net.proc_net);
+       remove_proc_entry("stat", vzpriv_proc_dir);
        remove_proc_entry("sparse", vzpriv_proc_dir);
        remove_proc_entry("legacy", vzpriv_proc_dir);
        remove_proc_entry("privnet", proc_vz_dir);
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to