[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