optprint.c revision 255332
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/optprint.c 255332 2013-09-06 23:11:19Z cy $ */ 2145510Sdarrenr 3145510Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8255332Scy * $Id$ 9145510Sdarrenr */ 10145510Sdarrenr#include "ipf.h" 11145510Sdarrenr 12145510Sdarrenr 13145510Sdarrenrvoid optprint(sec, optmsk, optbits) 14255332Scy u_short *sec; 15255332Scy u_long optmsk, optbits; 16145510Sdarrenr{ 17145510Sdarrenr u_short secmsk = sec[0], secbits = sec[1]; 18145510Sdarrenr struct ipopt_names *io, *so; 19145510Sdarrenr char *s; 20145510Sdarrenr 21145510Sdarrenr s = " opt "; 22145510Sdarrenr for (io = ionames; io->on_name; io++) 23145510Sdarrenr if ((io->on_bit & optmsk) && 24145510Sdarrenr ((io->on_bit & optmsk) == (io->on_bit & optbits))) { 25145510Sdarrenr if ((io->on_value != IPOPT_SECURITY) || 26145510Sdarrenr (!secmsk && !secbits)) { 27145510Sdarrenr printf("%s%s", s, io->on_name); 28161357Sguido /* 29161357Sguido * Because the ionames table has this entry 30161357Sguido * twice. 31161357Sguido */ 32145510Sdarrenr if (io->on_value == IPOPT_SECURITY) 33145510Sdarrenr io++; 34145510Sdarrenr s = ","; 35145510Sdarrenr } 36145510Sdarrenr } 37145510Sdarrenr 38145510Sdarrenr 39145510Sdarrenr if (secmsk & secbits) { 40145510Sdarrenr printf("%ssec-class", s); 41145510Sdarrenr s = " "; 42145510Sdarrenr for (so = secclass; so->on_name; so++) 43145510Sdarrenr if ((secmsk & so->on_bit) && 44145510Sdarrenr ((so->on_bit & secmsk) == (so->on_bit & secbits))) { 45145510Sdarrenr printf("%s%s", s, so->on_name); 46145510Sdarrenr s = ","; 47145510Sdarrenr } 48145510Sdarrenr } 49145510Sdarrenr 50145510Sdarrenr if ((optmsk && (optmsk != optbits)) || 51145510Sdarrenr (secmsk && (secmsk != secbits))) { 52145510Sdarrenr s = " "; 53145510Sdarrenr printf(" not opt"); 54145510Sdarrenr if (optmsk != optbits) { 55145510Sdarrenr for (io = ionames; io->on_name; io++) 56145510Sdarrenr if ((io->on_bit & optmsk) && 57145510Sdarrenr ((io->on_bit & optmsk) != 58145510Sdarrenr (io->on_bit & optbits))) { 59145510Sdarrenr if ((io->on_value != IPOPT_SECURITY) || 60145510Sdarrenr (!secmsk && !secbits)) { 61145510Sdarrenr printf("%s%s", s, io->on_name); 62145510Sdarrenr s = ","; 63145510Sdarrenr if (io->on_value == 64145510Sdarrenr IPOPT_SECURITY) 65145510Sdarrenr io++; 66145510Sdarrenr } else 67145510Sdarrenr io++; 68145510Sdarrenr } 69145510Sdarrenr } 70145510Sdarrenr 71145510Sdarrenr if (secmsk != secbits) { 72145510Sdarrenr printf("%ssec-class", s); 73145510Sdarrenr s = " "; 74145510Sdarrenr for (so = secclass; so->on_name; so++) 75145510Sdarrenr if ((so->on_bit & secmsk) && 76145510Sdarrenr ((so->on_bit & secmsk) != 77145510Sdarrenr (so->on_bit & secbits))) { 78145510Sdarrenr printf("%s%s", s, so->on_name); 79145510Sdarrenr s = ","; 80145510Sdarrenr } 81145510Sdarrenr } 82145510Sdarrenr } 83145510Sdarrenr} 84