/*
* Copyright (C) 1993-2001, 2003 by Darren Reed.
*
* See the IPFILTER.LICENCE file for details on licencing.
*
*/
#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)
#endif
#ifdef IPFILTER_LOOKUP
#ifdef USE_INET6
static void left_shift_ipv6 __P((char *));
#endif
{
}
{
return EINVAL;
}
/*
* Create a new hash table using the template passed.
*/
{
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;
}
}
{
}
{
}
}
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 */
/* fin - pointer to packet information */
/* ifs - ipf stack instance */
/* */
/* 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
*/
char *data;
{
sd[0] <<= 1;
sd[0] += 1;
}
#endif
{
int err;
err = 0;
/*
* Get "previous" entry from the token and find the next entry.
*
* If we found an entry, add a reference to it and update the token.
* Otherwise, zero out data to be returned and NULL out token.
*/
{
case IPFLOOKUPITER_LIST :
} else {
}
} else {
}
break;
case IPFLOOKUPITER_NODE :
else {
}
} else {
}
} else {
}
break;
default :
break;
}
/*
* Now that we have ref, it's save to give up lock.
*/
if (err != 0)
return err;
/*
* Copy out data and clean up references and token as needed.
*/
{
case IPFLOOKUPITER_LIST :
if (err != 0)
} else {
}
}
break;
case IPFLOOKUPITER_NODE :
if (err != 0)
} else {
}
}
break;
}
return err;
}
int unit;
void *data;
{
return;
return;
switch (otype)
{
case IPFLOOKUPITER_LIST :
break;
case IPFLOOKUPITER_NODE :
break;
default :
break;
}
}
#endif /* IPFILTER_LOOKUP */