1 /* $NetBSD: optprint.c,v 1.2 2012/07/22 14:27:36 darrenr Exp $ */
2
3 /*
4 * Copyright (C) 2012 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * Id: optprint.c,v 1.1.1.2 2012/07/22 13:44:39 darrenr Exp $
9 */
10 #include "ipf.h"
11
12
optprint(sec,optmsk,optbits)13 void optprint(sec, optmsk, optbits)
14 u_short *sec;
15 u_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