rdma_resolve_addr
unknown
c_cpp
3 years ago
1.4 kB
33
Indexable
//$ gcc b2b_resolve_addr.c -o resolve_addr -libverbs -lrdmacm
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <rdma/rdma_cma.h>
int set_sockaddr(const char* ip_str, uint16_t port, struct sockaddr* saddr)
{
struct sockaddr_in* sa_in = (struct sockaddr_in*)saddr;
if (inet_pton(AF_INET, ip_str, &sa_in->sin_addr) == 1) {
sa_in->sin_family = AF_INET;
sa_in->sin_port = htons(port);
return 0;
}
struct sockaddr_in6* sa_in6 = (struct sockaddr_in6*)saddr;
if (inet_pton(AF_INET6, ip_str, &sa_in6->sin6_addr) == 1) {
sa_in6->sin6_family = AF_INET6;
sa_in6->sin6_port = htons(port);
return 0;
}
return 0;
}
int main(void)
{
const char* client_active_bind = "192.168.30.2";
const char* server_passive_bind = "192.168.30.4";
struct rdma_cm_id *id;
struct sockaddr_storage dst_addr, src_addr;
set_sockaddr(client_active_bind, 0, (struct sockaddr*)&src_addr);
set_sockaddr(server_passive_bind, 8976, (struct sockaddr*)&dst_addr);
rdma_create_id(NULL, &id, NULL, RDMA_PS_TCP);
int ret = rdma_resolve_addr(id, (struct sockaddr*)(&src_addr), (struct sockaddr*)(&dst_addr), 2000);
printf("%d\n", ret);
printf("%s\n", ibv_get_device_name(id->verbs->device));
return 0;
}Editor is loading...