/* | |
* Copyright (C) 2011 by Darren Reed. | |
* | |
* See the IPFILTER.LICENCE file for details on licencing. | |
* | |
* $Id$ | |
*/ | |
#include "ipf.h" | |
u_32_t buildopts(cp, op, len) | |
char *cp, *op; | |
int len; | |
{ | |
struct ipopt_names *io; | |
u_32_t msk = 0; | |
char *s, *t; | |
int inc; | |
for (s = strtok(cp, ","); s; s = strtok(NULL, ",")) { | |
if ((t = strchr(s, '='))) | |
*t++ = '\0'; | |
else | |
t = ""; | |
for (io = ionames; io->on_name; io++) { | |
if (strcasecmp(s, io->on_name) || (msk & io->on_bit)) | |
continue; | |
if ((inc = addipopt(op, io, len, t))) { | |
op += inc; | |
len += inc; | |
} | |
msk |= io->on_bit; | |
break; | |
} | |
if (!io->on_name) { | |
fprintf(stderr, "unknown IP option name %s\n", s); | |
return 0; | |
} | |
} | |
while ((len & 3) != 3) { | |
*op++ = IPOPT_NOP; | |
len++; | |
} | |
*op++ = IPOPT_EOL; | |
len++; | |
return len; | |
} |