Author: kmacy
Date: Fri Mar 12 06:31:19 2010
New Revision: 205069
URL: http://svn.freebsd.org/changeset/base/205069

Log:
  fix stats reporting sysctl

Modified:
  head/sys/net/flowtable.c

Modified: head/sys/net/flowtable.c
==============================================================================
--- head/sys/net/flowtable.c    Fri Mar 12 05:16:24 2010        (r205068)
+++ head/sys/net/flowtable.c    Fri Mar 12 06:31:19 2010        (r205069)
@@ -1,6 +1,6 @@
 /**************************************************************************
 
-Copyright (c) 2008-2010, BitGravity Inc.
+Copyright (c) 2008-2009, BitGravity Inc.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -298,14 +298,11 @@ SYSCTL_VNET_PROC(_net_inet_flowtable, OI
 
 
 
-#define FS_PRINT(sb, field)    sbuf_printf((sb), "\t%s=%jd", #field, 
fs->ft_##field)
+#define FS_PRINT(sb, field)    sbuf_printf((sb), "\t%s: %jd\n", #field, 
fs->ft_##field)
 
 static void
-fs_print(struct flowtable_stats *fs)
+fs_print(struct sbuf *sb, struct flowtable_stats *fs)
 {
-       struct sbuf *sb;
-
-       sb = sbuf_new(NULL, NULL, 32*1024, SBUF_FIXEDLEN);
 
        FS_PRINT(sb, collisions);
        FS_PRINT(sb, allocated);
@@ -315,12 +312,10 @@ fs_print(struct flowtable_stats *fs)
        FS_PRINT(sb, frees);
        FS_PRINT(sb, hits);
        FS_PRINT(sb, lookups);
-       sbuf_finish(sb);
-       
 }
 
 static void
-flowtable_show_stats(struct flowtable *ft)
+flowtable_show_stats(struct sbuf *sb, struct flowtable *ft)
 {
        int i;
        struct flowtable_stats fs, *pfs;
@@ -344,27 +339,32 @@ flowtable_show_stats(struct flowtable *f
        } else {
                pfs = &ft->ft_stats[0];
        }
-
-       fs_print(pfs);
+       fs_print(sb, pfs);
 }
 
 static int
 sysctl_flowtable_stats(SYSCTL_HANDLER_ARGS)
 {
        struct flowtable *ft;
+       struct sbuf *sb;
+       int error;
+
+       sb = sbuf_new(NULL, NULL, 64*1024, SBUF_FIXEDLEN);
 
        ft = V_flow_list_head;
        while (ft != NULL) {
-               printf("name: %s\n", ft->ft_name);
-               flowtable_show_stats(ft);
+               sbuf_printf(sb, "\ntable name: %s\n", ft->ft_name);
+               flowtable_show_stats(sb, ft);
                ft = ft->ft_next;
        }
+       sbuf_finish(sb);
+       error = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb) + 1);
+       sbuf_delete(sb);
 
-       return (0);
+       return (error);
 }
-SYSCTL_VNET_PROC(_net_inet_flowtable, OID_AUTO, stats,
-    CTLTYPE_INT|CTLFLAG_RW, 0, 0, sysctl_flowtable_stats, "IU",
-    "flowtable statistics");
+SYSCTL_VNET_PROC(_net_inet_flowtable, OID_AUTO, stats, 
CTLTYPE_STRING|CTLFLAG_RD,
+    NULL, 0, sysctl_flowtable_stats, "A", "flowtable statistics");
 
 
 #ifndef RADIX_MPATH
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to