From patchwork Wed Apr 22 17:01:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 11504293 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2F9C21392 for ; Wed, 22 Apr 2020 17:01:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 18A302082E for ; Wed, 22 Apr 2020 17:01:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587574878; bh=o+auKcWMBhiFn+f+0TwDu8I9ke9YQGIDki/HrHb5IO0=; h=From:To:Subject:Date:List-ID:From; b=cdXAYPXfB0jPXpAXIDyiVHOQgXO2j1bsQbVUjXNOlyinzulzJSE0dirFNu0GTwqFh bMCDcDy/ZvCFLTTqw4eIpW4G0s6ADs14mZEgj/QKYYFwq7064HkxUAsZ3ivAJwklan FwAc4v7+RzQ8DbDmFn5ERRsBsPmlbgOrgRKIpDj8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726486AbgDVRBR (ORCPT ); Wed, 22 Apr 2020 13:01:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:57556 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726303AbgDVRBR (ORCPT ); Wed, 22 Apr 2020 13:01:17 -0400 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B316720776 for ; Wed, 22 Apr 2020 17:01:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587574876; bh=o+auKcWMBhiFn+f+0TwDu8I9ke9YQGIDki/HrHb5IO0=; h=From:To:Subject:Date:From; b=qew4A3/sMoUmKwU2FHArjTbx6rmQeelDMSEYAdsY8VWmXirytyxcFjT7tAvQzzA0u cJAPalGYa1gRfFN652NA8Kfl1vYTLoMMk1Cng9xl+nD4nbqFlqg/GCBHMc8bENLBiZ uRWO2ap9QcYiRSG7+OXa9cwEdRHVis9HtYcSuAOE= Received: by pali.im (Postfix) id A633C7E6; Wed, 22 Apr 2020 19:01:14 +0200 (CEST) From: =?utf-8?q?Pali_Roh=C3=A1r?= To: linux-bluetooth@vger.kernel.org Subject: [PATCH v2 1/2] btio: Show destination address in connect error message Date: Wed, 22 Apr 2020 19:01:04 +0200 Message-Id: <20200422170105.29685-1-pali@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org When connect() fails it is not possible to retrieve destination address as socket is not bound. So put destination address into error message. --- btio/btio.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/btio/btio.c b/btio/btio.c index e7b4db16b..3ea73faea 100644 --- a/btio/btio.c +++ b/btio/btio.c @@ -85,6 +85,7 @@ struct connect { BtIOConnect connect; gpointer user_data; GDestroyNotify destroy; + bdaddr_t dst; }; struct accept { @@ -214,6 +215,7 @@ static gboolean connect_cb(GIOChannel *io, GIOCondition cond, GError *gerr = NULL; int err, sk_err, sock; socklen_t len = sizeof(sk_err); + char addr[18]; /* If the user aborted this connect attempt */ if ((cond & G_IO_NVAL) || check_nval(io)) @@ -226,8 +228,11 @@ static gboolean connect_cb(GIOChannel *io, GIOCondition cond, else err = -sk_err; - if (err < 0) - ERROR_FAILED(&gerr, "connect error", -err); + if (err < 0) { + ba2str(&conn->dst, addr); + g_set_error(&gerr, BT_IO_ERROR, err, + "connect to %s: %s (%d)", addr, strerror(-err), -err); + } conn->connect(io, gerr, conn->user_data); @@ -286,7 +291,7 @@ static void server_add(GIOChannel *io, BtIOConnect connect, (GDestroyNotify) server_remove); } -static void connect_add(GIOChannel *io, BtIOConnect connect, +static void connect_add(GIOChannel *io, BtIOConnect connect, bdaddr_t dst, gpointer user_data, GDestroyNotify destroy) { struct connect *conn; @@ -296,6 +301,7 @@ static void connect_add(GIOChannel *io, BtIOConnect connect, conn->connect = connect; conn->user_data = user_data; conn->destroy = destroy; + conn->dst = dst; cond = G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL; g_io_add_watch_full(io, G_PRIORITY_DEFAULT, cond, connect_cb, conn, @@ -1671,6 +1677,7 @@ GIOChannel *bt_io_connect(BtIOConnect connect, gpointer user_data, struct set_opts opts; int err, sock; gboolean ret; + char addr[18]; va_start(args, opt1); ret = parse_set_opts(&opts, gerr, opt1, args); @@ -1710,12 +1717,14 @@ GIOChannel *bt_io_connect(BtIOConnect connect, gpointer user_data, } if (err < 0) { - ERROR_FAILED(gerr, "connect", -err); + ba2str(&opts.dst, addr); + g_set_error(gerr, BT_IO_ERROR, err, + "connect to %s: %s (%d)", addr, strerror(-err), -err); g_io_channel_unref(io); return NULL; } - connect_add(io, connect, user_data, destroy); + connect_add(io, connect, opts.dst, user_data, destroy); return io; } From patchwork Wed Apr 22 17:01:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 11504295 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AD60B1575 for ; Wed, 22 Apr 2020 17:01:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 950F320776 for ; Wed, 22 Apr 2020 17:01:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587574883; bh=3+N2kLgOyTEEtxz+4c1rz6ODvL1KPynT5IZuQ37AJ6o=; h=From:To:Subject:Date:In-Reply-To:References:List-ID:From; b=ueWj4xSDiWt2dLyLaKGiXUo6kZVeBihvSiisVfnraWXChLEplFWmc1VavwUYpc6VO 2weRN15RYlTcPRSB6vG5mUHvqclB8ZA1UD5fxbQe/LKIReVvWqMgpIXK9+dZIxwYTf e0h74LqbOtgRwSsFgmVV0qwWWR6G1cjp5Sbbbay0= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726832AbgDVRBW (ORCPT ); Wed, 22 Apr 2020 13:01:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:57648 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726303AbgDVRBW (ORCPT ); Wed, 22 Apr 2020 13:01:22 -0400 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8C57A20776 for ; Wed, 22 Apr 2020 17:01:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587574881; bh=3+N2kLgOyTEEtxz+4c1rz6ODvL1KPynT5IZuQ37AJ6o=; h=From:To:Subject:Date:In-Reply-To:References:From; b=RQd2uCJ1JYA2WC8mlybio3MG22wLChs7J4EEGjeLNzT7yWL/sdlKScmnWOA1oYpD2 pvr6LGzNbkSV92XXs1fABV3Ua3+jWd3nXvkmz3P307/MC1KIqPuf575zaZ2n61lTPT mpTNdfjb52WyhCayyMkU4Jwzv3aSXF0C9mWhxBMM= Received: by pali.im (Postfix) id E76CA7E6; Wed, 22 Apr 2020 19:01:19 +0200 (CEST) From: =?utf-8?q?Pali_Roh=C3=A1r?= To: linux-bluetooth@vger.kernel.org Subject: [PATCH v2 2/2] profile: Fix reporting error message when connection failed Date: Wed, 22 Apr 2020 19:01:05 +0200 Message-Id: <20200422170105.29685-2-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200422170105.29685-1-pali@kernel.org> References: <20200422170105.29685-1-pali@kernel.org> MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Some bluetooth headsets do not support connecting more then one bluetooth profile (e.g. in parallel A2DP and HSP, or HSP and HFP) and issuing connect() syscall for second profile returns just ECONNREFUSED. Prior this patch bluetooth daemon for such situation reported following message to log: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107) Message is incorrect as connect() syscall failed, not getpeername(). This patch fixes this problem and logs correct error message: Headset Voice gateway failed connect to XX:XX:XX:XX:XX:XX: Connection refused (111) Main problem was in ext_connect() function which called bt_io_get() for retrieving remote address (BT_IO_OPT_DEST) and if it failed then original error from connect() syscall was masked. Because it is not possible to retrieve BT_IO_OPT_DEST for unconnected socket, original destination address for error message is propagated via connect_add() function in btio. --- Having correct error message in logs is important. Due to this mangled error message I was not able to easily debug why particular bluetooth headset sometimes connection with nonsense error that Transport endpoint was not connected. --- src/profile.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/profile.c b/src/profile.c index c2992e795..6961a107b 100644 --- a/src/profile.c +++ b/src/profile.c @@ -1085,12 +1085,13 @@ static void ext_connect(GIOChannel *io, GError *err, gpointer user_data) if (!bt_io_get(io, &io_err, BT_IO_OPT_DEST, addr, BT_IO_OPT_INVALID)) { - error("Unable to get connect data for %s: %s", ext->name, - io_err->message); if (err) { + error("%s failed %s", ext->name, err->message); g_error_free(io_err); io_err = NULL; } else { + error("Unable to get connect data for %s: %s", + ext->name, io_err->message); err = io_err; } goto drop;