/* * 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(PREFIX_STRING "/etc/netsniff-ng/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) { for_each_hash(&oui, dissector_cleanup_oui_hash); free_hash(&oui); initialized = false; } /log/tools/perf/perf-archive.sh?h=nds-private-remove'>logtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-30 15:47:19 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-30 15:47:19 -0800
commitf9a42e0d58cf0fe3d902e63d4582f2ea4cd2bb8b (patch)
tree4078d3ae27d4ebb85bdcd4d84e9b9a4d059f22bb /tools/perf/perf-archive.sh
parent751321b3dd5040dc5be19bd23f985e80c914621a (diff)
parent54791b276b4000b307339f269d3bf7db877d536f (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull sparc fixes from David Miller: "Several small bug fixes and tidies, along with a fix for non-resumable memory errors triggered by userspace" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc: sparc64: Handle PIO & MEM non-resumable errors. sparc64: Zero pages on allocation for mondo and error queues. sparc: Fixed typo in sstate.c. Replaced panicing with panicking sparc: use symbolic names for tsb indexing
Diffstat (limited to 'tools/perf/perf-archive.sh')