summaryrefslogtreecommitdiff
path: root/oui.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2015-11-16 08:46:00 +0100
committerTobias Klauser <tklauser@distanz.ch>2015-11-16 08:46:00 +0100
commit04b2adac4e5d460f39454b59ed4f2d3374cb796b (patch)
treecaf1aeb824fcfeba9437dea02741dd9921ad718b /oui.c
parent7cec7def47bf55762c422508bac1b6e2e142b24e (diff)
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 <tklauser@distanz.ch>
Diffstat (limited to 'oui.c')
-rw-r--r--oui.c118
1 files changed, 0 insertions, 118 deletions
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 <stdint.h>
-#include <stdbool.h>
-
-#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;
-}