ip_htable.c revision f4b3ec61df05330d25f55a36b975b4d7519fdeb1
/*
* Copyright (C) 1993-2001, 2003 by Darren Reed.
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
# define KERNEL 1
# define _KERNEL 1
#endif
#if !defined(_KERNEL)
# include <stdlib.h>
# include <string.h>
# define _KERNEL
# ifdef __OpenBSD__
struct file;
# endif
#endif
#endif
#if defined(__FreeBSD__)
#endif
!defined(linux)
#endif
#if defined(_KERNEL)
#else
# include <stdio.h>
#endif
#include "netinet/ip_compat.h"
#include "netinet/ip_lookup.h"
#include "netinet/ip_htable.h"
#include "netinet/ipf_stack.h"
/* END OF INCLUDES */
#if !defined(lint)
static const char rcsid[] = "@(#)$Id: ip_htable.c,v 2.34.2.3 2005/05/14 05:11:38 darrenr Exp $";
#endif
#ifdef IPFILTER_LOOKUP
#ifdef USE_INET6
static void left_shift_ipv6 __P((char *));
#endif
void fr_htable_unload(ifs)
{
}
{
return EINVAL;
}
/*
* Create a new hash table using the template passed.
*/
{
char name[FR_GROUPLEN];
return ENOMEM;
}
if (err != 0) {
return EFAULT;
}
return EINVAL;
}
return EEXIST;
}
} else {
i = IPHASH_ANON;
do {
i++;
#else
#endif
break;
if (err != 0) {
return EFAULT;
}
}
return ENOMEM;
}
return 0;
}
/*
*/
{
return ESRCH;
return EINVAL;
}
return EBUSY;
}
return 0;
}
{
int i;
return;
}
}
{
}
void fr_derefhtent(ipe)
{
}
}
int unit;
char *name;
{
break;
return iph;
}
{
int i;
freed = 0;
for (i = 0; i <= IPL_LOGMAX; i++) {
freed++;
}
}
}
return freed;
}
/*
* Add an entry to a hash table.
*/
{
int bits;
return -1;
#ifdef USE_INET6
} else
#endif
{
} else
return -1;
#ifdef USE_INET6
if (bits >= 96)
else if (bits >= 64)
else if (bits >= 32)
else
} else
#endif
{
}
{
case IPHASH_GROUPMAP :
break;
default :
break;
}
return 0;
}
/*
* Delete an entry from a hash table.
*/
{
return EBUSY;
{
case IPHASH_GROUPMAP :
break;
default :
break;
}
return 0;
}
void *tptr;
int version;
void *aptr;
{
void *rval;
if ((version != 4)
#ifdef USE_INET6
&& (version != 6)
#endif
)
return NULL;
#ifdef USE_INET6
if (version == 6)
else
#endif
if (version == 4)
else
else
return rval;
}
/* ------------------------------------------------------------------------ */
/* Function: fr_iphmfindip */
/* Parameters: tptr(I) - pointer to the pool to search */
/* version(I) - IP protocol version (4 or 6) */
/* aptr(I) - pointer to address information */
/* */
/* Search the hash table for a given address and return a search result. */
/* ------------------------------------------------------------------------ */
int version;
{
int rval;
if ((version != 4)
#ifdef USE_INET6
&& (version != 6)
#endif
)
return -1;
return -1;
#ifdef USE_INET6
if (version == 6)
else
#endif
if (version == 4)
else
rval = 0;
else
rval = 1;
return rval;
}
/* Locks: ip_poolrw */
{
msk = 0xffffffff;
continue;
}
break;
}
while (hmsk != 0) {
msk <<= 1;
if (hmsk & 0x80000000)
break;
hmsk <<= 1;
}
if (hmsk != 0) {
hmsk <<= 1;
goto maskloop;
}
}
return ipe;
}
#ifdef USE_INET6
/* Locks: ip_poolrw */
{
msk[0] = 0xffffffff;
continue;
break;
}
(hmsk[1] != 0) ||
(hmsk[2] != 0) ||
(hmsk[3] != 0) )) {
left_shift_ipv6((char *)msk);
if (hmsk[0] & 0x80000000)
break;
left_shift_ipv6((char *)hmsk);
}
left_shift_ipv6((char *)hmsk);
goto maskloop;
}
}
return ipe;
}
/*
* sum4: ipv6 add -> 4 bytes values
*/
{
}
/*
* left shift on 128 bits
*/
static void left_shift_ipv6(data)
char *data;
{
sd[0] <<= 1;
sd[0] += 1;
}
#endif
{
int err;
err = 0;
{
case IPFLOOKUPITER_LIST :
} else {
}
else {
}
} else {
}
break;
case IPFLOOKUPITER_NODE :
else {
}
} else {
}
else {
}
} else {
}
break;
default :
break;
}
if (err != 0)
return err;
{
case IPFLOOKUPITER_LIST :
}
if (err != 0)
break;
case IPFLOOKUPITER_NODE :
}
if (err != 0)
break;
}
return err;
}
int unit;
void *data;
{
return;
return;
switch (otype)
{
case IPFLOOKUPITER_LIST :
break;
case IPFLOOKUPITER_NODE :
break;
default :
break;
}
}
#endif /* IPFILTER_LOOKUP */