]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/optprint.c
Import IP-Filter 5.1.2 into vendor branches using the existing license that
[FreeBSD/FreeBSD.git] / lib / optprint.c
1 /*
2  * Copyright (C) 2012 by Darren Reed.
3  *
4  * See the IPFILTER.LICENCE file for details on licencing.
5  *
6  * $Id$
7  */
8 #include "ipf.h"
9
10
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                                 /*
27                                  * Because the ionames table has this entry
28                                  * twice.
29                                  */
30                                 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 }