public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Xing Gu <gux.fnst@cn.fujitsu.com>
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH 4/6] lib6/asapi_06.c: cleanup
Date: Thu, 30 Apr 2015 15:33:44 +0200	[thread overview]
Message-ID: <20150430133344.GD24720@rei.suse.de> (raw)
In-Reply-To: <1427787975-10668-4-git-send-email-gux.fnst@cn.fujitsu.com>

Hi!
> Signed-off-by: Xing Gu <gux.fnst@cn.fujitsu.com>
> ---
>  testcases/network/lib6/asapi_06.c | 374 +++++++++++++++++---------------------
>  1 file changed, 167 insertions(+), 207 deletions(-)
> 
> diff --git a/testcases/network/lib6/asapi_06.c b/testcases/network/lib6/asapi_06.c
> index 960ebb5..733d1c4 100644
> --- a/testcases/network/lib6/asapi_06.c
> +++ b/testcases/network/lib6/asapi_06.c
> @@ -1,6 +1,7 @@
>  /*
>   *
>   *   Copyright (c) International Business Machines  Corp., 2001
> + *   Author: David L Stevens
>   *
>   *   This program is free software;  you can redistribute it and/or modify
>   *   it under the terms of the GNU General Public License as published by
> @@ -13,25 +14,12 @@
>   *   the GNU General Public License for more details.
>   *
>   *   You should have received a copy of the GNU General Public License
> - *   along with this program;  if not, write to the Free Software
> - *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + *   along with this program;  if not, write to the Free Software Foundation,
> + *   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
> -
>  /*
> - * Test Name: asapi_06
> - *
> - * Test Description:
> - *  Tests for RFC 3542 section 4 socket options and ancillary data
> - *
> - * Usage:  <for command-line>
> - *  asapi_06
> - *
> - * HISTORY
> - *	05/2005 written by David L Stevens
> - *
> - * RESTRICTIONS:
> - *  None.
> - *
> + *   Description:
> + *     Tests for RFC 3542 section 4 socket options and ancillary data.
>   */
>  
>  #include "config.h"
> @@ -58,42 +46,46 @@
>  
>  #include "test.h"
>  
> -char *TCID = "asapi_06";	/* Test program identifier.    */
> -
> -int TST_TOTAL = 1;
> -
> -pid_t pid;
> +static void setup(void);
> +static void test_soent(void);
> +#ifdef notyet
> +static void test_pktinfo(void);
> +#endif
>  
> -struct {
> -	char *prt_name;
> -	int prt_value;
> -} ptab[] = {
> +static void (*testfunc[])(void) = {
> +	test_soent,
> +#ifdef notyet
> +	test_pktinfo,
> +#endif

Does the test actually works if we remove the ifdefs?

Looks to me like this has been implemented in kernel in 2005 in:

commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Date:   Thu Sep 8 09:59:17 2005 +0900

[IPV6]: Support several new sockopt / ancillary data in Advanced API (RFC3542).


>  };
>  
> -#define PTCOUNT	(sizeof(ptab)/sizeof(ptab[0]))
> -
> -#define READ_TIMEOUT	5	/* secs */
> -
> -void do_tests(void);
> -void setup(void), cleanup(void);
> +char *TCID = "asapi_06";
> +int TST_TOTAL = ARRAY_SIZE(testfunc);
>  
>  int main(int argc, char *argv[])
>  {
>  	int lc;
> +	int i;
>  
>  	tst_parse_opts(argc, argv, NULL, NULL);
>  
> -	pid = getpid();
> -
>  	setup();
>  
> -	for (lc = 0; TEST_LOOPING(lc); ++lc)
> -		do_tests();
> +	for (lc = 0; TEST_LOOPING(lc); ++lc) {
> +		tst_count = 0;
> +
> +		for (i = 0; i < TST_TOTAL; i++)
> +			(*testfunc[i])();
> +	}
>  
> -	cleanup();
>  	tst_exit();
>  }
>  
> +void setup(void)
> +{
> +	TEST_PAUSE;
> +}
> +
>  #define NH_TEST	0x9f
>  
>  #ifndef IPV6_RECVPKTINFO
> @@ -145,11 +137,6 @@ union soval {
>  	int sou_bool;
>  };
>  
> -/* in6_addr initializer for loopback interface */
> -#define IN6_LOOP	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
> -#define IN6_ANY		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
> -
> -/* so_clrval and so_setval members are initilized in the body */
>  struct soent {
>  	char *so_tname;
>  	int so_opt;
> @@ -160,72 +147,63 @@ struct soent {
>  	union soval so_setval;
>  	socklen_t so_valsize;
>  } sotab[] = {
> -/* RFC 3542, Section 4 */
> -	{
> -		"IPV6_RECVPKTINFO", IPV6_RECVPKTINFO, 1, IPV6_PKTINFO, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT, 1, IPV6_HOPLIMIT, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_RECVRTHDR", IPV6_RECVRTHDR, 0, IPV6_RTHDR, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS, 0, IPV6_HOPOPTS, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS, 0, IPV6_DSTOPTS, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_RECVTCLASS", IPV6_RECVTCLASS, 1, IPV6_TCLASS, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)},
> -/* make sure TCLASS stays when setting another opt */
> -	{
> -		"IPV6_RECVTCLASS (2)", IPV6_RECVHOPLIMIT, 1, IPV6_TCLASS, 0, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)},
> -/* OLD values */
> -	{
> -		"IPV6_2292PKTINFO", IPV6_2292PKTINFO, 1, IPV6_2292PKTINFO, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_2292HOPLIMIT", IPV6_2292HOPLIMIT, 1, IPV6_2292HOPLIMIT, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_2292RTHDR", IPV6_2292RTHDR, 0, IPV6_2292RTHDR, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_2292HOPOPTS", IPV6_2292HOPOPTS, 0, IPV6_2292HOPOPTS, 1, { { { { {
> -		0}}}}}, { { { { {
> -	0}}}}}, sizeof(int)}, {
> -		"IPV6_2292DSTOPTS", IPV6_2292DSTOPTS, 0, IPV6_2292DSTOPTS, 1, { { { { {
> -		0}}}}}, { { { { {
> -0}}}}}, sizeof(int)},};
> +	/* RFC 3542, Section 4 */
> +	{ "IPV6_RECVPKTINFO", IPV6_RECVPKTINFO, 1, IPV6_PKTINFO, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_RECVHOPLIMIT", IPV6_RECVHOPLIMIT, 1, IPV6_HOPLIMIT, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_RECVRTHDR", IPV6_RECVRTHDR, 0, IPV6_RTHDR, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_RECVHOPOPTS", IPV6_RECVHOPOPTS, 0, IPV6_HOPOPTS, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_RECVDSTOPTS", IPV6_RECVDSTOPTS, 0, IPV6_DSTOPTS, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_RECVTCLASS", IPV6_RECVTCLASS, 1, IPV6_TCLASS, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	/* make sure TCLASS stays when setting another opt */
> +	{ "IPV6_RECVTCLASS (2)", IPV6_RECVHOPLIMIT, 1, IPV6_TCLASS, 0,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	/* OLD values */
> +	{ "IPV6_2292PKTINFO", IPV6_2292PKTINFO, 1, IPV6_2292PKTINFO, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_2292HOPLIMIT", IPV6_2292HOPLIMIT, 1, IPV6_2292HOPLIMIT, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_2292RTHDR", IPV6_2292RTHDR, 0, IPV6_2292RTHDR, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_2292HOPOPTS", IPV6_2292HOPOPTS, 0, IPV6_2292HOPOPTS, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +	{ "IPV6_2292DSTOPTS", IPV6_2292DSTOPTS, 0, IPV6_2292DSTOPTS, 1,
> +		{ { { { { 0 } } }, 0 } }, { { { { { 0 } } }, 0 } },
> +		sizeof(int) },
> +};
>  
>  #define SOCOUNT	(sizeof(sotab)/sizeof(sotab[0]))

ARRAY_SIZE()

>  struct soprot {
> -	int sop_pid;		/* sender PID */
> -	int sop_seq;		/* sequence # */
> -	int sop_dlen;		/* tp_dat length */
> -	unsigned char sop_dat[0];	/* user data */
> +	int sop_pid;        /* sender PID */
> +	int sop_seq;        /* sequence # */
> +	int sop_dlen;       /* tp_dat length */
> +	unsigned char sop_dat[0];   /* user data */
>  };
>  
>  unsigned char tpbuf[sizeof(struct soprot) + 2048];
>  unsigned char rpbuf[sizeof(struct soprot) + 2048];
>  
>  unsigned char control[2048];
> -int clen;
>  
>  int seq;
>  
> -int setupso(void)
> -{
> -/* add routing headers, other ancillary data here */
> -	return 0;
> -}
> -
>  struct cme {
>  	int cm_len;
>  	int cm_level;
> @@ -235,17 +213,13 @@ struct cme {
>  		uint32_t cmu_hops;
>  	} cmu;
>  } cmtab[] = {
> -	{
> -		sizeof(uint32_t), SOL_IPV6, IPV6_TCLASS, {
> -		0x12}
> -	}
> -	, {
> -		sizeof(uint32_t), SOL_IPV6, IPV6_HOPLIMIT, {
> -		0x21}
> -	}
> -,};
> +	{ sizeof(uint32_t), SOL_IPV6, IPV6_TCLASS, {0x12} },
> +	{ sizeof(uint32_t), SOL_IPV6, IPV6_HOPLIMIT, {0x21} },
> +};
> +
> +#define CMCOUNT (sizeof(cmtab)/sizeof(cmtab[0]))

