[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