aboutsummaryrefslogtreecommitdiff
path: root/sys/net/if_llatbl.h
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2014-12-09 00:48:08 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2014-12-09 00:48:08 +0000
commitee7e9a4e17ff3579541feb17ec6b1699c2be40e6 (patch)
tree0f0168cc8c2e05919c4af0ef808e4f0d800124eb /sys/net/if_llatbl.h
parentd82ed5051c95a39ff9a247ef0819dae550474d58 (diff)
downloadsrc-ee7e9a4e17ff3579541feb17ec6b1699c2be40e6.tar.gz
src-ee7e9a4e17ff3579541feb17ec6b1699c2be40e6.zip
* Do not assume lle has sockaddr key after struct lle:
use llt_fill_sa_entry() llt method to store lle address in sa. * Eliminate L3_ADDR macro and either reference IPv4/IPv6 address directly from lle or use newly-created llt_fill_sa_entry(). * Do not store sockaddr inside arp/ndp lle anymore.
Notes
Notes: svn path=/projects/routing/; revision=275628
Diffstat (limited to 'sys/net/if_llatbl.h')
-rw-r--r--sys/net/if_llatbl.h16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index bc642755e0e1..de4ad69bf13f 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -135,10 +135,6 @@ struct llentry {
#define ln_timer_ch lle_timer.ln_timer_ch
#define la_timer lle_timer.la_timer
-/* XXX bad name */
-#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
@@ -165,6 +161,7 @@ typedef void (llt_unlink_entry_t)(struct llentry *);
typedef int (llt_prepare_sentry_t)(struct lltable *, struct llentry *,
struct rt_addrinfo *);
typedef const void *(llt_get_sa_addr_t)(const struct sockaddr *l3addr);
+typedef void (llt_fill_sa_entry_t)(const struct llentry *, struct sockaddr *);
typedef int (llt_foreach_cb_t)(struct lltable *, struct llentry *, void *);
typedef int (llt_foreach_entry_t)(struct lltable *, llt_foreach_cb_t *, void *);
@@ -188,6 +185,7 @@ struct lltable {
llt_unlink_entry_t *llt_unlink_entry;
llt_prepare_sentry_t *llt_prepare_static_entry;
llt_get_sa_addr_t *llt_get_sa_addr;
+ llt_fill_sa_entry_t *llt_fill_sa_entry;
llt_free_tbl_t *llt_free_tbl;
};
@@ -271,6 +269,16 @@ lltable_unlink_entry(struct lltable *llt, struct llentry *lle)
llt->llt_unlink_entry(lle);
}
+static __inline void
+lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa)
+{
+ struct lltable *llt;
+
+ llt = lle->lle_tbl;
+
+ llt->llt_fill_sa_entry(lle, sa);
+}
+
int lla_rt_output(struct rt_msghdr *, struct rt_addrinfo *);
#include <sys/eventhandler.h>