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