From patchwork Sun Feb 9 10:39:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 863643 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B30EC13A3F2 for ; Sun, 9 Feb 2025 10:40:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097607; cv=pass; b=VMJsaFWhF0d/mHjmR61qb2cCiKiaSx5uGFTaoBY55eW5T46eFtKI6DGdXMhqvxrKcbRa7MLyU79oFDcsF8SqZG53LrfILlx/B1YAcbMPzqPvF/6tMUy9vwburMJsqP4RodxsqFxbgbbrfZMrFgIbWdzJCoH5WVJQDICdKxB2W3E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097607; c=relaxed/simple; bh=aEu26T2gIfTuIY1iNjKJAyXDXc0KMCOJRqSg18UgE5I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mTArBRWF5FmGCRY5VkmV/eigKm2kWFVaMCd8wF8mq6I+RYR3CW+RoRfWKUVvSmCZNF8FyPBoEfuVCRfnKEqeGd1U/udrJF65rXhUCBfFZvIZw8CK6n3NdJxLaJKCYl0mLPgy6HL4roYvD2/bpWVEyq6Jwq/uEy7g0iXX9jqTQtA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=VwuxnMSk; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="VwuxnMSk" Received: from monolith.lan (unknown [193.138.7.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4YrPNg2jzBz49Q6m; Sun, 9 Feb 2025 12:40:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097604; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gjY9XXScNL7xvOLdXD/zlErhPo7jr7n8peDpvsMGN3s=; b=VwuxnMSkgMHyRjlRYa8yD3M+oVV1yLbiztXO8xk08SPvzuYua36tuXjYbBhiJdmgq25VKr e58cT7mQDEQ0NNYLHQCce9VCZzGtiL7E7A++MPWLsEoV70ae8UPY/zZSzysuAeE6SmFwb0 srwtLRhTxWAcaAkc5L0b/+LTnMypsW3sa9Dk7SBfZl4Wg6+KDOQy/OAscMBC/FtvpAOrI4 k2lgsNMNdosHKE7+MzShZ4UiJK5vUZ8JZWfrlg0G29LJgDAZetktWUnlg7AcRW7ivUppiB I02C+3ZBW5105/VaRXmqH91U/AcocLY/dgISLykedwOxs4SBGaJM0q84MgyAfg== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1739097604; a=rsa-sha256; cv=none; b=Wyf5w3qqXTfnAOM4/Kk0RdKOpHjCQbXpZD8OGdDxBFULlH2b4c3kK1lIQa0GsjGYo9ffOK iz1R0peIIoLjioLoHWyXI9WD8woAXnYJhFPicXhCk8lmmJNLg6Jxt5rf29ekDY7wZP19X8 d/oTLneJAgOrXAZW34cFnH0ccjSc11OIg7bx0xtFhL6zCyOOSJDM5gecXVijWKyvAMYnyD RRUmxwrefRBFfY97r8z1FFMioTNUuQQ6u3w4+EFZIz0iTSdHNaXBNZKm26XFFk0WL1qOm4 FO+rCK8trMpCAo5/RDRUBNUsmy8YzVZQ3PHjIpkvhVVgePQx+4QFcloyuNaUQw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097604; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gjY9XXScNL7xvOLdXD/zlErhPo7jr7n8peDpvsMGN3s=; b=AJQ30u4nPFnZByOQWTgmcBAQ6v+NWt11lQ+htGdVPi8kmR6brF+sqn6nvJb7ittcAPMRtQ ILpeefvH7ZbT4/8oFFSVcUpTdZ6Cjr6I3JqMRR8l2XbDVSOPEkeoejvxherfu0DUEzH5S1 X0N4x9ytTeVzRR53EzRGfmTtTMnzNYGv95doXhvYB8a/jOvnZx2+x4aY+ddbtDhvVjCw+F 2tvLGO+Eio71ZleNd13FU7w1LiipnjwBmmidQssvNEYDsrNQUeobVcXR09XRjUev3SAT4h pnxkCQuRwO+/Kd2VjBtbDwBrf/NggdxstS/QpGI7i7r7Hjw+AeZ+4g7ixISKpA== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 1/3] tools/tester: test COMPLETION timestamps Date: Sun, 9 Feb 2025 12:39:55 +0200 Message-ID: <4449644d9883f313fc6ad883f56fe07420815bf1.1739026302.git.pav@iki.fi> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add support for SOF_TIMESTAMPING_TX_COMPLETION also in cases where errqueue.h is old and doesn't define it. Support timestamps of different types arriving out of order, as multiple SND may well arrive before COMPLETION. Also allow TX timestamp arriving before bthost receives data, as that may well happen. Remove tests SCHED timestamps, as those won't be generated for now. Don't test COMPLETION for SCO, since it's not supported now either. --- configure.ac | 7 +++++++ tools/iso-tester.c | 36 +++++++++++------------------------- tools/l2cap-tester.c | 14 ++++++++------ tools/sco-tester.c | 8 ++++---- tools/tester.h | 42 +++++++++++++++++++++++++++++++++++------- 5 files changed, 65 insertions(+), 42 deletions(-) diff --git a/configure.ac b/configure.ac index 6a19487f6..75841e4c9 100644 --- a/configure.ac +++ b/configure.ac @@ -389,6 +389,13 @@ AC_ARG_ENABLE(testing, AS_HELP_STRING([--enable-testing], [enable_testing=${enableval}]) AM_CONDITIONAL(TESTING, test "${enable_testing}" = "yes") +if (test "${enable_testing}" = "yes"); then + AC_CHECK_DECLS([SOF_TIMESTAMPING_TX_COMPLETION, SCM_TSTAMP_COMPLETION], + [], [], [[#include + #include + #include ]]) +fi + AC_ARG_ENABLE(experimental, AS_HELP_STRING([--enable-experimental], [enable experimental tools]), [enable_experimental=${enableval}]) diff --git a/tools/iso-tester.c b/tools/iso-tester.c index c30c44ce9..b5e638808 100644 --- a/tools/iso-tester.c +++ b/tools/iso-tester.c @@ -1066,20 +1066,10 @@ static const struct iso_client_data connect_send_tx_timestamping = { .send = &send_16_2_1, .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID | - SOF_TIMESTAMPING_TX_SOFTWARE), - .repeat_send = 1, - .repeat_send_pre_ts = 2, -}; - -static const struct iso_client_data connect_send_tx_sched_timestamping = { - .qos = QOS_16_2_1, - .expect_err = 0, - .send = &send_16_2_1, - .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_TX_SOFTWARE | - SOF_TIMESTAMPING_OPT_TSONLY | - SOF_TIMESTAMPING_TX_SCHED), + SOF_TIMESTAMPING_TX_COMPLETION), .repeat_send = 1, + .repeat_send_pre_ts = 2, }; static const struct iso_client_data connect_send_tx_cmsg_timestamping = { @@ -1087,7 +1077,8 @@ static const struct iso_client_data connect_send_tx_cmsg_timestamping = { .expect_err = 0, .send = &send_16_2_1, .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | - SOF_TIMESTAMPING_TX_SOFTWARE), + SOF_TIMESTAMPING_OPT_TSONLY | + SOF_TIMESTAMPING_TX_COMPLETION), .repeat_send = 1, .cmsg_timestamping = true, }; @@ -1097,7 +1088,7 @@ static const struct iso_client_data connect_send_tx_no_poll_timestamping = { .expect_err = 0, .send = &send_16_2_1, .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | - SOF_TIMESTAMPING_TX_SOFTWARE), + SOF_TIMESTAMPING_TX_COMPLETION), .repeat_send = 1, .no_poll_errqueue = true, }; @@ -2241,10 +2232,10 @@ static gboolean iso_recv_errqueue(GIOChannel *io, GIOCondition cond, err = tx_tstamp_recv(&data->tx_ts, sk, isodata->send->iov_len); if (err > 0) return TRUE; - else if (!err && !data->step) - tester_test_passed(); - else + else if (err) tester_test_failed(); + else if (!data->step) + tester_test_passed(); data->io_id[2] = 0; return FALSE; @@ -2289,7 +2280,7 @@ static void iso_tx_timestamping(struct test_data *data, GIOChannel *io) int err; unsigned int count; - if (!(isodata->so_timestamping & SOF_TIMESTAMPING_TX_RECORD_MASK)) + if (!(isodata->so_timestamping & TS_TX_RECORD_MASK)) return; tester_print("Enabling TX timestamping"); @@ -2336,7 +2327,7 @@ static void iso_tx_timestamping(struct test_data *data, GIOChannel *io) } if (isodata->cmsg_timestamping) - so &= ~SOF_TIMESTAMPING_TX_RECORD_MASK; + so &= ~TS_TX_RECORD_MASK; err = setsockopt(sk, SOL_SOCKET, SO_TIMESTAMPING, &so, sizeof(so)); if (err < 0) { @@ -2374,7 +2365,7 @@ static void iso_send_data(struct test_data *data, GIOChannel *io) cmsg->cmsg_len = CMSG_LEN(sizeof(uint32_t)); *((uint32_t *)CMSG_DATA(cmsg)) = (isodata->so_timestamping & - SOF_TIMESTAMPING_TX_RECORD_MASK); + TS_TX_RECORD_MASK); } ret = sendmsg(sk, &msg, 0); @@ -3645,11 +3636,6 @@ int main(int argc, char *argv[]) test_iso("ISO Send - TX Timestamping", &connect_send_tx_timestamping, setup_powered, test_connect); - /* Test schedule-time TX timestamps are emitted */ - test_iso("ISO Send - TX Sched Timestamping", - &connect_send_tx_sched_timestamping, setup_powered, - test_connect); - /* Test TX timestamping with flags set via per-packet CMSG */ test_iso("ISO Send - TX CMSG Timestamping", &connect_send_tx_cmsg_timestamping, setup_powered, diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c index 1780c9fbd..7f3be6c0f 100644 --- a/tools/l2cap-tester.c +++ b/tools/l2cap-tester.c @@ -381,7 +381,8 @@ static const struct l2cap_data client_connect_tx_timestamping_test = { .data_len = sizeof(l2_data), .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID | - SOF_TIMESTAMPING_TX_SOFTWARE), + SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_TX_COMPLETION), .repeat_send = 2, }; @@ -594,7 +595,8 @@ static const struct l2cap_data le_client_connect_tx_timestamping_test = { .data_len = sizeof(l2_data), .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID | - SOF_TIMESTAMPING_TX_SOFTWARE), + SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_TX_COMPLETION), }; static const struct l2cap_data le_client_connect_adv_success_test_1 = { @@ -1345,10 +1347,10 @@ static gboolean recv_errqueue(GIOChannel *io, GIOCondition cond, err = tx_tstamp_recv(&data->tx_ts, sk, l2data->data_len); if (err > 0) return TRUE; - else if (!err && !data->step) - tester_test_passed(); - else + else if (err) tester_test_failed(); + else if (!data->step) + tester_test_passed(); data->err_io_id = 0; return FALSE; @@ -1362,7 +1364,7 @@ static void l2cap_tx_timestamping(struct test_data *data, GIOChannel *io) int err; unsigned int count; - if (!(l2data->so_timestamping & SOF_TIMESTAMPING_TX_RECORD_MASK)) + if (!(l2data->so_timestamping & TS_TX_RECORD_MASK)) return; sk = g_io_channel_unix_get_fd(io); diff --git a/tools/sco-tester.c b/tools/sco-tester.c index 6fc26b7af..130ab526d 100644 --- a/tools/sco-tester.c +++ b/tools/sco-tester.c @@ -665,10 +665,10 @@ static gboolean recv_errqueue(GIOChannel *io, GIOCondition cond, err = tx_tstamp_recv(&data->tx_ts, sk, scodata->data_len); if (err > 0) return TRUE; - else if (!err && !data->step) - tester_test_passed(); - else + else if (err) tester_test_failed(); + else if (!data->step) + tester_test_passed(); data->err_io_id = 0; return FALSE; @@ -682,7 +682,7 @@ static void sco_tx_timestamping(struct test_data *data, GIOChannel *io) int err; unsigned int count; - if (!(scodata->so_timestamping & SOF_TIMESTAMPING_TX_RECORD_MASK)) + if (!(scodata->so_timestamping & TS_TX_RECORD_MASK)) return; sk = g_io_channel_unix_get_fd(io); diff --git a/tools/tester.h b/tools/tester.h index b6de084a4..82770014f 100644 --- a/tools/tester.h +++ b/tools/tester.h @@ -20,6 +20,15 @@ #define SEC_NSEC(_t) ((_t) * 1000000000LL) #define TS_NSEC(_ts) (SEC_NSEC((_ts)->tv_sec) + (_ts)->tv_nsec) +#if !HAVE_DECL_SOF_TIMESTAMPING_TX_COMPLETION +#define SOF_TIMESTAMPING_TX_COMPLETION (SOF_TIMESTAMPING_LAST << 1) +#endif +#if !HAVE_DECL_SCM_TSTAMP_COMPLETION +#define SCM_TSTAMP_COMPLETION (SCM_TSTAMP_ACK + 1) +#endif +#define TS_TX_RECORD_MASK (SOF_TIMESTAMPING_TX_RECORD_MASK | \ + SOF_TIMESTAMPING_TX_COMPLETION) + struct tx_tstamp_data { struct { uint32_t id; @@ -59,6 +68,13 @@ static inline int tx_tstamp_expect(struct tx_tstamp_data *data) pos++; } + if (data->so_timestamping & SOF_TIMESTAMPING_TX_COMPLETION) { + g_assert(pos < ARRAY_SIZE(data->expect)); + data->expect[pos].type = SCM_TSTAMP_COMPLETION; + data->expect[pos].id = data->sent; + pos++; + } + data->sent++; steps = pos - data->count; @@ -77,6 +93,7 @@ static inline int tx_tstamp_recv(struct tx_tstamp_data *data, int sk, int len) struct scm_timestamping *tss = NULL; struct sock_extended_err *serr = NULL; struct timespec now; + unsigned int i; iov.iov_base = buf; iov.iov_len = sizeof(buf); @@ -89,7 +106,7 @@ static inline int tx_tstamp_recv(struct tx_tstamp_data *data, int sk, int len) ret = recvmsg(sk, &msg, MSG_ERRQUEUE); if (ret < 0) { - if (ret == EAGAIN || ret == EWOULDBLOCK) + if (errno == EAGAIN || errno == EWOULDBLOCK) return data->count - data->pos; tester_warn("Failed to read from errqueue: %s (%d)", @@ -147,18 +164,29 @@ static inline int tx_tstamp_recv(struct tx_tstamp_data *data, int sk, int len) return -EINVAL; } - if ((data->so_timestamping & SOF_TIMESTAMPING_OPT_ID) && - serr->ee_data != data->expect[data->pos].id) { - tester_warn("Bad timestamp id %u", serr->ee_data); + /* Find first unreceived timestamp of the right type */ + for (i = 0; i < data->count; ++i) { + if (data->expect[i].type >= 0xffff) + continue; + + if (serr->ee_info == data->expect[i].type) { + data->expect[i].type = 0xffff; + break; + } + } + if (i == data->count) { + tester_warn("Bad timestamp type %u", serr->ee_info); return -EINVAL; } - if (serr->ee_info != data->expect[data->pos].type) { - tester_warn("Bad timestamp type %u", serr->ee_info); + if ((data->so_timestamping & SOF_TIMESTAMPING_OPT_ID) && + serr->ee_data != data->expect[i].id) { + tester_warn("Bad timestamp id %u", serr->ee_data); return -EINVAL; } - tester_print("Got valid TX timestamp %u", data->pos); + tester_print("Got valid TX timestamp %u (type %u, id %u)", i, + serr->ee_info, serr->ee_data); ++data->pos; From patchwork Sun Feb 9 10:39:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 863915 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B500F156230 for ; Sun, 9 Feb 2025 10:40:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097608; cv=pass; b=AevRZCcDbnNpAEYtNOVjeX19z02FCCpyAP83g94ygdRQ2ZEKgoIfVPew0xtNKUEvo5xBQbNwlgsz364ydhpl9I1KlJaeEWSPctLl31BUUienc3NSHwkC/3vwasde+WYTShF+LWwKojiF3nuABzbTwRrbsrppZ/wnzDpLwQiOX8c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097608; c=relaxed/simple; bh=rwb4TSe+AMqNTl8vvhFOsmLtxecmTYXF65mJCysLNyE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kWftm3cCQyfMGz6ThgWCnC1GFqETj+mhL80DzX+t5PBdKarC9outXTAbS/AMxehlZCLbGphNqnGn2VAXUoet7lzoWigP2e+EzPVC+DDevUsjfFcWfy27dpqMeNbiKdeJ5c+pPM36z9YyqHpW4optKNR/6Lr4ukn26vTgHxj1bnk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=K9drfrJ1; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="K9drfrJ1" Received: from monolith.lan (unknown [193.138.7.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4YrPNh2vwCz49Q8f; Sun, 9 Feb 2025 12:40:04 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=069MKW1HASgDTP9DVzl7X5YvjQ78Pp+mwBLwBlR5wfE=; b=K9drfrJ12+e7MhBiGjFr7fa9ifhNUxz8Y6vCF1eOWSCAsrAO9GLI86seUKSYKsNzEOBbhy LGAcXLswkno8obzOVhy8fpj3dV0L3whrmm6YpqLwtEluc9JfcB6Yk2uWIAmCWfmcvP3rf8 yRToHrx70AmIcTeUTnSNyi/VZNVShoAOiqLLkxZkwsix9hKYEV2pCgcverJ/8Shf5qbAPw HTjwO2/oGcGHK6qOYaoizZlOxHR8mVBeEUaZcZ+ddCyt1hqIUKDDAxKLahSfQJbXww6o8V oZXZDJa0UGc+LCH8mZxtDpC6KoKmb7jYG22TXHV+IKugMbRpeV+Sy2J4kn3itw== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1739097605; a=rsa-sha256; cv=none; b=GCFLCSwNj0Vgtwvox3zRlk1j1KOgK9KWK8tKaOiB7cfToF4C6ua4bmFj00mA9sBaRUhY5l oWso05wfGiQ1IBwQB62Z5FJAGjXB2Iz+jk1O0mkctUk2N7Cjoe6N34JjEZBkm5WSwiroma VkAg5s+mEYewsxTBOpBI1RVJCoK7Qfu89s/ibbvQBRxsJ3hdW/ZwaBRVdpcbU1yBijoBWS 56XTBB/j1b707xX/3IBE6pcR0u9glmuL0PBJ9FZaRpPGOL5Yf5f2HZDe8wdQudxfclc7SS 75dlOz45tbz3JxNwvcQJqsoM3RFgElAqOcfSSg+wXsSG86R3eGl795iLFe0sxQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=069MKW1HASgDTP9DVzl7X5YvjQ78Pp+mwBLwBlR5wfE=; b=SYfw7jXH8DV2xiZ9AjgZfMC9/pdgx8VTMmHMCur6a0uO47xo4aLWcXz9VUzV55f7YN301T IT6v9a6+hBJ/OXQ7MTVw9za/7yY7nXBingTyaRqAHbPzoYAotA5gfpBxgthihSt20LanoK UTF09GTt/wVAaabec42tgO41z1mnVd6kQGHXVn1FBAgaL/Qj+j1V1PE6sPHVskEP/lOn6A NcSxjdHb+Wa9lxaZMwuDWxTfvzel8m/zx2w9DwZ5FDEi0XYwqvwA3+gJnb9Tzq85HxIykh SqvVTivpjJp+ITR4hmAWjTr5UNy2I+IqixEy/4iaBAlfkEp7ol0HAi8yjwhTMw== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 2/3] l2cap-tester: add test for stream socket TX timestamping Date: Sun, 9 Feb 2025 12:39:56 +0200 Message-ID: <2f91b56dfcab5c3d163274667ea3bdca404bce77.1739026302.git.pav@iki.fi> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Stream socket TX timestamp ids shall refer to the byte positions. Add test: L2CAP BR/EDR Client - Stream TX Timestamping --- tools/iso-tester.c | 4 ++-- tools/l2cap-tester.c | 32 ++++++++++++++++++++++++++++---- tools/sco-tester.c | 4 ++-- tools/tester.h | 12 +++++++++--- 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/tools/iso-tester.c b/tools/iso-tester.c index b5e638808..ad0738091 100644 --- a/tools/iso-tester.c +++ b/tools/iso-tester.c @@ -2285,10 +2285,10 @@ static void iso_tx_timestamping(struct test_data *data, GIOChannel *io) tester_print("Enabling TX timestamping"); - tx_tstamp_init(&data->tx_ts, isodata->so_timestamping); + tx_tstamp_init(&data->tx_ts, isodata->so_timestamping, false); for (count = 0; count < isodata->repeat_send + 1; ++count) - data->step += tx_tstamp_expect(&data->tx_ts); + data->step += tx_tstamp_expect(&data->tx_ts, 0); sk = g_io_channel_unix_get_fd(io); diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c index 7f3be6c0f..395e76dbc 100644 --- a/tools/l2cap-tester.c +++ b/tools/l2cap-tester.c @@ -102,6 +102,9 @@ struct l2cap_data { /* Number of additional packets to send. */ unsigned int repeat_send; + + /* Socket type (0 means SOCK_SEQPACKET) */ + int sock_type; }; static void print_debug(const char *str, void *user_data) @@ -386,6 +389,19 @@ static const struct l2cap_data client_connect_tx_timestamping_test = { .repeat_send = 2, }; +static const struct l2cap_data client_connect_stream_tx_timestamping_test = { + .client_psm = 0x1001, + .server_psm = 0x1001, + .write_data = l2_data, + .data_len = sizeof(l2_data), + .so_timestamping = (SOF_TIMESTAMPING_SOFTWARE | + SOF_TIMESTAMPING_OPT_ID | + SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_TX_COMPLETION), + .repeat_send = 2, + .sock_type = SOCK_STREAM, +}; + static const struct l2cap_data client_connect_shut_wr_success_test = { .client_psm = 0x1001, .server_psm = 0x1001, @@ -1371,10 +1387,11 @@ static void l2cap_tx_timestamping(struct test_data *data, GIOChannel *io) tester_print("Enabling TX timestamping"); - tx_tstamp_init(&data->tx_ts, l2data->so_timestamping); + tx_tstamp_init(&data->tx_ts, l2data->so_timestamping, + l2data->sock_type == SOCK_STREAM); for (count = 0; count < l2data->repeat_send + 1; ++count) - data->step += tx_tstamp_expect(&data->tx_ts); + data->step += tx_tstamp_expect(&data->tx_ts, l2data->data_len); err = setsockopt(sk, SOL_SOCKET, SO_TIMESTAMPING, &so, sizeof(so)); if (err < 0) { @@ -1523,9 +1540,12 @@ static int create_l2cap_sock(struct test_data *data, uint16_t psm, const uint8_t *central_bdaddr; struct sockaddr_l2 addr; int sk, err; + int sock_type = SOCK_SEQPACKET; - sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, - BTPROTO_L2CAP); + if (l2data && l2data->sock_type) + sock_type = l2data->sock_type; + + sk = socket(PF_BLUETOOTH, sock_type | SOCK_NONBLOCK, BTPROTO_L2CAP); if (sk < 0) { err = -errno; tester_warn("Can't create socket: %s (%d)", strerror(errno), @@ -2523,6 +2543,10 @@ int main(int argc, char *argv[]) &client_connect_tx_timestamping_test, setup_powered_client, test_connect); + test_l2cap_bredr("L2CAP BR/EDR Client - Stream TX Timestamping", + &client_connect_stream_tx_timestamping_test, + setup_powered_client, test_connect); + test_l2cap_bredr("L2CAP BR/EDR Client - Invalid PSM 1", &client_connect_nval_psm_test_1, setup_powered_client, test_connect); diff --git a/tools/sco-tester.c b/tools/sco-tester.c index 130ab526d..ae76b1ddd 100644 --- a/tools/sco-tester.c +++ b/tools/sco-tester.c @@ -689,10 +689,10 @@ static void sco_tx_timestamping(struct test_data *data, GIOChannel *io) tester_print("Enabling TX timestamping"); - tx_tstamp_init(&data->tx_ts, scodata->so_timestamping); + tx_tstamp_init(&data->tx_ts, scodata->so_timestamping, false); for (count = 0; count < scodata->repeat_send + 1; ++count) - data->step += tx_tstamp_expect(&data->tx_ts); + data->step += tx_tstamp_expect(&data->tx_ts, 0); err = setsockopt(sk, SOL_SOCKET, SO_TIMESTAMPING, &so, sizeof(so)); if (err < 0) { diff --git a/tools/tester.h b/tools/tester.h index 82770014f..14aa1e3ab 100644 --- a/tools/tester.h +++ b/tools/tester.h @@ -38,22 +38,27 @@ struct tx_tstamp_data { unsigned int count; unsigned int sent; uint32_t so_timestamping; + bool stream; }; static inline void tx_tstamp_init(struct tx_tstamp_data *data, - uint32_t so_timestamping) + uint32_t so_timestamping, bool stream) { memset(data, 0, sizeof(*data)); memset(data->expect, 0xff, sizeof(data->expect)); data->so_timestamping = so_timestamping; + data->stream = stream; } -static inline int tx_tstamp_expect(struct tx_tstamp_data *data) +static inline int tx_tstamp_expect(struct tx_tstamp_data *data, size_t len) { unsigned int pos = data->count; int steps; + if (data->stream && len) + data->sent += len - 1; + if (data->so_timestamping & SOF_TIMESTAMPING_TX_SCHED) { g_assert(pos < ARRAY_SIZE(data->expect)); data->expect[pos].type = SCM_TSTAMP_SCHED; @@ -75,7 +80,8 @@ static inline int tx_tstamp_expect(struct tx_tstamp_data *data) pos++; } - data->sent++; + if (!data->stream || len) + data->sent++; steps = pos - data->count; data->count = pos; From patchwork Sun Feb 9 10:39:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pauli Virtanen X-Patchwork-Id: 863642 Received: from lahtoruutu.iki.fi (lahtoruutu.iki.fi [185.185.170.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBD69165EFC for ; Sun, 9 Feb 2025 10:40:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.185.170.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097609; cv=pass; b=tpJOBn5tv4ngiAsTWFyhrlA22rmrYCcAnchWMgL2iLDzTwJO+Tjh1QqDOfEE0e3QmHgB3PiedQuiSAuEtsXsI3DhJx09bZOg1YZ1to6VR0tbXdC5HLiNOgyXiJF6EvRN13Harkx1NzyfzPKCfhxBZmMdLIp8PhDM4qcguNFU/eE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739097609; c=relaxed/simple; bh=DRXET7bl8LRxgvn86Z9hUQhMDZNj3T9bcx9ufBBOA5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R93lL2gysyRzRLs63mSF4Sb7CLH4Q1N+yP8NJS1dq3oGavFmaR5Z2VDO7skyTVxNdThPpezSU+zt6pQgWK4Sp9o7vomydat6KyUbCPcecEX0ManqiG+pd2ryo4TVcGlppxAiXWADfD5h5Q9MUMhkknYgKRuT9h8UUTl17MheEpQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi; spf=pass smtp.mailfrom=iki.fi; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b=hjJV30gJ; arc=pass smtp.client-ip=185.185.170.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iki.fi Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iki.fi Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=iki.fi header.i=@iki.fi header.b="hjJV30gJ" Received: from monolith.lan (unknown [193.138.7.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pav) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4YrPNj341nz49Q5l; Sun, 9 Feb 2025 12:40:05 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097606; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eqiSfjY+jmPeMy12FlPWkUB6hSk3vxE+RqatU8sN+Hc=; b=hjJV30gJel6FqRSHbjRGfaX50K+2a+odF1bJ6BfsmE9Th2nrrS7ooAnNlpqRmenSzRr+me Mjg12p6/jAs1WN0eoKM2ubHNGS1fSJLJM6przLsoYQvGlfcF47CTt/zPlWxl5td1gxYTeL bJDBBs2ZSEaZ+6/t3TyebL/oISvQT3ut8DWhDglHItLg3OEzDkVGbd/iqEH9WfdVqX2QL6 OWM/Dq/OTG0nbGC7+SwoU4BIAEJgp7tU1Tf0a/DuK4kbOAIzot6j6gA6niOlJ0kRl2mCTv kVb3/sidZARgNDNGSOCDRPvvUkb32abzVTeSYIlezOz2vBiTevSgWp+04VfaLg== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1739097606; a=rsa-sha256; cv=none; b=A8FU+TFKnhdR7csprRzsVSwEWgswwbRMn7+DkcqPNWonug2die8G03Gpt8dz7WdLKpgXDh MXEmQlpQunSvIG3fiPRvmGr6L9a3BzW/F+z3xzpNhXEWaXlUanOZeDgftobW/Jw+Lr0awy GoFOD1x+aQXigi6Fxl7gUbkpkVNPJUfuXNSzvZkOJ3jaK5hvLhxO+BUiQ1QCwkoRZJJoPE X2Pd35Sr4RgntSnsxV0t62IqJGWrmFefm69+eTSlDplfQVtpVzMgU/NqFB7zy4yeiWVEfc LTqhUXCrdEsb16mkIWBUehl8zNwZKU/fUx7ABQSf7hygAlX+2R93Ek1FdZN6sA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=pav smtp.mailfrom=pav@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1739097606; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eqiSfjY+jmPeMy12FlPWkUB6hSk3vxE+RqatU8sN+Hc=; b=qIN4d8gvsPWPQXe08GAG/q7dVN5jhM9qyrIxlt4SIETWixdxRZ1RYhKtdo3drNAZcFKQAe Bhi4j8hZka7rc/RabPXf+ehESUpBCpvc8xpwbWILN6ZdmWa5L3vT75kI8+r8oYZeY4vo9H HZciQtTOcIk/D686YoFO7c9JVwBuh/9s4NtGNisrSjaRxg5aGCKbyOjAKUP3idi0Kq1MZn XYaQoJr16/12ZeRHK79BK5agoBvsJQzCCmW3UQ1pUCrNhfvcwVPE6iCGoS5O7TEFC3rYu6 3KxELl13TTKR18S+ZawiEe1OJYML9MRaPC3mDesHKwNFjBX6lsotup6T2Y2Zpw== From: Pauli Virtanen To: linux-bluetooth@vger.kernel.org Cc: Pauli Virtanen Subject: [PATCH BlueZ 3/3] tools/tester: enable TX timestamping tests by default Date: Sun, 9 Feb 2025 12:39:57 +0200 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 --- tools/iso-tester.c | 2 +- tools/l2cap-tester.c | 6 ------ tools/sco-tester.c | 6 ------ 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/tools/iso-tester.c b/tools/iso-tester.c index ad0738091..640692b77 100644 --- a/tools/iso-tester.c +++ b/tools/iso-tester.c @@ -691,7 +691,7 @@ static void test_pre_setup(const void *test_data) struct test_data *data = tester_get_data(); const struct iso_client_data *isodata = test_data; - if (isodata && isodata->so_timestamping) { + if (isodata && isodata->no_poll_errqueue) { if (tester_pre_setup_skip_by_default()) return; } diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c index 395e76dbc..e56773d13 100644 --- a/tools/l2cap-tester.c +++ b/tools/l2cap-tester.c @@ -221,12 +221,6 @@ static void read_index_list_callback(uint8_t status, uint16_t length, static void test_pre_setup(const void *test_data) { struct test_data *data = tester_get_data(); - const struct l2cap_data *l2data = test_data; - - if (l2data && l2data->so_timestamping) { - if (tester_pre_setup_skip_by_default()) - return; - } data->mgmt = mgmt_new_default(); if (!data->mgmt) { diff --git a/tools/sco-tester.c b/tools/sco-tester.c index ae76b1ddd..1c07eec2d 100644 --- a/tools/sco-tester.c +++ b/tools/sco-tester.c @@ -197,12 +197,6 @@ static void read_index_list_callback(uint8_t status, uint16_t length, static void test_pre_setup(const void *test_data) { struct test_data *data = tester_get_data(); - const struct sco_client_data *scodata = test_data; - - if (scodata && scodata->so_timestamping) { - if (tester_pre_setup_skip_by_default()) - return; - } data->mgmt = mgmt_new_default(); if (!data->mgmt) {