Annotation of embedaddon/iftop/addr_hash.c, revision 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>