* Add 'static' before some functions and global variables.
* Remove useless comments.
* Use SAFE_XXX().
* Modify the format of ptab[] and cstab[].
* Rewrite 'csum_test()' and 'isocketpair()'.
* Use 'tst_tmpdir' and 'tst_rmdir'.
* Some cleanup.

Signed-off-by: Zeng Linggang <zenglg...@cn.fujitsu.com>
Signed-off-by: Alexey Kodanev <alexey.koda...@oracle.com>
Signed-off-by: Cyril Hrubis <chru...@suse.cz>
---
 testcases/network/lib6/asapi_04.c | 287 ++++++++++++++++----------------------
 1 file changed, 122 insertions(+), 165 deletions(-)

diff --git a/testcases/network/lib6/asapi_04.c 
b/testcases/network/lib6/asapi_04.c
index 76de26b..76e8f8e 100644
--- a/testcases/network/lib6/asapi_04.c
+++ b/testcases/network/lib6/asapi_04.c
@@ -1,38 +1,21 @@
 /*
+ * Copyright (c) 2015 Fujitsu Ltd.
+ * Copyright (c) International Business Machines  Corp., 2001
  *
- *   Copyright (c) International Business Machines  Corp., 2001
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
  *
- *   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
- *   the Free Software Foundation; either version 2 of the License, or
- *   (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   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
- */
-
-/*
- * Test Name: asapi_04
- *
- * Test Description:
- *  Verify that in6 and sockaddr fields are present. Most of these are
- *  "PASS" if they just compile.
- *
- * Usage:  <for command-line>
- *  asapi_04
- *
- * HISTORY
- *     04/2005 written by David L Stevens
- *
- * RESTRICTIONS:
- *  None.
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
+ * Author: David L Stevens
  */
 
 #include <stdio.h>
@@ -48,33 +31,35 @@
 #include <netinet/in.h>
 
 #include "test.h"
+#include "safe_macros.h"
 
-char *TCID = "asapi_04";       /* Test program identifier.    */
+char *TCID = "asapi_04";
 
-pid_t pid;
+static pid_t pid;
 
-struct {
+static struct {
        char *prt_name;
        int prt_value;
 } ptab[] = {
-       {
-       "hopopt", 0}, {
-       "ipv6", 41}, {
-       "ipv6-route", 43}, {
-       "ipv6-frag", 44}, {
-       "esp", 50}, {
-       "ah", 51}, {
-       "ipv6-icmp", 58}, {
-       "ipv6-nonxt", 59}, {
-"ipv6-opts", 60},};
-
-#define PTCOUNT        (sizeof(ptab)/sizeof(ptab[0]))
+       {"hopopt", 0},
+       {"ipv6", 41},
+       {"ipv6-route", 43},
+       {"ipv6-frag", 44},
+       {"esp", 50},
+       {"ah", 51},
+       {"ipv6-icmp", 58},
+       {"ipv6-nonxt", 59},
+       {"ipv6-opts", 60},
+};
+
+#define PTCOUNT        ARRAY_SIZE(ptab)
 
 #define READ_TIMEOUT   5       /* secs */
 
-void do_tests(void);
-void setup(void), cleanup(void);
-int csum_test(char *rhost);
+static void do_tests(void);
+static void setup(void);
+static void cleanup(void);
+static int csum_test(void);
 
 int main(int argc, char *argv[])
 {
@@ -90,44 +75,41 @@ int main(int argc, char *argv[])
                do_tests();
 
        cleanup();
-
        tst_exit();
 }
 
