xref: /netbsd-src/external/bsd/ipf/dist/lib/printactivenat.c (revision 07967fb18af5b87d2d477c5b3e1e438bf0c293fb)
1*07967fb1Smrg /*	$NetBSD: printactivenat.c,v 1.4 2018/02/04 08:19:42 mrg Exp $	*/
2bc4097aaSchristos 
3bc4097aaSchristos /*
4bc4097aaSchristos  * Copyright (C) 2012 by Darren Reed.
5bc4097aaSchristos  *
6bc4097aaSchristos  * See the IPFILTER.LICENCE file for details on licencing.
7bc4097aaSchristos  *
8bc4097aaSchristos  * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com)
9bc4097aaSchristos  */
10bc4097aaSchristos 
11bc4097aaSchristos #include "ipf.h"
12bc4097aaSchristos 
13bc4097aaSchristos 
14bc4097aaSchristos #if !defined(lint)
15*07967fb1Smrg static __attribute__((__used__)) const char rcsid[] = "@(#)Id: printactivenat.c,v 1.1.1.2 2012/07/22 13:44:40 darrenr";
16bc4097aaSchristos #endif
17bc4097aaSchristos 
18bc4097aaSchristos 
19bc4097aaSchristos void
printactivenat(nat,opts,ticks)20bc4097aaSchristos printactivenat(nat, opts, ticks)
21bc4097aaSchristos 	nat_t *nat;
22bc4097aaSchristos 	int opts;
23bc4097aaSchristos 	u_long ticks;
24bc4097aaSchristos {
25bc4097aaSchristos 
26bc4097aaSchristos 	PRINTF("%s", getnattype(nat));
27bc4097aaSchristos 
28bc4097aaSchristos 	if (nat->nat_flags & SI_CLONE)
29bc4097aaSchristos 		PRINTF(" CLONE");
30bc4097aaSchristos 	if (nat->nat_phnext[0] == NULL && nat->nat_phnext[1] == NULL)
31bc4097aaSchristos 		PRINTF(" ORPHAN");
32bc4097aaSchristos 
33bc4097aaSchristos 	putchar(' ');
34bc4097aaSchristos 	if (nat->nat_redir & NAT_REWRITE) {
35bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_osrc6,
36bc4097aaSchristos 				   nat->nat_ifnames[0]);
37bc4097aaSchristos 
38bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
39bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_osport));
40bc4097aaSchristos 
41bc4097aaSchristos 		putchar(' ');
42bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_odst6,
43bc4097aaSchristos 				   nat->nat_ifnames[0]);
44bc4097aaSchristos 
45bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
46bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_odport));
47bc4097aaSchristos 
48bc4097aaSchristos 		PRINTF("<- -> ");
49bc4097aaSchristos 		printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_nsrc6,
50bc4097aaSchristos 				   nat->nat_ifnames[0]);
51bc4097aaSchristos 
52bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
53bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_nsport));
54bc4097aaSchristos 
55bc4097aaSchristos 		putchar(' ');
56bc4097aaSchristos 		printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_ndst6,
57bc4097aaSchristos 				   nat->nat_ifnames[0]);
58bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
59bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_ndport));
60bc4097aaSchristos 
61bc4097aaSchristos 	} else if (nat->nat_dir == NAT_OUTBOUND) {
62bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_osrc6,
63bc4097aaSchristos 				   nat->nat_ifnames[0]);
64bc4097aaSchristos 
65bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
66bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_osport));
67bc4097aaSchristos 
68bc4097aaSchristos 		PRINTF(" <- -> ");
69bc4097aaSchristos 		printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_nsrc6,
70bc4097aaSchristos 				   nat->nat_ifnames[0]);
71bc4097aaSchristos 
72bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
73bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_nsport));
74bc4097aaSchristos 
75bc4097aaSchristos 		PRINTF(" [");
76bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%s", &nat->nat_odst6,
77bc4097aaSchristos 				   nat->nat_ifnames[0]);
78bc4097aaSchristos 
79bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
80bc4097aaSchristos 			PRINTF(" %hu", ntohs(nat->nat_odport));
81bc4097aaSchristos 		PRINTF("]");
82bc4097aaSchristos 	} else {
83bc4097aaSchristos 		printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_ndst6,
84bc4097aaSchristos 				   nat->nat_ifnames[0]);
85bc4097aaSchristos 
86bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
87bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_ndport));
88bc4097aaSchristos 
89bc4097aaSchristos 		PRINTF(" <- -> ");
90bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_odst6,
91bc4097aaSchristos 				   nat->nat_ifnames[0]);
92bc4097aaSchristos 
93bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
94bc4097aaSchristos 			PRINTF(" %-5hu", ntohs(nat->nat_odport));
95bc4097aaSchristos 
96bc4097aaSchristos 		PRINTF(" [");
97bc4097aaSchristos 		printactiveaddress(nat->nat_v[0], "%s", &nat->nat_osrc6,
98bc4097aaSchristos 				   nat->nat_ifnames[0]);
99bc4097aaSchristos 
100bc4097aaSchristos 		if ((nat->nat_flags & IPN_TCPUDP) != 0)
101bc4097aaSchristos 			PRINTF(" %hu", ntohs(nat->nat_osport));
102bc4097aaSchristos 		PRINTF("]");
103bc4097aaSchristos 	}
104bc4097aaSchristos 
105bc4097aaSchristos 	if (opts & OPT_VERBOSE) {
106bc4097aaSchristos 		PRINTF("\n\tttl %lu use %hu sumd %s/",
107bc4097aaSchristos 			nat->nat_age - ticks, nat->nat_use,
108bc4097aaSchristos 			getsumd(nat->nat_sumd[0]));
109bc4097aaSchristos 		PRINTF("%s pr %u/%u hash %u/%u flags %x\n",
110bc4097aaSchristos 			getsumd(nat->nat_sumd[1]),
111bc4097aaSchristos 			nat->nat_pr[0], nat->nat_pr[1],
112bc4097aaSchristos 			nat->nat_hv[0], nat->nat_hv[1], nat->nat_flags);
113bc4097aaSchristos 		PRINTF("\tifp %s", getifname(nat->nat_ifps[0]));
114bc4097aaSchristos 		PRINTF(",%s ", getifname(nat->nat_ifps[1]));
115bc4097aaSchristos #ifdef	USE_QUAD_T
116fe7112e3Schristos 		PRINTF("bytes %llu/%llu pkts %llu/%llu",
117bc4097aaSchristos 			(unsigned long long)nat->nat_bytes[0],
118bc4097aaSchristos 			(unsigned long long)nat->nat_bytes[1],
119bc4097aaSchristos 			(unsigned long long)nat->nat_pkts[0],
120bc4097aaSchristos 			(unsigned long long)nat->nat_pkts[1]);
121bc4097aaSchristos #else
122bc4097aaSchristos 		PRINTF("bytes %lu/%lu pkts %lu/%lu", nat->nat_bytes[0],
123bc4097aaSchristos 			nat->nat_bytes[1], nat->nat_pkts[0], nat->nat_pkts[1]);
124bc4097aaSchristos #endif
125bc4097aaSchristos 		PRINTF(" ipsumd %x", nat->nat_ipsumd);
126bc4097aaSchristos 	}
127bc4097aaSchristos 
128bc4097aaSchristos 	if (opts & OPT_DEBUG) {
129bc4097aaSchristos 		PRINTF("\n\tnat_next %p _pnext %p _hm %p\n",
130bc4097aaSchristos 			nat->nat_next, nat->nat_pnext, nat->nat_hm);
131bc4097aaSchristos 		PRINTF("\t_hnext %p/%p _phnext %p/%p\n",
132bc4097aaSchristos 			nat->nat_hnext[0], nat->nat_hnext[1],
133bc4097aaSchristos 			nat->nat_phnext[0], nat->nat_phnext[1]);
134bc4097aaSchristos 		PRINTF("\t_data %p _me %p _state %p _aps %p\n",
135bc4097aaSchristos 			nat->nat_data, nat->nat_me, nat->nat_state,
136bc4097aaSchristos 			nat->nat_aps);
137bc4097aaSchristos 		PRINTF("\tfr %p ptr %p ifps %p/%p sync %p\n",
138bc4097aaSchristos 			nat->nat_fr, nat->nat_ptr, nat->nat_ifps[0],
139bc4097aaSchristos 			nat->nat_ifps[1], nat->nat_sync);
140bc4097aaSchristos 		PRINTF("\ttqe:pnext %p next %p ifq %p parent %p/%p\n",
141bc4097aaSchristos 			nat->nat_tqe.tqe_pnext, nat->nat_tqe.tqe_next,
142bc4097aaSchristos 			nat->nat_tqe.tqe_ifq, nat->nat_tqe.tqe_parent, nat);
143bc4097aaSchristos 		PRINTF("\ttqe:die %d touched %d flags %x state %d/%d\n",
144bc4097aaSchristos 			nat->nat_tqe.tqe_die, nat->nat_tqe.tqe_touched,
145bc4097aaSchristos 			nat->nat_tqe.tqe_flags, nat->nat_tqe.tqe_state[0],
146bc4097aaSchristos 			nat->nat_tqe.tqe_state[1]);
147bc4097aaSchristos 	}
148bc4097aaSchristos 	putchar('\n');
149bc4097aaSchristos }
150