* This is a module which is used for counting packets. *
* See http://www.intra2net.com/opensource/ipt_account *
* for further information *
- * *
- * Copyright (C) 2004-2006 by Intra2net AG *
+ * *
+ * Copyright (C) 2004-2008 by Intra2net AG *
* opensource@intra2net.com *
* *
* This program is free software; you can redistribute it and/or modify *
#include <net/udp.h>
#include <net/tcp.h>
#include <linux/netfilter_ipv4/ip_tables.h>
-#include <asm/semaphore.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+ #include <linux/semaphore.h>
+#else
+ #include <asm/semaphore.h>
+#endif
+
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/string.h>
return -1;
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
+static bool ipt_acc_checkentry(const char *tablename,
+#else
static int ipt_acc_checkentry(const char *tablename,
+#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
const void *e,
#else
if (table_nr == -1) {
printk("ACCOUNT: Table insert problem. Aborting\n");
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
+ return false;
+#else
return 0;
+#endif
}
/* Table nr caching so we don't have to do an extra string compare
for every packet */
info->table_nr = table_nr;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
+ return true;
+#else
return 1;
+#endif
}
static void ipt_acc_destroy(
}
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+static unsigned int ipt_acc_target(struct sk_buff *skb,
+#else
static unsigned int ipt_acc_target(struct sk_buff **pskb,
+#endif
const struct net_device *in,
const struct net_device *out,
unsigned int hooknum,
{
const struct ipt_acc_info *info =
(const struct ipt_acc_info *)targinfo;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ u_int32_t src_ip = ip_hdr(skb)->saddr;
+ u_int32_t dst_ip = ip_hdr(skb)->daddr;
+ u_int32_t size = ntohs(ip_hdr(skb)->tot_len);
+#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
u_int32_t src_ip = ip_hdr(*pskb)->saddr;
u_int32_t dst_ip = ip_hdr(*pskb)->daddr;
u_int32_t dst_ip = (*pskb)->nh.iph->daddr;
u_int32_t size = ntohs((*pskb)->nh.iph->tot_len);
#endif
+#endif
spin_lock_bh(&ipt_acc_lock);