[PATCH v2 5/8] netlink: add a basic socket diag parser of AF_INET and AF_INET6 messages
Dmitry V. Levin
ldv at altlinux.org
Fri Jun 16 01:02:35 UTC 2017
On Thu, Jun 15, 2017 at 12:30:51PM +0800, JingPiao Chen wrote:
> * defs.h (inet_protocols): New xlat prototype.
> * linux/inet_diag.h (inet_diag_req): New structure.
> (INET_DIAG_*): New enum.
> * netlink_sock_diag.c: Include <arpa/inet.h>, <linux/inet_diag.h>
> and "xlat/inet_diag_extended_flags.h".
> (print_inet_diag_sockid, decode_inet_diag_req_compat)
> (decode_inet_diag_req_v2, decode_inet_diag_req)
> (decode_inet_diag_msg): New functions.
> (diag_decoders): Add AF_INET and AF_INET6;
> * xlat/inet_diag_extended_flags.in: New file.
Thanks, applied with the following changes:
> +static void
> +print_inet_diag_sockid(const struct inet_diag_sockid *id, const uint8_t family)
> +{
> + tprintf("{idiag_sport=htons(%u), idiag_dport=htons(%u)",
> + ntohs(id->idiag_sport), ntohs(id->idiag_dport));
> +
> + int text_size;
> + const char *name;
> +
> + if (family == AF_INET) {
> + text_size = INET_ADDRSTRLEN;
> + name = "AF_INET";
> + }
> + else if (family == AF_INET6) {
> + text_size = INET6_ADDRSTRLEN;
> + name = "AF_INET6";
> + }
> + else
> + text_size = 0;
> +
> + char buf[text_size];
> +
> +
> + tprints(", ");
> + if (text_size
> + && inet_ntop(family, id->idiag_src, buf, text_size))
> + tprintf("inet_pton(%s, \"%s\", idiag_src)", name, buf);
> + else
> + print_quoted_string((char *) id->idiag_src,
> + sizeof(id->idiag_src), 0);
> +
> + tprints(", ");
> + if (text_size
> + && inet_ntop(family, id->idiag_dst, buf, text_size))
> + tprintf("inet_pton(%s, \"%s\", idiag_dst)", name, buf);
> + else
> + print_quoted_string((char *) id->idiag_dst,
> + sizeof(id->idiag_dst), 0);
> +
> + tprintf(", idiag_if=%" PRIu32 ", idiag_cookie=[%" PRIu32
> + ", %" PRIu32 "]}",
> + id->idiag_if, id->idiag_cookie[0], id->idiag_cookie[1]);
> +}
Rewritten using the recently added print_inet_addr function.
> + printflags(inet_diag_extended_flags, req.idiag_ext,
> + "1<<(INET_DIAG_\?\?\?-1)");
Changed "1<<(INET_DIAG_\?\?\?-1)" to "1<<INET_DIAG_???-1".
> + printflags(inet_diag_extended_flags, req.idiag_ext,
> + "1<<(INET_DIAG_\?\?\?-1)");
Likewise.
> diff --git a/xlat/inet_diag_extended_flags.in b/xlat/inet_diag_extended_flags.in
> new file mode 100644
> index 0000000..2466696
> --- /dev/null
> +++ b/xlat/inet_diag_extended_flags.in
> @@ -0,0 +1,16 @@
> +{ 1<<(INET_DIAG_MEMINFO-1) , "(1<<(INET_DIAG_MEMINFO-1))" },
> +{ 1<<(INET_DIAG_INFO-1) , "(1<<(INET_DIAG_INFO-1))" },
> +{ 1<<(INET_DIAG_VEGASINFO-1) , "(1<<(INET_DIAG_VEGASINFO-1))" },
> +{ 1<<(INET_DIAG_CONG-1) , "(1<<(INET_DIAG_CONG-1))" },
> +{ 1<<(INET_DIAG_TOS-1) , "(1<<(INET_DIAG_TOS-1))" },
> +{ 1<<(INET_DIAG_TCLASS-1) , "(1<<(INET_DIAG_TCLASS-1))" },
> +{ 1<<(INET_DIAG_SKMEMINFO-1) , "(1<<(INET_DIAG_SKMEMINFO-1))" },
> +{ 1<<(INET_DIAG_SHUTDOWN-1) , "(1<<(INET_DIAG_SHUTDOWN-1))" },
> +{ 1<<(INET_DIAG_DCTCPINFO-1) , "(1<<(INET_DIAG_DCTCPINFO-1))" },
> +{ 1<<(INET_DIAG_PROTOCOL-1) , "(1<<(INET_DIAG_PROTOCOL-1))" },
> +{ 1<<(INET_DIAG_SKV6ONLY-1) , "(1<<(INET_DIAG_SKV6ONLY-1))" },
> +{ 1<<(INET_DIAG_LOCALS-1) , "(1<<(INET_DIAG_LOCALS-1))" },
> +{ 1<<(INET_DIAG_PEERS-1) , "(1<<(INET_DIAG_PEERS-1))" },
> +{ 1<<(INET_DIAG_PAD-1) , "(1<<(INET_DIAG_PAD-1))" },
> +{ 1<<(INET_DIAG_MARK-1) , "(1<<(INET_DIAG_MARK-1))" },
> +{ 1<<(INET_DIAG_BBRINFO-1) , "(1<<(INET_DIAG_BBRINFO-1))" },
Rewritten using a simpler syntax.
--
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20170616/fbcd715c/attachment.bin>
More information about the Strace-devel
mailing list