tcpflags.c revision 170268
17055Sdg/* $FreeBSD: head/contrib/ipfilter/lib/tcpflags.c 170268 2007-06-04 02:54:36Z darrenr $ */ 221830Sjoerg 321830Sjoerg/* 47055Sdg * Copyright (C) 2001-2002 by Darren Reed. 57055Sdg * 67055Sdg * See the IPFILTER.LICENCE file for details on licencing. 77055Sdg * 87055Sdg * $Id: tcpflags.c,v 1.3.4.1 2006/06/16 17:21:17 darrenr Exp $ 97055Sdg */ 107055Sdg 117055Sdg#include "ipf.h" 127055Sdg 137055Sdg 147055Sdg/* 157055Sdg * ECN is a new addition to TCP - RFC 2481 167055Sdg */ 177055Sdg#ifndef TH_ECN 187055Sdg# define TH_ECN 0x40 197055Sdg#endif 207055Sdg#ifndef TH_CWR 217055Sdg# define TH_CWR 0x80 227055Sdg#endif 237055Sdg 247055Sdgextern char flagset[]; 257055Sdgextern u_char flags[]; 267055Sdg 277055Sdg 287055Sdgu_char tcpflags(flgs) 297055Sdgchar *flgs; 307055Sdg{ 317055Sdg u_char tcpf = 0; 327055Sdg char *s, *t; 337055Sdg 347055Sdg for (s = flgs; *s; s++) { 357061Sdg if (*s == 'W') 3650477Speter tcpf |= TH_CWR; 377055Sdg else { 387055Sdg if (!(t = strchr(flagset, *s))) { 3932356Seivind return 0; 4032350Seivind } 4154263Sshin tcpf |= flags[t - flagset]; 4231742Seivind } 4331742Seivind } 447055Sdg return tcpf; 457055Sdg} 467055Sdg