optprint.c revision 145511
1/*	$NetBSD$	*/
2
3/*
4 * Copyright (C) 1993-2001 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * Id: optprint.c,v 1.6 2002/07/13 15:59:49 darrenr Exp
9 */
10#include "ipf.h"
11
12
13void optprint(sec, optmsk, optbits)
14u_short *sec;
15u_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				if (io->on_value == IPOPT_SECURITY)
29					io++;
30				s = ",";
31			}
32		}
33
34
35	if (secmsk & secbits) {
36		printf("%ssec-class", s);
37		s = " ";
38		for (so = secclass; so->on_name; so++)
39			if ((secmsk & so->on_bit) &&
40			    ((so->on_bit & secmsk) == (so->on_bit & secbits))) {
41				printf("%s%s", s, so->on_name);
42				s = ",";
43			}
44	}
45
46	if ((optmsk && (optmsk != optbits)) ||
47	    (secmsk && (secmsk != secbits))) {
48		s = " ";
49		printf(" not opt");
50		if (optmsk != optbits) {
51			for (io = ionames; io->on_name; io++)
52				if ((io->on_bit & optmsk) &&
53				    ((io->on_bit & optmsk) !=
54				     (io->on_bit & optbits))) {
55					if ((io->on_value != IPOPT_SECURITY) ||
56					    (!secmsk && !secbits)) {
57						printf("%s%s", s, io->on_name);
58						s = ",";
59						if (io->on_value ==
60						    IPOPT_SECURITY)
61							io++;
62					} else
63						io++;
64				}
65		}
66
67		if (secmsk != secbits) {
68			printf("%ssec-class", s);
69			s = " ";
70			for (so = secclass; so->on_name; so++)
71				if ((so->on_bit & secmsk) &&
72				    ((so->on_bit & secmsk) !=
73				     (so->on_bit & secbits))) {
74					printf("%s%s", s, so->on_name);
75					s = ",";
76				}
77		}
78	}
79}
80