I think length would not be good addition.
print_dump_hex already does a fine job.
There are also BE/LE expectation problems with pW.
The %p6 pointer should be in6_addr *
The %p4 pointer should be __be32 *.
Printing an ipv4 address should use %u.%u.%u.%u
I've been doodling with sparse to check
calls with __attribute__(format(printf
parsing the format strings for %p<FOO>
and match the argument types.
I'll post it if anything comes of it.