static struct acm_client client[FD_SETSIZE - 1];
static FILE *flog;
+static FILE *faddr;
static lock_t log_lock;
PER_THREAD char log_data[ACM_MAX_ADDRESS];
static int acm_assign_ep_names(struct acm_ep *ep)
{
char *dev_name;
- FILE *f;
char s[120];
char dev[32], addr[32], pkey_str[8];
uint16_t pkey;
acm_log(1, "device %s, port %d, pkey 0x%x\n",
dev_name, ep->port->port_num, ep->pkey);
- if (!(f = fopen(addr_file, "r"))) {
- acm_log(0, "ERROR - unable to open acm_addr.cfg file\n");
- return ACM_STATUS_ENODATA;
- }
-
- while (fgets(s, sizeof s, f)) {
+ rewind(faddr);
+ while (fgets(s, sizeof s, faddr)) {
if (s[0] == '#')
continue;
}
}
- fclose(f);
return !index;
}
return f;
}
+static FILE *acm_open_addr_file(void)
+{
+ FILE *f;
+
+ if ((f = fopen(addr_file, "r")))
+ return f;
+
+ acm_log(0, "notice - generating acm_addr.cfg file\n");
+ if (!(f = popen("ib_acme -A", "r"))) {
+ acm_log(0, "ERROR - cannot generate acm_addr.cfg\n");
+ return NULL;
+ }
+ pclose(f);
+ return fopen(addr_file, "r");
+}
+
static int acm_open_lock_file(void)
{
int lock_fd;
DListInit(&timeout_list);
event_init(&timeout_event);
+ if (!(faddr = acm_open_addr_file())) {
+ acm_log(0, "ERROR - address file not found\n");
+ return -1;
+ }
+
umad_init();
ibdev = ibv_get_device_list(&dev_cnt);
if (!ibdev) {
acm_open_dev(ibdev[i]);
ibv_free_device_list(ibdev);
+ if (DListEmpty(&dev_list)) {
+ acm_log(0, "ERROR - no active devices\n");
+ return -1;
+ }
+ fclose(faddr);
acm_log(1, "initiating multicast joins\n");
acm_join_groups();