int on_event(struct rdma_cm_event *event) { int r = 0; if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) r = on_connect_request(event->id); else if (event->event == RDMA_CM_EVENT_ESTABLISHED) r = on_connection(event->id->context); else if (event->event == RDMA_CM_EVENT_DISCONNECTED) r = on_disconnect(event->id); else die("on_event: unknown event."); return r; }
int on_event(struct rdma_cm_event *event) { int r = 0; if (event->event == RDMA_CM_EVENT_ADDR_RESOLVED) r = on_addr_resolved(event->id); else if (event->event == RDMA_CM_EVENT_ROUTE_RESOLVED) r = on_route_resolved(event->id); else if (event->event == RDMA_CM_EVENT_ESTABLISHED) r = on_connection(event->id->context); else if (event->event == RDMA_CM_EVENT_DISCONNECTED) r = on_disconnect(event->id); else die("on_event: unknown event."); return r; }
//event handler int on_event(struct rdma_cm_id *id, struct rdma_cm_event *event) { int r = 0; if (event->event == RDMA_CM_EVENT_ADDR_RESOLVED) r = on_addr_resolved(id); else if (event->event == RDMA_CM_EVENT_ROUTE_RESOLVED) r = on_route_resolved(id); else if (event->event == RDMA_CM_EVENT_ESTABLISHED) r = on_connection(id); else if (event->event == RDMA_CM_EVENT_DISCONNECTED) r = on_disconnect(id); else { pr_debug("on_event: %d\n", event->event); die("on_event: unknown event."); } return r; }
void server_handler::on_readable(int fd) { if(fd != server_socket) { return; } tracer.trace0("New connection on fd %d", fd); struct sockaddr_storage their_addr; socklen_t addr_size = sizeof(their_addr); int new_fd = accept(server_socket, (sockaddr *) &their_addr, &addr_size); if(new_fd == -1) { tracer.trace1("accept() unexpectedly returned -1 "); return; } // Set the new socket to be nonblocking int flags = fcntl(new_fd, F_GETFL, 0); fcntl(new_fd, F_SETFL, flags | O_NONBLOCK); on_connection(new_fd, their_addr); }
int on_event(struct rdma_cm_event *event) { int r = 0; printf("event id: %d\n", event->event); if (event->event == RDMA_CM_EVENT_ADDR_RESOLVED) r = on_addr_resolved(event->id); else if (event->event == RDMA_CM_EVENT_ROUTE_RESOLVED) r = on_route_resolved(event->id); else if (event->event == RDMA_CM_EVENT_ESTABLISHED) r = on_connection(event->id); else if (event->event == RDMA_CM_EVENT_DISCONNECTED) r = on_disconnect(event->id); else fprintf(stderr, "unknow event id: %d\n", event->event); fprintf(stderr, "exit"); exit(1); // die("on_event: unknown event a"); return r; }
void client_test(char *ip, char *port) { struct addrinfo *addr; struct rdma_cm_event *event = NULL; struct rdma_cm_id *conn= NULL; struct rdma_event_channel *ec = NULL; TEST_NZ(getaddrinfo(ip, port, NULL, &addr)); TEST_Z(ec = rdma_create_event_channel()); TEST_NZ(rdma_create_id(ec, &conn, NULL, RDMA_PS_TCP)); TEST_NZ(rdma_resolve_addr(conn, NULL, addr->ai_addr, TIMEOUT_IN_MS)); freeaddrinfo(addr); while (rdma_get_cm_event(ec, &event) == 0) { struct rdma_cm_event event_copy; memcpy(&event_copy, event, sizeof(*event)); rdma_ack_cm_event(event); if (on_event(&event_copy)) { s_ctx->ec = ec; s_ctx->id = conn; on_connection(event_copy.id);//send our memory information to server using post_send //printf("wait for msg_send_completion\n"); poll_cq(NULL);//wait for send_completion //printf("wait for msg_recv_completion\n"); poll_cq(NULL);//wait for recv_completion break; } } return; };
void client_test(char *ip, char *port) { struct addrinfo *addr; struct rdma_cm_event *event = NULL; struct rdma_cm_id *conn= NULL; struct rdma_event_channel *ec = NULL; struct timeval t1, t2, t3, t11, t12; struct timeval dt, dt1, dt2, dt11, dt12, dt13; gettimeofday(&t1, NULL); TEST_NZ(getaddrinfo(ip, port, NULL, &addr)); TEST_Z(ec = rdma_create_event_channel()); gettimeofday(&t11, NULL); TEST_NZ(rdma_create_id(ec, &conn, NULL, RDMA_PS_TCP)); gettimeofday(&t12, NULL); TEST_NZ(rdma_resolve_addr(conn, NULL, addr->ai_addr, TIMEOUT_IN_MS)); freeaddrinfo(addr); gettimeofday(&t2, NULL); while (rdma_get_cm_event(ec, &event) == 0) { struct rdma_cm_event event_copy; memcpy(&event_copy, event, sizeof(*event)); rdma_ack_cm_event(event); if (on_event(&event_copy)) { s_ctx->ec = ec; s_ctx->id = conn; on_connection(event_copy.id);//send our memory information to server using post_send poll_cq(NULL);//wait for send_completion poll_cq(NULL);//wait for recv_completion break; } } gettimeofday(&t3, NULL); timersub(&t3, &t1, &dt); timersub(&t3, &t2, &dt2); timersub(&t2, &t1, &dt1); timersub(&t2, &t12, &dt13); timersub(&t12, &t11, &dt12); timersub(&t11, &t1, &dt11); long usec = dt.tv_usec + 10000 * dt.tv_sec; printf("[dt]:\t%ld us.\n", usec); printf("[dt1]:\t%ld us.\n", dt1.tv_usec+1000000 *dt1.tv_sec); printf("Including the following steps: \n"); printf("[dt11]:\t%ld us.\n", dt11.tv_usec+1000000 *dt11.tv_sec); printf("[dt12]:\t%ld us.\n", dt12.tv_usec+1000000 *dt12.tv_sec); printf("[dt13]:\t%ld us.\n", dt13.tv_usec+1000000 *dt13.tv_sec); printf("[dt2] takes %ld micro_secs.\n", dt2.tv_usec+1000000*dt2.tv_sec); printf("[dt]:total time\t[dt1]:pre_setup\t[dt2]:send/recv\t.\n"); printf("[dt11]:create_event_channel\t[dt12]:create_id\t[dt13]:resolve_address.\n"); return; };