Exemplo n.º 1
0
 /// Connection manager event dispatcher. Called by the CM event loop.
 void on_cm_event(struct rdma_cm_event* event)
 {
     L_(trace) << rdma_event_str(event->event);
     switch (event->event) {
     case RDMA_CM_EVENT_ADDR_RESOLVED:
         on_addr_resolved(event->id);
         return;
     case RDMA_CM_EVENT_ADDR_ERROR:
         throw InfinibandException("rdma_resolve_addr failed");
     case RDMA_CM_EVENT_ROUTE_RESOLVED:
         on_route_resolved(event->id);
         return;
     case RDMA_CM_EVENT_ROUTE_ERROR:
         throw InfinibandException("rdma_resolve_route failed");
     case RDMA_CM_EVENT_CONNECT_ERROR:
         throw InfinibandException("could not establish connection");
     case RDMA_CM_EVENT_UNREACHABLE:
         throw InfinibandException("remote server is not reachable");
     case RDMA_CM_EVENT_REJECTED:
         on_rejected(event);
         return;
     case RDMA_CM_EVENT_ESTABLISHED:
         on_established(event);
         return;
     case RDMA_CM_EVENT_CONNECT_REQUEST:
         on_connect_request(event);
         return;
     case RDMA_CM_EVENT_DISCONNECTED:
         on_disconnected(event);
         return;
     default:
         L_(warning) << rdma_event_str(event->event);
     }
 }
Exemplo n.º 2
0
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;
}