[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