From c1fb6f0bd00219003364b667338ee4fcd258602d Mon Sep 17 00:00:00 2001 From: Bjorn Andersson Date: Mon, 14 Aug 2017 18:58:56 +0000 Subject: [PATCH] lookup: Report service, version and instance separate Instead of reporting "service" as id:instance split the "instance" in version and instance and present the three entities separately. Signed-off-by: Bjorn Andersson --- src/lookup.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/lookup.c b/src/lookup.c index 5d1e99d..74e092a 100644 --- a/src/lookup.c +++ b/src/lookup.c @@ -83,6 +83,11 @@ int main(int argc, char **argv) { struct qrtr_ctrl_pkt pkt; struct sockaddr_qrtr sq; + unsigned int instance; + unsigned int service; + unsigned int version; + unsigned int node; + unsigned int port; socklen_t sl = sizeof(sq); struct timeval tv; int sock; @@ -126,13 +131,12 @@ int main(int argc, char **argv) if (rc < 0) err(1, "sendto()"); - printf(" Service Node Port\n"); + printf(" Service Version Instance Node Port\n"); while ((len = recv(sock, &pkt, sizeof(pkt), 0)) > 0) { unsigned int type = le32_to_cpu(pkt.cmd); const char *name = NULL; unsigned int i; - char srv_buf[32]; if (len < sizeof(pkt) || type != QRTR_CMD_NEW_SERVER) { warn("invalid/short packet"); @@ -143,27 +147,27 @@ int main(int argc, char **argv) !pkt.server.node && !pkt.server.port) break; - pkt.server.service = le32_to_cpu(pkt.server.service); - pkt.server.instance = le32_to_cpu(pkt.server.instance); - pkt.server.node = le32_to_cpu(pkt.server.node); - pkt.server.port = le32_to_cpu(pkt.server.port); + service = le32_to_cpu(pkt.server.service); + version = le32_to_cpu(pkt.server.instance) & 0xff; + instance = le32_to_cpu(pkt.server.instance) >> 8; + node = le32_to_cpu(pkt.server.node); + port = le32_to_cpu(pkt.server.port); for (i = 0; i < sizeof(common_names)/sizeof(common_names[0]); ++i) { - if (pkt.server.service != common_names[i].service) + if (service != common_names[i].service) continue; - if (pkt.server.instance && - (pkt.server.instance & common_names[i].ifilter) != common_names[i].ifilter) + if (instance && + (instance & common_names[i].ifilter) != common_names[i].ifilter) continue; name = common_names[i].name; } - snprintf(srv_buf, sizeof(srv_buf), "%d:%d", - pkt.server.service, pkt.server.instance); - - printf("%9s %4d %5d (%s)\n", - srv_buf, - pkt.server.node, - pkt.server.port, + printf("%9d %7d %8d %4d %5d %s\n", + service, + version, + instance, + node, + port, name ? name : ""); }