Lines Matching defs:vnic

54 #include <sys/vnic.h>
196 vnic_unicast_add(vnic_t *vnic, vnic_mac_addr_type_t vnic_addr_type,
252 if ((err = mac_addr_random(vnic->vn_mch,
257 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh);
261 err = mac_addr_factory_reserve(vnic->vn_mch, addr_slot);
272 mac_addr_factory_value(vnic->vn_lower_mh, *addr_slot,
279 err = mac_addr_factory_reserve(vnic->vn_mch, addr_slot);
281 mac_addr_factory_value(vnic->vn_lower_mh, *addr_slot,
292 if ((err = mac_addr_random(vnic->vn_mch,
297 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh);
303 * vnic's vn_addr.
312 mac_unicast_primary_get(vnic->vn_lower_mh, mac_addr_arg);
313 *addr_len_ptr_arg = mac_addr_len(vnic->vn_lower_mh);
318 vnic->vn_addr_type = vnic_addr_type;
320 err = mac_unicast_add(vnic->vn_mch, mac_addr_arg, mac_flags,
321 &vnic->vn_muh, vid, &mac_diag);
325 mac_addr_factory_release(vnic->vn_mch, *addr_slot);
345 vnic_t *vnic;
359 (mod_hash_val_t *)&vnic);
365 vnic = kmem_cache_alloc(vnic_cache, KM_NOSLEEP);
366 if (vnic == NULL) {
371 bzero(vnic, sizeof (*vnic));
373 vnic->vn_id = vnic_id;
374 vnic->vn_link_id = linkid;
375 vnic->vn_vrid = vrid;
376 vnic->vn_af = af;
392 err = mac_open_by_linkid(linkid, &vnic->vn_lower_mh);
399 if (mac_is_vnic(vnic->vn_lower_mh)) {
405 minfop = mac_info(vnic->vn_lower_mh);
413 err = mac_client_open(vnic->vn_lower_mh, &vnic->vn_mch,
420 err = vnic_unicast_add(vnic, *vnic_addr_type, mac_slot,
424 vnic->vn_muh = NULL;
431 vnic->vn_mnh = mac_notify_add(vnic->vn_lower_mh, vnic_notify_cb,
432 vnic);
434 *vnic_addr_type = vnic->vn_addr_type;
435 vnic->vn_addr_len = *mac_len;
436 vnic->vn_vid = vid;
438 bcopy(mac_addr, vnic->vn_addr, vnic->vn_addr_len);
440 if (vnic->vn_addr_type == VNIC_MAC_ADDR_TYPE_FACTORY)
441 vnic->vn_slot_id = *mac_slot;
450 if (vid == 0 || !mac_capab_get(vnic->vn_lower_mh,
452 if (!mac_capab_get(vnic->vn_lower_mh, MAC_CAPAB_HCKSUM,
453 &vnic->vn_hcksum_txflags))
454 vnic->vn_hcksum_txflags = 0;
456 vnic->vn_hcksum_txflags = 0;
465 mac->m_driver = vnic;
468 mac->m_src_addr = vnic->vn_addr;
480 vnic->vn_force = B_TRUE;
487 err = mac_margin_add(vnic->vn_lower_mh,
488 &vnic->vn_margin, B_TRUE);
491 vnic->vn_margin = VLAN_TAGSZ;
492 err = mac_margin_add(vnic->vn_lower_mh,
493 &vnic->vn_margin, B_FALSE);
502 mac_sdu_get(vnic->vn_lower_mh, &mac->m_min_sdu,
504 err = mac_mtu_add(vnic->vn_lower_mh, &mac->m_max_sdu, B_FALSE);
506 VERIFY(mac_margin_remove(vnic->vn_lower_mh,
507 vnic->vn_margin) == 0);
513 vnic->vn_mtu = mac->m_max_sdu;
515 vnic->vn_margin = VLAN_TAGSZ;
518 vnic->vn_mtu = ANCHOR_VNIC_MAX_MTU;
521 mac->m_margin = vnic->vn_margin;
523 err = mac_register(mac, &vnic->vn_mh);
527 VERIFY(mac_mtu_remove(vnic->vn_lower_mh,
528 vnic->vn_mtu) == 0);
529 VERIFY(mac_margin_remove(vnic->vn_lower_mh,
530 vnic->vn_margin) == 0);
537 mac_set_upper_mac(vnic->vn_mch, vnic->vn_mh, mrp);
544 err = mac_client_set_resources(vnic->vn_mch, mrp);
546 VERIFY(mac_mtu_remove(vnic->vn_lower_mh,
547 vnic->vn_mtu) == 0);
548 VERIFY(mac_margin_remove(vnic->vn_lower_mh,
549 vnic->vn_margin) == 0);
550 (void) mac_unregister(vnic->vn_mh);
556 err = dls_devnet_create(vnic->vn_mh, vnic->vn_id, crgetzoneid(credp));
558 VERIFY(is_anchor || mac_margin_remove(vnic->vn_lower_mh,
559 vnic->vn_margin) == 0);
561 VERIFY(mac_mtu_remove(vnic->vn_lower_mh,
562 vnic->vn_mtu) == 0);
563 VERIFY(mac_margin_remove(vnic->vn_lower_mh,
564 vnic->vn_margin) == 0);
566 (void) mac_unregister(vnic->vn_mh);
572 (mod_hash_val_t)vnic);
580 vnic->vn_enabled = B_TRUE;
583 mac_link_update(vnic->vn_mh, LINK_STATE_UP);
585 mac_link_update(vnic->vn_mh,
586 mac_client_stat_get(vnic->vn_mch, MAC_STAT_LINK_STATE));
596 if (vnic->vn_mnh != NULL)
597 (void) mac_notify_remove(vnic->vn_mnh, B_TRUE);
598 if (vnic->vn_muh != NULL)
599 (void) mac_unicast_remove(vnic->vn_mch, vnic->vn_muh);
600 if (vnic->vn_mch != NULL)
601 mac_client_close(vnic->vn_mch, MAC_CLOSE_FLAGS_IS_VNIC);
602 if (vnic->vn_lower_mh != NULL)
603 mac_close(vnic->vn_lower_mh);
606 kmem_cache_free(vnic_cache, vnic);
619 vnic_t *vnic = NULL;
624 (mod_hash_val_t *)&vnic) != 0) {
638 vnic_t *vnic = NULL;
646 (mod_hash_val_t *)&vnic) != 0) {
651 if ((rc = dls_devnet_destroy(vnic->vn_mh, &tmpid, B_TRUE)) != 0) {
664 if ((rc = mac_disable(vnic->vn_mh)) != 0) {
665 (void) dls_devnet_create(vnic->vn_mh, vnic_id,
671 vnic_cleanup_secondary_macs(vnic, vnic->vn_nhandles);
673 vnic->vn_enabled = B_FALSE;
675 ASSERT(vnic == (vnic_t *)val);
684 (void) mac_unregister(vnic->vn_mh);
686 if (vnic->vn_lower_mh != NULL) {
688 * Check if MAC address for the vnic was obtained from the
691 if (vnic->vn_addr_type == VNIC_MAC_ADDR_TYPE_FACTORY) {
692 (void) mac_addr_factory_release(vnic->vn_mch,
693 vnic->vn_slot_id);
695 (void) mac_margin_remove(vnic->vn_lower_mh, vnic->vn_margin);
696 (void) mac_mtu_remove(vnic->vn_lower_mh, vnic->vn_mtu);
697 (void) mac_notify_remove(vnic->vn_mnh, B_TRUE);
698 (void) mac_unicast_remove(vnic->vn_mch, vnic->vn_muh);
699 mac_client_close(vnic->vn_mch, MAC_CLOSE_FLAGS_IS_VNIC);
700 mac_close(vnic->vn_lower_mh);
703 kmem_cache_free(vnic_cache, vnic);
735 vnic_t *vnic = arg;
738 if (vnic->vn_lower_mh == NULL) {
767 *val = mac_client_stat_get(vnic->vn_mch, stat);
789 vnic_t *vnic = vnic_arg;
791 return (vnic->vn_mch);
816 vnic_t *vnic = arg;
822 *hcksum_txflags = vnic->vn_hcksum_txflags &
830 if (vnic->vn_lower_mh == NULL) {
839 vnic_capab->mcv_arg = vnic;
849 if (vnic->vn_lower_mh == NULL) {
850 ASSERT(vnic->vn_link_id == 0);
862 if (vnic->vn_vrid != 0) {
864 vrrp_capab->mcv_af = vnic->vn_af;
905 vnic_t *vnic = arg;
907 return (mac_vnic_unicast_set(vnic->vn_mch, macaddr));
936 * Setup secondary MAC addresses on the vnic. Due to limitations in the mac
1179 vnic_t *vnic;
1189 (mod_hash_val_t *)&vnic);
1195 info->vn_link_id = vnic->vn_link_id;
1196 info->vn_mac_addr_type = vnic->vn_addr_type;
1197 info->vn_mac_len = vnic->vn_addr_len;
1198 bcopy(vnic->vn_addr, info->vn_mac_addr, MAXMACADDRLEN);
1199 info->vn_mac_slot = vnic->vn_slot_id;
1201 info->vn_vid = vnic->vn_vid;
1202 info->vn_force = vnic->vn_force;
1203 info->vn_vrid = vnic->vn_vrid;
1204 info->vn_af = vnic->vn_af;
1207 if (vnic->vn_mch != NULL)
1208 mac_client_get_resources(vnic->vn_mch,
1218 vnic_t *vnic = arg;
1221 * Do not deliver notifications if the vnic is not fully initialized
1224 if (!vnic->vn_enabled)
1233 if (vnic->vn_addr_type != VNIC_MAC_ADDR_TYPE_PRIMARY)
1237 mac_unicast_primary_get(vnic->vn_lower_mh, vnic->vn_addr);
1240 mac_unicst_update(vnic->vn_mh, (const uint8_t *)vnic->vn_addr);
1244 mac_link_update(vnic->vn_mh,
1245 mac_client_stat_get(vnic->vn_mch, MAC_STAT_LINK_STATE));