getnattype.c revision 3448:aaf16568054b
1/*
2 * Copyright (C) 1993-2001 by Darren Reed.
3 *
4 * See the IPFILTER.LICENCE file for details on licencing.
5 *
6 * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com)
7 *
8 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
9 * Use is subject to license terms.
10 */
11
12#pragma ident	"%Z%%M%	%I%	%E% SMI"
13
14#include "ipf.h"
15#include "kmem.h"
16
17#if !defined(lint)
18static const char rcsid[] = "@(#)$Id: getnattype.c,v 1.3 2004/01/17 17:26:07 darrenr Exp $";
19#endif
20
21
22/*
23 * Get a nat filter type given its kernel address.
24 */
25char *getnattype(nat, alive)
26nat_t *nat;
27int alive;
28{
29	static char unknownbuf[20];
30	ipnat_t *ipn, ipnatbuff;
31	char *which;
32	int type;
33
34	if (!nat)
35		return "???";
36	if (alive) {
37		type = nat->nat_redir;
38	} else {
39		ipn = nat->nat_ptr;
40		if (kmemcpy((char *)&ipnatbuff, (long)ipn, sizeof(ipnatbuff)))
41			return "!!!";
42		type = ipnatbuff.in_redir;
43	}
44
45	switch (type)
46	{
47	case NAT_MAP :
48		which = "MAP";
49		break;
50	case NAT_MAPBLK :
51		which = "MAP-BLOCK";
52		break;
53	case NAT_REDIRECT :
54		which = "RDR";
55		break;
56	case NAT_BIMAP :
57		which = "BIMAP";
58		break;
59	default :
60		sprintf(unknownbuf, "unknown(%04x)", type & 0xffffffff);
61		which = unknownbuf;
62		break;
63	}
64	return which;
65}
66