From d894e26211f38db37015850afab6b7331edeecdb Mon Sep 17 00:00:00 2001 From: "/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org" Date: Sun, 1 May 2005 23:19:42 +0000 Subject: o Created changelog file o Deleted libctnetlink.h and libnfnetlink.h from the include/ dir. o Added support for version (-V) and help (-h) o Added event mask based support o Added GPLv2 headers o Use fprintf instead of printf o Defined print_tuple and print_proto output interfaces o ctnl_[get|del]_conntrack handles return value from kernel via msgerr o Added support for conntrack table flushing o Added test case file (test.sh) o Improve dump output o Autoconf stuff for conntrack + some pablo's modifications. o Fixed packet counters formatting (use %llu instead of %lu) --- extensions/Makefile | 12 ----------- extensions/Makefile.am | 14 +++++++++++++ extensions/libct_proto_tcp.c | 29 ++++++++++++++++++++------ extensions/libct_proto_udp.c | 49 ++++++++++++++++++++++++++++++++++++-------- 4 files changed, 77 insertions(+), 27 deletions(-) delete mode 100644 extensions/Makefile create mode 100644 extensions/Makefile.am (limited to 'extensions') diff --git a/extensions/Makefile b/extensions/Makefile deleted file mode 100644 index e23ed90..0000000 --- a/extensions/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -CC=gcc - -all: - ${CC} -fPIC -Wall -g -c libct_proto_tcp.c - ${CC} -g -shared -Wl,-soname,libct_proto_tcp.so.0 -o libct_proto_tcp.so.0.0 libct_proto_tcp.o -lc - ln -sf libct_proto_tcp.so.0.0 libct_proto_tcp.so - - ${CC} -fPIC -Wall -g -c libct_proto_udp.c - ${CC} -g -shared -Wl,-soname,libct_proto_udp.so.0 -o libct_proto_udp.so.0.0 libct_proto_udp.o -lc - ln -sf libct_proto_udp.so.0.0 libct_proto_udp.so -clean: - rm -rf *.so *.so.* *.o diff --git a/extensions/Makefile.am b/extensions/Makefile.am new file mode 100644 index 0000000..ae78346 --- /dev/null +++ b/extensions/Makefile.am @@ -0,0 +1,14 @@ +AUTOMAKE_OPTIONS = no-dependencies foreign + +EXTRA_DIST = $(man_MANS) acinclude.m4 + +man_MANS = + +INCLUDES=-I../include -I/lib/modules/$(shell (uname -r))/build/include +CFLAGS=-fPIC -Wall +LIBS= + +lib_LTLIBRARIES = libct_proto_tcp.la libct_proto_udp.la + +libct_proto_tcp_la_SOURCES = libct_proto_tcp.c +libct_proto_udp_la_SOURCES = libct_proto_udp.c diff --git a/extensions/libct_proto_tcp.c b/extensions/libct_proto_tcp.c index 3366da4..58005b0 100644 --- a/extensions/libct_proto_tcp.c +++ b/extensions/libct_proto_tcp.c @@ -1,10 +1,19 @@ +/* + * (C) 2005 by Pablo Neira Ayuso + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ #include #include #include #include /* For htons */ #include #include -#include "../include/libct_proto.h" +#include "libct_proto.h" static struct option opts[] = { {"orig-port-src", 1, 0, '1'}, @@ -85,25 +94,33 @@ int parse(char c, char *argv[], break; } } - if (i == 10) + if (i == 10) { printf("doh?\n"); + return 0; + } } break; } return 1; } -void print(struct ip_conntrack_tuple *t) +void print_tuple(struct ip_conntrack_tuple *t) +{ + fprintf(stdout, "sport=%d dport=%d ", ntohs(t->src.u.tcp.port), + ntohs(t->dst.u.tcp.port)); +} + +void print_proto(union ip_conntrack_proto *proto) { - printf("sport=%d dport=%d ", ntohs(t->src.u.tcp.port), - ntohs(t->dst.u.tcp.port)); + fprintf(stdout, "[%s] ", states[proto->tcp.state]); } static struct ctproto_handler tcp = { .name = "tcp", .protonum = 6, .parse = parse, - .print = print, + .print_tuple = print_tuple, + .print_proto = print_proto, .opts = opts }; diff --git a/extensions/libct_proto_udp.c b/extensions/libct_proto_udp.c index cf91934..5675a05 100644 --- a/extensions/libct_proto_udp.c +++ b/extensions/libct_proto_udp.c @@ -1,10 +1,19 @@ +/* + * (C) 2005 by Pablo Neira Ayuso + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + */ #include #include #include #include /* For htons */ #include #include -#include "../include/libct_proto.h" +#include "libct_proto.h" static struct option opts[] = { {"orig-port-src", 1, 0, '1'}, @@ -14,6 +23,20 @@ static struct option opts[] = { {0, 0, 0, 0} }; +enum udp_param_flags { + ORIG_SPORT_BIT = 0, + ORIG_SPORT = (1 << ORIG_SPORT_BIT), + + ORIG_DPORT_BIT = 1, + ORIG_DPORT = (1 << ORIG_DPORT_BIT), + + REPL_SPORT_BIT = 2, + REPL_SPORT = (1 << REPL_SPORT_BIT), + + REPL_DPORT_BIT = 3, + REPL_DPORT = (1 << REPL_DPORT_BIT), +}; + int parse(char c, char *argv[], struct ip_conntrack_tuple *orig, struct ip_conntrack_tuple *reply, @@ -22,36 +45,44 @@ int parse(char c, char *argv[], { switch(c) { case '1': - if (optarg) + if (optarg) { orig->src.u.udp.port = htons(atoi(optarg)); + *flags |= ORIG_SPORT; + } break; case '2': - if (optarg) + if (optarg) { orig->dst.u.udp.port = htons(atoi(optarg)); + *flags |= ORIG_DPORT; + } break; case '3': - if (optarg) + if (optarg) { reply->src.u.udp.port = htons(atoi(optarg)); + *flags |= REPL_SPORT; + } break; case '4': - if (optarg) + if (optarg) { reply->dst.u.udp.port = htons(atoi(optarg)); + *flags |= REPL_DPORT; + } break; } return 1; } -void print(struct ip_conntrack_tuple *t) +void print_tuple(struct ip_conntrack_tuple *t) { - printf("sport=%d dport=%d ", ntohs(t->src.u.udp.port), - ntohs(t->dst.u.udp.port)); + fprintf(stdout, "sport=%d dport=%d ", ntohs(t->src.u.udp.port), + ntohs(t->dst.u.udp.port)); } static struct ctproto_handler udp = { .name = "udp", .protonum = 17, .parse = parse, - .print = print, + .print_tuple = print_tuple, .opts = opts }; -- cgit v1.2.3