16f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu/* SCTP kernel Implementation 25ba96af16cf74736f632baec4672dda40c441682mridge * Copyright (c) 2003 Hewlett-Packard Development Company, L.P 35ba96af16cf74736f632baec4672dda40c441682mridge * (C) Copyright IBM Corp. 2004 45ba96af16cf74736f632baec4672dda40c441682mridge * 55ba96af16cf74736f632baec4672dda40c441682mridge * This file has test cases to test the getsockopt () and sectsockopt () with 65ba96af16cf74736f632baec4672dda40c441682mridge * SCTP_RTOINFO option on 1-1 style socket 75ba96af16cf74736f632baec4672dda40c441682mridge * 85ba96af16cf74736f632baec4672dda40c441682mridge * This program first gets the default values using getsockopt(). It also sets 95ba96af16cf74736f632baec4672dda40c441682mridge * the value using setsockopt() and gets the set value using getsockopt(). 105ba96af16cf74736f632baec4672dda40c441682mridge * A comparison between set values and get values are performed. 115ba96af16cf74736f632baec4672dda40c441682mridge * 126f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * The SCTP implementation is free software; 135ba96af16cf74736f632baec4672dda40c441682mridge * you can redistribute it and/or modify it under the terms of 145ba96af16cf74736f632baec4672dda40c441682mridge * the GNU General Public License as published by 155ba96af16cf74736f632baec4672dda40c441682mridge * the Free Software Foundation; either version 2, or (at your option) 165ba96af16cf74736f632baec4672dda40c441682mridge * any later version. 175ba96af16cf74736f632baec4672dda40c441682mridge * 186f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu * The SCTP implementation is distributed in the hope that it 195ba96af16cf74736f632baec4672dda40c441682mridge * will be useful, but WITHOUT ANY WARRANTY; without even the implied 205ba96af16cf74736f632baec4672dda40c441682mridge * ************************ 215ba96af16cf74736f632baec4672dda40c441682mridge * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 225ba96af16cf74736f632baec4672dda40c441682mridge * See the GNU General Public License for more details. 235ba96af16cf74736f632baec4672dda40c441682mridge * 245ba96af16cf74736f632baec4672dda40c441682mridge * You should have received a copy of the GNU General Public License 255ba96af16cf74736f632baec4672dda40c441682mridge * along with GNU CC; see the file COPYING. If not, write to 265ba96af16cf74736f632baec4672dda40c441682mridge * the Free Software Foundation, 59 Temple Place - Suite 330, 275ba96af16cf74736f632baec4672dda40c441682mridge * Boston, MA 02111-1307, USA. 285ba96af16cf74736f632baec4672dda40c441682mridge * 295ba96af16cf74736f632baec4672dda40c441682mridge * Please send any bug reports or fixes you make to the 305ba96af16cf74736f632baec4672dda40c441682mridge * email address(es): 315ba96af16cf74736f632baec4672dda40c441682mridge * lksctp developers <lksctp-developers@lists.sourceforge.net> 325ba96af16cf74736f632baec4672dda40c441682mridge * 335ba96af16cf74736f632baec4672dda40c441682mridge * Or submit a bug report through the following website: 345ba96af16cf74736f632baec4672dda40c441682mridge * http://www.sf.net/projects/lksctp 355ba96af16cf74736f632baec4672dda40c441682mridge * 365ba96af16cf74736f632baec4672dda40c441682mridge * Any bugs reported given to us we will try to fix... any fixes shared will 375ba96af16cf74736f632baec4672dda40c441682mridge * be incorporated into the next SCTP release 385ba96af16cf74736f632baec4672dda40c441682mridge * 395ba96af16cf74736f632baec4672dda40c441682mridge */ 405ba96af16cf74736f632baec4672dda40c441682mridge 415ba96af16cf74736f632baec4672dda40c441682mridge#include <stdio.h> 425ba96af16cf74736f632baec4672dda40c441682mridge#include <unistd.h> 435ba96af16cf74736f632baec4672dda40c441682mridge#include <fcntl.h> 445ba96af16cf74736f632baec4672dda40c441682mridge#include <stdlib.h> 455ba96af16cf74736f632baec4672dda40c441682mridge#include <string.h> 465ba96af16cf74736f632baec4672dda40c441682mridge#include <sys/types.h> 475ba96af16cf74736f632baec4672dda40c441682mridge#include <sys/socket.h> 4864a341fc42c967890a9fb5d8855568e23104bef6mridge#include <linux/socket.h> 496f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#include <linux/in.h> /* for sockaddr_in */ 506f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#include <linux/in6.h> /* for sockaddr_in6 */ 516f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu#include <sys/errno.h> 525ba96af16cf74736f632baec4672dda40c441682mridge#include <sys/uio.h> 535ba96af16cf74736f632baec4672dda40c441682mridge#include <netinet/sctp.h> 545ba96af16cf74736f632baec4672dda40c441682mridge#include <sctputil.h> 555ba96af16cf74736f632baec4672dda40c441682mridge 565ba96af16cf74736f632baec4672dda40c441682mridgechar *TCID = __FILE__; 575ba96af16cf74736f632baec4672dda40c441682mridgeint TST_TOTAL = 3; 585ba96af16cf74736f632baec4672dda40c441682mridgeint TST_CNT = 0; 595ba96af16cf74736f632baec4672dda40c441682mridge 606f22494d19b605ded308dc0fa713e91cb873f44aSimon Xuint 616f22494d19b605ded308dc0fa713e91cb873f44aSimon Xumain(void) 625ba96af16cf74736f632baec4672dda40c441682mridge{ 636f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu 6464a341fc42c967890a9fb5d8855568e23104bef6mridge int sd, ret; 6564a341fc42c967890a9fb5d8855568e23104bef6mridge socklen_t len; 666f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu struct sctp_rtoinfo srtoinfo; /*setting the variables*/ 676f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu struct sctp_rtoinfo grtoinfo; /*Getting the variables*/ 685ba96af16cf74736f632baec4672dda40c441682mridge 696f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu sd = test_socket (PF_INET, SOCK_STREAM, IPPROTO_SCTP); 705ba96af16cf74736f632baec4672dda40c441682mridge 7164a341fc42c967890a9fb5d8855568e23104bef6mridge len = sizeof(struct sctp_rtoinfo); 726f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu 736f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu /*TEST1 Getting the default values using getsockopt()*/ 7464a341fc42c967890a9fb5d8855568e23104bef6mridge ret = getsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &grtoinfo, &len); 755ba96af16cf74736f632baec4672dda40c441682mridge if (ret < 0) 766f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu tst_brkm(TBROK, tst_exit, "getsockopt SCTP_RTOINFO " 775ba96af16cf74736f632baec4672dda40c441682mridge "ret:%d, errno:%d", ret, errno); 785ba96af16cf74736f632baec4672dda40c441682mridge 795ba96af16cf74736f632baec4672dda40c441682mridge tst_resm(TPASS, "getsockopt() SCTP_RTOINFO - SUCCESS"); 805ba96af16cf74736f632baec4672dda40c441682mridge 816f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu /*Assigning the values to RTO initial and max and min bounds*/ 826f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu srtoinfo.srto_initial=60; 836f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu srtoinfo.srto_max=100; 846f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu srtoinfo.srto_min=40; 855ba96af16cf74736f632baec4672dda40c441682mridge 866f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu /*TEST2 Setting the values using setsockopt()*/ 876f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu ret = setsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &srtoinfo, 886f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu sizeof(struct sctp_rtoinfo)); 895ba96af16cf74736f632baec4672dda40c441682mridge if (ret < 0) 906f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu tst_brkm(TBROK, tst_exit, "setsockopt SCTP_RTOINFO " 915ba96af16cf74736f632baec4672dda40c441682mridge "ret:%d, errno:%d", ret, errno); 925ba96af16cf74736f632baec4672dda40c441682mridge 935ba96af16cf74736f632baec4672dda40c441682mridge tst_resm(TPASS, "setsockopt() SCTP_RTOINFO - SUCCESS"); 945ba96af16cf74736f632baec4672dda40c441682mridge 956f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu /*Getting the values which are set using setsockopt()*/ 9664a341fc42c967890a9fb5d8855568e23104bef6mridge ret = getsockopt(sd, IPPROTO_SCTP, SCTP_RTOINFO, &grtoinfo, &len); 975ba96af16cf74736f632baec4672dda40c441682mridge if (ret < 0) 986f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu tst_brkm(TBROK, tst_exit, "getsockopt SCTP_RTOINFO " 995ba96af16cf74736f632baec4672dda40c441682mridge "ret:%d, errno:%d", ret, errno); 1005ba96af16cf74736f632baec4672dda40c441682mridge 1016f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu /* TEST3 Compare the get values with the set values. */ 1025ba96af16cf74736f632baec4672dda40c441682mridge if (srtoinfo.srto_initial != grtoinfo.srto_initial && 1036f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu srtoinfo.srto_max != grtoinfo.srto_max && 1046f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu srtoinfo.srto_min != grtoinfo.srto_min) 1056f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu tst_brkm(TBROK, tst_exit, "setsockopt/getsockopt SCTP_RTOINFO " 1065ba96af16cf74736f632baec4672dda40c441682mridge "compare failed"); 1075ba96af16cf74736f632baec4672dda40c441682mridge 1085ba96af16cf74736f632baec4672dda40c441682mridge tst_resm(TPASS, "setsockopt()/getsockopt SCTP_RTOINFO compare - " 1095ba96af16cf74736f632baec4672dda40c441682mridge "SUCCESS"); 1105ba96af16cf74736f632baec4672dda40c441682mridge 1115ba96af16cf74736f632baec4672dda40c441682mridge close(sd); 1125ba96af16cf74736f632baec4672dda40c441682mridge 1136f22494d19b605ded308dc0fa713e91cb873f44aSimon Xu return 0; 114ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 115