38#include <sys/kernel.h>
39#include <sys/endian.h>
40#include <sys/malloc.h>
80"%s: %s - unexpected LP_ConnectReq event. " \
81"Connection already exists, state=%d, con_handle=%d\n",
91"%s: %s - hook \"%s\" is not connected or valid\n",
104 sizeof(*ep), M_NOWAIT);
150"%s: %s - invalid LP_ConnectCfm[Neg] message size\n",
161"%s: %s - unexpected LP_ConnectCfm event. Connection does not exist\n",
170"%s: %s - unexpected LP_ConnectCfm event. " \
171"Invalid connection state, state=%d, con_handle=%d\n",
219"%s: %s - invalid LP_ConnectInd message size\n",
231"%s: %s - unexpected LP_ConnectInd event. " \
232"Connection already exists, state=%d, con_handle=%d\n",
242"%s: %s - hook \"%s\" is not connected or valid",
255 sizeof(*rp), M_NOWAIT);
300"%s: %s - invalid LP_DisconnectInd message size\n",
312"%s: %s - unexpected LP_DisconnectInd event. " \
313"Connection does not exist, con_handle=%d\n",
322"%s: %s - unexpected LP_DisconnectInd event. " \
323"Invalid connection state, state=%d, con_handle=%d\n",
363"%s: %s - unexpected LP_QoSSetupReq event. " \
364"Connection does not exist, con_handle=%d\n",
373"%s: %s - unexpected LP_QoSSetupReq event. " \
374"Invalid connection state, state=%d, con_handle=%d\n",
384"%s: %s - hook \"%s\" is not connected or valid",
392 sizeof(*ep), M_NOWAIT);
398 ep->
flags = flow->flags;
423"%s: %s - invalid LP_QoSSetupCfm[Neg] message size\n",
451"%s: %s - invalid LP_QoSViolation message size\n",
463"%s: %s - unexpected LP_QoSViolationInd event. " \
464"Connection does not exist, con_handle=%d\n",
473"%s: %s - unexpected LP_QoSViolationInd event. " \
474"Invalid connection state, state=%d, con_handle=%d\n",
496"%s: %s - invalid LP_ENCChange message size\n",
508"%s: %s - unexpected LP_Enc Change Event. " \
509"Connection does not exist, con_handle=%d\n",
518"%s: %s - unexpected ENC_CHANGE event. " \
519"Invalid connection state, state=%d, con_handle=%d\n",
528 LIST_FOREACH(ch, &l2cap->chan_list, next){
547 ng_l2cap_hdr_t *l2cap_hdr = NULL;
548 ng_hci_acldata_pkt_t *acl_hdr = NULL;
549 struct mbuf *m_last = NULL, *m = NULL;
552 KASSERT((con->
tx_pkt == NULL),
553(
"%s: %s - another packet pending?!\n", __func__,
NG_NODE_NAME(l2cap->
node)));
555(
"%s: %s - invalid l2cap->pkt_size?!\n", __func__,
NG_NODE_NAME(l2cap->
node)));
561"%s: %s - ng_l2cap_prepend(%zd) failed\n",
568 l2cap_hdr = mtod(m0, ng_l2cap_hdr_t *);
569 l2cap_hdr->length = htole16(m0->m_pkthdr.len -
sizeof(*l2cap_hdr));
570 l2cap_hdr->dcid = htole16(
dcid);
582 len = m0->m_pkthdr.len;
584 m = m_split(m0, l2cap->
pkt_size, M_NOWAIT);
599"%s: %s - ng_l2cap_prepend(%zd) failed\n",
605 acl_hdr = mtod(m0, ng_hci_acldata_pkt_t *);
607 acl_hdr->length = htole16(len);
612 m0->m_nextpkt = NULL;
615 con->
tx_pkt = m_last = m0;
617 m_last->m_nextpkt = m0;
622"%s: %s - attaching ACL packet, con_handle=%d, PB=%#x, length=%d\n",
636 while (con->
tx_pkt != NULL) {
637 m = con->
tx_pkt->m_nextpkt;
662 ng_hci_acldata_pkt_t *acl_hdr = NULL;
663 ng_l2cap_hdr_t *l2cap_hdr = NULL;
665 u_int16_t con_handle,
length, pb;
669 if (m->m_pkthdr.len <
sizeof(*acl_hdr)) {
671"%s: %s - invalid ACL data packet. Packet too small, length=%d\n",
682 acl_hdr = mtod(m, ng_hci_acldata_pkt_t *);
683 m_adj(m,
sizeof(*acl_hdr));
686 acl_hdr->con_handle = le16toh(acl_hdr->con_handle);
689 length = le16toh(acl_hdr->length);
692"%s: %s - got ACL data packet, con_handle=%d, PB=%#x, length=%d\n",
699"%s: %s - unexpected ACL data packet. " \
700"Connection does not exist, con_handle=%d\n",
709"%s: %s - unexpected ACL data packet. Invalid connection state=%d\n",
718 if (con->
rx_pkt != NULL) {
720"%s: %s - dropping incomplete L2CAP packet, got %d bytes, want %d bytes\n",
728 if (m->m_pkthdr.len <
sizeof(*l2cap_hdr)) {
730"%s: %s - invalid L2CAP packet start fragment. Packet too small, length=%d\n",
741 l2cap_hdr = mtod(m, ng_l2cap_hdr_t *);
744"%s: %s - staring new L2CAP packet, con_handle=%d, length=%d\n",
746 le16toh(l2cap_hdr->length));
750 con->
rx_pkt_len = le16toh(l2cap_hdr->length)+
sizeof(*l2cap_hdr);
752 if (con->
rx_pkt == NULL) {
754"%s: %s - unexpected ACL data packet fragment, con_handle=%d\n",
765"%s: %s - invalid ACL data packet. Invalid PB flag=%#x\n",
774"%s: %s - packet length mismatch. Got %d bytes, offset %d bytes\n",
802 struct mbuf *m = NULL;
818"%s: %s - hook \"%s\" is not connected or valid",
830 if(m->m_flags &M_PROTO2){
835"%s: %s - sending ACL packet, con_handle=%d, len=%d\n",
842"%s: %s - could not send ACL data packet, con_handle=%d, error=%d\n",
853"%s: %s - %d ACL packets have been sent, con_handle=%d\n",
860 while (con->
tx_pkt != NULL) {
861 m = con->
tx_pkt->m_nextpkt;
880 printf(
"%s: Netgraph node is not valid\n", __func__);
889"%s: %s - could not find connection, con_handle=%d\n",
896"%s: %s - no pending LP timeout, con_handle=%d, state=%d, flags=%#x\n",
907 con->
flags &= ~NG_L2CAP_CON_LP_TIMO;
926 printf(
"%s: Netgraph node is not valid\n", __func__);
935"%s: %s - could not find connection, con_handle=%d\n",
942"%s: %s - no pending disconnect timeout, con_handle=%d, state=%d, flags=%#x\n",
948 con->
flags &= ~NG_L2CAP_CON_AUTO_DISCON_TIMO;
953"%s: %s - hook \"%s\" is not connected or valid\n",
960 sizeof(*ep), M_NOWAIT);
#define NG_HOOK_NOT_VALID(hook)
#define NG_NODE_NOT_VALID(node)
#define NG_NODE_NAME(node)
#define NG_SEND_DATA_ONLY(error, hook, m)
#define NG_NODE_PRIVATE(node)
#define NG_SEND_MSG_HOOK(error, here, msg, hook, retaddr)
#define NG_HCI_PACKET_START
#define NGM_HCI_LP_QOS_REQ
#define NGM_HCI_LP_CON_RSP
#define NG_HCI_ACL_DATA_PKT
#define NG_HCI_LE_PACKET_START
#define NGM_HCI_LP_DISCON_REQ
#define NG_HCI_PACKET_FRAGMENT
#define NG_HCI_PB_FLAG(h)
#define NGM_HCI_LP_CON_REQ
#define NG_HCI_CON_HANDLE(h)
#define NG_HCI_MK_CON_HANDLE(h, pb, bc)
ng_l2cap_flow_t * ng_l2cap_flow_p
#define NG_L2CAP_CON_LP_TIMO
#define NG_L2CAP_W4_LP_CON_CFM
#define NG_L2CAP_CON_AUTO_DISCON_TIMO
#define NG_L2CAP_CON_OUTGOING
#define NG_L2CAP_CON_OPEN
#define NG_L2CAP_HOOK_HCI
void ng_l2cap_con_fail(ng_l2cap_con_p con, u_int16_t result)
void ng_l2cap_con_wakeup(ng_l2cap_con_p con)
int ng_l2cap_receive(ng_l2cap_con_p con)
void ng_l2cap_process_discon_timeout(node_p node, hook_p hook, void *arg1, int con_handle)
int ng_l2cap_lp_qos_ind(ng_l2cap_p l2cap, struct ng_mesg *msg)
void ng_l2cap_process_lp_timeout(node_p node, hook_p hook, void *arg1, int con_handle)
int ng_l2cap_lp_con_req(ng_l2cap_p l2cap, bdaddr_p bdaddr, int type)
int ng_l2cap_lp_qos_req(ng_l2cap_p l2cap, u_int16_t con_handle, ng_l2cap_flow_p flow)
int ng_l2cap_lp_enc_change(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_lp_send(ng_l2cap_con_p con, u_int16_t dcid, struct mbuf *m0)
void ng_l2cap_lp_deliver(ng_l2cap_con_p con)
int ng_l2cap_lp_receive(ng_l2cap_p l2cap, struct mbuf *m)
int ng_l2cap_lp_discon_ind(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_lp_qos_cfm(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_lp_con_cfm(ng_l2cap_p l2cap, struct ng_mesg *msg)
int ng_l2cap_lp_con_ind(ng_l2cap_p l2cap, struct ng_mesg *msg)
void ng_l2cap_free_con(ng_l2cap_con_p con)
ng_l2cap_con_p ng_l2cap_con_by_handle(ng_l2cap_p l2cap, u_int16_t con_handle)
ng_l2cap_con_p ng_l2cap_con_by_addr(ng_l2cap_p l2cap, bdaddr_p bdaddr, unsigned int type)
int ng_l2cap_discon_untimeout(ng_l2cap_con_p con)
int ng_l2cap_lp_timeout(ng_l2cap_con_p con)
ng_l2cap_con_p ng_l2cap_new_con(ng_l2cap_p l2cap, bdaddr_p bdaddr, int type)
int ng_l2cap_lp_untimeout(ng_l2cap_con_p con)
struct mbuf * ng_l2cap_prepend(struct mbuf *m, int size)
int ng_l2cap_l2ca_encryption_change(ng_l2cap_chan_p ch, uint16_t result)
#define NG_L2CAP_M_PULLUP(m, s)
#define NG_MKMESSAGE(msg, cookie, cmdid, len, how)
u_int32_t delay_variation
struct ng_mesg::ng_msghdr header