2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-31 14:25:41 +00:00

- Varying option space code and length bit widths (8/16/32) are now

supported.  This is a milestone in acheiving RFC 3925 "VIVSO" and
  DHCPv6 support. [ISC-Bugs #15979]
This commit is contained in:
David Hankins
2006-06-01 20:23:18 +00:00
parent ee91252816
commit f7fdb21693
28 changed files with 1492 additions and 1813 deletions

View File

@@ -35,15 +35,20 @@
#ifndef OMAPI_HASH_H
#define OMAPI_HASH_H
#define DEFAULT_HASH_SIZE 9973
#if !defined (DEFAULT_HASH_SIZE)
# define DEFAULT_HASH_SIZE 9973
#endif
#if !defined (KEY_HASH_SIZE)
# define KEY_HASH_SIZE 1009
#endif
/* The purpose of the hashed_object_t struct is to not match anything else. */
typedef struct {
int foo;
} hashed_object_t;
typedef isc_result_t (*hash_foreach_func)(const unsigned char *, unsigned,
void *);
typedef isc_result_t (*hash_foreach_func)(const void *, unsigned, void *);
typedef int (*hash_reference) (hashed_object_t **, hashed_object_t *,
const char *, int);
typedef int (*hash_dereference) (hashed_object_t **, const char *, int);
@@ -63,7 +68,7 @@ struct hash_table {
hash_reference referencer;
hash_dereference dereferencer;
hash_comparator_t cmp;
int (*do_hash) (const unsigned char *, unsigned, unsigned);
unsigned (*do_hash)(const void *, unsigned, unsigned);
};
struct named_hash {
@@ -80,26 +85,24 @@ void name##_hash_delete (hashtype *, bufarg, unsigned, \
int name##_hash_lookup (type **, hashtype *, bufarg, unsigned, \
const char *, int); \
int name##_hash_foreach (hashtype *, hash_foreach_func); \
int name##_new_hash (hashtype **, int, const char *, int); \
int name##_new_hash (hashtype **, unsigned, const char *, int); \
void name##_free_hash_table (hashtype **, const char *, int);
#define HASH_FUNCTIONS(name, bufarg, type, hashtype, ref, deref) \
#define HASH_FUNCTIONS(name, bufarg, type, hashtype, ref, deref, hasher) \
void name##_hash_add (hashtype *table, \
bufarg buf, unsigned len, type *ptr, \
const char *file, int line) \
{ \
add_hash ((struct hash_table *)table, \
(const unsigned char *)buf, \
add_hash ((struct hash_table *)table, buf, \
len, (hashed_object_t *)ptr, file, line); \
} \
\
void name##_hash_delete (hashtype *table, \
bufarg buf, unsigned len, const char *file, int line)\
void name##_hash_delete (hashtype *table, bufarg buf, unsigned len, \
const char *file, int line) \
{ \
delete_hash_entry ((struct hash_table *)table, \
(const unsigned char *)buf, \
len, file, line); \
delete_hash_entry ((struct hash_table *)table, buf, len, \
file, line); \
} \
\
int name##_hash_lookup (type **ptr, hashtype *table, \
@@ -107,7 +110,7 @@ int name##_hash_lookup (type **ptr, hashtype *table, \
{ \
return hash_lookup ((hashed_object_t **)ptr, \
(struct hash_table *)table, \
(const unsigned char *)buf, len, file, line); \
buf, len, file, line); \
} \
\
int name##_hash_foreach (hashtype *table, hash_foreach_func func) \
@@ -116,11 +119,11 @@ int name##_hash_foreach (hashtype *table, hash_foreach_func func) \
func); \
} \
\
int name##_new_hash (hashtype **tp, int c, const char *file, int line) \
int name##_new_hash (hashtype **tp, unsigned c, const char *file, int line) \
{ \
return new_hash ((struct hash_table **)tp, \
(hash_reference)ref, (hash_dereference)deref, c, \
file, line); \
hasher, file, line); \
} \
\
void name##_free_hash_table (hashtype **table, const char *file, int line) \
@@ -129,19 +132,25 @@ void name##_free_hash_table (hashtype **table, const char *file, int line) \
}
void relinquish_hash_bucket_hunks (void);
int new_hash_table (struct hash_table **, int, const char *, int);
int new_hash_table (struct hash_table **, unsigned, 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);
int new_hash (struct hash_table **,
hash_reference, hash_dereference, int, const char *, int);
int new_hash(struct hash_table **,
hash_reference, hash_dereference, unsigned,
unsigned (*do_hash)(const void *, unsigned, unsigned),
const char *, int);
unsigned do_string_hash(const void *, unsigned, unsigned);
unsigned do_case_hash(const void *, unsigned, unsigned);
unsigned do_number_hash(const void *, unsigned, unsigned);
unsigned do_ip4_hash(const void *, unsigned, unsigned);
void add_hash (struct hash_table *,
const unsigned char *, unsigned, hashed_object_t *,
const void *, unsigned, hashed_object_t *,
const char *, int);
void delete_hash_entry (struct hash_table *, const unsigned char *,
void delete_hash_entry (struct hash_table *, const void *,
unsigned, const char *, int);
int hash_lookup (hashed_object_t **, struct hash_table *,
const unsigned char *, unsigned, const char *, int);
const void *, unsigned, const char *, int);
int hash_foreach (struct hash_table *, hash_foreach_func);
int casecmp (const void *s, const void *t, unsigned long len);