File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / iftop / ns_hash.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 16:57:34 2012 UTC (12 years, 7 months ago) by misho
Branches: iftop, MAIN
CVS tags: v0_17p0, v0_17, HEAD
iftop

    1: /* hash table */
    2: 
    3: #include <stdio.h>
    4: #include <stdlib.h>
    5: #include <sys/types.h>
    6: #include <sys/socket.h>
    7: #include <netinet/in_systm.h>
    8: #include <netinet/in.h>
    9: #include <arpa/inet.h>
   10: #include "ns_hash.h"
   11: #include "hash.h"
   12: #include "iftop.h"
   13: 
   14: #define hash_table_size 256
   15: 
   16: int ns_hash_compare(void* a, void* b) {
   17:     struct in_addr* aa = (struct in_addr*)a;
   18:     struct in_addr* bb = (struct in_addr*)b;
   19:     return (aa->s_addr == bb->s_addr);
   20: }
   21: 
   22: int ns_hash_hash(void* key) {
   23:     int hash;
   24:     long addr;
   25:         
   26:     addr = (long)((struct in_addr*)key)->s_addr;
   27: 
   28:     hash = ((addr & 0x000000FF)
   29:             + (addr & 0x0000FF00 >> 8)
   30:             + (addr & 0x00FF0000 >> 16)
   31:             + (addr & 0xFF000000 >> 24)) % 0xFF;
   32: 
   33:     return hash;
   34: }
   35: 
   36: void* ns_hash_copy_key(void* orig) {
   37:     struct in_addr* copy;
   38:     copy = xmalloc(sizeof *copy);
   39:     *copy = *(struct in_addr*)orig;
   40:     return copy;
   41: }
   42: 
   43: void ns_hash_delete_key(void* key) {
   44:     free(key);
   45: }
   46: 
   47: /*
   48:  * Allocate and return a hash
   49:  */
   50: hash_type* ns_hash_create() {
   51:     hash_type* hash_table;
   52:     hash_table = xcalloc(hash_table_size, sizeof *hash_table);
   53:     hash_table->size = hash_table_size;
   54:     hash_table->compare = &ns_hash_compare;
   55:     hash_table->hash = &ns_hash_hash;
   56:     hash_table->delete_key = &ns_hash_delete_key;
   57:     hash_table->copy_key = &ns_hash_copy_key;
   58:     hash_initialise(hash_table);
   59:     return hash_table;
   60: }
   61: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>