Deleted Added
full compact
if_llatbl.h (232054) if_llatbl.h (238945)
1/*
2 * Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved.
3 * Copyright (c) 2004-2008 Qing Li. All rights reserved.
4 * Copyright (c) 2008 Kip Macy. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 11 unchanged lines hidden (view full) ---

20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27#include <sys/cdefs.h>
1/*
2 * Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved.
3 * Copyright (c) 2004-2008 Qing Li. All rights reserved.
4 * Copyright (c) 2008 Kip Macy. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 11 unchanged lines hidden (view full) ---

20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 232054 2012-02-23 18:21:37Z kmacy $");
28__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 238945 2012-07-31 11:31:12Z glebius $");
29
30#ifndef _NET_IF_LLATBL_H_
31#define _NET_IF_LLATBL_H_
32
33#include "opt_ofed.h"
34
35#include <sys/_rwlock.h>
36#include <netinet/in.h>

--- 19 unchanged lines hidden (view full) ---

56 */
57struct llentry {
58 LIST_ENTRY(llentry) lle_next;
59 struct rwlock lle_lock;
60 struct lltable *lle_tbl;
61 struct llentries *lle_head;
62 void (*lle_free)(struct lltable *, struct llentry *);
63 struct mbuf *la_hold;
29
30#ifndef _NET_IF_LLATBL_H_
31#define _NET_IF_LLATBL_H_
32
33#include "opt_ofed.h"
34
35#include <sys/_rwlock.h>
36#include <netinet/in.h>

--- 19 unchanged lines hidden (view full) ---

56 */
57struct llentry {
58 LIST_ENTRY(llentry) lle_next;
59 struct rwlock lle_lock;
60 struct lltable *lle_tbl;
61 struct llentries *lle_head;
62 void (*lle_free)(struct lltable *, struct llentry *);
63 struct mbuf *la_hold;
64 int la_numheld; /* # of packets currently held */
64 int la_numheld; /* # of packets currently held */
65 time_t la_expire;
65 time_t la_expire;
66 uint16_t la_flags;
66 uint16_t la_flags;
67 uint16_t la_asked;
68 uint16_t la_preempt;
69 uint16_t ln_byhint;
70 int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */
67 uint16_t la_asked;
68 uint16_t la_preempt;
69 uint16_t ln_byhint;
70 int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */
71 uint16_t ln_router;
71 uint16_t ln_router;
72 time_t ln_ntick;
73 int lle_refcnt;
72 time_t ln_ntick;
73 int lle_refcnt;
74
74
75 union {
76 uint64_t mac_aligned;
77 uint16_t mac16[3];
78#ifdef OFED
79 uint8_t mac8[20]; /* IB needs 20 bytes. */
80#endif
81 } ll_addr;
82

--- 18 unchanged lines hidden (view full) ---

101#define LLE_IS_VALID(lle) (((lle) != NULL) && ((lle) != (void *)-1))
102
103#define LLE_ADDREF(lle) do { \
104 LLE_WLOCK_ASSERT(lle); \
105 KASSERT((lle)->lle_refcnt >= 0, \
106 ("negative refcnt %d", (lle)->lle_refcnt)); \
107 (lle)->lle_refcnt++; \
108} while (0)
75 union {
76 uint64_t mac_aligned;
77 uint16_t mac16[3];
78#ifdef OFED
79 uint8_t mac8[20]; /* IB needs 20 bytes. */
80#endif
81 } ll_addr;
82

--- 18 unchanged lines hidden (view full) ---

101#define LLE_IS_VALID(lle) (((lle) != NULL) && ((lle) != (void *)-1))
102
103#define LLE_ADDREF(lle) do { \
104 LLE_WLOCK_ASSERT(lle); \
105 KASSERT((lle)->lle_refcnt >= 0, \
106 ("negative refcnt %d", (lle)->lle_refcnt)); \
107 (lle)->lle_refcnt++; \
108} while (0)
109
109#define LLE_REMREF(lle) do { \
110 LLE_WLOCK_ASSERT(lle); \
111 KASSERT((lle)->lle_refcnt > 1, \
112 ("bogus refcnt %d", (lle)->lle_refcnt)); \
113 (lle)->lle_refcnt--; \
114} while (0)
115
116#define LLE_FREE_LOCKED(lle) do { \

