net: qrtr: Respond to HELLO message
[linux-2.6-microblaze.git] / net / qrtr / ns.c
index 413228c..61a58a3 100644 (file)
@@ -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;