Lines Matching refs:tsock

94 create_trill_header(trill_sock_t *tsock, mblk_t *mp, const uint8_t *daddr,  in create_trill_header()  argument
106 if (tci == tsock->ts_link->bl_pvid) in create_trill_header()
115 hdr_mp = mac_header(tsock->ts_link->bl_mh, daddr, in create_trill_header()
151 trill_recv_local(trill_sock_t *tsock, mblk_t *mp, uint16_t ingressnick) in trill_recv_local() argument
164 bridge_trill_decaps(tsock->ts_link, mp, ingressnick); in trill_recv_local()
199 trill_sock_t *tsock = NULL; in trill_dest_fwd() local
206 if (adj == NULL || ((tsock = adj->tn_tsp) == NULL)) in trill_dest_fwd()
209 ASSERT(tsock->ts_link != NULL); in trill_dest_fwd()
210 ASSERT(!(tsock->ts_flags & TSF_SHUTDOWN)); in trill_dest_fwd()
214 adj, trill_sock_t, tsock); in trill_dest_fwd()
222 fwd_mp = create_trill_header(tsock, fwd_mp, adj->tn_ni->tni_adjsnpa, in trill_dest_fwd()
223 has_trill_hdr, multidest, tsock->ts_desigvlan, 0); in trill_dest_fwd()
258 fwd_mp = bridge_trill_output(tsock->ts_link, fwd_mp); in trill_dest_fwd()
272 if (tsock != NULL) in trill_dest_fwd()
376 trill_recv(trill_sock_t *tsock, mblk_t *mp, const uint8_t *mpsaddr) in trill_recv() argument
384 trill_inst_t *tip = tsock->ts_tip; in trill_recv()
475 trill_recv_local(tsock, mp, trillhdr->th_ingressnick); in trill_recv()
563 trill_recv_local(tsock, mp, trillhdr->th_ingressnick); in trill_recv()
569 trill_sock_t *, tsock); in trill_recv()
579 trill_stop_recv(trill_sock_t *tsock) in trill_stop_recv() argument
581 mutex_enter(&tsock->ts_socklock); in trill_stop_recv()
583 if (tsock->ts_state == TS_UNBND || tsock->ts_link == NULL) { in trill_stop_recv()
584 mutex_exit(&tsock->ts_socklock); in trill_stop_recv()
592 if (tsock->ts_flags & TSF_CLOSEWAIT) { in trill_stop_recv()
593 cv_wait(&tsock->ts_sockclosewait, &tsock->ts_socklock); in trill_stop_recv()
601 tsock->ts_flags |= TSF_CLOSEWAIT; in trill_stop_recv()
604 while (tsock->ts_sockthreadcount > 0) in trill_stop_recv()
605 cv_wait(&tsock->ts_sockthreadwait, &tsock->ts_socklock); in trill_stop_recv()
612 ASSERT(tsock->ts_link != NULL); in trill_stop_recv()
613 if (tsock->ts_ksp != NULL) in trill_stop_recv()
614 kstat_delete(tsock->ts_ksp); in trill_stop_recv()
621 mutex_exit(&tsock->ts_socklock); in trill_stop_recv()
628 bridge_trill_lnunref(tsock->ts_link); in trill_stop_recv()
631 mutex_enter(&tsock->ts_socklock); in trill_stop_recv()
632 ASSERT(tsock->ts_link != NULL); in trill_stop_recv()
633 tsock->ts_link = NULL; in trill_stop_recv()
634 tsock->ts_state = TS_UNBND; in trill_stop_recv()
635 tsock->ts_flags &= ~TSF_CLOSEWAIT; in trill_stop_recv()
636 cv_broadcast(&tsock->ts_sockclosewait); in trill_stop_recv()
637 mutex_exit(&tsock->ts_socklock); in trill_stop_recv()
641 trill_start_recv(trill_sock_t *tsock, const struct sockaddr *sa, socklen_t len) in trill_start_recv() argument
650 mutex_enter(&tsock->ts_socklock); in trill_start_recv()
651 if (tsock->ts_tip == NULL || tsock->ts_state != TS_UNBND) { in trill_start_recv()
656 if (tsock->ts_flags & TSF_CLOSEWAIT || tsock->ts_link != NULL) { in trill_start_recv()
661 (void) memcpy(&(tsock->ts_lladdr), lladdr, in trill_start_recv()
663 (void) memcpy(&linkid, tsock->ts_lladdr.sdl_data, in trill_start_recv()
666 tsock->ts_link = bridge_trill_lnref(tsock->ts_tip->ti_binst, in trill_start_recv()
667 linkid, tsock); in trill_start_recv()
668 if (tsock->ts_link == NULL) { in trill_start_recv()
673 trill_kstats_init(tsock, tsock->ts_tip->ti_bridgename); in trill_start_recv()
674 tsock->ts_state = TS_IDLE; in trill_start_recv()
677 mutex_exit(&tsock->ts_socklock); in trill_start_recv()
682 trill_do_unbind(trill_sock_t *tsock) in trill_do_unbind() argument
685 if (tsock->ts_state != TS_IDLE) in trill_do_unbind()
688 trill_stop_recv(tsock); in trill_do_unbind()
726 trill_sock_t *tsock = lptr; in trill_recv_pkt_cb() local
730 ASSERT(tsock->ts_tip != NULL); in trill_recv_pkt_cb()
731 ASSERT(tsock->ts_link != NULL); in trill_recv_pkt_cb()
732 ASSERT(!(tsock->ts_flags & TSF_SHUTDOWN)); in trill_recv_pkt_cb()
754 trill_recv(tsock, mp, hdr_info->mhi_saddr); in trill_recv_pkt_cb()
759 trill_ctrl_input(tsock, mp, hdr_info->mhi_saddr, in trill_recv_pkt_cb()
787 trill_sock_t *tsock = lptr; in trill_encap_pkt_cb() local
788 trill_inst_t *tip = tsock->ts_tip; in trill_encap_pkt_cb()
881 trill_sock_t *tsock = lptr; in trill_ln_dstr_cb() local
884 trill_stop_recv(tsock); in trill_ln_dstr_cb()
937 trill_kstats_init(trill_sock_t *tsock, const char *bname) in trill_kstats_init() argument
948 if ((err = dls_mgmt_get_linkinfo(tsock->ts_link->bl_linkid, link_name, in trill_kstats_init()
952 tsock->ts_link->bl_linkid); in trill_kstats_init()
962 knt = (kstat_named_t *)&(tsock->ts_kstats); in trill_kstats_init()
967 tsock->ts_ksp = kstat_create_zone("trill", 0, kstatname, "sock", in trill_kstats_init()
969 if (tsock->ts_ksp != NULL) { in trill_kstats_init()
970 tsock->ts_ksp->ks_data = &tsock->ts_kstats; in trill_kstats_init()
971 kstat_install(tsock->ts_ksp); in trill_kstats_init()
978 trill_sock_t *tsock; in trill_do_open() local
981 tsock = kmem_zalloc(sizeof (trill_sock_t), kmflag); in trill_do_open()
982 if (tsock != NULL) { in trill_do_open()
983 tsock->ts_state = TS_UNBND; in trill_do_open()
984 tsock->ts_refs++; in trill_do_open()
985 mutex_init(&tsock->ts_socklock, NULL, MUTEX_DRIVER, NULL); in trill_do_open()
986 cv_init(&tsock->ts_sockthreadwait, NULL, CV_DRIVER, NULL); in trill_do_open()
987 cv_init(&tsock->ts_sockclosewait, NULL, CV_DRIVER, NULL); in trill_do_open()
989 return (tsock); in trill_do_open()
993 trill_find_bridge(trill_sock_t *tsock, const char *bname, boolean_t can_create) in trill_find_bridge() argument
1038 list_insert_tail(&(tip->ti_socklist), tsock); in trill_find_bridge()
1039 tsock->ts_tip = tip; in trill_find_bridge()
1045 trill_clear_bridge(trill_sock_t *tsock) in trill_clear_bridge() argument
1049 if ((tip = tsock->ts_tip) == NULL) in trill_clear_bridge()
1052 list_remove(&tip->ti_socklist, tsock); in trill_clear_bridge()
1059 trill_sock_unref(trill_sock_t *tsock) in trill_sock_unref() argument
1061 if (atomic_dec_uint_nv(&tsock->ts_refs) == 0) { in trill_sock_unref()
1062 mutex_destroy(&tsock->ts_socklock); in trill_sock_unref()
1063 cv_destroy(&tsock->ts_sockthreadwait); in trill_sock_unref()
1064 cv_destroy(&tsock->ts_sockclosewait); in trill_sock_unref()
1065 kmem_free(tsock, sizeof (trill_sock_t)); in trill_sock_unref()
1070 trill_do_close(trill_sock_t *tsock) in trill_do_close() argument
1074 tip = tsock->ts_tip; in trill_do_close()
1075 trill_stop_recv(tsock); in trill_do_close()
1077 trill_clear_bridge(tsock); in trill_do_close()
1078 tsock->ts_flags |= TSF_SHUTDOWN; in trill_do_close()
1079 trill_sock_unref(tsock); in trill_do_close()
1207 trill_do_ioctl(trill_sock_t *tsock, int cmd, void *arg, int mode) in trill_do_ioctl() argument
1210 trill_inst_t *tip = tsock->ts_tip; in trill_do_ioctl()
1218 tsock->ts_desigvlan = desigvlan; in trill_do_ioctl()
1224 if (tsock->ts_link == NULL) in trill_do_ioctl()
1228 bridge_trill_setvlans(tsock->ts_link, vlans); in trill_do_ioctl()
1284 if (tsock->ts_link == NULL) in trill_do_ioctl()
1286 if (ddi_copyout(tsock->ts_link->bl_local_mac, arg, ETHERADDRL, in trill_do_ioctl()
1294 if (tsock->ts_state != TS_UNBND) in trill_do_ioctl()
1302 error = trill_find_bridge(tsock, bname, B_TRUE); in trill_do_ioctl()
1315 error = trill_find_bridge(tsock, bname, B_FALSE); in trill_do_ioctl()
1369 if (tsock->ts_link == NULL) in trill_do_ioctl()
1371 bridge_trill_flush(tsock->ts_link, vlan, B_FALSE); in trill_do_ioctl()
1383 if (tsock->ts_link == NULL) in trill_do_ioctl()
1385 bridge_trill_flush(tsock->ts_link, vlan, B_TRUE); in trill_do_ioctl()
1390 if (tsock->ts_link == NULL) in trill_do_ioctl()
1392 if (ddi_copyout(&tsock->ts_link->bl_maxsdu, arg, in trill_do_ioctl()
1410 trill_ctrl_input(trill_sock_t *tsock, mblk_t *mp, const uint8_t *saddr, in trill_ctrl_input() argument
1420 ASSERT(!(tsock->ts_flags & TSF_SHUTDOWN)); in trill_ctrl_input()
1421 if (tsock->ts_flow_ctrld) { in trill_ctrl_input()
1456 *(datalink_id_t *)sdl->sdl_data = tsock->ts_link->bl_linkid; in trill_ctrl_input()
1457 sdl->sdl_nlen = sizeof (tsock->ts_link->bl_linkid); in trill_ctrl_input()
1468 DTRACE_PROBE2(trill__ctrl__input, trill_sock_t *, tsock, mblk_t *, mp); in trill_ctrl_input()
1469 (*tsock->ts_conn_upcalls->su_recv)(tsock->ts_conn_upper_handle, in trill_ctrl_input()
1473 mutex_enter(&tsock->ts_socklock); in trill_ctrl_input()
1474 (*tsock->ts_conn_upcalls->su_recv)(tsock->ts_conn_upper_handle, in trill_ctrl_input()
1477 tsock->ts_flow_ctrld = B_TRUE; in trill_ctrl_input()
1478 mutex_exit(&tsock->ts_socklock); in trill_ctrl_input()
1487 tsock, int, error); in trill_ctrl_input()
1496 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_activate() local
1499 tsock->ts_conn_upcalls = sock_upcalls; in trill_activate()
1500 tsock->ts_conn_upper_handle = sock_handle; in trill_activate()
1512 (*tsock->ts_conn_upcalls->su_set_proto_props)( in trill_activate()
1513 tsock->ts_conn_upper_handle, &sopp); in trill_activate()
1520 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_close() local
1522 trill_do_close(tsock); in trill_close()
1532 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_bind() local
1535 error = trill_do_unbind(tsock); in trill_bind()
1537 error = trill_start_recv(tsock, sa, len); in trill_bind()
1547 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_send() local
1552 ASSERT(!(tsock->ts_flags & TSF_SHUTDOWN)); in trill_send()
1567 mutex_enter(&tsock->ts_socklock); in trill_send()
1568 if (tsock->ts_state != TS_IDLE || tsock->ts_link == NULL) { in trill_send()
1569 mutex_exit(&tsock->ts_socklock); in trill_send()
1572 atomic_inc_uint(&tsock->ts_sockthreadcount); in trill_send()
1573 mutex_exit(&tsock->ts_socklock); in trill_send()
1586 mp = create_trill_header(tsock, mp, (const uchar_t *)LLADDR(laddr), in trill_send()
1589 mp = bridge_trill_output(tsock->ts_link, mp); in trill_send()
1599 if (atomic_dec_uint_nv(&tsock->ts_sockthreadcount) == 0) in trill_send()
1600 cv_broadcast(&tsock->ts_sockthreadwait); in trill_send()
1614 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_ioctl() local
1630 mutex_enter(&tsock->ts_socklock); in trill_ioctl()
1631 rc = trill_do_ioctl(tsock, cmd, (void *)arg, mode); in trill_ioctl()
1632 mutex_exit(&tsock->ts_socklock); in trill_ioctl()
1639 trill_sock_t *tsock = (trill_sock_t *)proto_handle; in trill_clr_flowctrl() local
1641 mutex_enter(&tsock->ts_socklock); in trill_clr_flowctrl()
1642 tsock->ts_flow_ctrld = B_FALSE; in trill_clr_flowctrl()
1643 mutex_exit(&tsock->ts_socklock); in trill_clr_flowctrl()
1671 trill_sock_t *tsock; in trill_create() local
1680 tsock = trill_do_open(flags); in trill_create()
1681 *errorp = (tsock != NULL) ? 0:ENOMEM; in trill_create()
1682 return ((sock_lower_handle_t)tsock); in trill_create()