Hi, On Tue, Dec 8, 2020 at 9:36 AM Bastien Nocera <hadess@xxxxxxxxxx> wrote: > > The current implementation of L2CAP options negotiation will continue > the negotiation when a device responds with L2CAP_CONF_UNACCEPT ("unaccepted > options"), but not when the device replies with L2CAP_CONF_UNKNOWN ("unknown > options"). > > Trying to continue the negotiation without ERTM support will allow > Bluetooth-capable XBox One controllers (notably models 1708 and 1797) > to connect. > > btmon before patch: > > ACL Data RX: Handle 256 flags 0x02 dlen 16 #64 [hci0] 59.182702 > L2CAP: Connection Response (0x03) ident 2 len 8 > Destination CID: 64 > Source CID: 64 > Result: Connection successful (0x0000) > Status: No further information available (0x0000) > < ACL Data TX: Handle 256 flags 0x00 dlen 23 #65 [hci0] 59.182744 > L2CAP: Configure Request (0x04) ident 3 len 15 > Destination CID: 64 > Flags: 0x0000 > Option: Retransmission and Flow Control (0x04) [mandatory] > Mode: Basic (0x00) > TX window size: 0 > Max transmit: 0 > Retransmission timeout: 0 > Monitor timeout: 0 > Maximum PDU size: 0 > > ACL Data RX: Handle 256 flags 0x02 dlen 16 #66 [hci0] 59.183948 > L2CAP: Configure Request (0x04) ident 1 len 8 > Destination CID: 64 > Flags: 0x0000 > Option: Maximum Transmission Unit (0x01) [mandatory] > MTU: 1480 > < ACL Data TX: Handle 256 flags 0x00 dlen 18 #67 [hci0] 59.183994 > L2CAP: Configure Response (0x05) ident 1 len 10 > Source CID: 64 > Flags: 0x0000 > Result: Success (0x0000) > Option: Maximum Transmission Unit (0x01) [mandatory] > MTU: 1480 > > ACL Data RX: Handle 256 flags 0x02 dlen 15 #69 [hci0] 59.187676 > L2CAP: Configure Response (0x05) ident 3 len 7 > Source CID: 64 > Flags: 0x0000 > Result: Failure - unknown options (0x0003) > 04 . > < ACL Data TX: Handle 256 flags 0x00 dlen 12 #70 [hci0] 59.187722 > L2CAP: Disconnection Request (0x06) ident 4 len 4 > Destination CID: 64 > Source CID: 64 > > ACL Data RX: Handle 256 flags 0x02 dlen 12 #73 [hci0] 59.192714 > L2CAP: Disconnection Response (0x07) ident 4 len 4 > Destination CID: 64 > Source CID: 64 > > btmon after patch: > > ACL Data RX: Handle 256 flags 0x02 dlen 16 #248 [hci0] 103.502970 > L2CAP: Connection Response (0x03) ident 5 len 8 > Destination CID: 65 > Source CID: 65 > Result: Connection pending (0x0001) > Status: No further information available (0x0000) > > ACL Data RX: Handle 256 flags 0x02 dlen 16 #249 [hci0] 103.504184 > L2CAP: Connection Response (0x03) ident 5 len 8 > Destination CID: 65 > Source CID: 65 > Result: Connection successful (0x0000) > Status: No further information available (0x0000) > < ACL Data TX: Handle 256 flags 0x00 dlen 23 #250 [hci0] 103.504398 > L2CAP: Configure Request (0x04) ident 6 len 15 > Destination CID: 65 > Flags: 0x0000 > Option: Retransmission and Flow Control (0x04) [mandatory] > Mode: Basic (0x00) > TX window size: 0 > Max transmit: 0 > Retransmission timeout: 0 > Monitor timeout: 0 > Maximum PDU size: 0 > > ACL Data RX: Handle 256 flags 0x02 dlen 16 #251 [hci0] 103.505472 > L2CAP: Configure Request (0x04) ident 3 len 8 > Destination CID: 65 > Flags: 0x0000 > Option: Maximum Transmission Unit (0x01) [mandatory] > MTU: 1480 > < ACL Data TX: Handle 256 flags 0x00 dlen 18 #252 [hci0] 103.505689 > L2CAP: Configure Response (0x05) ident 3 len 10 > Source CID: 65 > Flags: 0x0000 > Result: Success (0x0000) > Option: Maximum Transmission Unit (0x01) [mandatory] > MTU: 1480 > > ACL Data RX: Handle 256 flags 0x02 dlen 15 #254 [hci0] 103.509165 > L2CAP: Configure Response (0x05) ident 6 len 7 > Source CID: 65 > Flags: 0x0000 > Result: Failure - unknown options (0x0003) > 04 . > < ACL Data TX: Handle 256 flags 0x00 dlen 12 #255 [hci0] 103.509426 > L2CAP: Configure Request (0x04) ident 7 len 4 > Destination CID: 65 > Flags: 0x0000 > < ACL Data TX: Handle 256 flags 0x00 dlen 12 #257 [hci0] 103.511870 > L2CAP: Connection Request (0x02) ident 8 len 4 > PSM: 1 (0x0001) > Source CID: 66 > > ACL Data RX: Handle 256 flags 0x02 dlen 14 #259 [hci0] 103.514121 > L2CAP: Configure Response (0x05) ident 7 len 6 > Source CID: 65 > Flags: 0x0000 > Result: Success (0x0000) > > Signed-off-by: Florian Dollinger <dollinger.florian@xxxxxx> > Co-developed-by: Florian Dollinger <dollinger.florian@xxxxxx> Reviewed-by: Luiz Augusto Von Dentz <luiz.von.dentz@xxxxxxxxx> > --- > net/bluetooth/l2cap_core.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index 1ab27b90ddcb..3ab95ea2cd80 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -4513,6 +4513,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, > } > goto done; > > + case L2CAP_CONF_UNKNOWN: > case L2CAP_CONF_UNACCEPT: > if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) { > char req[64]; > -- > 2.29.2 > -- Luiz Augusto von Dentz