Commit c62871ba authored by Damien Neil's avatar Damien Neil

Moved hash.c from libdhcp to libomapi, in anticipation of moving the

tsig_key structure into libomapi.  (tsig_keys are stored in a hashtable,
and libomapi should not depend on libdhcp.)
parent c8d531a6
......@@ -21,11 +21,11 @@ CATMANPAGES = dhcp-options.cat5 dhcp-contrib.cat5 dhcp-eval.cat5
SEDMANPAGES = dhcp-options.man5 dhcp-contrib.man5 dhcp-eval.man5
SRC = raw.c parse.c nit.c icmp.c dispatch.c conflex.c upf.c bpf.c socket.c \
lpf.c dlpi.c packet.c tr.c ethernet.c memory.c print.c options.c \
inet.c tree.c tables.c hash.c alloc.c fddi.c \
inet.c tree.c tables.c alloc.c fddi.c \
inet_addr.c dns.c resolv.c execute.c discover.c comapi.c
OBJ = raw.o parse.o nit.o icmp.o dispatch.o conflex.o upf.o bpf.o socket.o \
lpf.o dlpi.o packet.o tr.o ethernet.o memory.o print.o options.o \
inet.o tree.o tables.o hash.o alloc.o fddi.o \
inet.o tree.o tables.o alloc.o fddi.o \
inet_addr.o dns.o resolv.o execute.o discover.o comapi.o
MAN = dhcp-options.5 dhcp-contrib.5 dhcp-eval.5
......
......@@ -43,7 +43,7 @@
#ifndef lint
static char copyright[] =
"$Id: alloc.c,v 1.50 2000/08/01 21:54:01 neild Exp $ Copyright (c) 1996-2000 The Internet Software Consortium. All rights reserved.\n";
"$Id: alloc.c,v 1.51 2000/08/01 22:54:47 neild Exp $ Copyright (c) 1996-2000 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
......@@ -177,54 +177,6 @@ struct dhcp_packet *new_dhcp_packet (file, line)
return rval;
}
struct hash_table *new_hash_table (count, file, line)
int count;
const char *file;
int line;
{
struct hash_table *rval = dmalloc (sizeof (struct hash_table)
- (DEFAULT_HASH_SIZE
* sizeof (struct hash_bucket *))
+ (count
* sizeof (struct hash_bucket *)),
file, line);
rval -> hash_count = count;
return rval;
}
struct hash_bucket *free_hash_buckets;
struct hash_bucket *new_hash_bucket (file, line)
const char *file;
int line;
{
struct hash_bucket *rval;
int i;
if (!free_hash_buckets) {
rval = dmalloc (127 * sizeof (struct hash_bucket),
file, line);
if (!rval)
return rval;
for (i = 0; i < 127; i++) {
rval -> next = free_hash_buckets;
free_hash_buckets = rval;
rval++;
}
}
rval = free_hash_buckets;
free_hash_buckets = rval -> next;
return rval;
}
void free_hash_bucket (ptr, file, line)
struct hash_bucket *ptr;
const char *file;
int line;
{
ptr -> next = free_hash_buckets;
free_hash_buckets = ptr;
}
struct protocol *new_protocol (file, line)
const char *file;
int line;
......@@ -316,14 +268,6 @@ void free_protocol (ptr, file, line)
dfree ((VOIDPTR)ptr, file, line);
}
void free_hash_table (ptr, file, line)
struct hash_table *ptr;
const char *file;
int line;
{
dfree ((VOIDPTR)ptr, file, line);
}
void free_dhcp_packet (ptr, file, line)
struct dhcp_packet *ptr;
const char *file;
......
......@@ -43,11 +43,17 @@
#ifndef lint
static char copyright[] =
"$Id: tables.c,v 1.42 2000/05/16 23:02:30 mellon Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
"$Id: tables.c,v 1.43 2000/08/01 22:54:50 neild Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
/* XXXDPN: Moved here from hash.c, when it moved to libomapi. Not sure
where these really belong. */
HASH_FUNCTIONS (group, const char *, struct group_object)
HASH_FUNCTIONS (universe, const char *, struct universe)
HASH_FUNCTIONS (option, const char *, struct option)
/* DHCP Option names, formats and codes, from RFC1533.
Format codes:
......
......@@ -73,7 +73,6 @@
#include "dhcp.h"
#include "statement.h"
#include "tree.h"
#include "hash.h"
#include "inet.h"
#include "auth.h"
#include "dhctoken.h"
......@@ -1211,8 +1210,6 @@ int group_allocate (struct group **, const char *, int);
int group_reference (struct group **, struct group *, const char *, int);
int group_dereference (struct group **, const char *, int);
struct dhcp_packet *new_dhcp_packet PROTO ((const char *, int));
struct hash_table *new_hash_table PROTO ((int, const char *, int));
struct hash_bucket *new_hash_bucket PROTO ((const char *, int));
struct protocol *new_protocol PROTO ((const char *, int));
struct lease_state *new_lease_state PROTO ((const char *, int));
struct domain_search_list *new_domain_search_list PROTO ((const char *, int));
......@@ -1229,8 +1226,6 @@ void free_domain_search_list PROTO ((struct domain_search_list *,
const char *, int));
void free_lease_state PROTO ((struct lease_state *, const char *, int));
void free_protocol PROTO ((struct protocol *, const char *, int));
void free_hash_bucket PROTO ((struct hash_bucket *, const char *, int));
void free_hash_table PROTO ((struct hash_table *, const char *, int));
void free_dhcp_packet PROTO ((struct dhcp_packet *, const char *, int));
struct client_lease *new_client_lease PROTO ((const char *, int));
void free_client_lease PROTO ((struct client_lease *, const char *, int));
......@@ -1534,21 +1529,6 @@ void remove_protocol PROTO ((struct protocol *));
OMAPI_OBJECT_ALLOC_DECL (interface,
struct interface_info, dhcp_type_interface)
/* hash.c */
struct hash_table *new_hash PROTO ((hash_reference, hash_dereference, int));
void add_hash PROTO ((struct hash_table *,
const unsigned char *, unsigned, hashed_object_t *,
const char *, int));
void delete_hash_entry PROTO ((struct hash_table *, const unsigned char *,
unsigned, const char *, int));
int hash_lookup PROTO ((hashed_object_t **, struct hash_table *,
const unsigned char *, unsigned, const char *, int));
int hash_foreach (struct hash_table *, hash_foreach_func);
int casecmp (const void *s, const void *t, unsigned long len);
HASH_FUNCTIONS_DECL (group, const char *, struct group_object)
HASH_FUNCTIONS_DECL (universe, const char *, struct universe)
HASH_FUNCTIONS_DECL (option, const char *, struct option)
/* tables.c */
extern struct universe dhcp_universe;
extern struct universe nwip_universe;
......@@ -1561,6 +1541,9 @@ struct universe **universes;
extern struct hash_table *universe_hash;
void initialize_common_option_spaces PROTO ((void));
struct universe *config_universe;
HASH_FUNCTIONS_DECL (group, const char *, struct group_object)
HASH_FUNCTIONS_DECL (universe, const char *, struct universe)
HASH_FUNCTIONS_DECL (option, const char *, struct option)
/* stables.c */
#if defined (FAILOVER_PROTOCOL)
......
......@@ -3,7 +3,7 @@
Definitions for hashing... */
/*
* Copyright (c) 1996-1999 Internet Software Consortium.
* Copyright (c) 1995-2000 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
......@@ -41,6 +41,9 @@
* ``http://www.nominum.com''.
*/
#ifndef OMAPI_HASH_H
#define OMAPI_HASH_H
#define DEFAULT_HASH_SIZE 9973
/* The purpose of the hashed_object_t struct is to not match anything else. */
......@@ -119,4 +122,20 @@ int name##_hash_foreach (struct hash_table *table, \
return hash_foreach (table, (hash_foreach_func)func); \
}
struct hash_table *new_hash_table (int, const char *, int);
void free_hash_table (struct hash_table *, const char *, int);
struct hash_bucket *new_hash_bucket (const char *, int);
void free_hash_bucket (struct hash_bucket *, const char *, int);
struct hash_table *new_hash (hash_reference, hash_dereference, int);
void add_hash (struct hash_table *,
const unsigned char *, unsigned, hashed_object_t *,
const char *, int);
void delete_hash_entry (struct hash_table *, const unsigned char *,
unsigned, const char *, int);
int hash_lookup (hashed_object_t **, struct hash_table *,
const unsigned char *, unsigned, const char *, int);
int hash_foreach (struct hash_table *, hash_foreach_func);
int casecmp (const void *s, const void *t, unsigned long len);
#endif /* OMAPI_HASH_H */
......@@ -71,6 +71,7 @@
#include <isc/result.h>
#include <omapip/convert.h>
#include <omapip/hash.h>
#include <omapip/omapip.h>
/* OMAPI protocol header, version 1.00 */
......
......@@ -21,10 +21,10 @@ CATMANPAGES = omapi.cat3
SEDMANPAGES = omapi.man3
SRC = protocol.c buffer.c alloc.c result.c connection.c errwarn.c \
listener.c dispatch.c generic.c support.c handle.c message.c \
convert.c
convert.c hash.c
OBJ = protocol.o buffer.o alloc.o result.o connection.o errwarn.o \
listener.o dispatch.o generic.o support.o handle.o message.o \
convert.o
convert.o hash.o
MAN = omapi.3
DEBUG = -g
......
......@@ -43,14 +43,70 @@
#ifndef lint
static char copyright[] =
"$Id: hash.c,v 1.25 2000/06/24 06:19:13 mellon Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
"$Id: hash.c,v 1.1 2000/08/01 22:55:07 neild Exp $ Copyright (c) 1995-2000 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
#include <omapip/omapip_p.h>
#include <ctype.h>
static int do_hash PROTO ((const unsigned char *, unsigned, unsigned));
static int do_case_hash PROTO ((const unsigned char *, unsigned, unsigned));
static int do_hash (const unsigned char *, unsigned, unsigned);
static int do_case_hash (const unsigned char *, unsigned, unsigned);
struct hash_table *new_hash_table (count, file, line)
int count;
const char *file;
int line;
{
struct hash_table *rval = dmalloc (sizeof (struct hash_table)
- (DEFAULT_HASH_SIZE
* sizeof (struct hash_bucket *))
+ (count
* sizeof (struct hash_bucket *)),
file, line);
rval -> hash_count = count;
return rval;
}
void free_hash_table (ptr, file, line)
struct hash_table *ptr;
const char *file;
int line;
{
dfree ((VOIDPTR)ptr, file, line);
}
struct hash_bucket *free_hash_buckets;
struct hash_bucket *new_hash_bucket (file, line)
const char *file;
int line;
{
struct hash_bucket *rval;
int i;
if (!free_hash_buckets) {
rval = dmalloc (127 * sizeof (struct hash_bucket),
file, line);
if (!rval)
return rval;
for (i = 0; i < 127; i++) {
rval -> next = free_hash_buckets;
free_hash_buckets = rval;
rval++;
}
}
rval = free_hash_buckets;
free_hash_buckets = rval -> next;
return rval;
}
void free_hash_bucket (ptr, file, line)
struct hash_bucket *ptr;
const char *file;
int line;
{
ptr -> next = free_hash_buckets;
free_hash_buckets = ptr;
}
struct hash_table *new_hash (hash_reference referencer,
hash_dereference dereferencer,
......@@ -278,7 +334,3 @@ int casecmp (const void *v1, const void *v2, unsigned long len)
}
return 0;
}
HASH_FUNCTIONS (group, const char *, struct group_object)
HASH_FUNCTIONS (universe, const char *, struct universe)
HASH_FUNCTIONS (option, const char *, struct option)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment