summaryrefslogtreecommitdiffstats
path: root/sys/net/if_llatbl.h
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-09-14 16:48:19 +0000
committermelifaro <melifaro@FreeBSD.org>2015-09-14 16:48:19 +0000
commit5ad1f2444d736f306932d8a69b8357c63297cc83 (patch)
tree6b997784cb57fc09b4fd60b7c833b15d00ded1d9 /sys/net/if_llatbl.h
parentbbe0ea3ac0e8a5df29ff62333dbfaed8befc6da1 (diff)
downloadFreeBSD-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.h17
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>
OpenPOWER on IntegriCloud