xref: /illumos-gate/usr/src/cmd/ipf/lib/common/printpool.c (revision ab25eeb5)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * Copyright (C) 2002 by Darren Reed.
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * See the IPFILTER.LICENCE file for details on licencing.
57663b816Sml  *
6*ab25eeb5Syz  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
77663b816Sml  * Use is subject to license terms.
87c478bd9Sstevel@tonic-gate  */
97c478bd9Sstevel@tonic-gate 
107663b816Sml #pragma ident	"%Z%%M%	%I%	%E% SMI"
117663b816Sml 
127c478bd9Sstevel@tonic-gate #include "ipf.h"
137c478bd9Sstevel@tonic-gate 
147c478bd9Sstevel@tonic-gate #define	PRINTF	(void)printf
157c478bd9Sstevel@tonic-gate #define	FPRINTF	(void)fprintf
167c478bd9Sstevel@tonic-gate 
printpool(pp,copyfunc,name,opts)17*ab25eeb5Syz ip_pool_t *printpool(pp, copyfunc, name, opts)
187c478bd9Sstevel@tonic-gate ip_pool_t *pp;
197c478bd9Sstevel@tonic-gate copyfunc_t copyfunc;
20*ab25eeb5Syz char *name;
217c478bd9Sstevel@tonic-gate int opts;
227c478bd9Sstevel@tonic-gate {
23*ab25eeb5Syz 	ip_pool_node_t *ipnp, *ipnpn, ipn;
247c478bd9Sstevel@tonic-gate 	ip_pool_t ipp;
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate 	if ((*copyfunc)(pp, &ipp, sizeof(ipp)))
277c478bd9Sstevel@tonic-gate 		return NULL;
287c478bd9Sstevel@tonic-gate 
29*ab25eeb5Syz 	if ((name != NULL) && strncmp(name, ipp.ipo_name, FR_GROUPLEN))
30*ab25eeb5Syz 		return ipp.ipo_next;
31*ab25eeb5Syz 
327c478bd9Sstevel@tonic-gate 	if ((opts & OPT_DEBUG) == 0) {
337c478bd9Sstevel@tonic-gate 		if ((ipp.ipo_flags & IPOOL_ANON) != 0)
347c478bd9Sstevel@tonic-gate 			PRINTF("# 'anonymous' tree %s\n", ipp.ipo_name);
357c478bd9Sstevel@tonic-gate 		PRINTF("table role = ");
367c478bd9Sstevel@tonic-gate 	} else {
377c478bd9Sstevel@tonic-gate 		PRINTF("Name: %s", ipp.ipo_name);
387c478bd9Sstevel@tonic-gate 		if ((ipp.ipo_flags & IPOOL_ANON) == IPOOL_ANON)
397c478bd9Sstevel@tonic-gate 			PRINTF("(anon)");
407c478bd9Sstevel@tonic-gate 		putchar(' ');
417c478bd9Sstevel@tonic-gate 		PRINTF("Role: ");
427c478bd9Sstevel@tonic-gate 	}
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate 	switch (ipp.ipo_unit)
457c478bd9Sstevel@tonic-gate 	{
467c478bd9Sstevel@tonic-gate 	case IPL_LOGIPF :
477c478bd9Sstevel@tonic-gate 		printf("ipf");
487c478bd9Sstevel@tonic-gate 		break;
497c478bd9Sstevel@tonic-gate 	case IPL_LOGNAT :
507c478bd9Sstevel@tonic-gate 		printf("nat");
517c478bd9Sstevel@tonic-gate 		break;
527c478bd9Sstevel@tonic-gate 	case IPL_LOGSTATE :
537c478bd9Sstevel@tonic-gate 		printf("state");
547c478bd9Sstevel@tonic-gate 		break;
557c478bd9Sstevel@tonic-gate 	case IPL_LOGAUTH :
567c478bd9Sstevel@tonic-gate 		printf("auth");
577c478bd9Sstevel@tonic-gate 		break;
587c478bd9Sstevel@tonic-gate 	case IPL_LOGSYNC :
597c478bd9Sstevel@tonic-gate 		printf("sync");
607c478bd9Sstevel@tonic-gate 		break;
617c478bd9Sstevel@tonic-gate 	case IPL_LOGSCAN :
627c478bd9Sstevel@tonic-gate 		printf("scan");
637c478bd9Sstevel@tonic-gate 		break;
647c478bd9Sstevel@tonic-gate 	case IPL_LOGLOOKUP :
657c478bd9Sstevel@tonic-gate 		printf("lookup");
667c478bd9Sstevel@tonic-gate 		break;
677c478bd9Sstevel@tonic-gate 	case IPL_LOGCOUNT :
687c478bd9Sstevel@tonic-gate 		printf("count");
697c478bd9Sstevel@tonic-gate 		break;
707c478bd9Sstevel@tonic-gate 	default :
717c478bd9Sstevel@tonic-gate 		printf("unknown(%d)", ipp.ipo_unit);
727c478bd9Sstevel@tonic-gate 	}
737c478bd9Sstevel@tonic-gate 
747c478bd9Sstevel@tonic-gate 	if ((opts & OPT_DEBUG) == 0) {
757c478bd9Sstevel@tonic-gate 		PRINTF(" type = tree number = %s\n", ipp.ipo_name);
767c478bd9Sstevel@tonic-gate 		PRINTF("\t{");
777c478bd9Sstevel@tonic-gate 	} else {
787c478bd9Sstevel@tonic-gate 		putchar(' ');
797c478bd9Sstevel@tonic-gate 
807c478bd9Sstevel@tonic-gate 		PRINTF("\tReferences: %d\tHits: %lu\n", ipp.ipo_ref,
817c478bd9Sstevel@tonic-gate 			ipp.ipo_hits);
827c478bd9Sstevel@tonic-gate 		PRINTF("\tNodes Starting at %p\n", ipp.ipo_list);
837c478bd9Sstevel@tonic-gate 	}
847c478bd9Sstevel@tonic-gate 
857c478bd9Sstevel@tonic-gate 	ipnpn = ipp.ipo_list;
867c478bd9Sstevel@tonic-gate 	ipp.ipo_list = NULL;
877c478bd9Sstevel@tonic-gate 	while (ipnpn != NULL) {
887c478bd9Sstevel@tonic-gate 		ipnp = (ip_pool_node_t *)malloc(sizeof(*ipnp));
89*ab25eeb5Syz 		(*copyfunc)(ipnpn, ipnp, sizeof(ipn));
907c478bd9Sstevel@tonic-gate 		ipnpn = ipnp->ipn_next;
917c478bd9Sstevel@tonic-gate 		ipnp->ipn_next = ipp.ipo_list;
927c478bd9Sstevel@tonic-gate 		ipp.ipo_list = ipnp;
937c478bd9Sstevel@tonic-gate 	}
947c478bd9Sstevel@tonic-gate 
95*ab25eeb5Syz 	if (ipp.ipo_list == NULL) {
96*ab25eeb5Syz 		putchar(';');
97*ab25eeb5Syz 	} else {
98*ab25eeb5Syz 		for (ipnp = ipp.ipo_list; ipnp != NULL; ) {
99*ab25eeb5Syz 			ipnp = printpoolnode(ipnp, opts);
1007c478bd9Sstevel@tonic-gate 
101*ab25eeb5Syz 			if ((opts & OPT_DEBUG) == 0) {
102*ab25eeb5Syz 				putchar(';');
103*ab25eeb5Syz 			}
104*ab25eeb5Syz 		}
1057c478bd9Sstevel@tonic-gate 	}
1067c478bd9Sstevel@tonic-gate 
1077c478bd9Sstevel@tonic-gate 	if ((opts & OPT_DEBUG) == 0)
1087c478bd9Sstevel@tonic-gate 		PRINTF(" };\n");
1097c478bd9Sstevel@tonic-gate 
1107c478bd9Sstevel@tonic-gate 	return ipp.ipo_next;
1117c478bd9Sstevel@tonic-gate }
112