summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/tcpflags.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/tcpflags.c')
-rw-r--r--contrib/ipfilter/lib/tcpflags.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/contrib/ipfilter/lib/tcpflags.c b/contrib/ipfilter/lib/tcpflags.c
new file mode 100644
index 0000000..feb3e8a
--- /dev/null
+++ b/contrib/ipfilter/lib/tcpflags.c
@@ -0,0 +1,45 @@
+/* $FreeBSD$ */
+
+/*
+ * Copyright (C) 2012 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id$
+ */
+
+#include "ipf.h"
+
+
+/*
+ * ECN is a new addition to TCP - RFC 2481
+ */
+#ifndef TH_ECN
+# define TH_ECN 0x40
+#endif
+#ifndef TH_CWR
+# define TH_CWR 0x80
+#endif
+
+extern char flagset[];
+extern u_char flags[];
+
+
+u_char tcpflags(flgs)
+ char *flgs;
+{
+ u_char tcpf = 0;
+ char *s, *t;
+
+ for (s = flgs; *s; s++) {
+ if (*s == 'W')
+ tcpf |= TH_CWR;
+ else {
+ if (!(t = strchr(flagset, *s))) {
+ return 0;
+ }
+ tcpf |= flags[t - flagset];
+ }
+ }
+ return tcpf;
+}
OpenPOWER on IntegriCloud