diff options
author | melifaro <melifaro@FreeBSD.org> | 2015-08-11 05:51:00 +0000 |
---|---|---|
committer | melifaro <melifaro@FreeBSD.org> | 2015-08-11 05:51:00 +0000 |
commit | 8e6b3a8d59587481c485806c69429bede2a88772 (patch) | |
tree | ed7cccfa8ede2874d5734238d680135a1ff18951 /sys/net/if_llatbl.h | |
parent | 04e944197ed8cac9ab8ec518fc7f6d123cbb5f97 (diff) | |
download | FreeBSD-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.h | 16 |
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 |