Lines Matching defs:mip

269 mac_vnic_lower(mac_impl_t *mip)
274 VERIFY(i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_VNIC, &cap));
284 mac_vnic_secondary_update(mac_impl_t *mip)
288 VERIFY(i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_VNIC, &cap));
297 mac_primary_client_handle(mac_impl_t *mip)
301 if (mip->mi_state_flags & MIS_IS_VNIC)
302 return (mac_vnic_lower(mip));
304 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
306 for (mcip = mip->mi_clients_list; mcip != NULL;
320 mac_impl_t *mip;
326 if ((err = mac_hold(macname, &mip)) != 0)
340 e_ddi_hold_devi(mip->mi_dip);
342 if (!(mip->mi_callbacks->mc_callbacks & MC_OPEN)) {
343 *mhp = (mac_handle_t)mip;
351 i_mac_perim_enter(mip);
352 mip->mi_oref++;
353 if (mip->mi_oref != 1 || ((err = mip->mi_open(mip->mi_driver)) == 0)) {
354 *mhp = (mac_handle_t)mip;
355 i_mac_perim_exit(mip);
358 mip->mi_oref--;
359 ddi_release_devi(mip->mi_dip);
360 mac_rele(mip);
361 i_mac_perim_exit(mip);
405 mac_impl_t *mip = (mac_impl_t *)mh;
407 i_mac_perim_enter(mip);
412 if (mip->mi_callbacks->mc_callbacks & MC_OPEN) {
413 ASSERT(mip->mi_oref != 0);
414 if (--mip->mi_oref == 0) {
415 if ((mip->mi_callbacks->mc_callbacks & MC_CLOSE))
416 mip->mi_close(mip->mi_driver);
419 i_mac_perim_exit(mip);
420 ddi_release_devi(mip->mi_dip);
421 mac_rele(mip);
528 mac_impl_t *mip = mcip->mci_mip;
531 nic_speed = mac_stat_get((mac_handle_t)mip, MAC_STAT_IFSPEED);
556 mac_impl_t *mip = mcip->mci_mip;
571 for (mci_list = mip->mi_clients_list; mci_list != NULL;
587 return (mac_stat_get((mac_handle_t)mip, MAC_STAT_LINK_STATE));
612 mac_impl_t *mip = mcip->mci_mip;
633 val = mac_stat_get((mac_handle_t)mip, MAC_STAT_PROMISC);
636 val = mac_stat_get((mac_handle_t)mip, MAC_STAT_LOWLINK_STATE);
695 val = mac_driver_stat_default(mip, stat);
708 mac_impl_t *mip = (mac_impl_t *)mh;
728 if (stat < MAC_STAT_MIN && !(mip->mi_state_flags & MIS_IS_VNIC)) {
732 return (mip->mi_linkstate);
734 return (mip->mi_linkstate == LINK_STATE_UP);
736 return (mip->mi_devpromisc != 0);
738 return (mip->mi_lowlinkstate);
747 ret = mip->mi_getstat(mip->mi_driver, stat, &val);
753 val = mac_driver_stat_default(mip, stat);
799 mac_impl_t *mip = (mac_impl_t *)mh;
805 if ((len != mip->mi_type->mt_addr_length) ||
806 (mip->mi_type->mt_ops.mtops_unicst_verify(addr,
807 mip->mi_pdata)) != 0) {
817 mac_impl_t *mip = (mac_impl_t *)mh;
820 *min_sdu = mip->mi_sdu_min;
822 *max_sdu = mip->mi_sdu_max;
829 mac_impl_t *mip = (mac_impl_t *)mh;
832 *min_sdu = mip->mi_sdu_min;
834 *max_sdu = mip->mi_sdu_max;
836 *multicast_sdu = mip->mi_sdu_multicast;
846 mac_impl_t *mip = mcip->mci_mip;
851 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
887 mac_unicast_update_clients(mac_impl_t *mip, mac_address_t *map)
891 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
897 for (mcip = mip->mi_clients_list; mcip != NULL;
927 mac_impl_t *mip = mcip->mci_mip;
931 ASSERT(!(mip->mi_state_flags & MIS_IS_VNIC));
935 i_mac_perim_enter(mip);
941 if (bcmp(map->ma_addr, mip->mi_addr, map->ma_len) == 0) {
942 i_mac_perim_exit(mip);
950 if (bcmp(addr, mip->mi_addr, map->ma_len) == 0) {
951 i_mac_perim_exit(mip);
960 i_mac_perim_exit(mip);
968 if (mac_find_macaddr(mip, (uint8_t *)addr) != NULL) {
969 i_mac_perim_exit(mip);
979 i_mac_perim_exit(mip);
988 i_mac_perim_exit(mip);
1008 mac_impl_t *mip = (mac_impl_t *)mh;
1013 if (!mac_unicst_verify(mh, addr, mip->mi_type->mt_addr_length))
1016 i_mac_perim_enter(mip);
1022 if (bcmp(addr, mip->mi_addr, mip->mi_type->mt_addr_length) == 0) {
1023 i_mac_perim_exit(mip);
1027 if (mac_find_macaddr(mip, (uint8_t *)addr) != 0) {
1028 i_mac_perim_exit(mip);
1032 map = mac_find_macaddr(mip, mip->mi_addr);
1038 if (mip->mi_state_flags & MIS_IS_AGGR) {
1049 err = aggr_cap.mca_unicst(mip->mi_driver, addr);
1057 i_mac_perim_exit(mip);
1061 mac_unicast_update_clients(mip, map);
1066 bcopy(addr, mip->mi_addr, mip->mi_type->mt_addr_length);
1068 i_mac_perim_exit(mip);
1071 i_mac_notify(mip, MAC_NOTE_UNICST);
1082 mac_impl_t *mip = (mac_impl_t *)mh;
1084 rw_enter(&mip->mi_rw_lock, RW_READER);
1085 bcopy(mip->mi_addr, addr, mip->mi_type->mt_addr_length);
1086 rw_exit(&mip->mi_rw_lock);
1115 mac_impl_t *mip = (mac_impl_t *)mh;
1129 rw_enter(&mip->mi_rw_lock, RW_READER);
1130 for (cur_client = mip->mi_clients_list; cur_client != NULL;
1133 (mip->mi_state_flags & MIS_IS_VNIC)) {
1134 rw_exit(&mip->mi_rw_lock);
1144 rw_exit(&mip->mi_rw_lock);
1153 mac_impl_t *mip = (mac_impl_t *)mh;
1155 rw_enter(&mip->mi_rw_lock, RW_READER);
1156 if (mip->mi_dstaddr_set)
1157 bcopy(mip->mi_dstaddr, addr, mip->mi_type->mt_addr_length);
1158 rw_exit(&mip->mi_rw_lock);
1159 return (mip->mi_dstaddr_set);
1169 mac_impl_t *mip = mcip->mci_mip;
1171 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
1174 rw_enter(&mip->mi_rw_lock, RW_WRITER);
1175 mcip->mci_client_next = mip->mi_clients_list;
1176 mip->mi_clients_list = mcip;
1177 mip->mi_nclients++;
1178 rw_exit(&mip->mi_rw_lock);
1188 mac_impl_t *mip = mcip->mci_mip;
1191 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
1193 rw_enter(&mip->mi_rw_lock, RW_WRITER);
1194 prev = &mip->mi_clients_list;
1202 mip->mi_nclients--;
1203 rw_exit(&mip->mi_rw_lock);
1222 mac_addr_in_use(mac_impl_t *mip, uint8_t *mac_addr, uint16_t vid)
1227 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
1229 for (client = mip->mi_clients_list; client != NULL;
1261 mac_impl_t *mip = mcip->mci_mip;
1262 size_t addr_len = mip->mi_type->mt_addr_length;
1272 if (!mac_unicst_verify((mac_handle_t)mip, mac_addr,
1311 mac_impl_t *mip = (mac_impl_t *)mh;
1320 i_mac_perim_enter(mip);
1322 if (mip->mi_state_flags & MIS_IS_VNIC) {
1329 mcip = mac_vnic_lower(mip);
1341 mip->mi_clients_list = mcip;
1342 i_mac_perim_exit(mip);
1353 mcip->mci_mip = mip;
1375 if (mip->mi_state_flags & MIS_IS_AGGR)
1382 if ((err = dls_devnet_macname2linkid(mip->mi_name,
1392 (void) strlcpy(mcip->mci_name, mip->mi_name,
1469 i_mac_perim_exit(mip);
1473 i_mac_perim_exit(mip);
1487 mac_impl_t *mip = mcip->mci_mip;
1490 i_mac_perim_enter(mip);
1503 i_mac_perim_exit(mip);
1533 i_mac_perim_exit(mip);
1547 mac_impl_t *mip = mcip->mci_mip;
1549 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
1591 mac_impl_t *mip = mcip->mci_mip;
1601 i_mac_perim_enter(mip);
1607 i_mac_perim_exit(mip);
1693 mac_impl_t *mip = mcip->mci_mip;
1710 defgrp = MAC_DEFAULT_RX_GROUP(mip);
1726 } else if (mip->mi_rx_group_type ==
1746 if (mip->mi_rx_group_type ==
1753 MAC_RX_RING_RELEASED(mip,
1755 MAC_RX_GRP_RELEASED(mip);
1758 if (mip->mi_nactiveclients ==
1785 MAC_RX_GRP_RELEASED(mip);
1820 MAC_RX_GRP_RESERVED(mip);
1821 if (mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC)
1822 MAC_RX_RING_RESERVED(mip, ngrp->mrg_cur_count);
1830 MAC_RX_GRP_RELEASED(mip);
1831 if (mip->mi_rx_group_type ==
1833 MAC_RX_RING_RELEASED(mip, ringcnt);
1836 } else if (group != defgrp && mip->mi_rx_group_type ==
1853 MAC_RX_RING_RELEASED(mip,
1856 MAC_RX_RING_RESERVED(mip,
1860 MAC_RX_RING_RESERVED(mip, group->mrg_cur_count);
1861 MAC_RX_GRP_RESERVED(mip);
1868 defgrp = MAC_DEFAULT_TX_GROUP(mip);
1875 mip->mi_tx_group_type != MAC_GROUP_TYPE_DYNAMIC) {
1885 } else if (mip->mi_tx_group_type ==
1897 if (mip->mi_tx_group_type ==
1910 MAC_TX_GRP_RELEASED(mip);
1911 MAC_TX_RING_RELEASED(mip,
1922 MAC_TX_RING_RELEASED(mip, ringcnt);
1931 MAC_TX_GRP_RELEASED(mip);
1960 MAC_TX_GRP_RESERVED(mip);
1961 if (mip->mi_tx_group_type == MAC_GROUP_TYPE_DYNAMIC)
1962 MAC_TX_RING_RESERVED(mip, ngrp->mrg_cur_count);
1972 MAC_TX_GRP_RELEASED(mip);
1973 if (mip->mi_tx_group_type ==
1975 MAC_TX_RING_RELEASED(mip, ringcnt);
1978 } else if (group != defgrp && mip->mi_tx_group_type ==
1995 MAC_TX_RING_RELEASED(mip,
1998 MAC_TX_RING_RESERVED(mip,
2002 MAC_TX_RING_RESERVED(mip, group->mrg_cur_count);
2003 MAC_TX_GRP_RESERVED(mip);
2020 mac_impl_t *mip = (mac_impl_t *)mcip->mci_mip;
2026 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
2029 mcip->mci_upper_mip : mip, mrp);
2085 mac_set_prim_vlan_rings(mip,
2102 mac_flow_modify(mip->mi_flow_tab, flent, mrp);
2121 mac_impl_t *mip = (mac_impl_t *)mcip->mci_mip;
2136 flow_desc.fd_mac_len = mip->mi_type->mt_addr_length;
2230 mac_update_single_active_client(mac_impl_t *mip)
2234 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
2236 rw_enter(&mip->mi_rw_lock, RW_WRITER);
2237 if (mip->mi_nactiveclients == 1) {
2243 for (client = mip->mi_clients_list; client != NULL;
2256 mip->mi_single_active_client = client;
2257 rw_exit(&mip->mi_rw_lock);
2270 mac_impl_t *mip = mcip->mci_mip;
2280 if ((err = mac_start((mac_handle_t)mip)) != 0)
2286 if (mip->mi_type->mt_brdcst_addr != NULL) {
2287 err = mac_bcast_add(mcip, mip->mi_type->mt_brdcst_addr, vid,
2313 mip->mi_nactiveclients++;
2358 if ((err = mac_flow_add(mip->mi_flow_tab, flent)) != 0) {
2380 * the mip's mi_single_active_client if needed. The Rx path assumes
2381 * that mip->mi_single_active_client will always have an associated
2386 mac_update_single_active_client(mip);
2393 if (mip->mi_nactiveclients == 2) {
2394 mac_capab_update((mac_handle_t)mip);
2395 mac_virtual_link_update(mip);
2413 mac_bcast_delete(mcip, mip->mi_type->mt_brdcst_addr, vid);
2416 mip->mi_nactiveclients--;
2419 mac_stop((mac_handle_t)mip);
2431 mac_get_passive_primary_client(mac_impl_t *mip)
2435 for (mcip = mip->mi_clients_list; mcip != NULL;
2464 mac_impl_t *mip = mcip->mci_mip;
2466 uint_t mac_len = mip->mi_type->mt_addr_length;
2478 ASSERT(!((mip->mi_state_flags & MIS_IS_VNIC) && (vid != 0)));
2491 if (mip->mi_pvid != 0 && vid == mip->mi_pvid)
2569 i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_ANCHOR_VNIC, NULL)) {
2577 err = mac_fastpath_disable((mac_handle_t)mip);
2591 if (mip->mi_state_flags & (MIS_EXCLUSIVE|MIS_NO_ACTIVE)) {
2593 mac_fastpath_enable((mac_handle_t)mip);
2599 if (mip->mi_nactiveclients != 0)
2602 if ((mip->mi_state_flags & MIS_LEGACY) &&
2603 !(mip->mi_capab_legacy.ml_active_set(mip->mi_driver))) {
2606 mip->mi_state_flags |= MIS_EXCLUSIVE;
2618 mac_get_resources((mac_handle_t)mip, mrp);
2633 mac_fastpath_enable((mac_handle_t)mip);
2641 mac_get_resources((mac_handle_t)mip, mrp);
2658 mac_addr = mip->mi_addr;
2664 if (!mac_unicst_verify((mac_handle_t)mip, mac_addr, mac_len)) {
2674 if (check_dups && bcmp(mip->mi_addr, mac_addr, mac_len) == 0) {
2751 mac_addr_in_use(mip, mac_addr, vid)) {
2761 mac_get_passive_primary_client(mip) != NULL) {
2791 mac_fastpath_enable((mac_handle_t)mip);
2793 mip->mi_state_flags &= ~MIS_EXCLUSIVE;
2794 if (mip->mi_state_flags & MIS_LEGACY) {
2795 mip->mi_capab_legacy.ml_active_clear(
2796 mip->mi_driver);
2839 mac_impl_t *mip = ((mac_client_impl_t *)mch)->mci_mip;
2842 i_mac_perim_enter(mip);
2844 i_mac_perim_exit(mip);
2854 mac_impl_t *mip = mcip->mci_mip;
2876 mip->mi_nactiveclients--;
2877 mac_update_single_active_client(mip);
2887 rw_enter(&mip->mi_rw_lock, RW_WRITER);
2901 rw_exit(&mip->mi_rw_lock);
2927 if (mip->mi_type->mt_brdcst_addr != NULL) {
2929 mac_bcast_delete(mcip, mip->mi_type->mt_brdcst_addr,
2933 if (mip->mi_nactiveclients == 1) {
2934 mac_capab_update((mac_handle_t)mip);
2935 mac_virtual_link_update(mip);
2939 mip->mi_state_flags &= ~MIS_EXCLUSIVE;
2941 if (mip->mi_state_flags & MIS_LEGACY)
2942 mip->mi_capab_legacy.ml_active_clear(mip->mi_driver);
2966 mac_fastpath_enable((mac_handle_t)mip);
2967 mac_stop((mac_handle_t)mip);
2979 mac_impl_t *mip = mcip->mci_mip;
2983 i_mac_perim_enter(mip);
3006 i_mac_perim_exit(mip);
3021 i_mac_perim_exit(mip);
3054 i_mac_perim_exit(mip);
3093 mac_flow_remove(mip->mi_flow_tab, flent, B_FALSE);
3104 if (mip->mi_type->mt_brdcst_addr != NULL) {
3105 mac_bcast_delete(mcip, mip->mi_type->mt_brdcst_addr,
3115 mac_fastpath_enable((mac_handle_t)mip);
3116 mac_stop((mac_handle_t)mip);
3117 i_mac_perim_exit(mip);
3127 i_mac_perim_exit(mip);
3135 mcip = mac_get_passive_primary_client(mip);
3147 mac_get_resources((mac_handle_t)mip, mrp);
3153 mip->mi_addr, mrp, B_TRUE, muip) == 0) {
3165 i_mac_perim_exit(mip);
3176 mac_impl_t *mip = mcip->mci_mip;
3183 if ((err = mip->mi_type->mt_ops.mtops_multicst_verify(addr,
3184 mip->mi_pdata)) != 0)
3187 i_mac_perim_enter(mip);
3211 i_mac_perim_exit(mip);
3222 mac_impl_t *mip = mcip->mci_mip;
3226 i_mac_perim_enter(mip);
3232 i_mac_perim_exit(mip);
3261 mac_impl_t *mip = mcip->mci_mip;
3266 i_mac_perim_enter(mip);
3268 if ((rc = mac_start((mac_handle_t)mip)) != 0) {
3269 i_mac_perim_exit(mip);
3294 if ((rc = i_mac_promisc_set(mip, B_TRUE)) != 0) {
3295 mac_stop((mac_handle_t)mip);
3296 i_mac_perim_exit(mip);
3313 mcbi = &mip->mi_promisc_cb_info;
3316 mac_callback_add(&mip->mi_promisc_cb_info, &mcip->mci_promisc_list,
3318 mac_callback_add(&mip->mi_promisc_cb_info, &mip->mi_promisc_list,
3332 i_mac_perim_exit(mip);
3345 mac_impl_t *mip = mcip->mci_mip;
3349 i_mac_perim_enter(mip);
3357 if ((rv = i_mac_promisc_set(mip, B_FALSE)) != 0) {
3359 " mode because of error 0x%x", mip->mi_name, rv);
3362 mcbi = &mip->mi_promisc_cb_info;
3364 if (mac_callback_remove(mcbi, &mip->mi_promisc_list,
3366 VERIFY(mac_callback_remove(&mip->mi_promisc_cb_info,
3370 mac_callback_remove_wait(&mip->mi_promisc_cb_info);
3381 mac_stop((mac_handle_t)mip);
3383 i_mac_perim_exit(mip);
3443 mac_impl_t *mip = mcip->mci_mip;
3497 mip->mi_nactiveclients == 1 && mp_chain->b_next == NULL) {
3508 if (mip->mi_nclients > 1) {
3532 MAC_TX(mip, srs_tx->st_arg2, mp_chain, mcip);
3642 mac_impl_t *mip = (mac_impl_t *)mh;
3645 if ((cmd == ND_GET && (mip->mi_callbacks->mc_callbacks & MC_GETPROP)) ||
3646 (cmd == ND_SET && (mip->mi_callbacks->mc_callbacks & MC_SETPROP))) {
3651 mac_ndd_ioctl(mip, wq, bp);
3659 if (mip->mi_callbacks->mc_callbacks & MC_IOCTL)
3660 mip->mi_ioctl(mip->mi_driver, wq, bp);
3682 mac_impl_t *mip = (mac_impl_t *)mh;
3694 mncb->mncb_mip = mip;
3699 mcbi = &mip->mi_notify_cb_info;
3701 i_mac_perim_enter(mip);
3704 mac_callback_add(&mip->mi_notify_cb_info, &mip->mi_notify_cb_list,
3708 i_mac_perim_exit(mip);
3715 mac_impl_t *mip = (mac_impl_t *)mh;
3716 mac_cb_info_t *mcbi = &mip->mi_notify_cb_info;
3719 mac_callback_remove_wait(&mip->mi_notify_cb_info);
3730 mac_impl_t *mip = mncb->mncb_mip;
3734 mcbi = &mip->mi_notify_cb_info;
3736 i_mac_perim_enter(mip);
3744 if (mac_callback_remove(&mip->mi_notify_cb_info,
3745 &mip->mi_notify_cb_list, &mncb->mncb_link)) {
3752 i_mac_perim_exit(mip);
3760 mac_notify_remove_wait((mac_handle_t)mip);
3848 mac_impl_t *mip = mcip->mci_mip;
3851 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
3854 mcip->mci_upper_mip : mip, mrp)) != 0) {
3858 mac_flow_modify(mip->mi_flow_tab, mcip->mci_flent, mrp);
3871 mac_impl_t *mip = mcip->mci_mip;
3874 i_mac_perim_enter(mip);
3898 i_mac_perim_exit(mip);
3996 mac_is_mcast(mac_impl_t *mip, mblk_t *mp)
4000 if (mac_header_info((mac_handle_t)mip, mp, &hdr_info) != 0)
4012 mac_promisc_dispatch(mac_impl_t *mip, mblk_t *mp_chain,
4020 MAC_PROMISC_WALKER_INC(mip);
4022 is_mcast = mac_is_mcast(mip, mp);
4024 for (mcb = mip->mi_promisc_list; mcb != NULL;
4057 MAC_PROMISC_WALKER_DCR(mip);
4063 mac_impl_t *mip = mcip->mci_mip;
4075 MAC_PROMISC_WALKER_INC(mip);
4077 is_mcast = mac_is_mcast(mip, mp);
4087 MAC_PROMISC_WALKER_DCR(mip);
4096 mac_impl_t *mip = (mac_impl_t *)mh;
4098 rw_enter(&(mip->mi_rw_lock), RW_READER);
4099 *marginp = mip->mi_margin;
4100 rw_exit(&(mip->mi_rw_lock));
4120 mac_impl_t *mip = (mac_impl_t *)val;
4122 if (mip->mi_state_flags & MIS_DISABLED)
4126 ddi_driver_name(mip->mi_dip)) != 0)
4129 statep->mi_infop = &mip->mi_info;
4160 mac_impl_t *mip = (mac_impl_t *)mh;
4162 if (mip->mi_bridge_link != NULL)
4164 else if (mip->mi_callbacks->mc_callbacks & MC_GETCAPAB)
4165 return (mip->mi_getcapab(mip->mi_driver, cap, cap_data));
4179 mac_impl_t *mip = (mac_impl_t *)mh;
4185 if (mip->mi_nactiveclients > 1) {
4205 mac_impl_t *mip = (mac_impl_t *)mh;
4207 return (mip->mi_type->mt_ops.mtops_sap_verify(sap, bind_sap,
4208 mip->mi_pdata));
4215 mac_impl_t *mip = (mac_impl_t *)mh;
4222 hdr_daddr = (mip->mi_dstaddr_set ? mip->mi_dstaddr : daddr);
4223 return (mip->mi_type->mt_ops.mtops_header(mip->mi_addr, hdr_daddr, sap,
4224 mip->mi_pdata, payload, extra_len));
4230 mac_impl_t *mip = (mac_impl_t *)mh;
4232 return (mip->mi_type->mt_ops.mtops_header_info(mp, mip->mi_pdata,
4239 mac_impl_t *mip = (mac_impl_t *)mh;
4240 boolean_t is_ethernet = (mip->mi_info.mi_media == DL_ETHER);
4295 mac_impl_t *mip = (mac_impl_t *)mh;
4297 if (mip->mi_type->mt_ops.mtops_ops & MTOPS_HEADER_COOK) {
4305 return (mip->mi_type->mt_ops.mtops_header_cook(mp,
4306 mip->mi_pdata));
4314 mac_impl_t *mip = (mac_impl_t *)mh;
4316 if (mip->mi_type->mt_ops.mtops_ops & MTOPS_HEADER_UNCOOK) {
4324 return (mip->mi_type->mt_ops.mtops_header_uncook(mp,
4325 mip->mi_pdata));
4333 mac_impl_t *mip = (mac_impl_t *)mh;
4335 return (mip->mi_type->mt_addr_length);
4348 mac_impl_t *mip = (mac_impl_t *)mh;
4351 return (((vnic_t *)mip->mi_driver)->vn_lower_mh);
4357 mac_impl_t *mip = (mac_impl_t *)mh;
4360 return (((vnic_t *)mip->mi_driver)->vn_addr_type ==
4458 mac_impl_t *mip = (mac_impl_t *)mh;
4464 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
4466 err = mac_validate_props(mip, mrp);
4471 bcopy(&mip->mi_resource_props, umrp, sizeof (*umrp));
4481 if ((err = mac_fastpath_disable((mac_handle_t)mip)) != 0) {
4489 * we use a copy of bind_cpu and finally cache bind_cpu in mip.
4490 * This allows us to cache only user edits in mip.
4494 mcip = mac_primary_client_handle(mip);
4509 for (vmcip = mip->mi_clients_list; vmcip != NULL;
4568 mac_set_prim_vlan_rings(mip, vmrp);
4576 bcopy(umrp, &mip->mi_resource_props, sizeof (*umrp));
4582 mac_fastpath_enable((mac_handle_t)mip);
4584 mac_fastpath_enable((mac_handle_t)mip);
4608 mac_impl_t *mip = (mac_impl_t *)mh;
4611 mcip = mac_primary_client_handle(mip);
4616 bcopy(&mip->mi_resource_props, mrp, sizeof (mac_resource_props_t));
4626 mac_impl_t *mip = (mac_impl_t *)mh;
4629 mcip = mac_primary_client_handle(mip);
4641 mac_impl_t *mip = (mac_impl_t *)mh;
4645 i_mac_perim_enter(mip);
4647 for (mcip = mip->mi_clients_list; mcip != NULL;
4652 i_mac_perim_exit(mip);
4658 mip->mi_pvid = pvid;
4659 i_mac_perim_exit(mip);
4666 mac_impl_t *mip = (mac_impl_t *)mh;
4668 return (mip->mi_pvid);
4674 mac_impl_t *mip = (mac_impl_t *)mh;
4676 return (mip->mi_llimit);
4682 mac_impl_t *mip = (mac_impl_t *)mh;
4684 return (mip->mi_ldecay);
4693 mac_impl_t *mip = (mac_impl_t *)mh;
4697 i_mac_perim_enter(mip);
4703 if (mip->mi_state_flags & MIS_IS_VNIC) {
4704 mac_client_impl_t *mcip = mac_vnic_lower(mip);
4716 if (mip->mi_state_flags & MIS_IS_AGGR) {
4722 ret = i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_AGGR,
4726 rename_fn(new_name, mip->mi_driver);
4733 for (cur_clnt = mip->mi_clients_list; cur_clnt != NULL;
4757 if (mip->mi_state_flags & MIS_IS_AGGR)
4758 mac_pseudo_ring_stat_rename(mip);
4761 i_mac_perim_exit(mip);
4774 mac_impl_t *mip = mcip->mci_mip;
4776 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip));
4782 rw_enter(&mip->mi_rw_lock, RW_WRITER);
4784 rw_exit(&mip->mi_rw_lock);
5008 mac_validate_props(mac_impl_t *mip, mac_resource_props_t *mrp)
5080 * mip will be null when we come from mac_flow_create or
5088 if (mip == NULL)
5095 if ((mip->mi_state_flags & MIS_IS_VNIC) &&
5096 mac_is_vnic_primary((mac_handle_t)mip)) {
5100 mip_mrp = &mip->mi_resource_props;
5105 if (mip->mi_state_flags & MIS_IS_VNIC)
5106 mip = (mac_impl_t *)mac_get_lower_mac_handle((mac_handle_t)mip);
5112 if (((mrp->mrp_mask & MRP_RX_RINGS) && mip->mi_rx_groups == NULL) ||
5113 ((mrp->mrp_mask & MRP_TX_RINGS) && mip->mi_tx_groups == NULL)) {
5136 rings_avail = mip->mi_rxrings_avail;
5137 gtype = mip->mi_rx_group_type;
5149 rings_avail = mip->mi_txrings_avail;
5150 gtype = mip->mi_tx_group_type;
5176 mac_virtual_link_update(mac_impl_t *mip)
5178 if (mip->mi_linkstate != LINK_STATE_UP)
5179 i_mac_notify(mip, MAC_NOTE_LINK);
5191 mac_impl_t *mip = (mac_impl_t *)mh;
5193 mcip->mci_upper_mip = mip;
5196 bcopy(mrp, &mip->mi_resource_props,
5210 mac_impl_t *mip = (mac_impl_t *)mh;
5217 if (mip->mi_state_flags & MIS_DISABLED) {
5228 if (mip->mi_ref != 2) {
5233 ASSERT(!(mip->mi_state_flags & MIS_EXCLUSIVE_HELD));
5234 mip->mi_state_flags |= MIS_EXCLUSIVE_HELD;
5242 mac_impl_t *mip = (mac_impl_t *)mh;
5248 ASSERT(mip->mi_ref == 2 && (mip->mi_state_flags & MIS_EXCLUSIVE_HELD));
5249 mip->mi_state_flags &= ~MIS_EXCLUSIVE_HELD;
5259 mac_impl_t *mip = (mac_impl_t *)mh;
5263 i_mac_perim_enter(mip);
5265 if (!(mip->mi_callbacks->mc_callbacks & (MC_SETPROP|MC_GETPROP))) {
5270 old_mtu = mip->mi_sdu_max;
5272 if (new_mtu == 0 || new_mtu < mip->mi_sdu_min) {
5277 rw_enter(&mip->mi_rw_lock, RW_READER);
5278 if (mip->mi_mtrp != NULL && new_mtu < mip->mi_mtrp->mtr_mtu) {
5280 rw_exit(&mip->mi_rw_lock);
5283 rw_exit(&mip->mi_rw_lock);
5286 rv = mip->mi_callbacks->mc_setprop(mip->mi_driver,
5295 i_mac_perim_exit(mip);
5310 mac_impl_t *mip = (mac_impl_t *)mh;
5316 ASSERT(grp_index >= 0 && grp_index < mip->mi_rx_group_count);
5318 rw_enter(&mip->mi_rw_lock, RW_READER);
5319 *grp_num = mip->mi_rx_groups[grp_index].mrg_index;
5320 *type = mip->mi_rx_groups[grp_index].mrg_type;
5321 *n_rings = mip->mi_rx_groups[grp_index].mrg_cur_count;
5322 ring = mip->mi_rx_groups[grp_index].mrg_rings;
5323 for (index = 0; index < mip->mi_rx_groups[grp_index].mrg_cur_count;
5335 for (mcip = mip->mi_rx_groups[grp_index].mrg_clients; mcip != NULL;
5362 rw_exit(&mip->mi_rw_lock);
5373 mac_impl_t *mip = (mac_impl_t *)mh;
5379 ASSERT(grp_index >= 0 && grp_index <= mip->mi_tx_group_count);
5381 rw_enter(&mip->mi_rw_lock, RW_READER);
5382 *grp_num = mip->mi_tx_groups[grp_index].mrg_index > 0 ?
5383 mip->mi_tx_groups[grp_index].mrg_index : grp_index;
5384 *type = mip->mi_tx_groups[grp_index].mrg_type;
5385 *n_rings = mip->mi_tx_groups[grp_index].mrg_cur_count;
5386 ring = mip->mi_tx_groups[grp_index].mrg_rings;
5387 for (index = 0; index < mip->mi_tx_groups[grp_index].mrg_cur_count;
5394 if (mip->mi_tx_groups[grp_index].mrg_index < 0) {
5399 for (mcip = mip->mi_tx_groups[grp_index].mrg_clients; mcip != NULL;
5426 rw_exit(&mip->mi_rw_lock);
5435 mac_impl_t *mip = (mac_impl_t *)mh;
5441 return (type == MAC_RING_TYPE_RX ? mip->mi_rx_group_count :
5442 mip->mi_tx_groups != NULL ? mip->mi_tx_group_count + 1 : 0);
5451 mac_impl_t *mip = (mac_impl_t *)mh;
5453 return (mip->mi_txrings_avail);
5462 mac_impl_t *mip = (mac_impl_t *)mh;
5464 return (mip->mi_rxrings_avail);
5473 mac_impl_t *mip = (mac_impl_t *)mh;
5475 return (mip->mi_rxrings_rsvd);
5484 mac_impl_t *mip = (mac_impl_t *)mh;
5486 return (mip->mi_txrings_rsvd);
5495 mac_impl_t *mip = (mac_impl_t *)mh;
5497 return (mip->mi_rxhwclnt_avail);
5506 mac_impl_t *mip = (mac_impl_t *)mh;
5508 return (mip->mi_rxhwclnt_used);
5517 mac_impl_t *mip = (mac_impl_t *)mh;
5519 return (mip->mi_txhwclnt_avail);
5528 mac_impl_t *mip = (mac_impl_t *)mh;
5530 return (mip->mi_txhwclnt_used);