diff options
author | melifaro <melifaro@FreeBSD.org> | 2015-09-14 16:48:19 +0000 |
---|---|---|
committer | melifaro <melifaro@FreeBSD.org> | 2015-09-14 16:48:19 +0000 |
commit | 5ad1f2444d736f306932d8a69b8357c63297cc83 (patch) | |
tree | 6b997784cb57fc09b4fd60b7c833b15d00ded1d9 /sys/net/if_llatbl.h | |
parent | bbe0ea3ac0e8a5df29ff62333dbfaed8befc6da1 (diff) | |
download | FreeBSD-src-5ad1f2444d736f306932d8a69b8357c63297cc83.zip FreeBSD-src-5ad1f2444d736f306932d8a69b8357c63297cc83.tar.gz |
* Do more fine-grained locking: call eventhandlers/free_entry
without holding afdata wlock
* convert per-af delete_address callback to global lltable_delete_entry() and
more low-level "delete this lle" per-af callback
* fix some bugs/inconsistencies in IPv4/IPv6 ifscrub procedures
Sponsored by: Yandex LLC
Differential Revision: https://reviews.freebsd.org/D3573
Diffstat (limited to 'sys/net/if_llatbl.h')
-rw-r--r-- | sys/net/if_llatbl.h | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h index 0571bf0..8e8adff 100644 --- a/sys/net/if_llatbl.h +++ b/sys/net/if_llatbl.h @@ -135,10 +135,9 @@ typedef struct llentry *(llt_lookup_t)(struct lltable *, u_int flags, const struct sockaddr *l3addr); typedef struct llentry *(llt_alloc_t)(struct lltable *, u_int flags, const struct sockaddr *l3addr); -typedef int (llt_delete_t)(struct lltable *, u_int flags, - const struct sockaddr *l3addr); +typedef void (llt_delete_t)(struct lltable *, struct llentry *); typedef void (llt_prefix_free_t)(struct lltable *, - const struct sockaddr *prefix, const struct sockaddr *mask, u_int flags); + const struct sockaddr *addr, const struct sockaddr *mask, u_int flags); typedef int (llt_dump_entry_t)(struct lltable *, struct llentry *, struct sysctl_req *); typedef uint32_t (llt_hash_t)(const struct llentry *, uint32_t); @@ -162,7 +161,7 @@ struct lltable { llt_lookup_t *llt_lookup; llt_alloc_t *llt_alloc_entry; - llt_delete_t *llt_delete; + llt_delete_t *llt_delete_entry; llt_prefix_free_t *llt_prefix_free; llt_dump_entry_t *llt_dump_entry; llt_hash_t *llt_hash; @@ -212,6 +211,8 @@ size_t lltable_drop_entry_queue(struct llentry *); struct llentry *lltable_alloc_entry(struct lltable *llt, u_int flags, const struct sockaddr *l4addr); void lltable_free_entry(struct lltable *llt, struct llentry *lle); +int lltable_delete_addr(struct lltable *llt, u_int flags, + const struct sockaddr *l3addr); void lltable_link_entry(struct lltable *llt, struct llentry *lle); void lltable_unlink_entry(struct lltable *llt, struct llentry *lle); void lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa); @@ -230,14 +231,6 @@ lla_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3addr) return (llt->llt_lookup(llt, flags, l3addr)); } -static __inline int -lla_delete(struct lltable *llt, u_int flags, const struct sockaddr *l3addr) -{ - - return (llt->llt_delete(llt, flags, l3addr)); -} - - int lla_rt_output(struct rt_msghdr *, struct rt_addrinfo *); #include <sys/eventhandler.h> |