summaryrefslogtreecommitdiffstats
path: root/sys/net/if_llatbl.h
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-08-11 05:51:00 +0000
committermelifaro <melifaro@FreeBSD.org>2015-08-11 05:51:00 +0000
commit8e6b3a8d59587481c485806c69429bede2a88772 (patch)
treeed7cccfa8ede2874d5734238d680135a1ff18951 /sys/net/if_llatbl.h
parent04e944197ed8cac9ab8ec518fc7f6d123cbb5f97 (diff)
downloadFreeBSD-src-8e6b3a8d59587481c485806c69429bede2a88772.zip
FreeBSD-src-8e6b3a8d59587481c485806c69429bede2a88772.tar.gz
MFP r276712.
* Split lltable_init() into lltable_allocate_htbl() (alloc hash table with default callbacks) and lltable_link() ( links any lltable to the list). * Switch from LLTBL_HASHTBL_SIZE to per-lltable hash size field. * Move lltable setup to separate functions in in[6]_domifattach.
Diffstat (limited to 'sys/net/if_llatbl.h')
-rw-r--r--sys/net/if_llatbl.h16
1 files changed, 6 insertions, 10 deletions
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index 8ea711c..084f61c 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -138,14 +138,6 @@ struct llentry {
#define L3_ADDR(lle) ((struct sockaddr *)(&lle[1]))
#define L3_ADDR_LEN(lle) (((struct sockaddr *)(&lle[1]))->sa_len)
-#ifndef LLTBL_HASHTBL_SIZE
-#define LLTBL_HASHTBL_SIZE 32 /* default 32 ? */
-#endif
-
-#ifndef LLTBL_HASHMASK
-#define LLTBL_HASHMASK (LLTBL_HASHTBL_SIZE - 1)
-#endif
-
typedef struct llentry *(llt_lookup_t)(struct lltable *, u_int flags,
const struct sockaddr *l3addr);
typedef struct llentry *(llt_create_t)(struct lltable *, u_int flags,
@@ -161,6 +153,7 @@ typedef int (llt_match_prefix_t)(const struct sockaddr *,
const struct sockaddr *, u_int, struct llentry *);
typedef void (llt_free_entry_t)(struct lltable *, struct llentry *);
typedef void (llt_fill_sa_entry_t)(const struct llentry *, struct sockaddr *);
+typedef void (llt_free_tbl_t)(struct lltable *);
typedef void (llt_link_entry_t)(struct lltable *, struct llentry *);
typedef void (llt_unlink_entry_t)(struct llentry *);
@@ -169,8 +162,9 @@ typedef int (llt_foreach_entry_t)(struct lltable *, llt_foreach_cb_t *, void *);
struct lltable {
SLIST_ENTRY(lltable) llt_link;
- struct llentries lle_head[LLTBL_HASHTBL_SIZE];
int llt_af;
+ int llt_hsize;
+ struct llentries *lle_head;
struct ifnet *llt_ifp;
llt_lookup_t *llt_lookup;
@@ -185,6 +179,7 @@ struct lltable {
llt_link_entry_t *llt_link_entry;
llt_unlink_entry_t *llt_unlink_entry;
llt_fill_sa_entry_t *llt_fill_sa_entry;
+ llt_free_tbl_t *llt_free_tbl;
};
MALLOC_DECLARE(M_LLTABLE);
@@ -204,8 +199,9 @@ MALLOC_DECLARE(M_LLTABLE);
#define LLATBL_HASH(key, mask) \
(((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
-struct lltable *lltable_init(struct ifnet *, int);
+struct lltable *lltable_allocate_htbl(uint32_t hsize);
void lltable_free(struct lltable *);
+void lltable_link(struct lltable *llt);
void lltable_prefix_free(int, struct sockaddr *,
struct sockaddr *, u_int);
#if 0
OpenPOWER on IntegriCloud