summaryrefslogtreecommitdiffstats
path: root/sys/net/if_llatbl.h
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-08-08 17:48:54 +0000
committermelifaro <melifaro@FreeBSD.org>2015-08-08 17:48:54 +0000
commit20bb5966e2075bde042b8b62c236e29d6e8934da (patch)
tree731dce9358d789a8c3034ce0eea54d4f64dad724 /sys/net/if_llatbl.h
parent2039dd9ad41e9d94f6bf6471ffcf42c381368b69 (diff)
downloadFreeBSD-src-20bb5966e2075bde042b8b62c236e29d6e8934da.zip
FreeBSD-src-20bb5966e2075bde042b8b62c236e29d6e8934da.tar.gz
MFP r274553:
* Move lle creation/deletion from lla_lookup to separate functions: lla_lookup(LLE_CREATE) -> lla_create lla_lookup(LLE_DELETE) -> lla_delete lla_create now returns with LLE_EXCLUSIVE lock for lle. * Provide typedefs for new/existing lltable callbacks. Reviewed by: ae
Diffstat (limited to 'sys/net/if_llatbl.h')
-rw-r--r--sys/net/if_llatbl.h47
1 files changed, 35 insertions, 12 deletions
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index 4f21fde..69c340c 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -144,25 +144,33 @@ struct llentry {
#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,
+ const struct sockaddr *l3addr);
+typedef int (llt_delete_t)(struct lltable *, u_int flags,
+ const struct sockaddr *l3addr);
+typedef void (llt_prefix_free_t)(struct lltable *,
+ const struct sockaddr *prefix, const struct sockaddr *mask, u_int flags);
+typedef int (llt_dump_t)(struct lltable *, struct sysctl_req *);
+
struct lltable {
SLIST_ENTRY(lltable) llt_link;
struct llentries lle_head[LLTBL_HASHTBL_SIZE];
int llt_af;
struct ifnet *llt_ifp;
- void (*llt_prefix_free)(struct lltable *,
- const struct sockaddr *prefix,
- const struct sockaddr *mask,
- u_int flags);
- struct llentry * (*llt_lookup)(struct lltable *, u_int flags,
- const struct sockaddr *l3addr);
- int (*llt_dump)(struct lltable *,
- struct sysctl_req *);
+ llt_lookup_t *llt_lookup;
+ llt_create_t *llt_create;
+ llt_delete_t *llt_delete;
+ llt_prefix_free_t *llt_prefix_free;
+ llt_dump_t *llt_dump;
};
+
MALLOC_DECLARE(M_LLTABLE);
/*
- * flags to be passed to arplookup.
+ * LLentry flags
*/
#define LLE_DELETED 0x0001 /* entry must be deleted */
#define LLE_STATIC 0x0002 /* entry is static */
@@ -170,9 +178,8 @@ MALLOC_DECLARE(M_LLTABLE);
#define LLE_VALID 0x0008 /* ll_addr is valid */
#define LLE_PUB 0x0020 /* publish entry ??? */
#define LLE_LINKED 0x0040 /* linked to lookup structure */
+/* LLE request flags */
#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
-#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */
-#define LLE_CREATE 0x8000 /* create on a lookup miss */
#define LLATBL_HASH(key, mask) \
(((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
@@ -196,9 +203,25 @@ struct llentry *llentry_alloc(struct ifnet *, struct lltable *,
static __inline struct llentry *
lla_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3addr)
{
- return llt->llt_lookup(llt, flags, l3addr);
+
+ return (llt->llt_lookup(llt, flags, l3addr));
}
+static __inline struct llentry *
+lla_create(struct lltable *llt, u_int flags, const struct sockaddr *l3addr)
+{
+
+ return (llt->llt_create(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