From 3c96d235a94a6e592e0331129fe55fc4bf8df6fd Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 9 Dec 2012 00:27:20 +0100 Subject: [PATCH] core: Add support for udev based batocomp implementation --- src/oui.c | 46 ++++++++++++++++++++++++++++++++++++++++++---- src/oui.h | 2 ++ 2 files changed, 44 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 #endif +#include "oui.h" + +#ifdef HAVE_UDEV_HWDB_NEW +#include + +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 #include #include @@ -34,10 +75,6 @@ #include #include -#include - -#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 diff --git a/src/oui.h b/src/oui.h index 2ddc27fef..abd0386ec 100644 --- a/src/oui.h +++ b/src/oui.h @@ -21,4 +21,6 @@ * */ +#include + char *batocomp(const bdaddr_t *ba); -- 2.47.3