51 lines
817 B
C
51 lines
817 B
C
|
/* $NetBSD: tcp_flags.c,v 1.1.1.1 2004/03/28 08:56:21 martti Exp $ */
|
||
|
|
||
|
/*
|
||
|
* Copyright (C) 1993-2001 by Darren Reed.
|
||
|
*
|
||
|
* See the IPFILTER.LICENCE file for details on licencing.
|
||
|
*
|
||
|
* Id: tcp_flags.c,v 1.8 2004/02/07 18:15:54 darrenr Exp
|
||
|
*/
|
||
|
|
||
|
#include "ipf.h"
|
||
|
|
||
|
extern char flagset[];
|
||
|
extern u_char flags[];
|
||
|
|
||
|
|
||
|
u_char tcp_flags(flgs, mask, linenum)
|
||
|
char *flgs;
|
||
|
u_char *mask;
|
||
|
int linenum;
|
||
|
{
|
||
|
u_char 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 = 0xff & ~(TH_ECN|TH_CWR);
|
||
|
else
|
||
|
tcpfm = 0xff & ~(TH_ECN);
|
||
|
}
|
||
|
*mask = tcpfm;
|
||
|
return tcpf;
|
||
|
}
|