[netfilter-cvslog] r3434 - in trunk/nfsim: core/ipv4 tools
rusty at netfilter.org
rusty at netfilter.org
Fri Dec 17 10:29:01 CET 2004
Author: rusty at netfilter.org
Date: 2004-12-17 10:29:00 +0100 (Fri, 17 Dec 2004)
New Revision: 3434
Modified:
trunk/nfsim/core/ipv4/ipv4.c
trunk/nfsim/tools/gen_ip.c
Log:
Fix up ICMP parsing error reporting.
Genericize TCP flag parsing and reporting (and add PSH).
Modified: trunk/nfsim/core/ipv4/ipv4.c
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.c 2004-12-17 08:32:07 UTC (rev 3433)
+++ trunk/nfsim/core/ipv4/ipv4.c 2004-12-17 09:29:00 UTC (rev 3434)
@@ -691,6 +691,7 @@
struct icmphdr *icmph;
struct tcphdr *tcph;
struct udphdr *udph;
+ char *p;
*ptr = '\0';
@@ -809,32 +810,28 @@
ptr += sprintf(ptr, "-TRUNCATED-");
goto out;
}
-
- if (tcph->rst && tcph->ack)
- ptr += sprintf(ptr, "RST/ACK ");
- else if (tcph->rst)
- ptr += sprintf(ptr, "RST ");
- else if (tcph->fin && tcph->ack && tcph->urg)
- ptr += sprintf(ptr, "FIN/ACK/URG ");
- else if (tcph->fin && tcph->ack)
- ptr += sprintf(ptr, "FIN/ACK ");
- else if (tcph->fin)
- ptr += sprintf(ptr, "FIN ");
- else if (tcph->syn && tcph->ack)
- ptr += sprintf(ptr, "SYN/ACK ");
- else if (tcph->syn)
- ptr += sprintf(ptr, "SYN ");
- else if (tcph->ack)
- ptr += sprintf(ptr, "ACK ");
- else if (tcph->cwr)
- ptr += sprintf(ptr, "CWR ");
- else if (tcph->ece)
- ptr += sprintf(ptr, "ECE ");
- else if (tcph->urg)
- ptr += sprintf(ptr, "URG ");
- else
- ptr += sprintf(ptr, "UNKNOWN-FLAGS ");
+ p = ptr;
+ if (tcph->syn)
+ ptr += sprintf(ptr, "SYN");
+ if (tcph->ack)
+ ptr += sprintf(ptr, "%sACK", ptr == p ? "" : "/");
+ if (tcph->rst)
+ ptr += sprintf(ptr, "%sRST", ptr == p ? "" : "/");
+ if (tcph->fin)
+ ptr += sprintf(ptr, "%sFIN", ptr == p ? "" : "/");
+ if (tcph->urg)
+ ptr += sprintf(ptr, "%sURG", ptr == p ? "" : "/");
+ if (tcph->psh)
+ ptr += sprintf(ptr, "%sPSH", ptr == p ? "" : "/");
+ if (tcph->cwr)
+ ptr += sprintf(ptr, "%sCWR", ptr == p ? "" : "/");
+ if (tcph->ece)
+ ptr += sprintf(ptr, "%sECE", ptr == p ? "" : "/");
+ if (ptr == p)
+ ptr += sprintf(ptr, "NONE");
+ ptr += sprintf(ptr, " ");
+
if (tcph->seq)
ptr += sprintf(ptr, "SEQ=%u ", ntohl(tcph->seq));
Modified: trunk/nfsim/tools/gen_ip.c
===================================================================
--- trunk/nfsim/tools/gen_ip.c 2004-12-17 08:32:07 UTC (rev 3433)
+++ trunk/nfsim/tools/gen_ip.c 2004-12-17 09:29:00 UTC (rev 3434)
@@ -255,7 +255,7 @@
packet->u.icmph.un.echo.id = htons(id);
packet->u.icmph.un.echo.sequence = htons(seq);
} else if (args[2]) {
- nfsim_log(LOG_UI, "Extra argument: `%s'", args[3]);
+ nfsim_log(LOG_UI, "Extra argument: `%s'", args[2]);
return -1;
}
@@ -325,31 +325,34 @@
{
memset(tcph, 0, sizeof(*tcph));
- if (strcmp(string, "SYN") == 0)
- tcph->syn = 1;
- else if (strcmp(string, "SYN/ACK") == 0)
- tcph->syn = tcph->ack = 1;
- else if (strcmp(string, "FIN/ACK/URG") == 0)
- tcph->fin = tcph->ack = tcph->urg = 1;
- else if (strcmp(string, "ACK") == 0)
- tcph->ack = 1;
- else if (strcmp(string, "RST") == 0)
- tcph->rst = 1;
- else if (strcmp(string, "RST/ACK") == 0)
- tcph->rst = tcph->ack = 1;
- else if (strcmp(string, "FIN") == 0)
- tcph->fin = 1;
- else if (strcmp(string, "FIN/ACK") == 0)
- tcph->fin = tcph->ack = 1;
- else if (strcmp(string, "CWR") == 0)
- tcph->cwr = 1;
- else if (strcmp(string, "ECE") == 0)
- tcph->ece = 1;
- else if (strcmp(string, "URG") == 0)
- tcph->urg = 1;
- else if (strcmp(string, "NONE") == 0)
- ;
- else {
+ if (streq(string, "NONE"))
+ return 0;
+
+ do {
+ if (strstarts(string, "SYN"))
+ tcph->syn = 1;
+ else if (strstarts(string, "ACK"))
+ tcph->ack = 1;
+ else if (strstarts(string, "RST"))
+ tcph->rst = 1;
+ else if (strstarts(string, "FIN"))
+ tcph->fin = 1;
+ else if (strstarts(string, "CWR"))
+ tcph->cwr = 1;
+ else if (strstarts(string, "ECE"))
+ tcph->ece = 1;
+ else if (strstarts(string, "PSH"))
+ tcph->psh = 1;
+ else if (strstarts(string, "URG"))
+ tcph->urg = 1;
+ else {
+ nfsim_log(LOG_UI, "Bad tcp flags `%s'", string);
+ return 1;
+ }
+ string += 3;
+ } while (*(string++) == '/');
+
+ if (string[-1] != '\0') {
nfsim_log(LOG_UI, "Bad tcp flags `%s'", string);
return 1;
}
More information about the netfilter-cvslog
mailing list