summaryrefslogtreecommitdiff
path: root/src/oui.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-12-09 00:27:20 +0100
committerMarcel Holtmann <marcel@holtmann.org>2012-12-09 00:36:41 +0100
commit3c96d235a94a6e592e0331129fe55fc4bf8df6fd (patch)
tree5f0cf1083a7eaacb98bf071e57fd215af02d0f44 /src/oui.c
parentfc771c9972ed94b7fe7c86c9acaf0c53c1477998 (diff)
downloadbluez-3c96d235a94a6e592e0331129fe55fc4bf8df6fd.tar.gz
core: Add support for udev based batocomp implementation
Diffstat (limited to 'src/oui.c')
-rw-r--r--src/oui.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/src/oui.c b/src/oui.c
index cc9e07da8..a1193ac6f 100644
--- a/src/oui.c
+++ b/src/oui.c
@@ -25,6 +25,47 @@
#include <config.h>
#endif
+#include "oui.h"
+
+#ifdef HAVE_UDEV_HWDB_NEW
+#include <libudev.h>
+
+char *batocomp(const bdaddr_t *ba)
+{
+ struct udev *udev;
+ struct udev_hwdb *hwdb;
+ struct udev_list_entry *head, *entry;
+ char modalias[11], *comp = NULL;
+
+ sprintf(modalias, "OUI:%2.2X%2.2X%2.2X", ba->b[5], ba->b[4], ba->b[3]);
+
+ udev = udev_new();
+ if (!udev)
+ return NULL;
+
+ hwdb = udev_hwdb_new(udev);
+ if (!hwdb)
+ goto done;
+
+ head = udev_hwdb_get_properties_list_entry(hwdb, modalias, 0);
+
+ udev_list_entry_foreach(entry, head) {
+ const char *name = udev_list_entry_get_name(entry);
+
+ if (name && !strcmp(name, "ID_OUI_FROM_DATABASE")) {
+ comp = strdup(udev_list_entry_get_value(entry));
+ break;
+ }
+ }
+
+ hwdb = udev_hwdb_unref(hwdb);
+
+done:
+ udev = udev_unref(udev);
+
+ return comp;
+}
+#else
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
@@ -34,10 +75,6 @@
#include <sys/stat.h>
#include <sys/mman.h>
-#include <bluetooth/bluetooth.h>
-
-#include "oui.h"
-
/* http://standards.ieee.org/regauth/oui/oui.txt */
#ifndef OUIFILE
@@ -99,3 +136,4 @@ char *batocomp(const bdaddr_t *ba)
return ouitocomp(oui);
}
+#endif