optprint.c revision 145519
1207536Smav/*	$FreeBSD: head/contrib/ipfilter/lib/optprint.c 145519 2005-04-25 18:20:15Z darrenr $	*/
2207536Smav
3207536Smav/*
4207536Smav * Copyright (C) 1993-2001 by Darren Reed.
5207536Smav *
6207536Smav * See the IPFILTER.LICENCE file for details on licencing.
7207536Smav *
8207536Smav * Id: optprint.c,v 1.6 2002/07/13 15:59:49 darrenr Exp
9207536Smav */
10207536Smav#include "ipf.h"
11207536Smav
12207536Smav
13207536Smavvoid optprint(sec, optmsk, optbits)
14207536Smavu_short *sec;
15207536Smavu_long optmsk, optbits;
16207536Smav{
17207536Smav	u_short secmsk = sec[0], secbits = sec[1];
18207536Smav	struct ipopt_names *io, *so;
19207536Smav	char *s;
20207536Smav
21207536Smav	s = " opt ";
22207536Smav	for (io = ionames; io->on_name; io++)
23207536Smav		if ((io->on_bit & optmsk) &&
24207536Smav		    ((io->on_bit & optmsk) == (io->on_bit & optbits))) {
25207536Smav			if ((io->on_value != IPOPT_SECURITY) ||
26207536Smav			    (!secmsk && !secbits)) {
27207536Smav				printf("%s%s", s, io->on_name);
28207536Smav				if (io->on_value == IPOPT_SECURITY)
29207536Smav					io++;
30207536Smav				s = ",";
31207536Smav			}
32207536Smav		}
33207536Smav
34207536Smav
35207536Smav	if (secmsk & secbits) {
36207536Smav		printf("%ssec-class", s);
37207536Smav		s = " ";
38207536Smav		for (so = secclass; so->on_name; so++)
39207536Smav			if ((secmsk & so->on_bit) &&
40207536Smav			    ((so->on_bit & secmsk) == (so->on_bit & secbits))) {
41207536Smav				printf("%s%s", s, so->on_name);
42207536Smav				s = ",";
43207536Smav			}
44207536Smav	}
45207536Smav
46220097Smav	if ((optmsk && (optmsk != optbits)) ||
47220097Smav	    (secmsk && (secmsk != secbits))) {
48207536Smav		s = " ";
49207536Smav		printf(" not opt");
50207536Smav		if (optmsk != optbits) {
51207536Smav			for (io = ionames; io->on_name; io++)
52207536Smav				if ((io->on_bit & optmsk) &&
53207536Smav				    ((io->on_bit & optmsk) !=
54207536Smav				     (io->on_bit & optbits))) {
55207536Smav					if ((io->on_value != IPOPT_SECURITY) ||
56207536Smav					    (!secmsk && !secbits)) {
57207536Smav						printf("%s%s", s, io->on_name);
58207536Smav						s = ",";
59207536Smav						if (io->on_value ==
60207536Smav						    IPOPT_SECURITY)
61207536Smav							io++;
62207536Smav					} else
63207536Smav						io++;
64207536Smav				}
65207536Smav		}
66238873Shrs
67207536Smav		if (secmsk != secbits) {
68207536Smav			printf("%ssec-class", s);
69266046Sian			s = " ";
70266046Sian			for (so = secclass; so->on_name; so++)
71207536Smav				if ((so->on_bit & secmsk) &&
72207536Smav				    ((so->on_bit & secmsk) !=
73207536Smav				     (so->on_bit & secbits))) {
74207536Smav					printf("%s%s", s, so->on_name);
75207536Smav					s = ",";
76207536Smav				}
77207536Smav		}
78207536Smav	}
79207536Smav}
80207536Smav