Hi!
> Signed-off-by: Xing Gu <gux.f...@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 <yoshf...@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
chru...@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 via email to