optprint.c revision 145510
1145510Sdarrenr/* $NetBSD$ */ 2145510Sdarrenr 3145510Sdarrenr/* 4145510Sdarrenr * Copyright (C) 1993-2001 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8145510Sdarrenr * Id: optprint.c,v 1.6 2002/07/13 15:59:49 darrenr Exp 9145510Sdarrenr */ 10145510Sdarrenr#include "ipf.h" 11145510Sdarrenr 12145510Sdarrenr 13145510Sdarrenrvoid optprint(sec, optmsk, optbits) 14145510Sdarrenru_short *sec; 15145510Sdarrenru_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); 28145510Sdarrenr if (io->on_value == IPOPT_SECURITY) 29145510Sdarrenr io++; 30145510Sdarrenr s = ","; 31145510Sdarrenr } 32145510Sdarrenr } 33145510Sdarrenr 34145510Sdarrenr 35145510Sdarrenr if (secmsk & secbits) { 36145510Sdarrenr printf("%ssec-class", s); 37145510Sdarrenr s = " "; 38145510Sdarrenr for (so = secclass; so->on_name; so++) 39145510Sdarrenr if ((secmsk & so->on_bit) && 40145510Sdarrenr ((so->on_bit & secmsk) == (so->on_bit & secbits))) { 41145510Sdarrenr printf("%s%s", s, so->on_name); 42145510Sdarrenr s = ","; 43145510Sdarrenr } 44145510Sdarrenr } 45145510Sdarrenr 46145510Sdarrenr if ((optmsk && (optmsk != optbits)) || 47145510Sdarrenr (secmsk && (secmsk != secbits))) { 48145510Sdarrenr s = " "; 49145510Sdarrenr printf(" not opt"); 50145510Sdarrenr if (optmsk != optbits) { 51145510Sdarrenr for (io = ionames; io->on_name; io++) 52145510Sdarrenr if ((io->on_bit & optmsk) && 53145510Sdarrenr ((io->on_bit & optmsk) != 54145510Sdarrenr (io->on_bit & optbits))) { 55145510Sdarrenr if ((io->on_value != IPOPT_SECURITY) || 56145510Sdarrenr (!secmsk && !secbits)) { 57145510Sdarrenr printf("%s%s", s, io->on_name); 58145510Sdarrenr s = ","; 59145510Sdarrenr if (io->on_value == 60145510Sdarrenr IPOPT_SECURITY) 61145510Sdarrenr io++; 62145510Sdarrenr } else 63145510Sdarrenr io++; 64145510Sdarrenr } 65145510Sdarrenr } 66145510Sdarrenr 67145510Sdarrenr if (secmsk != secbits) { 68145510Sdarrenr printf("%ssec-class", s); 69145510Sdarrenr s = " "; 70145510Sdarrenr for (so = secclass; so->on_name; so++) 71145510Sdarrenr if ((so->on_bit & secmsk) && 72145510Sdarrenr ((so->on_bit & secmsk) != 73145510Sdarrenr (so->on_bit & secbits))) { 74145510Sdarrenr printf("%s%s", s, so->on_name); 75145510Sdarrenr s = ","; 76145510Sdarrenr } 77145510Sdarrenr } 78145510Sdarrenr } 79145510Sdarrenr} 80