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>