xref: /illumos-gate/usr/src/cmd/ipf/lib/optprint.c (revision 0250c53ad267726f2438e3c6556199a0bbf588a2)
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 
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