diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2012-06-28 12:53:45 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2012-06-28 16:42:22 +0200 |
commit | 75755dd7d948992d6c5d05f298559f01b511607d (patch) | |
tree | fa6276508c9ef6f1c8e5a16238b6d2149b3e9a52 /tests/osmo-pcap-test/l3_ipv4.c | |
parent | 729a0917ac17e2c5a70ab24cc884ff68a7df52af (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.c | 44 |
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); +} |