Network order or Host order for raw xlat style
shankarapailoor
shankarapailoor at gmail.com
Tue Jan 8 02:16:18 UTC 2019
Hi Dmitry,
Thanks for the comments. Attached is an updated patch.
On Mon, Jan 7, 2019 at 4:30 PM Dmitry V. Levin <ldv at altlinux.org> wrote:
>
> On Sun, Jan 06, 2019 at 05:18:22PM -0800, shankarapailoor wrote:
> [...]
> > Subject: [PATCH v3] handle xlat styles when decoding sockaddr_in and
> > sockaddr_in6
>
> It's not just sockaddr_in and sockaddr_in6, but also sockaddr_ll.
>
> > * print_fields.h (PRINT_FIELD_INET4_ADDR, PRINT_FIELD_NET_PORT):
> > Handle XLAT_RAW and XLAT_VERBOSE.
> > * sockaddr.c (print_sockaddr_data_ll, print_inet_addr,
> > print_sockaddr_data_in6): Likewise.
> > * sockaddr.c (print_sll_protocol): New function
> > * tests/sockaddr_xlat.c.c: New file.
> > * tests/sockaddr_xlat-Xabbrev.c: Likewise.
> > * tests/sockaddr_xlat-Xraw.c: Likewise.
> > * tests/sockaddr_xlat-Xverbose.c: Likewise.
> > * tests/gen_tests.in (sockaddr_xlat, sockaddr_xlat-Xabbrev,
> > sockaddr_xlat-Xraw, sockaddr_xlat-Xverbose): New tests.
> > * tests/pure_executables.list: Add sockaddr_xlat, sockaddr_xlat-Xabbrev,
> > sockaddr_xlat-Xraw, sockaddr_xlat-Xverbose.
> > * tests/.gitignore: Likewise.
>
> You haven't added the sockaddr_xlat test mentioned above.
> There is a choice between two variants: either add the sockaddr_xlat test
> or add sockaddr_xlat.c to EXTRA_DIST in tests/Makefile.am,
> otherwise "make dist" won't work.
>
> btw, this is a GNU style ChangeLog record, it doesn't need any indentation.
>
> > ---
> > print_fields.h | 56 ++++++++--
> > sockaddr.c | 84 +++++++++++++--
> > tests/.gitignore | 3 +
> > tests/gen_tests.in | 3 +
> > tests/pure_executables.list | 3 +
> > tests/sockaddr_xlat-Xabbrev.c | 1 +
> > tests/sockaddr_xlat-Xraw.c | 2 +
> > tests/sockaddr_xlat-Xverbose.c | 2 +
> > tests/sockaddr_xlat.c | 190 +++++++++++++++++++++++++++++++++
> > 9 files changed, 329 insertions(+), 15 deletions(-)
> > create mode 100644 tests/sockaddr_xlat-Xabbrev.c
> > create mode 100644 tests/sockaddr_xlat-Xraw.c
> > create mode 100644 tests/sockaddr_xlat-Xverbose.c
> > create mode 100644 tests/sockaddr_xlat.c
> >
> > diff --git a/print_fields.h b/print_fields.h
> > index bcab1b73..9a0a167b 100644
> > --- a/print_fields.h
> > +++ b/print_fields.h
> > @@ -159,9 +159,33 @@
> > sizeof((where_).field_), #field_); \
> > } while (0)
> >
> > -# define PRINT_FIELD_INET4_ADDR(prefix_, where_, field_) \
> > - STRACE_PRINTF("%s%s=inet_addr(\"%s\")", (prefix_), #field_, \
> > - inet_ntoa((where_).field_))
> > +#define PRINT_FIELD_INET4_ADDR(prefix_, where_, field_) \
> > + do { \
> > + STRACE_PRINTF("%s%s=", (prefix_), #field_); \
> > + \
> > + if (xlat_verbose(xlat_verbosity) \
> > + != XLAT_STYLE_ABBREV) { \
> > + print_quoted_string( \
> > + (const char *) \
> > + &(where_).field_.s_addr, \
> > + sizeof((where_).field_.s_addr), \
> > + QUOTE_FORCE_HEX); \
> > + } \
> > + \
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW) \
> > + break; \
> > + \
> > + if (xlat_verbose(xlat_verbosity) \
> > + == XLAT_STYLE_VERBOSE) \
> > + STRACE_PRINTF(" /* "); \
> > + \
> > + STRACE_PRINTF("inet_addr(\"%s\")", \
> > + inet_ntoa((where_).field_)); \
> > + \
> > + if (xlat_verbose(xlat_verbosity) \
> > + == XLAT_STYLE_VERBOSE) \
> > + STRACE_PRINTF(" */"); \
> > + } while (0)
>
> As you've probably noticed already, PRINT_FIELD_INET4_ADDR is very similar
> to AD_INET case of print_inet_addr. I decided to reduce code duplication
> by removing PRINT_FIELD_INET4_ADDR and using PRINT_FIELD_INET_ADDR instead.
>
> Please rebase.
>
> > # define PRINT_FIELD_AX25_ADDR(prefix_, where_, field_) \
> > do { \
> > @@ -175,9 +199,29 @@
> > print_x25_addr(&(where_).field_); \
> > } while (0)
> >
> > -# define PRINT_FIELD_NET_PORT(prefix_, where_, field_) \
> > - STRACE_PRINTF("%s%s=htons(%u)", (prefix_), #field_, \
> > - ntohs((where_).field_))
> > +#define PRINT_FIELD_NET_PORT(prefix_, where_, field_) \
> > + do { \
> > + STRACE_PRINTF("%s%s=", (prefix_), #field_); \
> > + \
> > + if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV) \
> > + print_quoted_string((const char *) \
> > + &(where_).field_, \
> > + sizeof((where_).field_), \
> > + QUOTE_FORCE_HEX); \
> > + \
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW) \
> > + break; \
> > + \
> > + if (xlat_verbose(xlat_verbosity) \
> > + == XLAT_STYLE_VERBOSE) \
> > + STRACE_PRINTF(" /* "); \
> > + \
> > + STRACE_PRINTF("htons(%u)", ntohs((where_).field_)); \
> > + \
> > + if (xlat_verbose(xlat_verbosity) \
> > + == XLAT_STYLE_VERBOSE) \
> > + STRACE_PRINTF(" */"); \
> > + } while (0)
> >
> > # define PRINT_FIELD_IFINDEX(prefix_, where_, field_) \
> > do { \
> > diff --git a/sockaddr.c b/sockaddr.c
> > index 3a37f448..2f7d9987 100644
> > --- a/sockaddr.c
> > +++ b/sockaddr.c
> > @@ -76,20 +76,49 @@ print_inet_addr(const int af,
> > case AF_INET:
> > if (inet_ntop(af, addr, buf, sizeof(buf))) {
> > if (var_name)
> > - tprintf("%s=inet_addr(\"%s\")", var_name, buf);
> > - else
> > - tprintf("inet_addr(\"%s\")", buf);
> > + tprintf("%s=", var_name);
> > +
> > + if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV)
> > + print_quoted_string((const char*) addr,
> > + len, QUOTE_FORCE_HEX);
>
> We use slightly different indentation style in this project.
>
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW)
> > + return true;
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
> > + tprints(" /* ");
> > +
> > + tprintf("inet_addr(\"%s\")", buf);
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
> > + tprints(" */");
> > return true;
> > }
> > break;
> > case AF_INET6:
> > if (inet_ntop(af, addr, buf, sizeof(buf))) {
> > - if (var_name)
> > + if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV) {
> > + if (var_name)
> > + tprintf("%s=", var_name);
> > + print_quoted_string(addr, len, QUOTE_FORCE_HEX);
> > + }
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW)
> > + return true;
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
> > + tprints(" /* ");
> > +
> > + if (var_name && (xlat_verbose(xlat_verbosity) == XLAT_STYLE_ABBREV))
>
> This line is too long, please wrap it.
>
> > tprintf("inet_pton(%s, \"%s\", &%s)",
> > "AF_INET6", buf, var_name);
> > else
> > tprintf("inet_pton(%s, \"%s\")",
> > "AF_INET6", buf);
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
> > + tprints(" */");
> > +
> > return true;
> > }
> > break;
> > @@ -158,7 +187,17 @@ print_sockaddr_data_in6(const void *const buf, const int addrlen)
> >
> > PRINT_FIELD_NET_PORT("", *sa_in6, sin6_port);
> > PRINT_FIELD_INET_ADDR(", ", *sa_in6, sin6_addr, AF_INET6);
> > - tprintf(", sin6_flowinfo=htonl(%u)", ntohl(sa_in6->sin6_flowinfo));
> > + tprints(", sin6_flowinfo=");
> > + if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_ABBREV)
> > + print_quoted_string((const char*) &sa_in6->sin6_flowinfo,
> > + sizeof(sa_in6->sin6_flowinfo),
> > + QUOTE_FORCE_HEX);
>
> We use slightly different indentation style in this project.
>
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
> > + tprintf(" /* htonl(%u) */", ntohl(sa_in6->sin6_flowinfo));
> > +
> > + if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_ABBREV)
> > + tprintf("htonl(%u)", ntohl(sa_in6->sin6_flowinfo));
> >
> > if (addrlen <= (int) SIN6_MIN_LEN)
> > return;
> > @@ -374,15 +413,42 @@ print_sockaddr_data_nl(const void *const buf, const int addrlen)
> > PRINT_FIELD_0X(", ", *sa_nl, nl_groups);
> > }
> >
> > +static void
> > +print_sll_protocol(const struct sockaddr_ll *const sa_ll)
> > +{
> > + int x_style = xlat_verbose(xlat_verbosity);
> > +
> > + tprints("sll_protocol=");
> > + if (x_style != XLAT_STYLE_ABBREV)
> > + print_quoted_string((const char *) &sa_ll->sll_protocol,
> > + sizeof(sa_ll->sll_protocol),
> > + QUOTE_FORCE_HEX);
>
> We use slightly different indentation style in this project.
>
> > +
> > + if (x_style == XLAT_STYLE_RAW)
> > + return;
> > +
> > + if (x_style == XLAT_STYLE_VERBOSE)
> > + tprints(" /* ");
> > +
> > + tprints("htons(");
> > + printxval_search_ex(ethernet_protocols,
> > + ntohs(sa_ll->sll_protocol),
> > + "ETH_P_???",
> > + XLAT_STYLE_ABBREV);
>
> We use slightly different indentation style in this project.
>
> > + tprints(")");
> > +
> > + if (x_style == XLAT_STYLE_VERBOSE)
> > + tprints(" */");
> > +
> > +}
> > +
> > static void
> > print_sockaddr_data_ll(const void *const buf, const int addrlen)
> > {
> > const struct sockaddr_ll *const sa_ll = buf;
> >
> > - tprints("sll_protocol=htons(");
> > - printxval_search(ethernet_protocols, ntohs(sa_ll->sll_protocol),
> > - "ETH_P_???");
> > - PRINT_FIELD_IFINDEX("), ", *sa_ll, sll_ifindex);
> > + print_sll_protocol(sa_ll);
> > + PRINT_FIELD_IFINDEX(", ", *sa_ll, sll_ifindex);
> > tprints(", sll_hatype=");
> > printxval_search(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
> > tprints(", sll_pkttype=");
> > diff --git a/tests/.gitignore b/tests/.gitignore
> > index 9ec7a531..24b17017 100644
> > --- a/tests/.gitignore
> > +++ b/tests/.gitignore
> > @@ -526,6 +526,9 @@ sock_filter-v
> > sock_filter-v-Xabbrev
> > sock_filter-v-Xraw
> > sock_filter-v-Xverbose
> > +sockaddr_xlat-Xabbrev
> > +sockaddr_xlat-Xraw
> > +sockaddr_xlat-Xverbose
> > socketcall
> > sockopt-sol_netlink
> > splice
> > diff --git a/tests/gen_tests.in b/tests/gen_tests.in
> > index 72758df5..0eeadcc5 100644
> > --- a/tests/gen_tests.in
> > +++ b/tests/gen_tests.in
> > @@ -437,6 +437,9 @@ sock_filter-v -v -e trace=getsockopt,setsockopt
> > sock_filter-v-Xabbrev -v -e trace=getsockopt,setsockopt -X abbrev
> > sock_filter-v-Xraw -a 37 -v -e trace=getsockopt,setsockopt -X raw
> > sock_filter-v-Xverbose -v -e trace=getsockopt,setsockopt -X verbose
> > +sockaddr_xlat-Xabbrev -a24 -Xabbrev -e trace=connect
> > +sockaddr_xlat-Xraw -a24 -Xraw -e trace=connect
> > +sockaddr_xlat-Xverbose -a24 -Xverbose -e trace=connect
>
> I think you don't need -a24 here.
>
> > socketcall -a20
> > sockopt-sol_netlink -e trace=getsockopt,setsockopt
> > splice
> > diff --git a/tests/pure_executables.list b/tests/pure_executables.list
> > index 1a523809..23aabb9e 100755
> > --- a/tests/pure_executables.list
> > +++ b/tests/pure_executables.list
> > @@ -443,6 +443,9 @@ sock_filter-v
> > sock_filter-v-Xabbrev
> > sock_filter-v-Xraw
> > sock_filter-v-Xverbose
> > +sockaddr_xlat-Xabbrev
> > +sockaddr_xlat-Xraw
> > +sockaddr_xlat-Xverbose
> > socketcall
> > sockopt-sol_netlink
> > splice
> > diff --git a/tests/sockaddr_xlat-Xabbrev.c b/tests/sockaddr_xlat-Xabbrev.c
> > new file mode 100644
> > index 00000000..e994e5ea
> > --- /dev/null
> > +++ b/tests/sockaddr_xlat-Xabbrev.c
> > @@ -0,0 +1 @@
> > +#include "sockaddr_xlat.c"
> > diff --git a/tests/sockaddr_xlat-Xraw.c b/tests/sockaddr_xlat-Xraw.c
> > new file mode 100644
> > index 00000000..fb2d73df
> > --- /dev/null
> > +++ b/tests/sockaddr_xlat-Xraw.c
> > @@ -0,0 +1,2 @@
> > +#define XLAT_RAW 1
> > +#include "sockaddr_xlat.c"
> > diff --git a/tests/sockaddr_xlat-Xverbose.c b/tests/sockaddr_xlat-Xverbose.c
> > new file mode 100644
> > index 00000000..d628975b
> > --- /dev/null
> > +++ b/tests/sockaddr_xlat-Xverbose.c
> > @@ -0,0 +1,2 @@
> > +#define XLAT_VERBOSE 1
> > +#include "sockaddr_xlat.c"
> > diff --git a/tests/sockaddr_xlat.c b/tests/sockaddr_xlat.c
> > new file mode 100644
> > index 00000000..425dd305
> > --- /dev/null
> > +++ b/tests/sockaddr_xlat.c
> > @@ -0,0 +1,190 @@
> > +/*
> > + * Check decoding of sockaddr fields under xlat styles.
> > + *
> > + * Copyright (c) 2015-2018 The strace developers.
> > + * All rights reserved.
> > + *
> > + * SPDX-License-Identifier: GPL-2.0-or-later
> > + */
> > +#include "tests.h"
> > +#include <stdio.h>
> > +#include <sys/socket.h>
> > +#include <arpa/inet.h>
> > +#include <netinet/in.h>
> > +#include <linux/ax25.h>
> > +#include <linux/if_arp.h>
> > +#include <linux/if_ether.h>
> > +#include <linux/if_packet.h>
> > +
> > +static void
> > +check_ll(void)
> > +{
> > + struct sockaddr_ll c_ll = {
> > + .sll_family = AF_PACKET,
> > + .sll_protocol = htons(ETH_P_ALL),
> > + .sll_ifindex = 0xfacefeed,
> > + .sll_hatype = ARPHRD_ETHER,
> > + .sll_pkttype = PACKET_HOST,
> > + .sll_halen = sizeof(c_ll.sll_addr),
> > + .sll_addr = "abcdefgh"
> > + };
> > + unsigned int len = sizeof(c_ll);
> > + struct sockaddr *ll = (void *) &c_ll;
> > + int rc = connect(-1, ll, len);
>
> Does it work better than a simple
> int rc = connect(-1, (void *) &c_ll, len);
> ?
>
> > + const char *errstr = sprintrc(rc);
> > +
> > +#if XLAT_RAW
> > + printf("connect(-1, {sa_family=%#x"
> > + ", sll_protocol=", AF_PACKET);
>
> No need to wrap this line, it's short enough.
>
> > + print_quoted_hex(&c_ll.sll_protocol, sizeof(c_ll.sll_protocol));
> > + printf(", sll_ifindex=%u, sll_hatype=%#x"
> > + ", sll_pkttype=%u, sll_halen=%u, sll_addr="
> > + "[%#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x]"
> > + "}, %u) = %s\n",
> > + c_ll.sll_ifindex, ARPHRD_ETHER,
> > + PACKET_HOST, c_ll.sll_halen,
> > + c_ll.sll_addr[0], c_ll.sll_addr[1],
> > + c_ll.sll_addr[2], c_ll.sll_addr[3],
> > + c_ll.sll_addr[4], c_ll.sll_addr[5],
> > + c_ll.sll_addr[6], c_ll.sll_addr[7],
> > + len, errstr);
> > +#elif XLAT_VERBOSE
> > + printf("connect(-1, {sa_family=%#x /* AF_PACKET */"
> > + ", sll_protocol=", AF_PACKET);
> > + print_quoted_hex(&c_ll.sll_protocol, sizeof(c_ll.sll_protocol));
> > + printf(" /* htons(ETH_P_ALL) */"
> > + ", sll_ifindex=%u, sll_hatype=%#x /* ARPHRD_ETHER */"
> > + ", sll_pkttype=%u /* PACKET_HOST */, sll_halen=%u, sll_addr="
> > + "[%#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x]"
> > + "}, %u) = %s\n",
> > + c_ll.sll_ifindex, ARPHRD_ETHER,
> > + PACKET_HOST, c_ll.sll_halen,
> > + c_ll.sll_addr[0], c_ll.sll_addr[1],
> > + c_ll.sll_addr[2], c_ll.sll_addr[3],
> > + c_ll.sll_addr[4], c_ll.sll_addr[5],
> > + c_ll.sll_addr[6], c_ll.sll_addr[7],
> > + len, errstr);
> > +
> > +#else /* XLAT_ABBREV */
> > + printf("connect(-1, {sa_family=AF_PACKET"
> > + ", sll_protocol=htons(ETH_P_ALL)"
> > + ", sll_ifindex=%u, sll_hatype=ARPHRD_ETHER"
> > + ", sll_pkttype=PACKET_HOST, sll_halen=%u, sll_addr="
> > + "[%#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x, %#02x]"
> > + "}, %u) = %s\n",
> > + c_ll.sll_ifindex, c_ll.sll_halen,
> > + c_ll.sll_addr[0], c_ll.sll_addr[1],
> > + c_ll.sll_addr[2], c_ll.sll_addr[3],
> > + c_ll.sll_addr[4], c_ll.sll_addr[5],
> > + c_ll.sll_addr[6], c_ll.sll_addr[7],
> > + len, errstr);
> > +#endif
> > +}
> > +
> > +static void
> > +check_in(void)
> > +{
> > + const unsigned short h_port = 12345;
> > + static const char h_addr[] = "127.0.0.1";
> > +
> > + struct sockaddr_in in;;
>
> Double semicolon?
>
> > + in.sin_family = AF_INET;
> > + in.sin_port = htons(h_port);
> > + in.sin_addr.s_addr = inet_addr(h_addr);
>
> Could you use designated initializers here the same way you did in check_ll?
>
> > + unsigned int len = sizeof(in);
> > + int rc = connect(-1, (void *) &in, len);
> > + const char * errstr = sprintrc(rc);
> > +#if XLAT_RAW
> > + printf("connect(-1, {sa_family=%#x, sin_port=", AF_INET);
> > + print_quoted_hex((const void *) &in.sin_port, sizeof(in.sin_port));
> > + printf(", sin_addr=");
> > + print_quoted_hex((const void *) &in.sin_addr.s_addr,
> > + sizeof(in.sin_addr.s_addr));
> > + printf("}, %u) = %s\n", len, errstr);
> > +#elif XLAT_VERBOSE
> > + printf("connect(-1, {sa_family=%#x /* AF_INET */, sin_port=", AF_INET);
> > + print_quoted_hex((const void *) &in.sin_port, sizeof(in.sin_port));
> > + printf(" /* htons(%hu) */, sin_addr=", h_port);
> > + print_quoted_hex((const void *) &in.sin_addr.s_addr,
> > + sizeof(in.sin_addr.s_addr));
> > + printf(" /* inet_addr(\"%s\") */}, %u) = %s\n",
> > + h_addr, len, errstr);
> > +#else /* XLAT_ABBREV */
> > + printf("connect(-1, {sa_family=AF_INET, sin_port=htons(%hu)"
> > + ", sin_addr=inet_addr(\"%s\")}, %u) = %s\n",
> > + h_port, h_addr, len, errstr);
> > +#endif
> > +}
> > +
> > +static void
> > +validate_in6(struct sockaddr_in6 *const in6, const char *const h_addr)
> > +{
> > + inet_pton(AF_INET6, h_addr, &in6->sin6_addr);
> > +
> > + in6->sin6_scope_id = 0xfacefeed;
>
> in6->sin6_scope_id seems to be initialized in check_in6.
>
> > + unsigned int len = sizeof(*in6);
> > + int rc = connect(-1, (void *) in6, len);
> > + const char *errstr = sprintrc(rc);
> > +#if XLAT_RAW
> > + printf("connect(-1, {sa_family=%#x, sin6_port=", AF_INET6);
> > + print_quoted_hex(&in6->sin6_port, sizeof(in6->sin6_port));
> > + printf(", sin6_addr=");
> > + print_quoted_hex(&in6->sin6_addr, sizeof(struct in6_addr));
> > + printf(", sin6_flowinfo=");
> > + print_quoted_hex(&in6->sin6_flowinfo, sizeof(in6->sin6_flowinfo));
> > + printf(", sin6_scope_id=%u}, %u)"
> > + " = %s\n", in6->sin6_scope_id, len, errstr);
> > +#elif XLAT_VERBOSE
> > + printf("connect(-1, {sa_family=%#x /* AF_INET6 */", AF_INET6);
> > + printf(", sin6_port=");
> > + print_quoted_hex(&in6->sin6_port, sizeof(in6->sin6_port));
> > + printf(" /* htons(%hu) */", ntohs(in6->sin6_port));
> > + printf(", sin6_addr=");
> > + print_quoted_hex(&in6->sin6_addr, sizeof(struct in6_addr));
> > + printf(" /* inet_pton(AF_INET6, \"%s\") */", h_addr);
> > + printf(", sin6_flowinfo=");
> > + print_quoted_hex(&in6->sin6_flowinfo, sizeof(in6->sin6_flowinfo));
> > + printf(" /* htonl(%u) */"
> > + ", sin6_scope_id=%u}, %u)"
> > + " = %s\n",
> > + ntohl(in6->sin6_flowinfo), in6->sin6_scope_id,
> > + len, errstr);
> > +#else
> > + printf("connect(-1, {sa_family=AF_INET6, sin6_port=htons(%hu)"
> > + ", inet_pton(AF_INET6, \"%s\", &sin6_addr)"
> > + ", sin6_flowinfo=htonl(%u)"
> > + ", sin6_scope_id=%u}, %u)"
> > + " = %s\n",
> > + ntohs(in6->sin6_port), h_addr,
> > + ntohl(in6->sin6_flowinfo), in6->sin6_scope_id,
> > + len, errstr);
> > +#endif
> > +}
> > +
> > +static void
> > +check_in6(void)
> > +{
> > + const unsigned short h_port = 12345;
> > + const unsigned int h_flowinfo = 1234567890;
> > + const char *h_addr = "12:34:56:78:90:ab:cd:ef";
> > + struct sockaddr_in6 in6;
> > +
> > + in6.sin6_family = AF_INET6;
> > + in6.sin6_port = htons(h_port);
> > + in6.sin6_flowinfo = htonl(h_flowinfo);
> > + inet_pton(AF_INET6, h_addr, &in6.sin6_addr);
> > + in6.sin6_scope_id = 0xfacefeed;
>
> Could you use designated initializers here the same way you did in check_ll?
> Note that in6.sin6_addr is initialized later in validate_in6.
>
> > + validate_in6(&in6, h_addr);
> > + validate_in6(&in6, "::");
> > + validate_in6(&in6, "::1");
>
> Please remove trailing whitespaces, they upset "git am".
>
> > +}
> > +
> > +int
> > +main(int argc, char **argv)
>
> Are you going to use these arguments later?
>
> > +{
> > + check_ll();
> > + check_in();
> > + check_in6();
> > + puts("+++ exited with 0 +++");
> > + return 0;
> > +}
>
>
> --
> ldv
> --
> Strace-devel mailing list
> Strace-devel at lists.strace.io
> https://lists.strace.io/mailman/listinfo/strace-devel
--
Regards,
Shankara Pailoor
-------------- next part --------------
A non-text attachment was scrubbed...
Name: v4-0001-handle-xlat-styles-when-decoding-sockaddr_in-sock.patch
Type: text/x-patch
Size: 14996 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20190107/a2bd8238/attachment.bin>
More information about the Strace-devel
mailing list