Bluetooth Asynchronous Connectionless (bthci_acl)

ACL frames are used to transfer non-realtime data between nodes in a Bluetooth network.

The purpose of ACL is to provide a connection between one node and another node(unicast) or a set or other nodes(multicast). ACL provides the mechanism to send large PDUs between the nodes by a fragmentation mechanism that supports transferring PDUs up to 64kbyte in size.

Protocol dependencies

  • HCI_H4: BTHCI_ACL is one of 4 Bluetooth frame types and are always encapsulated inside HCI_H4

  • BTL2CAP: The only protocol running ontop of BTHCI_ACL is L2CAP.

Example traffic

No.     Time        Source                Destination           Protocol Info
     11 5.731294                                                L2CAP    Sent Echo Request

Frame 11 (57 bytes on wire, 57 bytes captured)
Bluetooth HCI H4 Sent ACL Data
    Direction: Sent (0x00)
    HCI Packet Type: ACL Data (0x02)
Bluetooth HCI ACL Packet
    .... 0000 0010 1001 = Connection Handle: 0x0029
    ..10 .... .... .... = PB Flag: Start Fragment (2)
    00.. .... .... .... = BC Flag: Point-To-Point (0)
    Data Total Length: 52
Bluetooth L2CAP Packet
    Length: 48
    CID: 0x0001
    Command: Echo Request
        Command Code: Echo Request (0x08)
        Command Identifier: 0xc8
        Command Length: 44


The BTHCI_ACL dissector is fully functional and can reassemble fragmented PDUs.

Preference Settings

There is a HCI_ACL preference to control whether Wireshark shall reassemble PDUs spanning multiple fragments or not.

Example capture file

Display Filter

A complete list of BTHCI_ACK display filter fields can be found in the display filter reference

Show only the BTHCI_ACL based traffic:


Capture Filter

You cannot directly filter BTHCI_ACL protocols while capturing since currently you cant capture at all.

External links and Captures

See Bluetooth for example captures and links.


Imported from on 2020-08-11 23:11:38 UTC