mirror of
https://github.com/linux-msm/qrtr.git
synced 2026-04-09 14:52:32 +02:00
ns: Store local node id in context
Store the local node id in the "context, rather than requesting the local node id from the kernel every time we need it. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
30
src/ns.c
30
src/ns.c
@@ -67,6 +67,8 @@ static const char *ctrl_pkt_strings[] = {
|
||||
struct context {
|
||||
int ctrl_sock;
|
||||
int ns_sock;
|
||||
|
||||
int local_node;
|
||||
};
|
||||
|
||||
struct server_filter {
|
||||
@@ -161,23 +163,15 @@ static int server_query(const struct server_filter *f, struct list *list)
|
||||
return count;
|
||||
}
|
||||
|
||||
static int annouce_servers(int sock, struct sockaddr_qrtr *sq)
|
||||
static int annouce_servers(struct context *ctx, struct sockaddr_qrtr *sq)
|
||||
{
|
||||
struct sockaddr_qrtr local_sq;
|
||||
struct map_entry *me;
|
||||
struct ctrl_pkt cmsg;
|
||||
struct server *srv;
|
||||
struct node *node;
|
||||
socklen_t sl = sizeof(local_sq);
|
||||
int rc;
|
||||
|
||||
rc = getsockname(sock, (void*)&sq, &sl);
|
||||
if (rc < 0) {
|
||||
warn("getsockname()");
|
||||
return -1;
|
||||
}
|
||||
|
||||
node = node_get(local_sq.sq_node);
|
||||
node = node_get(ctx->local_node);
|
||||
if (!node)
|
||||
return 0;
|
||||
|
||||
@@ -191,7 +185,7 @@ static int annouce_servers(int sock, struct sockaddr_qrtr *sq)
|
||||
cmsg.server.instance = cpu_to_le32(srv->instance);
|
||||
cmsg.server.node = cpu_to_le32(srv->node);
|
||||
cmsg.server.port = cpu_to_le32(srv->port);
|
||||
rc = sendto(sock, &cmsg, sizeof(cmsg), 0, (void *)sq, sizeof(*sq));
|
||||
rc = sendto(ctx->ctrl_sock, &cmsg, sizeof(cmsg), 0, (void *)sq, sizeof(*sq));
|
||||
if (rc < 0) {
|
||||
warn("sendto()");
|
||||
return rc;
|
||||
@@ -268,12 +262,12 @@ static int ctrl_cmd_hello(struct context *ctx, struct sockaddr_qrtr *sq,
|
||||
|
||||
rc = sendto(ctx->ctrl_sock, buf, len, 0, (void *)sq, sizeof(*sq));
|
||||
if (rc > 0)
|
||||
rc = annouce_servers(ctx->ctrl_sock, sq);
|
||||
rc = annouce_servers(ctx, sq);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ctrl_cmd_bye(struct context *ctx, unsigned int node_id)
|
||||
static int ctrl_cmd_bye(struct context *ctx, struct sockaddr_qrtr *sq)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -349,7 +343,7 @@ static void ctrl_port_fn(void *vcontext, struct waiter_ticket *tkt)
|
||||
rc = ctrl_cmd_hello(ctx, &sq, buf, len);
|
||||
break;
|
||||
case QRTR_CMD_BYE:
|
||||
rc = ctrl_cmd_bye(ctx, sq.sq_node);
|
||||
rc = ctrl_cmd_bye(ctx, &sq);
|
||||
break;
|
||||
case QRTR_CMD_DEL_CLIENT:
|
||||
rc = ctrl_cmd_del_client(ctx, le32_to_cpu(msg->server.node),
|
||||
@@ -595,8 +589,10 @@ static void node_mi_free(struct map_item *mi)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct waiter_ticket *tkt;
|
||||
struct sockaddr_qrtr sq;
|
||||
struct context ctx;
|
||||
struct waiter *w;
|
||||
socklen_t sl = sizeof(sq);
|
||||
int rc;
|
||||
|
||||
w = waiter_create();
|
||||
@@ -615,6 +611,12 @@ int main(int argc, char **argv)
|
||||
if (ctx.ns_sock < 0)
|
||||
errx(1, "unable to create nameserver socket");
|
||||
|
||||
rc = getsockname(ctx.ctrl_sock, (void*)&sq, &sl);
|
||||
if (rc < 0)
|
||||
err(1, "getsockname()");
|
||||
|
||||
ctx.local_node = sq.sq_node;
|
||||
|
||||
rc = say_hello(ctx.ctrl_sock);
|
||||
if (rc)
|
||||
err(1, "unable to say hello");
|
||||
|
||||
Reference in New Issue
Block a user