mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
net: qrtr: Respond to HELLO message
Lost in the translation from the user space implementation was the
detail that HELLO mesages must be exchanged between each node pair. As
such the incoming HELLO must be replied to.
Similar to the previous implementation no effort is made to prevent two
Linux boxes from continuously sending HELLO messages back and forth,
this is left to a follow up patch.
say_hello() is moved, to facilitate the new call site.
Change-Id: I1b1d66c6a24edf5758d05b76fd527b7d2a35c5da
Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspace")
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Tested-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Git-commit: a1dc1d6a05a730b62b45828975a088db577d3139
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Signed-off-by: Chris Lew <clew@codeaurora.org>
This commit is contained in:
parent
453c6587c8
commit
fbf873fc96
1 changed files with 30 additions and 24 deletions
|
|
@ -286,9 +286,38 @@ static int server_del(struct qrtr_node *node, unsigned int port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int say_hello(struct sockaddr_qrtr *dest)
|
||||
{
|
||||
struct qrtr_ctrl_pkt pkt;
|
||||
struct msghdr msg = { };
|
||||
struct kvec iv;
|
||||
int ret;
|
||||
|
||||
iv.iov_base = &pkt;
|
||||
iv.iov_len = sizeof(pkt);
|
||||
|
||||
memset(&pkt, 0, sizeof(pkt));
|
||||
pkt.cmd = cpu_to_le32(QRTR_TYPE_HELLO);
|
||||
|
||||
msg.msg_name = (struct sockaddr *)dest;
|
||||
msg.msg_namelen = sizeof(*dest);
|
||||
|
||||
ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt));
|
||||
if (ret < 0)
|
||||
pr_err("failed to send hello msg\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Announce the list of servers registered on the local node */
|
||||
static int ctrl_cmd_hello(struct sockaddr_qrtr *sq)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = say_hello(sq);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return announce_servers(sq);
|
||||
}
|
||||
|
||||
|
|
@ -566,29 +595,6 @@ static void ctrl_cmd_del_lookup(struct sockaddr_qrtr *from,
|
|||
}
|
||||
}
|
||||
|
||||
static int say_hello(void)
|
||||
{
|
||||
struct qrtr_ctrl_pkt pkt;
|
||||
struct msghdr msg = { };
|
||||
struct kvec iv;
|
||||
int ret;
|
||||
|
||||
iv.iov_base = &pkt;
|
||||
iv.iov_len = sizeof(pkt);
|
||||
|
||||
memset(&pkt, 0, sizeof(pkt));
|
||||
pkt.cmd = cpu_to_le32(QRTR_TYPE_HELLO);
|
||||
|
||||
msg.msg_name = (struct sockaddr *)&qrtr_ns.bcast_sq;
|
||||
msg.msg_namelen = sizeof(qrtr_ns.bcast_sq);
|
||||
|
||||
ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt));
|
||||
if (ret < 0)
|
||||
pr_err("failed to send hello msg\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void qrtr_ns_worker(struct work_struct *work)
|
||||
{
|
||||
const struct qrtr_ctrl_pkt *pkt;
|
||||
|
|
@ -725,7 +731,7 @@ void qrtr_ns_init(struct work_struct *work)
|
|||
if (!qrtr_ns.workqueue)
|
||||
goto err_sock;
|
||||
|
||||
ret = say_hello();
|
||||
ret = say_hello(&qrtr_ns.bcast_sq);
|
||||
if (ret < 0)
|
||||
goto err_wq;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue