void AlarmTrapSender::issue_alarm(const std::string& issuer, const std::string& identifier) { unsigned int index; unsigned int severity; if (sscanf(identifier.c_str(), "%u.%u", &index, &severity) != 2) { snmp_log(LOG_ERR, "malformed alarm identifier: %s", identifier.c_str()); return; } AlarmTableDef& alarm_table_def = AlarmTableDefs::get_instance().get_definition(index, severity); if (alarm_table_def.is_valid()) { if (_active_alarms.update(alarm_table_def, issuer)) { if (!AlarmFilter::get_instance().alarm_filtered(index, severity)) { send_trap(alarm_table_def); } } } else { snmp_log(LOG_ERR, "unknown alarm definition: %s", identifier.c_str()); } }
/* * Отсылка trap-ов, возвращает: * 0 - не требуется посылки trap-ов * >0 - успешная отсылка всех имеющихся trap-ов * <0 - неудачная отсылка */ static small_int_t trap_try (void) { small_int_t result = 0; trap_t* t, *e; t = first; e = last; while (t != e) { if (trap_should_delay (t)) { /* Trap должен быть задержен, * переставим его в конец очереди и продолжим. */ *last = *t; last = trap_queue_next (last); } else if (send_trap (t)) { /* Пакет отправлен удачно. */ result = 1; } else { /* Ошибка отсылки trap-пакетов. */ result = -1; break; /* перестаем посылать trap-пакеты */ } delay_ds = 0; t = trap_queue_next (t); } first = t; return result; }
int process_send_trap(char *trap_name) { int i; for (i = 0; traps[i].trap_name; i++) if (strcmp(traps[i].trap_name, trap_name) == 0) return send_trap(trap_name, traps[i].build_func); ibdiag_show_usage(); return 1; }
void AlarmTrapSender::sync_alarms(bool do_clear) { AlarmTableDefs& defs = AlarmTableDefs::get_instance(); if (do_clear) { for (AlarmTableDefsIterator it = defs.begin(); it != defs.end(); it++) { if (it->severity() == AlarmDef::CLEARED) { send_trap(*it); } } } for (ActiveAlarmIterator it = _active_alarms.begin(); it != _active_alarms.end(); it++) { send_trap(it->alarm_table_def()); } }
int main(int argc, char **argv) { int mgmt_classes[2] = { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS }; int ch = 0; char *trap_name = NULL; char *ca = NULL; int ca_port = 0; static char const str_opts[] = "hVP:C:"; static const struct option long_opts[] = { {"Version", 0, 0, 'V'}, {"P", 1, 0, 'P'}, {"C", 1, 0, 'C'}, {"help", 0, 0, 'h'}, {} }; argv0 = argv[0]; while ((ch = getopt_long(argc, argv, str_opts, long_opts, NULL)) != -1) { switch (ch) { case 'V': fprintf(stderr, "%s %s\n", argv0, get_build_version()); exit(-1); case 'C': ca = optarg; break; case 'P': ca_port = strtoul(optarg, NULL, 0); break; case 'h': default: usage(); } } argc -= optind; argv += optind; if (!argv[0]) { trap_name = traps[0].trap_name; } else { trap_name = argv[0]; } madrpc_show_errors(1); madrpc_init(ca, ca_port, mgmt_classes, 2); return (send_trap(trap_name)); }
static void set_issm(Port *port, unsigned issm) { uint32_t old_capmask, capmask; capmask = mad_get_field(port->portinfo, 0, IB_PORT_CAPMASK_F); old_capmask = capmask; if (issm) capmask |= CAPMASK_ISSM; else capmask &= ~CAPMASK_ISSM; mad_set_field(port->portinfo, 0, IB_PORT_CAPMASK_F, capmask); if (old_capmask != capmask && capmask&(CAPMASK_ISNOTICE|CAPMASK_ISTRAP) && capmask&CAPMASK_ISCAPMASKTRAP) send_trap(port, TRAP_144); }
void AlarmTrapSender::clear_alarms(const std::string& issuer) { AlarmTableDefs& defs = AlarmTableDefs::get_instance(); ActiveAlarmIterator it = _active_alarms.begin(); while (it != _active_alarms.end()) { if (it->issuer() == issuer) { AlarmTableDef& clear_def = defs.get_definition(it->alarm_table_def().index(), AlarmDef::CLEARED); if (!AlarmFilter::get_instance().alarm_filtered(clear_def.index(), clear_def.severity())) { send_trap(clear_def); } _active_alarms.remove(it); } else { ++it; } } }