diff options
Diffstat (limited to 'lib/getnattype.c')
-rw-r--r-- | lib/getnattype.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/getnattype.c b/lib/getnattype.c new file mode 100644 index 0000000..04463c2 --- /dev/null +++ b/lib/getnattype.c @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2002-2004 by Darren Reed. + * + * See the IPFILTER.LICENCE file for details on licencing. + * + * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com) + */ +#include "ipf.h" +#include "kmem.h" + +#if !defined(lint) +static const char rcsid[] = "@(#)$Id: getnattype.c,v 1.3.2.2 2006/07/14 06:12:24 darrenr Exp $"; +#endif + + +/* + * Get a nat filter type given its kernel address. + */ +char *getnattype(nat, alive) +nat_t *nat; +int alive; +{ + static char unknownbuf[20]; + ipnat_t *ipn, ipnat; + char *which; + int type; + + if (!nat) + return "???"; + if (alive) { + type = nat->nat_redir; + } else { + ipn = nat->nat_ptr; + if (kmemcpy((char *)&ipnat, (long)ipn, sizeof(ipnat))) + return "!!!"; + type = ipnat.in_redir; + } + + switch (type) + { + case NAT_MAP : + which = "MAP"; + break; + case NAT_MAPBLK : + which = "MAP-BLOCK"; + break; + case NAT_REDIRECT : + which = "RDR"; + break; + case NAT_BIMAP : + which = "BIMAP"; + break; + default : + sprintf(unknownbuf, "unknown(%04x)", type & 0xffffffff); + which = unknownbuf; + break; + } + return which; +} |