From nobody Mon Oct 6 01:29:11 2025 Received: from mail.ionic.de (ionic.de [145.239.234.145]) (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 B1A3A2777E8; Mon, 28 Jul 2025 16:45:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=145.239.234.145 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753721151; cv=none; b=Nfg6O3k1ov9ND2kvtW0JNHbwtSfzjll8/CTFpgLpdER47MBSVOaAZ4sYNf30O/c+gZLLM1PcAZk80trwCMUzzq96T/lo3m0aZ/hvZYkcfYxiOiZ/RyPGP+k9fDeu+TuMSCwUG9ei3omk9DrhxKbj7WCRpp1WCC753AYXCy7Qmoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753721151; c=relaxed/simple; bh=zThyBy8rMuXtEidraLp50Um2nhlBj3BNkFL58ouVJ38=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sNakde5X4i4b1morsBpXrS2bb79EDuyUVyCb35wKk15/dRJaCnGj5W3hATYR9ZjWTEyeZiQL5GuHB6wUCnpJnGNTPOk4KD5373I+I8xMvl8pNs4H2gdoGNrRuLWfuwV83Kwr3uJwJnHjtxa9ajBp+ZCCV0I9yYanhzt7BON2hLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ionic.de; spf=pass smtp.mailfrom=ionic.de; dkim=pass (1024-bit key) header.d=ionic.de header.i=@ionic.de header.b=QzEC4RjD; arc=none smtp.client-ip=145.239.234.145 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ionic.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ionic.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ionic.de header.i=@ionic.de header.b="QzEC4RjD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ionic.de; s=default; t=1753721138; bh=zThyBy8rMuXtEidraLp50Um2nhlBj3BNkFL58ouVJ38=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QzEC4RjDMg4aXANzqHg8Hpx2QnAF5OanEVazlhh/7mYqqJc1VkBcEeRoE2X1iNNV7 Zk+iuw/bv21L9b1A2BerYxbTlbo67vczAcazXNKjdUD8cwnkzbU/ZVd5tliPDS6SuX 6T+/9p41jJ+aDdrRPj/Z1SkcfYAE5cOJtDdkYvdE= Received: from grml.local.home.ionic.de (unknown [IPv6:2a00:11:fb41:7a00:21b:21ff:fe5e:dddc]) by mail.ionic.de (Postfix) with ESMTPSA id 73C851488DAA; Mon, 28 Jul 2025 18:45:38 +0200 (CEST) From: Mihai Moldovan To: linux-arm-msm@vger.kernel.org, Manivannan Sadhasivam Cc: Denis Kenzior , Eric Dumazet , Kuniyuki Iwashima , Paolo Abeni , Willem de Bruijn , "David S . Miller" , Jakub Kicinski , Simon Horman , linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH v4 06/11] net: qrtr: Report endpoint for locally generated messages Date: Mon, 28 Jul 2025 18:45:23 +0200 Message-ID: <26f31faa87250c4e3b114f35d10226fd3f78eed8.1753720934.git.ionic@ionic.de> X-Mailer: git-send-email 2.50.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Denis Kenzior For messages generated by the local endpoint destined to the local endpoint, report the local endpoint identifier. Same QRTR_ENDPOINT auxiliary data and QRTR_REPORT_ENDPOINT socket option semantics apply as for messages generated by remote endpoints. Signed-off-by: Denis Kenzior Reviewed-by: Marcel Holtmann Reviewed-by: Andy Gross Signed-off-by: Mihai Moldovan --- v4: - no changes - Link to v3: https://msgid.link/ad993f8e1c8f983026e036c1291347901cb2d47b= .1753312999.git.ionic@ionic.de v3: - rebase against current master - fix checkpatch.pl function definition warnings - Link to v2: https://msgid.link/5b08be230cd2e5faf24297ee04beb7616861fe5b= .1752947108.git.ionic@ionic.de v2: - rebase against current master - Link to v1: https://msgid.link/20241018181842.1368394-6-denkenz@gmail.c= om --- net/qrtr/af_qrtr.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c index e114489dbd36..8ddaebbd76d2 100644 --- a/net/qrtr/af_qrtr.c +++ b/net/qrtr/af_qrtr.c @@ -184,9 +184,11 @@ struct qrtr_tx_flow { #define QRTR_TX_FLOW_LOW 5 =20 static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, struct sockaddr_qrtr *from, struct sockaddr_qrtr *to); static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, struct sockaddr_qrtr *from, struct sockaddr_qrtr *to); static struct qrtr_sock *qrtr_port_lookup(int port); @@ -401,6 +403,7 @@ static int qrtr_tx_flow_failed(struct qrtr_node *node, = int dest_node, =20 /* Pass an outgoing packet socket buffer to the endpoint driver. */ static int qrtr_node_enqueue(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, struct sockaddr_qrtr *from, struct sockaddr_qrtr *to) { @@ -751,7 +754,8 @@ void qrtr_endpoint_unregister(struct qrtr_endpoint *ep) skb =3D qrtr_alloc_ctrl_packet(&pkt, GFP_ATOMIC); if (skb) { pkt->cmd =3D cpu_to_le32(QRTR_TYPE_BYE); - qrtr_local_enqueue(NULL, skb, QRTR_TYPE_BYE, &src, &dst); + qrtr_local_enqueue(NULL, skb, endpoint_id, + QRTR_TYPE_BYE, &src, &dst); } } spin_unlock_irqrestore(&qrtr_nodes_lock, flags); @@ -818,8 +822,8 @@ static void qrtr_port_remove(struct qrtr_sock *ipc) pkt->client.port =3D cpu_to_le32(ipc->us.sq_port); =20 skb_set_owner_w(skb, &ipc->sk); - qrtr_bcast_enqueue(NULL, skb, QRTR_TYPE_DEL_CLIENT, &ipc->us, - &to); + qrtr_bcast_enqueue(NULL, skb, qrtr_local_nid, + QRTR_TYPE_DEL_CLIENT, &ipc->us, &to); } =20 if (port =3D=3D QRTR_PORT_CTRL) @@ -959,6 +963,7 @@ static int qrtr_bind(struct socket *sock, struct sockad= dr *saddr, int len) =20 /* Queue packet to local peer socket. */ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, struct sockaddr_qrtr *from, struct sockaddr_qrtr *to) { @@ -976,6 +981,7 @@ static int qrtr_local_enqueue(struct qrtr_node *node, s= truct sk_buff *skb, cb =3D (struct qrtr_cb *)skb->cb; cb->src_node =3D from->sq_node; cb->src_port =3D from->sq_port; + cb->endpoint_id =3D endpoint_id; =20 if (sock_queue_rcv_skb(&ipc->sk, skb)) { qrtr_port_put(ipc); @@ -990,6 +996,7 @@ static int qrtr_local_enqueue(struct qrtr_node *node, s= truct sk_buff *skb, =20 /* Queue packet for broadcast. */ static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, struct sockaddr_qrtr *from, struct sockaddr_qrtr *to) { @@ -1001,11 +1008,11 @@ static int qrtr_bcast_enqueue(struct qrtr_node *nod= e, struct sk_buff *skb, if (!skbn) break; skb_set_owner_w(skbn, skb->sk); - qrtr_node_enqueue(node, skbn, type, from, to); + qrtr_node_enqueue(node, skbn, endpoint_id, type, from, to); } mutex_unlock(&qrtr_node_lock); =20 - qrtr_local_enqueue(NULL, skb, type, from, to); + qrtr_local_enqueue(NULL, skb, endpoint_id, type, from, to); =20 return 0; } @@ -1013,12 +1020,15 @@ static int qrtr_bcast_enqueue(struct qrtr_node *nod= e, struct sk_buff *skb, static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t le= n) { DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, msg->msg_name); - int (*enqueue_fn)(struct qrtr_node *, struct sk_buff *, int, - struct sockaddr_qrtr *, struct sockaddr_qrtr *); + int (*enqueue_fn)(struct qrtr_node *node, struct sk_buff *skb, + u32 endpoint_id, int type, + struct sockaddr_qrtr *from, + struct sockaddr_qrtr *to); __le32 qrtr_type =3D cpu_to_le32(QRTR_TYPE_DATA); struct qrtr_sock *ipc =3D qrtr_sk(sock->sk); struct sock *sk =3D sock->sk; struct qrtr_node *node; + u32 endpoint_id =3D qrtr_local_nid; struct sk_buff *skb; size_t plen; u32 type; @@ -1102,7 +1112,7 @@ static int qrtr_sendmsg(struct socket *sock, struct m= sghdr *msg, size_t len) } =20 type =3D le32_to_cpu(qrtr_type); - rc =3D enqueue_fn(node, skb, type, &ipc->us, addr); + rc =3D enqueue_fn(node, skb, endpoint_id, type, &ipc->us, addr); if (rc >=3D 0) rc =3D len; =20 @@ -1134,7 +1144,8 @@ static int qrtr_send_resume_tx(struct qrtr_cb *cb) pkt->client.node =3D cpu_to_le32(cb->dst_node); pkt->client.port =3D cpu_to_le32(cb->dst_port); =20 - ret =3D qrtr_node_enqueue(node, skb, QRTR_TYPE_RESUME_TX, &local, &remote= ); + ret =3D qrtr_node_enqueue(node, skb, cb->endpoint_id, + QRTR_TYPE_RESUME_TX, &local, &remote); =20 qrtr_node_release(node); =20 --=20 2.50.0