-void do_tests(void)
+static void do_tests(void)
 {
-       int i;
+       unsigned int i;
 
 /* RFC 3542, Section 2.3 */
 #ifndef IN6_ARE_ADDR_EQUAL
-       tst_resm(TBROK, "IN6_ARE_ADDR_EQUAL not present");
+       tst_resm(TCONF, "IN6_ARE_ADDR_EQUAL not present");
 #else /* IN6_ARE_ADDR_EQUAL */
        /*
         * set each bit in an address and check for unequal; then set
         * in the second address and check for equal. Covers all bits, all
         * combinations.
         */
-       {
-               struct in6_addr a1, a2;
-               int word, bit;
-               int rv = 1;
+       struct in6_addr a1, a2;
+       int word, bit;
+       int rv = 1;
 
-               memset(&a1, 0, sizeof(a1));
-               memset(&a2, 0, sizeof(a2));
+       memset(&a1, 0, sizeof(a1));
+       memset(&a2, 0, sizeof(a2));
 
-               rv = IN6_ARE_ADDR_EQUAL(&a1, &a2);
+       rv = IN6_ARE_ADDR_EQUAL(&a1, &a2);
 
-               for (word = 0; word < 4; ++word)
-                       for (bit = 0; bit < 32; ++bit) {
-                               uint32_t newbit = 1 << bit;
+       for (word = 0; word < 4; ++word)
+               for (bit = 0; bit < 32; ++bit) {
+                       uint32_t newbit = 1U << bit;
 
-                               a1.s6_addr32[word] |= newbit;   /* unequal */
-                               rv &= !IN6_ARE_ADDR_EQUAL(&a1, &a2);
-                               a2.s6_addr32[word] |= newbit;   /* equal */
-                               rv &= IN6_ARE_ADDR_EQUAL(&a1, &a2);
-                       }
-               tst_resm(rv ? TPASS : TFAIL, "IN6_ARE_ADDR_EQUAL");
-       }
+                       a1.s6_addr32[word] |= newbit;   /* unequal */
+                       rv &= !IN6_ARE_ADDR_EQUAL(&a1, &a2);
+                       a2.s6_addr32[word] |= newbit;   /* equal */
+                       rv &= IN6_ARE_ADDR_EQUAL(&a1, &a2);
+               }
+       tst_resm(rv ? TPASS : TFAIL, "IN6_ARE_ADDR_EQUAL");
 #endif /* IN6_ARE_ADDR_EQUAL */
 
 /* RFC 3542, Section 2.4 */
@@ -141,7 +123,7 @@ void do_tests(void)
                         ptab[i].prt_name);
        }
 /* RFC 3542, Section 3.1 */
-       csum_test("::1");
+       csum_test();
 }
 
 /*
@@ -162,10 +144,10 @@ struct tprot {
        unsigned char tp_dat[0];        /* user data */
 };
 
-unsigned char tpbuf[sizeof(struct tprot) + 2048];
-unsigned char rpbuf[sizeof(struct tprot) + 2048];
+static unsigned char tpbuf[sizeof(struct tprot) + 2048];
+static unsigned char rpbuf[sizeof(struct tprot) + 2048];
 
