summaryrefslogtreecommitdiff
path: root/scripts/dlt2name.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/dlt2name.pl')
-rw-r--r--scripts/dlt2name.pl186
1 files changed, 186 insertions, 0 deletions
diff --git a/scripts/dlt2name.pl b/scripts/dlt2name.pl
new file mode 100644
index 0000000..f10dbbc
--- /dev/null
+++ b/scripts/dlt2name.pl
@@ -0,0 +1,186 @@
+#!/usr/bin/perl -w
+
+# Parses the bpf.h header file to generate the dlt_names.h header
+# which maps the DLT types to the DLT string name
+
+# run from the tcpreplay source base directory as:
+# cat /usr/include/pcap-bpf.h | ./scripts/dlt2name.pl
+
+use strict;
+my $out_c = 'src/common/dlt_names.c';
+my $out_h = 'src/common/dlt_names.h';
+
+# open outfile
+open(OUT_C, ">$out_c") or die("Unable to open $out_c for writing: $!");
+open(OUT_H, ">$out_h") or die("Unable to open $out_h for writing: $!");
+
+# read STDIN
+
+# some DLT types aren't in a format we can parse easily or just doesn't
+# exist in my /usr/include/net/bpf.h file so we list them here
+my %known = (107 => 'BSD/OS Frame Relay',
+ 108 => 'OpenBSD Loopback',
+ 113 => 'Linux Cooked Sockets',
+ 114 => 'Apple LocalTalk',
+ 115 => 'Acorn Econet',
+ 116 => 'OpenBSD IPFilter',
+ 117 => 'OpenBSD PF Log/SuSE 6.3 LANE 802.3',
+ 118 => 'Cisco IOS',
+ 119 => '802.11 Prism Header',
+ 120 => '802.11 Aironet Header',
+ 121 => 'Siemens HiPath HDLC',
+ 122 => 'IP over Fibre Channel'
+ );
+my @names;
+
+# put our known DLT types in names since the format of bpf.h is
+# inconsistent
+
+foreach my $dlt (keys %known) {
+ $names[$dlt]{name} = $known{$dlt};
+}
+
+while (my $line = <STDIN>) {
+
+ if ($line =~ /^\#define\s+(DLT_[a-zA-Z0-9_]+)\s+(\d+)/) {
+ my $key = $1;
+ my $dlt = $2;
+ my $name = $names[$dlt]{name} ? $names[$dlt]{name} : "";
+ if ($line =~ /\/\*\s+(.*)\s+\*\//) {
+ $name = $1;
+ }
+ $names[$dlt]{key} = $key;
+ $names[$dlt]{name} = $name;
+ }
+
+}
+
+# print the license info
+while (my $line = <DATA>) {
+ print OUT_C $line;
+ print OUT_H $line;
+}
+
+# prep the header
+print OUT_C <<HEADER;
+
+#include <stdlib.h>
+
+/* DLT to descriptions */
+char *dlt2desc[] = {
+HEADER
+
+for (my $i = 0; $i < $#names; $i ++) {
+ if (! defined $names[$i]) {
+ print OUT_C "\t\t\"Unknown\",\n";
+ } else {
+ print OUT_C "\t\t\"$names[$i]->{name}\",\n";
+ }
+}
+
+print OUT_C <<FOOTER;
+\t\tNULL
+};
+
+FOOTER
+
+print OUT_H <<HEADER;
+
+/* include all the DLT types form pcap-bpf.h */
+
+extern const char *dlt2desc[];
+extern const char *dlt2name[];
+#define DLT2DESC_LEN $#names
+#define DLT2NAME_LEN $#names
+
+HEADER
+
+for (my $i = 0; $i < 255; $i++) {
+ next if ! defined $names[$i];
+ print OUT_H "#ifndef $names[$i]{key}\n#define $names[$i]{key} $i\n#endif\n\n";
+}
+
+print OUT_C <<NAMES;
+
+/* DLT to names */
+char *dlt2name[] = {
+NAMES
+
+for (my $i = 0; $i < 255; $i++) {
+ if (! defined $names[$i]) {
+ print OUT_C "\t\t\"Unknown\",\n";
+ } else {
+ print OUT_C "\t\t\"$names[$i]{key}\",\n";
+ }
+}
+
+print OUT_C <<FOOTER;
+\t\tNULL
+};
+FOOTER
+
+close OUT_C;
+close OUT_H;
+
+exit 0;
+
+__DATA__
+/*
+ * Copyright (c) 2006 Aaron Turner
+ * All rights reserved.
+ *
+ * This file is generated by scripts/dlt2name.pl which converts your pcap-bpf.h
+ * header file which comes with libpcap into a header file
+ * which translates DLT values to their string names as well as a list of all
+ * of the available DLT types.
+ *
+ * Hence DO NOT EDIT THIS FILE!
+ * If your DLT type is not listed here, edit the %known hash in
+ * scripts/dlt2name.pl
+ *
+ * This file contains data which was taken from libpcap's pcap-bpf.h.
+ * The copyright/license is included below:
+ */
+
+ /*-
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from the Stanford/CMU enet packet filter,
+ * (net/enet.c) distributed as part of 4.3BSD, and code contributed
+ * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
+ * Berkeley Laboratory.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)bpf.h 7.1 (Berkeley) 5/7/91
+ *
+ * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.34.2.6 2005/08/13 22:29:47 hannes Exp $ (LBL)
+ */
+