--- 36 unchanged lines hidden (view full) ---

153
154 void (*llt_prefix_free)(struct lltable *,
155 const struct sockaddr *prefix,
156 const struct sockaddr *mask,
157 u_int flags);
158 struct llentry * (*llt_lookup)(struct lltable *, u_int flags,
159 const struct sockaddr *l3addr);
160 int (*llt_dump)(struct lltable *,
110#define LLE_REMREF(lle) do { \
111 LLE_WLOCK_ASSERT(lle); \
112 KASSERT((lle)->lle_refcnt > 1, \
113 ("bogus refcnt %d", (lle)->lle_refcnt)); \
114 (lle)->lle_refcnt--; \
115} while (0)
116
117#define LLE_FREE_LOCKED(lle) do { \

--- 36 unchanged lines hidden (view full) ---

154
155 void (*llt_prefix_free)(struct lltable *,
156 const struct sockaddr *prefix,
157 const struct sockaddr *mask,
158 u_int flags);
159 struct llentry * (*llt_lookup)(struct lltable *, u_int flags,
160 const struct sockaddr *l3addr);
161 int (*llt_dump)(struct lltable *,
161 struct sysctl_req *);
162 struct sysctl_req *);
162};
163MALLOC_DECLARE(M_LLTABLE);
164
165/*
166 * flags to be passed to arplookup.
167 */
168#define LLE_DELETED 0x0001 /* entry must be deleted */
169#define LLE_STATIC 0x0002 /* entry is static */
170#define LLE_IFADDR 0x0004 /* entry is interface addr */
171#define LLE_VALID 0x0008 /* ll_addr is valid */
172#define LLE_PROXY 0x0010 /* proxy entry ??? */
173#define LLE_PUB 0x0020 /* publish entry ??? */
163};
164MALLOC_DECLARE(M_LLTABLE);
165
166/*
167 * flags to be passed to arplookup.
168 */
169#define LLE_DELETED 0x0001 /* entry must be deleted */
170#define LLE_STATIC 0x0002 /* entry is static */
171#define LLE_IFADDR 0x0004 /* entry is interface addr */
172#define LLE_VALID 0x0008 /* ll_addr is valid */
173#define LLE_PROXY 0x0010 /* proxy entry ??? */
174#define LLE_PUB 0x0020 /* publish entry ??? */
175#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
174#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */
175#define LLE_CREATE 0x8000 /* create on a lookup miss */
176#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */
177#define LLE_CREATE 0x8000 /* create on a lookup miss */
176#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
177
178#define LLATBL_HASH(key, mask) \
179 (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
180
181struct lltable *lltable_init(struct ifnet *, int);
182void lltable_free(struct lltable *);
178
179#define LLATBL_HASH(key, mask) \
180 (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
181
182struct lltable *lltable_init(struct ifnet *, int);
183void lltable_free(struct lltable *);
183void lltable_prefix_free(int, struct sockaddr *,
184 struct sockaddr *, u_int);
184void lltable_prefix_free(int, struct sockaddr *,
185 struct sockaddr *, u_int);
185#if 0
186void lltable_drain(int);
187#endif
188int lltable_sysctl_dumparp(int, struct sysctl_req *);
189
190size_t llentry_free(struct llentry *);
191int llentry_update(struct llentry **, struct lltable *,
186#if 0
187void lltable_drain(int);
188#endif
189int lltable_sysctl_dumparp(int, struct sysctl_req *);
190
191size_t llentry_free(struct llentry *);
192int llentry_update(struct llentry **, struct lltable *,
192 struct sockaddr_storage *, struct ifnet *);
193 struct sockaddr_storage *, struct ifnet *);
193
194/*
195 * Generic link layer address lookup function.
196 */
197static __inline struct llentry *
198lla_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3addr)
199{
200 return llt->llt_lookup(llt, flags, l3addr);
201}
202
203int lla_rt_output(struct rt_msghdr *, struct rt_addrinfo *);
204#endif /* _NET_IF_LLATBL_H_ */
194
195/*
196 * Generic link layer address lookup function.
197 */
198static __inline struct llentry *
199lla_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3addr)
200{
201 return llt->llt_lookup(llt, flags, l3addr);
202}
203
204int lla_rt_output(struct rt_msghdr *, struct rt_addrinfo *);
205#endif /* _NET_IF_LLATBL_H_ */