svn commit: r363276 - in head/sys/netgraph/bluetooth: include l2cap
Takanori Watanabe
takawata at FreeBSD.org
Fri Jul 17 15:50:04 UTC 2020
Author: takawata
Date: Fri Jul 17 15:50:03 2020
New Revision: 363276
URL: https://svnweb.freebsd.org/changeset/base/363276
Log:
Fix L2CAP ACL packet PB(Packet Boundary) flag for LE PDU.
ACL packet boundary flag should be 0 instead of 2 for LE PDU.
Some HCI will drop LE packet with PB flag is 2, and if sent,
some target may reject the packet.
PR: 248024
Reported by: Greg V
Reviewed by: Greg V, emax
Differential Revision: https://reviews.freebsd.org/D25704
Modified:
head/sys/netgraph/bluetooth/include/ng_hci.h
head/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c
Modified: head/sys/netgraph/bluetooth/include/ng_hci.h
==============================================================================
--- head/sys/netgraph/bluetooth/include/ng_hci.h Fri Jul 17 15:09:49 2020 (r363275)
+++ head/sys/netgraph/bluetooth/include/ng_hci.h Fri Jul 17 15:50:03 2020 (r363276)
@@ -393,10 +393,10 @@
(((h) & 0x0fff) | (((pb) & 3) << 12) | (((bc) & 3) << 14))
/* PB flag values */
- /* 00 - reserved for future use */
+#define NG_HCI_LE_PACKET_START 0x0
#define NG_HCI_PACKET_FRAGMENT 0x1
#define NG_HCI_PACKET_START 0x2
- /* 11 - reserved for future use */
+ /* 11 for AMP packet, not supported */
/* BC flag values */
#define NG_HCI_POINT2POINT 0x0 /* only Host controller to Host */
Modified: head/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c
==============================================================================
--- head/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c Fri Jul 17 15:09:49 2020 (r363275)
+++ head/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c Fri Jul 17 15:50:03 2020 (r363276)
@@ -547,7 +547,7 @@ ng_l2cap_lp_send(ng_l2cap_con_p con, u_int16_t dcid, s
ng_l2cap_hdr_t *l2cap_hdr = NULL;
ng_hci_acldata_pkt_t *acl_hdr = NULL;
struct mbuf *m_last = NULL, *m = NULL;
- int len, flag = NG_HCI_PACKET_START;
+ int len, flag = (con->linktype == NG_HCI_LINK_ACL) ? NG_HCI_PACKET_START : NG_HCI_LE_PACKET_START;
KASSERT((con->tx_pkt == NULL),
("%s: %s - another packet pending?!\n", __func__, NG_NODE_NAME(l2cap->node)));
@@ -713,7 +713,8 @@ ng_l2cap_lp_receive(ng_l2cap_p l2cap, struct mbuf *m)
}
/* Process packet */
- if (pb == NG_HCI_PACKET_START) {
+ if ((pb == NG_HCI_PACKET_START) || (pb == NG_HCI_LE_PACKET_START))
+ {
if (con->rx_pkt != NULL) {
NG_L2CAP_ERR(
"%s: %s - dropping incomplete L2CAP packet, got %d bytes, want %d bytes\n",
More information about the svn-src-head
mailing list