Lines Matching defs:tsock

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