pae module from Gunter... problems

Gunter Burchardt gbur at informatik.uni-rostock.de
Tue Jan 25 08:44:21 EST 2005


>     Nop. There is no packet going through the pae.... damn !
>     Well. This is obviously due to the layer2-patch that does not work for
> 2.6. I wonder if there are so many differences between the netfilters-2.4
> and the netfilters-2.6 files ?
>     Could you send me the files in version 2.4 that are concerned with your
> patch please ? I could have a look at them then...
>     Could you send them *without* the patch applied please ?
>     Many thanks !
>     David.

Original layer2 patch didn't apply on 2.6. net/core/dev.c has changed. I
applied the layer2 patch on 2.6.8 . The result is the attached patch. I hope
this will work. I could not test it.

If it works please send me your required modifications to pae for 2.6.
I will include this modifications in my tree.

regards
gunter
-------------- next part --------------
diff -Nur linux-2.6.8.1-uc0.org/include/linux/netfilter_packet.h linux-2.6.8.1-uc0/include/linux/netfilter_packet.h
--- linux-2.6.8.1-uc0.org/include/linux/netfilter_packet.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.8.1-uc0/include/linux/netfilter_packet.h	2005-01-25 14:25:43.000000000 +0100
@@ -0,0 +1,17 @@
+#ifndef __LINUX_NETFILTER_PACKET_H
+#define __LINUX_NETFILTER_PACKET_H
+
+/* PF_PACKET-specific defines for netfilter.
+ * Written by Marc Zyngier <Marc.Zyngier at evidian.com>
+ * (C)2002 Evidian -- This code is GPL.
+ */
+
+#include <linux/config.h>
+#include <linux/netfilter.h>
+
+/* PF_PACKET filter hooks */
+
+#define NF_PACKET_INPUT		0
+#define NF_PACKET_OUTPUT	1
+
+#endif /* __LINUX_NETFILTER_PACKET_H */
diff -Nur linux-2.6.8.1-uc0.org/net/core/dev.c linux-2.6.8.1-uc0/net/core/dev.c
--- linux-2.6.8.1-uc0.org/net/core/dev.c	2004-08-14 12:55:32.000000000 +0200
+++ linux-2.6.8.1-uc0/net/core/dev.c	2005-01-25 14:25:43.000000000 +0100
@@ -105,6 +105,7 @@
 #include <linux/init.h>
 #include <linux/kmod.h>
 #include <linux/module.h>
+#include <linux/netfilter_packet.h>
 #include <linux/kallsyms.h>
 #include <linux/netpoll.h>
 #include <linux/rcupdate.h>
@@ -1276,6 +1277,8 @@
 		/* NOTHING */;
 }
 
+static inline int dev_queue_xmit_finish(struct sk_buff *skb);
+
 /**
  *	dev_queue_xmit - transmit a buffer
  *	@skb: buffer to transmit
@@ -1292,8 +1295,6 @@
 int dev_queue_xmit(struct sk_buff *skb)
 {
 	struct net_device *dev = skb->dev;
-	struct Qdisc *q;
-	int rc = -ENOMEM;
 
 	if (skb_shinfo(skb)->frag_list &&
 	    !(dev->features & NETIF_F_FRAGLIST) &&
@@ -1318,6 +1319,17 @@
 	      skb->protocol != htons(ETH_P_IP))))
 	      	if (skb_checksum_help(&skb, 0))
 	      		goto out_kfree_skb;
+	
+	return NF_HOOK(PF_PACKET, NF_PACKET_OUTPUT, skb, NULL, dev,
+				   dev_queue_xmit_finish);
+}
+
+
+static inline int dev_queue_xmit_finish(struct sk_buff *skb)
+{
+	struct net_device *dev = skb->dev;
+	struct Qdisc *q;
+	int rc = -ENOMEM;
 
 	rcu_read_lock();
 	/* Updates of qdisc are serialized by queue_lock. 
@@ -1756,6 +1768,8 @@
 }
 #endif
 
+static inline int netif_receive_skb_finish(struct sk_buff *skb);
+
 int netif_receive_skb(struct sk_buff *skb)
 {
 	struct packet_type *ptype, *pt_prev;
@@ -1779,6 +1793,16 @@
 	skb->h.raw = skb->nh.raw = skb->data;
 	skb->mac_len = skb->nh.raw - skb->mac.raw;
 
+	return NF_HOOK(PF_PACKET, NF_PACKET_INPUT, skb, skb->dev, NULL,
+		       netif_receive_skb_finish);
+}
+
+static inline int netif_receive_skb_finish(struct sk_buff *skb)
+{
+	struct packet_type *ptype, *pt_prev;
+	int ret = NET_RX_DROP;
+	unsigned short type;
+
 	pt_prev = NULL;
 #ifdef CONFIG_NET_CLS_ACT
 	if (skb->tc_verd & TC_NCLS) {
diff -Nur linux-2.6.8.1-uc0.org/net/packet/af_packet.c linux-2.6.8.1-uc0/net/packet/af_packet.c
--- linux-2.6.8.1-uc0.org/net/packet/af_packet.c	2004-08-14 12:55:47.000000000 +0200
+++ linux-2.6.8.1-uc0/net/packet/af_packet.c	2005-01-25 14:25:43.000000000 +0100
@@ -75,6 +75,10 @@
 #include <net/inet_common.h>
 #endif
 
+#ifdef CONFIG_NETFILTER
+#include <linux/netfilter.h>
+#endif
+ 
 #define CONFIG_SOCK_PACKET	1
 
 /*
@@ -1342,7 +1346,12 @@
 	}
 #endif
 	default:
+#ifdef CONFIG_NETFILTER
+	        return nf_setsockopt(sock->sk, PF_PACKET, optname, optval,
+				     optlen);
+#else
 		return -ENOPROTOOPT;
+#endif
 	}
 }
 
@@ -1380,7 +1389,12 @@
 		break;
 	}
 	default:
+#ifdef CONFIG_NETFILTER
+	  	return nf_getsockopt(sock->sk, PF_PACKET, optname, optval,
+				     optlen);
+#else
 		return -ENOPROTOOPT;
+#endif
 	}
 
   	if (put_user(len, optlen))


More information about the HostAP mailing list