#!/usr/bin/perl

use warnings;
use strict;
use Text::CSV;

binmode STDIN, ':utf8';

my ($lineno, $entry, $registry, $mac, $vendor, $address);

my $csv = Text::CSV->new({
	allow_loose_quotes => 1,
	auto_diag => 1,
	binary => 1,
	eol => $/
});

open OUI, ">:encoding(utf8)", "ieee-oui.txt" || die "Could not open ieee-oui.txt for writing";
open DAT, ">:encoding(utf8)", "ethercodes.dat" || die "Could not open ethercodes.dat for writing";
open AIR, ">:encoding(utf8)", "aircrack-oui.txt" || die "Could not open oui.txt for writing";

$csv->bind_columns (\$registry, \$mac, \$vendor, \$address);

while ($csv->getline(*STDIN)) {
	$lineno++;
	next if ($mac eq 'Assignment');
	$entry++;
	print OUI "$mac\t$vendor\n";

	# skip >24-bit vendors for aircrack-ng and arpwatch
	next if (length($mac) ne 6);

	printf AIR "%s-%s-%s   (hex)\t\t%s\n", substr($mac,0,2), substr($mac,2,2), substr($mac,4,2), $vendor;

	# arpwatch doesn't want a leading 0
	$mac = lc($mac);
	print DAT substr($mac,0,1) unless substr($mac,0,1) eq '0';
	print DAT substr($mac,1,1), ':';
	print DAT substr($mac,2,1) unless substr($mac,2,1) eq '0';
	print DAT substr($mac,3,1), ':';
	print DAT substr($mac,4,1) unless substr($mac,4,1) eq '0';
	print DAT substr($mac,5,1);
	print DAT "\t$vendor\n";
}

close OUI;
close DAT;
close AIR;
print STDERR "$entry entries\n";
