bd911976d51f102751848568ccf56592fd5f6d77Tinderbox User * Copyright (C) 2011-2017 Internet Systems Consortium, Inc. ("ISC")
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt * Helper functions
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunttypedef struct {
67adc03ef81fb610f8df093b17f55275ee816754Evan Huntaccept_done(isc_task_t *task, isc_event_t *event) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt isc_socket_newconnev_t *nevent = (isc_socket_newconnev_t *)event;
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((dev->attributes & ISC_SOCKEVENTATTR_DSCP) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if (isc__socketmgr_waitevents(socketmgr, &tv, &swait) > 0)
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt * Individual unit tests
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt/* Test UDP sendto/recv (IPv4) */
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt atf_tc_set_md_var(tc, "descr", "UDP sendto/recv");
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s1);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s2);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr2) != 0);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_sendto(s1, &r, task, event_done, &completion,
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt/* Test UDP sendto/recv with duplicated socket */
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt atf_tc_set_md_var(tc, "descr", "duplicated socket sendto/recv");
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s1);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s2);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr2) != 0);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_sendto(s1, &r, task, event_done, &completion,
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_sendto(s1, &r, task, event_done, &completion,
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
f07b2fccaf6be13d9440d323e9e79ee84fe345e2Evan Hunt result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt/* Test TCP sendto/recv (IPv4) */
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s1);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_bind(s1, &addr1, ISC_SOCKET_REUSEADDRESS);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_udp, &s2);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_bind(s2, &addr2, ISC_SOCKET_REUSEADDRESS);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr2) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt socketevent = isc_socket_socketevent(mctx, s1, ISC_SOCKEVENT_SENDDONE,
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPPKTV4) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt socketevent->attributes |= ISC_SOCKEVENTATTR_DSCP;
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt } else if ((isc_net_probedscp() & ISC_NET_DSCPSETV4) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt socketevent->attributes &= ~ISC_SOCKEVENTATTR_DSCP;
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPRECVV4) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt/* Test TCP sendto/recv (IPv4) */
9effea437d7973c9ed981ab2e14b219182d86ee7Curtis Blackburn#if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET6, isc_sockettype_udp,
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET6, isc_sockettype_udp,
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr2) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt socketevent = isc_socket_socketevent(mctx, s1, ISC_SOCKEVENT_SENDDONE,
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPPKTV6) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt } else if ((isc_net_probedscp() & ISC_NET_DSCPSETV6) != 0)
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPRECVV6) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt/* Test TCP sendto/recv (IPv4) */
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_tcp, &s1);
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_tcp, &s2);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_accept(s1, task, accept_done, &completion2);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_connect(s2, &addr1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_sendto(s2, &r, task, event_done, &completion,
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPRECVV4) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt/* Test TCP sendto/recv (IPv6) */
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET6, isc_sockettype_tcp,
94c7301f6f0ada7aa84ede5808ab8fdec5bae6b5Mark Andrews ATF_REQUIRE(isc_sockaddr_getport(&addr1) != 0);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_create(socketmgr, PF_INET6, isc_sockettype_tcp,
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_accept(s1, task, accept_done, &completion2);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_connect(s2, &addr1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_sendto(s2, &r, task, event_done, &completion,
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if ((isc_net_probedscp() & ISC_NET_DSCPRECVV6) != 0) {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt * IPV6_RECVTCLASS is undefined for TCP however
bcae9a15c1e9c50a6e6433168d5225b1de89d6b9Evan Hunt * if we do get it it should be the value we set.
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt atf_tc_set_md_var(tc, "descr", "probe dscp capabilities");
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt unsigned int n;
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt /* ISC_NET_DSCPSETV4 MUST be set if any is set. */
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt if (n & (ISC_NET_DSCPSETV4|ISC_NET_DSCPPKTV4|ISC_NET_DSCPRECVV4))
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt "IPv4:%s%s%s\n",
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt /* ISC_NET_DSCPSETV6 MUST be set if any is set. */
27deca2bf082e1c4ecbd14d6619cf040b07d2412Mark Andrews if (n & (ISC_NET_DSCPSETV6|ISC_NET_DSCPPKTV6|ISC_NET_DSCPRECVV6))
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt "IPv6:%s%s%s\n",