1/*
2 * (C) 2005-2011 by Pablo Neira Ayuso <pablo@netfilter.org>
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#include "internal/internal.h"
11
12/* these arrays are used by snprintf_default.c and snprintf_xml.c */
13const char *const l3proto2str[AF_MAX] = {
14	[AF_INET]			= "ipv4",
15	[AF_INET6]			= "ipv6",
16};
17
18const char *const proto2str[IPPROTO_MAX] = {
19	[IPPROTO_TCP]			= "tcp",
20	[IPPROTO_UDP]			= "udp",
21	[IPPROTO_UDPLITE]		= "udplite",
22	[IPPROTO_ICMP]			= "icmp",
23	[IPPROTO_ICMPV6]		= "icmpv6",
24	[IPPROTO_SCTP]			= "sctp",
25	[IPPROTO_GRE]			= "gre",
26	[IPPROTO_DCCP]			= "dccp",
27};
28
29const char *const states[TCP_CONNTRACK_MAX] = {
30	[TCP_CONNTRACK_NONE]		= "NONE",
31	[TCP_CONNTRACK_SYN_SENT]	= "SYN_SENT",
32	[TCP_CONNTRACK_SYN_RECV]	= "SYN_RECV",
33	[TCP_CONNTRACK_ESTABLISHED]	= "ESTABLISHED",
34	[TCP_CONNTRACK_FIN_WAIT]	= "FIN_WAIT",
35	[TCP_CONNTRACK_CLOSE_WAIT]	= "CLOSE_WAIT",
36	[TCP_CONNTRACK_LAST_ACK]	= "LAST_ACK",
37	[TCP_CONNTRACK_TIME_WAIT]	= "TIME_WAIT",
38	[TCP_CONNTRACK_CLOSE]		= "CLOSE",
39	[TCP_CONNTRACK_SYN_SENT2]	= "SYN_SENT2",
40};
41
42const char *const sctp_states[SCTP_CONNTRACK_MAX] = {
43	[SCTP_CONNTRACK_NONE]		= "NONE",
44	[SCTP_CONNTRACK_CLOSED]		= "CLOSED",
45	[SCTP_CONNTRACK_COOKIE_WAIT]	= "COOKIE_WAIT",
46	[SCTP_CONNTRACK_COOKIE_ECHOED]	= "COOKIE_ECHOED",
47	[SCTP_CONNTRACK_ESTABLISHED]	= "ESTABLISHED",
48	[SCTP_CONNTRACK_SHUTDOWN_SENT]	= "SHUTDOWN_SENT",
49	[SCTP_CONNTRACK_SHUTDOWN_RECD]	= "SHUTDOWN_RECD",
50	[SCTP_CONNTRACK_SHUTDOWN_ACK_SENT] = "SHUTDOWN_ACK_SENT",
51};
52
53const char *const dccp_states[DCCP_CONNTRACK_MAX] = {
54	[DCCP_CONNTRACK_NONE]		= "NONE",
55	[DCCP_CONNTRACK_REQUEST]	= "REQUEST",
56	[DCCP_CONNTRACK_RESPOND]	= "RESPOND",
57	[DCCP_CONNTRACK_PARTOPEN]	= "PARTOPEN",
58	[DCCP_CONNTRACK_OPEN]		= "OPEN",
59	[DCCP_CONNTRACK_CLOSEREQ]	= "CLOSEREQ",
60	[DCCP_CONNTRACK_CLOSING]	= "CLOSING",
61	[DCCP_CONNTRACK_TIMEWAIT]	= "TIMEWAIT",
62	[DCCP_CONNTRACK_IGNORE]		= "IGNORE",
63	[DCCP_CONNTRACK_INVALID]	= "INVALID",
64};
65
66int __snprintf_conntrack(char *buf,
67			 unsigned int len,
68			 const struct nf_conntrack *ct,
69			 unsigned int type,
70			 unsigned int msg_output,
71			 unsigned int flags,
72			 struct nfct_labelmap *map)
73{
74	int size;
75
76	switch(msg_output) {
77	case NFCT_O_DEFAULT:
78		size = __snprintf_conntrack_default(buf, len, ct, type, flags, map);
79		break;
80	case NFCT_O_XML:
81		size = __snprintf_conntrack_xml(buf, len, ct, type, flags, map);
82		break;
83	default:
84		errno = ENOENT;
85		return -1;
86	}
87
88	/* NULL terminated string */
89	buf[size+1 > len ? len-1 : size] = '\0';
90
91	return size;
92}
93