add packaging
authorAnas Nashif <anas.nashif@intel.com>
Wed, 7 Nov 2012 00:28:50 +0000 (16:28 -0800)
committerAnas Nashif <anas.nashif@intel.com>
Wed, 7 Nov 2012 00:28:50 +0000 (16:28 -0800)
packaging/tcpdump-qeth [new file with mode: 0644]

diff --git a/packaging/tcpdump-qeth b/packaging/tcpdump-qeth
new file mode 100644 (file)
index 0000000..b5e9b89
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+# (C)2002 by IBM Corporation, published under terms of the GPL V2
+# Author: Holger Smolinski <smolinsk@de.ibm.com>
+# this file is a wrapper around tcpdump, which provides the capability
+# for debugging qeth and/or HiperSocket(TM) network interfaces under
+# Linux for S/390 and zSeries. tcpdump Syntax is preserved.
+# Bugs: When the input pipe ends the process is not stopped.
+
+use Getopt::Std;
+
+my $incmd,$outcmd;
+
+getopts ("adeflnNOpqRStuvxXc:C:F:i:m:r:s:T:w:E:",\%options);
+
+# Check which options to replace for the reader process 
+if ( defined($options{'r'}) ) {
+  $incmd = "cat $options{'r'}";
+  $filter_out = 1;
+} else {
+  $incmd = "tcpdump -l -w -";
+  $filter_out = 0;
+  if ( defined($options{'i'}) ) {
+    $incmd .= " -i ".$options{'i'};
+    delete $options{'i'}; # remove -i option from option list
+  }
+  foreach $key (@ARGV) {
+    $incmd .= " $key";
+  }
+}
+
+$outcmd = "tcpdump -r -";
+# Rebuild arglist for the writer process
+delete $options{'r'}; # remove -r option from option list
+foreach $key (keys %options) {
+  if ((index "adeflnNOpqRStuvxX",$key) >= 0 ) {
+    $outcmd .= " -$key";
+  } else {
+    $outcmd .= " -$key $options{$key}";
+  }
+  if ( $filter_out == 1 ) {
+    foreach $key (@ARGV) {
+      $outcmd .= " $key";
+    }
+  }
+} 
+
+open READER,"$incmd|" or die "Cannot spawn reader command $incmd";
+open WRITER,"|$outcmd" or die "Cannot spawn writer command $outcmd";
+
+sysread READER,$filehdr,24 or die "Cannot read file header";
+($magic,$version_major,$version_minor,$thiszone,$sigfigs,$snaplen,$linktype) = 
+  unpack("ISSIIII",$filehdr);
+$snaplen += 14;
+$filehdr = pack ("ISSIIII",($magic,$version_major,$version_minor,$thiszone,$sigfigs,$snaplen,$linktype));
+syswrite WRITER,$filehdr,24;
+
+$etherheaderip6 = pack ("IIIS",(0,0,0,0x8dd));
+$etherheaderip4 = pack ("IIIS",(0,0,0,0x800));
+
+while ( 1 ) {
+  $hdrd = 0;
+  do {$hdrd += sysread READER, $pkthdr, 16-$hdrd, $hdrd; } while ($hdrd < 16);
+  ($seconds,$usecs,$caplen,$len) = unpack ("IIII",$pkthdr);
+  $hdrd = 0;
+  do {$hdrd += sysread READER, $packet,$caplen-$hdrd, $hdrd; } while ($hdrd < $caplen);
+  $paktype = unpack("C",$packet);
+  if ( $paktype & 0xf0 == 0x60 ) {
+    $caplen += 14;
+    $len += 14;
+    $header = $etehrheaderip6;
+  } elsif ($paktype >= 0x45 && $paktype <= 0x4f ) {
+    $caplen += 14;
+    $len += 14;
+    $header = $etherheaderip4;
+  } else {
+    $header = "";
+  }    
+  $pkthdr = pack ("IIII",($seconds,$usecs,$caplen,$len));
+  syswrite WRITER,"$pkthdr$header$packet",16+$caplen;
+}