static int close_inactive_host(zbx_ipmi_host_t *h) { const char *__function_name = "close_inactive_host"; char domain_name[11]; /* max int length */ struct timeval tv; int ret = FAIL; zabbix_log(LOG_LEVEL_DEBUG, "In %s(): %s", __function_name, h->ip); zbx_snprintf(domain_name, sizeof(domain_name), "%d", h->domain_id); ipmi_domain_iterate_domains(domains_iterate_cb, domain_name); h->done = 0; domain_close_ok = 0; ipmi_domain_pointer_cb(domain_id_ptr, domain_close_cb, h); if (1 == domain_close_ok) { tv.tv_sec = 10; tv.tv_usec = 0; while (0 == h->done) os_hnd->perform_one_op(os_hnd, &tv); free_ipmi_connection(h); ret = SUCCEED; } zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(ret)); return ret; }
void ohoi_close_connection(ipmi_domain_id_t domain_id, void *user_data) { int rv, close_flag = 0; dbg("ohoi_close_connection"); rv = ipmi_domain_pointer_cb(domain_id, close_connection, &close_flag); if (rv) { dbg("ipmi_domain_pointer_cb failed!"); return; } /* Removed while(!close_flag)/sel_select loop, fix for bug 1029028. */ sleep(1); }
void ohoi_close_connection(ipmi_domain_id_t domain_id, void *user_data) { struct oh_handler_state *handler = (struct oh_handler_state *)user_data; struct ohoi_handler *ipmi_handler = (struct ohoi_handler *)handler->data; int rv; trace_ipmi("ohoi_close_connection"); rv = ipmi_domain_pointer_cb(domain_id, close_connection, ipmi_handler); if (rv) { err("ipmi_domain_pointer_cb failed!"); return; } while (ipmi_handler->fully_up != 0) { sel_select(ipmi_handler->ohoi_sel, NULL, 0, NULL, NULL); } }
int ipmicmd_mv(struct ohoi_handler *ipmi_handler, uchar cmd, uchar netfn, uchar lun, uchar *pdata, uchar sdata, uchar *presp, int sresp, int *rlen) { ipmicmd_mv_arg_t info; int rv; info.cmd = cmd; info.netfn = netfn; info.lun = lun; info.pdata = pdata; info.sdata = sdata; info.presp = presp; info.sresp = sresp; info.rlen = rlen; info.rv = 0; info.done = 0; rv = ipmi_domain_pointer_cb(ipmi_handler->domain_id, ipmicmd_mv_cb, &info); if (rv != 0) { dbg("ipmi_domain_pointer_cb = %d", rv); return SA_ERR_HPI_BUSY; } rv = ohoi_loop(&info.done, ipmi_handler); if (rv != SA_OK) { dbg("ohoi_loop = %d", rv); return rv; } return info.rv; }