/* * rpmemd_fip_getinfo -- obtain fabric interface information */ static int rpmemd_fip_getinfo(struct rpmemd_fip *fip, const char *service, const char *node, enum rpmem_provider provider) { int ret; struct fi_info *hints = rpmem_fip_get_hints(provider); if (!hints) { RPMEMD_LOG(ERR, "getting fabric interface hints"); ret = -1; goto err_fi_get_hints; } ret = fi_getinfo(RPMEM_FIVERSION, node, service, 0, hints, &fip->fi); if (ret) { RPMEMD_FI_ERR(ret, "getting fabric interface information"); goto err_fi_getinfo; } if (fip->fi->addr_format != FI_SOCKADDR_IN) { RPMEMD_LOG(ERR, "unsupported address family -- %d", fip->fi->addr_format); goto err_addr_format; } fi_freeinfo(hints); return 0; err_addr_format: fi_freeinfo(fip->fi); err_fi_getinfo: fi_freeinfo(hints); err_fi_get_hints: return ret; }
/* * rpmem_fip_getinfo -- (internal) get fabric interface information */ static int rpmem_fip_getinfo(struct rpmem_fip *fip, const char *node, const char *service, enum rpmem_provider provider) { int ret = 0; struct fi_info *hints = rpmem_fip_get_hints(provider); if (!hints) { RPMEM_LOG(ERR, "!getting fabric interface information hints"); goto err_hints; } ret = fi_getinfo(RPMEM_FIVERSION, node, service, 0, hints, &fip->fi); if (ret) { RPMEM_FI_ERR(ret, "getting fabric interface information"); goto err_fi_getinfo; } rpmem_fip_print_info(fip->fi); /* fallback to free the hints */ err_fi_getinfo: fi_freeinfo(hints); err_hints: return ret; }