Re-import of fprobe-ulog
[iptables.git] / src / netflow.c
diff --git a/src/netflow.c b/src/netflow.c
new file mode 100644 (file)
index 0000000..3e5435e
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+       Copyright (C) Slava Astashonok <sla@0n.ru>
+
+       This program is free software; you can redistribute it and/or
+       modify it under the terms of the GNU General Public License.
+
+       $Id: netflow.c,v 1.2.2.4 2004/02/02 08:06:24 sla Exp $
+*/
+
+#include <common.h>
+
+#include <netflow.h>
+
+static uint16_t NetFlow1_Header[] = {
+       NETFLOW_VERSION,
+       NETFLOW_COUNT,
+       NETFLOW_UPTIME,
+       NETFLOW_UNIX_SECS,
+       NETFLOW_UNIX_NSECS
+};
+
+static uint16_t NetFlow1_Flow[] = {
+       NETFLOW_IPV4_SRC_ADDR,
+       NETFLOW_IPV4_DST_ADDR,
+       NETFLOW_IPV4_NEXT_HOP,
+       NETFLOW_INPUT_SNMP,
+       NETFLOW_OUTPUT_SNMP,
+       NETFLOW_PKTS_32,
+       NETFLOW_BYTES_32,
+       NETFLOW_FIRST_SWITCHED,
+       NETFLOW_LAST_SWITCHED,
+       NETFLOW_L4_SRC_PORT,
+       NETFLOW_L4_DST_PORT,
+       NETFLOW_PAD16,
+       NETFLOW_PROT,
+       NETFLOW_SRC_TOS,
+       NETFLOW_TCP_FLAGS,
+       NETFLOW_PAD8, NETFLOW_PAD8, NETFLOW_PAD8,
+       NETFLOW_PAD32
+};
+
+static uint16_t NetFlow5_Header[] = {
+       NETFLOW_VERSION,
+       NETFLOW_COUNT,
+       NETFLOW_UPTIME,
+       NETFLOW_UNIX_SECS,
+       NETFLOW_UNIX_NSECS,
+       NETFLOW_FLOW_SEQUENCE,
+       NETFLOW_ENGINE_TYPE,
+       NETFLOW_ENGINE_ID,
+       NETFLOW_PAD16
+};
+
+static uint16_t NetFlow5_Flow[] = {
+       NETFLOW_IPV4_SRC_ADDR,
+       NETFLOW_IPV4_DST_ADDR,
+       NETFLOW_IPV4_NEXT_HOP,
+       NETFLOW_INPUT_SNMP,
+       NETFLOW_OUTPUT_SNMP,
+       NETFLOW_PKTS_32,
+       NETFLOW_BYTES_32,
+       NETFLOW_FIRST_SWITCHED,
+       NETFLOW_LAST_SWITCHED,
+       NETFLOW_L4_SRC_PORT,
+       NETFLOW_L4_DST_PORT,
+       NETFLOW_PAD8,
+       NETFLOW_TCP_FLAGS,
+       NETFLOW_PROT,
+       NETFLOW_SRC_TOS,
+       NETFLOW_SRC_AS,
+       NETFLOW_DST_AS,
+       NETFLOW_SRC_MASK,
+       NETFLOW_DST_MASK,
+       NETFLOW_PAD16
+};
+
+static uint16_t NetFlow7_Header[] = {
+       NETFLOW_VERSION,
+       NETFLOW_COUNT,
+       NETFLOW_UPTIME,
+       NETFLOW_UNIX_SECS,
+       NETFLOW_UNIX_NSECS,
+       NETFLOW_FLOW_SEQUENCE,
+       NETFLOW_PAD32
+};
+
+static uint16_t NetFlow7_Flow[] = {
+       NETFLOW_IPV4_SRC_ADDR,
+       NETFLOW_IPV4_DST_ADDR,
+       NETFLOW_IPV4_NEXT_HOP,
+       NETFLOW_INPUT_SNMP,
+       NETFLOW_OUTPUT_SNMP,
+       NETFLOW_PKTS_32,
+       NETFLOW_BYTES_32,
+       NETFLOW_FIRST_SWITCHED,
+       NETFLOW_LAST_SWITCHED,
+       NETFLOW_L4_SRC_PORT,
+       NETFLOW_L4_DST_PORT,
+       NETFLOW_FLAGS7_1,
+       NETFLOW_TCP_FLAGS,
+       NETFLOW_PROT,
+       NETFLOW_SRC_TOS,
+       NETFLOW_SRC_AS,
+       NETFLOW_DST_AS,
+       NETFLOW_SRC_MASK,
+       NETFLOW_DST_MASK,
+       NETFLOW_FLAGS7_2,
+       NETFLOW_ROUTER_SC
+};
+
+struct NetFlow NetFlow1 = {
+       NETFLOW1_VERSION,
+       NETFLOW1_HEADER_SIZE,
+       NETFLOW1_MAX_FLOWS,
+       NETFLOW1_FLOW_SIZE,
+       NETFLOW1_SEQ_OFFSET,
+       sizeof(NetFlow1_Header) / sizeof(uint16_t),
+       NetFlow1_Header,
+       sizeof(NetFlow1_Flow) / sizeof(uint16_t),
+       NetFlow1_Flow
+};
+
+struct NetFlow NetFlow5 = {
+       NETFLOW5_VERSION,
+       NETFLOW5_HEADER_SIZE,
+       NETFLOW5_MAX_FLOWS,
+       NETFLOW5_FLOW_SIZE,
+       NETFLOW5_SEQ_OFFSET,
+       sizeof(NetFlow5_Header) / sizeof(uint16_t),
+       NetFlow5_Header,
+       sizeof(NetFlow5_Flow) / sizeof(uint16_t),
+       NetFlow5_Flow
+};
+
+struct NetFlow NetFlow7 = {
+       NETFLOW7_VERSION,
+       NETFLOW7_HEADER_SIZE,
+       NETFLOW7_MAX_FLOWS,
+       NETFLOW7_FLOW_SIZE,
+       NETFLOW7_SEQ_OFFSET,
+       sizeof(NetFlow7_Header) / sizeof(uint16_t),
+       NetFlow7_Header,
+       sizeof(NetFlow7_Flow) / sizeof(uint16_t),
+       NetFlow7_Flow
+};