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

📄 test_sockopt.c

📁 SCTP 协议实现源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	test_setsockopt(udp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&set_udp_sk_dflt_param, sizeof(set_udp_sk_dflt_param));	memset(&set_udp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_udp_sk_dflt_param.sinfo_ppid = 1000;	test_setsockopt(udp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&set_udp_sk_dflt_param, sizeof(set_udp_sk_dflt_param));	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style socket");	/* Get default send parameters on the unconnected UDP-style socket. */	memset(&get_udp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_udp_sk_dflt_param);	test_getsockopt(udp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&get_udp_sk_dflt_param, &optlen);	/* Verify that the get param matches set param. */	if (set_udp_sk_dflt_param.sinfo_ppid !=			get_udp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	/* Get default send parameters on the unconnected UDP-style socket. */	memset(&get_udp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_udp_sk_dflt_param);	test_getsockopt(udp_clt_sk, SCTP_DEFAULT_SEND_PARAM,		       &get_udp_sk_dflt_param, &optlen);	/* Verify that the get param matches set param. */	if (set_udp_sk_dflt_param.sinfo_ppid !=			get_udp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style socket");	/* Verify that trying to set send params with an invalid assoc id	 * on an UDP-style socket fails.	 */	memset(&set_udp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_udp_sk_dflt_param.sinfo_ppid = 1000;       	/* Invalid assoc id */	set_udp_sk_dflt_param.sinfo_assoc_id = 1234;        error = setsockopt(udp_clt_sk, SOL_SCTP, SCTP_DEFAULT_SEND_PARAM,			   &set_udp_sk_dflt_param,			   sizeof(set_udp_sk_dflt_param));	if ((-1 != error) || (EINVAL != errno))		tst_brkm(TBROK, tst_exit, "setsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "invalid associd error:%d, errno:%d\n",			 error, errno);	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) "		 "- one-to-many style invalid associd");	/* Do a connect on a UDP-style socket and establish an association. */	test_connect(udp_clt_sk, &udp_svr_loop.sa, sizeof(udp_svr_loop));	/* Receive the COMM_UP notifications and get the associd's */	inmessage.msg_controllen = sizeof(incmsg);	error = test_recvmsg(udp_svr_sk, &inmessage, MSG_WAITALL);	test_check_msg_notification(&inmessage, error,				    sizeof(struct sctp_assoc_change),				    SCTP_ASSOC_CHANGE, SCTP_COMM_UP);		sac = (struct sctp_assoc_change *)iov.iov_base;	udp_svr_associd = sac->sac_assoc_id;	inmessage.msg_controllen = sizeof(incmsg);	error = test_recvmsg(udp_clt_sk, &inmessage, MSG_WAITALL);	test_check_msg_notification(&inmessage, error,				    sizeof(struct sctp_assoc_change),				    SCTP_ASSOC_CHANGE, SCTP_COMM_UP);		sac = (struct sctp_assoc_change *)iov.iov_base;	udp_clt_associd = sac->sac_assoc_id;	/* Verify that trying to set send params with an assoc id not 	 * belonging to the socket on an UDP-style socket fails.	 */	memset(&set_udp_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_udp_assoc_dflt_param.sinfo_ppid = 3000;	set_udp_assoc_dflt_param.sinfo_assoc_id = udp_clt_associd;	error = setsockopt(udp_svr_sk, SOL_SCTP, SCTP_DEFAULT_SEND_PARAM,			   &set_udp_assoc_dflt_param,			   sizeof(set_udp_assoc_dflt_param));	if ((-1 != error) || (EINVAL != errno))		tst_brkm(TBROK, tst_exit, "setsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "associd belonging to another socket "			 "error:%d, errno:%d", error, errno);	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style associd belonging to another socket");	/* Set default send parameters of an association on the listening 	 * UDP-style socket with a valid associd.	 */ 	memset(&set_udp_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_udp_assoc_dflt_param.sinfo_ppid = 3000;	set_udp_assoc_dflt_param.sinfo_assoc_id = udp_svr_associd;	test_setsockopt(udp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&set_udp_assoc_dflt_param,			sizeof(set_udp_assoc_dflt_param));	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style valid associd");	/* Get default send parameters of an association on the listening 	 * UDP-style socket with a valid associd.	 */ 	memset(&get_udp_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	get_udp_assoc_dflt_param.sinfo_assoc_id = udp_svr_associd ;	optlen = sizeof(get_udp_assoc_dflt_param);	test_getsockopt(udp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&get_udp_assoc_dflt_param, &optlen);	/* Verify that the get param matches the set param. */	if (get_udp_assoc_dflt_param.sinfo_ppid !=			set_udp_assoc_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style valid associd");	/* Get default send parameters of an association on the connected 	 * UDP-style socket with zero associd. This should return the	 * socket wide default parameters.	 */ 	memset(&get_udp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	get_udp_sk_dflt_param.sinfo_assoc_id = 0 ;	optlen = sizeof(get_udp_sk_dflt_param);	test_getsockopt(udp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&get_udp_sk_dflt_param, &optlen);	/* Verify that the get param matches the socket-wide set param. */	if (get_udp_sk_dflt_param.sinfo_ppid !=			set_udp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style zero associd");	peeloff_sk = test_sctp_peeloff(udp_svr_sk, udp_svr_associd); 	/* Get default send parameters of an association on the peeled off 	 * UDP-style socket. This should return the association's default	 * parameters.	 */ 	memset(&get_peeloff_assoc_dflt_param, 0,	       sizeof(struct sctp_sndrcvinfo));	get_peeloff_assoc_dflt_param.sinfo_assoc_id = 0 ;	optlen = sizeof(get_peeloff_assoc_dflt_param);	test_getsockopt(peeloff_sk, SCTP_DEFAULT_SEND_PARAM,			&get_peeloff_assoc_dflt_param, &optlen);	/* Verify that the get param matches the association's set param. */	if (get_peeloff_assoc_dflt_param.sinfo_ppid !=			set_udp_assoc_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-many style peeled off socket");	/* Set default send parameters on the unconnected TCP-style sockets. */	memset(&set_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_tcp_sk_dflt_param.sinfo_ppid = 2000;	/* Invalid assoc id, ignored on a TCP-style socket. */	set_tcp_sk_dflt_param.sinfo_assoc_id = 1234;	test_setsockopt(tcp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&set_tcp_sk_dflt_param,			sizeof(set_tcp_sk_dflt_param));	/* Set default send parameters on the unconnected TCP-style sockets. */	memset(&set_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_tcp_sk_dflt_param.sinfo_ppid = 2000;	/* Invalid assoc id, ignored on a TCP-style socket. */	set_tcp_sk_dflt_param.sinfo_assoc_id = 1234;	test_setsockopt(tcp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&set_tcp_sk_dflt_param,			sizeof(set_tcp_sk_dflt_param));	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-one style socket");	/* Get default send parameters on the unconnected TCP-style socket. */	memset(&get_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_tcp_sk_dflt_param);	test_getsockopt(tcp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&get_tcp_sk_dflt_param, &optlen);	/* Verify that the get param matches set param. */	if (set_tcp_sk_dflt_param.sinfo_ppid !=			get_tcp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	/* Get default send parameters on the unconnected TCP-style socket. */	memset(&get_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_tcp_sk_dflt_param);	test_getsockopt(tcp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&get_tcp_sk_dflt_param, &optlen);	/* Verify that the get param matches set param. */	if (set_tcp_sk_dflt_param.sinfo_ppid !=			get_tcp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-one style socket");	/* Do a connect on a TCP-style socket and establish an association. */	test_connect(tcp_clt_sk, &tcp_svr_loop.sa, sizeof(tcp_svr_loop));	/* Set default send parameters of an association on the connected 	 * TCP-style socket.	 */ 	memset(&set_tcp_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	set_tcp_assoc_dflt_param.sinfo_ppid = 4000;	set_tcp_assoc_dflt_param.sinfo_assoc_id = 0;	test_setsockopt(tcp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&set_tcp_assoc_dflt_param,			sizeof(set_tcp_assoc_dflt_param));	tst_resm(TPASS, "setsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-one style assoc");	/* Get default send parameters of an association on the connected 	 * TCP-style socket.	 */ 	memset(&get_tcp_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_tcp_assoc_dflt_param);	test_getsockopt(tcp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&get_tcp_assoc_dflt_param, &optlen);	if (set_tcp_assoc_dflt_param.sinfo_ppid !=			get_tcp_assoc_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	/* Get default send parameters on the connected TCP-style socket.  */ 	memset(&get_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_tcp_sk_dflt_param);	test_getsockopt(tcp_clt_sk, SCTP_DEFAULT_SEND_PARAM,			&get_tcp_sk_dflt_param, &optlen);	/* Verify that the get parameters returned matches the set param	 * set for the association, not the socket-wide param.	 */ 	if ((get_tcp_sk_dflt_param.sinfo_ppid ==			set_tcp_sk_dflt_param.sinfo_ppid) ||	    (get_tcp_sk_dflt_param.sinfo_ppid !=	    		set_tcp_assoc_dflt_param.sinfo_ppid))		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	/* Get default send parameters on the listening TCP-style socket.  */ 	memset(&get_tcp_sk_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_tcp_sk_dflt_param);	test_getsockopt(tcp_svr_sk, SCTP_DEFAULT_SEND_PARAM,			&get_tcp_sk_dflt_param, &optlen);	/* Verify that the get parameters returned matches the socket-wide 	 * set param.	 */	if (get_tcp_sk_dflt_param.sinfo_ppid !=			set_tcp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-one style assoc");	accept_sk = test_accept(tcp_svr_sk, NULL, &addrlen); 	/* Get default send parameters of an association on the accepted 	 * TCP-style socket.	 */ 	memset(&get_accept_assoc_dflt_param, 0, sizeof(struct sctp_sndrcvinfo));	optlen = sizeof(get_accept_assoc_dflt_param);	test_getsockopt(accept_sk, SCTP_DEFAULT_SEND_PARAM,			&get_accept_assoc_dflt_param, &optlen);	error = 0;	/* Verify that the get parameters returned matches the socket-wide 	 * set param.	 */	if (get_tcp_sk_dflt_param.sinfo_ppid !=			set_tcp_sk_dflt_param.sinfo_ppid)		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_DEFAULT_SEND_PARAM) "			 "mismatch.");	tst_resm(TPASS, "getsockopt(SCTP_DEFAULT_SEND_PARAM) - "		 "one-to-one style accepted socket");	/* TEST #7: SCTP_GET_PEER_ADDR_INFO socket option. */	/* Try 0 associd and 0 addr */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	error = getsockopt(udp_clt_sk, SOL_SCTP, SCTP_GET_PEER_ADDR_INFO,			   &pinfo, &optlen);			   	if ((-1 != error) || (EINVAL != errno))		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_GET_PEER_ADDR_INFO) "			 "null associd, null addr error:%d, errno:%d\n",			error, errno);	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "null associd and null addr");	/* Try valid associd, but 0 addr */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	pinfo.spinfo_assoc_id = udp_clt_associd;	error = getsockopt(udp_clt_sk, SOL_SCTP, SCTP_GET_PEER_ADDR_INFO,			   &pinfo, &optlen);			   	if ((-1 != error) || (EINVAL != errno))		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_GET_PEER_ADDR_INFO) "			 "valid associd, null addr error:%d, errno:%d\n",			error, errno);	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "valid associd and null addr");	/* Try valid associd, invalid addr */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	pinfo.spinfo_assoc_id = udp_clt_associd;	memcpy(&pinfo.spinfo_address, &udp_clt_loop, sizeof(udp_clt_loop));	error = getsockopt(udp_clt_sk, SOL_SCTP, SCTP_GET_PEER_ADDR_INFO,			   &pinfo, &optlen);			   	if ((-1 != error) || (EINVAL != errno))		tst_brkm(TBROK, tst_exit, "getsockopt(SCTP_GET_PEER_ADDR_INFO) "			 "valid associd, invalid addr error:%d, errno:%d\n",			error, errno);	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "valid associd and invalid addr");	/* Try valid associd, valid addr */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	pinfo.spinfo_assoc_id = udp_clt_associd;	memcpy(&pinfo.spinfo_address, &udp_svr_loop, sizeof(udp_svr_loop));	test_getsockopt(udp_clt_sk, SCTP_GET_PEER_ADDR_INFO, &pinfo, &optlen);			   	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "valid associd and valid addr");	/* Try valid addr, peeled off socket */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	pinfo.spinfo_assoc_id = 0;	memcpy(&pinfo.spinfo_address, &udp_clt_loop, sizeof(udp_clt_loop));	test_getsockopt(peeloff_sk, SCTP_GET_PEER_ADDR_INFO, &pinfo, &optlen);			   	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "valid associd and valid addr peeled off socket");	/* Try valid addr, TCP-style accept socket */	memset(&pinfo, 0, sizeof(pinfo));	optlen = sizeof(pinfo);	pinfo.spinfo_assoc_id = 0;	memcpy(&pinfo.spinfo_address, &tcp_clt_loop, sizeof(tcp_clt_loop));	error = test_getsockopt(accept_sk, SCTP_GET_PEER_ADDR_INFO, &pinfo,				&optlen);			   	tst_resm(TPASS, "getsockopt(SCTP_GET_PEER_ADDR_INFO) - "		 "valid associd and valid addr accepted socket");	close(udp_svr_sk);	close(udp_clt_sk);	close(tcp_svr_sk);	close(tcp_clt_sk);	close(accept_sk);	close(peeloff_sk);        /* Indicate successful completion.  */        return 0;}

⌨️ 快捷键说明

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