Exemplo n.º 1
0
void do_getpeer_enosys(void)
{
	int ret = 0, i;
	struct gnix_fid_pep *gnix_pep;
	struct fid_ep *ep_fid = NULL;

	for (i = 0; i < NUMEPS; i++) {
		switch (ep_type) {
		case EP:
			ep_fid = get_fid_ep(i, NULL, NULL, NULL);
			ret = fi_getpeer(ep_fid, NULL, NULL);
			break;
		case SEP:
			ep_fid = get_fid_ep(i, NULL, NULL, NULL);
			ret = fi_getpeer(ep_fid, NULL, NULL);
			break;
		case PEP:
			gnix_pep = container_of(get_fid[ep_type](i),
						struct gnix_fid_pep,
						pep_fid.fid);
			ret = gnix_pep->pep_fid.cm->getpeer(NULL, NULL,
							    NULL);
			break;
		default:
			cr_assert_fail("Unknown endpoint type.");
		}

		cr_assert_eq(ret, -FI_ENOSYS, "Invalid return value: %s",
			     fi_strerror(-ret));
	}
}
Exemplo n.º 2
0
void do_send_recv(void)
{
	int len, i, j;

	switch (ep_type) {
	case EP:
		for (len = 2; len <= BUF_SZ; len *= 2) {
			do_ep_send_recv_iter(len);
		}
		break;

	case SEP:
		for (j = 0; j < ctx_cnt; j++) {
			for (len = 2; len <= BUF_SZ; len *= 2) {
				do_sep_send_recv_iter(j, len);
			}

			for (i = 0; i < NUMEPS; i++) {
				fi_cntr_set(send_cntr[i], 0);
				fi_cntr_set(recv_cntr[i], 0);
			}
		}
		break;
	case PEP:
		break;

	default:
		cr_assert_fail("Invalid endpoint type.");
	}
}
Exemplo n.º 3
0
int client_echo(int sockfd, void *args)
{
    int rc;
    int size = *((int *) args);

    uint8_t *buf = generate_msg(size);
    uint8_t *recv_buf = calloc(size, 1);

    rc = chitcp_socket_send(sockfd, buf, size);
    cr_assert(rc == size,
              "Client socket did not send all the bytes (expected %i, got %i)", size, rc);

    rc = chitcp_socket_recv(sockfd, recv_buf, size);
    cr_assert(rc == size,
              "Client socket did not receive all the bytes (expected %i, got %i)", size, rc);

    for (int i = 0; i < size; i++)
        if(buf[i] != recv_buf[i])
            cr_assert_fail("Client received unexpected value: recv_buf[%i] == %i (expected %i)",
                           i, recv_buf[i], buf[i]);

    free(buf);
    free(recv_buf);

    return 0;
}
Exemplo n.º 4
0
struct fid_ep *get_fid_ep(int i, void **info, void **dest_addr,
			  void **src_addr)
{
	struct gnix_fid_ep *ep = NULL;
	struct gnix_fid_sep *sep = NULL;
	struct gnix_fid_pep *pep = NULL;

	switch (ep_type) {
	case EP:
		ep = container_of(get_fid[ep_type](i),
				  struct gnix_fid_ep,
				  ep_fid.fid);
		if (info)
			*info = (void *) ep->info;
		if (dest_addr)
			*dest_addr = (void *) &ep->dest_addr;
		if (src_addr)
			*src_addr = (void *) &ep->src_addr;

		return &ep->ep_fid;
	case SEP:
		sep = container_of(get_fid[ep_type](i),
				   struct gnix_fid_sep,
				   ep_fid);
		if (info)
			*info = (void *) sep->info;
		if (dest_addr) {
			if (!sep->info->dest_addr) {
				sep->info->dest_addr = malloc
					(sep->info->dest_addrlen);
				cr_assert(sep->info->dest_addr, "malloc "
					"failed");
			}
			*dest_addr = sep->info->dest_addr;
		}
		if (src_addr)
			*src_addr = (void *) &sep->my_name;

		return &sep->ep_fid;
	case PEP:
		pep = container_of(get_fid[ep_type](i),
				   struct gnix_fid_pep,
				   pep_fid.fid);
		if (info)
			*info = (void *) pep->info;
		if (dest_addr)
			*dest_addr = pep->info->dest_addr;
		if (src_addr)
			*src_addr = (void *) &pep->src_addr;
		break;
	default:
		cr_assert_fail("Unknown endpoint type.");
	}

	return NULL;
}
Exemplo n.º 5
0
static enum chitcpd_debug_response check_vars(int sockfd, enum chitcpd_debug_event event_flag, debug_socket_state_t *state_info, debug_socket_state_t *saved_state_info, int new_sockfd)
{
    if (event_flag == DBG_EVT_PENDING_CONNECTION)
    {
        return DBG_RESP_ACCEPT_MONITOR;
    }

