Lines Matching refs:bfp
412 bridge_fwd_t *bfp, match; in bridge_ioc_listfwd() local
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()
426 if (bfp == NULL) { in bridge_ioc_listfwd()
429 bcopy(bfp->bf_dest, blf->blf_dest, ETHERADDRL); in bridge_ioc_listfwd()
430 blf->blf_trill_nick = bfp->bf_trill_nick; in bridge_ioc_listfwd()
432 drv_hztousec(ddi_get_lbolt() - bfp->bf_lastheard) / 1000; in bridge_ioc_listfwd()
434 (bfp->bf_flags & BFF_LOCALADDR) != 0; in bridge_ioc_listfwd()
435 blf->blf_linkid = bfp->bf_links[0]->bl_linkid; in bridge_ioc_listfwd()
897 bridge_fwd_t *bfp; in fwd_alloc() local
899 bfp = kmem_zalloc(sizeof (*bfp) + (nlinks * sizeof (bridge_link_t *)), in fwd_alloc()
901 if (bfp != NULL) { in fwd_alloc()
902 bcopy(addr, bfp->bf_dest, ETHERADDRL); in fwd_alloc()
903 bfp->bf_lastheard = ddi_get_lbolt(); in fwd_alloc()
904 bfp->bf_maxlinks = nlinks; in fwd_alloc()
905 bfp->bf_links = (bridge_link_t **)(bfp + 1); in fwd_alloc()
906 bfp->bf_trill_nick = nick; in fwd_alloc()
908 return (bfp); in fwd_alloc()
914 bridge_fwd_t *bfp, *vbfp; in fwd_find() local
920 if ((bfp = avl_find(&bip->bi_fwd, &match, NULL)) != NULL) { in fwd_find()
921 if (bfp->bf_vlanid != vlanid && bfp->bf_vcnt > 0) { in fwd_find()
926 bfp = vbfp; in fwd_find()
928 atomic_inc_uint(&bfp->bf_refs); in fwd_find()
931 return (bfp); in fwd_find()
935 fwd_free(bridge_fwd_t *bfp) in fwd_free() argument
938 bridge_inst_t *bip = bfp->bf_links[0]->bl_inst; in fwd_free()
941 for (i = 0; i < bfp->bf_nlinks; i++) in fwd_free()
942 link_unref(bfp->bf_links[i]); in fwd_free()
943 kmem_free(bfp, in fwd_free()
944 sizeof (*bfp) + bfp->bf_maxlinks * sizeof (bridge_link_t *)); in fwd_free()
948 fwd_unref(bridge_fwd_t *bfp) in fwd_unref() argument
950 if (atomic_dec_uint_nv(&bfp->bf_refs) == 0) { in fwd_unref()
951 ASSERT(!(bfp->bf_flags & BFF_INTREE)); in fwd_unref()
952 fwd_free(bfp); in fwd_unref()
957 fwd_delete(bridge_fwd_t *bfp) in fwd_delete() argument
962 if (bfp->bf_flags & BFF_INTREE) { in fwd_delete()
963 ASSERT(bfp->bf_nlinks > 0); in fwd_delete()
964 bip = bfp->bf_links[0]->bl_inst; in fwd_delete()
967 if (bfp->bf_flags & BFF_INTREE) { in fwd_delete()
968 avl_remove(&bip->bi_fwd, bfp); in fwd_delete()
969 bfp->bf_flags &= ~BFF_INTREE; in fwd_delete()
970 if (bfp->bf_flags & BFF_VLANLOCAL) { in fwd_delete()
971 bfp->bf_flags &= ~BFF_VLANLOCAL; in fwd_delete()
972 bfpzero = avl_find(&bip->bi_fwd, bfp, NULL); in fwd_delete()
977 fwd_unref(bfp); /* no longer in avl tree */ in fwd_delete()
985 fwd_insert(bridge_inst_t *bip, bridge_fwd_t *bfp) in fwd_insert() argument
993 avl_find(&bip->bi_fwd, bfp, &idx) == NULL) { in fwd_insert()
994 avl_insert(&bip->bi_fwd, bfp, idx); in fwd_insert()
995 bfp->bf_flags |= BFF_INTREE; in fwd_insert()
996 atomic_inc_uint(&bfp->bf_refs); /* avl entry */ in fwd_insert()
1010 bridge_fwd_t *bfp, *bfnew; in fwd_update_local() local
1026 if ((bfp = avl_find(&bip->bi_fwd, &match, NULL)) != NULL) { in fwd_update_local()
1032 for (i = 0; i < bfp->bf_nlinks; i++) { in fwd_update_local()
1033 if (bfp->bf_links[i] == blp) { in fwd_update_local()
1040 bfp->bf_nlinks--; in fwd_update_local()
1041 for (; i < bfp->bf_nlinks; i++) in fwd_update_local()
1042 bfp->bf_links[i] = bfp->bf_links[i + 1]; in fwd_update_local()
1048 if (bfp->bf_nlinks == 0) { in fwd_update_local()
1049 avl_remove(&bip->bi_fwd, bfp); in fwd_update_local()
1050 bfp->bf_flags &= ~BFF_INTREE; in fwd_update_local()
1052 bfp = NULL; in fwd_update_local()
1056 if (bfp != NULL) in fwd_update_local()
1057 fwd_unref(bfp); /* no longer in avl tree */ in fwd_update_local()
1066 bfp = NULL; in fwd_update_local()
1073 if ((bfp = avl_find(&bip->bi_fwd, &match, &idx)) == NULL) { in fwd_update_local()
1077 } else if (bfp->bf_nlinks < bfp->bf_maxlinks) { in fwd_update_local()
1079 bfnew = bfp; in fwd_update_local()
1081 bfnew = fwd_alloc(newaddr, bfp->bf_nlinks + 1, in fwd_update_local()
1085 avl_remove(&bip->bi_fwd, bfp); in fwd_update_local()
1086 bfp->bf_flags &= ~BFF_INTREE; in fwd_update_local()
1087 bfnew->bf_nlinks = bfp->bf_nlinks; in fwd_update_local()
1088 bcopy(bfp->bf_links, bfnew->bf_links, in fwd_update_local()
1089 bfp->bf_nlinks * sizeof (bfp)); in fwd_update_local()
1102 if (bfnew != bfp) { in fwd_update_local()
1117 if (bfnew != NULL && bfp != NULL && bfnew != bfp) in fwd_update_local()
1118 fwd_unref(bfp); in fwd_update_local()
1147 bridge_fwd_t *bfp, *bfnext; in link_shutdown() local
1180 while ((bfp = bfnext) != NULL) { in link_shutdown()
1181 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in link_shutdown()
1182 for (i = 0; i < bfp->bf_nlinks; i++) { in link_shutdown()
1183 if (bfp->bf_links[i] == blp) in link_shutdown()
1186 if (i >= bfp->bf_nlinks) in link_shutdown()
1188 if (bfp->bf_nlinks > 1) { in link_shutdown()
1191 bfp->bf_nlinks--; in link_shutdown()
1192 for (; i < bfp->bf_nlinks; i++) in link_shutdown()
1193 bfp->bf_links[i] = bfp->bf_links[i + 1]; in link_shutdown()
1195 ASSERT(bfp->bf_flags & BFF_INTREE); in link_shutdown()
1196 avl_remove(&bip->bi_fwd, bfp); in link_shutdown()
1197 bfp->bf_flags &= ~BFF_INTREE; in link_shutdown()
1198 avl_add(&fwd_scavenge, bfp); in link_shutdown()
1203 while ((bfp = bfnext) != NULL) { in link_shutdown()
1204 bfnext = AVL_NEXT(&fwd_scavenge, bfp); in link_shutdown()
1205 avl_remove(&fwd_scavenge, bfp); in link_shutdown()
1206 fwd_unref(bfp); in link_shutdown()
1226 bridge_fwd_t *bfp; in shutdown_inst() local
1255 while ((bfp = avl_first(&bip->bi_fwd)) != NULL) { in shutdown_inst()
1256 atomic_inc_uint(&bfp->bf_refs); in shutdown_inst()
1258 fwd_delete(bfp); in shutdown_inst()
1259 fwd_unref(bfp); in shutdown_inst()
1404 bridge_fwd_t *bfp, *bfnext; in bridge_timer() local
1432 while ((bfp = bfnext) != NULL) { in bridge_timer()
1433 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_timer()
1434 if (!(bfp->bf_flags & BFF_LOCALADDR) && in bridge_timer()
1435 (ddi_get_lbolt() - bfp->bf_lastheard) > age_limit) { in bridge_timer()
1436 ASSERT(bfp->bf_flags & BFF_INTREE); in bridge_timer()
1437 avl_remove(&bip->bi_fwd, bfp); in bridge_timer()
1438 bfp->bf_flags &= ~BFF_INTREE; in bridge_timer()
1439 avl_add(&fwd_scavenge, bfp); in bridge_timer()
1452 while ((bfp = bfnext) != NULL) { in bridge_timer()
1453 bfnext = AVL_NEXT(&fwd_scavenge, bfp); in bridge_timer()
1454 avl_remove(&fwd_scavenge, bfp); in bridge_timer()
1456 fwd_unref(bfp); /* drop tree reference */ in bridge_timer()
1573 bridge_fwd_t *bfp, *bfpnew; in bridge_learn() local
1586 if ((bfp = fwd_find(bip, saddr, vlanid)) != NULL) { in bridge_learn()
1594 if (bfp->bf_flags & BFF_LOCALADDR) { in bridge_learn()
1595 fwd_unref(bfp); in bridge_learn()
1604 if (bfp->bf_trill_nick == ingress_nick) { in bridge_learn()
1605 for (i = 0; i < bfp->bf_nlinks; i++) { in bridge_learn()
1606 if (bfp->bf_links[i] == blp) { in bridge_learn()
1607 bfp->bf_lastheard = ddi_get_lbolt(); in bridge_learn()
1608 fwd_unref(bfp); in bridge_learn()
1625 if (bfp != NULL) { in bridge_learn()
1626 if (bfp->bf_vcnt == 0) in bridge_learn()
1627 fwd_delete(bfp); in bridge_learn()
1628 fwd_unref(bfp); in bridge_learn()
1636 if (bfp != NULL) in bridge_learn()
1637 fwd_unref(bfp); in bridge_learn()
1642 if (bfp != NULL) { in bridge_learn()
1649 if (bfp->bf_vlanid == vlanid) { in bridge_learn()
1651 bfpnew->bf_vcnt = bfp->bf_vcnt; in bridge_learn()
1657 fwd_delete(bfp); in bridge_learn()
1661 bfp->bf_vcnt++; in bridge_learn()
1664 fwd_unref(bfp); in bridge_learn()
1867 bridge_fwd_t *bfp; in bridge_forward() local
1887 if ((bfp = fwd_find(bip, daddr, vlanid)) != NULL) { in bridge_forward()
1894 if (bfp->bf_trill_nick != RBRIDGE_NICKNAME_NONE) { in bridge_forward()
1914 fwd_unref(bfp); in bridge_forward()
1918 bfp->bf_trill_nick); in bridge_forward()
1929 fwd_delete(bfp); in bridge_forward()
1931 fwd_unref(bfp); in bridge_forward()
1936 for (i = 0; i < bfp->bf_nlinks; i++) { in bridge_forward()
1937 blpsend = bfp->bf_links[i]; in bridge_forward()
1944 while (i < bfp->bf_nlinks) { in bridge_forward()
1945 blpsend = bfp->bf_links[i]; in bridge_forward()
1946 for (i++; i < bfp->bf_nlinks; i++) { in bridge_forward()
1947 blpnext = bfp->bf_links[i]; in bridge_forward()
1953 if (i == bfp->bf_nlinks && !selfseen) { in bridge_forward()
1976 if (bfp->bf_flags & BFF_LOCALADDR) { in bridge_forward()
1991 if (mp != NULL && is_xmit && (bfp->bf_flags & BFF_LOCALADDR)) { in bridge_forward()
1995 fwd_unref(bfp); in bridge_forward()
2641 bridge_fwd_t *bfp, *bfnext; in bridge_trill_flush() local
2651 while ((bfp = bfnext) != NULL) { in bridge_trill_flush()
2652 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_trill_flush()
2653 if (bfp->bf_flags & BFF_LOCALADDR) in bridge_trill_flush()
2657 if (bfp->bf_trill_nick == RBRIDGE_NICKNAME_NONE) in bridge_trill_flush()
2660 if (bfp->bf_trill_nick != RBRIDGE_NICKNAME_NONE) in bridge_trill_flush()
2662 for (i = 0; i < bfp->bf_nlinks; i++) { in bridge_trill_flush()
2663 if (bfp->bf_links[i] == blp) in bridge_trill_flush()
2666 if (i >= bfp->bf_nlinks) in bridge_trill_flush()
2669 ASSERT(bfp->bf_flags & BFF_INTREE); in bridge_trill_flush()
2670 avl_remove(&bip->bi_fwd, bfp); in bridge_trill_flush()
2671 bfp->bf_flags &= ~BFF_INTREE; in bridge_trill_flush()
2672 avl_add(&fwd_scavenge, bfp); in bridge_trill_flush()
2676 while ((bfp = bfnext) != NULL) { in bridge_trill_flush()
2677 bfnext = AVL_NEXT(&fwd_scavenge, bfp); in bridge_trill_flush()
2678 avl_remove(&fwd_scavenge, bfp); in bridge_trill_flush()
2679 fwd_unref(bfp); in bridge_trill_flush()
3227 bridge_fwd_t *bfp, *bfnext; in bridge_ioctl() local
3256 while ((bfp = bfnext) != NULL) { in bridge_ioctl()
3257 bfnext = AVL_NEXT(&bip->bi_fwd, bfp); in bridge_ioctl()
3258 if (bfp->bf_flags & BFF_LOCALADDR) in bridge_ioctl()
3261 for (i = 0; i < bfp->bf_maxlinks; i++) { in bridge_ioctl()
3262 if (bfp->bf_links[i] == blp) in bridge_ioctl()
3270 if ((i < bfp->bf_maxlinks) == bff->bff_exclude) in bridge_ioctl()
3273 ASSERT(bfp->bf_flags & BFF_INTREE); in bridge_ioctl()
3274 avl_remove(&bip->bi_fwd, bfp); in bridge_ioctl()
3275 bfp->bf_flags &= ~BFF_INTREE; in bridge_ioctl()
3276 avl_add(&fwd_scavenge, bfp); in bridge_ioctl()
3280 while ((bfp = bfnext) != NULL) { in bridge_ioctl()
3281 bfnext = AVL_NEXT(&fwd_scavenge, bfp); in bridge_ioctl()
3282 avl_remove(&fwd_scavenge, bfp); in bridge_ioctl()
3283 fwd_unref(bfp); /* drop tree reference */ in bridge_ioctl()