[netfilter-cvslog] r3471 - in trunk/nfsim: core core/ipv4 kernelenv
kernelenv/include tools
rusty at netfilter.org
rusty at netfilter.org
Mon Dec 20 06:30:56 CET 2004
Author: rusty at netfilter.org
Date: 2004-12-20 06:30:55 +0100 (Mon, 20 Dec 2004)
New Revision: 3471
Modified:
trunk/nfsim/core/field.c
trunk/nfsim/core/field.h
trunk/nfsim/core/ipv4/ipv4.c
trunk/nfsim/kernelenv/include/kernelenv.h
trunk/nfsim/kernelenv/kernelenv.c
trunk/nfsim/tools/gen_err.c
trunk/nfsim/tools/gen_ip.c
trunk/nfsim/tools/gen_ip.h
Log:
Use "field" ops to attach dump information to skb, rather than __dump_data.
Modified: trunk/nfsim/core/field.c
===================================================================
--- trunk/nfsim/core/field.c 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/core/field.c 2004-12-20 05:30:55 UTC (rev 3471)
@@ -44,17 +44,31 @@
return 0;
}
-void field_attach(const void *strct, const char *name, void *val)
+static void __field_attach(void *ctx, const void *strct,
+ const char *name, void *val)
{
- struct field *field = talloc(field_ctx, struct field);
+ struct field *field = talloc(ctx, struct field);
field->strct = strct;
field->name = name;
field->val = val;
list_add(&field->list, &fields);
talloc_set_destructor(field, field_destroy);
+ talloc_steal(field, val);
}
+/* strct is talloc'ed: field destroyed when strct is. */
+void field_attach(const void *strct, const char *name, void *val)
+{
+ return __field_attach((void *)strct, strct, name, val);
+}
+
+/* strct is not talloc'ed: field destroyed manually. */
+void field_attach_static(const void *strct, const char *name, void *val)
+{
+ return __field_attach(field_ctx, strct, name, val);
+}
+
static struct field *__field_find(const void *strct, const char *name)
{
struct field *i;
@@ -73,7 +87,11 @@
void *field_value(const void *strct, const char *name)
{
- return __field_find(strct, name)->val;
+ struct field *f = __field_find(strct, name);
+
+ if (!f)
+ return NULL;
+ return f->val;
}
void field_detach(const void *strct, const char *name)
Modified: trunk/nfsim/core/field.h
===================================================================
--- trunk/nfsim/core/field.h 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/core/field.h 2004-12-20 05:30:55 UTC (rev 3471)
@@ -6,7 +6,10 @@
*/
#include <stdbool.h>
+/* strct is talloc'ed: field destroyed when strct is. val is talloc_stealed */
void field_attach(const void *strct, const char *name, void *val);
+/* strct is not talloc'ed: field destroyed manually. */
+void field_attach_static(const void *strct, const char *name, void *val);
bool field_exists(const void *strct, const char *name);
void *field_value(const void *strct, const char *name);
void field_detach(const void *strct, const char *name);
Modified: trunk/nfsim/core/ipv4/ipv4.c
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.c 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/core/ipv4/ipv4.c 2004-12-20 05:30:55 UTC (rev 3471)
@@ -22,6 +22,7 @@
#include "ipv4.h"
#include "utils.h"
#include <core.h>
+#include <field.h>
#include <linux/netfilter_ipv4.h>
@@ -684,7 +685,7 @@
return ptr;
}
-static char *describe(char *ptr, int len, struct iphdr *iph, int dump_flags)
+static char *describe(char *ptr, int len, struct iphdr *iph, char *dump_flags)
{
/* the length of the packet reported by the ipv4 header */
int iplen;
@@ -715,9 +716,9 @@
ptr += sprintf(ptr, "MF ");
if (ntohs(iph->frag_off) & IP_CE)
ptr += sprintf(ptr, "CE ");
- if (dump_flags & __NFSIM_DUMP_TTL)
+ if (dump_flags && strstr(dump_flags, "ttl"))
ptr += sprintf(ptr, "TTL=%i ", iph->ttl);
- if (dump_flags & __NFSIM_DUMP_TOS)
+ if (dump_flags && strstr(dump_flags, "tos"))
ptr += sprintf(ptr, "TOS=%i ", iph->tos);
ptr += sprintf(ptr, "%u.%u.%u.%u %u.%u.%u.%u ",
@@ -867,7 +868,7 @@
goto out;
}
- if (dump_flags & __NFSIM_DUMP_DATA)
+ if (dump_flags && strstr(dump_flags, "data"))
ptr = print_data(ptr, (char *)tcph + tcph->doff*4,
iplen - tcph->doff*4);
break;
@@ -888,6 +889,7 @@
{
static char ipv4_pbuf[1024];
- describe(ipv4_pbuf, skb->len, skb->nh.iph, skb->__dump_flags);
+ describe(ipv4_pbuf, skb->len, skb->nh.iph,
+ field_value(skb, "dump_flags"));
return ipv4_pbuf;
}
Modified: trunk/nfsim/kernelenv/include/kernelenv.h
===================================================================
--- trunk/nfsim/kernelenv/include/kernelenv.h 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/kernelenv/include/kernelenv.h 2004-12-20 05:30:55 UTC (rev 3471)
@@ -422,10 +422,6 @@
*data,
*tail,
*end;
-
-
- /* What fields to we print for this packet? */
- int __dump_flags;
};
struct skb_shared_info {
Modified: trunk/nfsim/kernelenv/kernelenv.c
===================================================================
--- trunk/nfsim/kernelenv/kernelenv.c 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/kernelenv/kernelenv.c 2004-12-20 05:30:55 UTC (rev 3471)
@@ -22,6 +22,7 @@
#include <kernelenv.h>
#include "utils.h"
#include "tui.h"
+#include "field.h"
/* Root of talloc trees for different allocators */
void *__skb_ctx, *__vmalloc_ctx, *__kmalloc_ctx, *__kmalloc_atomic_ctx, *__kmem_cache_ctx;
@@ -182,7 +183,10 @@
new->h.raw = old->h.raw + offset;
new->nh.raw = old->nh.raw + offset;
- __copy(__dump_flags);
+ if (field_exists(old, "dump_flags"))
+ field_attach(new, "dump_flags",
+ talloc_strdup(NULL,
+ field_value(old, "dump_flags")));
}
#undef __copy
Modified: trunk/nfsim/tools/gen_err.c
===================================================================
--- trunk/nfsim/tools/gen_err.c 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/tools/gen_err.c 2004-12-20 05:30:55 UTC (rev 3471)
@@ -116,7 +116,7 @@
struct packet orig, packet;
int len = 28;
char *interface = NULL;
- int dump_flags = 0;
+ char *dump_flags = NULL;
if (argc > 1 && strncmp(argv[1], "IF=", 3) == 0) {
interface = argv[1] + 3;
Modified: trunk/nfsim/tools/gen_ip.c
===================================================================
--- trunk/nfsim/tools/gen_ip.c 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/tools/gen_ip.c 2004-12-20 05:30:55 UTC (rev 3471)
@@ -30,6 +30,7 @@
#include <tui.h>
#include <log.h>
#include <utils.h>
+#include <field.h>
#include "gen_ip.h"
struct protoent *getprotobyname(const char *name);
@@ -277,7 +278,7 @@
/* SRCPT DSTPT [DATA] */
static int
-parse_udp(struct packet *packet, int datalen, char *args[], int *dump_flags)
+parse_udp(struct packet *packet, int datalen, char *args[], char **dump_flags)
{
int spt, dpt;
u_int16_t udplen = sizeof(packet->u.udph) + datalen;
@@ -301,7 +302,7 @@
/* Remaining args are DATA for packet. */
char *data, **arg;
- *dump_flags |= __NFSIM_DUMP_DATA;
+ *dump_flags = talloc_asprintf_append(*dump_flags, "data");
data = (void *)&packet->u.udph + sizeof(packet->u.udph);
for (arg = args+4; *arg; arg++) {
data = copy_printable(data, *arg);
@@ -409,7 +410,7 @@
/* SRCPT DSTPT FLAGS [SEQ=] [ACK=] [WIN=] [OPT=] [DATA] */
static int
-parse_tcp(struct packet *packet, int datalen, char *args[], int *dump_flags)
+parse_tcp(struct packet *packet, int datalen, char *args[], char **dump_flags)
{
int spt, dpt, window = 0;
u_int16_t tcplen;
@@ -471,7 +472,7 @@
/* Remaining args are DATA for packet. */
char *data, **arg;
- *dump_flags |= __NFSIM_DUMP_DATA;
+ *dump_flags = talloc_asprintf_append(*dump_flags, "data");
data = (void *)&packet->u.tcph + packet->u.tcph.doff * 4;
for (arg = args+4; *arg; arg++) {
data = copy_printable(data, *arg);
@@ -529,7 +530,7 @@
}
bool send_packet(const struct packet *packet, const char *interface,
- int dump_flags)
+ char *dump_flags)
{
struct sk_buff *skb;
int len;
@@ -549,7 +550,8 @@
skb->protocol = skb->mac.ethernet->h_proto;
- skb->__dump_flags = dump_flags;
+ if (dump_flags)
+ field_attach(skb, "dump_flags", dump_flags);
if (interface) {
struct net_device *dev;
@@ -652,7 +654,7 @@
/* SRCIP DSTIP DATALEN PROTOCOL ... */
bool parse_packet(struct packet *packet, int argc, char *argv[],
- int *dump_flags)
+ char **dump_flags)
{
int tos = 0, mf = 0, df = 0, ce = 0, ttl = 255, len, datalen;
u_int16_t fragoff = 0, fraglen = 0;
@@ -723,7 +725,7 @@
argv[1]+4);
return false;
}
- *dump_flags |= __NFSIM_DUMP_TOS;
+ *dump_flags = talloc_asprintf_append(*dump_flags, "tos");
argc--;
argv++;
}
@@ -736,7 +738,7 @@
argv[1]+4);
return false;
}
- *dump_flags |= __NFSIM_DUMP_TTL;
+ *dump_flags = talloc_asprintf_append(*dump_flags, "ttl");
argc--;
argv++;
}
@@ -792,7 +794,7 @@
static bool gen_ip(int argc, char *argv[])
{
struct packet packet;
- int dump_flags = 0;
+ char *dump_flags = NULL;
char *interface = NULL;
if (argc > 5 && strncmp(argv[1], "IF=", 3) == 0) {
Modified: trunk/nfsim/tools/gen_ip.h
===================================================================
--- trunk/nfsim/tools/gen_ip.h 2004-12-20 05:29:52 UTC (rev 3470)
+++ trunk/nfsim/tools/gen_ip.h 2004-12-20 05:30:55 UTC (rev 3471)
@@ -18,11 +18,11 @@
/* Fill in packet, given arguments. */
bool parse_packet(struct packet *packet, int argc, char *argv[],
- int *dump_flags);
+ char **dump_flags);
/* Send filled in packet. */
bool send_packet(const struct packet *packet, const char *interface,
- int dump_flags);
+ char *dump_flags);
/* Convert string to number in this range: -1 for fail. */
int string_to_number(const char *s, int min, int max);
More information about the netfilter-cvslog
mailing list