[PATCH 2/2] tests: check decoding of ifaddrmsg netlink attributes
Dmitry V. Levin
ldv at altlinux.org
Mon Aug 21 15:54:46 UTC 2017
On Sun, Aug 20, 2017 at 08:17:19PM +0800, JingPiao Chen wrote:
> * tests/nlattr_ifaddrmsg.c: Include <arpa/inet.h>.
> (IFA_FLAGS, SET_IFA_FAMILY): New macros.
> (init_ifaddrmsg): Set ifaddrmsg.ifa_family field.
> (print_ifaddrmsg): Print ifaddrmsg.ifa_family field use %s format.
> (main): Check decoding of IFA_ADDRESS, IFA_CACHEINFO and IFA_FLAGS.
> ---
> tests/nlattr_ifaddrmsg.c | 65 +++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 62 insertions(+), 3 deletions(-)
>
> diff --git a/tests/nlattr_ifaddrmsg.c b/tests/nlattr_ifaddrmsg.c
> index 21a5a18..5ae02c2 100644
> --- a/tests/nlattr_ifaddrmsg.c
> +++ b/tests/nlattr_ifaddrmsg.c
> @@ -29,12 +29,25 @@
> #include "tests.h"
>
> #include <stdio.h>
> +#include <arpa/inet.h>
> #include "test_nlattr.h"
> #ifdef HAVE_LINUX_IF_ADDR_H
> # include <linux/if_addr.h>
> #endif
> #include <linux/rtnetlink.h>
>
> +#define IFA_FLAGS 8
> +
> +#define SET_IFA_FAMILY(af) \
> + do { \
> + ifa_family = af; \
> + ifa_family_str = #af; \
> + } \
> + while (0)
> +
> +uint8_t ifa_family;
> +const char *ifa_family_str;
> +
> static void
> init_ifaddrmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
> {
> @@ -46,7 +59,7 @@ init_ifaddrmsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
>
> struct ifaddrmsg *const msg = NLMSG_DATA(nlh);
> SET_STRUCT(struct ifaddrmsg, msg,
> - .ifa_family = AF_UNIX,
> + .ifa_family = ifa_family,
> .ifa_flags = IFA_F_SECONDARY,
> .ifa_scope = RT_SCOPE_UNIVERSE,
> .ifa_index = ifindex_lo()
> @@ -57,12 +70,12 @@ static void
> print_ifaddrmsg(const unsigned int msg_len)
> {
> printf("{len=%u, type=RTM_GETADDR, flags=NLM_F_DUMP"
> - ", seq=0, pid=0}, {ifa_family=AF_UNIX"
> + ", seq=0, pid=0}, {ifa_family=%s"
> ", ifa_prefixlen=0"
> ", ifa_flags=IFA_F_SECONDARY"
> ", ifa_scope=RT_SCOPE_UNIVERSE"
> ", ifa_index=" IFINDEX_LO_STR "}",
> - msg_len);
> + msg_len, ifa_family_str);
> }
>
> int
> @@ -77,6 +90,7 @@ main(void)
> static char pattern[4096];
> fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
>
> + SET_IFA_FAMILY(AF_UNSPEC);
> const unsigned int nla_type = 0xffff & NLA_TYPE_MASK;
> char nla_type_str[256];
> sprintf(nla_type_str, "%#x /* IFA_??? */", nla_type);
> @@ -86,6 +100,51 @@ main(void)
> 4, pattern, 4,
> print_quoted_hex(pattern, 4));
>
> + const char address[] = "12.34.56.78";
> + struct in_addr a4;
> + SET_IFA_FAMILY(AF_INET);
> +
> + if (!inet_pton(AF_INET, address, &a4))
> + perror_msg_and_skip("inet_pton");
> +
> + TEST_NLATTR(fd, nlh0, hdrlen,
> + init_ifaddrmsg, print_ifaddrmsg,
> + IFA_ADDRESS, sizeof(a4), &a4, sizeof(a4),
> + printf("%s", address));
I think TEST_NLATTR_OBJECT has better test coverage, can it be used here
instead of plain TEST_NLATTR?
--
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/20170821/780d63e1/attachment.bin>
More information about the Strace-devel
mailing list