Lines Matching refs:pcb

420 	ng_btsocket_l2cap_pcb_t	*pcb = NULL;  in ng_btsocket_l2cap_process_l2ca_con_req_rsp()  local
431 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
432 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
437 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
443 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
444 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
445 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
446 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
447 pcb->psm, op->lcid, op->result, op->status, in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
448 pcb->state); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
450 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
451 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
457 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
460 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
461 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
468 if((pcb->idtype == NG_L2CAP_L2CA_IDTYPE_ATT)|| in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
469 (pcb->idtype == NG_L2CAP_L2CA_IDTYPE_SMP)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
470 pcb->encryption = op->encryption; pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
471 if(pcb->need_encrypt && !(pcb->encryption)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
472 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
473 pcb->state = NG_BTSOCKET_L2CAP_W4_ENC_CHANGE; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
475 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
476 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
485 pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
486 pcb->encryption = op->encryption; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
487 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
490 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
493 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
494 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
496 pcb->cfg_state = NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
497 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
499 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
509 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
510 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
511 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
513 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
528 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp() local
538 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
539 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
544 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
550 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
551 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
552 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
553 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
554 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
556 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
557 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
563 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
568 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
569 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
570 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
573 pcb->cfg_state = 0; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
574 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
575 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
578 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
595 ng_btsocket_l2cap_pcb_t *pcb = NULL, *pcb1 = NULL; in ng_btsocket_l2cap_process_l2ca_con_ind() local
617 pcb = ng_btsocket_l2cap_pcb_by_addr(&rt->src, ip->psm); in ng_btsocket_l2cap_process_l2ca_con_ind()
618 if (pcb != NULL) { in ng_btsocket_l2cap_process_l2ca_con_ind()
621 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
623 CURVNET_SET(pcb->so->so_vnet); in ng_btsocket_l2cap_process_l2ca_con_ind()
624 so1 = sonewconn(pcb->so, 0); in ng_btsocket_l2cap_process_l2ca_con_ind()
644 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)) != 0) in ng_btsocket_l2cap_process_l2ca_con_ind()
645 bcopy(&pcb->src, &pcb1->src, sizeof(pcb1->src)); in ng_btsocket_l2cap_process_l2ca_con_ind()
657 pcb1->imtu = pcb->imtu; in ng_btsocket_l2cap_process_l2ca_con_ind()
658 bcopy(&pcb->oflow, &pcb1->oflow, sizeof(pcb1->oflow)); in ng_btsocket_l2cap_process_l2ca_con_ind()
659 pcb1->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_process_l2ca_con_ind()
686 if (pcb != NULL) in ng_btsocket_l2cap_process_l2ca_con_ind()
687 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
697 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_enc_change() local
707 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, op->lcid, in ng_btsocket_l2cap_process_l2ca_enc_change()
709 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_enc_change()
714 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
715 pcb->encryption = op->result; in ng_btsocket_l2cap_process_l2ca_enc_change()
717 if(pcb->need_encrypt){ in ng_btsocket_l2cap_process_l2ca_enc_change()
718 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
719 if(pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE){ in ng_btsocket_l2cap_process_l2ca_enc_change()
721 __func__, pcb->state); in ng_btsocket_l2cap_process_l2ca_enc_change()
722 }else if(pcb->encryption){ in ng_btsocket_l2cap_process_l2ca_enc_change()
723 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_enc_change()
724 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
726 pcb->so->so_error = EPERM; in ng_btsocket_l2cap_process_l2ca_enc_change()
727 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
728 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_enc_change()
729 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
732 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
746 ng_btsocket_l2cap_pcb_p pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp() local
761 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
762 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
773 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
780 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
781 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
782 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
783 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
784 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
786 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
787 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
801 pcb->imtu = op->imtu; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
802 bcopy(&op->oflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
803 pcb->flush_timo = op->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
811 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
812 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
814 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
816 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
817 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
818 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
827 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
832 pcb->so->so_error = EINVAL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
836 pcb->so->so_error = ECONNRESET; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
841 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
844 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
845 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
848 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
863 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp() local
874 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
875 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
880 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
887 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
888 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
889 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
890 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
891 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
893 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
894 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
909 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
910 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
912 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
914 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
915 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
916 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
918 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_IN_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
920 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
924 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
928 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
934 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
937 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
940 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
941 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
943 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
958 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_ind() local
969 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_cfg_ind()
971 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
976 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
982 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
983 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
984 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
985 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
986 pcb->psm, pcb->cid, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
989 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
990 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1002 pcb->omtu = ip->omtu; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1003 bcopy(&ip->iflow, &pcb->iflow, sizeof(pcb->iflow)); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1004 pcb->flush_timo = ip->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1011 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_OUT_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1012 error = ng_btsocket_l2cap_send_l2ca_cfg_rsp(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1014 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1016 pcb->so->so_error = error; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1019 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1022 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1023 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1025 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1028 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1043 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_rsp() local
1059 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1060 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1065 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1068 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1073 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1074 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1075 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1076 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1077 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1079 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1081 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1082 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1085 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1100 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_ind() local
1111 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_discon_ind()
1113 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_ind()
1124 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1130 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1131 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1132 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1133 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1134 pcb->psm, pcb->cid, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1136 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_process_l2ca_discon_ind()
1137 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1139 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_ind()
1140 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1142 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1157 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_write_rsp() local
1168 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1169 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1174 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1180 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1181 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1182 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1183 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1184 pcb->psm, pcb->cid, op->result, op->length, in ng_btsocket_l2cap_process_l2ca_write_rsp()
1185 pcb->state); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1187 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1188 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1194 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1199 sbdroprecord(&pcb->so->so_snd); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1200 if (sbavail(&pcb->so->so_snd) > 0) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1201 if (ng_btsocket_l2cap_send2(pcb) == 0) in ng_btsocket_l2cap_process_l2ca_write_rsp()
1202 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1204 sbdroprecord(&pcb->so->so_snd); /* XXX */ in ng_btsocket_l2cap_process_l2ca_write_rsp()
1212 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1213 sowwakeup(pcb->so); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1215 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1226 ng_btsocket_l2cap_send_l2ca_con_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_con_req() argument
1232 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_con_req()
1234 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_con_req()
1235 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_con_req()
1243 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_con_req()
1246 bcopy(&pcb->dst, &ip->bdaddr, sizeof(ip->bdaddr)); in ng_btsocket_l2cap_send_l2ca_con_req()
1247 ip->psm = pcb->psm; in ng_btsocket_l2cap_send_l2ca_con_req()
1248 ip->linktype = ng_btsock_l2cap_addrtype_to_linktype(pcb->dsttype); in ng_btsocket_l2cap_send_l2ca_con_req()
1249 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_con_req()
1250 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_con_req()
1296 ng_btsocket_l2cap_send_l2ca_cfg_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_req() argument
1302 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1304 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_req()
1305 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_req()
1313 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1316 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1317 ip->imtu = pcb->imtu; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1318 bcopy(&pcb->oflow, &ip->oflow, sizeof(ip->oflow)); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1319 ip->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1320 ip->link_timo = pcb->link_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1322 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1332 ng_btsocket_l2cap_send_l2ca_cfg_rsp(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_rsp() argument
1338 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1340 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1341 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1349 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1352 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1353 ip->omtu = pcb->omtu; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1354 bcopy(&pcb->iflow, &ip->iflow, sizeof(ip->iflow)); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1356 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg, pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1367 ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_discon_req() argument
1373 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_discon_req()
1375 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_discon_req()
1376 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_discon_req()
1387 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_discon_req()
1388 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_discon_req()
1390 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_discon_req()
1410 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_data_input() local
1482 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, hdr->dcid,idtype); in ng_btsocket_l2cap_data_input()
1483 if (pcb == NULL) { in ng_btsocket_l2cap_data_input()
1488 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1490 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_data_input()
1496 hdr->dcid, pcb->state); in ng_btsocket_l2cap_data_input()
1498 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1504 if (hdr->length > pcb->imtu) { in ng_btsocket_l2cap_data_input()
1511 hdr->dcid, hdr->length, pcb->imtu); in ng_btsocket_l2cap_data_input()
1513 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1519 if (m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) { in ng_btsocket_l2cap_data_input()
1535 sbspace(&pcb->so->so_rcv)); in ng_btsocket_l2cap_data_input()
1537 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1543 sbappendrecord(&pcb->so->so_rcv, m); in ng_btsocket_l2cap_data_input()
1546 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1548 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1597 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) { in ng_btsocket_l2cap_data_input()
1600 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1602 if (bcmp(&rt->src, &pcb->src, sizeof(pcb->src)) != 0 || in ng_btsocket_l2cap_data_input()
1603 pcb->psm != clt_hdr->psm || in ng_btsocket_l2cap_data_input()
1604 pcb->state != NG_BTSOCKET_L2CAP_OPEN || in ng_btsocket_l2cap_data_input()
1605 (pcb->so->so_options & SO_BROADCAST) == 0 || in ng_btsocket_l2cap_data_input()
1606 m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) in ng_btsocket_l2cap_data_input()
1617 sbappendrecord(&pcb->so->so_rcv, copy); in ng_btsocket_l2cap_data_input()
1618 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1621 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1835 ng_btsocket_l2cap_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_l2cap_rtclean() local
1845 for (pcb = LIST_FIRST(&ng_btsocket_l2cap_sockets); pcb != NULL; ) { in ng_btsocket_l2cap_rtclean()
1846 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1847 pcb_next = LIST_NEXT(pcb, next); in ng_btsocket_l2cap_rtclean()
1849 if (pcb->rt != NULL && in ng_btsocket_l2cap_rtclean()
1850 pcb->rt->hook != NULL && NG_HOOK_NOT_VALID(pcb->rt->hook)) { in ng_btsocket_l2cap_rtclean()
1851 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_rtclean()
1852 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_rtclean()
1854 pcb->so->so_error = ENETDOWN; in ng_btsocket_l2cap_rtclean()
1855 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_rtclean()
1856 soisdisconnected(pcb->so); in ng_btsocket_l2cap_rtclean()
1858 pcb->token = 0; in ng_btsocket_l2cap_rtclean()
1859 pcb->cid = 0; in ng_btsocket_l2cap_rtclean()
1860 pcb->rt = NULL; in ng_btsocket_l2cap_rtclean()
1863 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1864 pcb = pcb_next; in ng_btsocket_l2cap_rtclean()
2000 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_attach() local
2015 if (pcb != NULL) in ng_btsocket_l2cap_attach()
2027 pcb = malloc(sizeof(*pcb), in ng_btsocket_l2cap_attach()
2029 if (pcb == NULL) in ng_btsocket_l2cap_attach()
2033 so->so_pcb = (caddr_t) pcb; in ng_btsocket_l2cap_attach()
2034 pcb->so = so; in ng_btsocket_l2cap_attach()
2035 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_attach()
2038 pcb->imtu = pcb->omtu = NG_L2CAP_MTU_DEFAULT; in ng_btsocket_l2cap_attach()
2041 pcb->iflow.flags = 0x0; in ng_btsocket_l2cap_attach()
2042 pcb->iflow.service_type = NG_HCI_SERVICE_TYPE_BEST_EFFORT; in ng_btsocket_l2cap_attach()
2043 pcb->iflow.token_rate = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2044 pcb->iflow.token_bucket_size = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2045 pcb->iflow.peak_bandwidth = 0x00000000; /* maximum */ in ng_btsocket_l2cap_attach()
2046 pcb->iflow.latency = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2047 pcb->iflow.delay_variation = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2049 bcopy(&pcb->iflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_attach()
2051 pcb->flush_timo = NG_L2CAP_FLUSH_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2052 pcb->link_timo = NG_L2CAP_LINK_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2061 mtx_init(&pcb->pcb_mtx, "btsocks_l2cap_pcb_mtx", NULL, in ng_btsocket_l2cap_attach()
2063 callout_init_mtx(&pcb->timo, &pcb->pcb_mtx, 0); in ng_btsocket_l2cap_attach()
2093 pcb->token = token; in ng_btsocket_l2cap_attach()
2095 LIST_INSERT_HEAD(&ng_btsocket_l2cap_sockets, pcb, next); in ng_btsocket_l2cap_attach()
2111 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_bind() local
2140 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) in ng_btsocket_l2cap_bind()
2141 if (psm != 0 && psm == pcb->psm && in ng_btsocket_l2cap_bind()
2142 bcmp(&pcb->src, &sa->l2cap_bdaddr, sizeof(bdaddr_t)) == 0) in ng_btsocket_l2cap_bind()
2145 if (pcb == NULL) { in ng_btsocket_l2cap_bind()
2147 pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_bind()
2148 if (pcb != NULL) { in ng_btsocket_l2cap_bind()
2149 bcopy(&sa->l2cap_bdaddr, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_bind()
2150 pcb->psm = psm; in ng_btsocket_l2cap_bind()
2169 ng_btsocket_l2cap_pcb_t *pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_connect() local
2177 if (pcb == NULL) in ng_btsocket_l2cap_connect()
2181 if (pcb->state == NG_BTSOCKET_L2CAP_CONNECTING) in ng_btsocket_l2cap_connect()
2215 if (pcb->psm != 0 && pcb->psm != le16toh(sa->l2cap_psm)) in ng_btsocket_l2cap_connect()
2226 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2229 bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst)); in ng_btsocket_l2cap_connect()
2230 pcb->psm = le16toh(sa->l2cap_psm); in ng_btsocket_l2cap_connect()
2231 pcb->dsttype = sa->l2cap_bdaddr_type; in ng_btsocket_l2cap_connect()
2232 pcb->cid = 0; in ng_btsocket_l2cap_connect()
2233 pcb->idtype = idtype; in ng_btsocket_l2cap_connect()
2234 pcb->rt = NULL; in ng_btsocket_l2cap_connect()
2235 have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2243 if (bcmp(&pcb->src, &rt->src, sizeof(rt->src)) == 0) in ng_btsocket_l2cap_connect()
2246 if (bcmp(&pcb->dst, &rt->src, sizeof(rt->src)) != 0) in ng_btsocket_l2cap_connect()
2252 pcb->rt = rt; in ng_btsocket_l2cap_connect()
2255 bcopy(&rt->src, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2256 pcb->srctype = in ng_btsocket_l2cap_connect()
2268 error = ng_btsocket_l2cap_send_l2ca_con_req(pcb); in ng_btsocket_l2cap_connect()
2270 pcb->flags |= NG_BTSOCKET_L2CAP_CLIENT; in ng_btsocket_l2cap_connect()
2271 pcb->state = NG_BTSOCKET_L2CAP_CONNECTING; in ng_btsocket_l2cap_connect()
2272 soisconnecting(pcb->so); in ng_btsocket_l2cap_connect()
2274 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_connect()
2278 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2303 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_ctloutput() local
2307 if (pcb == NULL) in ng_btsocket_l2cap_ctloutput()
2315 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2321 error = sooptcopyout(sopt, &pcb->imtu, in ng_btsocket_l2cap_ctloutput()
2322 sizeof(pcb->imtu)); in ng_btsocket_l2cap_ctloutput()
2326 error = sooptcopyout(sopt, &pcb->omtu, in ng_btsocket_l2cap_ctloutput()
2327 sizeof(pcb->omtu)); in ng_btsocket_l2cap_ctloutput()
2331 error = sooptcopyout(sopt, &pcb->iflow, in ng_btsocket_l2cap_ctloutput()
2332 sizeof(pcb->iflow)); in ng_btsocket_l2cap_ctloutput()
2336 error = sooptcopyout(sopt, &pcb->oflow, in ng_btsocket_l2cap_ctloutput()
2337 sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2341 error = sooptcopyout(sopt, &pcb->flush_timo, in ng_btsocket_l2cap_ctloutput()
2342 sizeof(pcb->flush_timo)); in ng_btsocket_l2cap_ctloutput()
2345 error = sooptcopyout(sopt, &pcb->need_encrypt, in ng_btsocket_l2cap_ctloutput()
2346 sizeof(pcb->need_encrypt)); in ng_btsocket_l2cap_ctloutput()
2365 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_ctloutput()
2374 pcb->imtu = v.mtu; in ng_btsocket_l2cap_ctloutput()
2380 bcopy(&v.flow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2387 pcb->flush_timo = v.flush_timo; in ng_btsocket_l2cap_ctloutput()
2390 if((pcb->state != NG_BTSOCKET_L2CAP_OPEN) && in ng_btsocket_l2cap_ctloutput()
2391 (pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE)){ in ng_btsocket_l2cap_ctloutput()
2395 pcb->need_encrypt = (v.encryption)?1:0; in ng_btsocket_l2cap_ctloutput()
2411 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2423 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_detach() local
2425 KASSERT(pcb != NULL, ("ng_btsocket_l2cap_detach: pcb == NULL")); in ng_btsocket_l2cap_detach()
2431 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2434 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_detach()
2435 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_detach()
2437 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED && in ng_btsocket_l2cap_detach()
2438 pcb->state != NG_BTSOCKET_L2CAP_DISCONNECTING) in ng_btsocket_l2cap_detach()
2440 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_detach()
2442 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_detach()
2444 LIST_REMOVE(pcb, next); in ng_btsocket_l2cap_detach()
2446 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2449 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2450 bzero(pcb, sizeof(*pcb)); in ng_btsocket_l2cap_detach()
2451 free(pcb, M_NETGRAPH_BTSOCKET_L2CAP); in ng_btsocket_l2cap_detach()
2464 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_disconnect() local
2467 if (pcb == NULL) in ng_btsocket_l2cap_disconnect()
2472 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2474 if (pcb->state == NG_BTSOCKET_L2CAP_DISCONNECTING) { in ng_btsocket_l2cap_disconnect()
2475 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2479 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_disconnect()
2481 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_disconnect()
2482 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_disconnect()
2484 error = ng_btsocket_l2cap_send_l2ca_discon_req(pcb->token, pcb); in ng_btsocket_l2cap_disconnect()
2486 pcb->state = NG_BTSOCKET_L2CAP_DISCONNECTING; in ng_btsocket_l2cap_disconnect()
2489 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_disconnect()
2495 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2507 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_listen() local
2514 if (pcb == NULL) { in ng_btsocket_l2cap_listen()
2522 if (pcb->psm == 0) { in ng_btsocket_l2cap_listen()
2539 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_peeraddr() local
2542 if (pcb == NULL) in ng_btsocket_l2cap_peeraddr()
2547 bcopy(&pcb->dst, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); in ng_btsocket_l2cap_peeraddr()
2548 sa.l2cap_psm = htole16(pcb->psm); in ng_btsocket_l2cap_peeraddr()
2551 switch(pcb->idtype){ in ng_btsocket_l2cap_peeraddr()
2562 sa.l2cap_bdaddr_type = pcb->dsttype; in ng_btsocket_l2cap_peeraddr()
2576 ng_btsocket_l2cap_pcb_t *pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_send() local
2585 if (pcb == NULL || m == NULL || control != NULL) { in ng_btsocket_l2cap_send()
2590 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2593 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_send()
2594 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2600 if (pcb->rt == NULL || in ng_btsocket_l2cap_send()
2601 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) { in ng_btsocket_l2cap_send()
2602 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2608 if (m->m_pkthdr.len > pcb->omtu) { in ng_btsocket_l2cap_send()
2610 "%s: Packet too big, len=%d, omtu=%d\n", __func__, m->m_pkthdr.len, pcb->omtu); in ng_btsocket_l2cap_send()
2612 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2624 sbappendrecord(&pcb->so->so_snd, m); in ng_btsocket_l2cap_send()
2627 if (!(pcb->flags & NG_BTSOCKET_L2CAP_TIMO)) { in ng_btsocket_l2cap_send()
2628 error = ng_btsocket_l2cap_send2(pcb); in ng_btsocket_l2cap_send()
2630 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_send()
2632 sbdroprecord(&pcb->so->so_snd); /* XXX */ in ng_btsocket_l2cap_send()
2635 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2648 ng_btsocket_l2cap_send2(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send2() argument
2654 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send2()
2656 if (sbavail(&pcb->so->so_snd) == 0) in ng_btsocket_l2cap_send2()
2659 m = m_dup(pcb->so->so_snd.sb_mb, M_NOWAIT); in ng_btsocket_l2cap_send2()
2677 hdr->token = pcb->token; in ng_btsocket_l2cap_send2()
2679 hdr->lcid = pcb->cid; in ng_btsocket_l2cap_send2()
2680 hdr->idtype = pcb->idtype; in ng_btsocket_l2cap_send2()
2684 hdr->token, pcb->state); in ng_btsocket_l2cap_send2()
2691 NG_SEND_DATA_ONLY(error, pcb->rt->hook, m); in ng_btsocket_l2cap_send2()
2703 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_sockaddr() local
2706 if (pcb == NULL) in ng_btsocket_l2cap_sockaddr()
2711 bcopy(&pcb->src, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); in ng_btsocket_l2cap_sockaddr()
2712 sa.l2cap_psm = htole16(pcb->psm); in ng_btsocket_l2cap_sockaddr()
2716 sa.l2cap_bdaddr_type = pcb->srctype; in ng_btsocket_l2cap_sockaddr()
2805 ng_btsocket_l2cap_timeout(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_timeout() argument
2807 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_timeout()
2809 if (!(pcb->flags & NG_BTSOCKET_L2CAP_TIMO)) { in ng_btsocket_l2cap_timeout()
2810 pcb->flags |= NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_timeout()
2811 callout_reset(&pcb->timo, bluetooth_l2cap_ertx_timeout(), in ng_btsocket_l2cap_timeout()
2812 ng_btsocket_l2cap_process_timeout, pcb); in ng_btsocket_l2cap_timeout()
2823 ng_btsocket_l2cap_untimeout(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_untimeout() argument
2825 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_untimeout()
2827 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) { in ng_btsocket_l2cap_untimeout()
2828 callout_stop(&pcb->timo); in ng_btsocket_l2cap_untimeout()
2829 pcb->flags &= ~NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_untimeout()
2842 ng_btsocket_l2cap_pcb_p pcb = (ng_btsocket_l2cap_pcb_p) xpcb; in ng_btsocket_l2cap_process_timeout() local
2844 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_process_timeout()
2846 pcb->flags &= ~NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_process_timeout()
2847 pcb->so->so_error = ETIMEDOUT; in ng_btsocket_l2cap_process_timeout()
2849 switch (pcb->state) { in ng_btsocket_l2cap_process_timeout()
2854 if (pcb->cid != 0) in ng_btsocket_l2cap_process_timeout()
2855 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_timeout()
2858 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_timeout()
2859 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_timeout()
2864 sbdroprecord(&pcb->so->so_snd); in ng_btsocket_l2cap_process_timeout()
2865 sowwakeup(pcb->so); in ng_btsocket_l2cap_process_timeout()
2870 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_timeout()
2871 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_timeout()
2876 "%s: Invalid socket state=%d\n", __func__, pcb->state); in ng_btsocket_l2cap_process_timeout()