Lines Matching full:sdev
274 simnet_dev_t *sdev; in simnet_dev_lookup() local
277 for (sdev = list_head(&simnet_dev_list); sdev != NULL; in simnet_dev_lookup()
278 sdev = list_next(&simnet_dev_list, sdev)) { in simnet_dev_lookup()
279 if (!(sdev->sd_flags & SDF_SHUTDOWN) && in simnet_dev_lookup()
280 (sdev->sd_link_id == link_id)) { in simnet_dev_lookup()
281 atomic_inc_32(&sdev->sd_refcount); in simnet_dev_lookup()
282 return (sdev); in simnet_dev_lookup()
290 simnet_wifidev_free(simnet_dev_t *sdev) in simnet_wifidev_free() argument
292 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_wifidev_free()
303 simnet_dev_unref(simnet_dev_t *sdev) in simnet_dev_unref() argument
306 ASSERT(sdev->sd_refcount > 0); in simnet_dev_unref()
307 if (atomic_dec_32_nv(&sdev->sd_refcount) != 0) in simnet_dev_unref()
310 if (sdev->sd_mh != NULL) in simnet_dev_unref()
311 (void) mac_unregister(sdev->sd_mh); in simnet_dev_unref()
313 if (sdev->sd_wifidev != NULL) { in simnet_dev_unref()
314 ASSERT(sdev->sd_type == DL_WIFI); in simnet_dev_unref()
315 simnet_wifidev_free(sdev); in simnet_dev_unref()
318 mutex_destroy(&sdev->sd_instlock); in simnet_dev_unref()
319 cv_destroy(&sdev->sd_threadwait); in simnet_dev_unref()
320 kmem_free(sdev, sizeof (*sdev)); in simnet_dev_unref()
325 simnet_init_wifi(simnet_dev_t *sdev, mac_register_t *mac) in simnet_init_wifi() argument
330 sdev->sd_wifidev = kmem_zalloc(sizeof (simnet_wifidev_t), KM_NOSLEEP); in simnet_init_wifi()
331 if (sdev->sd_wifidev == NULL) in simnet_init_wifi()
334 sdev->sd_wifidev->swd_sdev = sdev; in simnet_init_wifi()
335 sdev->sd_wifidev->swd_linkstatus = WL_NOTCONNECTED; in simnet_init_wifi()
342 err = mac_register(mac, &sdev->sd_mh); in simnet_init_wifi()
347 simnet_init_ether(simnet_dev_t *sdev, mac_register_t *mac) in simnet_init_ether() argument
354 err = mac_register(mac, &sdev->sd_mh); in simnet_init_ether()
359 simnet_init_mac(simnet_dev_t *sdev) in simnet_init_mac() argument
367 mac->m_driver = sdev; in simnet_init_mac()
370 mac->m_src_addr = sdev->sd_mac_addr; in simnet_init_mac()
374 if (sdev->sd_type == DL_ETHER) in simnet_init_mac()
375 err = simnet_init_ether(sdev, mac); in simnet_init_mac()
376 else if (sdev->sd_type == DL_WIFI) in simnet_init_mac()
377 err = simnet_init_wifi(sdev, mac); in simnet_init_mac()
390 simnet_dev_t *sdev; in simnet_ioc_create() local
394 sdev = kmem_zalloc(sizeof (*sdev), KM_NOSLEEP); in simnet_ioc_create()
395 if (sdev == NULL) in simnet_ioc_create()
402 kmem_free(sdev, sizeof (*sdev)); in simnet_ioc_create()
406 sdev->sd_ls = LINK_STATE_UNKNOWN; in simnet_ioc_create()
407 sdev->sd_type = create_arg->sic_type; in simnet_ioc_create()
408 sdev->sd_link_id = create_arg->sic_link_id; in simnet_ioc_create()
409 sdev->sd_zoneid = crgetzoneid(cred); in simnet_ioc_create()
410 sdev->sd_refcount++; in simnet_ioc_create()
411 mutex_init(&sdev->sd_instlock, NULL, MUTEX_DRIVER, NULL); in simnet_ioc_create()
412 cv_init(&sdev->sd_threadwait, NULL, CV_DRIVER, NULL); in simnet_ioc_create()
418 (void) random_get_pseudo_bytes(sdev->sd_mac_addr, ETHERADDRL); in simnet_ioc_create()
420 sdev->sd_mac_addr[0] = (sdev->sd_mac_addr[0] & ~1) | 2; in simnet_ioc_create()
421 sdev->sd_mac_len = ETHERADDRL; in simnet_ioc_create()
423 (void) memcpy(sdev->sd_mac_addr, create_arg->sic_mac_addr, in simnet_ioc_create()
425 sdev->sd_mac_len = create_arg->sic_mac_len; in simnet_ioc_create()
428 if ((err = simnet_init_mac(sdev)) != 0) { in simnet_ioc_create()
429 simnet_dev_unref(sdev); in simnet_ioc_create()
433 if ((err = dls_devnet_create(sdev->sd_mh, sdev->sd_link_id, in simnet_ioc_create()
435 simnet_dev_unref(sdev); in simnet_ioc_create()
439 sdev->sd_ls = LINK_STATE_UP; in simnet_ioc_create()
440 mac_link_update(sdev->sd_mh, LINK_STATE_UP); in simnet_ioc_create()
441 mac_tx_update(sdev->sd_mh); in simnet_ioc_create()
442 list_insert_tail(&simnet_dev_list, sdev); in simnet_ioc_create()
445 (void) memcpy(create_arg->sic_mac_addr, sdev->sd_mac_addr, in simnet_ioc_create()
446 sdev->sd_mac_len); in simnet_ioc_create()
447 create_arg->sic_mac_len = sdev->sd_mac_len; in simnet_ioc_create()
455 simnet_remove_peer(simnet_dev_t *sdev) in simnet_remove_peer() argument
461 if ((sdev_peer = sdev->sd_peer_dev) != NULL) { in simnet_remove_peer()
462 ASSERT(sdev == sdev_peer->sd_peer_dev); in simnet_remove_peer()
464 sdev->sd_peer_dev = NULL; in simnet_remove_peer()
468 simnet_dev_unref(sdev); in simnet_remove_peer()
479 simnet_dev_t *sdev; in simnet_ioc_modify() local
483 if ((sdev = simnet_dev_lookup(modify_arg->sim_link_id)) == NULL) { in simnet_ioc_modify()
488 if (sdev->sd_zoneid != crgetzoneid(cred)) { in simnet_ioc_modify()
490 simnet_dev_unref(sdev); in simnet_ioc_modify()
494 if (sdev->sd_link_id == modify_arg->sim_peer_link_id) { in simnet_ioc_modify()
497 simnet_dev_unref(sdev); in simnet_ioc_modify()
501 if (sdev->sd_peer_dev != NULL && sdev->sd_peer_dev->sd_link_id == in simnet_ioc_modify()
505 simnet_dev_unref(sdev); in simnet_ioc_modify()
514 simnet_dev_unref(sdev); in simnet_ioc_modify()
517 if (sdev_peer->sd_zoneid != sdev->sd_zoneid) { in simnet_ioc_modify()
520 simnet_dev_unref(sdev); in simnet_ioc_modify()
527 (void) simnet_remove_peer(sdev); in simnet_ioc_modify()
533 sdev_peer->sd_peer_dev = sdev; in simnet_ioc_modify()
534 sdev->sd_peer_dev = sdev_peer; in simnet_ioc_modify()
537 /* Release sdev lookup reference */ in simnet_ioc_modify()
538 simnet_dev_unref(sdev); in simnet_ioc_modify()
550 simnet_dev_t *sdev; in simnet_ioc_delete() local
557 if ((sdev = simnet_dev_lookup(delete_arg->sid_link_id)) == NULL) { in simnet_ioc_delete()
562 if (sdev->sd_zoneid != crgetzoneid(cred)) { in simnet_ioc_delete()
564 simnet_dev_unref(sdev); in simnet_ioc_delete()
568 if ((err = dls_devnet_destroy(sdev->sd_mh, &tmpid, B_TRUE)) != 0) { in simnet_ioc_delete()
570 simnet_dev_unref(sdev); in simnet_ioc_delete()
574 ASSERT(sdev->sd_link_id == tmpid); in simnet_ioc_delete()
576 peerid = simnet_remove_peer(sdev); in simnet_ioc_delete()
579 mutex_enter(&sdev->sd_instlock); in simnet_ioc_delete()
580 sdev->sd_flags |= SDF_SHUTDOWN; in simnet_ioc_delete()
582 while (sdev->sd_threadcount > 0) { in simnet_ioc_delete()
583 if (cv_wait_sig(&sdev->sd_threadwait, in simnet_ioc_delete()
584 &sdev->sd_instlock) == 0) { in simnet_ioc_delete()
586 mutex_exit(&sdev->sd_instlock); in simnet_ioc_delete()
591 mutex_exit(&sdev->sd_instlock); in simnet_ioc_delete()
594 if ((err = mac_disable(sdev->sd_mh)) != 0) in simnet_ioc_delete()
597 list_remove(&simnet_dev_list, sdev); in simnet_ioc_delete()
599 simnet_dev_unref(sdev); /* Release lookup ref */ in simnet_ioc_delete()
600 /* Releasing the last ref performs sdev/mem free */ in simnet_ioc_delete()
601 simnet_dev_unref(sdev); in simnet_ioc_delete()
605 (void) dls_devnet_create(sdev->sd_mh, sdev->sd_link_id, in simnet_ioc_delete()
607 sdev->sd_flags &= ~SDF_SHUTDOWN; in simnet_ioc_delete()
609 ASSERT(sdev->sd_peer_dev == NULL); in simnet_ioc_delete()
614 sdev_peer->sd_peer_dev = sdev; in simnet_ioc_delete()
615 sdev->sd_peer_dev = sdev_peer; in simnet_ioc_delete()
622 simnet_dev_unref(sdev); in simnet_ioc_delete()
634 simnet_dev_t *sdev; in simnet_ioc_info() local
641 if ((sdev = simnet_dev_lookup(info_arg->sii_link_id)) == NULL) { in simnet_ioc_info()
646 (void) memcpy(info_arg->sii_mac_addr, sdev->sd_mac_addr, in simnet_ioc_info()
647 sdev->sd_mac_len); in simnet_ioc_info()
648 info_arg->sii_mac_len = sdev->sd_mac_len; in simnet_ioc_info()
649 info_arg->sii_type = sdev->sd_type; in simnet_ioc_info()
650 if (sdev->sd_peer_dev != NULL) in simnet_ioc_info()
651 info_arg->sii_peer_link_id = sdev->sd_peer_dev->sd_link_id; in simnet_ioc_info()
653 simnet_dev_unref(sdev); in simnet_ioc_info()
658 simnet_thread_ref(simnet_dev_t *sdev) in simnet_thread_ref() argument
660 mutex_enter(&sdev->sd_instlock); in simnet_thread_ref()
661 if (sdev->sd_flags & SDF_SHUTDOWN || in simnet_thread_ref()
662 !(sdev->sd_flags & SDF_STARTED)) { in simnet_thread_ref()
663 mutex_exit(&sdev->sd_instlock); in simnet_thread_ref()
666 sdev->sd_threadcount++; in simnet_thread_ref()
667 mutex_exit(&sdev->sd_instlock); in simnet_thread_ref()
672 simnet_thread_unref(simnet_dev_t *sdev) in simnet_thread_unref() argument
674 mutex_enter(&sdev->sd_instlock); in simnet_thread_unref()
675 if (--sdev->sd_threadcount == 0) in simnet_thread_unref()
676 cv_broadcast(&sdev->sd_threadwait); in simnet_thread_unref()
677 mutex_exit(&sdev->sd_instlock); in simnet_thread_unref()
691 simnet_dev_t *sdev; in simnet_rx() local
693 sdev = (simnet_dev_t *)mp->b_next; in simnet_rx()
697 if (mac_header_info(sdev->sd_mh, mp, &hdr_info) != 0) { in simnet_rx()
699 sdev->sd_stats.recv_errors++; in simnet_rx()
708 if (!sdev->sd_promisc && in simnet_rx()
711 bcmp(hdr_info.mhi_daddr, sdev->sd_mac_addr, in simnet_rx()
716 mutex_enter(&sdev->sd_instlock); in simnet_rx()
717 if (mcastaddr_lookup(sdev, hdr_info.mhi_daddr) == in simnet_rx()
719 mutex_exit(&sdev->sd_instlock); in simnet_rx()
723 mutex_exit(&sdev->sd_instlock); in simnet_rx()
733 if ((sdev->sd_rx_cksum & HCKSUM_IPHDRCKSUM) != 0) { in simnet_rx()
737 sdev->sd_stats.recv_count++; in simnet_rx()
738 sdev->sd_stats.rbytes += msgdsize(mp); in simnet_rx()
739 mac_rx(sdev->sd_mh, NULL, mp); in simnet_rx()
741 simnet_thread_unref(sdev); in simnet_rx()
749 simnet_dev_t *sdev = arg; in simnet_m_tx() local
756 if ((sdev_rx = sdev->sd_peer_dev) == NULL) { in simnet_m_tx()
781 if (!simnet_thread_ref(sdev)) { in simnet_m_tx()
802 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
818 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
834 if ((sdev->sd_tx_cksum & HCKSUM_IPHDRCKSUM) != 0) in simnet_m_tx()
836 if ((sdev->sd_tx_cksum & SIMNET_ULP_CKSUM) != 0) in simnet_m_tx()
838 if (sdev->sd_lso) in simnet_m_tx()
845 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
859 sdev->sd_stats.xmit_count++; in simnet_m_tx()
860 sdev->sd_stats.obytes += len; in simnet_m_tx()
869 simnet_thread_unref(sdev); in simnet_m_tx()
875 simnet_wifi_ioctl(simnet_dev_t *sdev, mblk_t *mp) in simnet_wifi_ioctl() argument
878 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_wifi_ioctl()
894 simnet_dev_t *sdev = arg; in simnet_m_ioctl() local
900 if (sdev->sd_type != DL_WIFI) { in simnet_m_ioctl()
929 rc = simnet_wifi_ioctl(sdev, mp1); in simnet_m_ioctl()
936 simnet_dev_t *sdev = arg; in simnet_m_getcapab() local
942 *tx_cksum_flags = sdev->sd_tx_cksum; in simnet_m_getcapab()
948 if (sdev->sd_lso && in simnet_m_getcapab()
949 (sdev->sd_tx_cksum & HCKSUM_IPHDRCKSUM) != 0 && in simnet_m_getcapab()
950 (sdev->sd_tx_cksum & tcp_cksums) != 0) { in simnet_m_getcapab()
974 simnet_dev_t *sdev = arg; in simnet_m_stat() local
976 ASSERT(sdev->sd_mh != NULL); in simnet_m_stat()
986 if (sdev->sd_flags & SDF_STARTED) in simnet_m_stat()
999 *val = sdev->sd_stats.xmit_count; in simnet_m_stat()
1002 *val = sdev->sd_stats.obytes; in simnet_m_stat()
1005 *val = sdev->sd_stats.recv_errors; in simnet_m_stat()
1008 *val = sdev->sd_stats.xmit_errors; in simnet_m_stat()
1011 *val = sdev->sd_stats.rbytes; in simnet_m_stat()
1014 *val = sdev->sd_stats.recv_count; in simnet_m_stat()
1039 simnet_dev_t *sdev = arg; in simnet_m_start() local
1041 sdev->sd_flags |= SDF_STARTED; in simnet_m_start()
1048 simnet_dev_t *sdev = arg; in simnet_m_stop() local
1050 sdev->sd_flags &= ~SDF_STARTED; in simnet_m_stop()
1056 simnet_dev_t *sdev = arg; in simnet_m_promisc() local
1058 sdev->sd_promisc = on; in simnet_m_promisc()
1067 mcastaddr_lookup(const simnet_dev_t *sdev, const uint8_t *addrp) in mcastaddr_lookup() argument
1069 ASSERT(MUTEX_HELD(&sdev->sd_instlock)); in mcastaddr_lookup()
1070 for (uint_t i = 0; i < sdev->sd_mcastaddr_count; i++) { in mcastaddr_lookup()
1071 const struct ether_addr *maddrp = &sdev->sd_mcastaddrs[i]; in mcastaddr_lookup()
1083 simnet_multicst_add(simnet_dev_t *sdev, const struct ether_addr *eap) in simnet_multicst_add() argument
1085 ASSERT(MUTEX_HELD(&sdev->sd_instlock)); in simnet_multicst_add()
1091 if (sdev->sd_mcastaddr_count == SM_MAX_NUM_MCAST_ADDRS) { in simnet_multicst_add()
1095 bcopy(eap, &sdev->sd_mcastaddrs[sdev->sd_mcastaddr_count], in simnet_multicst_add()
1097 sdev->sd_mcastaddr_count++; in simnet_multicst_add()
1102 simnet_multicst_rm(simnet_dev_t *sdev, const struct ether_addr *eap) in simnet_multicst_rm() argument
1104 ASSERT(MUTEX_HELD(&sdev->sd_instlock)); in simnet_multicst_rm()
1106 for (uint_t i = 0; i < sdev->sd_mcastaddr_count; i++) { in simnet_multicst_rm()
1107 if (bcmp(eap, &sdev->sd_mcastaddrs[i], sizeof (*eap)) == 0) { in simnet_multicst_rm()
1108 for (i++; i < sdev->sd_mcastaddr_count; i++) { in simnet_multicst_rm()
1109 sdev->sd_mcastaddrs[i - 1] = in simnet_multicst_rm()
1110 sdev->sd_mcastaddrs[i]; in simnet_multicst_rm()
1114 bzero(&sdev->sd_mcastaddrs[i - 1], in simnet_multicst_rm()
1115 sizeof (sdev->sd_mcastaddrs[0])); in simnet_multicst_rm()
1117 sdev->sd_mcastaddr_count--; in simnet_multicst_rm()
1129 simnet_dev_t *sdev = arg; in simnet_m_multicst() local
1134 mutex_enter(&sdev->sd_instlock); in simnet_m_multicst()
1137 ret = simnet_multicst_add(sdev, &ea); in simnet_m_multicst()
1139 ret = simnet_multicst_rm(sdev, &ea); in simnet_m_multicst()
1142 ASSERT3U(sdev->sd_mcastaddr_count, <=, SM_MAX_NUM_MCAST_ADDRS); in simnet_m_multicst()
1143 mutex_exit(&sdev->sd_instlock); in simnet_m_multicst()
1150 simnet_dev_t *sdev = arg; in simnet_m_unicst() local
1152 (void) memcpy(sdev->sd_mac_addr, macaddr, ETHERADDRL); in simnet_m_unicst()
1234 simnet_set_priv_prop_wifi(simnet_dev_t *sdev, const char *name, in simnet_set_priv_prop_wifi() argument
1237 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_set_priv_prop_wifi()
1258 simnet_set_priv_prop_ether(simnet_dev_t *sdev, const char *name, in simnet_set_priv_prop_ether() argument
1266 sdev->sd_rx_cksum &= ~HCKSUM_IPHDRCKSUM; in simnet_set_priv_prop_ether()
1268 sdev->sd_rx_cksum |= HCKSUM_IPHDRCKSUM; in simnet_set_priv_prop_ether()
1283 sdev->sd_tx_cksum &= ~HCKSUM_INET_FULL_V4; in simnet_set_priv_prop_ether()
1285 sdev->sd_tx_cksum &= ~HCKSUM_INET_PARTIAL; in simnet_set_priv_prop_ether()
1286 sdev->sd_tx_cksum |= HCKSUM_INET_FULL_V4; in simnet_set_priv_prop_ether()
1288 sdev->sd_tx_cksum &= HCKSUM_INET_FULL_V4; in simnet_set_priv_prop_ether()
1289 sdev->sd_tx_cksum |= HCKSUM_INET_PARTIAL; in simnet_set_priv_prop_ether()
1300 sdev->sd_tx_cksum &= ~HCKSUM_IPHDRCKSUM; in simnet_set_priv_prop_ether()
1302 sdev->sd_tx_cksum |= HCKSUM_IPHDRCKSUM; in simnet_set_priv_prop_ether()
1313 sdev->sd_lso = B_FALSE; in simnet_set_priv_prop_ether()
1315 sdev->sd_lso = B_TRUE; in simnet_set_priv_prop_ether()
1326 sdev->sd_ls = LINK_STATE_UP; in simnet_set_priv_prop_ether()
1328 sdev->sd_ls = LINK_STATE_DOWN; in simnet_set_priv_prop_ether()
1330 sdev->sd_ls = LINK_STATE_UNKNOWN; in simnet_set_priv_prop_ether()
1334 mac_link_update(sdev->sd_mh, sdev->sd_ls); in simnet_set_priv_prop_ether()
1343 simnet_setprop_wifi(simnet_dev_t *sdev, const char *name, in simnet_setprop_wifi() argument
1347 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_setprop_wifi()
1380 err = simnet_set_priv_prop_wifi(sdev, name, len, val); in simnet_setprop_wifi()
1391 simnet_setprop_ether(simnet_dev_t *sdev, const char *name, in simnet_setprop_ether() argument
1398 err = simnet_set_priv_prop_ether(sdev, name, len, val); in simnet_setprop_ether()
1412 simnet_dev_t *sdev = arg; in simnet_m_setprop() local
1420 return (mac_maxsdu_update(sdev->sd_mh, mtu)); in simnet_m_setprop()
1427 switch (sdev->sd_type) { in simnet_m_setprop()
1429 err = simnet_setprop_ether(sdev, name, num, len, val); in simnet_m_setprop()
1432 err = simnet_setprop_wifi(sdev, name, num, len, val); in simnet_m_setprop()
1444 mac_capab_update(sdev->sd_mh); in simnet_m_setprop()
1449 simnet_get_priv_prop_wifi(const simnet_dev_t *sdev, const char *name, in simnet_get_priv_prop_wifi() argument
1452 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_get_priv_prop_wifi()
1473 simnet_get_priv_prop_ether(const simnet_dev_t *sdev, const char *name, in simnet_get_priv_prop_ether() argument
1480 if ((sdev->sd_rx_cksum & HCKSUM_IPHDRCKSUM) != 0) { in simnet_get_priv_prop_ether()
1486 if ((sdev->sd_tx_cksum & HCKSUM_INET_FULL_V4) != 0) { in simnet_get_priv_prop_ether()
1488 } else if ((sdev->sd_tx_cksum & HCKSUM_INET_PARTIAL) != 0) { in simnet_get_priv_prop_ether()
1494 if ((sdev->sd_tx_cksum & HCKSUM_IPHDRCKSUM) != 0) { in simnet_get_priv_prop_ether()
1500 value = sdev->sd_lso ? "on" : "off"; in simnet_get_priv_prop_ether()
1502 if (sdev->sd_ls == LINK_STATE_UP) { in simnet_get_priv_prop_ether()
1504 } else if (sdev->sd_ls == LINK_STATE_DOWN) { in simnet_get_priv_prop_ether()
1523 simnet_getprop_wifi(const simnet_dev_t *sdev, const char *name, in simnet_getprop_wifi() argument
1526 const simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_getprop_wifi()
1569 err = simnet_get_priv_prop_wifi(sdev, name, len, val); in simnet_getprop_wifi()
1580 simnet_getprop_ether(const simnet_dev_t *sdev, const char *name, in simnet_getprop_ether() argument
1587 err = simnet_get_priv_prop_ether(sdev, name, len, val); in simnet_getprop_ether()
1601 const simnet_dev_t *sdev = arg; in simnet_m_getprop() local
1604 switch (sdev->sd_type) { in simnet_m_getprop()
1606 err = simnet_getprop_ether(sdev, name, num, len, val); in simnet_m_getprop()
1609 err = simnet_getprop_wifi(sdev, name, num, len, val); in simnet_m_getprop()
1690 simnet_dev_t *sdev = arg; in simnet_m_propinfo() local
1692 switch (sdev->sd_type) { in simnet_m_propinfo()