<feed xmlns='http://www.w3.org/2005/Atom'>
<title>conntrack-tools.git/include, branch vyatta/VC6.6R1/amd64</title>
<subtitle>conntrack-tools i.e. conntrack and conntrackd (mirror of https://github.com/vyos/conntrack-tools.git)
</subtitle>
<id>https://git.amelek.net/vyos/conntrack-tools.git/atom?h=vyatta%2FVC6.6R1%2Famd64</id>
<link rel='self' href='https://git.amelek.net/vyos/conntrack-tools.git/atom?h=vyatta%2FVC6.6R1%2Famd64'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/'/>
<updated>2012-12-13T19:35:34+00:00</updated>
<entry>
<title>patch to allow tracking dying and unconfirmed lists in conntrack to detect leaks</title>
<updated>2012-12-13T19:35:34+00:00</updated>
<author>
<name>Gaurav Sinha</name>
<email>gaurav.sinha@vyatta.com</email>
</author>
<published>2012-12-13T19:35:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=e0ce5aa88e519caf01e1264c3e8f0d3ac29a4f5e'/>
<id>urn:sha1:e0ce5aa88e519caf01e1264c3e8f0d3ac29a4f5e</id>
<content type='text'>
From patchwork Thu Nov 29 13:52:20 2012
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: conntrack: add support to dump the dying and unconfirmed list via
 ctnetlink
Date: Thu, 29 Nov 2012 03:52:20 -0000
From: Pablo Neira &lt;pablo@netfilter.org&gt;
X-Patchwork-Id: 202751
Message-Id: &lt;1354197140-8498-1-git-send-email-pablo@netfilter.org&gt;
To: netfilter-devel@vger.kernel.org

From: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;

This patch adds support for:

conntrack -L dying
conntrack -L unconfirmed

To display the list of dying and unconfirmed conntracks. This provides
some instrumentation in case that `conntrack -C` really deviates from
what `conntrack -L | wc -l` says.

Users like to check this to make sure things are going OK. Still, some
conntrack objects may be still in the dying and the unconfirmed list.
With this patch, we can also dump their content, before it was not
possible.

In normal cases both lists would be simply empty, or in the case of
the dying list, you can observe that entries go slightly down in
number.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;

---
src/conntrack.c |  108 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 95 insertions(+), 13 deletions(-)

Index: conntrack-tools-oxnard-2d010c5/src/conntrack.c
===================================================================
--- conntrack-tools-oxnard-2d010c5.orig/src/conntrack.c	2012-11-30 22:02:18.356340288 +0100
+++ conntrack-tools-oxnard-2d010c5/src/conntrack.c	2012-11-30 22:02:31.011558172 +0100
@@ -820,27 +820,45 @@
 	*cmd |= newcmd;
 }

-static unsigned int
-check_type(int argc, char *argv[])
+static char *get_table(int argc, char *argv[])
 {
 	char *table = NULL;

-	/* Nasty bug or feature in getopt_long ?
+	/* Nasty bug or feature in getopt_long ?
 	 * It seems that it behaves badly with optional arguments.
 	 * Fortunately, I just stole the fix from iptables ;) */
 	if (optarg)
 		return 0;
-	else if (optind &lt; argc &amp;&amp; argv[optind][0] != '-'
-			&amp;&amp; argv[optind][0] != '!')
+	else if (optind &lt; argc &amp;&amp; argv[optind][0] != '-' &amp;&amp;
+		 argv[optind][0] != '!')
 		table = argv[optind++];
-
-	if (!table)
-		return 0;
-
+
+	return table;
+}
+
+enum {
+	CT_TABLE_CONNTRACK,
+	CT_TABLE_EXPECT,
+	CT_TABLE_DYING,
+	CT_TABLE_UNCONFIRMED,
+};
+
+static unsigned int check_type(int argc, char *argv[])
+{
+	const char *table = get_table(argc, argv);
+
+	/* default to conntrack subsystem if nothing has been specified. */
+	if (table == NULL)
+		return CT_TABLE_CONNTRACK;
+
 	if (strncmp("expect", table, strlen(table)) == 0)
-		return 1;
+		return CT_TABLE_EXPECT;
 	else if (strncmp("conntrack", table, strlen(table)) == 0)
-		return 0;
+		return CT_TABLE_CONNTRACK;
+	else if (strncmp("dying", table, strlen(table)) == 0)
+		return CT_TABLE_DYING;
+	else if (strncmp("unconfirmed", table, strlen(table)) == 0)
+		return CT_TABLE_UNCONFIRMED;
 	else
 		exit_error(PARAMETER_PROBLEM, "unknown type `%s'", table);

@@ -1633,6 +1651,27 @@
 	return MNL_CB_OK;
 }

