optprint.c revision 145510
1145510Sdarrenr/*	$NetBSD$	*/
2145510Sdarrenr
3145510Sdarrenr/*
4145510Sdarrenr * Copyright (C) 1993-2001 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8145510Sdarrenr * Id: optprint.c,v 1.6 2002/07/13 15:59:49 darrenr Exp
9145510Sdarrenr */
10145510Sdarrenr#include "ipf.h"
11145510Sdarrenr
12145510Sdarrenr
13145510Sdarrenrvoid optprint(sec, optmsk, optbits)
14145510Sdarrenru_short *sec;
15145510Sdarrenru_long optmsk, optbits;
16145510Sdarrenr{
17145510Sdarrenr	u_short secmsk = sec[0], secbits = sec[1];
18145510Sdarrenr	struct ipopt_names *io, *so;
19145510Sdarrenr	char *s;
20145510Sdarrenr
21145510Sdarrenr	s = " opt ";
22145510Sdarrenr	for (io = ionames; io->on_name; io++)
23145510Sdarrenr		if ((io->on_bit & optmsk) &&
24145510Sdarrenr		    ((io->on_bit & optmsk) == (io->on_bit & optbits))) {
25145510Sdarrenr			if ((io->on_value != IPOPT_SECURITY) ||
26145510Sdarrenr			    (!secmsk && !secbits)) {
27145510Sdarrenr				printf("%s%s", s, io->on_name);
28145510Sdarrenr				if (io->on_value == IPOPT_SECURITY)
29145510Sdarrenr					io++;
30145510Sdarrenr				s = ",";
31145510Sdarrenr			}
32145510Sdarrenr		}
33145510Sdarrenr
34145510Sdarrenr
35145510Sdarrenr	if (secmsk & secbits) {
36145510Sdarrenr		printf("%ssec-class", s);
37145510Sdarrenr		s = " ";
38145510Sdarrenr		for (so = secclass; so->on_name; so++)
39145510Sdarrenr			if ((secmsk & so->on_bit) &&
40145510Sdarrenr			    ((so->on_bit & secmsk) == (so->on_bit & secbits))) {
41145510Sdarrenr				printf("%s%s", s, so->on_name);
42145510Sdarrenr				s = ",";
43145510Sdarrenr			}
44145510Sdarrenr	}
45145510Sdarrenr
46145510Sdarrenr	if ((optmsk && (optmsk != optbits)) ||
47145510Sdarrenr	    (secmsk && (secmsk != secbits))) {
48145510Sdarrenr		s = " ";
49145510Sdarrenr		printf(" not opt");
50145510Sdarrenr		if (optmsk != optbits) {
51145510Sdarrenr			for (io = ionames; io->on_name; io++)
52145510Sdarrenr				if ((io->on_bit & optmsk) &&
53145510Sdarrenr				    ((io->on_bit & optmsk) !=
54145510Sdarrenr				     (io->on_bit & optbits))) {
55145510Sdarrenr					if ((io->on_value != IPOPT_SECURITY) ||
56145510Sdarrenr					    (!secmsk && !secbits)) {
57145510Sdarrenr						printf("%s%s", s, io->on_name);
58145510Sdarrenr						s = ",";
59145510Sdarrenr						if (io->on_value ==
60145510Sdarrenr						    IPOPT_SECURITY)
61145510Sdarrenr							io++;
62145510Sdarrenr					} else
63145510Sdarrenr						io++;
64145510Sdarrenr				}
65145510Sdarrenr		}
66145510Sdarrenr
67145510Sdarrenr		if (secmsk != secbits) {
68145510Sdarrenr			printf("%ssec-class", s);
69145510Sdarrenr			s = " ";
70145510Sdarrenr			for (so = secclass; so->on_name; so++)
71145510Sdarrenr				if ((so->on_bit & secmsk) &&
72145510Sdarrenr				    ((so->on_bit & secmsk) !=
73145510Sdarrenr				     (so->on_bit & secbits))) {
74145510Sdarrenr					printf("%s%s", s, so->on_name);
75145510Sdarrenr					s = ",";
76145510Sdarrenr				}
77145510Sdarrenr		}
78145510Sdarrenr	}
79145510Sdarrenr}
80