if_llatbl.h (238989) | if_llatbl.h (238990) |
---|---|
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 238989 2012-08-02 13:20:44Z glebius $"); | 28__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 238990 2012-08-02 13:57:49Z 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> --- 61 unchanged lines hidden (view full) --- 98#define LLE_LOCK_DESTROY(lle) rw_destroy(&(lle)->lle_lock) 99#define LLE_WLOCK_ASSERT(lle) rw_assert(&(lle)->lle_lock, RA_WLOCKED) 100 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, \ | 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> --- 61 unchanged lines hidden (view full) --- 98#define LLE_LOCK_DESTROY(lle) rw_destroy(&(lle)->lle_lock) 99#define LLE_WLOCK_ASSERT(lle) rw_assert(&(lle)->lle_lock, RA_WLOCKED) 100 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)); \ | 106 ("negative refcnt %d on lle %p", \ 107 (lle)->lle_refcnt, (lle))); \ |
107 (lle)->lle_refcnt++; \ 108} while (0) 109 110#define LLE_REMREF(lle) do { \ 111 LLE_WLOCK_ASSERT(lle); \ | 108 (lle)->lle_refcnt++; \ 109} while (0) 110 111#define LLE_REMREF(lle) do { \ 112 LLE_WLOCK_ASSERT(lle); \ |
112 KASSERT((lle)->lle_refcnt > 1, \ 113 ("bogus refcnt %d", (lle)->lle_refcnt)); \ | 113 KASSERT((lle)->lle_refcnt > 0, \ 114 ("bogus refcnt %d on lle %p", \ 115 (lle)->lle_refcnt, (lle))); \ |
114 (lle)->lle_refcnt--; \ 115} while (0) 116 117#define LLE_FREE_LOCKED(lle) do { \ | 116 (lle)->lle_refcnt--; \ 117} while (0) 118 119#define LLE_FREE_LOCKED(lle) do { \ |
118 if ((lle)->lle_refcnt <= 1) \ 119 (lle)->lle_free((lle)->lle_tbl, (lle));\ | 120 if ((lle)->lle_refcnt == 1) \ 121 (lle)->lle_free((lle)->lle_tbl, (lle)); \ |
120 else { \ | 122 else { \ |
121 (lle)->lle_refcnt--; \ | 123 LLE_REMREF(lle); \ |
122 LLE_WUNLOCK(lle); \ 123 } \ 124 /* guard against invalid refs */ \ | 124 LLE_WUNLOCK(lle); \ 125 } \ 126 /* guard against invalid refs */ \ |
125 lle = NULL; \ | 127 (lle) = NULL; \ |
126} while (0) 127 128#define LLE_FREE(lle) do { \ 129 LLE_WLOCK(lle); \ 130 LLE_FREE_LOCKED(lle); \ 131} while (0) 132 133 --- 33 unchanged lines hidden (view full) --- 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 ??? */ | 128} while (0) 129 130#define LLE_FREE(lle) do { \ 131 LLE_WLOCK(lle); \ 132 LLE_FREE_LOCKED(lle); \ 133} while (0) 134 135 --- 33 unchanged lines hidden (view full) --- 169 * flags to be passed to arplookup. 170 */ 171#define LLE_DELETED 0x0001 /* entry must be deleted */ 172#define LLE_STATIC 0x0002 /* entry is static */ 173#define LLE_IFADDR 0x0004 /* entry is interface addr */ 174#define LLE_VALID 0x0008 /* ll_addr is valid */ 175#define LLE_PROXY 0x0010 /* proxy entry ??? */ 176#define LLE_PUB 0x0020 /* publish entry ??? */ |
177#define LLE_LINKED 0x0040 /* linked to lookup structure */ |
|
175#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */ 176#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */ 177#define LLE_CREATE 0x8000 /* create on a lookup miss */ 178 179#define LLATBL_HASH(key, mask) \ 180 (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask) 181 182struct lltable *lltable_init(struct ifnet *, int); --- 23 unchanged lines hidden --- | 178#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */ 179#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */ 180#define LLE_CREATE 0x8000 /* create on a lookup miss */ 181 182#define LLATBL_HASH(key, mask) \ 183 (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask) 184 185struct lltable *lltable_init(struct ifnet *, int); --- 23 unchanged lines hidden --- |