Lines Matching refs:arl

46 #define	ARL_LL_ADDR_OFFSET(arl)	(((arl)->arl_sap_length) < 0 ? \  argument
48 ((sizeof (dl_unitdata_req_t)) + (ABS((arl)->arl_sap_length))))
180 arl_refhold_locked(arl_t *arl) in arl_refhold_locked() argument
182 ASSERT(MUTEX_HELD(&arl->arl_lock)); in arl_refhold_locked()
183 arl->arl_refcnt++; in arl_refhold_locked()
184 ASSERT(arl->arl_refcnt != 0); in arl_refhold_locked()
188 arl_refrele(arl_t *arl) in arl_refrele() argument
190 mutex_enter(&arl->arl_lock); in arl_refrele()
191 ASSERT(arl->arl_refcnt != 0); in arl_refrele()
192 arl->arl_refcnt--; in arl_refrele()
193 if (arl->arl_refcnt > 1) { in arl_refrele()
194 mutex_exit(&arl->arl_lock); in arl_refrele()
199 cv_broadcast(&arl->arl_cv); in arl_refrele()
200 mutex_exit(&arl->arl_lock); in arl_refrele()
374 arp_dlpi_done(arl_t *arl, ill_t *ill) in arp_dlpi_done() argument
380 mutex_enter(&arl->arl_lock); in arp_dlpi_done()
381 prim = arl->arl_dlpi_pending; in arp_dlpi_done()
383 if ((mp = arl->arl_dlpi_deferred) == NULL) { in arp_dlpi_done()
384 arl->arl_dlpi_pending = DL_PRIM_INVAL; in arp_dlpi_done()
385 if (arl->arl_state_flags & ARL_LL_DOWN) in arp_dlpi_done()
389 mutex_exit(&arl->arl_lock); in arp_dlpi_done()
398 arl->arl_dlpi_deferred = mp->b_next; in arp_dlpi_done()
403 arl->arl_dlpi_pending = DL_PRIM(mp); in arp_dlpi_done()
404 mutex_exit(&arl->arl_lock); in arp_dlpi_done()
410 putnext(arl->arl_wq, mp); in arp_dlpi_done()
423 arp_ll_set_defaults(arl_t *arl, mblk_t *mp) in arp_ll_set_defaults() argument
437 arl->arl_sap_length = dlia->dl_sap_length; in arp_ll_set_defaults()
438 arl->arl_phys_addr_length = dlia->dl_brdcst_addr_length; in arp_ll_set_defaults()
440 arl->arl_needs_attach = 1; in arp_ll_set_defaults()
442 arl->arl_sap_length = arm->arp_mac_sap_length; in arp_ll_set_defaults()
443 arl->arl_phys_addr_length = arm->arp_mac_hw_addr_length; in arp_ll_set_defaults()
449 arl->arl_sap = ETHERTYPE_ARP; in arp_ll_set_defaults()
450 arl_defaults_common(arl, mp); in arp_ll_set_defaults()
498 arl_dlpi_pending(arl_t *arl, t_uscalar_t prim) in arl_dlpi_pending() argument
502 mutex_enter(&arl->arl_lock); in arl_dlpi_pending()
503 if (arl->arl_dlpi_pending == prim) { in arl_dlpi_pending()
504 mutex_exit(&arl->arl_lock); in arl_dlpi_pending()
508 if (arl->arl_state_flags & ARL_CONDEMNED) { in arl_dlpi_pending()
509 mutex_exit(&arl->arl_lock); in arl_dlpi_pending()
512 pending = arl->arl_dlpi_pending; in arl_dlpi_pending()
513 mutex_exit(&arl->arl_lock); in arl_dlpi_pending()
517 dl_primstr(prim), arl->arl_name)); in arl_dlpi_pending()
520 dl_primstr(prim), arl->arl_name, dl_primstr(pending))); in arl_dlpi_pending()
529 arl_t *arl = (arl_t *)q->q_ptr; in arp_rput_dlpi() local
574 DTRACE_PROBE2(rput_dl_badprim, arl_t *, arl, in arp_rput_dlpi()
579 if (reqprim == DL_PRIM_INVAL || !arl_dlpi_pending(arl, reqprim)) { in arp_rput_dlpi()
585 arl_t *, arl); in arp_rput_dlpi()
589 ill = arl_to_ill(arl); in arp_rput_dlpi()
599 ASSERT(!arl->arl_dlpi_style_set); in arp_rput_dlpi()
600 ASSERT(arl->arl_dlpi_pending == DL_INFO_REQ); in arp_rput_dlpi()
601 ASSERT(arl->arl_dlpi_deferred == NULL); in arp_rput_dlpi()
602 arl->arl_dlpi_pending = DL_PRIM_INVAL; in arp_rput_dlpi()
603 arp_ll_set_defaults(arl, mp); in arp_rput_dlpi()
607 mutex_enter(&arl->arl_lock); in arp_rput_dlpi()
608 arl->arl_state_flags &= ~ARL_DL_UNBIND_IN_PROGRESS; in arp_rput_dlpi()
612 arl->arl_state_flags &= ~ARL_LL_UP; in arp_rput_dlpi()
613 arl->arl_state_flags |= ARL_LL_UNBOUND; in arp_rput_dlpi()
614 if (arl->arl_state_flags & ARL_CONDEMNED) { in arp_rput_dlpi()
623 arl->arl_dlpi_pending = DL_PRIM_INVAL; in arp_rput_dlpi()
625 cv_signal(&arl->arl_cv); in arp_rput_dlpi()
626 mutex_exit(&arl->arl_lock); in arp_rput_dlpi()
650 arl_t *arl = ill_to_arl(ill); in arp_rput_dlpi_writer() local
652 if (arl == NULL) { in arp_rput_dlpi_writer()
669 mutex_enter(&arl->arl_lock); in arp_rput_dlpi_writer()
670 arl->arl_state_flags &= ~ARL_DL_UNBIND_IN_PROGRESS; in arp_rput_dlpi_writer()
671 arl->arl_state_flags &= ~ARL_LL_UP; in arp_rput_dlpi_writer()
672 arl->arl_state_flags |= ARL_LL_UNBOUND; in arp_rput_dlpi_writer()
673 arl->arl_state_flags |= ARL_LL_DOWN; in arp_rput_dlpi_writer()
674 cv_signal(&arl->arl_cv); in arp_rput_dlpi_writer()
675 mutex_exit(&arl->arl_lock); in arp_rput_dlpi_writer()
678 mutex_enter(&arl->arl_lock); in arp_rput_dlpi_writer()
679 arl->arl_state_flags &= ~ARL_LL_UP; in arp_rput_dlpi_writer()
680 arl->arl_state_flags |= ARL_LL_DOWN; in arp_rput_dlpi_writer()
681 arl->arl_state_flags |= ARL_LL_UNBOUND; in arp_rput_dlpi_writer()
682 cv_signal(&arl->arl_cv); in arp_rput_dlpi_writer()
683 mutex_exit(&arl->arl_lock); in arp_rput_dlpi_writer()
689 arl_refrele(arl); in arp_rput_dlpi_writer()
698 arl_t *, arl); in arp_rput_dlpi_writer()
699 mutex_enter(&arl->arl_lock); in arp_rput_dlpi_writer()
707 mutex_exit(&arl->arl_lock); in arp_rput_dlpi_writer()
708 arl_refrele(arl); in arp_rput_dlpi_writer()
712 mutex_exit(&arl->arl_lock); in arp_rput_dlpi_writer()
715 DTRACE_PROBE2(rput_dl_bind, arl_t *, arl, in arp_rput_dlpi_writer()
718 mutex_enter(&arl->arl_lock); in arp_rput_dlpi_writer()
719 ASSERT(arl->arl_state_flags & ARL_LL_BIND_PENDING); in arp_rput_dlpi_writer()
720 arl->arl_state_flags &= in arp_rput_dlpi_writer()
722 arl->arl_state_flags |= ARL_LL_UP; in arp_rput_dlpi_writer()
723 mutex_exit(&arl->arl_lock); in arp_rput_dlpi_writer()
726 DTRACE_PROBE2(rput_dl_uderror, arl_t *, arl, in arp_rput_dlpi_writer()
728 arl_refrele(arl); in arp_rput_dlpi_writer()
732 DTRACE_PROBE2(rput_dl_badprim, arl_t *, arl, in arp_rput_dlpi_writer()
734 arl_refrele(arl); in arp_rput_dlpi_writer()
738 arp_dlpi_done(arl, ill); in arp_rput_dlpi_writer()
739 arl_refrele(arl); in arp_rput_dlpi_writer()
746 arl_t *arl = q->q_ptr; in arp_rput() local
749 mutex_enter(&arl->arl_lock); in arp_rput()
750 if (((arl->arl_state_flags & in arp_rput()
757 mutex_exit(&arl->arl_lock); in arp_rput()
762 arl_refhold_locked(arl); in arp_rput()
765 mutex_exit(&arl->arl_lock); in arp_rput()
781 ill = arl_to_ill(arl); in arp_rput()
797 arl->arl_error = (int)(*mp->b_rptr & 0xFF); in arp_rput()
798 if (arl->arl_error == 0) in arp_rput()
799 arl->arl_error = ENXIO; in arp_rput()
808 arl_refrele(arl); in arp_rput()
1208 arl_ill_init(arl_t *arl, char *ill_name) in arl_ill_init() argument
1214 arl->arl_ipst); in arl_ill_init()
1227 ASSERT(arl->arl_phys_addr_length == ill->ill_phys_addr_length); in arl_ill_init()
1228 ASSERT(arl->arl_sap == ETHERTYPE_ARP); in arl_ill_init()
1229 ASSERT(arl->arl_mactype == ill->ill_mactype); in arl_ill_init()
1230 ASSERT(arl->arl_sap_length == ill->ill_sap_length); in arl_ill_init()
1241 if (ill->ill_common != NULL || arl->arl_common != NULL) { in arl_ill_init()
1249 ai->ai_arl = arl; in arl_ill_init()
1252 arl->arl_common = ai; in arl_ill_init()
1254 (void) strlcpy(arl->arl_name, ill->ill_name, LIFNAMSIZ); in arl_ill_init()
1255 arl->arl_name_length = ill->ill_name_length; in arl_ill_init()
1257 arp_ifname_notify(arl); in arl_ill_init()
1287 arl_t *arl; in ip_sioctl_ifunitsel_arp() local
1298 arl = (arl_t *)q->q_ptr; in ip_sioctl_ifunitsel_arp()
1300 arl->arl_ppa = *ppa; in ip_sioctl_ifunitsel_arp()
1301 return (arl_ill_init(arl, ill_name)); in ip_sioctl_ifunitsel_arp()
1307 arl_t *arl; in ip_sioctl_slifname_arp() local
1314 arl = (arl_t *)q->q_ptr; in ip_sioctl_slifname_arp()
1315 arl->arl_ppa = lifr->lifr_ppa; in ip_sioctl_slifname_arp()
1316 return (arl_ill_init(arl, lifr->lifr_name)); in ip_sioctl_slifname_arp()
1323 arl_t *arl = NULL; in ill_to_arl() local
1334 if ((arl = ai->ai_arl) != NULL) { in ill_to_arl()
1335 mutex_enter(&arl->arl_lock); in ill_to_arl()
1336 if (!(arl->arl_state_flags & ARL_CONDEMNED)) { in ill_to_arl()
1337 arl_refhold_locked(arl); in ill_to_arl()
1338 mutex_exit(&arl->arl_lock); in ill_to_arl()
1340 mutex_exit(&arl->arl_lock); in ill_to_arl()
1341 arl = NULL; in ill_to_arl()
1345 return (arl); in ill_to_arl()
1349 arl_to_ill(arl_t *arl) in arl_to_ill() argument
1351 arl_ill_common_t *ai = arl->arl_common; in arl_to_ill()
1388 arl_t *arl; in arp_ll_up() local
1391 arl = ill_to_arl(ill); in arp_ll_up()
1394 if (arl == NULL) in arp_ll_up()
1396 DTRACE_PROBE2(arl__downup, char *, "arp_ll_up", arl_t *, arl); in arp_ll_up()
1397 if ((arl->arl_state_flags & ARL_LL_UP) != 0) { in arp_ll_up()
1398 arl_refrele(arl); in arp_ll_up()
1401 if (arl->arl_needs_attach) { /* DL_STYLE2 */ in arp_ll_up()
1406 ((dl_attach_req_t *)attach_mp->b_rptr)->dl_ppa = arl->arl_ppa; in arp_ll_up()
1419 if (arl->arl_needs_attach) { in arp_ll_up()
1420 arp_dlpi_send(arl, attach_mp); in arp_ll_up()
1422 arl->arl_unbind_mp = unbind_mp; in arp_ll_up()
1424 arl->arl_state_flags |= ARL_LL_BIND_PENDING; in arp_ll_up()
1425 arp_dlpi_send(arl, bind_mp); in arp_ll_up()
1426 arl_refrele(arl); in arp_ll_up()
1433 arl_refrele(arl); in arp_ll_up()
1559 arl_t *arl; in arp_output() local
1618 arl = ill_to_arl(ill); in arp_output()
1619 if (arl == NULL) { in arp_output()
1623 if (canputnext(arl->arl_wq)) in arp_output()
1624 putnext(arl->arl_wq, mp); in arp_output()
1627 arl_refrele(arl); in arp_output()
1763 arl_unbind(arl_t *arl) in arl_unbind() argument
1767 if ((mp = arl->arl_unbind_mp) != NULL) { in arl_unbind()
1768 arl->arl_unbind_mp = NULL; in arl_unbind()
1769 arl->arl_state_flags |= ARL_DL_UNBIND_IN_PROGRESS; in arl_unbind()
1777 arl_t *arl; in arp_ll_down() local
1783 if ((arl = ill_to_arl(ill)) == NULL) in arp_ll_down()
1785 DTRACE_PROBE2(arl__downup, char *, "arp_ll_down", arl_t *, arl); in arp_ll_down()
1786 mutex_enter(&arl->arl_lock); in arp_ll_down()
1787 unbind_mp = arl_unbind(arl); in arp_ll_down()
1789 ASSERT(arl->arl_state_flags & ARL_DL_UNBIND_IN_PROGRESS); in arp_ll_down()
1791 arl_t *, arl); in arp_ll_down()
1794 arl->arl_state_flags |= ARL_LL_REPLUMBING; in arp_ll_down()
1796 mutex_exit(&arl->arl_lock); in arp_ll_down()
1798 arp_dlpi_send(arl, unbind_mp); in arp_ll_down()
1799 arl_refrele(arl); in arp_ll_down()
1817 arp_modclose(arl_t *arl) in arp_modclose() argument
1819 arl_ill_common_t *ai = arl->arl_common; in arp_modclose()
1821 queue_t *q = arl->arl_rq; in arp_modclose()
1825 ill = arl_to_ill(arl); in arp_modclose()
1860 mutex_enter(&arl->arl_lock); in arp_modclose()
1867 if ((arl->arl_state_flags & ARL_CONDEMNED) != 0) { in arp_modclose()
1868 mutex_exit(&arl->arl_lock); in arp_modclose()
1872 arl->arl_state_flags |= ARL_CONDEMNED; in arp_modclose()
1888 if (arl->arl_dlpi_pending != DL_UNBIND_REQ) in arp_modclose()
1889 arl->arl_dlpi_pending = DL_PRIM_INVAL; in arp_modclose()
1890 mp = arl->arl_dlpi_deferred; in arp_modclose()
1891 arl->arl_dlpi_deferred = NULL; in arp_modclose()
1892 mutex_exit(&arl->arl_lock); in arp_modclose()
1897 putnext(arl->arl_wq, mp); in arp_modclose()
1901 mutex_enter(&arl->arl_lock); in arp_modclose()
1902 while (arl->arl_refcnt != 0) in arp_modclose()
1903 cv_wait(&arl->arl_cv, &arl->arl_lock); in arp_modclose()
1908 mp = arl_unbind(arl); in arp_modclose()
1909 mutex_exit(&arl->arl_lock); in arp_modclose()
1911 arp_dlpi_send(arl, mp); in arp_modclose()
1912 mutex_enter(&arl->arl_lock); in arp_modclose()
1915 while (arl->arl_state_flags & ARL_DL_UNBIND_IN_PROGRESS) in arp_modclose()
1916 cv_wait(&arl->arl_cv, &arl->arl_lock); in arp_modclose()
1917 mutex_exit(&arl->arl_lock); in arp_modclose()
1939 arp_mod_close_tail(arl); in arp_modclose()
1950 arp_mod_close_tail(arl_t *arl) in arp_mod_close_tail() argument
1952 ip_stack_t *ipst = arl->arl_ipst; in arp_mod_close_tail()
1956 mi_close_unlink(&ipst->ips_arp_g_head, (IDP)arl); in arp_mod_close_tail()
1963 if (arl->arl_credp != NULL) in arp_mod_close_tail()
1964 crfree(arl->arl_credp); in arp_mod_close_tail()
1967 mpp = &arl->arl_first_mp_to_free; in arp_mod_close_tail()
1981 } while (mpp++ != &arl->arl_last_mp_to_free); in arp_mod_close_tail()
1984 mi_free(arl->arl_name); in arp_mod_close_tail()
1985 mi_close_free((IDP)arl); in arp_mod_close_tail()
2158 arp_dlpi_send(arl_t *arl, mblk_t *mp) in arp_dlpi_send() argument
2167 ai = arl->arl_common; in arp_dlpi_send()
2176 mutex_enter(&arl->arl_lock); in arp_dlpi_send()
2177 if (arl->arl_dlpi_pending != DL_PRIM_INVAL) { in arp_dlpi_send()
2179 mpp = &arl->arl_dlpi_deferred; in arp_dlpi_send()
2184 mutex_exit(&arl->arl_lock); in arp_dlpi_send()
2187 mutex_exit(&arl->arl_lock); in arp_dlpi_send()
2190 ASSERT((arl->arl_state_flags & ARL_DL_UNBIND_IN_PROGRESS) == 0); in arp_dlpi_send()
2199 if (!(arl->arl_state_flags & ARL_CONDEMNED) || in arp_dlpi_send()
2202 ill_t *ill = arl_to_ill(arl); in arp_dlpi_send()
2204 arl->arl_dlpi_pending = prim; in arp_dlpi_send()
2214 char *, dl_primstr(prim), char *, "-", arl_t *, arl); in arp_dlpi_send()
2215 putnext(arl->arl_wq, mp); in arp_dlpi_send()
2219 arl_defaults_common(arl_t *arl, mblk_t *mp) in arl_defaults_common() argument
2226 arl->arl_mactype = dlia->dl_mac_type; in arl_defaults_common()
2227 arl->arl_sap_length = dlia->dl_sap_length; in arl_defaults_common()
2229 if (!arl->arl_dlpi_style_set) { in arl_defaults_common()
2231 arl->arl_needs_attach = 1; in arl_defaults_common()
2232 mutex_enter(&arl->arl_lock); in arl_defaults_common()
2233 ASSERT(arl->arl_dlpi_style_set == 0); in arl_defaults_common()
2234 arl->arl_dlpi_style_set = 1; in arl_defaults_common()
2235 arl->arl_state_flags &= ~ARL_LL_SUBNET_PENDING; in arl_defaults_common()
2236 cv_broadcast(&arl->arl_cv); in arl_defaults_common()
2237 mutex_exit(&arl->arl_lock); in arl_defaults_common()
2242 arl_init(queue_t *q, arl_t *arl) in arl_init() argument
2248 mutex_init(&arl->arl_lock, NULL, MUTEX_DEFAULT, 0); in arl_init()
2250 arl->arl_rq = q; in arl_init()
2251 arl->arl_wq = WR(q); in arl_init()
2260 arl->arl_name = (char *)(mi_zalloc(2 * LIFNAMSIZ)); in arl_init()
2261 arl->arl_ppa = UINT_MAX; in arl_init()
2262 arl->arl_state_flags |= (ARL_LL_SUBNET_PENDING | ARL_LL_UNBOUND); in arl_init()
2269 arl->arl_dlpi_pending = DL_PRIM_INVAL; in arl_init()
2272 arp_dlpi_send(arl, info_mp); in arl_init()
2277 arl_wait_for_info_ack(arl_t *arl) in arl_wait_for_info_ack() argument
2281 mutex_enter(&arl->arl_lock); in arl_wait_for_info_ack()
2282 while (arl->arl_state_flags & ARL_LL_SUBNET_PENDING) { in arl_wait_for_info_ack()
2286 err = cv_wait_sig(&arl->arl_cv, &arl->arl_lock); in arl_wait_for_info_ack()
2288 mutex_exit(&arl->arl_lock); in arl_wait_for_info_ack()
2292 mutex_exit(&arl->arl_lock); in arl_wait_for_info_ack()
2297 return (arl->arl_error); in arl_wait_for_info_ack()
2303 arl_t *arl; in arl_set_muxid() local
2305 arl = ill_to_arl(ill); in arl_set_muxid()
2306 if (arl != NULL) { in arl_set_muxid()
2307 arl->arl_muxid = muxid; in arl_set_muxid()
2308 arl_refrele(arl); in arl_set_muxid()
2315 arl_t *arl; in arl_get_muxid() local
2318 arl = ill_to_arl(ill); in arl_get_muxid()
2319 if (arl != NULL) { in arl_get_muxid()
2320 muxid = arl->arl_muxid; in arl_get_muxid()
2321 arl_refrele(arl); in arl_get_muxid()
2333 arl_t *arl = NULL; in arp_modopen() local
2356 arl = (arl_t *)mi_open_alloc_sleep(sizeof (arl_t)); in arp_modopen()
2357 q->q_ptr = WR(q)->q_ptr = arl; in arp_modopen()
2358 arl->arl_ipst = ipst; in arp_modopen()
2359 arl->arl_zoneid = zoneid; in arp_modopen()
2360 err = arl_init(q, arl); in arp_modopen()
2363 mi_free(arl->arl_name); in arp_modopen()
2364 mi_free(arl); in arp_modopen()
2374 err = arl_wait_for_info_ack(arl); in arp_modopen()
2376 arl->arl_credp = credp; in arp_modopen()
2399 arp_ifname_notify(arl_t *arl) in arp_ifname_notify() argument
2416 (void) strncpy(lifr->lifr_name, arl->arl_name, LIFNAMSIZ); in arp_ifname_notify()
2417 lifr->lifr_ppa = arl->arl_ppa; in arp_ifname_notify()
2426 char *, "SIOCSLIFNAME", char *, "-", arl_t *, arl); in arp_ifname_notify()
2427 putnext(arl->arl_wq, mp1); in arp_ifname_notify()
2434 arl_t *arl = ill_to_arl(ill); in arp_send_replumb_conf() local
2436 if (arl == NULL) in arp_send_replumb_conf()
2446 arp_dlpi_send(arl, mp); in arp_send_replumb_conf()
2447 mutex_enter(&arl->arl_lock); in arp_send_replumb_conf()
2448 arl->arl_state_flags &= ~ARL_LL_REPLUMBING; in arp_send_replumb_conf()
2449 mutex_exit(&arl->arl_lock); in arp_send_replumb_conf()
2450 arl_refrele(arl); in arp_send_replumb_conf()
2463 arl_t *arl = ill_to_arl(ill); in arp_unbind_complete() local
2465 if (arl == NULL) in arp_unbind_complete()
2467 mutex_enter(&arl->arl_lock); in arp_unbind_complete()
2473 while (arl->arl_state_flags & ARL_DL_UNBIND_IN_PROGRESS) in arp_unbind_complete()
2474 cv_wait(&arl->arl_cv, &arl->arl_lock); in arp_unbind_complete()
2475 while (arl->arl_refcnt != 1) in arp_unbind_complete()
2476 cv_wait(&arl->arl_cv, &arl->arl_lock); in arp_unbind_complete()
2477 mutex_exit(&arl->arl_lock); in arp_unbind_complete()
2478 arl_refrele(arl); in arp_unbind_complete()