blob: 1c26bb80cc0667542034112a840fae772540a119 [file] [log] [blame] [raw]
Darren Reedda0443e2006-06-15 16:17:17 +00001/*
Darren Reedc4af1f32007-08-20 10:15:33 +00002 * Copyright (C) 2000-2005 by Darren Reed.
Darren Reedda0443e2006-06-15 16:17:17 +00003 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * $Id$
7 */
8#include "ipf.h"
9
10
11void optprint(sec, optmsk, optbits)
Martti Kuparinen74b6c5c2007-10-25 12:55:40 +000012 u_short *sec;
13 u_long optmsk, optbits;
Darren Reedda0443e2006-06-15 16:17:17 +000014{
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);
Darren Reedd4718fc2006-06-15 17:00:40 +000026 /*
27 * Because the ionames table has this entry
28 * twice.
29 */
Darren Reedda0443e2006-06-15 16:17:17 +000030 if (io->on_value == IPOPT_SECURITY)
31 io++;
32 s = ",";
33 }
34 }
35
36
37 if (secmsk & secbits) {
38 printf("%ssec-class", s);
39 s = " ";
40 for (so = secclass; so->on_name; so++)
41 if ((secmsk & so->on_bit) &&
42 ((so->on_bit & secmsk) == (so->on_bit & secbits))) {
43 printf("%s%s", s, so->on_name);
44 s = ",";
45 }
46 }
47
48 if ((optmsk && (optmsk != optbits)) ||
49 (secmsk && (secmsk != secbits))) {
50 s = " ";
51 printf(" not opt");
52 if (optmsk != optbits) {
53 for (io = ionames; io->on_name; io++)
54 if ((io->on_bit & optmsk) &&
55 ((io->on_bit & optmsk) !=
56 (io->on_bit & optbits))) {
57 if ((io->on_value != IPOPT_SECURITY) ||
58 (!secmsk && !secbits)) {
59 printf("%s%s", s, io->on_name);
60 s = ",";
61 if (io->on_value ==
62 IPOPT_SECURITY)
63 io++;
64 } else
65 io++;
66 }
67 }
68
69 if (secmsk != secbits) {
70 printf("%ssec-class", s);
71 s = " ";
72 for (so = secclass; so->on_name; so++)
73 if ((so->on_bit & secmsk) &&
74 ((so->on_bit & secmsk) !=
75 (so->on_bit & secbits))) {
76 printf("%s%s", s, so->on_name);
77 s = ",";
78 }
79 }
80 }
81}