1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/usr/bin/perl -w
#
# Project : ipv6calc
# File : create_ieee_oui_headerfile.pl
# Version : $Id: create_ieee_oui_headerfile.pl,v 1.10 2011/10/08 11:50:13 peter Exp $
# Copyright : 2002-2011 by Peter Bieringer <pb (at) bieringer.de>
#
# Creates a header file out of IEEE/oui.txt
use strict;
use File::stat;
use POSIX qw(strftime);
my $INFILE;
my $OUTFILE = "dbieee_oui.h";
$INFILE = shift;
if (! defined $INFILE) { $INFILE = "oui.txt" };
print "Create dbieee_oui.h automatically\n";
open(IN, "<$INFILE") || die "Cannot open infile: $INFILE";
open(OUT, ">$OUTFILE") || die "Cannot open outfile: $OUTFILE";
# Header
my $now_string = localtime;
print OUT qq|/*
* Project : ipv6calc
* File : dbieee_oui.h
|;
print OUT " * Version : \$Id";
print OUT ":\$\n";
print OUT qq| * Generated : $now_string
* Data copyright: IEEE
*
* Information:
* Additional header file for libieee.c
*/
|;
# print creation date
my $sb = stat($INFILE);
print OUT "static const char* libieee_oui_status = \"OUI/" . strftime("%Y%m%d", localtime($sb->mtime)) . "\";\n";
# Structure
print OUT qq|
static const s_ieee_oui libieee_oui[] = {
|;
# Data
my $i = 0;
while (<IN>) {
my $line = $_;
chomp $line;
if ($line =~ /\(hex\)/ ) {
$i++;
print STDERR $i . "\r";
# kill spaces
$line =~ s/[ \t]+/ /g;
#print $line . "\n";
my ($t1, $t2, $t3) = split / /, $line, 3;
my ($a, $b, $c) = split /-/, $t1;
# shorten OUI string
my $oui = uc($t3);
# replace '(' ')' '&'
$oui =~ s/[\(\)\&\',]/ /ig;
# remove unimportant information
$oui =~ s/\bINC[\.]*\b//ig;
$oui =~ s/\bLTD[\.]*\b//ig;
$oui =~ s/\bLIMITED\b//ig;
$oui =~ s/\bCO[\.]*\b//ig;
$oui =~ s/\bCORP[\.]*\b//ig;
$oui =~ s/\bCOMP[\.]\b//ig;
$oui =~ s/\bGMBH\b//ig;
$oui =~ s/\bCORPORATION\b//ig;
$oui =~ s/\bS[\.]*A[\.]*\b//ig;
$oui =~ s/\bAG\b/ELECTRONIC/ig;
$oui =~ s/\bKG\b//ig;
$oui =~ s/\bBV\b//ig;
# Replace some text
$oui =~ s/\b3 Com\b/3COM/ig;
$oui =~ s/\b3Com Europe\b/3COM/ig;
$oui =~ s/\bCOMMUNICATIONS\b/COMMUNICATION/ig;
$oui =~ s/\bCORPOTATION\b/CORPORATION/ig;
$oui =~ s/\bINTERNAIONAL\b/INTERNATIONAL/ig;
# remove some unneeded text
$oui =~ s/\bINTERNATIONAL\b//ig;
$oui =~ s/\bTECHNOLOGY\b//ig;
$oui =~ s/\bCOMPUTER\b//ig;
$oui =~ s/\bSYSTEMS\b//ig;
$oui =~ s/\bENTERPRISE\b//ig;
$oui =~ s/\bCORPORATION\b//ig;
$oui =~ s/\bELECTRONIC\b//ig;
$oui =~ s/\bHF1-06\b//ig;
# remove ',' '.', '"'
$oui =~ s/[,\.;"]/ /ig;
# remove leading and trailing spaces
$oui =~ s/^\s+//ig;
$oui =~ s/\s+$//ig;
# convert spaces to '-'
$oui =~ s/\s+/-/ig;
# Some final cleanup
$oui =~ s/-INT-L//ig;
$oui =~ s/-B-V//ig;
# remove trailling '-'
$oui =~ s/-+$//ig;
# escape "
$t3 =~ s/"/\\"/g;
print OUT "\t{ 0x" . $a . $b . $c . ", \"$t3\", \"$oui\" },\n";
};
};
print OUT qq|
};
|;
print "Finished\n";
|