Lines Matching defs:blp

154 #define	KLINCR(vn)	KLPINCR(blp, vn)
257 link_sdu_fail(bridge_link_t *blp, boolean_t failed, mblk_t **mlist)
266 if (blp->bl_flags & BLF_SDUFAIL)
268 blp->bl_flags |= BLF_SDUFAIL;
270 if (!(blp->bl_flags & BLF_SDUFAIL))
272 blp->bl_flags &= ~BLF_SDUFAIL;
280 bip = blp->bl_inst;
282 if (blp->bl_linkstate != LINK_STATE_DOWN) {
285 if (blp != blcmp &&
304 if (bmp->bm_linkstate != blp->bl_linkstate)
305 mac_link_redo(blp->bl_mh, blp->bl_linkstate);
307 mac_link_redo(blp->bl_mh, bmp->bm_linkstate);
311 if ((mp = blp->bl_lfailmp) == NULL &&
316 blp->bl_lfailmp = allocb(sizeof (bridge_ctl_t), BPRI_MED);
319 if (blp->bl_lfailmp == NULL && !failed) {
320 blp->bl_lfailmp = mp;
326 bcp->bc_linkid = blp->bl_linkid;
448 bridge_link_t *blp;
468 for (blp = list_head(&bip->bi_links); blp != NULL;
469 blp = list_next(&bip->bi_links, blp)) {
470 if (blp->bl_flags & BLF_DELETED)
472 if (blp->bl_maxsdu == maxsdu)
473 link_sdu_fail(blp, B_FALSE, &mlist);
474 else if (blp->bl_maxsdu == bmp->bm_maxsdu)
475 link_sdu_fail(blp, B_TRUE, &mlist);
860 link_free(bridge_link_t *blp)
862 bridge_inst_t *bip = blp->bl_inst;
864 ASSERT(!(blp->bl_flags & BLF_FREED));
865 blp->bl_flags |= BLF_FREED;
866 if (blp->bl_ksp != NULL)
867 kstat_delete(blp->bl_ksp);
868 if (blp->bl_lfailmp != NULL)
869 freeb(blp->bl_lfailmp);
870 cv_destroy(&blp->bl_trillwait);
871 mutex_destroy(&blp->bl_trilllock);
872 kmem_free(blp, sizeof (*blp));
878 link_unref(bridge_link_t *blp)
880 if (atomic_dec_uint_nv(&blp->bl_refs) == 0) {
881 bridge_inst_t *bip = blp->bl_inst;
883 ASSERT(blp->bl_flags & BLF_DELETED);
885 if (blp->bl_flags & BLF_LINK_ADDED)
886 list_remove(&bip->bi_links, blp);
890 link_free(blp);
1006 fwd_update_local(bridge_link_t *blp, const uint8_t *oldaddr,
1009 bridge_inst_t *bip = blp->bl_inst;
1033 if (bfp->bf_links[i] == blp) {
1096 bfnew->bf_links[bfnew->bf_nlinks++] = blp;
1100 atomic_inc_uint(&blp->bl_refs); /* bf_links entry */
1122 link_unref(blp);
1126 bridge_new_unicst(bridge_link_t *blp)
1130 mac_unicast_primary_get(blp->bl_mh, new_mac);
1131 fwd_update_local(blp, blp->bl_local_mac, new_mac);
1132 bcopy(new_mac, blp->bl_local_mac, ETHERADDRL);
1144 bridge_link_t *blp = arg;
1145 mac_handle_t mh = blp->bl_mh;
1156 if (blp->bl_trilldata != NULL)
1157 trill_lndstr_fn(blp->bl_trilldata, blp);
1159 if (blp->bl_flags & BLF_PROM_ADDED)
1160 (void) mac_promisc_remove(blp->bl_mphp);
1162 if (blp->bl_flags & BLF_SET_BRIDGE)
1163 mac_bridge_clear(mh, (mac_handle_t)blp);
1165 if (blp->bl_flags & BLF_MARGIN_ADDED) {
1166 (void) mac_notify_remove(blp->bl_mnh, B_TRUE);
1167 (void) mac_margin_remove(mh, blp->bl_margin);
1171 mac_link_redo(blp->bl_mh,
1172 mac_stat_get(blp->bl_mh, MAC_STAT_LOWLINK_STATE));
1177 bip = blp->bl_inst;
1183 if (bfp->bf_links[i] == blp)
1190 link_unref(blp);
1210 if (blp->bl_flags & BLF_CLIENT_OPEN)
1211 mac_client_close(blp->bl_mch, 0);
1219 link_unref(blp);
1225 bridge_link_t *blp, *blnext;
1247 while ((blp = blnext) != NULL) {
1248 blnext = list_next(&bip->bi_links, blp);
1249 if (!(blp->bl_flags & BLF_DELETED)) {
1250 blp->bl_flags |= BLF_DELETED;
1252 blp, DDI_SLEEP);
1295 bridge_link_t *blp;
1302 for (blp = list_head(&bip->bi_links); blp != NULL;
1303 blp = list_next(&bip->bi_links, blp)) {
1304 ASSERT(blp->bl_trilldata == NULL);
1357 bridge_link_t *blp;
1361 for (blp = list_head(&bip->bi_links); blp != NULL;
1362 blp = list_next(&bip->bi_links, blp)) {
1363 if (!(blp->bl_flags & BLF_DELETED) &&
1364 blp->bl_linkid == linkid && blp->bl_trilldata == NULL) {
1365 blp->bl_trilldata = ptr;
1366 blp->bl_flags &= ~BLF_TRILLACTIVE;
1367 (void) memset(blp->bl_afs, 0, sizeof (blp->bl_afs));
1368 atomic_inc_uint(&blp->bl_refs);
1373 return (blp);
1377 bridge_trill_lnunref(bridge_link_t *blp)
1379 mutex_enter(&blp->bl_trilllock);
1380 ASSERT(blp->bl_trilldata != NULL);
1381 blp->bl_trilldata = NULL;
1382 blp->bl_flags &= ~BLF_TRILLACTIVE;
1383 while (blp->bl_trillthreads > 0)
1384 cv_wait(&blp->bl_trillwait, &blp->bl_trilllock);
1385 mutex_exit(&blp->bl_trilllock);
1386 (void) memset(blp->bl_afs, 0xff, sizeof (blp->bl_afs));
1387 link_unref(blp);
1406 bridge_link_t *blp;
1442 for (blp = list_head(&bip->bi_links); blp != NULL;
1443 blp = list_next(&bip->bi_links, blp)) {
1444 ldecay = mac_get_ldecay(blp->bl_mh);
1445 if (ldecay >= blp->bl_learns)
1446 blp->bl_learns = 0;
1448 atomic_add_int(&blp->bl_learns, -(int)ldecay);
1569 bridge_learn(bridge_link_t *blp, const uint8_t *saddr, uint16_t ingress_nick,
1572 bridge_inst_t *bip = blp->bl_inst;
1606 if (bfp->bf_links[i] == blp) {
1624 if (blp->bl_learns >= mac_get_llimit(blp->bl_mh)) {
1633 atomic_inc_uint(&blp->bl_learns);
1654 atomic_inc_uint(&blp->bl_learns);
1666 bfpnew->bf_links[0] = blp;
1668 atomic_inc_uint(&blp->bl_refs); /* bf_links entry */
1841 bridge_can_send(bridge_link_t *blp, uint16_t vlanid)
1844 if (blp->bl_flags & BLF_DELETED)
1846 if (blp->bl_trilldata == NULL && blp->bl_state != BLS_FORWARDING)
1848 return (BRIDGE_VLAN_ISSET(blp, vlanid) && BRIDGE_AF_ISSET(blp, vlanid));
1861 bridge_forward(bridge_link_t *blp, mac_header_info_t *hdr_info, mblk_t *mp,
1865 bridge_inst_t *bip = blp->bl_inst;
1903 mutex_enter(&blp->bl_trilllock);
1904 if ((tdp = blp->bl_trilldata) != NULL) {
1905 blp->bl_trillthreads++;
1906 mutex_exit(&blp->bl_trilllock);
1917 trill_encap_fn(tdp, blp, hdr_info, mp,
1919 mutex_enter(&blp->bl_trilllock);
1920 if (--blp->bl_trillthreads == 0 &&
1921 blp->bl_trilldata == NULL)
1922 cv_broadcast(&blp->bl_trillwait);
1924 mutex_exit(&blp->bl_trilllock);
1938 if (blpsend == blp)
1948 if (blpnext == blp)
1992 mac_rx_common(blp->bl_mh, NULL, mp);
2007 if (!from_trill && blp->bl_trilldata != NULL) {
2008 mutex_enter(&blp->bl_trilllock);
2009 if ((tdp = blp->bl_trilldata) != NULL) {
2010 blp->bl_trillthreads++;
2011 mutex_exit(&blp->bl_trilllock);
2024 trill_encap_fn(tdp, blp,
2029 mutex_enter(&blp->bl_trilllock);
2030 if (--blp->bl_trillthreads == 0 &&
2031 blp->bl_trilldata == NULL)
2032 cv_broadcast(&blp->bl_trillwait);
2034 mutex_exit(&blp->bl_trilllock);
2043 if (blpnext == blp)
2056 if (blpnext == blp)
2109 bridge_get_vlan(bridge_link_t *blp, mac_header_info_t *hdr_info, mblk_t *mp,
2148 if (vlanid == VLAN_ID_NONE || vlanid == blp->bl_pvid)
2150 if (!BRIDGE_VLAN_ISSET(blp, vlanid))
2159 if ((vlanid = blp->bl_pvid) == VLAN_ID_NONE)
2174 bridge_link_t *blp = arg;
2178 bridge_new_unicst(blp);
2183 bridge_inst_t *bip = blp->bl_inst;
2188 mac_sdu_get(blp->bl_mh, NULL, &maxsdu);
2190 if (list_prev(&bip->bi_links, blp) == NULL &&
2191 list_next(&bip->bi_links, blp) == NULL) {
2195 blp->bl_maxsdu = maxsdu;
2197 link_sdu_fail(blp, B_TRUE, &mlist);
2216 bridge_link_t *blp = (bridge_link_t *)mh;
2217 bridge_inst_t *bip = blp->bl_inst;
2230 if (blp->bl_trilldata != NULL) {
2235 mutex_enter(&blp->bl_trilllock);
2236 if ((tdp = blp->bl_trilldata) != NULL) {
2237 blp->bl_trillthreads++;
2238 mutex_exit(&blp->bl_trilllock);
2250 if (mac_header_info(blp->bl_mh, mp,
2298 mac_trill_snoop(blp->bl_mh, mp);
2320 trill_recv_fn(tdp, blp, rsrc, mp, &hdr_info);
2323 mutex_enter(&blp->bl_trilllock);
2324 if (--blp->bl_trillthreads == 0 &&
2325 blp->bl_trilldata == NULL)
2326 cv_broadcast(&blp->bl_trillwait);
2328 mutex_exit(&blp->bl_trilllock);
2338 if (!(blp->bl_flags & BLF_TRILLACTIVE) ||
2339 (blp->bl_flags & BLF_SDUFAIL)) {
2340 mac_rx_common(blp->bl_mh, rsrc, mpnext);
2349 if (blp->bl_state == BLS_BLOCKLISTEN) {
2350 mac_rx_common(blp->bl_mh, rsrc, mpnext);
2360 if (!trillmode && blp->bl_state == BLS_FORWARDING &&
2381 if (mac_header_info(blp->bl_mh, mp, &hdr_info) != 0 ||
2385 mac_rx_common(blp->bl_mh, rsrc, mp);
2392 if (!bridge_get_vlan(blp, &hdr_info, mp, &vlanid, &tci) ||
2393 !BRIDGE_AF_ISSET(blp, vlanid)) {
2394 mac_rx_common(blp->bl_mh, rsrc, mp);
2405 mac_rx_common(blp->bl_mh, rsrc, mp);
2424 bridge_learn(blp, hdr_info.mhi_saddr, RBRIDGE_NICKNAME_NONE,
2431 if (trillmode || blp->bl_state == BLS_FORWARDING) {
2432 mp = bridge_forward(blp, &hdr_info, mp, vlanid, tci,
2436 mac_rx_common(blp->bl_mh, rsrc, mp);
2445 bridge_link_t *blp = (bridge_link_t *)mh;
2446 bridge_inst_t *bip = blp->bl_inst;
2453 trillmode = blp->bl_trilldata != NULL;
2460 if ((!trillmode && blp->bl_state == BLS_BLOCKLISTEN) ||
2462 (!(blp->bl_flags & BLF_TRILLACTIVE) ||
2463 (blp->bl_flags & BLF_SDUFAIL)))) {
2466 MAC_RING_TX(blp->bl_mh, rh, mpnext, mp);
2474 if (!trillmode && blp->bl_state == BLS_FORWARDING &&
2484 if (mac_header_info(blp->bl_mh, mp, &hdr_info) != 0) {
2492 if (!bridge_get_vlan(blp, &hdr_info, mp, &vlanid, &tci) ||
2493 !BRIDGE_AF_ISSET(blp, vlanid)) {
2515 bridge_learn(blp, hdr_info.mhi_saddr, RBRIDGE_NICKNAME_NONE,
2519 if (trillmode || blp->bl_state == BLS_FORWARDING) {
2520 mp = bridge_forward(blp, &hdr_info, mp, vlanid, tci,
2524 MAC_RING_TX(blp->bl_mh, rh, mp, mp);
2552 bridge_trill_decaps(bridge_link_t *blp, mblk_t *mp, uint16_t ingress_nick)
2556 bridge_inst_t *bip = blp->bl_inst; /* used by macros */
2559 if (mac_header_info(blp->bl_mh, mp, &hdr_info) != 0) {
2575 blp, mblk_t *, mp, uint16_t, ingress_nick);
2581 bridge_learn(blp, hdr_info.mhi_saddr, ingress_nick, vlanid);
2584 mp = bridge_forward(blp, &hdr_info, mp, vlanid, tci, B_TRUE, B_TRUE);
2586 if (bridge_can_send(blp, vlanid)) {
2589 mac_rx_common(blp->bl_mh, NULL, mpcopy);
2590 MAC_RING_TX(blp->bl_mh, NULL, mp, mp);
2606 bridge_trill_output(bridge_link_t *blp, mblk_t *mp)
2608 bridge_inst_t *bip = blp->bl_inst; /* used by macros */
2610 mac_trill_snoop(blp->bl_mh, mp);
2611 MAC_RING_TX(blp->bl_mh, NULL, mp, mp);
2625 bridge_trill_setvlans(bridge_link_t *blp, const uint8_t *arr)
2631 if ((blp->bl_afs[i] = arr[i]) != 0)
2634 blp->bl_flags = (blp->bl_flags & ~BLF_TRILLACTIVE) | newflags;
2638 bridge_trill_flush(bridge_link_t *blp, uint16_t vlan, boolean_t dotrill)
2640 bridge_inst_t *bip = blp->bl_inst;
2663 if (bfp->bf_links[i] == blp)
2692 bridge_link_t *blp = (bridge_link_t *)mh;
2695 atomic_inc_uint(&blp->bl_refs);
2697 link_unref(blp);
2712 bridge_link_t *blp = (bridge_link_t *)mh;
2717 if (newls != LINK_STATE_DOWN && blp->bl_linkstate != LINK_STATE_DOWN ||
2718 (blp->bl_flags & (BLF_DELETED|BLF_SDUFAIL))) {
2719 blp->bl_linkstate = newls;
2728 bip = blp->bl_inst;
2732 if (blcmp != blp &&
2744 blp->bl_linkstate = newls;
2746 } else if (blp->bl_linkstate != newls) {
2752 blp->bl_linkstate = newls;
2755 if (blcmp != blp && !(blcmp->bl_flags & BLF_DELETED))
2778 bridge_link_t *blp = NULL, *blpt;
2854 if ((blp = kmem_zalloc(sizeof (*blp), KM_NOSLEEP)) == NULL) {
2858 blp->bl_lfailmp = allocb(sizeof (bridge_ctl_t), BPRI_MED);
2859 if (blp->bl_lfailmp == NULL) {
2860 kmem_free(blp, sizeof (*blp));
2861 blp = NULL;
2866 blp->bl_refs = 1;
2868 blp->bl_inst = bip;
2869 blp->bl_mh = mh;
2870 blp->bl_linkid = linkid;
2871 blp->bl_maxsdu = maxsdu;
2872 cv_init(&blp->bl_trillwait, NULL, CV_DRIVER, NULL);
2873 mutex_init(&blp->bl_trilllock, NULL, MUTEX_DRIVER, NULL);
2874 (void) memset(blp->bl_afs, 0xff, sizeof (blp->bl_afs));
2876 err = mac_client_open(mh, &blp->bl_mch, kstatname, 0);
2879 blp->bl_flags |= BLF_CLIENT_OPEN;
2881 err = mac_margin_add(mh, &blp->bl_margin, B_TRUE);
2884 blp->bl_flags |= BLF_MARGIN_ADDED;
2886 blp->bl_mnh = mac_notify_add(mh, bridge_notify_cb, blp);
2889 err = mac_bridge_set(mh, (mac_handle_t)blp);
2892 blp->bl_flags |= BLF_SET_BRIDGE;
2894 err = mac_promisc_add(blp->bl_mch, MAC_CLIENT_PROMISC_ALL, NULL,
2895 blp, &blp->bl_mphp, MAC_PROMISC_FLAGS_NO_TX_LOOP);
2898 blp->bl_flags |= BLF_PROM_ADDED;
2900 bridge_new_unicst(blp);
2902 blp->bl_ksp = kstat_setup((kstat_named_t *)&blp->bl_kstats,
2914 list_insert_tail(&bip->bi_links, blp);
2915 blp->bl_flags |= BLF_LINK_ADDED;
2923 link_sdu_fail(blp, B_TRUE, &mlist);
2933 blp->bl_linkstate = LINK_STATE_DOWN;
2945 if (blp == NULL) {
2949 link_shutdown(blp);
2963 bridge_link_t *blp, *blsave;
2979 for (blp = list_head(&bip->bi_links); blp != NULL;
2980 blp = list_next(&bip->bi_links, blp)) {
2981 if (blp->bl_linkid == linkid &&
2982 !(blp->bl_flags & BLF_DELETED)) {
2983 blp->bl_flags |= BLF_DELETED;
2985 blp, DDI_SLEEP);
2995 if (blp != NULL && blp->bl_linkstate != LINK_STATE_DOWN) {
2996 for (blp = list_head(&bip->bi_links); blp != NULL;
2997 blp = list_next(&bip->bi_links, blp)) {
2998 if (blp->bl_linkstate != LINK_STATE_DOWN &&
2999 !(blp->bl_flags & (BLF_DELETED|BLF_SDUFAIL)))
3002 if (blp == NULL) {
3003 for (blp = list_head(&bip->bi_links); blp != NULL;
3004 blp = list_next(&bip->bi_links, blp)) {
3005 if (!(blp->bl_flags & BLF_DELETED))
3006 mac_link_redo(blp->bl_mh,
3020 for (blp = list_head(&bip->bi_links); blp != NULL;
3021 blp = list_next(&bip->bi_links, blp)) {
3022 if (!(blp->bl_flags & BLF_DELETED)) {
3024 blsave = blp;
3031 if (blsave != NULL && blp == NULL &&
3054 bridge_link_t *blp;
3057 for (blp = list_head(&bip->bi_links); blp != NULL;
3058 blp = list_next(&bip->bi_links, blp)) {
3059 if (blp->bl_linkid == linkid && !(blp->bl_flags & BLF_DELETED))
3062 return (blp);
3073 bridge_link_t *blp;
3156 if ((blp = enter_link(bip, bss->bss_linkid)) == NULL) {
3160 blp->bl_state = bss->bss_state;
3176 if ((blp = enter_link(bip, bsv->bsv_linkid)) == NULL) {
3178 } else if (blp->bl_pvid == bsv->bsv_vlan) {
3182 BRIDGE_VLAN_CLR(blp, blp->bl_pvid);
3183 blp->bl_pvid = bsv->bsv_vlan;
3184 if (blp->bl_pvid != 0)
3185 BRIDGE_VLAN_SET(blp, blp->bl_pvid);
3201 if ((blp = enter_link(bip, bve->bve_linkid)) == NULL) {
3207 (void) memset(blp->bl_vlans,
3209 sizeof (blp->bl_vlans));
3210 BRIDGE_VLAN_CLR(blp, 0);
3211 if (blp->bl_pvid != 0)
3212 BRIDGE_VLAN_SET(blp, blp->bl_pvid);
3213 } else if (bve->bve_vlan == blp->bl_pvid) {
3216 BRIDGE_VLAN_SET(blp, bve->bve_vlan);
3218 BRIDGE_VLAN_CLR(blp, bve->bve_vlan);
3239 blp = NULL;
3241 for (blp = list_head(&bip->bi_links); blp != NULL;
3242 blp = list_next(&bip->bi_links, blp)) {
3243 if (blp->bl_linkid == bff->bff_linkid &&
3244 !(blp->bl_flags & BLF_DELETED))
3247 if (blp == NULL) {
3260 if (blp != NULL) {
3262 if (bfp->bf_links[i] == blp)