Annotation of embedaddon/iftop/addr_hash.c, revision 1.1.1.1

1.1       misho       1: /* hash table */
                      2: 
                      3: #include <stdio.h>
                      4: #include <stdlib.h>
                      5: #include "addr_hash.h"
                      6: #include "hash.h"
                      7: #include "iftop.h"
                      8: 
                      9: #define hash_table_size 256
                     10: 
                     11: int compare(void* a, void* b) {
                     12:     addr_pair* aa = (addr_pair*)a;
                     13:     addr_pair* bb = (addr_pair*)b;
                     14:     return (aa->src.s_addr == bb->src.s_addr 
                     15:             && aa->src_port == bb->src_port
                     16:             && aa->dst.s_addr == bb->dst.s_addr
                     17:             && aa->dst_port == bb->dst_port
                     18:             && aa->protocol == bb->protocol);
                     19: }
                     20: 
                     21: int hash(void* key) {
                     22:     int hash;
                     23:     long addr;
                     24:     addr_pair* ap = (addr_pair*)key;
                     25:         
                     26:     addr = (long)ap->src.s_addr;
                     27: 
                     28:     hash = ((addr & 0x000000FF)
                     29:             + (addr & 0x0000FF00 >> 8)
                     30:             + (addr & 0x00FF0000 >> 16)
                     31:             + (addr & 0xFF000000 >> 24)
                     32:             + ap->src_port) % 0xFF;
                     33: 
                     34:     addr = (long)ap->dst.s_addr;
                     35:     hash = ( hash + (addr & 0x000000FF)
                     36:             + (addr & 0x0000FF00 >> 8)
                     37:             + (addr & 0x00FF0000 >> 16)
                     38:             + (addr & 0xFF000000 >> 24)
                     39:             + ap->dst_port) % 0xFF;
                     40: 
                     41:     return hash;
                     42: }
                     43: 
                     44: void* copy_key(void* orig) {
                     45:     addr_pair* copy;
                     46:     copy = xmalloc(sizeof *copy);
                     47:     *copy = *(addr_pair*)orig;
                     48:     return copy;
                     49: }
                     50: 
                     51: void delete_key(void* key) {
                     52:     free(key);
                     53: }
                     54: 
                     55: /*
                     56:  * Allocate and return a hash
                     57:  */
                     58: hash_type* addr_hash_create() {
                     59:     hash_type* hash_table;
                     60:     hash_table = xcalloc(hash_table_size, sizeof *hash_table);
                     61:     hash_table->size = hash_table_size;
                     62:     hash_table->compare = &compare;
                     63:     hash_table->hash = &hash;
                     64:     hash_table->delete_key = &delete_key;
                     65:     hash_table->copy_key = &copy_key;
                     66:     hash_initialise(hash_table);
                     67:     return hash_table;
                     68: }
                     69: 

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