libnetfilter_conntrack  1.0.9
conntrack/snprintf.c
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 */
13 const char *const l3proto2str[AF_MAX] = {
14  [AF_INET] = "ipv4",
15  [AF_INET6] = "ipv6",
16 };
17 
18 const 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 
29 const 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 
42 const 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  [SCTP_CONNTRACK_HEARTBEAT_SENT] = "HEARTBEAT_SENT",
52  [SCTP_CONNTRACK_HEARTBEAT_ACKED] = "HEARTBEAT_ACKED",
53 };
54 
55 const char *const dccp_states[DCCP_CONNTRACK_MAX] = {
56  [DCCP_CONNTRACK_NONE] = "NONE",
57  [DCCP_CONNTRACK_REQUEST] = "REQUEST",
58  [DCCP_CONNTRACK_RESPOND] = "RESPOND",
59  [DCCP_CONNTRACK_PARTOPEN] = "PARTOPEN",
60  [DCCP_CONNTRACK_OPEN] = "OPEN",
61  [DCCP_CONNTRACK_CLOSEREQ] = "CLOSEREQ",
62  [DCCP_CONNTRACK_CLOSING] = "CLOSING",
63  [DCCP_CONNTRACK_TIMEWAIT] = "TIMEWAIT",
64  [DCCP_CONNTRACK_IGNORE] = "IGNORE",
65  [DCCP_CONNTRACK_INVALID] = "INVALID",
66 };
67 
68 int __snprintf_conntrack(char *buf,
69  unsigned int len,
70  const struct nf_conntrack *ct,
71  unsigned int type,
72  unsigned int msg_output,
73  unsigned int flags,
74  struct nfct_labelmap *map)
75 {
76  int size;
77 
78  switch(msg_output) {
79  case NFCT_O_DEFAULT:
80  size = __snprintf_conntrack_default(buf, len, ct, type, flags, map);
81  break;
82  case NFCT_O_XML:
83  size = __snprintf_conntrack_xml(buf, len, ct, type, flags, map);
84  break;
85  default:
86  errno = ENOENT;
87  return -1;
88  }
89 
90  if (size < 0)
91  return size;
92 
93  /* NULL terminated string */
94  buf[size+1 > len ? len-1 : size] = '\0';
95 
96  return size;
97 }