diff options
author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2014-12-07 15:42:46 +0000 |
---|---|---|
committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2014-12-07 15:42:46 +0000 |
commit | a743ccd4683feafa94961764c8af21ee1c6740d1 (patch) | |
tree | 542c3bd6f32b1b26ff43b8ffa91c698a07593edf /sys/net/if_llatbl.h | |
parent | a6e934e3598d3951c77b059db098ba1fa2016d5d (diff) | |
download | src-a743ccd4683feafa94961764c8af21ee1c6740d1.tar.gz src-a743ccd4683feafa94961764c8af21ee1c6740d1.zip |
* Add llt_clear_entry() callback which is able to do all lle
cleanup including unlinking/freeing
* Relax locking in lltable_prefix_free_af/lltable_free
* Do not pass @llt to lle free callback: it is always NULL now.
* Unify arptimer/nd6_llinfo_timer: explicitly unlock lle avoiding
unlock/lock sequinces
* Do not pass unlocked lle to nd6_ns_output(): add nd6_llinfo_get_holdsrc()
to retrieve preferred source address from lle hold queue and pass it
instead of lle.
* Finally, make nd6_create() create and return unlocked lle
* Separate defrtr handling code from nd6_free():
use nd6_check_del_defrtr() to check if we need to keep entry instead of
performing GC,
use nd6_check_recalc_defrtr() to perform actual recalc on lle removal.
* Move isRouter handling from nd6_cache_lladdr() to separate
nd6_check_router()
* Add initial code to maintain lle runtime flags in sync.
Notes
Notes:
svn path=/projects/routing/; revision=275577
Diffstat (limited to 'sys/net/if_llatbl.h')
-rw-r--r-- | sys/net/if_llatbl.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h index 13c20f08f969..c8feb8851895 100644 --- a/sys/net/if_llatbl.h +++ b/sys/net/if_llatbl.h @@ -68,7 +68,7 @@ struct llentry { /* FIELDS PROTECTED BY LLE rwlock */ struct lltable *lle_tbl; struct llentries *lle_head; - void (*lle_free)(struct lltable *, struct llentry *); + void (*lle_free)(struct llentry *); struct mbuf *la_hold; int la_numheld; /* # of packets currently held */ time_t la_expire; @@ -117,7 +117,7 @@ struct llentry { #define LLE_FREE_LOCKED(lle) do { \ if ((lle)->lle_refcnt == 1) \ - (lle)->lle_free((lle)->lle_tbl, (lle)); \ + (lle)->lle_free((lle)); \ else { \ LLE_REMREF(lle); \ LLE_WUNLOCK(lle); \ @@ -158,7 +158,7 @@ typedef int (llt_dump_entry_t)(struct lltable *, struct llentry *, typedef uint32_t (llt_hash_t)(const struct llentry *); typedef int (llt_match_prefix_t)(const struct sockaddr *, const struct sockaddr *, u_int, struct llentry *); -typedef void (llt_stop_timers_t)(struct llentry *lle); +typedef void (llt_clear_entry_t)(struct lltable *, struct llentry *); struct lltable { SLIST_ENTRY(lltable) llt_link; @@ -172,7 +172,7 @@ struct lltable { llt_dump_entry_t *llt_dump_entry; llt_hash_t *llt_hash; llt_match_prefix_t *llt_match_prefix; - llt_stop_timers_t *llt_stop_timers; + llt_clear_entry_t *llt_clear_entry; }; MALLOC_DECLARE(M_LLTABLE); |