1145519Sdarrenr/*	$FreeBSD$	*/
2145510Sdarrenr
3145510Sdarrenr/*
4255332Scy * Copyright (C) 2012 by Darren Reed.
5145510Sdarrenr *
6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing.
7145510Sdarrenr *
8255332Scy * $Id$
9145510Sdarrenr */
10145510Sdarrenr#include "ipf.h"
11145510Sdarrenr
12145510Sdarrenr
13145510Sdarrenrvoid optprint(sec, optmsk, optbits)
14255332Scy	u_short *sec;
15255332Scy	u_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);
28161357Sguido				/*
29161357Sguido				 * Because the ionames table has this entry
30161357Sguido				 * twice.
31161357Sguido				 */
32145510Sdarrenr				if (io->on_value == IPOPT_SECURITY)
33145510Sdarrenr					io++;
34145510Sdarrenr				s = ",";
35145510Sdarrenr			}
36145510Sdarrenr		}
37145510Sdarrenr
38145510Sdarrenr
39145510Sdarrenr	if (secmsk & secbits) {
40145510Sdarrenr		printf("%ssec-class", s);
41145510Sdarrenr		s = " ";
42145510Sdarrenr		for (so = secclass; so->on_name; so++)
43145510Sdarrenr			if ((secmsk & so->on_bit) &&
44145510Sdarrenr			    ((so->on_bit & secmsk) == (so->on_bit & secbits))) {
45145510Sdarrenr				printf("%s%s", s, so->on_name);
46145510Sdarrenr				s = ",";
47145510Sdarrenr			}
48145510Sdarrenr	}
49145510Sdarrenr
50145510Sdarrenr	if ((optmsk && (optmsk != optbits)) ||
51145510Sdarrenr	    (secmsk && (secmsk != secbits))) {
52145510Sdarrenr		s = " ";
53145510Sdarrenr		printf(" not opt");
54145510Sdarrenr		if (optmsk != optbits) {
55145510Sdarrenr			for (io = ionames; io->on_name; io++)
56145510Sdarrenr				if ((io->on_bit & optmsk) &&
57145510Sdarrenr				    ((io->on_bit & optmsk) !=
58145510Sdarrenr				     (io->on_bit & optbits))) {
59145510Sdarrenr					if ((io->on_value != IPOPT_SECURITY) ||
60145510Sdarrenr					    (!secmsk && !secbits)) {
61145510Sdarrenr						printf("%s%s", s, io->on_name);
62145510Sdarrenr						s = ",";
63145510Sdarrenr						if (io->on_value ==
64145510Sdarrenr						    IPOPT_SECURITY)
65145510Sdarrenr							io++;
66145510Sdarrenr					} else
67145510Sdarrenr						io++;
68145510Sdarrenr				}
69145510Sdarrenr		}
70145510Sdarrenr
71145510Sdarrenr		if (secmsk != secbits) {
72145510Sdarrenr			printf("%ssec-class", s);
73145510Sdarrenr			s = " ";
74145510Sdarrenr			for (so = secclass; so->on_name; so++)
75145510Sdarrenr				if ((so->on_bit & secmsk) &&
76145510Sdarrenr				    ((so->on_bit & secmsk) !=
77145510Sdarrenr				     (so->on_bit & secbits))) {
78145510Sdarrenr					printf("%s%s", s, so->on_name);
79145510Sdarrenr					s = ",";
80145510Sdarrenr				}
81145510Sdarrenr		}
82145510Sdarrenr	}
83145510Sdarrenr}
84