Lines Matching refs:pcb

418 	ng_btsocket_l2cap_pcb_t	*pcb = NULL;  in ng_btsocket_l2cap_process_l2ca_con_req_rsp()  local
429 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
430 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
435 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
441 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
442 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
443 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
444 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
445 pcb->psm, op->lcid, op->result, op->status, in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
446 pcb->state); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
448 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
449 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
455 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
458 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
459 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
466 if((pcb->idtype == NG_L2CAP_L2CA_IDTYPE_ATT)|| in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
467 (pcb->idtype == NG_L2CAP_L2CA_IDTYPE_SMP)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
468 pcb->encryption = op->encryption; pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
469 if(pcb->need_encrypt && !(pcb->encryption)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
470 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
471 pcb->state = NG_BTSOCKET_L2CAP_W4_ENC_CHANGE; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
473 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
474 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
483 pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
484 pcb->encryption = op->encryption; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
485 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
488 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
491 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
492 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
494 pcb->cfg_state = NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
495 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
497 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
507 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
508 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
509 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
511 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
526 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp() local
536 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
537 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
542 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
548 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
549 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
550 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
551 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
552 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
554 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
555 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
561 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
566 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
567 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
568 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
571 pcb->cfg_state = 0; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
572 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
573 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
576 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
593 ng_btsocket_l2cap_pcb_t *pcb = NULL, *pcb1 = NULL; in ng_btsocket_l2cap_process_l2ca_con_ind() local
615 pcb = ng_btsocket_l2cap_pcb_by_addr(&rt->src, ip->psm); in ng_btsocket_l2cap_process_l2ca_con_ind()
616 if (pcb != NULL) { in ng_btsocket_l2cap_process_l2ca_con_ind()
619 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
621 CURVNET_SET(pcb->so->so_vnet); in ng_btsocket_l2cap_process_l2ca_con_ind()
622 so1 = sonewconn(pcb->so, 0); in ng_btsocket_l2cap_process_l2ca_con_ind()
642 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)) != 0) in ng_btsocket_l2cap_process_l2ca_con_ind()
643 bcopy(&pcb->src, &pcb1->src, sizeof(pcb1->src)); in ng_btsocket_l2cap_process_l2ca_con_ind()
655 pcb1->imtu = pcb->imtu; in ng_btsocket_l2cap_process_l2ca_con_ind()
656 bcopy(&pcb->oflow, &pcb1->oflow, sizeof(pcb1->oflow)); in ng_btsocket_l2cap_process_l2ca_con_ind()
657 pcb1->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_process_l2ca_con_ind()
684 if (pcb != NULL) in ng_btsocket_l2cap_process_l2ca_con_ind()
685 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
695 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_enc_change() local
704 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, op->lcid, in ng_btsocket_l2cap_process_l2ca_enc_change()
706 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_enc_change()
711 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
712 pcb->encryption = op->result; in ng_btsocket_l2cap_process_l2ca_enc_change()
714 if(pcb->need_encrypt){ in ng_btsocket_l2cap_process_l2ca_enc_change()
715 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
716 if(pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE){ in ng_btsocket_l2cap_process_l2ca_enc_change()
718 __func__, pcb->state); in ng_btsocket_l2cap_process_l2ca_enc_change()
719 }else if(pcb->encryption){ in ng_btsocket_l2cap_process_l2ca_enc_change()
720 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_enc_change()
721 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
723 pcb->so->so_error = EPERM; in ng_btsocket_l2cap_process_l2ca_enc_change()
724 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
725 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_enc_change()
726 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
729 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
743 ng_btsocket_l2cap_pcb_p pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp() local
758 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
759 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
770 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
777 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
778 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
779 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
780 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
781 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
783 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
784 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
798 pcb->imtu = op->imtu; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
799 bcopy(&op->oflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
800 pcb->flush_timo = op->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
808 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
809 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
811 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
813 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
814 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
815 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
824 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
829 pcb->so->so_error = EINVAL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
833 pcb->so->so_error = ECONNRESET; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
838 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
841 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
842 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
845 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
860 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp() local
871 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
872 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
877 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
884 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
885 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
886 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
887 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
888 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
890 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
891 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
906 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
907 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
909 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
911 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
912 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
913 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
915 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_IN_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
917 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
921 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
925 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
931 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
934 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
937 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
938 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
940 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
955 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_ind() local
966 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_cfg_ind()
968 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
973 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
979 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
980 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
981 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
982 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
983 pcb->psm, pcb->cid, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
986 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
987 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
999 pcb->omtu = ip->omtu; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1000 bcopy(&ip->iflow, &pcb->iflow, sizeof(pcb->iflow)); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1001 pcb->flush_timo = ip->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1008 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_OUT_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1009 error = ng_btsocket_l2cap_send_l2ca_cfg_rsp(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1011 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1013 pcb->so->so_error = error; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1016 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1019 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1020 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1022 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1025 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1040 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_rsp() local
1056 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1057 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1062 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1065 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1070 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1071 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1072 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1073 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1074 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1076 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1078 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1079 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1082 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1097 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_ind() local
1108 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_discon_ind()
1110 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_ind()
1121 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1127 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1128 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1129 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1130 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1131 pcb->psm, pcb->cid, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1133 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_process_l2ca_discon_ind()
1134 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1136 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_ind()
1137 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1139 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1154 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_write_rsp() local
1165 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1166 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1171 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1177 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1178 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1179 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1180 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1181 pcb->psm, pcb->cid, op->result, op->length, in ng_btsocket_l2cap_process_l2ca_write_rsp()
1182 pcb->state); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1184 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1185 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1191 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1196 sbdroprecord(&pcb->so->so_snd); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1197 if (sbavail(&pcb->so->so_snd) > 0) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1198 if (ng_btsocket_l2cap_send2(pcb) == 0) in ng_btsocket_l2cap_process_l2ca_write_rsp()
1199 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1201 sbdroprecord(&pcb->so->so_snd); /* XXX */ in ng_btsocket_l2cap_process_l2ca_write_rsp()
1209 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1210 sowwakeup(pcb->so); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1212 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1223 ng_btsocket_l2cap_send_l2ca_con_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_con_req() argument
1229 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_con_req()
1231 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_con_req()
1232 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_con_req()
1240 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_con_req()
1243 bcopy(&pcb->dst, &ip->bdaddr, sizeof(ip->bdaddr)); in ng_btsocket_l2cap_send_l2ca_con_req()
1244 ip->psm = pcb->psm; in ng_btsocket_l2cap_send_l2ca_con_req()
1245 ip->linktype = ng_btsock_l2cap_addrtype_to_linktype(pcb->dsttype); in ng_btsocket_l2cap_send_l2ca_con_req()
1246 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_con_req()
1247 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_con_req()
1293 ng_btsocket_l2cap_send_l2ca_cfg_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_req() argument
1299 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1301 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_req()
1302 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_req()
1310 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1313 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1314 ip->imtu = pcb->imtu; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1315 bcopy(&pcb->oflow, &ip->oflow, sizeof(ip->oflow)); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1316 ip->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1317 ip->link_timo = pcb->link_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1319 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1329 ng_btsocket_l2cap_send_l2ca_cfg_rsp(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_rsp() argument
1335 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1337 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1338 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1346 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1349 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1350 ip->omtu = pcb->omtu; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1351 bcopy(&pcb->iflow, &ip->iflow, sizeof(ip->iflow)); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1353 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg, pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1364 ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_discon_req() argument
1370 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_discon_req()
1372 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_discon_req()
1373 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_discon_req()
1384 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_discon_req()
1385 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_discon_req()
1387 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_discon_req()
1407 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_data_input() local
1478 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, hdr->dcid,idtype); in ng_btsocket_l2cap_data_input()
1479 if (pcb == NULL) { in ng_btsocket_l2cap_data_input()
1484 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1486 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_data_input()
1492 hdr->dcid, pcb->state); in ng_btsocket_l2cap_data_input()
1494 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1500 if (hdr->length > pcb->imtu) { in ng_btsocket_l2cap_data_input()
1507 hdr->dcid, hdr->length, pcb->imtu); in ng_btsocket_l2cap_data_input()
1509 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1515 if (m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) { in ng_btsocket_l2cap_data_input()
1530 sbspace(&pcb->so->so_rcv)); in ng_btsocket_l2cap_data_input()
1532 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1538 sbappendrecord(&pcb->so->so_rcv, m); in ng_btsocket_l2cap_data_input()
1541 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1543 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1592 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) { in ng_btsocket_l2cap_data_input()
1595 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1597 if (bcmp(&rt->src, &pcb->src, sizeof(pcb->src)) != 0 || in ng_btsocket_l2cap_data_input()
1598 pcb->psm != clt_hdr->psm || in ng_btsocket_l2cap_data_input()
1599 pcb->state != NG_BTSOCKET_L2CAP_OPEN || in ng_btsocket_l2cap_data_input()
1600 (pcb->so->so_options & SO_BROADCAST) == 0 || in ng_btsocket_l2cap_data_input()
1601 m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) in ng_btsocket_l2cap_data_input()
1612 sbappendrecord(&pcb->so->so_rcv, copy); in ng_btsocket_l2cap_data_input()
1613 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1616 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1830 ng_btsocket_l2cap_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_l2cap_rtclean() local
1840 for (pcb = LIST_FIRST(&ng_btsocket_l2cap_sockets); pcb != NULL; ) { in ng_btsocket_l2cap_rtclean()
1841 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1842 pcb_next = LIST_NEXT(pcb, next); in ng_btsocket_l2cap_rtclean()
1844 if (pcb->rt != NULL && in ng_btsocket_l2cap_rtclean()
1845 pcb->rt->hook != NULL && NG_HOOK_NOT_VALID(pcb->rt->hook)) { in ng_btsocket_l2cap_rtclean()
1846 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_rtclean()
1847 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_rtclean()
1849 pcb->so->so_error = ENETDOWN; in ng_btsocket_l2cap_rtclean()
1850 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_rtclean()
1851 soisdisconnected(pcb->so); in ng_btsocket_l2cap_rtclean()
1853 pcb->token = 0; in ng_btsocket_l2cap_rtclean()
1854 pcb->cid = 0; in ng_btsocket_l2cap_rtclean()
1855 pcb->rt = NULL; in ng_btsocket_l2cap_rtclean()
1858 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1859 pcb = pcb_next; in ng_btsocket_l2cap_rtclean()
1995 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_attach() local
2010 if (pcb != NULL) in ng_btsocket_l2cap_attach()
2022 pcb = malloc(sizeof(*pcb), in ng_btsocket_l2cap_attach()
2024 if (pcb == NULL) in ng_btsocket_l2cap_attach()
2028 so->so_pcb = (caddr_t) pcb; in ng_btsocket_l2cap_attach()
2029 pcb->so = so; in ng_btsocket_l2cap_attach()
2030 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_attach()
2033 pcb->imtu = pcb->omtu = NG_L2CAP_MTU_DEFAULT; in ng_btsocket_l2cap_attach()
2036 pcb->iflow.flags = 0x0; in ng_btsocket_l2cap_attach()
2037 pcb->iflow.service_type = NG_HCI_SERVICE_TYPE_BEST_EFFORT; in ng_btsocket_l2cap_attach()
2038 pcb->iflow.token_rate = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2039 pcb->iflow.token_bucket_size = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2040 pcb->iflow.peak_bandwidth = 0x00000000; /* maximum */ in ng_btsocket_l2cap_attach()
2041 pcb->iflow.latency = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2042 pcb->iflow.delay_variation = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2044 bcopy(&pcb->iflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_attach()
2046 pcb->flush_timo = NG_L2CAP_FLUSH_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2047 pcb->link_timo = NG_L2CAP_LINK_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2056 mtx_init(&pcb->pcb_mtx, "btsocks_l2cap_pcb_mtx", NULL, in ng_btsocket_l2cap_attach()
2058 callout_init_mtx(&pcb->timo, &pcb->pcb_mtx, 0); in ng_btsocket_l2cap_attach()
2088 pcb->token = token; in ng_btsocket_l2cap_attach()
2090 LIST_INSERT_HEAD(&ng_btsocket_l2cap_sockets, pcb, next); in ng_btsocket_l2cap_attach()
2106 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_bind() local
2135 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) in ng_btsocket_l2cap_bind()
2136 if (psm != 0 && psm == pcb->psm && in ng_btsocket_l2cap_bind()
2137 bcmp(&pcb->src, &sa->l2cap_bdaddr, sizeof(bdaddr_t)) == 0) in ng_btsocket_l2cap_bind()
2140 if (pcb == NULL) { in ng_btsocket_l2cap_bind()
2142 pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_bind()
2143 if (pcb != NULL) { in ng_btsocket_l2cap_bind()
2144 bcopy(&sa->l2cap_bdaddr, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_bind()
2145 pcb->psm = psm; in ng_btsocket_l2cap_bind()
2164 ng_btsocket_l2cap_pcb_t *pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_connect() local
2172 if (pcb == NULL) in ng_btsocket_l2cap_connect()
2176 if (pcb->state == NG_BTSOCKET_L2CAP_CONNECTING) in ng_btsocket_l2cap_connect()
2210 if (pcb->psm != 0 && pcb->psm != le16toh(sa->l2cap_psm)) in ng_btsocket_l2cap_connect()
2221 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2224 bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst)); in ng_btsocket_l2cap_connect()
2225 pcb->psm = le16toh(sa->l2cap_psm); in ng_btsocket_l2cap_connect()
2226 pcb->dsttype = sa->l2cap_bdaddr_type; in ng_btsocket_l2cap_connect()
2227 pcb->cid = 0; in ng_btsocket_l2cap_connect()
2228 pcb->idtype = idtype; in ng_btsocket_l2cap_connect()
2229 pcb->rt = NULL; in ng_btsocket_l2cap_connect()
2230 have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2238 if (bcmp(&pcb->src, &rt->src, sizeof(rt->src)) == 0) in ng_btsocket_l2cap_connect()
2241 if (bcmp(&pcb->dst, &rt->src, sizeof(rt->src)) != 0) in ng_btsocket_l2cap_connect()
2247 pcb->rt = rt; in ng_btsocket_l2cap_connect()
2250 bcopy(&rt->src, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2251 pcb->srctype = in ng_btsocket_l2cap_connect()
2263 error = ng_btsocket_l2cap_send_l2ca_con_req(pcb); in ng_btsocket_l2cap_connect()
2265 pcb->flags |= NG_BTSOCKET_L2CAP_CLIENT; in ng_btsocket_l2cap_connect()
2266 pcb->state = NG_BTSOCKET_L2CAP_CONNECTING; in ng_btsocket_l2cap_connect()
2267 soisconnecting(pcb->so); in ng_btsocket_l2cap_connect()
2269 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_connect()
2273 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2298 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_ctloutput() local
2302 if (pcb == NULL) in ng_btsocket_l2cap_ctloutput()
2310 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2316 error = sooptcopyout(sopt, &pcb->imtu, in ng_btsocket_l2cap_ctloutput()
2317 sizeof(pcb->imtu)); in ng_btsocket_l2cap_ctloutput()
2321 error = sooptcopyout(sopt, &pcb->omtu, in ng_btsocket_l2cap_ctloutput()
2322 sizeof(pcb->omtu)); in ng_btsocket_l2cap_ctloutput()
2326 error = sooptcopyout(sopt, &pcb->iflow, in ng_btsocket_l2cap_ctloutput()
2327 sizeof(pcb->iflow)); in ng_btsocket_l2cap_ctloutput()
2331 error = sooptcopyout(sopt, &pcb->oflow, in ng_btsocket_l2cap_ctloutput()
2332 sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2336 error = sooptcopyout(sopt, &pcb->flush_timo, in ng_btsocket_l2cap_ctloutput()
2337 sizeof(pcb->flush_timo)); in ng_btsocket_l2cap_ctloutput()
2340 error = sooptcopyout(sopt, &pcb->need_encrypt, in ng_btsocket_l2cap_ctloutput()
2341 sizeof(pcb->need_encrypt)); in ng_btsocket_l2cap_ctloutput()
2359 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_ctloutput()
2368 pcb->imtu = v.mtu; in ng_btsocket_l2cap_ctloutput()
2374 bcopy(&v.flow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2381 pcb->flush_timo = v.flush_timo; in ng_btsocket_l2cap_ctloutput()
2384 if((pcb->state != NG_BTSOCKET_L2CAP_OPEN) && in ng_btsocket_l2cap_ctloutput()
2385 (pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE)){ in ng_btsocket_l2cap_ctloutput()
2389 pcb->need_encrypt = (v.encryption)?1:0; in ng_btsocket_l2cap_ctloutput()
2405 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2417 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_detach() local
2419 KASSERT(pcb != NULL, ("ng_btsocket_l2cap_detach: pcb == NULL")); in ng_btsocket_l2cap_detach()
2425 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2428 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_detach()
2429 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_detach()
2431 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED && in ng_btsocket_l2cap_detach()
2432 pcb->state != NG_BTSOCKET_L2CAP_DISCONNECTING) in ng_btsocket_l2cap_detach()
2434 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_detach()
2436 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_detach()
2438 LIST_REMOVE(pcb, next); in ng_btsocket_l2cap_detach()
2440 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2443 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2444 bzero(pcb, sizeof(*pcb)); in ng_btsocket_l2cap_detach()
2445 free(pcb, M_NETGRAPH_BTSOCKET_L2CAP); in ng_btsocket_l2cap_detach()
2458 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_disconnect() local
2461 if (pcb == NULL) in ng_btsocket_l2cap_disconnect()
2466 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2468 if (pcb->state == NG_BTSOCKET_L2CAP_DISCONNECTING) { in ng_btsocket_l2cap_disconnect()
2469 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2473 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_disconnect()
2475 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_disconnect()
2476 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_disconnect()
2478 error = ng_btsocket_l2cap_send_l2ca_discon_req(pcb->token, pcb); in ng_btsocket_l2cap_disconnect()
2480 pcb->state = NG_BTSOCKET_L2CAP_DISCONNECTING; in ng_btsocket_l2cap_disconnect()
2483 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_disconnect()
2489 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2501 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_listen() local
2508 if (pcb == NULL) { in ng_btsocket_l2cap_listen()
2516 if (pcb->psm == 0) { in ng_btsocket_l2cap_listen()
2533 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_peeraddr() local
2536 if (pcb == NULL) in ng_btsocket_l2cap_peeraddr()
2541 bcopy(&pcb->dst, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); in ng_btsocket_l2cap_peeraddr()
2542 sa.l2cap_psm = htole16(pcb->psm); in ng_btsocket_l2cap_peeraddr()
2545 switch(pcb->idtype){ in ng_btsocket_l2cap_peeraddr()
2556 sa.l2cap_bdaddr_type = pcb->dsttype; in ng_btsocket_l2cap_peeraddr()
2570 ng_btsocket_l2cap_pcb_t *pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_send() local
2579 if (pcb == NULL || m == NULL || control != NULL) { in ng_btsocket_l2cap_send()
2584 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2587 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_send()
2588 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2594 if (pcb->rt == NULL || in ng_btsocket_l2cap_send()
2595 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) { in ng_btsocket_l2cap_send()
2596 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2602 if (m->m_pkthdr.len > pcb->omtu) { in ng_btsocket_l2cap_send()
2604 "%s: Packet too big, len=%d, omtu=%d\n", __func__, m->m_pkthdr.len, pcb->omtu); in ng_btsocket_l2cap_send()
2606 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2618 sbappendrecord(&pcb->so->so_snd, m); in ng_btsocket_l2cap_send()
2621 if (!(pcb->flags & NG_BTSOCKET_L2CAP_TIMO)) { in ng_btsocket_l2cap_send()
2622 error = ng_btsocket_l2cap_send2(pcb); in ng_btsocket_l2cap_send()
2624 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_send()
2626 sbdroprecord(&pcb->so->so_snd); /* XXX */ in ng_btsocket_l2cap_send()
2629 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_send()
2642 ng_btsocket_l2cap_send2(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send2() argument
2648 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send2()
2650 if (sbavail(&pcb->so->so_snd) == 0) in ng_btsocket_l2cap_send2()
2653 m = m_dup(pcb->so->so_snd.sb_mb, M_NOWAIT); in ng_btsocket_l2cap_send2()
2671 hdr->token = pcb->token; in ng_btsocket_l2cap_send2()
2673 hdr->lcid = pcb->cid; in ng_btsocket_l2cap_send2()
2674 hdr->idtype = pcb->idtype; in ng_btsocket_l2cap_send2()
2678 hdr->token, pcb->state); in ng_btsocket_l2cap_send2()
2685 NG_SEND_DATA_ONLY(error, pcb->rt->hook, m); in ng_btsocket_l2cap_send2()
2697 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_sockaddr() local
2700 if (pcb == NULL) in ng_btsocket_l2cap_sockaddr()
2705 bcopy(&pcb->src, &sa.l2cap_bdaddr, sizeof(sa.l2cap_bdaddr)); in ng_btsocket_l2cap_sockaddr()
2706 sa.l2cap_psm = htole16(pcb->psm); in ng_btsocket_l2cap_sockaddr()
2710 sa.l2cap_bdaddr_type = pcb->srctype; in ng_btsocket_l2cap_sockaddr()
2797 ng_btsocket_l2cap_timeout(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_timeout() argument
2799 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_timeout()
2801 if (!(pcb->flags & NG_BTSOCKET_L2CAP_TIMO)) { in ng_btsocket_l2cap_timeout()
2802 pcb->flags |= NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_timeout()
2803 callout_reset(&pcb->timo, bluetooth_l2cap_ertx_timeout(), in ng_btsocket_l2cap_timeout()
2804 ng_btsocket_l2cap_process_timeout, pcb); in ng_btsocket_l2cap_timeout()
2815 ng_btsocket_l2cap_untimeout(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_untimeout() argument
2817 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_untimeout()
2819 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) { in ng_btsocket_l2cap_untimeout()
2820 callout_stop(&pcb->timo); in ng_btsocket_l2cap_untimeout()
2821 pcb->flags &= ~NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_untimeout()
2834 ng_btsocket_l2cap_pcb_p pcb = (ng_btsocket_l2cap_pcb_p) xpcb; in ng_btsocket_l2cap_process_timeout() local
2836 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_process_timeout()
2838 pcb->flags &= ~NG_BTSOCKET_L2CAP_TIMO; in ng_btsocket_l2cap_process_timeout()
2839 pcb->so->so_error = ETIMEDOUT; in ng_btsocket_l2cap_process_timeout()
2841 switch (pcb->state) { in ng_btsocket_l2cap_process_timeout()
2846 if (pcb->cid != 0) in ng_btsocket_l2cap_process_timeout()
2847 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_timeout()
2850 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_timeout()
2851 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_timeout()
2856 sbdroprecord(&pcb->so->so_snd); in ng_btsocket_l2cap_process_timeout()
2857 sowwakeup(pcb->so); in ng_btsocket_l2cap_process_timeout()
2862 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_timeout()
2863 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_timeout()
2868 "%s: Invalid socket state=%d\n", __func__, pcb->state); in ng_btsocket_l2cap_process_timeout()