Lines Matching refs:vnic
198 vnic_unicast_add(vnic_t *vnic, vnic_mac_addr_type_t vnic_addr_type, in vnic_unicast_add() argument
254 if ((err = mac_addr_random(vnic->vn_mch, in vnic_unicast_add()
259 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh); in vnic_unicast_add()
263 err = mac_addr_factory_reserve(vnic->vn_mch, addr_slot); in vnic_unicast_add()
274 mac_addr_factory_value(vnic->vn_lower_mh, *addr_slot, in vnic_unicast_add()
281 err = mac_addr_factory_reserve(vnic->vn_mch, addr_slot); in vnic_unicast_add()
283 mac_addr_factory_value(vnic->vn_lower_mh, *addr_slot, in vnic_unicast_add()
294 if ((err = mac_addr_random(vnic->vn_mch, in vnic_unicast_add()
299 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh); in vnic_unicast_add()
314 mac_unicast_primary_get(vnic->vn_lower_mh, mac_addr_arg); in vnic_unicast_add()
315 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh); in vnic_unicast_add()
320 vnic->vn_addr_type = vnic_addr_type; in vnic_unicast_add()
322 err = mac_unicast_add(vnic->vn_mch, mac_addr_arg, mac_flags, in vnic_unicast_add()
323 &vnic->vn_muh, vid, &mac_diag); in vnic_unicast_add()
327 mac_addr_factory_release(vnic->vn_mch, *addr_slot); in vnic_unicast_add()
347 vnic_t *vnic; in vnic_dev_create() local
361 (mod_hash_val_t *)&vnic); in vnic_dev_create()
367 vnic = kmem_cache_alloc(vnic_cache, KM_NOSLEEP); in vnic_dev_create()
368 if (vnic == NULL) { in vnic_dev_create()
373 bzero(vnic, sizeof (*vnic)); in vnic_dev_create()
375 vnic->vn_ls = LINK_STATE_UNKNOWN; in vnic_dev_create()
376 vnic->vn_id = vnic_id; in vnic_dev_create()
377 vnic->vn_link_id = linkid; in vnic_dev_create()
378 vnic->vn_vrid = vrid; in vnic_dev_create()
379 vnic->vn_af = af; in vnic_dev_create()
395 err = mac_open_by_linkid(linkid, &vnic->vn_lower_mh); in vnic_dev_create()
402 if (mac_is_vnic(vnic->vn_lower_mh)) { in vnic_dev_create()
408 minfop = mac_info(vnic->vn_lower_mh); in vnic_dev_create()
416 err = mac_client_open(vnic->vn_lower_mh, &vnic->vn_mch, in vnic_dev_create()
423 err = vnic_unicast_add(vnic, *vnic_addr_type, mac_slot, in vnic_dev_create()
427 vnic->vn_muh = NULL; in vnic_dev_create()
434 vnic->vn_mnh = mac_notify_add(vnic->vn_lower_mh, vnic_notify_cb, in vnic_dev_create()
435 vnic); in vnic_dev_create()
437 *vnic_addr_type = vnic->vn_addr_type; in vnic_dev_create()
438 vnic->vn_addr_len = *mac_len; in vnic_dev_create()
439 vnic->vn_vid = vid; in vnic_dev_create()
441 bcopy(mac_addr, vnic->vn_addr, vnic->vn_addr_len); in vnic_dev_create()
443 if (vnic->vn_addr_type == VNIC_MAC_ADDR_TYPE_FACTORY) in vnic_dev_create()
444 vnic->vn_slot_id = *mac_slot; in vnic_dev_create()
453 if (vid == 0 || !mac_capab_get(vnic->vn_lower_mh, in vnic_dev_create()
455 if (!mac_capab_get(vnic->vn_lower_mh, MAC_CAPAB_HCKSUM, in vnic_dev_create()
456 &vnic->vn_hcksum_txflags)) in vnic_dev_create()
457 vnic->vn_hcksum_txflags = 0; in vnic_dev_create()
459 vnic->vn_hcksum_txflags = 0; in vnic_dev_create()
467 if (vnic->vn_hcksum_txflags != 0) { in vnic_dev_create()
468 if (!mac_capab_get(vnic->vn_lower_mh, MAC_CAPAB_LSO, in vnic_dev_create()
469 &vnic->vn_cap_lso)) { in vnic_dev_create()
470 vnic->vn_cap_lso.lso_flags = 0; in vnic_dev_create()
473 vnic->vn_cap_lso.lso_flags = 0; in vnic_dev_create()
482 mac->m_driver = vnic; in vnic_dev_create()
485 mac->m_src_addr = vnic->vn_addr; in vnic_dev_create()
497 vnic->vn_force = B_TRUE; in vnic_dev_create()
504 err = mac_margin_add(vnic->vn_lower_mh, in vnic_dev_create()
505 &vnic->vn_margin, B_TRUE); in vnic_dev_create()
508 vnic->vn_margin = VLAN_TAGSZ; in vnic_dev_create()
509 err = mac_margin_add(vnic->vn_lower_mh, in vnic_dev_create()
510 &vnic->vn_margin, B_FALSE); in vnic_dev_create()
519 mac_sdu_get(vnic->vn_lower_mh, &mac->m_min_sdu, in vnic_dev_create()
521 err = mac_mtu_add(vnic->vn_lower_mh, &mac->m_max_sdu, B_FALSE); in vnic_dev_create()
523 VERIFY(mac_margin_remove(vnic->vn_lower_mh, in vnic_dev_create()
524 vnic->vn_margin) == 0); in vnic_dev_create()
530 vnic->vn_mtu = mac->m_max_sdu; in vnic_dev_create()
532 vnic->vn_margin = VLAN_TAGSZ; in vnic_dev_create()
535 vnic->vn_mtu = ANCHOR_VNIC_MAX_MTU; in vnic_dev_create()
538 mac->m_margin = vnic->vn_margin; in vnic_dev_create()
540 err = mac_register(mac, &vnic->vn_mh); in vnic_dev_create()
544 VERIFY(mac_mtu_remove(vnic->vn_lower_mh, in vnic_dev_create()
545 vnic->vn_mtu) == 0); in vnic_dev_create()
546 VERIFY(mac_margin_remove(vnic->vn_lower_mh, in vnic_dev_create()
547 vnic->vn_margin) == 0); in vnic_dev_create()
554 mac_set_upper_mac(vnic->vn_mch, vnic->vn_mh, mrp); in vnic_dev_create()
561 err = mac_client_set_resources(vnic->vn_mch, mrp); in vnic_dev_create()
563 VERIFY(mac_mtu_remove(vnic->vn_lower_mh, in vnic_dev_create()
564 vnic->vn_mtu) == 0); in vnic_dev_create()
565 VERIFY(mac_margin_remove(vnic->vn_lower_mh, in vnic_dev_create()
566 vnic->vn_margin) == 0); in vnic_dev_create()
567 (void) mac_unregister(vnic->vn_mh); in vnic_dev_create()
573 err = dls_devnet_create(vnic->vn_mh, vnic->vn_id, crgetzoneid(credp)); in vnic_dev_create()
576 VERIFY(mac_mtu_remove(vnic->vn_lower_mh, in vnic_dev_create()
577 vnic->vn_mtu) == 0); in vnic_dev_create()
578 VERIFY(mac_margin_remove(vnic->vn_lower_mh, in vnic_dev_create()
579 vnic->vn_margin) == 0); in vnic_dev_create()
581 (void) mac_unregister(vnic->vn_mh); in vnic_dev_create()
587 (mod_hash_val_t)vnic); in vnic_dev_create()
595 vnic->vn_enabled = B_TRUE; in vnic_dev_create()
598 vnic->vn_ls = LINK_STATE_UP; in vnic_dev_create()
600 vnic->vn_ls = mac_client_stat_get(vnic->vn_mch, in vnic_dev_create()
603 mac_link_update(vnic->vn_mh, vnic->vn_ls); in vnic_dev_create()
612 if (vnic->vn_mnh != NULL) in vnic_dev_create()
613 (void) mac_notify_remove(vnic->vn_mnh, B_TRUE); in vnic_dev_create()
614 if (vnic->vn_muh != NULL) in vnic_dev_create()
615 (void) mac_unicast_remove(vnic->vn_mch, vnic->vn_muh); in vnic_dev_create()
616 if (vnic->vn_mch != NULL) in vnic_dev_create()
617 mac_client_close(vnic->vn_mch, MAC_CLOSE_FLAGS_IS_VNIC); in vnic_dev_create()
618 if (vnic->vn_lower_mh != NULL) in vnic_dev_create()
619 mac_close(vnic->vn_lower_mh); in vnic_dev_create()
622 kmem_cache_free(vnic_cache, vnic); in vnic_dev_create()
635 vnic_t *vnic = NULL; in vnic_dev_modify() local
640 (mod_hash_val_t *)&vnic) != 0) { in vnic_dev_modify()
654 vnic_t *vnic = NULL; in vnic_dev_delete() local
662 (mod_hash_val_t *)&vnic) != 0) { in vnic_dev_delete()
667 if ((rc = dls_devnet_destroy(vnic->vn_mh, &tmpid, B_TRUE)) != 0) { in vnic_dev_delete()
680 if ((rc = mac_disable(vnic->vn_mh)) != 0) { in vnic_dev_delete()
681 (void) dls_devnet_create(vnic->vn_mh, vnic_id, in vnic_dev_delete()
687 vnic_cleanup_secondary_macs(vnic, vnic->vn_nhandles); in vnic_dev_delete()
689 vnic->vn_enabled = B_FALSE; in vnic_dev_delete()
691 ASSERT(vnic == (vnic_t *)val); in vnic_dev_delete()
700 (void) mac_unregister(vnic->vn_mh); in vnic_dev_delete()
702 if (vnic->vn_lower_mh != NULL) { in vnic_dev_delete()
707 if (vnic->vn_addr_type == VNIC_MAC_ADDR_TYPE_FACTORY) { in vnic_dev_delete()
708 (void) mac_addr_factory_release(vnic->vn_mch, in vnic_dev_delete()
709 vnic->vn_slot_id); in vnic_dev_delete()
711 (void) mac_margin_remove(vnic->vn_lower_mh, vnic->vn_margin); in vnic_dev_delete()
712 (void) mac_mtu_remove(vnic->vn_lower_mh, vnic->vn_mtu); in vnic_dev_delete()
713 (void) mac_notify_remove(vnic->vn_mnh, B_TRUE); in vnic_dev_delete()
714 (void) mac_unicast_remove(vnic->vn_mch, vnic->vn_muh); in vnic_dev_delete()
715 mac_client_close(vnic->vn_mch, MAC_CLOSE_FLAGS_IS_VNIC); in vnic_dev_delete()
716 mac_close(vnic->vn_lower_mh); in vnic_dev_delete()
719 kmem_cache_free(vnic_cache, vnic); in vnic_dev_delete()
751 vnic_t *vnic = arg; in vnic_m_stat() local
754 if (vnic->vn_lower_mh == NULL) { in vnic_m_stat()
783 *val = mac_client_stat_get(vnic->vn_mch, stat); in vnic_m_stat()
805 vnic_t *vnic = vnic_arg; in vnic_mac_client_handle() local
807 return (vnic->vn_mch); in vnic_mac_client_handle()
832 vnic_t *vnic = arg; in vnic_m_capab_get() local
838 *hcksum_txflags = vnic->vn_hcksum_txflags & in vnic_m_capab_get()
846 if (vnic->vn_cap_lso.lso_flags == 0) { in vnic_m_capab_get()
849 *cap_lso = vnic->vn_cap_lso; in vnic_m_capab_get()
855 if (vnic->vn_lower_mh == NULL) { in vnic_m_capab_get()
864 vnic_capab->mcv_arg = vnic; in vnic_m_capab_get()
874 if (vnic->vn_lower_mh == NULL) { in vnic_m_capab_get()
875 ASSERT(vnic->vn_link_id == 0); in vnic_m_capab_get()
887 if (vnic->vn_vrid != 0) { in vnic_m_capab_get()
889 vrrp_capab->mcv_af = vnic->vn_af; in vnic_m_capab_get()
930 vnic_t *vnic = arg; in vnic_m_unicst() local
932 return (mac_vnic_unicast_set(vnic->vn_mch, macaddr)); in vnic_m_unicst()
1254 vnic_t *vnic; in vnic_info() local
1264 (mod_hash_val_t *)&vnic); in vnic_info()
1270 info->vn_link_id = vnic->vn_link_id; in vnic_info()
1271 info->vn_mac_addr_type = vnic->vn_addr_type; in vnic_info()
1272 info->vn_mac_len = vnic->vn_addr_len; in vnic_info()
1273 bcopy(vnic->vn_addr, info->vn_mac_addr, MAXMACADDRLEN); in vnic_info()
1274 info->vn_mac_slot = vnic->vn_slot_id; in vnic_info()
1276 info->vn_vid = vnic->vn_vid; in vnic_info()
1277 info->vn_force = vnic->vn_force; in vnic_info()
1278 info->vn_vrid = vnic->vn_vrid; in vnic_info()
1279 info->vn_af = vnic->vn_af; in vnic_info()
1282 if (vnic->vn_mch != NULL) in vnic_info()
1283 mac_client_get_resources(vnic->vn_mch, in vnic_info()
1293 vnic_t *vnic = arg; in vnic_notify_cb() local
1299 if (!vnic->vn_enabled) in vnic_notify_cb()
1308 if (vnic->vn_addr_type != VNIC_MAC_ADDR_TYPE_PRIMARY) in vnic_notify_cb()
1312 mac_unicast_primary_get(vnic->vn_lower_mh, vnic->vn_addr); in vnic_notify_cb()
1315 mac_unicst_update(vnic->vn_mh, (const uint8_t *)vnic->vn_addr); in vnic_notify_cb()
1319 vnic->vn_ls = mac_client_stat_get(vnic->vn_mch, in vnic_notify_cb()
1321 mac_link_update(vnic->vn_mh, vnic->vn_ls); in vnic_notify_cb()