1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3145510Sdarrenr/* 4170268Sdarrenr * Copyright (C) 2000-2002 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8170268Sdarrenr * $Id: buildopts.c,v 1.6.4.1 2006/06/16 17:20:56 darrenr Exp $ 9145510Sdarrenr */ 10145510Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145510Sdarrenr 13145510Sdarrenr 14145510Sdarrenru_32_t buildopts(cp, op, len) 15145510Sdarrenrchar *cp, *op; 16145510Sdarrenrint len; 17145510Sdarrenr{ 18145510Sdarrenr struct ipopt_names *io; 19145510Sdarrenr u_32_t msk = 0; 20145510Sdarrenr char *s, *t; 21145510Sdarrenr int inc; 22145510Sdarrenr 23145510Sdarrenr for (s = strtok(cp, ","); s; s = strtok(NULL, ",")) { 24145510Sdarrenr if ((t = strchr(s, '='))) 25145510Sdarrenr *t++ = '\0'; 26145510Sdarrenr for (io = ionames; io->on_name; io++) { 27145510Sdarrenr if (strcasecmp(s, io->on_name) || (msk & io->on_bit)) 28145510Sdarrenr continue; 29145510Sdarrenr if ((inc = addipopt(op, io, len, t))) { 30145510Sdarrenr op += inc; 31145510Sdarrenr len += inc; 32145510Sdarrenr } 33145510Sdarrenr msk |= io->on_bit; 34145510Sdarrenr break; 35145510Sdarrenr } 36145510Sdarrenr if (!io->on_name) { 37145510Sdarrenr fprintf(stderr, "unknown IP option name %s\n", s); 38145510Sdarrenr return 0; 39145510Sdarrenr } 40145510Sdarrenr } 41145510Sdarrenr *op++ = IPOPT_EOL; 42145510Sdarrenr len++; 43145510Sdarrenr return len; 44145510Sdarrenr} 45