Skip to content

Commit abf6dd9

Browse files
committed
Perftest: Fix and optimize initial communication functions.
Fix and optimize some code sections in initial communication functions. Signed-off-by: Hassan Khadour <[email protected]>
1 parent 5a218cd commit abf6dd9

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

src/perftest_communication.c

+29-19
Original file line numberDiff line numberDiff line change
@@ -908,9 +908,8 @@ int set_up_connection(struct pingpong_context *ctx,
908908
int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters *user_param)
909909
{
910910
char *service;
911-
int temp,num_of_retry= NUM_OF_RETRIES;
912-
struct sockaddr_storage source_sin;
913-
struct sockaddr *sin;
911+
int temp, num_of_retry = NUM_OF_RETRIES;
912+
struct sockaddr_storage sin, source_sin;
914913
struct sockaddr *source_ptr = NULL;
915914
struct addrinfo *res;
916915
struct rdma_cm_event *event;
@@ -931,8 +930,14 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters
931930
return FAILURE;
932931
}
933932

934-
sin = res->ai_addr;
935-
sockaddr_set_port(sin, (unsigned short)user_param->port);
933+
if (res->ai_addr->sa_family == AF_INET) {
934+
memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in));
935+
}
936+
else {
937+
memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in6));
938+
}
939+
sockaddr_set_port((struct sockaddr *)&sin, (unsigned short)user_param->port);
940+
freeaddrinfo(res);
936941

937942
if (user_param->has_source_ip) {
938943
if (check_add_port(&service, 0x0, user_param->source_ip, &hints, &res))
@@ -942,8 +947,14 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters
942947
}
943948
memset(&source_sin, 0x0, sizeof(source_sin));
944949
//coverity[deref_after_free]
945-
memcpy(&source_sin, res->ai_addr, sizeof(source_sin));
950+
if (res->ai_addr->sa_family == AF_INET) {
951+
memcpy(&source_sin, res->ai_addr, sizeof(struct sockaddr_in));
952+
}
953+
else {
954+
memcpy(&source_sin, res->ai_addr, sizeof(struct sockaddr_in6));
955+
}
946956
source_ptr = (struct sockaddr *)&source_sin;
957+
freeaddrinfo(res);
947958
}
948959
while (1)
949960
{
@@ -953,14 +964,12 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters
953964
return FAILURE;
954965
}
955966

956-
if (rdma_resolve_addr(ctx->cm_id, source_ptr, sin, 2000)) {
957-
freeaddrinfo(res);
967+
if (rdma_resolve_addr(ctx->cm_id, source_ptr, (struct sockaddr *)&sin, 2000)) {
958968
fprintf(stderr, "rdma_resolve_addr failed\n");
959969
return FAILURE;
960970
}
961971

962972
if (rdma_get_cm_event(ctx->cm_channel,&event)) {
963-
freeaddrinfo(res);
964973
fprintf(stderr, "rdma_get_cm_events failed\n");
965974
return FAILURE;
966975
}
@@ -974,7 +983,6 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters
974983

975984
if (event->event != RDMA_CM_EVENT_ADDR_RESOLVED) {
976985
fprintf(stderr, "unexpected CM event %d\n",event->event);
977-
freeaddrinfo(res);
978986
rdma_ack_cm_event(event);
979987
return FAILURE;
980988
}
@@ -983,8 +991,6 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters
983991
break;
984992
}
985993

986-
freeaddrinfo(res);
987-
988994
if (user_param->tos != DEF_TOS) {
989995

990996
if (rdma_set_option(ctx->cm_id,RDMA_OPTION_ID,RDMA_OPTION_ID_TOS,&user_param->tos,sizeof(uint8_t))) {
@@ -1132,7 +1138,7 @@ int rdma_server_connect(struct pingpong_context *ctx,
11321138
struct rdma_conn_param conn_param;
11331139
struct addrinfo hints;
11341140
char *service;
1135-
struct sockaddr *sin;
1141+
struct sockaddr_storage sin;
11361142
char* src_ip = user_param->has_source_ip ? user_param->source_ip : NULL;
11371143

11381144
memset(&hints, 0, sizeof hints);
@@ -1151,17 +1157,21 @@ int rdma_server_connect(struct pingpong_context *ctx,
11511157
return FAILURE;
11521158
}
11531159

1154-
sin = res->ai_addr;
1155-
sockaddr_set_port(sin, (unsigned short)user_param->port);
1160+
if (res->ai_addr->sa_family == AF_INET) {
1161+
memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in));
1162+
}
1163+
else {
1164+
memcpy(&sin, res->ai_addr, sizeof(struct sockaddr_in6));
1165+
}
11561166

1157-
if (rdma_bind_addr(ctx->cm_id_control, sin)) {
1158-
freeaddrinfo(res);
1167+
sockaddr_set_port((struct sockaddr *)&sin, (unsigned short)user_param->port);
1168+
freeaddrinfo(res);
1169+
1170+
if (rdma_bind_addr(ctx->cm_id_control, (struct sockaddr *)&sin)) {
11591171
fprintf(stderr," rdma_bind_addr failed\n");
11601172
return 1;
11611173
}
11621174

1163-
freeaddrinfo(res);
1164-
11651175
if (rdma_listen(ctx->cm_id_control, user_param->num_of_qps)) {
11661176
fprintf(stderr, "rdma_listen failed\n");
11671177
return 1;

0 commit comments

Comments
 (0)