diff options
Diffstat (limited to 'sbin/ipf/libipf/tcp_flags.c')
| -rw-r--r-- | sbin/ipf/libipf/tcp_flags.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sbin/ipf/libipf/tcp_flags.c b/sbin/ipf/libipf/tcp_flags.c new file mode 100644 index 000000000000..9247933ee85b --- /dev/null +++ b/sbin/ipf/libipf/tcp_flags.c @@ -0,0 +1,46 @@ + +/* + * Copyright (C) 2000-2004 by Darren Reed. + * + * See the IPFILTER.LICENCE file for details on licencing. + * + * $Id: tcp_flags.c,v 1.8.2.1 2006/06/16 17:21:17 darrenr Exp $ + */ + +#include "ipf.h" + +extern char flagset[]; +extern uint16_t flags[]; + + +uint16_t tcp_flags(char *flgs, uint16_t *mask, int linenum) +{ + uint16_t tcpf = 0, tcpfm = 0; + char *s; + + s = strchr(flgs, '/'); + if (s) + *s++ = '\0'; + + if (*flgs == '0') { + tcpf = strtol(flgs, NULL, 0); + } else { + tcpf = tcpflags(flgs); + } + + if (s != NULL) { + if (*s == '0') + tcpfm = strtol(s, NULL, 0); + else + tcpfm = tcpflags(s); + } + + if (!tcpfm) { + if (tcpf == TH_SYN) + tcpfm = TH_FLAGS & ~(TH_ECN|TH_CWR); + else + tcpfm = TH_FLAGS & ~(TH_ECN); + } + *mask = tcpfm; + return (tcpf); +} |