ARRAY_SIZE()

> -#define CMCOUNT	(sizeof(cmtab)/sizeof(cmtab[0]))
> +unsigned int count;
>  
>  ssize_t sendall(int st)
>  {
> @@ -254,7 +228,8 @@ ssize_t sendall(int st)
>  	struct iovec iov;
>  	struct soprot *psop;
>  	unsigned char *pd;
> -	int i, ctotal;
> +	unsigned int i;
> +	int ctotal;
>  
>  	psop = (struct soprot *)tpbuf;
>  	psop->sop_pid = htonl(getpid());
> @@ -300,32 +275,29 @@ void so_test(struct soent *psoe)
>  	int st;
>  
>  	if (psoe->so_opt == -1) {
> -		tst_resm(TBROK, "%s not present at compile time",
> +		tst_brkm(TBROK, NULL, "%s not present at compile time",
>  			 psoe->so_tname);
> -		return;
>  	}
>  	if (psoe->so_clear || sr < 0) {
>  		if (sr < 0)
>  			close(sr);
>  		sr = socket(PF_INET6, SOCK_RAW, NH_TEST);
>  		if (sr < 0) {
> -			tst_resm(TBROK, "%s socket: %s", psoe->so_tname,
> -				 strerror(errno));
> -			return;
> +			tst_brkm(TBROK | TERRNO, NULL, "%s socket: %s",
> +				psoe->so_tname, strerror(errno));
                                           ^
                                Remove the strerror() if you added TERRNO

>  		}
>  	}
>  	memset(&sin6, 0, sizeof(sin6));
>  	sin6.sin6_family = AF_INET6;
>  	sin6.sin6_addr = in6addr_loopback;
>  	if (bind(sr, (struct sockaddr *)&sin6, sizeof(sin6)) < 0) {
> -		tst_resm(TBROK, "%s: bind: %s", psoe->so_tname,
> -			 strerror(errno));
> +		tst_brkm(TBROK | TERRNO, NULL, "%s: bind: %s",
> +			psoe->so_tname, strerror(errno));

Here as well.

>  	}
>  	if (setsockopt(sr, SOL_IPV6, psoe->so_opt, &psoe->so_clrval,
>  		       psoe->so_valsize) < 0) {
> -		tst_resm(TBROK, "%s: setsockopt: %s", psoe->so_tname,
> -			 strerror(errno));
> -		return;
> +		tst_brkm(TBROK | TERRNO, NULL, "%s: setsockopt: %s",
> +			psoe->so_tname, strerror(errno));

And here.

>  	}
>  	TEST(setsockopt(sr, SOL_IPV6, psoe->so_opt, &psoe->so_setval,
>  			psoe->so_valsize));
> @@ -337,25 +309,23 @@ void so_test(struct soent *psoe)
>  	valsize = psoe->so_valsize;
>  	TEST(getsockopt(sr, SOL_IPV6, psoe->so_opt, &sobuf, &valsize));
>  	if (TEST_RETURN != 0) {
> -		tst_resm(TBROK, "%s set-get: getsockopt: %s", psoe->so_tname,
> -			 strerror(errno));
> -		return;
> -	} else if (memcmp(&psoe->so_setval, &sobuf, psoe->so_valsize))
> +		tst_brkm(TBROK | TTERRNO, NULL, "%s set-get: getsockopt: %s",
> +			psoe->so_tname, strerror(errno));

And here.

> +	} else if (memcmp(&psoe->so_setval, &sobuf, psoe->so_valsize)) {
>  		tst_resm(TFAIL, "%s set-get optval != setval", psoe->so_tname);
> -	else
> -		tst_resm(TPASS, "%s set-get", psoe->so_tname);
> +		return;
> +	} else {
> +		tst_resm(TINFO, "%s set-get", psoe->so_tname);
> +	}

Again why do we exit on first failure? And why don't we rather adjust the
number of testcases?

>  	st = socket(PF_INET6, SOCK_RAW, NH_TEST);
>  	if (st < 0) {
> -		tst_resm(TBROK, "%s transmit socket: %s", psoe->so_tname,
> -			 strerror(errno));
> -		return;
> +		tst_brkm(TBROK | TERRNO, NULL, "%s transmit socket: %s",
> +			psoe->so_tname, strerror(errno));

strerror() here as well.

>  	}
>  	if (sendall(st) < 0) {
> -		tst_resm(TBROK, "%s transmit sendto: %s", psoe->so_tname,
> -			 strerror(errno));
> -		close(st);
> -		return;
> +		tst_brkm(TBROK, NULL, "%s transmit sendto: %s",
> +			psoe->so_tname, strerror(errno));

And this should rather be changed to TBROK | TERRNO and the strerror() removed
to be consistent with the rest.

>  	}
>  	close(st);
>  
> @@ -382,14 +352,12 @@ void so_test(struct soent *psoe)
>  			if (nfds < 0) {
>  				if (errno == EINTR)
>  					continue;
> -				tst_resm(TBROK, "%s select: %s", psoe->so_tname,
> -					 strerror(errno));
> -				return;
> +				tst_brkm(TBROK | TERRNO, NULL, "%s select: %s",
> +					psoe->so_tname, strerror(errno));

Here as well.

>  			}
>  			if (nfds == 0) {
> -				tst_resm(TBROK, "%s recvmsg timed out",
> +				tst_brkm(TBROK, NULL, "%s recvmsg timed out",
>  					 psoe->so_tname);
> -				return;
>  			}
>  			/* else, nfds == 1 */
>  			if (!FD_ISSET(sr, &rfds))
> @@ -405,11 +373,9 @@ void so_test(struct soent *psoe)
>  
>  			cc = recvmsg(sr, &msg, 0);
>  			if (cc < 0) {
> -				tst_resm(TBROK, "%s recvmsg: %s",
> +				tst_brkm(TBROK | TERRNO, NULL, "%s recvmsg: %s",
>  					 psoe->so_tname, strerror(errno));

And here.

> -				return;
>  			}
> -/* check pid & seq here */
>  			break;
>  		}
>  		gotone = 0;
> @@ -429,11 +395,31 @@ void so_test(struct soent *psoe)
>  				return;
>  			}
>  		}
> -/* check contents here */
> -		if (psoe->so_dorecv)
> -			tst_resm(gotone ? TPASS : TFAIL, "%s receive",
> -				 psoe->so_tname);
> +		if (psoe->so_dorecv) {
> +			if (gotone)
> +				tst_resm(TINFO, "%s receive", psoe->so_tname);
> +			else
> +				tst_resm(TFAIL, "%s receive", psoe->so_tname);
> +		}