    if (event_flag == DBG_EVT_TCP_STATE_CHANGE)
    {
        tcp_state_t curs = state_info->tcp_state;
        cr_assert(IS_VALID_TCP_STATE(curs), "Unknown TCP state.");

        if(!saved_state_info)
        {
            cr_assert(curs == SYN_SENT || curs == SYN_RCVD,
                      "%s is not a valid initial state", tcp_str(curs));
            cr_assert(state_info->SND_UNA + 1 == state_info->SND_NXT,
                      "In state %s, SND.UNA + 1 != SND.NXT (got SND.UNA=%i, SND.NXT=%i",
                      tcp_str(curs), state_info->SND_UNA, state_info->SND_NXT);
        }
        else
        {
            cr_assert(IS_VALID_TCP_STATE(saved_state_info->tcp_state), "Unknown (previous) TCP state.");
            tcp_state_t prevs = saved_state_info->tcp_state;

            if ( (prevs == SYN_SENT && curs != ESTABLISHED) ||
                    (prevs == SYN_RCVD && curs != ESTABLISHED)  )
                cr_assert_fail("Invalid transition: %s -> %s", tcp_str(prevs), tcp_str(curs));

            if (prevs == SYN_SENT || prevs == SYN_RCVD)
                cr_assert(state_info->SND_UNA  == state_info->SND_NXT,
                          "In state %s, SND.UNA != SND.NXT (got SND.UNA=%i, SND.NXT=%i",
                          tcp_str(curs), state_info->SND_UNA, state_info->SND_NXT);
        }

        chitcpd_debug_save_socket_state(state_info);


        if (curs == ESTABLISHED)
            return DBG_RESP_STOP;
        else
            return DBG_RESP_NONE;
    }

