Lines Matching refs:ncec
41 ncec_cb_dispatch(ncec_t *ncec) in ncec_cb_dispatch() argument
46 mutex_enter(&ncec->ncec_lock); in ncec_cb_dispatch()
47 if (list_is_empty(&ncec->ncec_cb)) { in ncec_cb_dispatch()
48 mutex_exit(&ncec->ncec_lock); in ncec_cb_dispatch()
51 ncec_ip2mac_response(&ip2m, ncec); in ncec_cb_dispatch()
52 ncec_cb_refhold_locked(ncec); in ncec_cb_dispatch()
61 ncec_cb = list_head(&ncec->ncec_cb); in ncec_cb_dispatch()
62 for (; ncec_cb != NULL; ncec_cb = list_next(&ncec->ncec_cb, ncec_cb)) { in ncec_cb_dispatch()
66 mutex_exit(&ncec->ncec_lock); in ncec_cb_dispatch()
68 mutex_enter(&ncec->ncec_lock); in ncec_cb_dispatch()
70 ncec_cb_refrele(ncec); in ncec_cb_dispatch()
71 mutex_exit(&ncec->ncec_lock); in ncec_cb_dispatch()
78 ncec_ip2mac_response(ip2mac_t *ip2m, ncec_t *ncec) in ncec_ip2mac_response() argument
80 boolean_t isv6 = (ncec->ncec_ipversion == IPV6_VERSION); in ncec_ip2mac_response()
85 ASSERT(MUTEX_HELD(&ncec->ncec_lock)); in ncec_ip2mac_response()
87 if (NCE_ISREACHABLE(ncec) && !NCE_ISCONDEMNED(ncec)) in ncec_ip2mac_response()
94 sin6->sin6_addr = ncec->ncec_addr; in ncec_ip2mac_response()
98 IN6_V4MAPPED_TO_INADDR(&ncec->ncec_addr, &sin->sin_addr); in ncec_ip2mac_response()
103 sdl->sdl_type = ncec->ncec_ill->ill_type; in ncec_ip2mac_response()
109 sdl->sdl_alen = ncec->ncec_ill->ill_phys_addr_length; in ncec_ip2mac_response()
110 if (ncec->ncec_lladdr != NULL) in ncec_ip2mac_response()
111 bcopy(ncec->ncec_lladdr, LLADDR(sdl), sdl->sdl_alen); in ncec_ip2mac_response()
116 ncec_cb_refhold_locked(ncec_t *ncec) in ncec_cb_refhold_locked() argument
118 ASSERT(MUTEX_HELD(&ncec->ncec_lock)); in ncec_cb_refhold_locked()
119 ncec->ncec_cb_walker_cnt++; in ncec_cb_refhold_locked()
123 ncec_cb_refrele(ncec_t *ncec) in ncec_cb_refrele() argument
127 ASSERT(MUTEX_HELD(&ncec->ncec_lock)); in ncec_cb_refrele()
128 if (--ncec->ncec_cb_walker_cnt == 0) { in ncec_cb_refrele()
129 for (ncec_cb = list_head(&ncec->ncec_cb); ncec_cb != NULL; in ncec_cb_refrele()
132 ncec_cb_next = list_next(&ncec->ncec_cb, ncec_cb); in ncec_cb_refrele()
135 list_remove(&ncec->ncec_cb, ncec_cb); in ncec_cb_refrele()
146 ncec_add_cb(ncec_t *ncec, ip2mac_callback_t *cb, void *cbarg) in ncec_add_cb() argument
151 ASSERT(MUTEX_HELD(&ncec->ncec_lock)); in ncec_add_cb()
162 nce_cb->ncec_cb_id = ncec; /* no refs! just an address */ in ncec_add_cb()
163 list_insert_tail(&ncec->ncec_cb, nce_cb); in ncec_add_cb()
164 ip2mid = ncec; /* this is the id to be used in ip2mac_cancel */ in ncec_add_cb()
180 ncec_t *ncec; in ip2mac() local
240 ncec = nce->nce_common; in ip2mac()
241 delta = TICK_TO_MSEC(ddi_get_lbolt64()) - ncec->ncec_last; in ip2mac()
242 mutex_enter(&ncec->ncec_lock); in ip2mac()
243 if (NCE_ISREACHABLE(ncec) && in ip2mac()
245 ncec_ip2mac_response(ip2m, ncec); in ip2mac()
250 mutex_exit(&ncec->ncec_lock); in ip2mac()
258 ncec = nce->nce_common; in ip2mac()
259 delta = TICK_TO_MSEC(ddi_get_lbolt64()) - ncec->ncec_last; in ip2mac()
260 mutex_enter(&ncec->ncec_lock); in ip2mac()
261 if (NCE_ISCONDEMNED(ncec)) { in ip2mac()
264 if (NCE_ISREACHABLE(ncec)) { in ip2mac()
265 if (NCE_MYADDR(ncec) || in ip2mac()
267 ncec_ip2mac_response(ip2m, ncec); in ip2mac()
269 mutex_exit(&ncec->ncec_lock); in ip2mac()
286 ncec->ncec_rcnt = ill->ill_xmit_count; in ip2mac()
287 ncec->ncec_state = ND_PROBE; in ip2mac()
289 } else if (ncec->ncec_state == ND_INITIAL) { in ip2mac()
291 ncec->ncec_state = ND_INCOMPLETE; in ip2mac()
297 if (ncec->ncec_rcnt > 0) { in ip2mac()
302 ip2mid = ncec_add_cb(ncec, cb, cbarg); in ip2mac()
311 mutex_exit(&ncec->ncec_lock); in ip2mac()
318 ip_ndp_resolve(ncec); in ip2mac()
340 ip2mac_cancel_callback(ncec_t *ncec, void *arg) in ip2mac_cancel_callback() argument
346 if (ip2m_nce_cb->ncec_cb_id != ncec) in ip2mac_cancel_callback()
349 mutex_enter(&ncec->ncec_lock); in ip2mac_cancel_callback()
350 if (list_is_empty(&ncec->ncec_cb)) { in ip2mac_cancel_callback()
351 mutex_exit(&ncec->ncec_lock); in ip2mac_cancel_callback()
362 ncec_cb = list_head(&ncec->ncec_cb); in ip2mac_cancel_callback()
363 for (; ncec_cb != NULL; ncec_cb = list_next(&ncec->ncec_cb, ncec_cb)) { in ip2mac_cancel_callback()
370 if (ncec->ncec_cb_walker_cnt == 0) { in ip2mac_cancel_callback()
371 list_remove(&ncec->ncec_cb, ncec_cb); in ip2mac_cancel_callback()
377 mutex_exit(&ncec->ncec_lock); in ip2mac_cancel_callback()