Lines Matching refs:sdev

269 	simnet_dev_t *sdev;  in simnet_dev_lookup()  local
272 for (sdev = list_head(&simnet_dev_list); sdev != NULL; in simnet_dev_lookup()
273 sdev = list_next(&simnet_dev_list, sdev)) { in simnet_dev_lookup()
274 if (!(sdev->sd_flags & SDF_SHUTDOWN) && in simnet_dev_lookup()
275 (sdev->sd_link_id == link_id)) { in simnet_dev_lookup()
276 atomic_inc_32(&sdev->sd_refcount); in simnet_dev_lookup()
277 return (sdev); in simnet_dev_lookup()
285 simnet_wifidev_free(simnet_dev_t *sdev) in simnet_wifidev_free() argument
287 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_wifidev_free()
298 simnet_dev_unref(simnet_dev_t *sdev) in simnet_dev_unref() argument
301 ASSERT(sdev->sd_refcount > 0); in simnet_dev_unref()
302 if (atomic_dec_32_nv(&sdev->sd_refcount) != 0) in simnet_dev_unref()
305 if (sdev->sd_mh != NULL) in simnet_dev_unref()
306 (void) mac_unregister(sdev->sd_mh); in simnet_dev_unref()
308 if (sdev->sd_wifidev != NULL) { in simnet_dev_unref()
309 ASSERT(sdev->sd_type == DL_WIFI); in simnet_dev_unref()
310 simnet_wifidev_free(sdev); in simnet_dev_unref()
313 mutex_destroy(&sdev->sd_instlock); in simnet_dev_unref()
314 cv_destroy(&sdev->sd_threadwait); in simnet_dev_unref()
315 kmem_free(sdev->sd_mcastaddrs, ETHERADDRL * sdev->sd_mcastaddr_count); in simnet_dev_unref()
316 kmem_free(sdev, sizeof (*sdev)); in simnet_dev_unref()
321 simnet_init_wifi(simnet_dev_t *sdev, mac_register_t *mac) in simnet_init_wifi() argument
326 sdev->sd_wifidev = kmem_zalloc(sizeof (simnet_wifidev_t), KM_NOSLEEP); in simnet_init_wifi()
327 if (sdev->sd_wifidev == NULL) in simnet_init_wifi()
330 sdev->sd_wifidev->swd_sdev = sdev; in simnet_init_wifi()
331 sdev->sd_wifidev->swd_linkstatus = WL_NOTCONNECTED; in simnet_init_wifi()
338 err = mac_register(mac, &sdev->sd_mh); in simnet_init_wifi()
343 simnet_init_ether(simnet_dev_t *sdev, mac_register_t *mac) in simnet_init_ether() argument
350 err = mac_register(mac, &sdev->sd_mh); in simnet_init_ether()
355 simnet_init_mac(simnet_dev_t *sdev) in simnet_init_mac() argument
363 mac->m_driver = sdev; in simnet_init_mac()
366 mac->m_src_addr = sdev->sd_mac_addr; in simnet_init_mac()
370 if (sdev->sd_type == DL_ETHER) in simnet_init_mac()
371 err = simnet_init_ether(sdev, mac); in simnet_init_mac()
372 else if (sdev->sd_type == DL_WIFI) in simnet_init_mac()
373 err = simnet_init_wifi(sdev, mac); in simnet_init_mac()
386 simnet_dev_t *sdev; in simnet_ioc_create() local
390 sdev = kmem_zalloc(sizeof (*sdev), KM_NOSLEEP); in simnet_ioc_create()
391 if (sdev == NULL) in simnet_ioc_create()
398 kmem_free(sdev, sizeof (*sdev)); in simnet_ioc_create()
402 sdev->sd_type = create_arg->sic_type; in simnet_ioc_create()
403 sdev->sd_link_id = create_arg->sic_link_id; in simnet_ioc_create()
404 sdev->sd_zoneid = crgetzoneid(cred); in simnet_ioc_create()
405 sdev->sd_refcount++; in simnet_ioc_create()
406 mutex_init(&sdev->sd_instlock, NULL, MUTEX_DRIVER, NULL); in simnet_ioc_create()
407 cv_init(&sdev->sd_threadwait, NULL, CV_DRIVER, NULL); in simnet_ioc_create()
413 (void) random_get_pseudo_bytes(sdev->sd_mac_addr, ETHERADDRL); in simnet_ioc_create()
415 sdev->sd_mac_addr[0] = (sdev->sd_mac_addr[0] & ~1) | 2; in simnet_ioc_create()
416 sdev->sd_mac_len = ETHERADDRL; in simnet_ioc_create()
418 (void) memcpy(sdev->sd_mac_addr, create_arg->sic_mac_addr, in simnet_ioc_create()
420 sdev->sd_mac_len = create_arg->sic_mac_len; in simnet_ioc_create()
423 if ((err = simnet_init_mac(sdev)) != 0) { in simnet_ioc_create()
424 simnet_dev_unref(sdev); in simnet_ioc_create()
428 if ((err = dls_devnet_create(sdev->sd_mh, sdev->sd_link_id, in simnet_ioc_create()
430 simnet_dev_unref(sdev); in simnet_ioc_create()
434 mac_link_update(sdev->sd_mh, LINK_STATE_UP); in simnet_ioc_create()
435 mac_tx_update(sdev->sd_mh); in simnet_ioc_create()
436 list_insert_tail(&simnet_dev_list, sdev); in simnet_ioc_create()
439 (void) memcpy(create_arg->sic_mac_addr, sdev->sd_mac_addr, in simnet_ioc_create()
440 sdev->sd_mac_len); in simnet_ioc_create()
441 create_arg->sic_mac_len = sdev->sd_mac_len; in simnet_ioc_create()
449 simnet_remove_peer(simnet_dev_t *sdev) in simnet_remove_peer() argument
455 if ((sdev_peer = sdev->sd_peer_dev) != NULL) { in simnet_remove_peer()
456 ASSERT(sdev == sdev_peer->sd_peer_dev); in simnet_remove_peer()
458 sdev->sd_peer_dev = NULL; in simnet_remove_peer()
462 simnet_dev_unref(sdev); in simnet_remove_peer()
473 simnet_dev_t *sdev; in simnet_ioc_modify() local
477 if ((sdev = simnet_dev_lookup(modify_arg->sim_link_id)) == NULL) { in simnet_ioc_modify()
482 if (sdev->sd_zoneid != crgetzoneid(cred)) { in simnet_ioc_modify()
484 simnet_dev_unref(sdev); in simnet_ioc_modify()
488 if (sdev->sd_link_id == modify_arg->sim_peer_link_id) { in simnet_ioc_modify()
491 simnet_dev_unref(sdev); in simnet_ioc_modify()
495 if (sdev->sd_peer_dev != NULL && sdev->sd_peer_dev->sd_link_id == in simnet_ioc_modify()
499 simnet_dev_unref(sdev); in simnet_ioc_modify()
508 simnet_dev_unref(sdev); in simnet_ioc_modify()
511 if (sdev_peer->sd_zoneid != sdev->sd_zoneid) { in simnet_ioc_modify()
514 simnet_dev_unref(sdev); in simnet_ioc_modify()
521 (void) simnet_remove_peer(sdev); in simnet_ioc_modify()
527 sdev_peer->sd_peer_dev = sdev; in simnet_ioc_modify()
528 sdev->sd_peer_dev = sdev_peer; in simnet_ioc_modify()
532 simnet_dev_unref(sdev); in simnet_ioc_modify()
544 simnet_dev_t *sdev; in simnet_ioc_delete() local
551 if ((sdev = simnet_dev_lookup(delete_arg->sid_link_id)) == NULL) { in simnet_ioc_delete()
556 if (sdev->sd_zoneid != crgetzoneid(cred)) { in simnet_ioc_delete()
558 simnet_dev_unref(sdev); in simnet_ioc_delete()
562 if ((err = dls_devnet_destroy(sdev->sd_mh, &tmpid, B_TRUE)) != 0) { in simnet_ioc_delete()
564 simnet_dev_unref(sdev); in simnet_ioc_delete()
568 ASSERT(sdev->sd_link_id == tmpid); in simnet_ioc_delete()
570 peerid = simnet_remove_peer(sdev); in simnet_ioc_delete()
573 mutex_enter(&sdev->sd_instlock); in simnet_ioc_delete()
574 sdev->sd_flags |= SDF_SHUTDOWN; in simnet_ioc_delete()
576 while (sdev->sd_threadcount > 0) { in simnet_ioc_delete()
577 if (cv_wait_sig(&sdev->sd_threadwait, in simnet_ioc_delete()
578 &sdev->sd_instlock) == 0) { in simnet_ioc_delete()
580 mutex_exit(&sdev->sd_instlock); in simnet_ioc_delete()
585 mutex_exit(&sdev->sd_instlock); in simnet_ioc_delete()
588 if ((err = mac_disable(sdev->sd_mh)) != 0) in simnet_ioc_delete()
591 list_remove(&simnet_dev_list, sdev); in simnet_ioc_delete()
593 simnet_dev_unref(sdev); /* Release lookup ref */ in simnet_ioc_delete()
595 simnet_dev_unref(sdev); in simnet_ioc_delete()
599 (void) dls_devnet_create(sdev->sd_mh, sdev->sd_link_id, in simnet_ioc_delete()
601 sdev->sd_flags &= ~SDF_SHUTDOWN; in simnet_ioc_delete()
603 ASSERT(sdev->sd_peer_dev == NULL); in simnet_ioc_delete()
608 sdev_peer->sd_peer_dev = sdev; in simnet_ioc_delete()
609 sdev->sd_peer_dev = sdev_peer; in simnet_ioc_delete()
616 simnet_dev_unref(sdev); in simnet_ioc_delete()
628 simnet_dev_t *sdev; in simnet_ioc_info() local
635 if ((sdev = simnet_dev_lookup(info_arg->sii_link_id)) == NULL) { in simnet_ioc_info()
640 (void) memcpy(info_arg->sii_mac_addr, sdev->sd_mac_addr, in simnet_ioc_info()
641 sdev->sd_mac_len); in simnet_ioc_info()
642 info_arg->sii_mac_len = sdev->sd_mac_len; in simnet_ioc_info()
643 info_arg->sii_type = sdev->sd_type; in simnet_ioc_info()
644 if (sdev->sd_peer_dev != NULL) in simnet_ioc_info()
645 info_arg->sii_peer_link_id = sdev->sd_peer_dev->sd_link_id; in simnet_ioc_info()
647 simnet_dev_unref(sdev); in simnet_ioc_info()
652 simnet_thread_ref(simnet_dev_t *sdev) in simnet_thread_ref() argument
654 mutex_enter(&sdev->sd_instlock); in simnet_thread_ref()
655 if (sdev->sd_flags & SDF_SHUTDOWN || in simnet_thread_ref()
656 !(sdev->sd_flags & SDF_STARTED)) { in simnet_thread_ref()
657 mutex_exit(&sdev->sd_instlock); in simnet_thread_ref()
660 sdev->sd_threadcount++; in simnet_thread_ref()
661 mutex_exit(&sdev->sd_instlock); in simnet_thread_ref()
666 simnet_thread_unref(simnet_dev_t *sdev) in simnet_thread_unref() argument
668 mutex_enter(&sdev->sd_instlock); in simnet_thread_unref()
669 if (--sdev->sd_threadcount == 0) in simnet_thread_unref()
670 cv_broadcast(&sdev->sd_threadwait); in simnet_thread_unref()
671 mutex_exit(&sdev->sd_instlock); in simnet_thread_unref()
679 simnet_dev_t *sdev; in simnet_rx() local
681 sdev = (simnet_dev_t *)mp->b_next; in simnet_rx()
685 if (mac_header_info(sdev->sd_mh, mp, &hdr_info) != 0) { in simnet_rx()
687 sdev->sd_stats.recv_errors++; in simnet_rx()
696 if (!sdev->sd_promisc && in simnet_rx()
699 bcmp(hdr_info.mhi_daddr, sdev->sd_mac_addr, in simnet_rx()
704 mutex_enter(&sdev->sd_instlock); in simnet_rx()
705 if (mcastaddr_lookup(sdev, hdr_info.mhi_daddr) == in simnet_rx()
707 mutex_exit(&sdev->sd_instlock); in simnet_rx()
711 mutex_exit(&sdev->sd_instlock); in simnet_rx()
715 sdev->sd_stats.recv_count++; in simnet_rx()
716 sdev->sd_stats.rbytes += msgdsize(mp); in simnet_rx()
717 mac_rx(sdev->sd_mh, NULL, mp); in simnet_rx()
719 simnet_thread_unref(sdev); in simnet_rx()
725 simnet_dev_t *sdev = arg; in simnet_m_tx() local
731 if ((sdev_rx = sdev->sd_peer_dev) == NULL) { in simnet_m_tx()
756 if (!simnet_thread_ref(sdev)) { in simnet_m_tx()
777 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
793 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
800 sdev->sd_stats.xmit_errors++; in simnet_m_tx()
815 sdev->sd_stats.xmit_count++; in simnet_m_tx()
816 sdev->sd_stats.obytes += len; in simnet_m_tx()
825 simnet_thread_unref(sdev); in simnet_m_tx()
831 simnet_wifi_ioctl(simnet_dev_t *sdev, mblk_t *mp) in simnet_wifi_ioctl() argument
834 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_wifi_ioctl()
850 simnet_dev_t *sdev = arg; in simnet_m_ioctl() local
856 if (sdev->sd_type != DL_WIFI) { in simnet_m_ioctl()
885 rc = simnet_wifi_ioctl(sdev, mp1); in simnet_m_ioctl()
893 simnet_dev_t *sdev = arg; in simnet_m_stat() local
895 ASSERT(sdev->sd_mh != NULL); in simnet_m_stat()
905 if (sdev->sd_flags & SDF_STARTED) in simnet_m_stat()
918 *val = sdev->sd_stats.xmit_count; in simnet_m_stat()
921 *val = sdev->sd_stats.obytes; in simnet_m_stat()
924 *val = sdev->sd_stats.recv_errors; in simnet_m_stat()
927 *val = sdev->sd_stats.xmit_errors; in simnet_m_stat()
930 *val = sdev->sd_stats.rbytes; in simnet_m_stat()
933 *val = sdev->sd_stats.recv_count; in simnet_m_stat()
958 simnet_dev_t *sdev = arg; in simnet_m_start() local
960 sdev->sd_flags |= SDF_STARTED; in simnet_m_start()
967 simnet_dev_t *sdev = arg; in simnet_m_stop() local
969 sdev->sd_flags &= ~SDF_STARTED; in simnet_m_stop()
975 simnet_dev_t *sdev = arg; in simnet_m_promisc() local
977 sdev->sd_promisc = on; in simnet_m_promisc()
986 mcastaddr_lookup(simnet_dev_t *sdev, const uint8_t *addrp) in mcastaddr_lookup() argument
991 ASSERT(MUTEX_HELD(&sdev->sd_instlock)); in mcastaddr_lookup()
992 maddrptr = sdev->sd_mcastaddrs; in mcastaddr_lookup()
993 for (idx = 0; idx < sdev->sd_mcastaddr_count; idx++) { in mcastaddr_lookup()
1006 simnet_dev_t *sdev = arg; in simnet_m_multicst() local
1015 prevsize = sdev->sd_mcastaddr_count * ETHERADDRL; in simnet_m_multicst()
1019 mutex_enter(&sdev->sd_instlock); in simnet_m_multicst()
1020 if (prevsize != (sdev->sd_mcastaddr_count * ETHERADDRL)) { in simnet_m_multicst()
1021 mutex_exit(&sdev->sd_instlock); in simnet_m_multicst()
1026 maddrptr = mcastaddr_lookup(sdev, addrp); in simnet_m_multicst()
1031 len = maddrptr - sdev->sd_mcastaddrs; in simnet_m_multicst()
1032 (void) memcpy(newbuf, sdev->sd_mcastaddrs, len); in simnet_m_multicst()
1037 sdev->sd_mcastaddr_count--; in simnet_m_multicst()
1040 (void) memcpy(newbuf, sdev->sd_mcastaddrs, prevsize); in simnet_m_multicst()
1042 sdev->sd_mcastaddr_count++; in simnet_m_multicst()
1045 mutex_exit(&sdev->sd_instlock); in simnet_m_multicst()
1052 kmem_free(sdev->sd_mcastaddrs, prevsize); in simnet_m_multicst()
1053 sdev->sd_mcastaddrs = newbuf; in simnet_m_multicst()
1054 mutex_exit(&sdev->sd_instlock); in simnet_m_multicst()
1061 simnet_dev_t *sdev = arg; in simnet_m_unicst() local
1063 (void) memcpy(sdev->sd_mac_addr, macaddr, ETHERADDRL); in simnet_m_unicst()
1145 simnet_set_priv_prop(simnet_dev_t *sdev, const char *pr_name, in simnet_set_priv_prop() argument
1148 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_set_priv_prop()
1171 simnet_dev_t *sdev = arg; in simnet_m_setprop() local
1172 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_m_setprop()
1180 return (mac_maxsdu_update(sdev->sd_mh, mtu)); in simnet_m_setprop()
1187 if (sdev->sd_type == DL_ETHER) in simnet_m_setprop()
1224 err = simnet_set_priv_prop(sdev, pr_name, in simnet_m_setprop()
1235 simnet_get_priv_prop(simnet_dev_t *sdev, const char *pr_name, in simnet_get_priv_prop() argument
1238 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_get_priv_prop()
1260 simnet_dev_t *sdev = arg; in simnet_m_getprop() local
1261 simnet_wifidev_t *wdev = sdev->sd_wifidev; in simnet_m_getprop()
1265 if (sdev->sd_type == DL_ETHER) in simnet_m_getprop()
1312 err = simnet_get_priv_prop(sdev, pr_name, wldp_length, in simnet_m_getprop()
1342 simnet_dev_t *sdev = arg; in simnet_m_propinfo() local
1344 if (sdev->sd_type == DL_ETHER) in simnet_m_propinfo()