    return DBG_RESP_NONE;
}
Exemplo n.º 6
0
int receiver(int sockfd, void *args)
{
    int rc;
    int size = *((int *) args);
    uint8_t buf[size];

    rc = chitcp_socket_recv(sockfd, buf, size);

    cr_assert(rc == size,
              "Socket did not receive all the bytes (expected %i, got %i)", size, rc);

    for (int i = 0; i < size; i++)
        if(buf[i] != (i % 256))
            cr_assert_fail("Unexpected value encountered: buf[%i] == %i (expected %i)",
                           i, buf[i], (i % 256));

    return 0;
}
Exemplo n.º 7
0
int server_echo(int sockfd, void *args)
{
    int rc;
    int size = *((int *) args);
    uint8_t buf[size];

    rc = chitcp_socket_recv(sockfd, buf, size);
    cr_assert(rc == size,
              "Server socket did not receive all the bytes (expected %i, got %i)", size, rc);

    for (int i = 0; i < size; i++)
        if(buf[i] != (i % 256))
            cr_assert_fail("Server received unexpected value: buf[%i] == %i (expected %i)",
                           i, buf[i], (i % 256));

    rc = chitcp_socket_send(sockfd, buf, size);
    cr_assert(rc == size,
              "Client socket did not send all the bytes (expected %i, got %i)", size, rc);

    return 0;
}
Exemplo n.º 8
0
static void fas_teardown_common(void)
{
	int ret = 0, i = 0, j;

	for (; i < NUMEPS; i++) {
		if (ep_type == SEP || ep_type == EP) {
			ret = fi_close(&recv_cntr[i]->fid);
			cr_assert(!ret, "failure in closing recv cntr.");

			ret = fi_close(&send_cntr[i]->fid);
			cr_assert(!ret, "failure in closing send cntr.");
		}

		switch (ep_type) {
		case EP:
			ret = fi_close(&msg_cq[i]->fid);
			cr_assert(!ret, "failure in closing msg cq.");
			break;
		case SEP:
			for (j = 0; j < ctx_cnt; j++) {
				ret = fi_close(&tx_ep[i][j]->fid);
				cr_assert(!ret,
					  "failure closing tx_ep.");

				ret = fi_close(&rx_ep[i][j]->fid);
				cr_assert(!ret,
					  "failure closing rx_ep.");

				ret = fi_close(&tx_cq[i][j]->fid);
				cr_assert(!ret,
					  "failure closing tx cq.");

				ret = fi_close(&rx_cq[i][j]->fid);
				cr_assert(!ret,
					  "failure closing rx cq.");
			}
			break;
		case PEP:
			ret = fi_close(get_fid[ep_type](i));
			cr_assert(!ret, "failure in closing ep.");
			continue;
			break;
		default:
			cr_assert_fail("Unknown endpoint type.");
			break;
		}

		ret = fi_close(get_fid[ep_type](i));
		cr_assert(!ret, "failure in closing ep.");

		ret = fi_close(&av[i]->fid);
		cr_assert(!ret, "failure in closing av.");

		ret = fi_close(&dom[i]->fid);
		cr_assert(!ret, "failure in closing domain.");

		free(ep_name[i]);
		free(target[i]);
		free(source[i]);
		free(tx_cq[i]);
		free(tx_ep[i]);
		free(rx_cq[i]);
		free(rx_ep[i]);

		fi_freeinfo(fi[i]);
	}

	ret = fi_close(&fab->fid);
	cr_assert(!ret, "failure in closing fabric.");

	fi_freeinfo(hints);
}
Exemplo n.º 9
0
static void fas_ep_setup(void)
{
	int ret, i, j;
	size_t addrlen = 0;

	fas_setup_common(fi_version());
	ctx_cnt = MIN(ctx_cnt, fi[0]->domain_attr->rx_ctx_cnt);
	ctx_cnt = MIN(ctx_cnt, fi[0]->domain_attr->tx_ctx_cnt);

	for (i = 0; i < NUMEPS; i++) {
		fi[i]->ep_attr->tx_ctx_cnt = ctx_cnt;
		fi[i]->ep_attr->rx_ctx_cnt = ctx_cnt;

		ret = fi_domain(fab, fi[i], dom + i, NULL);
		cr_assert(!ret, "fi_domain returned: %s", fi_strerror(-ret));

		ret = fi_cntr_open(dom[i], &cntr_attr, send_cntr + i, 0);
		cr_assert(!ret, "fi_cntr_open returned: %s", fi_strerror(-ret));

		ret = fi_cntr_open(dom[i], &cntr_attr, recv_cntr + i, 0);
		cr_assert(!ret, "fi_cntr_open returned: %s", fi_strerror(-ret));

		switch (ep_type) {
		case EP:
			ret = fi_endpoint(dom[i], fi[i], ep + i, NULL);
			cr_assert(!ret, "fi_endpoint returned: %s",
				  fi_strerror(-ret));
			break;
		case SEP:
			ret = fi_scalable_ep(dom[i], fi[i], ep + i,
					     NULL);
			cr_assert(!ret, "fi_endpoint returned: %s",
				  fi_strerror(-ret));
			break;
		case PEP:
			ret = fi_passive_ep(fab, fi[i], pep + i,
					    NULL);
			cr_assert(!ret, "fi_endpoint returned: %s",
				  fi_strerror(-ret));
			ret = fi_getname(get_fid[ep_type](i), NULL,
					 &addrlen);
			if (use_str_fmt) {
				cr_assert(addrlen == GNIX_FI_ADDR_STR_LEN,
					  "fi_getname returned: %s",
					  fi_strerror(-ret));
			} else {
				cr_assert(addrlen ==
					  sizeof(struct gnix_ep_name),
					  "fi_getname returned: %s",
					  fi_strerror(-ret));
			}
			ep_name_len[i] = addrlen;
			continue;
		default:
			cr_assert_fail("Unknown endpoint type.");
		}

		ret = fi_av_open(dom[i], &attr, av + i, NULL);
		cr_assert(!ret, "fi_av_open returned: %s", fi_strerror(-ret));

		switch (ep_type) {
		case EP:
		case PEP:
			ret = fi_cq_open(dom[i], &cq_attr, msg_cq + i,
					 0);
			cr_assert(!ret, "fi_cq_open returned: %s",
				  fi_strerror(-ret));

			ret = fi_ep_bind(ep[i], &msg_cq[i]->fid,
					 FI_SEND | FI_RECV);
			cr_assert(!ret, "fi_ep_bind returned: %s",
				  fi_strerror(-ret));
			break;
		case SEP:
			dbg_printf(BLUE
					   "ctx_cnt = %d\n"
					   COLOR_RESET,
				   ctx_cnt);

			for (j = 0; j < ctx_cnt; j++) {
				ret = fi_tx_context(ep[i], j, NULL,
						    &tx_ep[i][j], NULL);
				cr_assert(!ret,
					  "fi_tx_context  returned: %s",
					  fi_strerror(-ret));

				ret = fi_cq_open(dom[i], &cq_attr,
						 &tx_cq[i][j],
						 NULL);
				cr_assert(!ret,
					  "fi_cq_open  returned: %s",
					  fi_strerror(-ret));

				ret = fi_rx_context(ep[i], j, NULL,
						    &rx_ep[i][j], NULL);
				cr_assert(!ret,
					  "fi_rx_context  returned: %s",
					  fi_strerror(-ret));

				ret = fi_cq_open(dom[i], &cq_attr,
						 &rx_cq[i][j],
						 NULL);
				cr_assert(!ret,
					  "fi_cq_open  returned: %s",
					  fi_strerror(-ret));
			}
			break;
		default:
			cr_assert_fail("Unknown endpoint type.");
		}

		ret = fi_getname(get_fid[ep_type](i), NULL, &addrlen);
		if (use_str_fmt) {
			cr_assert(addrlen > sizeof(struct gnix_ep_name),
				  "fi_getname returned: %s",
				  fi_strerror(-ret));
		} else {
			cr_assert(addrlen == sizeof(struct gnix_ep_name),
				  "fi_getname returned: %s",
				  fi_strerror(-ret));
		}

		ep_name[i] = malloc(addrlen);
		ep_name_len[i] = addrlen;

		dbg_printf(BLUE
				   "ep_name_len[%d] = %lu\n"
				   COLOR_RESET, i,
			   ep_name_len[i]);
		cr_assert(ep_name[i] != NULL, "malloc returned: %s",
			  strerror(errno));

		ret = fi_getname(get_fid[ep_type](i), ep_name[i], &addrlen);
		cr_assert(ret == FI_SUCCESS, "fi_getname returned: %s",
			  fi_strerror(-ret));
	}

	/* Just testing setname / getname for passive endpoints */
	if (ep_type == PEP)
		return;

	for (i = 0; i < NUMEPS; i++) {
		/*Insert all gni addresses into each av*/
		for (j = 0; j < NUMEPS; j++) {
			ret = fi_av_insert(av[i], ep_name[j], 1, &gni_addr[j],
					   0, NULL);
			cr_assert(ret == 1, "fi_av_insert returned: %s",
				  fi_strerror(-ret));
		}

		switch (ep_type) {
		case EP:
			ret = fi_ep_bind(ep[i], &av[i]->fid, 0);
			cr_assert(!ret, "fi_ep_bind returned: %s",
				  fi_strerror(-ret));

			ret = fi_ep_bind(ep[i], &send_cntr[i]->fid,
					 FI_SEND);
			cr_assert(!ret, "fi_ep_bind returned: %s",
				  fi_strerror(-ret));

			ret = fi_ep_bind(ep[i], &recv_cntr[i]->fid,
					 FI_RECV);
			cr_assert(!ret, "fi_ep_bind returned: %s",
				  fi_strerror(-ret));
			break;
		case SEP:
			ret = fi_scalable_ep_bind(ep[i], &av[i]->fid,
						  0);
			cr_assert(!ret,
				  "fi_scalable_ep_bind returned: %s",
				  fi_strerror(-ret));
			dbg_printf(BLUE
					   "ctx_cnt = %d\n"
					   COLOR_RESET,
				   ctx_cnt);
			for (j = 0; j < ctx_cnt; j++) {
				ret = fi_ep_bind(tx_ep[i][j],
						 &tx_cq[i][j]->fid,
						 FI_TRANSMIT);
				cr_assert(!ret,
					  "fi_ep_bind  returned: %s",
					  fi_strerror(-ret));

				ret = fi_ep_bind(tx_ep[i][j],
						 &send_cntr[i]->fid,
						 FI_SEND);
				cr_assert(!ret,
					  "fi_ep_bind  returned: %s",
					  fi_strerror(-ret));

				ret = fi_enable(tx_ep[i][j]);
				cr_assert(!ret,
					  "fi_enable  returned: %s",
					  fi_strerror(-ret));

				ret = fi_ep_bind(rx_ep[i][j],
						 &rx_cq[i][j]->fid,
						 FI_RECV);
				cr_assert(!ret,
					  "fi_ep_bind  returned: %s",
					  fi_strerror(-ret));

				ret = fi_ep_bind(rx_ep[i][j],
						 &recv_cntr[i]->fid,
						 FI_RECV);
				cr_assert(!ret,
					  "fi_ep_bind  returned: %s",
					  fi_strerror(-ret));

				ret = fi_enable(rx_ep[i][j]);
				cr_assert(!ret,
					  "fi_enable  returned: %s",
					  fi_strerror(-ret));

			}
			break;
		case PEP:
			break;
		default:
			cr_assert_fail("Unknown endpoint type.");
		}

		ret = fi_enable(ep[i]);
		cr_assert(!ret, "fi_ep_enable returned: %s", fi_strerror(-ret));

		if (ep_type != SEP) {
			ret = fi_enable(ep[i]);
			cr_assert_eq(ret, -FI_EOPBADSTATE,
				     "fi_enable returned: %s",
				     fi_strerror(-ret));
		}
	}
}