]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Create and manage information on MAC address OUIs
authorThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 23 Aug 2000 06:02:23 +0000 (06:02 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 23 Aug 2000 06:02:23 +0000 (06:02 +0000)
 (Organizationally Unique Identifiers).
 This is the manufacturer's code in the MAC address.

contrib/mac/createoui [new file with mode: 0755]
contrib/mac/dropoui [new file with mode: 0755]
contrib/mac/ouiparse.awk [new file with mode: 0644]
contrib/mac/updateoui [new file with mode: 0755]

diff --git a/contrib/mac/createoui b/contrib/mac/createoui
new file mode 100755 (executable)
index 0000000..56d81c2
--- /dev/null
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Utility to create manufacturer's oui table
+# OUI is "Organizationally Unique Identifier" assigned by IEEE.
+# There are currently three duplicate listings, so we can not enforce
+# uniqueness in the OUI field.
+# - thomas 2000-08-21
+
+args=
+update=0
+
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    --update)
+        update=1
+        ;;
+    --noupdate)
+        update=0
+        ;;
+    --help)
+        echo "Usage: $0 --[no]update dbname"
+        exit
+        ;;
+    *)
+        args="$args $1"
+        ;;
+    esac
+    shift
+done
+
+psql -e $args <<EOF
+-- Table containing OUI portions of MAC address and manufacturer's name
+create table macoui (
+  addr macaddr not null,
+  name text not null
+);
+
+-- Create an index to help lookups
+create index macoui_idx on macoui (addr);
+
+-- Function to return manufacturer's name given MAC address
+create function manuf (macaddr)
+       returns text as '
+               select name from macoui m where trunc(\$1) = m.addr;
+' language 'SQL';
+EOF
+
+if [ $update -gt 0 ]; then
+    updateoui $args
+fi
+
+exit
diff --git a/contrib/mac/dropoui b/contrib/mac/dropoui
new file mode 100755 (executable)
index 0000000..6fffdc9
--- /dev/null
@@ -0,0 +1,25 @@
+#! /bin/sh
+# Utility to remove manufacturer's oui table
+
+args=
+
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    --help)
+        echo "Usage: $0 dbname"
+        exit
+        ;;
+    *)
+        args="$args $1"
+        ;;
+    esac
+    shift
+done
+
+psql $args <<EOF
+drop function manuf(macaddr);
+drop table macoui;
+EOF
+
+exit
diff --git a/contrib/mac/ouiparse.awk b/contrib/mac/ouiparse.awk
new file mode 100644 (file)
index 0000000..63c264a
--- /dev/null
@@ -0,0 +1,53 @@
+# $Id: ouiparse.awk,v 1.1 2000/08/23 06:02:23 thomas Exp $
+#
+# ouiparse.awk
+# Author: Lawrence E. Rosenman <ler@lerctr.org>
+# Original Date: 30 July 2000 (in this form).
+# This AWK script takes the IEEE's oui.txt file and creates insert
+# statements to populate a SQL table with the following attributes:
+# create table oui (
+#        oui macaddr primary key,
+#        manufacturer text);
+# the table name is set by setting the AWK variable TABLE
+# 
+# we translate the character apostrophe (') to space inside the company name
+# to avoid SQL errors.
+#
+# match ONLY lines that begin with 2 hex numbers, -, and another hex number
+
+BEGIN {
+       TABLE="macoui";
+       printf "DELETE FROM %s;",TABLE;
+       printf "BEGIN TRANSACTION;";
+       nrec=0;
+}
+
+END {
+#      if (nrec > 0)
+       printf "COMMIT TRANSACTION;";
+}
+
+/^[0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F]/ { 
+#      if (nrec >= 100) {
+#              printf "COMMIT TRANSACTION;";
+#              printf "BEGIN TRANSACTION;";
+#              nrec=0;
+#      } else {
+#              nrec++;
+#      }
+       # Get the OUI
+       OUI=$1;
+       # Skip the (hex) tag to get to Company Name
+       Company=$3;
+       # make the OUI look like a macaddr
+       gsub("-",":",OUI);
+       OUI=OUI ":00:00:00"
+       # Pick up the rest of the company name
+       for (i=4;i<=NF;i++)
+               Company=Company " " $i;
+       # Modify any apostrophes (') to avoid grief below.
+       gsub("'","''",Company);
+       # Print out for the 'C' structure in mac.c
+       printf "INSERT INTO %s (addr, name) VALUES (trunc(macaddr \'%s\'),\'%s\');\n",
+               TABLE,OUI,Company;
+}
diff --git a/contrib/mac/updateoui b/contrib/mac/updateoui
new file mode 100755 (executable)
index 0000000..2a6a07c
--- /dev/null
@@ -0,0 +1,34 @@
+#! /bin/sh
+# Utility to create manufacturer's OUI table
+
+args=
+refresh=0
+
+while [ $# -gt 0 ]
+do
+    case "$1" in
+    --refresh|--fetch|-r)
+        refresh=1
+        ;;
+    --norefresh|--nofetch)
+        refresh=0
+        ;;
+    --help)
+        echo "Usage: $0 --[no]refresh dbname"
+        exit
+        ;;
+    *)
+        args="$args $1"
+        ;;
+    esac
+    shift
+done
+
+if [ $refresh -gt 0 ]; then
+    [ -e oui.txt ] && rm -rf oui.txt
+    wget -nd 'http://standards.ieee.org/regauth/oui/oui.txt'
+fi
+
+awk -f ouiparse.awk < oui.txt | psql -e $args
+
+exit