OSDN Git Service

core: Add support for udev based batocomp implementation
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 8 Dec 2012 23:27:20 +0000 (00:27 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 8 Dec 2012 23:36:41 +0000 (00:36 +0100)
src/oui.c
src/oui.h

index cc9e07d..a1193ac 100644 (file)
--- a/src/oui.c
+++ b/src/oui.c
 #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>
 #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
index 2ddc27f..abd0386 100644 (file)
--- a/src/oui.h
+++ b/src/oui.h
@@ -21,4 +21,6 @@
  *
  */
 
+#include <bluetooth/bluetooth.h>
+
 char *batocomp(const bdaddr_t *ba);