Package: tcpreplay
Version: 2.99+3.0.beta11-3
Severity: normal
Tags: patch

Hi,

I'm trying to resend the output of ulogd-pcap to an Ethernet network
with tcpreplay. These pcap files are type DLT_RAW rather than the more
common DLT_EN10MB, so they need a fake Ethernet header around them.
The tcprewrite options '--dlt' (change DLT type) and '--dlink' (rewrite
L2 header) are made for this, but '--dlt' doesn't work:

% file ulogd.pcap 
ulogd.pcap: tcpdump capture file (little-endian) - version 2.4 (raw IP, capture 
length 65535)
% tcprewrite --dlink=ff,ff,de,ad,be,ef,00,00,de,ad,be,ef,08,00 --dlt=1 -i 
ulogd.pcap -o ethernet.pcap
Unable to edit packets given options/DLT types:
Sorry, but tcpedit currently only supports writing to DLT_EN10MB output

Obviously, this is incorrect since I'm explicitly requesting DLT_EN10MB
output (defined as 1 in /usr/include/pcap_bpf.h).

Looking at the code, the '--dlt' option isn't taken into account properly
when tcpedit_validate() is called. The attached patch fixes this. Please
consider including it.

Cheers,
-- 
Niko Tyni   [EMAIL PROTECTED]
--- tcpreplay-2.99+3.0.beta11/src/tcprewrite.c
+++ tcpreplay-2.99+3.0.beta11/src/tcprewrite.c
@@ -111,7 +111,7 @@
 #endif
     
     if (tcpedit_validate(&tcpedit, pcap_datalink(options.pin), 
-            pcap_datalink(options.pin)) < 0) {
+            HAVE_OPT(DLT) ? OPT_ARG(DLT) : pcap_datalink(options.pin)) < 0) {
         errx(1, "Unable to edit packets given options/DLT types:\n%s",
                 tcpedit_geterr(&tcpedit));
     }

Reply via email to