diff options
Diffstat (limited to 'testcases/network/sctp/func_tests/test_1_to_1_sockopt.c')
-rw-r--r-- | testcases/network/sctp/func_tests/test_1_to_1_sockopt.c | 413 |
1 files changed, 0 insertions, 413 deletions
diff --git a/testcases/network/sctp/func_tests/test_1_to_1_sockopt.c b/testcases/network/sctp/func_tests/test_1_to_1_sockopt.c deleted file mode 100644 index c36f502dc..000000000 --- a/testcases/network/sctp/func_tests/test_1_to_1_sockopt.c +++ /dev/null @@ -1,413 +0,0 @@ -/* SCTP kernel reference Implementation - * Copyright (c) 2003 Hewlett-Packard Development Company, L.P - * (C) Copyright IBM Corp. 2004 - * - * This file has test cases to test negative scenarios for getsockopt () - * setsockopt () call for 1-1 style sockets - * - * setsockopt () Tests: - * ------------------- - * TEST1: setsockopt: Bad socket descriptor - * TEST2: setsockopt: Invalid socket - * TEST3: setsockopt: Invalid level - * TEST4: setsockopt: Invalid option buffer - * TEST5: setsockopt: Invalid option name - * TEST6: getsockopt: Bad socket descriptor - * TEST7: getsockopt: Invalid socket - * TEST8: getsockopt: Invalid option buffer - * TEST9: getsockopt: Invalid option name - * - * TEST10: getsockopt: SCTP_INITMSG - * TEST11: setsockopt: SCTP_INITMSG - * TEST12: setsockopt: SO_LINGER - * TEST13: getsockopt: SO_LINGER - * TEST14: getsockopt: SO_RCVBUF - * TEST15: getsockopt: SCTP_STATUS - * TEST16: setsockopt: SO_RCVBUF - * TEST17: setsockopt: SO_SNDBUF - * TEST18: getsockopt: SO_SNDBUF - * TEST19: getsockopt: SCTP_PRIMARY_ADDR - * TEST20: setsockopt: SCTP_PRIMARY_ADDR - * TEST21: getsockopt: SCTP_ASSOCINFO - * TEST22: setsockopt: SCTP_ASSOCINFO - * - * The SCTP reference implementation 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, or (at your option) - * any later version. - * - * The SCTP reference implementation 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 GNU CC; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Please send any bug reports or fixes you make to the - * email address(es): - * lksctp developers <lksctp-developers@lists.sourceforge.net> - * - * Or submit a bug report through the following website: - * http://www.sf.net/projects/lksctp - * - * Any bugs reported given to us we will try to fix... any fixes shared will - * be incorporated into the next SCTP release. - * - */ - -#include <stdio.h> -#include <unistd.h> -#include <fcntl.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <errno.h> -#include <netinet/sctp.h> -#include <sys/uio.h> -#include <sctputil.h> - -char *TCID = __FILE__; -int TST_TOTAL = 22; -int TST_CNT = 0; - -int main(void) -{ - int error; - socklen_t len; - int sk, sk1, sk2, acpt_sk, pf_class; - struct sctp_rtoinfo grtinfo; - struct sockaddr_in lstn_addr, conn_addr; - struct sctp_initmsg ginmsg; /*get the value for SCTP_INITMSG */ - struct sctp_initmsg sinmsg; /*set the value for SCTP_INITMSG */ - struct linger slinger; /*SO_LINGER structure */ - struct linger glinger; /*SO_LINGER structure */ - struct sockaddr_in addr; - struct sockaddr_in *gaddr; - struct sctp_status gstatus; /*SCTP_STATUS option */ - int rcvbuf_val_get, rcvbuf_val_set; /*get and set var for SO_RCVBUF */ - int sndbuf_val_get, sndbuf_val_set; /*get and set var for SO_SNDBUF */ - struct sctp_prim gprimaddr; /*SCTP_PRIMARY_ADDR get */ - struct sctp_prim sprimaddr; /*SCTP_PRIMARY_ADDR set */ - struct sctp_assocparams sassocparams; /* SCTP_ASSOCPARAMS set */ - struct sctp_assocparams gassocparams; /* SCTP_ASSOCPARAMS get */ - - /* Rather than fflush() throughout the code, set stdout to - * be unbuffered. - */ - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - - pf_class = PF_INET; - - sk = test_socket(pf_class, SOCK_STREAM, IPPROTO_SCTP); - - /*setsockopt() TEST1: Bad socket descriptor EBADF, Expected error */ - error = setsockopt(-1, IPPROTO_SCTP, 0, 0, 0); - if (error != -1 || errno != EBADF) - tst_brkm(TBROK, NULL, "setsockopt with a bad socket " - "descriptor error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() with a bad socket descriptor - EBADF"); - - /*setsockopt() TEST2: Invalid socket ENOTSOCK, Expected error */ - error = setsockopt(0, IPPROTO_SCTP, 0, 0, 0); - if (error != -1 || errno != ENOTSOCK) - tst_brkm(TBROK, NULL, "setsockopt with an invalid socket " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() with an invalid socket - ENOTSOCK"); - - /*setsockopt() TEST3: Invalid level ENOPROTOOPT, Expected error */ - error = setsockopt(sk, -1, SCTP_RTOINFO, 0, 0); - if (error != -1 || errno != ENOPROTOOPT) - tst_brkm(TBROK, NULL, "setsockopt with invalid level " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() with an invalid level - ENOPROTOOPT"); - - /*setsockopt() TEST4: Invalid option buffer EFAULT, Expected error */ - error = setsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, - (const struct sctp_rtoinfo *)-1, - sizeof(struct sctp_rtoinfo)); - if (error != -1 || errno != EFAULT) - tst_brkm(TBROK, NULL, "setsockopt with invalid option " - "buffer error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() with invalid option buffer - EFAULT"); - - /*setsockopt() TEST5: Invalid option Name EOPNOTSUPP, Expected error */ - error = setsockopt(sk, IPPROTO_SCTP, SCTP_AUTOCLOSE, 0, 0); - if (error != -1 || errno != EOPNOTSUPP) - tst_brkm(TBROK, NULL, "setsockopt with invalid option " - "name error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() with invalid option name - EOPNOTSUPP"); - - /*getsockopt() TEST6: Bad socket descriptor EBADF, Expected error */ - error = getsockopt(-1, IPPROTO_SCTP, 0, 0, 0); - if (error != -1 || errno != EBADF) - tst_brkm(TBROK, NULL, "getsockopt with a bad socket " - "descriptor error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() with a bad socket descriptor - EBADF"); - - /*getsockopt() TEST7: Invalid socket ENOTSOCK, Expected error */ - error = getsockopt(0, IPPROTO_SCTP, 0, 0, 0); - if (error != -1 || errno != ENOTSOCK) - tst_brkm(TBROK, NULL, "getsockopt with an invalid socket " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() with an invalid socket - ENOTSOCK"); -#if 0 - /*getsockopt() TEST3: Invalid level ENOPROTOOPT, Expected error */ - /*I have commented this test case because it is returning EOPNOTSUPP. - When I checked the code there also it is returning EOPNOTSUPP. As this - is not specific to TCP style, I do not want to do the code change */ - - error = getsockopt(sk, -1, SCTP_RTOINFO, 0, 0); - if (error != -1 || errno != ENOPROTOOPT) - tst_brkm(TBROK, NULL, "getsockopt with invalid level " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() with an invalid level - ENOPROTOOPT"); -#endif - len = sizeof(struct sctp_rtoinfo); - - /*getsockopt() TEST8: Invalid option buffer EFAULT, Expected error */ - error = getsockopt(sk, IPPROTO_SCTP, SCTP_RTOINFO, - (struct sctp_rtoinfo *)-1, &len); - if (error != -1 || errno != EFAULT) - tst_brkm(TBROK, NULL, "getsockopt with invalid option " - "buffer error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() with invalid option buffer - EFAULT"); - - /*getsockopt() TEST9: Invalid option Name EOPNOTSUPP, Expected error */ - error = getsockopt(sk, IPPROTO_SCTP, SCTP_AUTOCLOSE, &grtinfo, &len); - if (error != -1 || errno != EOPNOTSUPP) - tst_brkm(TBROK, NULL, "getsockopt with invalid option " - "name error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() with invalid option name - EOPNOTSUPP"); - - close(sk); - - sk1 = test_socket(pf_class, SOCK_STREAM, IPPROTO_SCTP); - sk2 = test_socket(pf_class, SOCK_STREAM, IPPROTO_SCTP); - - lstn_addr.sin_family = AF_INET; - lstn_addr.sin_addr.s_addr = SCTP_IP_LOOPBACK; - lstn_addr.sin_port = htons(SCTP_TESTPORT_1); - - conn_addr.sin_family = AF_INET; - conn_addr.sin_addr.s_addr = SCTP_IP_LOOPBACK; - conn_addr.sin_port = htons(SCTP_TESTPORT_1); - - len = sizeof(struct sctp_initmsg); - - /* TEST10: Test cases for getsockopt SCTP_INITMSG */ - test_getsockopt(sk1, SCTP_INITMSG, &ginmsg, &len); - - tst_resm(TPASS, "getsockopt() SCTP_INITMSG - SUCCESS"); - - sinmsg.sinit_num_ostreams = 5; - sinmsg.sinit_max_instreams = 5; - sinmsg.sinit_max_attempts = 3; - sinmsg.sinit_max_init_timeo = 30; - /* TEST11: Test case for setsockopt SCTP_INITMSG */ - test_setsockopt(sk1, SCTP_INITMSG, &sinmsg, sizeof(sinmsg)); - - test_getsockopt(sk1, SCTP_INITMSG, &ginmsg, &len); - - if (sinmsg.sinit_num_ostreams != ginmsg.sinit_num_ostreams && - sinmsg.sinit_max_instreams != ginmsg.sinit_max_instreams && - sinmsg.sinit_max_attempts != ginmsg.sinit_max_attempts && - sinmsg.sinit_max_init_timeo != ginmsg.sinit_max_init_timeo) - tst_brkm(TBROK, NULL, "setsockopt/getsockopt SCTP_INITMSG " - "compare failed"); - - tst_resm(TPASS, "setsockopt() SCTP_INITMSG - SUCCESS"); - - /*Now get the values on different endpoint */ - test_getsockopt(sk2, SCTP_INITMSG, &ginmsg, &len); - - /*Comparison should not succeed here */ - if (sinmsg.sinit_num_ostreams == ginmsg.sinit_num_ostreams && - sinmsg.sinit_max_instreams == ginmsg.sinit_max_instreams && - sinmsg.sinit_max_attempts == ginmsg.sinit_max_attempts && - sinmsg.sinit_max_init_timeo == ginmsg.sinit_max_init_timeo) - tst_brkm(TBROK, NULL, "setsockopt/getsockopt SCTP_INITMSG " - "unexpected compare success"); - - /* SO_LINGER Test with l_onff = 0 and l_linger = 0 */ - slinger.l_onoff = 0; - slinger.l_linger = 0; - test_bind(sk1, (struct sockaddr *)&lstn_addr, sizeof(lstn_addr)); - test_listen(sk1, 10); - len = sizeof(struct sockaddr_in); - test_connect(sk2, (struct sockaddr *)&conn_addr, len); - - acpt_sk = test_accept(sk1, (struct sockaddr *)&addr, &len); - - len = sizeof(struct linger); - /* TEST12: Test case for setsockopt SO_LINGER */ - error = setsockopt(sk2, SOL_SOCKET, SO_LINGER, &slinger, len); - if (error < 0) - tst_brkm(TBROK, NULL, "setsockopt SO_LINGER " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() SO_LINGER - SUCCESS"); - - /* TEST13: Test case for getsockopt SO_LINGER */ - error = getsockopt(sk2, SOL_SOCKET, SO_LINGER, &glinger, &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SO_LINGER " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SO_LINGER - SUCCESS"); - - if (slinger.l_onoff != glinger.l_onoff || - slinger.l_linger != glinger.l_linger) - tst_brkm(TBROK, NULL, "setsockopt/getsockopt SO_LINGER " - "compare failed"); - - /*First gets the default SO_RCVBUF value and comapres with the - value obtained from SCTP_STATUS */ - len = sizeof(int); - /* TEST14: Test case for getsockopt SO_RCVBUF */ - error = getsockopt(sk2, SOL_SOCKET, SO_RCVBUF, &rcvbuf_val_get, &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SO_RCVBUF " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SO_RCVBUF - SUCCESS"); - - len = sizeof(struct sctp_status); - /* TEST15: Test case for getsockopt SCTP_STATUS */ - error = getsockopt(sk2, IPPROTO_SCTP, SCTP_STATUS, &gstatus, &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SCTP_STATUS " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SCTP_STATUS - SUCCESS"); - - /* Reducing the SO_RCVBUF value using setsockopt() */ - len = sizeof(int); - /* (rcvbuf len)*2 should be no less than SOCK_MIN_RCVBUF in kernel */ - rcvbuf_val_set = 1500; - /* TEST16: Test case for setsockopt SO_RCVBUF */ - error = setsockopt(sk2, SOL_SOCKET, SO_RCVBUF, &rcvbuf_val_set, len); - if (error < 0) - tst_brkm(TBROK, NULL, "setsockopt SO_RCVBUF " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() SO_RCVBUF - SUCCESS"); - - error = getsockopt(sk2, SOL_SOCKET, SO_RCVBUF, &rcvbuf_val_get, &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SO_RCVBUF " - "error:%d, errno:%d", error, errno); - - if ((2 * rcvbuf_val_set) != rcvbuf_val_get) - tst_brkm(TBROK, NULL, "Comparison failed:Set value and " - "got value differs Set Value=%d Get Value=%d", - (2 * rcvbuf_val_set), rcvbuf_val_get); - - sndbuf_val_set = 1024; - /* TEST17: Test case for setsockopt SO_SNDBUF */ - error = setsockopt(sk2, SOL_SOCKET, SO_SNDBUF, &sndbuf_val_set, len); - if (error < 0) - tst_brkm(TBROK, NULL, "setsockopt SO_SNDBUF " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() SO_SNDBUF - SUCCESS"); - - /* TEST18: Test case for getsockopt SO_SNDBUF */ - error = getsockopt(sk2, SOL_SOCKET, SO_SNDBUF, &sndbuf_val_get, &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SO_SNDBUF " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SO_SNDBUF - SUCCESS"); - - if ((2 * sndbuf_val_set) != sndbuf_val_get) - tst_brkm(TBROK, NULL, "Comparison failed:Set value and " - "got value differs Set Value=%d Get Value=%d\n", - (2 * sndbuf_val_set), sndbuf_val_get); - - /* Getting the primary address using SCTP_PRIMARY_ADDR */ - len = sizeof(struct sctp_prim); - /* TEST19: Test case for getsockopt SCTP_PRIMARY_ADDR */ - error = getsockopt(sk2, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, &gprimaddr, - &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SCTP_PRIMARY_ADDR " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SCTP_PRIMARY_ADDR - SUCCESS"); - - gaddr = (struct sockaddr_in *)&gprimaddr.ssp_addr; - if (htons(gaddr->sin_port) != lstn_addr.sin_port && - gaddr->sin_family != lstn_addr.sin_family && - gaddr->sin_addr.s_addr != lstn_addr.sin_addr.s_addr) - tst_brkm(TBROK, NULL, "getsockopt SCTP_PRIMARY_ADDR value " - "mismatch"); - - memcpy(&sprimaddr, &gprimaddr, sizeof(struct sctp_prim)); - - /* TEST20: Test case for setsockopt SCTP_PRIMARY_ADDR */ - error = setsockopt(sk2, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, &sprimaddr, - len); - if (error < 0) - tst_brkm(TBROK, NULL, "setsockopt SCTP_PRIMARY_ADDR " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "setsockopt() SCTP_PRIMARY_ADDR - SUCCESS"); - - /* TEST21: Test case for getsockopt SCTP_PRIMARY_ADDR */ - /* Getting the association info using SCTP_ASSOCINFO */ - len = sizeof(struct sctp_assocparams); - error = getsockopt(sk2, IPPROTO_SCTP, SCTP_ASSOCINFO, &gassocparams, - &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SCTP_ASSOCINFO " - "error:%d, errno:%d", error, errno); - - tst_resm(TPASS, "getsockopt() SCTP_ASSOCINFO - SUCCESS"); - - /* TEST21: Test case for setsockopt SCTP_ASSOCINFO */ - memcpy(&sassocparams, &gassocparams, sizeof(struct sctp_assocparams)); - sassocparams.sasoc_asocmaxrxt += 5; - sassocparams.sasoc_cookie_life += 10; - - error = setsockopt(sk2, IPPROTO_SCTP, SCTP_ASSOCINFO, &sassocparams, - len); - if (error < 0) - tst_brkm(TBROK, NULL, "setsockopt SCTP_ASSOCINFO " - "error:%d, errno:%d", error, errno); - - error = getsockopt(sk2, IPPROTO_SCTP, SCTP_ASSOCINFO, &gassocparams, - &len); - if (error < 0) - tst_brkm(TBROK, NULL, "getsockopt SCTP_ASSOCINFO " - "error:%d, errno:%d", error, errno); - - if (sassocparams.sasoc_asocmaxrxt != gassocparams.sasoc_asocmaxrxt || - sassocparams.sasoc_cookie_life != gassocparams.sasoc_cookie_life) - tst_brkm(TBROK, NULL, "getsockopt SCTP_ASSOCINFO value " - "mismatch"); - tst_resm(TPASS, "setsockopt() SCTP_ASSOCINFO - SUCCESS"); - - close(sk2); - close(sk1); - close(acpt_sk); - - tst_exit(); -} |