1*13885a66Sdarrenr /* $NetBSD: tcpflags.c,v 1.2 2012/07/22 14:27:37 darrenr Exp $ */ 2bc4097aaSchristos 3bc4097aaSchristos /* 4c9d5dc6cSdarrenr * Copyright (C) 2012 by Darren Reed. 5bc4097aaSchristos * 6bc4097aaSchristos * See the IPFILTER.LICENCE file for details on licencing. 7bc4097aaSchristos * 8*13885a66Sdarrenr * Id: tcpflags.c,v 1.1.1.2 2012/07/22 13:44:43 darrenr Exp $ 9bc4097aaSchristos */ 10bc4097aaSchristos 11bc4097aaSchristos #include "ipf.h" 12bc4097aaSchristos 13bc4097aaSchristos 14bc4097aaSchristos /* 15bc4097aaSchristos * ECN is a new addition to TCP - RFC 2481 16bc4097aaSchristos */ 17bc4097aaSchristos #ifndef TH_ECN 18bc4097aaSchristos # define TH_ECN 0x40 19bc4097aaSchristos #endif 20bc4097aaSchristos #ifndef TH_CWR 21bc4097aaSchristos # define TH_CWR 0x80 22bc4097aaSchristos #endif 23bc4097aaSchristos 24bc4097aaSchristos extern char flagset[]; 25bc4097aaSchristos extern u_char flags[]; 26bc4097aaSchristos 27bc4097aaSchristos tcpflags(flgs)28bc4097aaSchristosu_char tcpflags(flgs) 29bc4097aaSchristos char *flgs; 30bc4097aaSchristos { 31bc4097aaSchristos u_char tcpf = 0; 32bc4097aaSchristos char *s, *t; 33bc4097aaSchristos 34bc4097aaSchristos for (s = flgs; *s; s++) { 35bc4097aaSchristos if (*s == 'W') 36bc4097aaSchristos tcpf |= TH_CWR; 37bc4097aaSchristos else { 38bc4097aaSchristos if (!(t = strchr(flagset, *s))) { 39bc4097aaSchristos return 0; 40bc4097aaSchristos } 41bc4097aaSchristos tcpf |= flags[t - flagset]; 42bc4097aaSchristos } 43bc4097aaSchristos } 44bc4097aaSchristos return tcpf; 45bc4097aaSchristos } 46