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