aboutsummaryrefslogtreecommitdiffstats
path: root/tests/osmo-pcap-test/l3_ipv4.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2012-06-28 12:53:45 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2012-06-28 16:42:22 +0200
commit75755dd7d948992d6c5d05f298559f01b511607d (patch)
treefa6276508c9ef6f1c8e5a16238b6d2149b3e9a52 /tests/osmo-pcap-test/l3_ipv4.c
parent729a0917ac17e2c5a70ab24cc884ff68a7df52af (diff)
test: add osmo-pcap-test infrastructure
This patch adds the osmo-pcap-test infrastructure that allows you to take packets stored in one pcap file, convert them to msgb and pass it to some function. The infrastructure also provides timing reconstruction based on the pcap file information. This is useful for easy protocol development, automated testing and fuzzying of the existing code to validate the code. Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>
Diffstat (limited to 'tests/osmo-pcap-test/l3_ipv4.c')
-rw-r--r--tests/osmo-pcap-test/l3_ipv4.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/osmo-pcap-test/l3_ipv4.c b/tests/osmo-pcap-test/l3_ipv4.c
new file mode 100644
index 0000000..83e3479
--- /dev/null
+++ b/tests/osmo-pcap-test/l3_ipv4.c
@@ -0,0 +1,44 @@
+/*
+ * (C) 2012 by Pablo Neira Ayuso <pablo@gnumonks.org>
+ * (C) 2012 by On Waves ehf <http://www.on-waves.com>
+ *
+ * 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 vers
+ */
+
+#include <stdlib.h>
+#include <netinet/ip.h>
+#include <linux/if_ether.h>
+
+#include "proto.h"
+
+#define PRINT_CMP(...)
+
+static int l3_ipv4_pkt_l4proto_num(const uint8_t *pkt)
+{
+ const struct iphdr *iph = (const struct iphdr *)pkt;
+
+ return iph->protocol;
+}
+
+static int l3_ipv4_pkt_l3hdr_len(const uint8_t *pkt)
+{
+ const struct iphdr *iph = (const struct iphdr *)pkt;
+
+ return iph->ihl << 2;
+}
+
+static struct osmo_pcap_proto_l2l3 ipv4 = {
+ .l2protonum = ETH_P_IP,
+ .l3protonum = AF_INET,
+ .l2hdr_len = ETH_HLEN,
+ .l3pkt_hdr_len = l3_ipv4_pkt_l3hdr_len,
+ .l4pkt_proto = l3_ipv4_pkt_l4proto_num,
+};
+
+void l2l3_ipv4_init(void)
+{
+ osmo_pcap_proto_l2l3_register(&ipv4);
+}