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