1 /* SCTP kernel Implementation 2 * Copyright (c) 2003 Hewlett-Packard Development Company, L.P 3 * (C) Copyright IBM Corp. 2004 4 * 5 * This file has test cases to test the getsockopt () and sectsockopt () with 6 * SCTP_RTOINFO option on 1-1 style socket 7 * 8 * This program first gets the default values using getsockopt(). It also sets 9 * the value using setsockopt() and gets the set value using getsockopt(). 10 * A comparison between set values and get values are performed. 11 * 12 * The SCTP implementation is free software; 13 * you can redistribute it and/or modify it under the terms of 14 * the GNU General Public License as published by 15 * the Free Software Foundation; either version 2, or (at your option) 16 * any later version. 17 * 18 * The SCTP implementation is distributed in the hope that it 19 * will be useful, but WITHOUT ANY WARRANTY; without even the implied 20 * ************************ 21 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 22 * See the GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with GNU CC; see the file COPYING. If not, write to 26 * the Free Software Foundation, 59 Temple Place - Suite 330, 27 * Boston, MA 02111-1307, USA. 28 * 29 * Please send any bug reports or fixes you make to the 30 * email address(es): 31 * lksctp developers <lksctp-developers (at) lists.sourceforge.net> 32 * 33 * Or submit a bug report through the following website: 34 * http://www.sf.net/projects/lksctp 35 * 36 * Any bugs reported given to us we will try to fix... any fixes shared will 37 * be incorporated into the next SCTP release 38 * 39 */ 40 41 #include <stdio.h> 42 #include <unistd.h> 43 #include <fcntl.h> 44 #include <stdlib.h> 45 #include <string.h> 46 #include <sys/types.h> 47 #include <sys/socket.h> 48 #include <linux/socket.h> 49 #include <linux/in.h> /* for sockaddr_in */ 50 #include <linux/in6.h> /* for sockaddr_in6 */ 51 #include <sys/errno.h> 52 #include <sys/uio.h> 53 #include <netinet/sctp.h> 54 #include <sctputil.h> 55 56 char *TCID = __FILE__; 57 int TST_TOTAL = 3; 58 int TST_CNT = 0; 59 60 int 61 main(void) 62 { 63 64 int sd, ret; 65 socklen_t len; 66 struct sctp_rtoinfo srtoinfo; /*setting the variables*/ 67 struct sctp_rtoinfo grtoinfo; /*Getting the variables*/ 68 69 sd = test_socket (PF_INET, SOCK_STREAM, IPPROTO_SCTP); 70 71 len = sizeof(struct sctp_rtoinfo); 72 73 /*TEST1 Getting the default values using getsockopt()*/ 74 ret = getsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &grtoinfo, &len); 75 if (ret < 0) 76 tst_brkm(TBROK, tst_exit, "getsockopt SCTP_RTOINFO " 77 "ret:%d, errno:%d", ret, errno); 78 79 tst_resm(TPASS, "getsockopt() SCTP_RTOINFO - SUCCESS"); 80 81 /*Assigning the values to RTO initial and max and min bounds*/ 82 srtoinfo.srto_initial=60; 83 srtoinfo.srto_max=100; 84 srtoinfo.srto_min=40; 85 86 /*TEST2 Setting the values using setsockopt()*/ 87 ret = setsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &srtoinfo, 88 sizeof(struct sctp_rtoinfo)); 89 if (ret < 0) 90 tst_brkm(TBROK, tst_exit, "setsockopt SCTP_RTOINFO " 91 "ret:%d, errno:%d", ret, errno); 92 93 tst_resm(TPASS, "setsockopt() SCTP_RTOINFO - SUCCESS"); 94 95 /*Getting the values which are set using setsockopt()*/ 96 ret = getsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &grtoinfo, &len); 97 if (ret < 0) 98 tst_brkm(TBROK, tst_exit, "getsockopt SCTP_RTOINFO " 99 "ret:%d, errno:%d", ret, errno); 100 101 /* TEST3 Compare the get values with the set values. */ 102 if (srtoinfo.srto_initial != grtoinfo.srto_initial && 103 srtoinfo.srto_max != grtoinfo.srto_max && 104 srtoinfo.srto_min != grtoinfo.srto_min) 105 tst_brkm(TBROK, tst_exit, "setsockopt/getsockopt SCTP_RTOINFO " 106 "compare failed"); 107 108 tst_resm(TPASS, "setsockopt()/getsockopt SCTP_RTOINFO compare - " 109 "SUCCESS"); 110 111 close(sd); 112 113 return 0; 114 } 115