From a92ee55cda86794c1d65a4962fae993b85504c07 Mon Sep 17 00:00:00 2001 From: Mike Gilbert Date: Sun, 6 Mar 2016 09:33:46 -0500 Subject: [PATCH] Fetch new version of ids-update.pl and adjust Makefile --- Makefile | 7 ++++-- ma-large.txt | 1 + udev-hwdb-update.pl | 54 ++++++++++++++++++++++++++++++++++++--------- 3 files changed, 49 insertions(+), 13 deletions(-) create mode 120000 ma-large.txt diff --git a/Makefile b/Makefile index 18e42ad..a2893cb 100644 --- a/Makefile +++ b/Makefile @@ -40,11 +40,14 @@ all: $(ALL_TARGETS-yes) install: $(INSTALL_TARGETS-yes) +# OUI/IAB: https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries fetch: $(Q)curl -z pci.ids -o pci.ids -R http://pci-ids.ucw.cz/v2.2/pci.ids $(Q)curl -z usb.ids -o usb.ids -R http://www.linux-usb.org/usb.ids - $(Q)curl -z oui.txt -o oui.txt -R http://standards-oui.ieee.org/oui.txt - $(Q)curl -z iab.txt -o iab.txt -R http://standards.ieee.org/develop/regauth/iab/iab.txt + $(Q)curl -z oui.txt -o oui.txt -R http://standards-oui.ieee.org/oui/oui.txt + $(Q)curl -z ma-medium.txt -o ma-medium.txt -R http://standards-oui.ieee.org/oui28/mam.txt + $(Q)curl -z ma-small.txt -o ma-small.txt -R http://standards-oui.ieee.org/oui36/oui36.txt + $(Q)curl -z iab.txt -o iab.txt -R http://standards-oui.ieee.org/iab/iab.txt $(Q)curl -L -z sdio.ids -o sdio.ids -R $(SYSTEMD_SOURCE)/sdio.ids $(Q)curl -L -z udev-hwdb-update.pl -o udev-hwdb-update.pl -R $(SYSTEMD_SOURCE)/ids-update.pl $(Q)for f in $(UDEV_FILES); do curl -L -z udev/$$f -o udev/$$f -R $(SYSTEMD_SOURCE)/$$f; done diff --git a/ma-large.txt b/ma-large.txt new file mode 120000 index 0000000..e490e9d --- /dev/null +++ b/ma-large.txt @@ -0,0 +1 @@ +oui.txt \ No newline at end of file diff --git a/udev-hwdb-update.pl b/udev-hwdb-update.pl index 86d414a..03dd00b 100644 --- a/udev-hwdb-update.pl +++ b/udev-hwdb-update.pl @@ -276,25 +276,30 @@ sub sdio_classes { close(OUT); } +# MAC Address Block Large/Medium/Small +# Large MA-L 24/24 bit (OUI) +# Medium MA-M 28/20 bit (OUI prefix owned by IEEE) +# Small MA-S 36/12 bit (OUI prefix owned by IEEE) sub oui { - my $iab_prefix; - my %iab_prefixes = (); + my $prefix; + my %ieee_prefixes = (); open(OUT, ">", "20-OUI.hwdb"); print(OUT "# This file is part of systemd.\n" . "#\n" . "# Data imported from:\n" . - "# http://standards.ieee.org/develop/regauth/oui/oui.txt\n" . - "# http://standards.ieee.org/develop/regauth/iab/iab.txt\n"); + "# https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-L&format=txt\n" . + "# https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-M&format=txt\n" . + "# https://services13.ieee.org/RST/standards-ra-web/rest/assignments/download/?registry=MA-S&format=txt\n"); - open(IN, "<", "iab.txt"); + open(IN, "<", "ma-small.txt"); while (my $line = ) { $line =~ s/^ +//; $line =~ s/\s+$//; $line =~ m/^([0-9A-F]{2})-([0-9A-F]{2})-([0-9A-F]{2})\s*\(hex\)\s*.+$/; if (defined $1) { - $iab_prefix = $1 . $2 . $3; - $iab_prefixes{ $iab_prefix } = 1; + $prefix = $1 . $2 . $3; + $ieee_prefixes{ $prefix } = 1; next; } @@ -304,13 +309,35 @@ sub oui { my $text = $2; print(OUT "\n"); - print(OUT "OUI:" . $iab_prefix . $vendor . "*\n"); + print(OUT "OUI:" . $prefix . $vendor . "*\n"); print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n"); } } close(IN); - open(IN, "<", "oui.txt"); + open(IN, "<", "ma-medium.txt"); + while (my $line = ) { + $line =~ s/^ +//; + $line =~ s/\s+$//; + $line =~ m/^([0-9A-F]{2})-([0-9A-F]{2})-([0-9A-F]{2})\s*\(hex\)\s*.+$/; + if (defined $1) { + $prefix = $1 . $2 . $3; + $ieee_prefixes{ $prefix } = 1; + next; + } + + $line =~ m/^([0-9A-F])00000-\g1FFFFF\s*\(base 16\)\s*(.+)$/; + if (defined $1) { + my $vendor = uc $1; + my $text = $2; + + print(OUT "\n"); + print(OUT "OUI:" . $prefix . $vendor . "*\n"); + print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n"); + } + } + + open(IN, "<", "ma-large.txt"); while (my $line = ) { $line =~ s/^ +//; $line =~ s/\s+$//; @@ -319,8 +346,12 @@ sub oui { my $vendor = uc $1; my $text = $2; - # skip the IAB prefixes - if (! exists $iab_prefixes{ $vendor }) { + if ($text =~ m/^IEEE REGISTRATION AUTHORITY/) { + next; + } + + # skip the IEEE owned prefixes + if (! exists $ieee_prefixes{ $vendor }) { print(OUT "\n"); print(OUT "OUI:" . $vendor . "*\n"); print(OUT " ID_OUI_FROM_DATABASE=" . $text . "\n"); @@ -328,6 +359,7 @@ sub oui { } } close(IN); + close(OUT); } -- 2.25.1