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