xref: /freebsd/sbin/ipf/libipf/getnattype.c (revision d0b2dbfa)
1 
2 /*
3  * Copyright (C) 2012 by Darren Reed.
4  *
5  * See the IPFILTER.LICENCE file for details on licencing.
6  *
7  * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com)
8  */
9 #include "ipf.h"
10 #include "kmem.h"
11 
12 #if !defined(lint)
13 static const char rcsid[] = "@(#)$Id$";
14 #endif
15 
16 
17 /*
18  * Get a nat filter type given its kernel address.
19  */
20 char *
21 getnattype(nat_t *nat)
22 {
23 	static char unknownbuf[20];
24 	char *which;
25 
26 	if (!nat)
27 		return ("???");
28 
29 	switch (nat->nat_redir)
30 	{
31 	case NAT_MAP :
32 		which = "MAP";
33 		break;
34 	case NAT_MAPBLK :
35 		which = "MAP-BLOCK";
36 		break;
37 	case NAT_REDIRECT :
38 		which = "RDR";
39 		break;
40 	case NAT_MAP|NAT_REWRITE :
41 		which = "RWR-MAP";
42 		break;
43 	case NAT_REDIRECT|NAT_REWRITE :
44 		which = "RWR-RDR";
45 		break;
46 	case NAT_BIMAP :
47 		which = "BIMAP";
48 		break;
49 	case NAT_REDIRECT|NAT_DIVERTUDP :
50 		which = "DIV-RDR";
51 		break;
52 	case NAT_MAP|NAT_DIVERTUDP :
53 		which = "DIV-MAP";
54 		break;
55 	case NAT_REDIRECT|NAT_ENCAP :
56 		which = "ENC-RDR";
57 		break;
58 	case NAT_MAP|NAT_ENCAP :
59 		which = "ENC-MAP";
60 		break;
61 	default :
62 		snprintf(unknownbuf, sizeof(unknownbuf), "unknown(%04x)",
63 			nat->nat_redir & 0xffffffff);
64 		which = unknownbuf;
65 		break;
66 	}
67 	return (which);
68 }
69