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)16*efeb8bffSCy 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