xref: /freebsd/sbin/ipf/libipf/printnataddr.c (revision 51e16cb8)
141edb306SCy Schubert /*
241edb306SCy Schubert  * Copyright (C) 2012 by Darren Reed.
341edb306SCy Schubert  *
441edb306SCy Schubert  * See the IPFILTER.LICENCE file for details on licencing.
541edb306SCy Schubert  *
641edb306SCy Schubert  * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com)
741edb306SCy Schubert  */
841edb306SCy Schubert 
941edb306SCy Schubert #include "ipf.h"
1041edb306SCy Schubert #include "kmem.h"
1141edb306SCy Schubert 
1241edb306SCy Schubert 
1341edb306SCy Schubert 
1441edb306SCy Schubert 
1541edb306SCy Schubert void
printnataddr(int v,char * base,nat_addr_t * addr,int ifidx)16efeb8bffSCy Schubert printnataddr( int v, char *base, nat_addr_t *addr, int ifidx)
1741edb306SCy Schubert {
1841edb306SCy Schubert 	switch (v)
1941edb306SCy Schubert 	{
2041edb306SCy Schubert 	case 4 :
2141edb306SCy Schubert 		if (addr->na_atype == FRI_NORMAL &&
2241edb306SCy Schubert 		    addr->na_addr[0].in4.s_addr == 0) {
2341edb306SCy Schubert 			PRINTF("0/%d", count4bits(addr->na_addr[1].in4.s_addr));
2441edb306SCy Schubert 		} else {
2541edb306SCy Schubert 			printaddr(AF_INET, addr->na_atype, base, ifidx,
2641edb306SCy Schubert 				  (u_32_t *)&addr->na_addr[0].in4.s_addr,
2741edb306SCy Schubert 				  (u_32_t *)&addr->na_addr[1].in4.s_addr);
2841edb306SCy Schubert 		}
2941edb306SCy Schubert 		break;
3041edb306SCy Schubert #ifdef USE_INET6
3141edb306SCy Schubert 	case 6 :
3241edb306SCy Schubert 		printaddr(AF_INET6, addr->na_atype, base, ifidx,
3341edb306SCy Schubert 			  (u_32_t *)&addr->na_addr[0].in6,
3441edb306SCy Schubert 			  (u_32_t *)&addr->na_addr[1].in6);
3541edb306SCy Schubert 		break;
3641edb306SCy Schubert #endif
3741edb306SCy Schubert 	default :
3841edb306SCy Schubert 		printf("{v=%d}", v);
3941edb306SCy Schubert 		break;
4041edb306SCy Schubert 	}
4141edb306SCy Schubert }
42