Annotation of embedaddon/coova-chilli/src/iphash.c, revision 1.1

1.1     ! misho       1: /* 
        !             2:  *
        !             3:  * IP address pool functions.
        !             4:  * Copyright (C) 2003, 2004, 2005 Mondru AB.
        !             5:  * Copyright (c) 2006-2007 David Bird <david@coova.com>
        !             6:  * 
        !             7:  * The contents of this file may be used under the terms of the GNU
        !             8:  * General Public License Version 2, provided that the above copyright
        !             9:  * notice and this permission notice is included in all copies or
        !            10:  * substantial portions of the software.
        !            11:  * 
        !            12:  */
        !            13:  
        !            14: #include <sys/types.h>
        !            15: #include <netinet/in.h> /* in_addr */
        !            16: #include <stdlib.h>     /* calloc */
        !            17: #include <stdio.h>      /* sscanf */
        !            18: 
        !            19: #include "iphash.h"
        !            20: 
        !            21: /* Create new address pool hash */
        !            22: int iphash_new(struct ippool_t **this, struct ippoolm_t *list, int listsize) {
        !            23: 
        !            24:   int i;
        !            25: 
        !            26:   if (!(*this = calloc(sizeof(struct ippool_t), 1))) {
        !            27:     /* Failed to allocate memory for iphash */
        !            28:     return -1;
        !            29:   }
        !            30:   
        !            31:   (*this)->listsize = listsize;
        !            32:   (*this)->member = list;
        !            33: 
        !            34:   /* Determine log2 of hashsize */
        !            35:   for ((*this)->hashlog = 0; 
        !            36:        ((1 << (*this)->hashlog) < listsize);
        !            37:        (*this)->hashlog++);
        !            38:   
        !            39:   /* Determine hashsize */
        !            40:   (*this)->hashsize = 1 << (*this)->hashlog; /* Fails if mask=0: All Internet*/
        !            41:   (*this)->hashmask = (*this)->hashsize -1;
        !            42:   
        !            43:   /* Allocate hash table */
        !            44:   if (!((*this)->hash = calloc(sizeof(struct ippoolm_t), (*this)->hashsize))){
        !            45:     /* Failed to allocate memory for hash members in iphash */
        !            46:     return -1;
        !            47:   }
        !            48:   
        !            49:   for (i = 0; i<listsize; i++) {
        !            50:     
        !            51:     (*this)->member[i].inuse = 1; /* TODO */
        !            52:     ippool_hashadd(*this, &(*this)->member[i]);
        !            53:   }
        !            54: 
        !            55:   return 0;
        !            56: }
        !            57: 
        !            58: /* Delete existing address pool */
        !            59: int iphash_free(struct ippool_t *this) {
        !            60:   free(this->hash);
        !            61:   free(this);
        !            62:   return 0; /* Always OK */
        !            63: }

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