Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1660107

[PATCH 4/4] net: qrtr: Inform open sockets about new controller

From Bjorn Andersson <bjorn.andersson@linaro.org>
Newsgroups linux.kernel
Subject [PATCH 4/4] net: qrtr: Inform open sockets about new controller
Date 2017-06-07 21:00 +0200
Message-ID <tPOlr-1X8-7@gated-at.bofh.it> (permalink)
References <tPOlr-1X8-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


As the higher level communication only deals with "services" the
a service directory is required to keep track of local and remote
services. In order for qrtr clients to be informed about when the
service directory implementation is available some event needs to be
passed to them.

Rather than introducing support for broadcasting such a message in-band
to all open local sockets we flag each socket with ENETRESET, as there
are no other expected operations that would benefit from having support
from locally broadcasting messages.

Cc: Courtney Cavin <ccavin@gmail.com>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 net/qrtr/qrtr.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
index d7516098b5aa..c7a5d861906b 100644
--- a/net/qrtr/qrtr.c
+++ b/net/qrtr/qrtr.c
@@ -530,6 +530,26 @@ static int qrtr_port_assign(struct qrtr_sock *ipc, int *port)
 	return 0;
 }
 
+/* Reset all non-control ports */
+static void qrtr_reset_ports(void)
+{
+	struct qrtr_sock *ipc;
+	int id;
+
+	mutex_lock(&qrtr_port_lock);
+	idr_for_each_entry(&qrtr_ports, ipc, id) {
+		/* Don't reset control port */
+		if (id == 0)
+			continue;
+
+		sock_hold(&ipc->sk);
+		ipc->sk.sk_err = ENETRESET;
+		wake_up_interruptible(sk_sleep(&ipc->sk));
+		sock_put(&ipc->sk);
+	}
+	mutex_unlock(&qrtr_port_lock);
+}
+
 /* Bind socket to address.
  *
  * Socket should be locked upon call.
@@ -558,6 +578,10 @@ static int __qrtr_bind(struct socket *sock,
 
 	sock_reset_flag(sk, SOCK_ZAPPED);
 
+	/* Notify all open ports about the new controller */
+	if (port == QRTR_PORT_CTRL)
+		qrtr_reset_ports();
+
 	return 0;
 }
 
-- 
2.12.0

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 1/4] net: qrtr: Refactor packet allocation Bjorn Andersson <bjorn.andersson@linaro.org> - 2017-06-07 21:00 +0200
  [PATCH 4/4] net: qrtr: Inform open sockets about new controller Bjorn Andersson <bjorn.andersson@linaro.org> - 2017-06-07 21:00 +0200
  [PATCH 3/4] net: qrtr: Broadcast DEL_CLIENT message when endpoint is closed Bjorn Andersson <bjorn.andersson@linaro.org> - 2017-06-07 21:00 +0200
  [PATCH 2/4] net: qrtr: Inject BYE on remote termination Bjorn Andersson <bjorn.andersson@linaro.org> - 2017-06-07 21:00 +0200
  Re: [PATCH 1/4] net: qrtr: Refactor packet allocation David Miller <davem@davemloft.net> - 2017-06-07 21:40 +0200

csiph-web