aboutsummaryrefslogtreecommitdiffstats
path: root/make-manuf
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2010-12-06 18:30:14 +0000
committerGerald Combs <gerald@wireshark.org>2010-12-06 18:30:14 +0000
commit0bf5fcd6b3cf4ed0f67388fcc04b2eb2593c02fd (patch)
tree722daea864e1efe655c8cb6ccb793789498b5a28 /make-manuf
parent4d902b5c5ba93b853c5e0883ffa32648367c7bfa (diff)
Move make-manuf to the tools directory.
svn path=/trunk/; revision=35130
Diffstat (limited to 'make-manuf')
-rwxr-xr-xmake-manuf211
1 files changed, 0 insertions, 211 deletions
diff --git a/make-manuf b/make-manuf
deleted file mode 100755
index b31e14e2fd..0000000000
--- a/make-manuf
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/perl -w
-#
-# $Id$
-#
-# Make-manuf - Creates a file containing ethernet OUIs and their
-# company IDs. It merges the databases at
-# http://standards.ieee.org/regauth/oui/index.shtml and
-# http://www.cavebear.com/CaveBear/Ethernet/
-# with entries in our template file.
-#
-# The script reads the comments at the top of "manuf.tmpl" and writes
-# them to "manuf". It then joins the manufacturer listing in "manuf.tmpl"
-# with the listing in "oui.txt", with the entries in "manuf.tmpl" taking
-# precedence.
-
-# LWP is part of the standard Perl module libwww
-
-use Encode;
-use open ':encoding(utf8)';
-
-eval "require LWP::UserAgent;";
-if( $@ ) {
- die "LWP isn't installed. It is part of the standard Perl\n" .
- " module libwww. Bailing.\n";
-}
-$agent = LWP::UserAgent->new;
-
-$template = "manuf.tmpl";
-$wkatmpl = "wka.tmpl";
-$outfile = "manuf";
-$inheader = 1;
-$oui_url = "http://standards.ieee.org/regauth/oui/oui.txt";
-$iab_url = "http://standards.ieee.org/regauth/oui/iab.txt";
-$cb_url = "http://www.cavebear.com/CaveBear/Ethernet/Ethernet.txt";
-%oui_list = ();
-$hp = "[0-9a-fA-F]{2}";
-$oui_re = "$hp:$hp:$hp";
-$cb_re = "$hp$hp$hp";
-$ieee_re = "$hp-$hp-$hp";
-
-$tmpl_added = 0;
-$cb_added = 0;
-$cb_skipped = 0;
-$oui_added = 0;
-$oui_skipped = 0;
-$iab_added = 0;
-$iab_skipped = 0;
-
-sub shorten
-{
- my $origmanuf = shift;
- my $manuf = " " . $origmanuf . " ";
- # Remove any punctuation
- $manuf =~ tr/',.()/ /;
- # & isn't needed when Standalone
- $manuf =~ s/ \& / /g;
- # Remove any "the", "inc", "plc" ...
- $manuf =~ s/\s(the|inc|incorporated|plc||systems|corp|corporation|s\/a|a\/s|ab|ag|kg|gmbh|co|company|limited|ltd|holding|spa)(?= )//gi;
- # Convert to consistent case
- $manuf =~ s/(\w+)/\u\L$1/g;
- # Remove all spaces
- $manuf =~ s/\s+//g;
- # Truncate all names to a reasonable length, say, 8 characters.
- # If the string contains UTF-8, this may be substantially more than 8 bytes.
- $manuf = substr($manuf, 0, 8);
-
- if ($manuf =~ /\Q$origmanuf\E/i) {
- return $manuf;
- } else {
- return sprintf("%-22s # %s", $manuf, $origmanuf);
- }
-}
-
-sub fetch
-{
- my $url = shift;
- print "Fetching $url.\n";
- $request = HTTP::Request->new(GET => $url);
- $result = $agent->request($request);
-
- if (!$result->is_success) {
- die ("Error fetching $url: " . $result->status_line . "\n");
- }
- return decode("iso-8859-1", $result->content);
-}
-
-# Write out the header and populate the OUI list with our entries.
-
-open (TMPL, "< $template") ||
- die "Couldn't open template file for reading ($template)\n";
-
-while ($line = <TMPL>) {
- chomp($line);
- if ($line !~ /^$oui_re\s+\S/ && $inheader) {
- $header .= "$line\n";
- } elsif (($oui, $manuf) = ($line =~ /^($oui_re)\s+(\S.*)$/)) {
- $inheader = 0;
- # Ensure OUI is all upper-case
- $oui =~ tr/a-f/A-F/;
- # $oui_list{$oui} = &shorten($manuf);
- $oui_list{$oui} = $manuf;
- $tmpl_added++;
- }
-}
-
-# Add IEEE entries for IABs
-
-$ieee_list = fetch($iab_url);
-
-foreach $line (split(/\n/, $ieee_list)) {
- # determine the OUI used for IAB (currently only 00-50-C2)
- if (($iab_tmp, $manuf) = ($line =~ /^($ieee_re)\s+\(hex\)\s+(\S.*)$/)) {
- $iab_base = $iab_tmp;
- }
- # determine next two bytes
- if (($iab4, $iab5, $manuf) = ($line =~ /^($hp)($hp)$hp-$hp$hp$hp\s+\(base\s16\)\s+(\S.*)$/)) {
- $iab = "$iab_base:$iab4:$iab5:00/36";
- $iab =~ tr /-/:/; # The IEEE bytes are separated by dashes.
- # Ensure IAB is all upper-case
- $iab =~ tr/a-f/A-F/;
- if (exists $oui_list{$iab}) {
- printf "$iab - Skipping IEEE \"$manuf\" in favor of \"$oui_list{$iab}\"\n";
- $iab_skipped++;
- } else {
- $oui_list{$iab} = &shorten($manuf);
- $iab_added++;
- }
- }
-}
-
-# Add IEEE entries for OUIs not yet known.
-
-$ieee_list = fetch($oui_url);
-
-foreach $line (split(/\n/, $ieee_list)) {
- if (($oui, $manuf) = ($line =~ /^($ieee_re)\s+\(hex\)\s+(\S.*)$/)) {
- $oui =~ tr /-/:/; # The IEEE bytes are separated by dashes.
- # Ensure OUI is all upper-case
- $oui =~ tr/a-f/A-F/;
- if (exists $oui_list{$oui}) {
- printf "$oui - Skipping IEEE \"$manuf\" in favor of \"$oui_list{$oui}\"\n";
- $oui_skipped++;
- } else {
- $oui_list{$oui} = &shorten($manuf);
- $oui_added++;
- }
- }
-}
-
-# Add CaveBear entries for OUIs not yet known.
-
-$cb_list = fetch($cb_url);
-
-foreach $line (split(/\n/, $cb_list)) {
- if (($oui, $manuf) = ($line =~ /^($cb_re)\s+(\S.*)$/)) {
- ($h1, $h2, $h3) = ($oui =~ /($hp)($hp)($hp)/); # The CaveBear bytes have no separators
- $oui = "$h1:$h2:$h3";
- # Ensure OUI is all upper-case
- $oui =~ tr/a-f/A-F/;
- if (exists $oui_list{$oui}) {
- # printf "$oui - Skipping CaveBear \"$manuf\" in favor of \"$oui_list{$oui}\"\n";
- $cb_skipped++;
- } else {
- printf "$oui - adding \"$manuf\" from CaveBear\n";
- $oui_list{$oui} = &shorten($manuf);
- $cb_added++;
- }
- }
-}
-
-# Write output file
-
-open (OUT, "> $outfile") ||
- die "Couldn't open output file for writing ($outfile)\n";
-
-print(OUT "# This file was generated by running ./make-manuf.\n");
-print(OUT "# Don't change it directly, change manuf.tmpl and wka.tmpl instead.\n#\n");
-print(OUT "$header");
-
-foreach $oui (sort(keys %oui_list)) {
- print(OUT "$oui\t$oui_list{$oui}\n");
-}
-
-# Write out a blank line separating the OUIs from the well-known
-# addresses, and then read the well-known address template file
-# and write it to the manuf file.
-
-open (WKATMPL, "< $wkatmpl") ||
- die "Couldn't open well-known address template file for reading ($wkatmpl)\n";
-
-# XXX - it'd be nice to get this from the Cavebear file, but inferring
-# the address mask from entries in that file involves some work.
-#
-print(OUT "\n");
-while ($line = <WKATMPL>) {
- chomp($line);
- print(OUT "$line\n");
-}
-
-$total_added = $tmpl_added + $cb_added + $oui_added + $iab_added;
-print <<"Fin"
-Original entries : $tmpl_added
-IEEE OUI added : $oui_added
-IEEE IAB added : $iab_added
-CaveBear added : $cb_added
-Total : $total_added
-
-IEEE OUI skipped : $oui_skipped
-IEEE IAB skipped : $iab_skipped
-CaveBear skipped : $cb_skipped
-Fin