]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/ipfilter/lib/optprint.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / ipfilter / lib / optprint.c
1 /*      $FreeBSD$       */
2
3 /*
4  * Copyright (C) 2000-2005 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * $Id: optprint.c,v 1.6.4.2 2006/06/16 17:21:08 darrenr Exp $
9  */
10 #include "ipf.h"
11
12
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 }