Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Jul 2020 15:50:04 +0000 (UTC)
From:      Takanori Watanabe <takawata@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363276 - in head/sys/netgraph/bluetooth: include l2cap
Message-ID:  <202007171550.06HFo4Vl094174@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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",



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007171550.06HFo4Vl094174>