[netfilter-cvslog] r4322 - in trunk/nfsim: . core kernelenv

rusty at netfilter.org rusty at netfilter.org
Fri Oct 7 15:49:39 CEST 2005


Author: rusty at netfilter.org
Date: 2005-10-07 15:49:38 +0200 (Fri, 07 Oct 2005)
New Revision: 4322

Modified:
   trunk/nfsim/Makefile.in
   trunk/nfsim/core/message.c
   trunk/nfsim/kernelenv/kernelenv.c
Log:
--linear-packets for broken kernels.


Modified: trunk/nfsim/Makefile.in
===================================================================
--- trunk/nfsim/Makefile.in	2005-10-07 13:09:22 UTC (rev 4321)
+++ trunk/nfsim/Makefile.in	2005-10-07 13:49:38 UTC (rev 4322)
@@ -26,7 +26,7 @@
 HELP_OBJS:=
 
 # files which we can extract command line usage from
-USAGE_SOURCES := core/core.c core/failtest.c kernelenv/proc_stuff.c
+USAGE_SOURCES := core/core.c core/failtest.c kernelenv/proc_stuff.c kernelenv/kernelenv.c
 
 all:	simulator core/fakesockopt.so.1.0
 

Modified: trunk/nfsim/core/message.c
===================================================================
--- trunk/nfsim/core/message.c	2005-10-07 13:09:22 UTC (rev 4321)
+++ trunk/nfsim/core/message.c	2005-10-07 13:49:38 UTC (rev 4322)
@@ -326,7 +326,7 @@
 void send_userspace_message(struct nf_userspace_message *msg)
 {
 	write(sock[0], msg, sizeof(struct nf_userspace_message) + msg->len);
-//	add_message(true, msg, msg->len, msg+1);
+
 	/* expect a reply */
 	handle_userspace_message();
 }

Modified: trunk/nfsim/kernelenv/kernelenv.c
===================================================================
--- trunk/nfsim/kernelenv/kernelenv.c	2005-10-07 13:09:22 UTC (rev 4321)
+++ trunk/nfsim/kernelenv/kernelenv.c	2005-10-07 13:49:38 UTC (rev 4322)
@@ -66,6 +66,34 @@
 	unsigned int len, writable_len;
 };
 
+static bool linear_packets = false;
+
+/* Normal, linear skb. */
+static struct sk_buff *nfsim_skb(unsigned int size)
+{
+	struct sk_buff *skb;
+	struct skb_shared_info *sinfo;
+
+	/* Skb header. */
+	skb = talloc_zero(__skb_ctx, struct sk_buff);
+
+	/* Place linear data in skb. */
+	skb->data = talloc_size(skb, size);
+	sinfo = talloc(skb, struct skb_shared_info);
+	field_attach(skb, "skb_shinfo", sinfo);
+
+	atomic_set(&skb->users, 1);
+	skb->head = skb->tail = skb->data;
+	skb->len = 0;
+	skb->end = skb->data + size;
+
+	skb->seq = ++nfsim_seq;
+
+	/* set shinfo fields */
+	skb_shinfo(skb)->tso_size = 0;
+	return skb;
+}
+
 /* Create an skb: first amount that is linear, then the rest. */
 struct sk_buff *nfsim_nonlinear_skb(const void *data1, unsigned int size1,
 				    const void *data2, unsigned int size2)
@@ -74,6 +102,14 @@
 	struct skb_shared_info *sinfo;
 	struct skb_extra_info *extra;
 
+	if (linear_packets) {
+		skb = nfsim_skb(size1 + size2);
+		memcpy(skb->data, data1, size1);
+		memcpy(skb->data+size1, data2, size2);
+		skb_put(skb, size1 + size2);
+		return skb;
+	}
+
 	/* Skb header. */
 	skb = talloc_zero(__skb_ctx, struct sk_buff);
 
@@ -106,32 +142,6 @@
 	return skb;
 }
 
-/* Normal, linear skb. */
-static struct sk_buff *nfsim_skb(unsigned int size)
-{
-	struct sk_buff *skb;
-	struct skb_shared_info *sinfo;
-
-	/* Skb header. */
-	skb = talloc_zero(__skb_ctx, struct sk_buff);
-
-	/* Place linear data in skb. */
-	skb->data = talloc_size(skb, size);
-	sinfo = talloc(skb, struct skb_shared_info);
-	field_attach(skb, "skb_shinfo", sinfo);
-
-	atomic_set(&skb->users, 1);
-	skb->head = skb->tail = skb->data;
-	skb->len = 0;
-	skb->end = skb->data + size;
-
-	skb->seq = ++nfsim_seq;
-
-	/* set shinfo fields */
-	skb_shinfo(skb)->tso_size = 0;
-	return skb;
-}
-
 void nfsim_check_packet(const struct sk_buff *skb)
 {
 	struct skb_extra_info *extra = field_value(skb, "extra_data");
@@ -471,7 +481,8 @@
 				  (*pskb)->len - writable_len);
 	copy_skb_header(new, *pskb);
 	extra = field_value(new, "extra_data");
-	extra->writable_len = writable_len;
+	if (extra)
+		extra->writable_len = writable_len;
 
 	if ((*pskb)->sk)
 		skb_set_owner_w(new, (*pskb)->sk);
@@ -1193,3 +1204,19 @@
 {
 	return (--(v->counter) == 0);
 }
+
+/*** XML Argument:
+    <section id="a:linear-packets">
+     <title><option>--linear-packets</option></title>
+     <subtitle>Only use linear packets for testing</subtitle>
+
+     <para>Prior to 2.6.10, there were many bugs involving nonlinear packets.
+     Suppressing them allows testing for other bugs.
+     </para>
+     </section>
+*/
+static void cmdline_linear_packets(struct option *opt)
+{
+	linear_packets = true;
+}
+cmdline_opt("linear-packets", 0, 0, cmdline_linear_packets);




More information about the netfilter-cvslog mailing list