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