-struct csent {
+static struct csent {
        int cs_offset;
        int cs_dlen;
        int cs_setresult;       /* setsockopt expected result */
@@ -173,25 +155,24 @@ struct csent {
        int cs_sndresult;       /* send expected result */
        int cs_snderrno;        /* send expected errno */
 } cstab[] = {
-       {
-       0, 5, 0, 0, 0, 0}, {
-       6, 30, 0, 0, 0, 0}, {
-       3, 20, -1, EINVAL, -1, -1},     /* non-aligned offset */
-       {
-       4, 5, 0, 0, -1, EINVAL},        /* not enough space */
-       {
-       50, 5, 0, 0, -1, EINVAL},       /* outside of packet */
-       {
-       22, 30, 0, 0, 0, 0}, {
-       2000, 2004, 0, 0, 0, 0},        /* in a fragment (over Ethernet) */
+       {0, 5, 0, 0, 0, 0},
+       {6, 30, 0, 0, 0, 0},
+       {3, 20, -1, EINVAL, -1, -1},    /* non-aligned offset */
+       {4, 5, 0, 0, -1, EINVAL},       /* not enough space */
+       {50, 5, 0, 0, -1, EINVAL},      /* outside of packet */
+       {22, 30, 0, 0, 0, 0},
+       {2000, 2004, 0, 0, 0, 0},       /* in a fragment (over Ethernet) */
 };
 
-#define CSCOUNT        (sizeof(cstab)/sizeof(cstab[0]))
+#define CSCOUNT        ARRAY_SIZE(cstab)
+
+int TST_TOTAL = PTCOUNT + CSCOUNT;
 
-static int recvtprot(int sd, unsigned char *packet, int psize)
+static int recvtprot(int sd, unsigned char *packet)
 {
        struct tprot *tpt;
-       int cc, total, expected;
+       int cc;
+       unsigned int total, expected;
        int gothead;
 
        tpt = (struct tprot *)packet;
@@ -218,7 +199,8 @@ static int recvtprot(int sd, unsigned char *packet, int 
psize)
        return total;
 }
 
-unsigned short csum(unsigned short partial, unsigned char *packet, int len)
+static unsigned short csum(unsigned short partial, unsigned char *packet,
+                          int len)
 {
        unsigned long sum = partial;
        unsigned short *ps;
@@ -234,7 +216,7 @@ unsigned short csum(unsigned short partial, unsigned char 
*packet, int len)
        return ~sum;
 }
 
-struct ph {
+static struct ph {
        struct in6_addr ph_sa;
        struct in6_addr ph_da;
        uint32_t ph_len;
@@ -242,13 +224,14 @@ struct ph {
        uint8_t ph_nh;
 } ph;
 
-static int client(int prot, int sfd)
+static int client(int sfd)
 {
        struct tprot *pttp = (struct tprot *)tpbuf;
        struct tprot *prtp = (struct tprot *)rpbuf;
        struct sockaddr_in6 rsin6;
        static int seq;
-       int i, sd, cc, cs;
+       unsigned int i;
+       int sd, cc, cs;
 
        memset(&rsin6, 0, sizeof(rsin6));
        rsin6.sin6_family = AF_INET6;
@@ -259,11 +242,8 @@ static int client(int prot, int sfd)
        ph.ph_da = rsin6.sin6_addr;
        ph.ph_nh = NH_TEST;
 
-       sd = socket(PF_INET6, SOCK_RAW, NH_TEST);
-       if (sd < 0) {
-               tst_resm(TBROK, "can't create raw socket: %s", strerror(errno));
-               return -1;
-       }
+       sd = SAFE_SOCKET(NULL, PF_INET6, SOCK_RAW, NH_TEST);
+
        for (i = 0; i < CSCOUNT; ++i) {
                int offset, len, xlen;
                int rv;
@@ -289,17 +269,20 @@ static int client(int prot, int sfd)
                                 cstab[i].cs_setresult);
                        continue;
                }
+
                if (TEST_RETURN < 0) {
                        tst_resm(TPASS, "IPV6_CHECKSUM offset %d len %d",
                                 offset, len);
                        continue;
                }
+
                if (TEST_RETURN && TEST_ERRNO != cstab[i].cs_seterrno) {
                        tst_resm(TFAIL, "IPV6_CHECKSUM offset %d len %d "
                                 "- errno %d != %d", offset, len,
                                 TEST_ERRNO, cstab[i].cs_seterrno);
                        continue;
                }
+
                /* send packet */
                TEST(sendto(sd, pttp, len, 0, (struct sockaddr *)&rsin6,
                            sizeof(rsin6)));
@@ -311,20 +294,23 @@ static int client(int prot, int sfd)
                                 TEST_RETURN, xlen);
                        continue;
                }
+
                if (TEST_RETURN < 0 && TEST_ERRNO != cstab[i].cs_snderrno) {
                        tst_resm(TFAIL, "IPV6_CHECKSUM offset %d len %d "
                                 "- snderrno %d != %d", offset, len,
                                 TEST_ERRNO, cstab[i].cs_snderrno);
                        continue;
                }
+
                if (TEST_RETURN < 0) {
                        tst_resm(TPASS, "IPV6_CHECKSUM offset %d len %d",
                                 offset, len);
                        continue;
                }
-               while ((cc = recvtprot(sfd, rpbuf, sizeof(rpbuf)))) {
-                       if (htonl(prtp->tp_pid) == pid &&
-                           htonl(prtp->tp_seq) == seq)
+
+               while ((cc = recvtprot(sfd, rpbuf))) {
+                       if (htonl(prtp->tp_pid) == (uint32_t)pid &&
+                           htonl(prtp->tp_seq) == (uint32_t)seq)
                                break;
                }
                rv = 1;
@@ -334,7 +320,7 @@ static int client(int prot, int sfd)
                                continue;
                        if (*p != 0xa5) {
                                tst_resm(TFAIL, "IPV6_CHECKSUM corrupt data "
-                                        "0x%02x != 0xa5 at offset %d in 
packet",
+                                        "0x%02x != 0xa5 at offset %zd in 
packet",
                                         *p, p - rpbuf);
                                rv = 0;
                                break;
@@ -358,7 +344,7 @@ static int client(int prot, int sfd)
 static int listen_fd, connect_fd;
 sem_t ilsem;
 
-void *ilistener(void *arg)
+static void *ilistener(void *arg LTP_ATTRIBUTE_UNUSED)
 {
        connect_fd = accept(listen_fd, 0, 0);
        close(listen_fd);
@@ -366,7 +352,7 @@ void *ilistener(void *arg)
        return NULL;
 }
 
-int isocketpair(int pf, int type, int proto, int fd[2])
+static void isocketpair(int pf, int type, int proto, int fd[2])
 {
        pthread_t thid;
        struct sockaddr_in sin4;
@@ -375,80 +361,51 @@ int isocketpair(int pf, int type, int proto, int fd[2])
 /* restrict to PF_INET for now */
        if (pf != PF_INET) {
                errno = EOPNOTSUPP;
-               return -1;
+               return;
        }
+
        sem_init(&ilsem, 0, 0);
-       listen_fd = socket(pf, type, proto);
-       if (listen_fd < 0) {
-               perror("socket");
-               return -1;
-       }
+
+       listen_fd = SAFE_SOCKET(NULL, pf, type, proto);
+
        memset(&sin4, 0, sizeof(sin4));
-       if (bind(listen_fd, (struct sockaddr *)&sin4, sizeof(sin4)) < 0) {
-               perror("bind");
-               return -1;
-       }
-       if (listen(listen_fd, 10) < 0) {
-               perror("listen");
-               return -1;
-       }
+
+       SAFE_BIND(NULL, listen_fd, (struct sockaddr *)&sin4, sizeof(sin4));
+
+       SAFE_LISTEN(NULL, listen_fd, 10);
+
        namelen = sizeof(sin4);
-       if (getsockname(listen_fd, (struct sockaddr *)&sin4, &namelen) < 0) {
-               perror("getsockname");
-               return -1;
-       }
-       if (pthread_create(&thid, 0, ilistener, 0) < 0) {
-               perror("pthread_create");
-               return -1;
-       }
+       SAFE_GETSOCKNAME(NULL, listen_fd, (struct sockaddr *)&sin4, &namelen);
+
+       if (pthread_create(&thid, 0, ilistener, 0) < 0)
+               tst_brkm(TBROK | TERRNO, NULL, "pthread_create error");
+
+       fd[0] = SAFE_SOCKET(NULL, pf, type, proto);
 
-       fd[0] = socket(pf, type, proto);
-       if (fd[0] < 0) {
-               perror("socket");
-               return -1;
-       }
        sin4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-       if (connect(fd[0], (struct sockaddr *)&sin4, sizeof(sin4)) < 0) {
-               perror("connect");
-               return -1;
-       }
+
+       SAFE_CONNECT(NULL, fd[0], (struct sockaddr *)&sin4, sizeof(sin4));
+
        sem_wait(&ilsem);
        fd[1] = connect_fd;
        sem_destroy(&ilsem);
-       return 0;
 }
 
 #ifndef MAX
 #define MAX(a, b) ((a) >= (b) ? (a) : (b))
 #endif /* MAX */
 
-int csum_test(char *rhost)
+static int csum_test(void)
 {
        fd_set rset, rset_save;
        int csd[2];             /* control sockets */
        int sd, nfds, maxfd, cc;
        struct timeval tv;
 
-/* rhost == loopback, for now */
-       if (strcmp(rhost, "::1")) {
-               tst_resm(TBROK, "invalid rhost \"%s\"", rhost);
-               return -1;
-       }
-       if (isocketpair(PF_INET, SOCK_STREAM, 0, csd) < 0) {
-               tst_resm(TBROK, "socketpair: %s", strerror(errno));
-               return -1;
-       }
-       sd = socket(PF_INET6, SOCK_RAW, NH_TEST);
-       if (sd < 0) {
-               int saved_errno = errno;
-
-               if (errno == EPERM && geteuid())
-                       tst_resm(TBROK, "IPV6_CHECKSUM tests must run as root");
-               else
-                       tst_resm(TBROK, "All IPv6_CHECKSUM tests broken: "
-                                "socket: %s", strerror(saved_errno));
-               return -1;
-       }
+       isocketpair(PF_INET, SOCK_STREAM, 0, csd);
+
+       sd = SAFE_SOCKET(NULL, PF_INET6, SOCK_RAW, NH_TEST);
+
        FD_ZERO(&rset_save);
        FD_SET(sd, &rset_save);
        FD_SET(csd[1], &rset_save);
@@ -457,16 +414,15 @@ int csum_test(char *rhost)
 
        /* server socket set; now start the client */
        switch (fork()) {
-       case 0:         /* child */
+       case 0:
                close(csd[0]);
                break;
        case -1:
-               tst_resm(TBROK, "can't fork rserver");
-               return -1;
-       default:                /* parent */
+               tst_brkm(TBROK, NULL, "can't fork rserver");
+       default:
                close(sd);
                close(csd[1]);
-               return client(pid, csd[0]);
+               return client(csd[0]);
        }
 
        tv.tv_sec = READ_TIMEOUT;
@@ -515,13 +471,14 @@ int csum_test(char *rhost)
        return 0;
 }
 
-void setup(void)
+static void setup(void)
 {
-       TEST_PAUSE;             /* if -P option specified */
+       TEST_PAUSE;
+
+       tst_tmpdir();
 }
 
-void cleanup(void)
+static void cleanup(void)
 {
+       tst_rmdir();
 }
-
-int TST_TOTAL = PTCOUNT + CSCOUNT;
-- 
1.9.3


------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to