+static int lustre_lnet_kfi_intf2nid(struct lnet_dlc_intf_descr *intf,
+ __u32 *nid_addr)
+{
+ unsigned int nic_index;
+ int rc;
+ char *nic_addr_path;
+ char val[128];
+ int size;
+ long int addr;
+
+ rc = sscanf(intf->intf_name, "cxi%u", &nic_index);
+ if (rc != 1)
+ return LUSTRE_CFG_RC_NO_MATCH;
+
+ size = snprintf(NULL, 0, cxi_nic_addr_path, nic_index) + 1;
+ nic_addr_path = malloc(size);
+ if (!nic_addr_path)
+ return LUSTRE_CFG_RC_OUT_OF_MEM;
+ sprintf(nic_addr_path, cxi_nic_addr_path, nic_index);
+
+ rc = read_sysfs_file(nic_addr_path, "nic_addr", val, 1, sizeof(val));
+ free(nic_addr_path);
+ if (rc)
+ return LUSTRE_CFG_RC_NO_MATCH;
+
+ addr = strtol(val, NULL, 16);
+ if (addr == LONG_MIN || addr == LONG_MAX)
+ return LUSTRE_CFG_RC_NO_MATCH;
+
+ *nid_addr = addr;
+
+ return LUSTRE_CFG_RC_NO_ERR;
+}
+