Lines Matching refs:bip

152 #define	KIINCR(vn)	KIPINCR(bip, vn)
153 #define KIDECR(vn) KIPDECR(bip, vn)
247 bridge_inst_t *bip; in mac_to_inst() local
250 if ((bip = bmp->bm_inst) != NULL) in mac_to_inst()
251 atomic_inc_uint(&bip->bi_refs); in mac_to_inst()
253 return (bip); in mac_to_inst()
262 bridge_inst_t *bip; in link_sdu_fail() local
280 bip = blp->bl_inst; in link_sdu_fail()
281 bmp = bip->bi_mac; in link_sdu_fail()
283 for (blcmp = list_head(&bip->bi_links); blcmp != NULL; in link_sdu_fail()
284 blcmp = list_next(&bip->bi_links, blcmp)) { in link_sdu_fail()
338 send_up_messages(bridge_inst_t *bip, mblk_t *mp) in send_up_messages() argument
343 rq = bip->bi_control->bs_wq; in send_up_messages()
411 bridge_inst_t *bip; in bridge_ioc_listfwd() local
415 bip = bridge_find_name(blf->blf_name); in bridge_ioc_listfwd()
416 if (bip == NULL) in bridge_ioc_listfwd()
421 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_ioc_listfwd()
422 if ((bfp = avl_find(&bip->bi_fwd, &match, &where)) == NULL) in bridge_ioc_listfwd()
423 bfp = avl_nearest(&bip->bi_fwd, where, AVL_AFTER); in bridge_ioc_listfwd()
425 bfp = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_ioc_listfwd()
437 rw_exit(&bip->bi_rwlock); in bridge_ioc_listfwd()
438 bridge_unref(bip); in bridge_ioc_listfwd()
447 bridge_inst_t *bip; in bridge_m_setprop() local
463 } else if ((bip = mac_to_inst(bmp)) == NULL) { in bridge_m_setprop()
466 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_m_setprop()
468 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_m_setprop()
469 blp = list_next(&bip->bi_links, blp)) { in bridge_m_setprop()
477 rw_exit(&bip->bi_rwlock); in bridge_m_setprop()
480 send_up_messages(bip, mlist); in bridge_m_setprop()
481 bridge_unref(bip); in bridge_m_setprop()
579 bmac_alloc(bridge_inst_t *bip, bridge_mac_t **bmacp) in bmac_alloc() argument
594 if (strcmp(bip->bi_name, bmp->bm_name) == 0) { in bmac_alloc()
596 bmp->bm_inst = bip; in bmac_alloc()
628 bnew->bm_inst = bip; in bmac_alloc()
629 (void) strcpy(bnew->bm_name, bip->bi_name); in bmac_alloc()
654 bridge_inst_t *bip; in bmac_disconnect() local
660 bip = bmp->bm_inst; in bmac_disconnect()
661 bip->bi_mac = NULL; in bmac_disconnect()
687 inst_free(bridge_inst_t *bip) in inst_free() argument
689 ASSERT(bip->bi_mac == NULL); in inst_free()
690 rw_destroy(&bip->bi_rwlock); in inst_free()
691 list_destroy(&bip->bi_links); in inst_free()
692 cv_destroy(&bip->bi_linkwait); in inst_free()
693 avl_destroy(&bip->bi_fwd); in inst_free()
694 if (bip->bi_ksp != NULL) in inst_free()
695 kstat_delete(bip->bi_ksp); in inst_free()
696 kmem_free(bip, sizeof (*bip)); in inst_free()
702 bridge_inst_t *bip; in inst_alloc() local
704 bip = kmem_zalloc(sizeof (*bip), KM_SLEEP); in inst_alloc()
705 bip->bi_refs = 1; in inst_alloc()
706 (void) strcpy(bip->bi_name, bridge); in inst_alloc()
707 rw_init(&bip->bi_rwlock, NULL, RW_DRIVER, NULL); in inst_alloc()
708 list_create(&bip->bi_links, sizeof (bridge_link_t), in inst_alloc()
710 cv_init(&bip->bi_linkwait, NULL, CV_DRIVER, NULL); in inst_alloc()
711 avl_create(&bip->bi_fwd, fwd_compare, sizeof (bridge_fwd_t), in inst_alloc()
713 return (bip); in inst_alloc()
719 bridge_inst_t *bip; in bridge_find_name() local
722 for (bip = list_head(&inst_list); bip != NULL; in bridge_find_name()
723 bip = list_next(&inst_list, bip)) { in bridge_find_name()
724 if (!(bip->bi_flags & BIF_SHUTDOWN) && in bridge_find_name()
725 strcmp(bridge, bip->bi_name) == 0) { in bridge_find_name()
726 atomic_inc_uint(&bip->bi_refs); in bridge_find_name()
732 return (bip); in bridge_find_name()
739 bridge_inst_t *bip, *bipnew; in bridge_create() local
748 for (bip = list_head(&inst_list); bip != NULL; in bridge_create()
749 bip = list_next(&inst_list, bip)) { in bridge_create()
750 if (strcmp(bridge, bip->bi_name) == 0) in bridge_create()
755 if (bip != NULL && (bip->bi_flags & BIF_SHUTDOWN)) { in bridge_create()
760 if (bip == NULL) { in bridge_create()
761 bip = bipnew; in bridge_create()
763 list_insert_tail(&inst_list, bip); in bridge_create()
772 bip->bi_ksp = kstat_setup((kstat_named_t *)&bip->bi_kstats, in bridge_create()
773 inst_kstats_list, Dim(inst_kstats_list), bip->bi_name); in bridge_create()
775 err = bmac_alloc(bip, &bmp); in bridge_create()
776 if ((bip->bi_mac = bmp) == NULL) in bridge_create()
790 bip->bi_dev = makedevice(bridge_major, mac_minor(bmp->bm_mh)); in bridge_create()
791 *bipc = bip; in bridge_create()
795 ASSERT(bip->bi_trilldata == NULL); in bridge_create()
796 bip->bi_flags |= BIF_SHUTDOWN; in bridge_create()
797 bridge_unref(bip); in bridge_create()
802 bridge_unref(bridge_inst_t *bip) in bridge_unref() argument
804 if (atomic_dec_uint_nv(&bip->bi_refs) == 0) { in bridge_unref()
805 ASSERT(bip->bi_flags & BIF_SHUTDOWN); in bridge_unref()
807 if (bip->bi_mac != NULL) in bridge_unref()
808 bmac_disconnect(bip->bi_mac); in bridge_unref()
810 list_remove(&inst_list, bip); in bridge_unref()
813 inst_free(bip); in bridge_unref()
862 bridge_inst_t *bip = blp->bl_inst; in link_free() local
874 bridge_unref(bip); in link_free()
881 bridge_inst_t *bip = blp->bl_inst; in link_unref() local
884 rw_enter(&bip->bi_rwlock, RW_WRITER); in link_unref()
886 list_remove(&bip->bi_links, blp); in link_unref()
887 rw_exit(&bip->bi_rwlock); in link_unref()
888 if (bip->bi_trilldata != NULL && list_is_empty(&bip->bi_links)) in link_unref()
889 cv_broadcast(&bip->bi_linkwait); in link_unref()
912 fwd_find(bridge_inst_t *bip, const uint8_t *addr, uint16_t vlanid) in fwd_find() argument
919 rw_enter(&bip->bi_rwlock, RW_READER); in fwd_find()
920 if ((bfp = avl_find(&bip->bi_fwd, &match, NULL)) != NULL) { in fwd_find()
924 vbfp = avl_find(&bip->bi_fwd, &match, NULL); in fwd_find()
930 rw_exit(&bip->bi_rwlock); in fwd_find()
938 bridge_inst_t *bip = bfp->bf_links[0]->bl_inst; in fwd_free() local
959 bridge_inst_t *bip; in fwd_delete() local
964 bip = bfp->bf_links[0]->bl_inst; in fwd_delete()
965 rw_enter(&bip->bi_rwlock, RW_WRITER); in fwd_delete()
968 avl_remove(&bip->bi_fwd, bfp); in fwd_delete()
972 bfpzero = avl_find(&bip->bi_fwd, bfp, NULL); in fwd_delete()
976 rw_exit(&bip->bi_rwlock); in fwd_delete()
979 rw_exit(&bip->bi_rwlock); in fwd_delete()
985 fwd_insert(bridge_inst_t *bip, bridge_fwd_t *bfp) in fwd_insert() argument
990 rw_enter(&bip->bi_rwlock, RW_WRITER); in fwd_insert()
991 if (!(bip->bi_flags & BIF_SHUTDOWN) && in fwd_insert()
992 avl_numnodes(&bip->bi_fwd) < bip->bi_tablemax && in fwd_insert()
993 avl_find(&bip->bi_fwd, bfp, &idx) == NULL) { in fwd_insert()
994 avl_insert(&bip->bi_fwd, bfp, idx); in fwd_insert()
1001 rw_exit(&bip->bi_rwlock); in fwd_insert()
1009 bridge_inst_t *bip = blp->bl_inst; in fwd_update_local() local
1025 rw_enter(&bip->bi_rwlock, RW_WRITER); in fwd_update_local()
1026 if ((bfp = avl_find(&bip->bi_fwd, &match, NULL)) != NULL) { in fwd_update_local()
1049 avl_remove(&bip->bi_fwd, bfp); in fwd_update_local()
1055 rw_exit(&bip->bi_rwlock); in fwd_update_local()
1067 if ((bip->bi_flags & BIF_SHUTDOWN) || in fwd_update_local()
1072 rw_enter(&bip->bi_rwlock, RW_WRITER); in fwd_update_local()
1073 if ((bfp = avl_find(&bip->bi_fwd, &match, &idx)) == NULL) { in fwd_update_local()
1085 avl_remove(&bip->bi_fwd, bfp); in fwd_update_local()
1091 (void) avl_find(&bip->bi_fwd, &match, &idx); in fwd_update_local()
1104 avl_insert(&bip->bi_fwd, bfnew, idx); in fwd_update_local()
1109 rw_exit(&bip->bi_rwlock); in fwd_update_local()
1146 bridge_inst_t *bip; in link_shutdown() local
1177 bip = blp->bl_inst; in link_shutdown()
1178 rw_enter(&bip->bi_rwlock, RW_WRITER); in link_shutdown()
1179 bfnext = avl_first(&bip->bi_fwd); in link_shutdown()
1181 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in link_shutdown()
1196 avl_remove(&bip->bi_fwd, bfp); in link_shutdown()
1201 rw_exit(&bip->bi_rwlock); in link_shutdown()
1223 shutdown_inst(bridge_inst_t *bip) in shutdown_inst() argument
1229 if (bip->bi_flags & BIF_SHUTDOWN) { in shutdown_inst()
1240 bip->bi_flags |= BIF_SHUTDOWN; in shutdown_inst()
1243 bip->bi_control = NULL; in shutdown_inst()
1245 rw_enter(&bip->bi_rwlock, RW_READER); in shutdown_inst()
1246 blnext = list_head(&bip->bi_links); in shutdown_inst()
1248 blnext = list_next(&bip->bi_links, blp); in shutdown_inst()
1255 while ((bfp = avl_first(&bip->bi_fwd)) != NULL) { in shutdown_inst()
1257 rw_exit(&bip->bi_rwlock); in shutdown_inst()
1260 rw_enter(&bip->bi_rwlock, RW_READER); in shutdown_inst()
1262 rw_exit(&bip->bi_rwlock); in shutdown_inst()
1269 while (bip->bi_trilldata != NULL && !list_is_empty(&bip->bi_links)) in shutdown_inst()
1270 cv_wait(&bip->bi_linkwait, &inst_lock); in shutdown_inst()
1272 if (bip->bi_trilldata != NULL) in shutdown_inst()
1273 trill_brdstr_fn(bip->bi_trilldata, bip); in shutdown_inst()
1275 bridge_unref(bip); in shutdown_inst()
1294 bridge_inst_t *bip; in bridge_trill_register_cb() local
1298 for (bip = list_head(&inst_list); bip != NULL; in bridge_trill_register_cb()
1299 bip = list_next(&inst_list, bip)) { in bridge_trill_register_cb()
1300 ASSERT(bip->bi_trilldata == NULL); in bridge_trill_register_cb()
1301 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_trill_register_cb()
1302 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_trill_register_cb()
1303 blp = list_next(&bip->bi_links, blp)) { in bridge_trill_register_cb()
1306 rw_exit(&bip->bi_rwlock); in bridge_trill_register_cb()
1329 bridge_inst_t *bip; in bridge_trill_brref() local
1332 bip = bridge_find_name(bridge); in bridge_trill_brref()
1333 if (bip != NULL) { in bridge_trill_brref()
1334 ASSERT(bip->bi_trilldata == NULL && ptr != NULL); in bridge_trill_brref()
1335 bip->bi_trilldata = ptr; in bridge_trill_brref()
1337 return (bip); in bridge_trill_brref()
1341 bridge_trill_brunref(bridge_inst_t *bip) in bridge_trill_brunref() argument
1343 ASSERT(bip->bi_trilldata != NULL); in bridge_trill_brunref()
1344 bip->bi_trilldata = NULL; in bridge_trill_brunref()
1345 bridge_unref(bip); in bridge_trill_brunref()
1355 bridge_trill_lnref(bridge_inst_t *bip, datalink_id_t linkid, void *ptr) in bridge_trill_lnref() argument
1360 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_trill_lnref()
1361 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_trill_lnref()
1362 blp = list_next(&bip->bi_links, blp)) { in bridge_trill_lnref()
1372 rw_exit(&bip->bi_rwlock); in bridge_trill_lnref()
1403 bridge_inst_t *bip; in bridge_timer() local
1416 for (bip = list_head(&inst_list); bip != NULL; in bridge_timer()
1417 bip = list_next(&inst_list, bip)) { in bridge_timer()
1418 if (bip->bi_flags & BIF_SHUTDOWN) in bridge_timer()
1420 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_timer()
1422 if (avl_numnodes(&bip->bi_fwd) > bip->bi_tablemax) in bridge_timer()
1423 bip->bi_tshift++; in bridge_timer()
1425 bip->bi_tshift = 0; in bridge_timer()
1426 if ((age_limit = bridge_fwd_age >> bip->bi_tshift) == 0) { in bridge_timer()
1427 if (bip->bi_tshift != 0) in bridge_timer()
1428 bip->bi_tshift--; in bridge_timer()
1431 bfnext = avl_first(&bip->bi_fwd); in bridge_timer()
1433 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_timer()
1437 avl_remove(&bip->bi_fwd, bfp); in bridge_timer()
1442 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_timer()
1443 blp = list_next(&bip->bi_links, blp)) { in bridge_timer()
1450 rw_exit(&bip->bi_rwlock); in bridge_timer()
1546 bridge_inst_t *bip; in bridge_close() local
1558 if ((bip = bsp->bs_inst) != NULL) in bridge_close()
1559 shutdown_inst(bip); in bridge_close()
1562 if (bip != NULL) in bridge_close()
1563 bridge_unref(bip); in bridge_close()
1572 bridge_inst_t *bip = blp->bl_inst; in bridge_learn() local
1586 if ((bfp = fwd_find(bip, saddr, vlanid)) != NULL) { in bridge_learn()
1669 if (!fwd_insert(bip, bfpnew)) in bridge_learn()
1865 bridge_inst_t *bip = blp->bl_inst; in bridge_forward() local
1887 if ((bfp = fwd_find(bip, daddr, vlanid)) != NULL) { in bridge_forward()
2040 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_forward()
2041 for (blpnext = list_head(&bip->bi_links); blpnext != NULL; in bridge_forward()
2042 blpnext = list_next(&bip->bi_links, blpnext)) { in bridge_forward()
2050 rw_exit(&bip->bi_rwlock); in bridge_forward()
2052 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_forward()
2053 for (blpnext = list_next(&bip->bi_links, blpsend); in bridge_forward()
2055 blpnext = list_next(&bip->bi_links, blpnext)) { in bridge_forward()
2063 rw_exit(&bip->bi_rwlock); in bridge_forward()
2183 bridge_inst_t *bip = blp->bl_inst; in bridge_notify_cb() local
2184 bridge_mac_t *bmp = bip->bi_mac; in bridge_notify_cb()
2189 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_notify_cb()
2190 if (list_prev(&bip->bi_links, blp) == NULL && in bridge_notify_cb()
2191 list_next(&bip->bi_links, blp) == NULL) { in bridge_notify_cb()
2200 rw_exit(&bip->bi_rwlock); in bridge_notify_cb()
2201 send_up_messages(bip, mlist); in bridge_notify_cb()
2217 bridge_inst_t *bip = blp->bl_inst; in bridge_recv_cb() local
2218 bridge_mac_t *bmp = bip->bi_mac; in bridge_recv_cb()
2446 bridge_inst_t *bip = blp->bl_inst; in bridge_xmit_cb() local
2447 bridge_mac_t *bmp = bip->bi_mac; in bridge_xmit_cb()
2556 bridge_inst_t *bip = blp->bl_inst; /* used by macros */ in bridge_trill_decaps() local
2608 bridge_inst_t *bip = blp->bl_inst; /* used by macros */ in bridge_trill_output() local
2640 bridge_inst_t *bip = blp->bl_inst; in bridge_trill_flush() local
2649 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_trill_flush()
2650 bfnext = avl_first(&bip->bi_fwd); in bridge_trill_flush()
2652 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_trill_flush()
2670 avl_remove(&bip->bi_fwd, bfp); in bridge_trill_flush()
2674 rw_exit(&bip->bi_rwlock); in bridge_trill_flush()
2714 bridge_inst_t *bip; in bridge_ls_cb() local
2728 bip = blp->bl_inst; in bridge_ls_cb()
2729 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_ls_cb()
2730 for (blcmp = list_head(&bip->bi_links); blcmp != NULL; in bridge_ls_cb()
2731 blcmp = list_next(&bip->bi_links, blcmp)) { in bridge_ls_cb()
2753 for (blcmp = list_head(&bip->bi_links); blcmp != NULL; in bridge_ls_cb()
2754 blcmp = list_next(&bip->bi_links, blcmp)) { in bridge_ls_cb()
2758 bmp = bip->bi_mac; in bridge_ls_cb()
2763 rw_exit(&bip->bi_rwlock); in bridge_ls_cb()
2772 bridge_inst_t *bip, *bipt; in bridge_add_link() local
2789 bip = bsp->bs_inst; in bridge_add_link()
2839 bmp = bip->bi_mac; in bridge_add_link()
2840 if (list_is_empty(&bip->bi_links)) { in bridge_add_link()
2851 (void) snprintf(kstatname, sizeof (kstatname), "%s-%s", bip->bi_name, in bridge_add_link()
2867 atomic_inc_uint(&bip->bi_refs); in bridge_add_link()
2868 blp->bl_inst = bip; in bridge_add_link()
2913 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_add_link()
2914 list_insert_tail(&bip->bi_links, blp); in bridge_add_link()
2924 rw_exit(&bip->bi_rwlock); in bridge_add_link()
2925 send_up_messages(bip, mlist); in bridge_add_link()
2960 bridge_inst_t *bip; in bridge_rem_link() local
2969 bip = bsp->bs_inst; in bridge_rem_link()
2977 rw_enter(&bip->bi_rwlock, RW_READER); in bridge_rem_link()
2979 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_rem_link()
2980 blp = list_next(&bip->bi_links, blp)) { in bridge_rem_link()
2996 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_rem_link()
2997 blp = list_next(&bip->bi_links, blp)) { in bridge_rem_link()
3003 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_rem_link()
3004 blp = list_next(&bip->bi_links, blp)) { in bridge_rem_link()
3009 bmp = bip->bi_mac; in bridge_rem_link()
3020 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_rem_link()
3021 blp = list_next(&bip->bi_links, blp)) { in bridge_rem_link()
3030 bmp = bip->bi_mac; in bridge_rem_link()
3037 rw_exit(&bip->bi_rwlock); in bridge_rem_link()
3038 send_up_messages(bip, mlist); in bridge_rem_link()
3052 enter_link(bridge_inst_t *bip, datalink_id_t linkid) in enter_link() argument
3056 rw_enter(&bip->bi_rwlock, RW_READER); in enter_link()
3057 for (blp = list_head(&bip->bi_links); blp != NULL; in enter_link()
3058 blp = list_next(&bip->bi_links, blp)) { in enter_link()
3069 bridge_inst_t *bip; in bridge_ioctl() local
3099 rc = bridge_create(bnb->bnb_linkid, bnb->bnb_name, &bip, cr); in bridge_ioctl()
3103 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_ioctl()
3104 if (bip->bi_control != NULL) { in bridge_ioctl()
3105 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3106 bridge_unref(bip); in bridge_ioctl()
3109 atomic_inc_uint(&bip->bi_refs); in bridge_ioctl()
3110 bsp->bs_inst = bip; /* stream holds reference */ in bridge_ioctl()
3111 bip->bi_control = bsp; in bridge_ioctl()
3112 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3119 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3134 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3151 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3156 if ((blp = enter_link(bip, bss->bss_linkid)) == NULL) { in bridge_ioctl()
3162 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3169 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3176 if ((blp = enter_link(bip, bsv->bsv_linkid)) == NULL) { in bridge_ioctl()
3187 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3194 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3201 if ((blp = enter_link(bip, bve->bve_linkid)) == NULL) { in bridge_ioctl()
3221 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3231 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3236 rw_enter(&bip->bi_rwlock, RW_WRITER); in bridge_ioctl()
3241 for (blp = list_head(&bip->bi_links); blp != NULL; in bridge_ioctl()
3242 blp = list_next(&bip->bi_links, blp)) { in bridge_ioctl()
3249 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3255 bfnext = avl_first(&bip->bi_fwd); in bridge_ioctl()
3257 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_ioctl()
3274 avl_remove(&bip->bi_fwd, bfp); in bridge_ioctl()
3278 rw_exit(&bip->bi_rwlock); in bridge_ioctl()
3290 if ((bip = bsp->bs_inst) == NULL || in bridge_ioctl()
3294 bip->bi_tablemax = *(uint32_t *)mp->b_cont->b_rptr; in bridge_ioctl()