+static int mnl_nfct_dump_cb(const struct nlmsghdr *nlh, void *data)
+{
+	struct nf_conntrack *ct;
+	char buf[4096];
+
+	ct = nfct_new();
+	if (ct == NULL)
+		return MNL_CB_OK;
+
+	nfct_nlmsg_parse(nlh, ct);
+
+	nfct_snprintf(buf, sizeof(buf), ct, NFCT_T_UNKNOWN, NFCT_O_DEFAULT, 0);
+	printf("%s\n", buf);
+
+	nfct_destroy(ct);
+
+	counter++;
+
+	return MNL_CB_OK;
+}
+
 static struct ctproto_handler *h;

 int main(int argc, char *argv[])
@@ -1667,6 +1706,16 @@
 	switch(c) {
 		/* commands */
 		case 'L':
+			type = check_type(argc, argv);
+			/* Special case: dumping dying and unconfirmed list
+			 * are handled like normal conntrack dumps.
+			 */
+			if (type == CT_TABLE_DYING ||
+			    type == CT_TABLE_UNCONFIRMED)
+				add_command(&amp;command, cmd2type[c][0]);
+			else
+				add_command(&amp;command, cmd2type[c][type]);
+			break;
 		case 'I':
 		case 'D':
 		case 'G':
@@ -1677,14 +1726,25 @@
 		case 'C':
 		case 'S':
 			type = check_type(argc, argv);
+			if (type == CT_TABLE_DYING ||
+			    type == CT_TABLE_UNCONFIRMED) {
+				exit_error(PARAMETER_PROBLEM,
+					   "Can't do that command with "
+					   "tables `dying' and `unconfirmed'");
+			}
 			add_command(&amp;command, cmd2type[c][type]);
 			break;
 		case 'U':
 			type = check_type(argc, argv);
-			if (type == 0)
+			if (type == CT_TABLE_DYING ||
+			    type == CT_TABLE_UNCONFIRMED) {
+				exit_error(PARAMETER_PROBLEM,
+					   "Can't do that command with "
+					   "tables `dying' and `unconfirmed'");
+			} else if (type == CT_TABLE_CONNTRACK)
 				add_command(&amp;command, CT_UPDATE);
 			else
-				exit_error(PARAMETER_PROBLEM,
+				exit_error(PARAMETER_PROBLEM,
 					   "Can't update expectations");
 			break;
 		/* options */
@@ -1884,6 +1944,28 @@
 	struct nfct_filter_dump *filter_dump;

 	case CT_LIST:
+		if (type == CT_TABLE_DYING) {
+			if (nfct_mnl_socket_open() &lt; 0)
+				exit_error(OTHER_PROBLEM, "Can't open handler");
+
+			res = nfct_mnl_dump(NFNL_SUBSYS_CTNETLINK,
+					    IPCTNL_MSG_CT_GET_DYING,
+					    mnl_nfct_dump_cb);
+
+			nfct_mnl_socket_close();
+			break;
+		} else if (type == CT_TABLE_UNCONFIRMED) {
+			if (nfct_mnl_socket_open() &lt; 0)
+				exit_error(OTHER_PROBLEM, "Can't open handler");
+
+			res = nfct_mnl_dump(NFNL_SUBSYS_CTNETLINK,
+					    IPCTNL_MSG_CT_GET_UNCONFIRMED,
+					    mnl_nfct_dump_cb);
+
+			nfct_mnl_socket_close();
+			break;
+		}
+
 		cth = nfct_open(CONNTRACK, 0);
 		if (!cth)
 			exit_error(OTHER_PROBLEM, "Can't open handler");
(cherry picked from commit 2cd070dbd7966af448ef38b245bb59c002bbcedb)

Conflicts:

	debian/changelog
</content>
</entry>
<entry>
<title>fixing 8243: fix will selectively flush the conntrack table on master, ignoring ignored addresses during flush</title>
<updated>2012-07-31T17:25:05+00:00</updated>
<author>
<name>Gaurav Sinha</name>
<email>gaurav.sinha@vyatta.com</email>
</author>
<published>2012-07-31T17:25:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=0048c67d414381245942cd83410006d1dfea9c75'/>
<id>urn:sha1:0048c67d414381245942cd83410006d1dfea9c75</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge branch 'cthelper12' of git://git.netfilter.org/conntrack-tools into pacifica</title>
<updated>2012-06-07T17:36:39+00:00</updated>
<author>
<name>Gaurav Sinha</name>
<email>gaurav.sinha@vyatta.com</email>
</author>
<published>2012-06-07T17:36:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=375a9a47f361a5abc7aa8674979a0ac881d45d90'/>
<id>urn:sha1:375a9a47f361a5abc7aa8674979a0ac881d45d90</id>
<content type='text'>
Conflicts:
	include/helper.h
	src/expect.c
	src/helpers/ftp.c
	src/helpers/rpc.c
	src/helpers/tns.c
	tests/conntrackd/cthelper/main.c
	tests/conntrackd/cthelper/run-test.sh
</content>
</entry>
<entry>
<title>conntrackd: add cthelper infrastructure (+ example FTP helper)</title>
<updated>2012-06-07T15:33:22+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-05-14T23:51:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=a6cf1454b9a435d489ebdc0692058a3c27a59e30'/>
<id>urn:sha1:a6cf1454b9a435d489ebdc0692058a3c27a59e30</id>
<content type='text'>
This patch adds the user-space helper infrastructure. It also
contains the implementation of the FTP helper in user-space.

There's one example file that you can use to configure conntrackd
as user-space connection tracking helper under:

 doc/helper/conntrackd.conf

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'cthelper9' of git://git.netfilter.org/conntrack-tools into user_space_helpers</title>
<updated>2012-05-30T14:54:05+00:00</updated>
<author>
<name>Gaurav Sinha</name>
<email>gaurav.sinha@vyatta.com</email>
</author>
<published>2012-05-30T14:54:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=a608049a22dc23676c85bbf443e45cbbf0e9b83c'/>
<id>urn:sha1:a608049a22dc23676c85bbf443e45cbbf0e9b83c</id>
<content type='text'>
Conflicts:
	.gitignore
	src/run.c
</content>
</entry>
<entry>
<title>conntrackd: add cthelper infrastructure (+ example FTP helper)</title>
<updated>2012-05-28T10:34:59+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-05-14T23:51:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=e96bfcd1b9f79cb3642b365a584359b1672f2ac0'/>
<id>urn:sha1:e96bfcd1b9f79cb3642b365a584359b1672f2ac0</id>
<content type='text'>
This patch adds the user-space helper infrastructure. It also
contains the implementation of the FTP helper in user-space.

There's one example file that you can use to configure conntrackd
as user-space connection tracking helper under:

 doc/helper/conntrackd.conf

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>conntrackd: move ctnetlink code to ctnl.c (removed from run.c)</title>
<updated>2012-05-28T10:34:58+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-04-24T09:56:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=e47233151ca5098b268281329b119a398918d75f'/>
<id>urn:sha1:e47233151ca5098b268281329b119a398918d75f</id>
<content type='text'>
This patch moves the specific ctnetlink code to ctnl.c to prepare
the introduction of the cthelper infrastructure.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>conntrackd: generalize file descriptor infrastructure</title>
<updated>2012-05-28T10:34:32+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-04-24T08:55:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=1250135046b96f2778bda51517c8a722171a6c16'/>
<id>urn:sha1:1250135046b96f2778bda51517c8a722171a6c16</id>
<content type='text'>
This patch generalizes the select-based file descriptor infrastructure
by allowing you to register file descriptors and its callbacks. Instead
of hardcoding the descriptors that needs to be checked.

Now, struct fds_item contains a callback and pointer to data that is
passed to it:

  struct fds_item {
         struct list_head        head;
         int                     fd;
 +       void                    (*cb)(void *data);
 +       void                    *data;
  };

Then, we check which ones are active in the select_main_step() function:

 list_for_each_entry(cur, &amp;STATE(fds)-&gt;list, head) {
         if (FD_ISSET(cur-&gt;fd, &amp;readfds))
                 cur-&gt;cb(cur-&gt;data);
 }

And it invoked the corresponding callback.

I had to slightly modify the channel infrastructure to fit it into
the changes.

This modularity is required for the upcoming cthelper support.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>src: integrate nfct into the conntrack-tools tree</title>
<updated>2012-05-26T13:29:19+00:00</updated>
<author>
<name>Pablo Neira Ayuso</name>
<email>pablo@netfilter.org</email>
</author>
<published>2012-05-10T08:15:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=d2e942c76f87ea061d5e8643007f1d4c3ed39694'/>
<id>urn:sha1:d2e942c76f87ea061d5e8643007f1d4c3ed39694</id>
<content type='text'>
I'll need for the upcoming cthelper infrastructure. Moreover, we avoid
more fragmentation in the netfilter user-space utilities. And the plan
is that `nfct' will replace `conntrack' at some point.

Signed-off-by: Pablo Neira Ayuso &lt;pablo@netfilter.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of git://git.netfilter.org/conntrack-tools into upstream</title>
<updated>2012-02-08T19:31:31+00:00</updated>
<author>
<name>Gaurav Sinha</name>
<email>gaurav.sinha@vyatta.com</email>
</author>
<published>2012-02-08T19:31:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/conntrack-tools.git/commit/?id=9f9a63cecdc6ac4f449d3eacda6c591f0de9fbf3'/>
<id>urn:sha1:9f9a63cecdc6ac4f449d3eacda6c591f0de9fbf3</id>
<content type='text'>
</content>
</entry>
</feed>
