Network order or Host order for raw xlat style

shankarapailoor shankarapailoor at gmail.com
Mon Jan 7 00:43:42 UTC 2019


Thanks Dmitry! Here is an updated patch.

Regards,
Shankara

On Sun, Jan 6, 2019 at 3:47 PM Dmitry V. Levin <ldv at altlinux.org> wrote:
>
> Hi,
>
> On Fri, Jan 04, 2019 at 08:41:45PM -0800, shankarapailoor wrote:
> > Sorry, just to be more clear, attached is the updated patch which
> > prints the fields as hex strings.
> [...]
> > Subject: [PATCH v1] handle xlat styles when decoding sockaddr_in and
> >  sockaddr_in6
> >
> > * 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.
> > * 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.
>
> Please try to wrap these lines so they won't exceed the limit of 72
> symbols.
>
> [...]
> > @@ -378,11 +417,32 @@ static void
> >  print_sockaddr_data_ll(const void *const buf, const int addrlen)
> >  {
> >       const struct sockaddr_ll *const sa_ll = buf;
> > +     int x_style = xlat_verbose(xlat_verbosity);
> > +
> > +     tprints("sll_protocol=");
> > +     if (x_style != XLAT_STYLE_ABBREV)
> > +             print_quoted_string(&sa_ll->sll_protocol,
> > +                                     sizeof(sa_ll->sll_protocol),
> > +                                     QUOTE_FORCE_HEX);
> > +
> > +     if (x_style == XLAT_STYLE_VERBOSE)
> > +             tprints(" /* ");
> > +
> > +     if (x_style == XLAT_STYLE_VERBOSE
> > +                     || x_style == XLAT_STYLE_ABBREV) {
> > +             tprints("htons(");
> > +             printxvals_ex(ntohs(sa_ll->sll_protocol),
> > +                             "ETH_P_???",
> > +                             XLAT_STYLE_ABBREV,
> > +                             ethernet_protocols,
> > +                             NULL);
> > +             tprints(")");
> > +     }
> > +
> > +     if (x_style == XLAT_STYLE_VERBOSE)
> > +             tprints(" */");
> >
> > -     tprints("sll_protocol=htons(");
> > -     printxval_search(ethernet_protocols, ntohs(sa_ll->sll_protocol),
> > -                      "ETH_P_???");
> > -     PRINT_FIELD_IFINDEX("), ", *sa_ll, sll_ifindex);
> > +     PRINT_FIELD_IFINDEX(", ", *sa_ll, sll_ifindex);
> >       tprints(", sll_hatype=");
> >       printxval_search(arp_hardware_types, sa_ll->sll_hatype, "ARPHRD_???");
> >       tprints(", sll_pkttype=");
>
> I have problems compiling this hunk:
>
> sockaddr.c: In function 'print_sockaddr_data_ll':
> sockaddr.c:424:23: error: passing argument 1 of 'print_quoted_string' from incompatible pointer type [-Werror=incompatible-pointer-types]
>    print_quoted_string(&sa_ll->sll_protocol,
>                        ^~~~~~~~~~~~~~~~~~~~
> In file included from sockaddr.c:13:
> defs.h:641:32: note: expected 'const char *' but argument is of type 'const __be16 *' {aka 'const short unsigned int *'}
>  extern int print_quoted_string(const char *, unsigned int, unsigned int);
>                                 ^~~~~~~~~~~~
>
> btw, could you create a new static function, e.g. print_sll_protocol,
> and move this new code there, please?
>
> [...]
> > +     int ret = connect(-1, ll, len);
> > +#if XLAT_RAW
> > +     printf("connect(-1, {sa_family=%#x"
> > +            ", sll_protocol=", AF_PACKET);
> > +     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) = %d EBADF (%m)\n",
>
> Here and in other similar places there is a chance that one of printf
> statements will clobber errno and %m will print something unexpected.
>
> I suggest introducing a new static wrapper function that will invoke
> connect() and assign a variable (e.g. errstr as in many tests) that could
> be used to print the error string.  Alternatively, you can assign this
> variable manually after each connect() invocation.
>
>
> --
> ldv
> --
> Strace-devel mailing list
> Strace-devel at lists.strace.io
> https://lists.strace.io/mailman/listinfo/strace-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: v1-0001-handle-xlat-styles-when-decoding-sockaddr_in-and-.patch
Type: text/x-patch
Size: 15926 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20190106/92bdd067/attachment.bin>


More information about the Strace-devel mailing list