optprint.c revision 161357
1/* $FreeBSD: head/contrib/ipfilter/lib/optprint.c 161357 2006-08-16 12:23:02Z guido $ */ 2 3/* 4 * Copyright (C) 1993-2001 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 * 8 * $Id: optprint.c,v 1.6.4.1 2005/12/18 14:51:28 darrenr Exp $ 9 */ 10#include "ipf.h" 11 12 13void optprint(sec, optmsk, optbits) 14u_short *sec; 15u_long optmsk, optbits; 16{ 17 u_short secmsk = sec[0], secbits = sec[1]; 18 struct ipopt_names *io, *so; 19 char *s; 20 21 s = " opt "; 22 for (io = ionames; io->on_name; io++) 23 if ((io->on_bit & optmsk) && 24 ((io->on_bit & optmsk) == (io->on_bit & optbits))) { 25 if ((io->on_value != IPOPT_SECURITY) || 26 (!secmsk && !secbits)) { 27 printf("%s%s", s, io->on_name); 28 /* 29 * Because the ionames table has this entry 30 * twice. 31 */ 32 if (io->on_value == IPOPT_SECURITY) 33 io++; 34 s = ","; 35 } 36 } 37 38 39 if (secmsk & secbits) { 40 printf("%ssec-class", s); 41 s = " "; 42 for (so = secclass; so->on_name; so++) 43 if ((secmsk & so->on_bit) && 44 ((so->on_bit & secmsk) == (so->on_bit & secbits))) { 45 printf("%s%s", s, so->on_name); 46 s = ","; 47 } 48 } 49 50 if ((optmsk && (optmsk != optbits)) || 51 (secmsk && (secmsk != secbits))) { 52 s = " "; 53 printf(" not opt"); 54 if (optmsk != optbits) { 55 for (io = ionames; io->on_name; io++) 56 if ((io->on_bit & optmsk) && 57 ((io->on_bit & optmsk) != 58 (io->on_bit & optbits))) { 59 if ((io->on_value != IPOPT_SECURITY) || 60 (!secmsk && !secbits)) { 61 printf("%s%s", s, io->on_name); 62 s = ","; 63 if (io->on_value == 64 IPOPT_SECURITY) 65 io++; 66 } else 67 io++; 68 } 69 } 70 71 if (secmsk != secbits) { 72 printf("%ssec-class", s); 73 s = " "; 74 for (so = secclass; so->on_name; so++) 75 if ((so->on_bit & secmsk) && 76 ((so->on_bit & secmsk) != 77 (so->on_bit & secbits))) { 78 printf("%s%s", s, so->on_name); 79 s = ","; 80 } 81 } 82 } 83} 84