Lines Matching refs:pcb
417 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_con_req_rsp() local
428 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
429 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
434 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
440 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
441 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
442 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
443 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
444 pcb->psm, op->lcid, op->result, op->status, in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
445 pcb->state); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
447 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
448 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
454 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
457 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
458 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
465 if((pcb->idtype == NG_L2CAP_L2CA_IDTYPE_ATT)|| in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
466 (pcb->idtype == NG_L2CAP_L2CA_IDTYPE_SMP)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
467 pcb->encryption = op->encryption; pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
468 if(pcb->need_encrypt && !(pcb->encryption)){ in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
469 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
470 pcb->state = NG_BTSOCKET_L2CAP_W4_ENC_CHANGE; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
472 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
473 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
482 pcb->cid = op->lcid; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
483 pcb->encryption = op->encryption; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
484 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
487 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
490 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
491 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
493 pcb->cfg_state = NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
494 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
496 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
506 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
507 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
508 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
510 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_req_rsp()
525 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp() local
535 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
536 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
541 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
547 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
548 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
549 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
550 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
551 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
553 if (pcb->state != NG_BTSOCKET_L2CAP_CONNECTING) { in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
554 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
560 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
565 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
566 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
567 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
570 pcb->cfg_state = 0; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
571 pcb->state = NG_BTSOCKET_L2CAP_CONFIGURING; in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
572 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
575 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_rsp_rsp()
592 ng_btsocket_l2cap_pcb_t *pcb = NULL, *pcb1 = NULL; in ng_btsocket_l2cap_process_l2ca_con_ind() local
614 pcb = ng_btsocket_l2cap_pcb_by_addr(&rt->src, ip->psm); in ng_btsocket_l2cap_process_l2ca_con_ind()
615 if (pcb != NULL) { in ng_btsocket_l2cap_process_l2ca_con_ind()
618 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
620 CURVNET_SET(pcb->so->so_vnet); in ng_btsocket_l2cap_process_l2ca_con_ind()
621 so1 = sonewconn(pcb->so, 0); in ng_btsocket_l2cap_process_l2ca_con_ind()
641 if (bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)) != 0) in ng_btsocket_l2cap_process_l2ca_con_ind()
642 bcopy(&pcb->src, &pcb1->src, sizeof(pcb1->src)); in ng_btsocket_l2cap_process_l2ca_con_ind()
654 pcb1->imtu = pcb->imtu; in ng_btsocket_l2cap_process_l2ca_con_ind()
655 bcopy(&pcb->oflow, &pcb1->oflow, sizeof(pcb1->oflow)); in ng_btsocket_l2cap_process_l2ca_con_ind()
656 pcb1->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_process_l2ca_con_ind()
683 if (pcb != NULL) in ng_btsocket_l2cap_process_l2ca_con_ind()
684 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_con_ind()
694 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_enc_change() local
703 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, op->lcid, in ng_btsocket_l2cap_process_l2ca_enc_change()
705 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_enc_change()
710 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
711 pcb->encryption = op->result; in ng_btsocket_l2cap_process_l2ca_enc_change()
713 if(pcb->need_encrypt){ in ng_btsocket_l2cap_process_l2ca_enc_change()
714 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
715 if(pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE){ in ng_btsocket_l2cap_process_l2ca_enc_change()
717 __func__, pcb->state); in ng_btsocket_l2cap_process_l2ca_enc_change()
718 }else if(pcb->encryption){ in ng_btsocket_l2cap_process_l2ca_enc_change()
719 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_enc_change()
720 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
722 pcb->so->so_error = EPERM; in ng_btsocket_l2cap_process_l2ca_enc_change()
723 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_enc_change()
724 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_enc_change()
725 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_enc_change()
728 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_enc_change()
742 ng_btsocket_l2cap_pcb_p pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp() local
757 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
758 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
769 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
776 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
777 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
778 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
779 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
780 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
782 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
783 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
797 pcb->imtu = op->imtu; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
798 bcopy(&op->oflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
799 pcb->flush_timo = op->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
807 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
808 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
810 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
812 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
813 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
814 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
823 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
828 pcb->so->so_error = EINVAL; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
832 pcb->so->so_error = ECONNRESET; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
837 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
840 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
841 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
844 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_req_rsp()
859 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp() local
870 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
871 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
876 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
883 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
884 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
885 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
886 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
887 pcb->psm, pcb->cid, op->result, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
889 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
890 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
905 pcb->cfg_state &= ~NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
906 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
908 if (pcb->cfg_state == NG_BTSOCKET_L2CAP_CFG_BOTH) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
910 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
911 pcb->state = NG_BTSOCKET_L2CAP_OPEN; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
912 soisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
914 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_IN_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
916 error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
920 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_IN_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
924 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
930 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
933 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
936 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
937 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
939 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_rsp_rsp()
954 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_cfg_ind() local
965 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_cfg_ind()
967 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
972 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
978 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
979 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
980 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
981 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_cfg_ind()
982 pcb->psm, pcb->cid, pcb->state, pcb->cfg_state); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
985 if (pcb->state != NG_BTSOCKET_L2CAP_CONFIGURING) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
986 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
998 pcb->omtu = ip->omtu; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
999 bcopy(&ip->iflow, &pcb->iflow, sizeof(pcb->iflow)); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1000 pcb->flush_timo = ip->flush_timo; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1007 if (!(pcb->cfg_state & NG_BTSOCKET_L2CAP_CFG_OUT_SENT)) { in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1008 error = ng_btsocket_l2cap_send_l2ca_cfg_rsp(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1010 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1012 pcb->so->so_error = error; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1015 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1018 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1019 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1021 pcb->cfg_state |= NG_BTSOCKET_L2CAP_CFG_OUT_SENT; in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1024 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_cfg_ind()
1039 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_rsp() local
1055 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1056 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1061 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1064 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1069 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1070 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1071 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1072 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1073 pcb->psm, pcb->cid, op->result, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1075 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1077 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1078 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1081 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_rsp()
1096 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_discon_ind() local
1107 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, ip->lcid, in ng_btsocket_l2cap_process_l2ca_discon_ind()
1109 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_discon_ind()
1120 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1126 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1127 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1128 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1129 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_discon_ind()
1130 pcb->psm, pcb->cid, pcb->state); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1132 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_process_l2ca_discon_ind()
1133 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1135 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_process_l2ca_discon_ind()
1136 soisdisconnected(pcb->so); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1138 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_discon_ind()
1153 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_process_l2ca_write_rsp() local
1164 pcb = ng_btsocket_l2cap_pcb_by_token(msg->header.token); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1165 if (pcb == NULL) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1170 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1176 pcb->src.b[5], pcb->src.b[4], pcb->src.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1177 pcb->src.b[2], pcb->src.b[1], pcb->src.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1178 pcb->dst.b[5], pcb->dst.b[4], pcb->dst.b[3], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1179 pcb->dst.b[2], pcb->dst.b[1], pcb->dst.b[0], in ng_btsocket_l2cap_process_l2ca_write_rsp()
1180 pcb->psm, pcb->cid, op->result, op->length, in ng_btsocket_l2cap_process_l2ca_write_rsp()
1181 pcb->state); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1183 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1184 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1190 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1195 sbdroprecord(&pcb->so->so_snd); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1196 if (sbavail(&pcb->so->so_snd) > 0) { in ng_btsocket_l2cap_process_l2ca_write_rsp()
1197 if (ng_btsocket_l2cap_send2(pcb) == 0) in ng_btsocket_l2cap_process_l2ca_write_rsp()
1198 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1200 sbdroprecord(&pcb->so->so_snd); /* XXX */ in ng_btsocket_l2cap_process_l2ca_write_rsp()
1208 pcb->so->so_error = ng_btsocket_l2cap_result2errno(op->result); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1209 sowwakeup(pcb->so); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1211 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_process_l2ca_write_rsp()
1222 ng_btsocket_l2cap_send_l2ca_con_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_con_req() argument
1228 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_con_req()
1230 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_con_req()
1231 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_con_req()
1239 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_con_req()
1242 bcopy(&pcb->dst, &ip->bdaddr, sizeof(ip->bdaddr)); in ng_btsocket_l2cap_send_l2ca_con_req()
1243 ip->psm = pcb->psm; in ng_btsocket_l2cap_send_l2ca_con_req()
1244 ip->linktype = ng_btsock_l2cap_addrtype_to_linktype(pcb->dsttype); in ng_btsocket_l2cap_send_l2ca_con_req()
1245 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_con_req()
1246 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_con_req()
1292 ng_btsocket_l2cap_send_l2ca_cfg_req(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_req() argument
1298 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1300 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_req()
1301 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_req()
1309 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1312 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1313 ip->imtu = pcb->imtu; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1314 bcopy(&pcb->oflow, &ip->oflow, sizeof(ip->oflow)); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1315 ip->flush_timo = pcb->flush_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1316 ip->link_timo = pcb->link_timo; in ng_btsocket_l2cap_send_l2ca_cfg_req()
1318 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_req()
1328 ng_btsocket_l2cap_send_l2ca_cfg_rsp(ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_cfg_rsp() argument
1334 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1336 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1337 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1345 msg->header.token = pcb->token; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1348 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1349 ip->omtu = pcb->omtu; in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1350 bcopy(&pcb->iflow, &ip->iflow, sizeof(ip->iflow)); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1352 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg, pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_cfg_rsp()
1363 ng_btsocket_l2cap_pcb_p pcb) in ng_btsocket_l2cap_send_l2ca_discon_req() argument
1369 mtx_assert(&pcb->pcb_mtx, MA_OWNED); in ng_btsocket_l2cap_send_l2ca_discon_req()
1371 if (pcb->rt == NULL || in ng_btsocket_l2cap_send_l2ca_discon_req()
1372 pcb->rt->hook == NULL || NG_HOOK_NOT_VALID(pcb->rt->hook)) in ng_btsocket_l2cap_send_l2ca_discon_req()
1383 ip->lcid = pcb->cid; in ng_btsocket_l2cap_send_l2ca_discon_req()
1384 ip->idtype = pcb->idtype; in ng_btsocket_l2cap_send_l2ca_discon_req()
1386 NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0); in ng_btsocket_l2cap_send_l2ca_discon_req()
1406 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_data_input() local
1477 pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, hdr->dcid,idtype); in ng_btsocket_l2cap_data_input()
1478 if (pcb == NULL) { in ng_btsocket_l2cap_data_input()
1483 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1485 if (pcb->state != NG_BTSOCKET_L2CAP_OPEN) { in ng_btsocket_l2cap_data_input()
1491 hdr->dcid, pcb->state); in ng_btsocket_l2cap_data_input()
1493 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1499 if (hdr->length > pcb->imtu) { in ng_btsocket_l2cap_data_input()
1506 hdr->dcid, hdr->length, pcb->imtu); in ng_btsocket_l2cap_data_input()
1508 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1514 if (m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) { in ng_btsocket_l2cap_data_input()
1529 sbspace(&pcb->so->so_rcv)); in ng_btsocket_l2cap_data_input()
1531 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1537 sbappendrecord(&pcb->so->so_rcv, m); in ng_btsocket_l2cap_data_input()
1540 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1542 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1591 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) { in ng_btsocket_l2cap_data_input()
1594 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1596 if (bcmp(&rt->src, &pcb->src, sizeof(pcb->src)) != 0 || in ng_btsocket_l2cap_data_input()
1597 pcb->psm != clt_hdr->psm || in ng_btsocket_l2cap_data_input()
1598 pcb->state != NG_BTSOCKET_L2CAP_OPEN || in ng_btsocket_l2cap_data_input()
1599 (pcb->so->so_options & SO_BROADCAST) == 0 || in ng_btsocket_l2cap_data_input()
1600 m->m_pkthdr.len > sbspace(&pcb->so->so_rcv)) in ng_btsocket_l2cap_data_input()
1611 sbappendrecord(&pcb->so->so_rcv, copy); in ng_btsocket_l2cap_data_input()
1612 sorwakeup(pcb->so); in ng_btsocket_l2cap_data_input()
1615 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_data_input()
1829 ng_btsocket_l2cap_pcb_p pcb = NULL, pcb_next = NULL; in ng_btsocket_l2cap_rtclean() local
1839 for (pcb = LIST_FIRST(&ng_btsocket_l2cap_sockets); pcb != NULL; ) { in ng_btsocket_l2cap_rtclean()
1840 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1841 pcb_next = LIST_NEXT(pcb, next); in ng_btsocket_l2cap_rtclean()
1843 if (pcb->rt != NULL && in ng_btsocket_l2cap_rtclean()
1844 pcb->rt->hook != NULL && NG_HOOK_NOT_VALID(pcb->rt->hook)) { in ng_btsocket_l2cap_rtclean()
1845 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_rtclean()
1846 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_rtclean()
1848 pcb->so->so_error = ENETDOWN; in ng_btsocket_l2cap_rtclean()
1849 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_rtclean()
1850 soisdisconnected(pcb->so); in ng_btsocket_l2cap_rtclean()
1852 pcb->token = 0; in ng_btsocket_l2cap_rtclean()
1853 pcb->cid = 0; in ng_btsocket_l2cap_rtclean()
1854 pcb->rt = NULL; in ng_btsocket_l2cap_rtclean()
1857 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_rtclean()
1858 pcb = pcb_next; in ng_btsocket_l2cap_rtclean()
1992 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_attach() local
2007 if (pcb != NULL) in ng_btsocket_l2cap_attach()
2019 pcb = malloc(sizeof(*pcb), in ng_btsocket_l2cap_attach()
2021 if (pcb == NULL) in ng_btsocket_l2cap_attach()
2025 so->so_pcb = (caddr_t) pcb; in ng_btsocket_l2cap_attach()
2026 pcb->so = so; in ng_btsocket_l2cap_attach()
2027 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_attach()
2030 pcb->imtu = pcb->omtu = NG_L2CAP_MTU_DEFAULT; in ng_btsocket_l2cap_attach()
2033 pcb->iflow.flags = 0x0; in ng_btsocket_l2cap_attach()
2034 pcb->iflow.service_type = NG_HCI_SERVICE_TYPE_BEST_EFFORT; in ng_btsocket_l2cap_attach()
2035 pcb->iflow.token_rate = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2036 pcb->iflow.token_bucket_size = 0xffffffff; /* maximum */ in ng_btsocket_l2cap_attach()
2037 pcb->iflow.peak_bandwidth = 0x00000000; /* maximum */ in ng_btsocket_l2cap_attach()
2038 pcb->iflow.latency = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2039 pcb->iflow.delay_variation = 0xffffffff; /* don't care */ in ng_btsocket_l2cap_attach()
2041 bcopy(&pcb->iflow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_attach()
2043 pcb->flush_timo = NG_L2CAP_FLUSH_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2044 pcb->link_timo = NG_L2CAP_LINK_TIMO_DEFAULT; in ng_btsocket_l2cap_attach()
2053 mtx_init(&pcb->pcb_mtx, "btsocks_l2cap_pcb_mtx", NULL, in ng_btsocket_l2cap_attach()
2055 callout_init_mtx(&pcb->timo, &pcb->pcb_mtx, 0); in ng_btsocket_l2cap_attach()
2085 pcb->token = token; in ng_btsocket_l2cap_attach()
2087 LIST_INSERT_HEAD(&ng_btsocket_l2cap_sockets, pcb, next); in ng_btsocket_l2cap_attach()
2103 ng_btsocket_l2cap_pcb_t *pcb = NULL; in ng_btsocket_l2cap_bind() local
2132 LIST_FOREACH(pcb, &ng_btsocket_l2cap_sockets, next) in ng_btsocket_l2cap_bind()
2133 if (psm != 0 && psm == pcb->psm && in ng_btsocket_l2cap_bind()
2134 bcmp(&pcb->src, &sa->l2cap_bdaddr, sizeof(bdaddr_t)) == 0) in ng_btsocket_l2cap_bind()
2137 if (pcb == NULL) { in ng_btsocket_l2cap_bind()
2139 pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_bind()
2140 if (pcb != NULL) { in ng_btsocket_l2cap_bind()
2141 bcopy(&sa->l2cap_bdaddr, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_bind()
2142 pcb->psm = psm; in ng_btsocket_l2cap_bind()
2161 ng_btsocket_l2cap_pcb_t *pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_connect() local
2169 if (pcb == NULL) in ng_btsocket_l2cap_connect()
2173 if (pcb->state == NG_BTSOCKET_L2CAP_CONNECTING) in ng_btsocket_l2cap_connect()
2207 if (pcb->psm != 0 && pcb->psm != le16toh(sa->l2cap_psm)) in ng_btsocket_l2cap_connect()
2218 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2221 bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst)); in ng_btsocket_l2cap_connect()
2222 pcb->psm = le16toh(sa->l2cap_psm); in ng_btsocket_l2cap_connect()
2223 pcb->dsttype = sa->l2cap_bdaddr_type; in ng_btsocket_l2cap_connect()
2224 pcb->cid = 0; in ng_btsocket_l2cap_connect()
2225 pcb->idtype = idtype; in ng_btsocket_l2cap_connect()
2226 pcb->rt = NULL; in ng_btsocket_l2cap_connect()
2227 have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2235 if (bcmp(&pcb->src, &rt->src, sizeof(rt->src)) == 0) in ng_btsocket_l2cap_connect()
2238 if (bcmp(&pcb->dst, &rt->src, sizeof(rt->src)) != 0) in ng_btsocket_l2cap_connect()
2244 pcb->rt = rt; in ng_btsocket_l2cap_connect()
2247 bcopy(&rt->src, &pcb->src, sizeof(pcb->src)); in ng_btsocket_l2cap_connect()
2248 pcb->srctype = in ng_btsocket_l2cap_connect()
2260 error = ng_btsocket_l2cap_send_l2ca_con_req(pcb); in ng_btsocket_l2cap_connect()
2262 pcb->flags |= NG_BTSOCKET_L2CAP_CLIENT; in ng_btsocket_l2cap_connect()
2263 pcb->state = NG_BTSOCKET_L2CAP_CONNECTING; in ng_btsocket_l2cap_connect()
2264 soisconnecting(pcb->so); in ng_btsocket_l2cap_connect()
2266 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_connect()
2270 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_connect()
2295 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_ctloutput() local
2299 if (pcb == NULL) in ng_btsocket_l2cap_ctloutput()
2307 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2313 error = sooptcopyout(sopt, &pcb->imtu, in ng_btsocket_l2cap_ctloutput()
2314 sizeof(pcb->imtu)); in ng_btsocket_l2cap_ctloutput()
2318 error = sooptcopyout(sopt, &pcb->omtu, in ng_btsocket_l2cap_ctloutput()
2319 sizeof(pcb->omtu)); in ng_btsocket_l2cap_ctloutput()
2323 error = sooptcopyout(sopt, &pcb->iflow, in ng_btsocket_l2cap_ctloutput()
2324 sizeof(pcb->iflow)); in ng_btsocket_l2cap_ctloutput()
2328 error = sooptcopyout(sopt, &pcb->oflow, in ng_btsocket_l2cap_ctloutput()
2329 sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2333 error = sooptcopyout(sopt, &pcb->flush_timo, in ng_btsocket_l2cap_ctloutput()
2334 sizeof(pcb->flush_timo)); in ng_btsocket_l2cap_ctloutput()
2337 error = sooptcopyout(sopt, &pcb->need_encrypt, in ng_btsocket_l2cap_ctloutput()
2338 sizeof(pcb->need_encrypt)); in ng_btsocket_l2cap_ctloutput()
2356 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_ctloutput()
2365 pcb->imtu = v.mtu; in ng_btsocket_l2cap_ctloutput()
2371 bcopy(&v.flow, &pcb->oflow, sizeof(pcb->oflow)); in ng_btsocket_l2cap_ctloutput()
2378 pcb->flush_timo = v.flush_timo; in ng_btsocket_l2cap_ctloutput()
2381 if((pcb->state != NG_BTSOCKET_L2CAP_OPEN) && in ng_btsocket_l2cap_ctloutput()
2382 (pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE)){ in ng_btsocket_l2cap_ctloutput()
2386 pcb->need_encrypt = (v.encryption)?1:0; in ng_btsocket_l2cap_ctloutput()
2402 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_ctloutput()
2414 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_detach() local
2416 KASSERT(pcb != NULL, ("ng_btsocket_l2cap_detach: pcb == NULL")); in ng_btsocket_l2cap_detach()
2422 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2425 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_detach()
2426 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_detach()
2428 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED && in ng_btsocket_l2cap_detach()
2429 pcb->state != NG_BTSOCKET_L2CAP_DISCONNECTING) in ng_btsocket_l2cap_detach()
2431 ng_btsocket_l2cap_send_l2ca_discon_req(0, pcb); in ng_btsocket_l2cap_detach()
2433 pcb->state = NG_BTSOCKET_L2CAP_CLOSED; in ng_btsocket_l2cap_detach()
2435 LIST_REMOVE(pcb, next); in ng_btsocket_l2cap_detach()
2437 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2440 mtx_destroy(&pcb->pcb_mtx); in ng_btsocket_l2cap_detach()
2441 bzero(pcb, sizeof(*pcb)); in ng_btsocket_l2cap_detach()
2442 free(pcb, M_NETGRAPH_BTSOCKET_L2CAP); in ng_btsocket_l2cap_detach()
2455 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_disconnect() local
2458 if (pcb == NULL) in ng_btsocket_l2cap_disconnect()
2463 mtx_lock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2465 if (pcb->state == NG_BTSOCKET_L2CAP_DISCONNECTING) { in ng_btsocket_l2cap_disconnect()
2466 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2470 if (pcb->state != NG_BTSOCKET_L2CAP_CLOSED) { in ng_btsocket_l2cap_disconnect()
2472 if (pcb->flags & NG_BTSOCKET_L2CAP_TIMO) in ng_btsocket_l2cap_disconnect()
2473 ng_btsocket_l2cap_untimeout(pcb); in ng_btsocket_l2cap_disconnect()
2475 error = ng_btsocket_l2cap_send_l2ca_discon_req(pcb->token, pcb); in ng_btsocket_l2cap_disconnect()
2477 pcb->state = NG_BTSOCKET_L2CAP_DISCONNECTING; in ng_btsocket_l2cap_disconnect()
2480 ng_btsocket_l2cap_timeout(pcb); in ng_btsocket_l2cap_disconnect()
2486 mtx_unlock(&pcb->pcb_mtx); in ng_btsocket_l2cap_disconnect()
2498 ng_btsocket_l2cap_pcb_p pcb = so2l2cap_pcb(so); in ng_btsocket_l2cap_listen() local
2505 if (pcb == NULL) { in ng_btsocket_l2cap_listen()
2515 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()