diff options
author | Daniel Borkmann <dborkman@redhat.com> | 2013-07-03 17:41:04 +0200 |
---|---|---|
committer | Daniel Borkmann <dborkman@redhat.com> | 2013-07-03 17:41:04 +0200 |
commit | eaa0a2777dc29e5f701efbc037b303b52f3e08be (patch) | |
tree | 7edaa21a58c0ae9aac7524c4b6210ffe97a73920 | |
parent | c2dd1b3f2f459b90ed16600bcd5aa0369610e80e (diff) |
pcap: invoke dev->type to pcap linktype mapper
Invoke dev->type to pcap linktype mapper in order to write a correct
pcap file header for various link types. Also fix two bugs in pcap
file header parsing and print a warning with the magic link number in
case of an unknown link type.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-rw-r--r-- | netsniff-ng.c | 3 | ||||
-rw-r--r-- | pcap_io.h | 6 |
2 files changed, 5 insertions, 4 deletions
diff --git a/netsniff-ng.c b/netsniff-ng.c index 19d4db3..960ceaa 100644 --- a/netsniff-ng.c +++ b/netsniff-ng.c @@ -1102,7 +1102,6 @@ int main(int argc, char **argv) bool prio_high = false, setsockmem = true; void (*main_loop)(struct ctx *ctx) = NULL; struct ctx ctx = { - .link_type = LINKTYPE_EN10MB, .print_mode = PRINT_NORM, .cpu = -1, .packet_type = -1, @@ -1364,6 +1363,8 @@ int main(int argc, char **argv) if (ctx.device_in && (device_mtu(ctx.device_in) || !strncmp("any", ctx.device_in, strlen(ctx.device_in)))) { + if (!ctx.rfraw) + ctx.link_type = pcap_devtype_to_linktype(ctx.device_in); if (!ctx.device_out) { ctx.dump = 0; main_loop = recv_only_or_dump; @@ -663,17 +663,17 @@ static inline void pcap_validate_header(const struct pcap_filehdr *hdr) pcap_check_magic(hdr->magic); if (hdr->linktype < LINKTYPE_MAX) { - if (!pcap_supported_linktypes[hdr->linktype]) + if (pcap_supported_linktypes[hdr->linktype]) good = true; } if (linktype_swab < LINKTYPE_MAX) { - if (!pcap_supported_linktypes[linktype_swab]) + if (pcap_supported_linktypes[linktype_swab]) good = true; } if (!good) - panic("This file has an unsupported pcap header!\n"); + panic("This file has an unsupported pcap link type (%d)!\n", hdr->linktype); if (unlikely(hdr->version_major != PCAP_VERSION_MAJOR) && ___constant_swab16(hdr->version_major) != PCAP_VERSION_MAJOR) panic("This file has not a valid pcap header\n"); |