⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_1_to_1_sockopt.c

📁 SCTP 协议实现源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "getsockopt SCTP_STATUS "                         "error:%d, errno:%d", error, errno);	tst_resm(TPASS, "getsockopt() SCTP_STATUS - SUCCESS");	/* Reducing the SO_RCVBUF value using setsockopt() */	/*Minimum value is 128 and hence I am using it*/	len = sizeof(int);	rcvbuf_val_set = 128;	/* TEST16: Test case for setsockopt SO_RCVBUF */	error = setsockopt(sk2, SOL_SOCKET, SO_RCVBUF, &rcvbuf_val_set, len);	if (error < 0)		tst_brkm(TBROK, tst_exit, "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, tst_exit, "getsockopt SO_RCVBUF "                         "error:%d, errno:%d", error, errno);	if ((2 * rcvbuf_val_set) != rcvbuf_val_get)		tst_brkm(TBROK, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "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, tst_exit, "setsockopt SCTP_ASSOCINFO "                         "error:%d, errno:%d", error, errno);	error = getsockopt(sk2, IPPROTO_SCTP, SCTP_ASSOCINFO, &gassocparams,			   &len);	if (error < 0)		tst_brkm(TBROK, tst_exit, "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, tst_exit, "getsockopt SCTP_ASSOCINFO value "			 "mismatch");	tst_resm(TPASS, "setsockopt() SCTP_ASSOCINFO - SUCCESS");	close(sk2);	close(sk1);	close(acpt_sk);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -