]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
netfilter: add missing xt_log.h file
authorPatrick McHardy <kaber@trash.net>
Mon, 4 Oct 2010 21:24:21 +0000 (23:24 +0200)
committerPatrick McHardy <kaber@trash.net>
Mon, 4 Oct 2010 21:24:21 +0000 (23:24 +0200)
Forgot to add xt_log.h in commit a8defca0 (netfilter: ipt_LOG:
add bufferisation to call printk() once)

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/net/netfilter/xt_log.h [new file with mode: 0644]

diff --git a/include/net/netfilter/xt_log.h b/include/net/netfilter/xt_log.h
new file mode 100644 (file)
index 0000000..0dfb34a
--- /dev/null
@@ -0,0 +1,54 @@
+#define S_SIZE (1024 - (sizeof(unsigned int) + 1))
+
+struct sbuff {
+       unsigned int    count;
+       char            buf[S_SIZE + 1];
+};
+static struct sbuff emergency, *emergency_ptr = &emergency;
+
+static int sb_add(struct sbuff *m, const char *f, ...)
+{
+       va_list args;
+       int len;
+
+       if (likely(m->count < S_SIZE)) {
+               va_start(args, f);
+               len = vsnprintf(m->buf + m->count, S_SIZE - m->count, f, args);
+               va_end(args);
+               if (likely(m->count + len < S_SIZE)) {
+                       m->count += len;
+                       return 0;
+               }
+       }
+       m->count = S_SIZE;
+       printk_once(KERN_ERR KBUILD_MODNAME " please increase S_SIZE\n");
+       return -1;
+}
+
+static struct sbuff *sb_open(void)
+{
+       struct sbuff *m = kmalloc(sizeof(*m), GFP_ATOMIC);
+
+       if (unlikely(!m)) {
+               local_bh_disable();
+               do {
+                       m = xchg(&emergency_ptr, NULL);
+               } while (!m);
+       }
+       m->count = 0;
+       return m;
+}
+
+static void sb_close(struct sbuff *m)
+{
+       m->buf[m->count] = 0;
+       printk("%s\n", m->buf);
+
+       if (likely(m != &emergency))
+               kfree(m);
+       else {
+               xchg(&emergency_ptr, m);
+               local_bh_enable();
+       }
+}
+