From 04b2adac4e5d460f39454b59ed4f2d3374cb796b Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Mon, 16 Nov 2015 08:46:00 +0100 Subject: lookup: Use lookup module for OUI lookup as well Do not needlessly duplicate code between the oui and the lookup module. Instead, add an additional lookup table for OUIs to the lookup module. Signed-off-by: Tobias Klauser --- oui.c | 118 ------------------------------------------------------------------ 1 file changed, 118 deletions(-) delete mode 100644 oui.c (limited to 'oui.c') diff --git a/oui.c b/oui.c deleted file mode 100644 index 94b6ba1..0000000 --- a/oui.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * netsniff-ng - the packet sniffing beast - * Copyright 2009 - 2013 Daniel Borkmann. - * Subject to the GPL, version 2. - */ - -#include -#include - -#include "hash.h" -#include "xmalloc.h" -#include "oui.h" -#include "str.h" - -static struct hash_table oui; - -static bool initialized = false; - -struct vendor_id { - unsigned int id; - char *vendor; - struct vendor_id *next; -}; - -const char *lookup_vendor(unsigned int id) -{ - struct vendor_id *v; - - v = lookup_hash(id, &oui); - while (v && id != v->id) - v = v->next; - - return (v && id == v->id ? v->vendor : NULL); -} - -void dissector_init_oui(void) -{ - FILE *fp; - char buff[128], *ptr, *end; - struct vendor_id *v; - void **pos; - - if (initialized) - return; - - fp = fopen(ETCDIRE_STRING "/oui.conf", "r"); - if (!fp) - panic("No oui.conf found!\n"); - - memset(buff, 0, sizeof(buff)); - - while (fgets(buff, sizeof(buff), fp) != NULL) { - buff[sizeof(buff) - 1] = 0; - ptr = buff; - - v = xmalloc(sizeof(*v)); - v->id = strtol(ptr, &end, 0); - /* not a valid line, skip */ - if (v->id == 0 && end == ptr) { - xfree(v); - continue; - } - - ptr = strstr(buff, ", "); - /* likewise */ - if (!ptr) { - xfree(v); - continue; - } - - ptr += strlen(", "); - ptr = strtrim_right(ptr, '\n'); - ptr = strtrim_right(ptr, ' '); - - v->vendor = xstrdup(ptr); - v->next = NULL; - - pos = insert_hash(v->id, v, &oui); - if (pos) { - v->next = *pos; - *pos = v; - } - - memset(buff, 0, sizeof(buff)); - } - - fclose(fp); - initialized = true; -} - -static int dissector_cleanup_oui_hash(void *ptr) -{ - struct vendor_id *tmp, *v = ptr; - - if (!ptr) - return 0; - - while ((tmp = v->next)) { - xfree(v->vendor); - xfree(v); - v = tmp; - } - - xfree(v->vendor); - xfree(v); - - return 0; -} - -void dissector_cleanup_oui(void) -{ - if (!initialized) - return; - - for_each_hash(&oui, dissector_cleanup_oui_hash); - free_hash(&oui); - initialized = false; -} -- cgit v1.2.3-54-g00ecf