Again I don't like this, let's keep the PASS/FAIL here.

>  	}
> +
> +	count++;
> +}
> +
> +void test_soent(void)
> +{
> +	unsigned int i;
> +
> +	for (i = 0; i < SOCOUNT; ++i) {
> +		sotab[i].so_clrval.sou_bool = 0;
> +		sotab[i].so_setval.sou_bool = 1;
> +		so_test(&sotab[i]);
> +	}
> +
> +	if (count < SOCOUNT)
> +		tst_resm(TPASS, "socket set-get/receive tests fail");
                          ^
                      Should this be TFAIL?
> +	else
> +		tst_resm(TPASS, "socket set-get/receive tests succeed");
>  }
>  
>  #define IPV6_ADDR_NODE		1
> @@ -449,7 +435,7 @@ static int ipv6_addr_scope(struct in6_addr *pin6)
>  		return IPV6_ADDR_NODE;
>  	return IPV6_ADDR_GLOBAL;
>  }
> -#endif /* HAVE_IFADDRS_H */
> +#endif

If the #ifdef #endif pair spans over more than a few lines it's fine to have
this comment there.

>  int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
>  {
> @@ -462,8 +448,7 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
>  	int s;
>  
>  	if (!pifa_head && getifaddrs(&pifa_head)) {
> -		tst_resm(TBROK, "%s: getifaddrs failed", tname);
> -		return -1;
> +		tst_brkm(TBROK, NULL, "%s: getifaddrs failed", tname);
>  	}
>  	if (psin6_arg)
>  		ifindex = psin6_arg->sin6_scope_id;
> @@ -483,20 +468,19 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
>  		     (this_scope > 0 && this_scope != scope)))
>  			continue;
>  		psin6->sin6_scope_id = if_nametoindex(pifa->ifa_name);
> -		if ((ifindex < 0 && -ifindex == psin6->sin6_scope_id) ||
> -		    (ifindex > 0 && ifindex != psin6->sin6_scope_id))
> +		if ((ifindex < 0 && -(unsigned int)ifindex ==

Eh, casting to (unsigned int) and then negating it with - sounds wrong. What
was the problem here?

> +			psin6->sin6_scope_id) || (ifindex > 0 &&
> +			(unsigned int)ifindex != psin6->sin6_scope_id))
>  			continue;
>  		s = socket(PF_INET6, SOCK_DGRAM, 0);
>  		if (s < 0) {
> -			tst_resm(TBROK, "%s: socket %s", tname,
> +			tst_brkm(TBROK | TERRNO, NULL, "%s: socket %s", tname,
>  				 strerror(errno));

The strerror() again.

> -			return -1;
>  		}
>  		if (bind(s, pifa->ifa_addr, sizeof(struct sockaddr_in6)) < 0) {
> -			tst_resm(TBROK, "%s: bind \"%s\": %s", tname,
> -				 inet_ntop(AF_INET6, &psin6->sin6_addr, strbuf,
> -					   sizeof(strbuf)), strerror(errno));
> -			return -1;
> +			tst_brkm(TBROK | TERRNO, NULL, "%s: bind \"%s\": %s",
> +				tname, inet_ntop(AF_INET6, &psin6->sin6_addr,
> +				strbuf, sizeof(strbuf)), strerror(errno));

Here as well.

>  		}
>  		if (psin6_arg) {
>  			*psin6_arg = *psin6;
> @@ -530,15 +514,13 @@ int getsock(char *tname, struct sockaddr_in6 *psin6_arg, int scope)
>  		else
>  			intfstr = 0;
>  
> -		if (intfstr)
> -			tst_resm(TBROK, "%s: getsock : no%s addresses%s %d",
> -				 tname, scopestr, intfstr, ifindex);
> -		else
> +		if (intfstr == 0) {
>  			tst_resm(TBROK, "%s: getsock : no%s addresses",
>  				 tname, scopestr);
> +		}

This change does not look right. Looks like the purpose of the code was to add
more information to the tst_resm() message if intfstr was not zero and this
change removed the tst_resm() for intfstr != 0. Or was the previous code wrong
(if it was, I would expect description of the change in the commit message)?

>  	}
>  	return -1;
> -#else /* HAVE_IFADDRS_H */
> +#else
>  	return -1;
>  #endif
>  }
> @@ -563,98 +545,76 @@ void test_pktinfo(void)
>  
>  	s_snd = getsock(tname, 0, IPV6_ADDR_GLOBAL);
>  	if (s_snd < 0) {
> -		tst_resm(TBROK, "%s: can't create send socket", tname);
> -		return;
> +		tst_brkm(TBROK, NULL, "%s: can't create send socket", tname);
>  	}
>  	/* global-scope address, interface X */
>  	sa_rcv[0].sin6_scope_id = 0;
>  	s_rcv[0] = getsock(tname, &sa_rcv[0], IPV6_ADDR_GLOBAL);
>  	if (s_rcv[0] == -1) {
> -		tst_resm(TBROK, "%s: only link-scope addresses", tname);
> -		return;
> +		tst_brkm(TBROK, NULL, "%s: only link-scope addresses", tname);
>  	}
>  	/* link-local-scope address, interface X */
>  	sa_rcv[1].sin6_scope_id = sa_rcv[0].sin6_scope_id;
>  	s_rcv[1] = getsock(tname, &sa_rcv[1], IPV6_ADDR_LINK);
>  	if (s_rcv[1] < 0) {
> -		tst_resm(TBROK, "%s: no link-local address on ifindex %d",
> +		tst_brkm(TBROK, NULL, "%s: no link-local address on ifindex %d",
>  			 tname, sa_rcv[0].sin6_scope_id);
> -		return;
>  	}
>  	/* link-local-scope address, interface Y */
>  	sa_rcv[2].sin6_scope_id = -sa_rcv[0].sin6_scope_id;
>  	s_rcv[2] = getsock(tname, &sa_rcv[2], IPV6_ADDR_LINK);
>  	if (s_rcv[2] < 0) {
> -		tst_resm(TBROK, "%s: only one interface?", tname);
> -		return;
> +		tst_brkm(TBROK, NULL, "%s: only one interface?", tname);
>  	}
>  	/* send to rcv1 to verify communication */
>  	/* force to rcv2 w/ PKTINFO */
> -/* TESTS: */
> -/* sticky set-get */
> +	/* TESTS: */
> +	/* sticky set-get */
>  	tname = "IPV6_PKTINFO set";
>  	pi.ipi6_addr = sa_rcv[1].sin6_addr;
>  	pi.ipi6_ifindex = sa_rcv[1].sin6_scope_id;
>  	TEST(setsockopt(s_snd, SOL_IPV6, IPV6_PKTINFO, &pi, sizeof(pi)));
> -	if (TEST_RETURN != 0)
> +	if (TEST_RETURN != 0) {
>  		tst_resm(TFAIL, "%s: %s", tname, strerror(errno));
> -	else
> -		tst_resm(TPASS, "%s", tname);
> +		return;
> +	} else {
> +		tst_resm(TINFO, "%s", tname);
> +	}

Again, why do we exit on first failure?

-- 
Cyril Hrubis
chrubis@suse.cz

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2015-04-30 13:34 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-31  7:46 [LTP] [PATCH 1/6] lib6/runcc.c: use TCONF instead of TBROK when no C compiler is present Xing Gu
2015-03-31  7:46 ` [LTP] [PATCH 2/6] lib6/asapi_04.c: cleanup Xing Gu
2015-04-30 11:55   ` Cyril Hrubis
2015-04-30 12:18   ` Cyril Hrubis
2015-03-31  7:46 ` [LTP] [PATCH 3/6] lib6/asapi_05.c: cleanup Xing Gu
2015-04-30 12:15   ` Cyril Hrubis
2015-03-31  7:46 ` [LTP] [PATCH 4/6] lib6/asapi_06.c: cleanup Xing Gu
2015-04-30 13:33   ` Cyril Hrubis [this message]
2015-03-31  7:46 ` [LTP] [PATCH 5/6] lib6/getaddrinfo_01.c: cleanup Xing Gu
2015-03-31  7:46 ` [LTP] [PATCH 6/6] ipv6_lib: add it into default Xing Gu
2015-03-31 14:52 ` [LTP] [PATCH 1/6] lib6/runcc.c: use TCONF instead of TBROK when no C compiler is present Alexey Kodanev
2015-04-01  1:38   ` gux.fnst
2015-04-01  7:15     ` Alexey Kodanev
2015-04-14  9:24       ` gux.fnst
2015-04-28 17:24         ` Cyril Hrubis
     [not found]           ` <1433247689-3984-1-git-send-email-zenglg.jy@cn.fujitsu.com>
     [not found]             ` <1433247689-3984-2-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-06-06 12:52               ` [LTP] [PATCH v2 1/6] lib6/runcc.c: Cleanup Alexey Kodanev
2015-06-16 12:24                 ` [LTP] [PATCH v3 1/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Zeng Linggang
2015-06-16 12:24                   ` [LTP] [PATCH v3 2/7] lib6/runcc.c: Cleanup Zeng Linggang
2015-06-19 16:08                     ` Alexey Kodanev
2015-06-16 12:24                   ` [LTP] [PATCH v3 3/7] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-06-16 12:24                   ` [LTP] [PATCH v3 4/7] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-06-16 12:24                   ` [LTP] [PATCH v3 5/7] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-06-16 12:24                   ` [LTP] [PATCH v3 6/7] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-06-16 12:24                   ` [LTP] [PATCH v3 7/7] ipv6_lib: Add it into default Zeng Linggang
2015-06-19 14:34                   ` [LTP] [PATCH v3 1/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-09  3:05                     ` [LTP] [PATCH v4 01/11] " Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 02/11] lib6/runcc.c: Cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 03/11] asapi_01: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 04/11] asapi_02: " Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 05/11] asapi_03: " Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 06/11] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 07/11] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 08/11] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 09/11] asapi_07: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 10/11] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-07-09  3:05                       ` [LTP] [PATCH v4 11/11] ipv6_lib: Add it into default Zeng Linggang
2015-07-15 15:49                       ` [LTP] [PATCH v4 01/11] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-16  2:30                         ` Zeng Linggang
2015-07-16  5:30                         ` [LTP] [PATCH v5 " Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 02/11] lib6/runcc.c: Cleanup Zeng Linggang
2015-08-05 17:17                             ` Cyril Hrubis
2015-08-05 17:29                               ` Cyril Hrubis
     [not found]                                 ` <1441016132-18804-1-git-send-email-zenglg.jy@cn.fujitsu.com>
     [not found]                                   ` <1441016132-18804-2-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-09-14  9:56                                     ` [LTP] [PATCH v6 2/7] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Alexey Kodanev
2015-07-16  5:30                           ` [LTP] [PATCH v5 03/11] asapi_01: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 04/11] asapi_02: " Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 05/11] asapi_03: " Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 06/11] lib6/asapi_04.c: Cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 07/11] lib6/asapi_05.c: Cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 08/11] lib6/asapi_06.c: Cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 09/11] asapi_07: Use 'tst_tmpdir' and more cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 10/11] lib6/getaddrinfo_01.c: Cleanup Zeng Linggang
2015-07-16  5:30                           ` [LTP] [PATCH v5 11/11] ipv6_lib: Add it into default Zeng Linggang
2015-08-05 14:00                           ` [LTP] [PATCH v5 01/11] SAFE_MACROS: Add socket(), bind(), listen(), connect() and getsockname() Cyril Hrubis
     [not found]                             ` <55C236CB.8060508@oracle.com>
     [not found]                               ` <1438858276.11271.20.camel@G08FNSTD140232>
2015-08-06 11:56                                 ` Cyril Hrubis
     [not found]             ` <1433247689-3984-3-git-send-email-zenglg.jy@cn.fujitsu.com>
2015-06-06 13:22               ` [LTP] [PATCH v2 2/6] lib6/asapi_04.c: Cleanup Alexey Kodanev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150430133344.GD24720@rei.suse.de \
    --to=chrubis@suse.cz \
    --cc=gux.fnst@cn.fujitsu.com \
    --cc=ltp-list@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox