bool ActiveAlarmList::update(AlarmTableDef& alarm_table_def, const std::string& issuer) { bool updated = false; std::map<unsigned int, AlarmListEntry>::iterator it = _index_to_entry.find(alarm_table_def.index()); if (alarm_table_def.is_not_clear()) { if ((it == _index_to_entry.end()) || (alarm_table_def.severity() != it->second.alarm_table_def().severity())) { _index_to_entry[alarm_table_def.index()] = AlarmListEntry(alarm_table_def, issuer); updated = true; } } else { if (it != _index_to_entry.end()) { _index_to_entry.erase(it); updated = true; } } return updated; }
void AlarmTrapSender::send_trap(AlarmTableDef& alarm_table_def) { static const oid snmp_trap_oid[] = {1,3,6,1,6,3,1,1,4,1,0}; static const oid clear_oid[] = {1,3,6,1,2,1,118,0,3}; static const oid active_oid[] = {1,3,6,1,2,1,118,0,2}; static const oid model_ptr_oid[] = {1,3,6,1,2,1,118,1,2,2,1,13,0}; static const oid model_row_oid[] = {1,3,6,1,2,1,118,1,1,2,1,3,0,1,2}; static const oid resource_id_oid[] = {1,3,6,1,2,1,118,1,2,2,1,10,0}; static const oid zero_dot_zero[] = {0,0}; netsnmp_variable_list var_trap; netsnmp_variable_list var_model_row; netsnmp_variable_list var_resource_id; memset(&var_trap, 0x00, sizeof(var_trap)); memset(&var_model_row, 0x00, sizeof(var_model_row)); memset(&var_resource_id, 0x00, sizeof(var_resource_id)); var_trap.next_variable = &var_model_row; var_model_row.next_variable = &var_resource_id; var_resource_id.next_variable = NULL; snmp_set_var_objid(&var_trap, snmp_trap_oid, OID_LENGTH(snmp_trap_oid)); if (alarm_table_def.severity() == AlarmDef::CLEARED) { snmp_set_var_typed_value(&var_trap, ASN_OBJECT_ID, (u_char*) clear_oid, sizeof(clear_oid)); } else { snmp_set_var_typed_value(&var_trap, ASN_OBJECT_ID, (u_char*) active_oid, sizeof(active_oid)); } snmp_set_var_objid(&var_model_row, model_ptr_oid, OID_LENGTH(model_ptr_oid)); snmp_set_var_typed_value(&var_model_row, ASN_OBJECT_ID, (u_char*) model_row_oid, sizeof(model_row_oid)); var_model_row.val.objid[ALARMMODELTABLEROW_INDEX] = alarm_table_def.index(); var_model_row.val.objid[ALARMMODELTABLEROW_STATE] = alarm_table_def.state(); snmp_set_var_objid(&var_resource_id, resource_id_oid, OID_LENGTH(resource_id_oid)); snmp_set_var_typed_value(&var_resource_id, ASN_OBJECT_ID, (u_char*) zero_dot_zero, sizeof(zero_dot_zero)); send_v2trap(&var_trap); snmp_reset_var_buffers(&var_trap); }
void AlarmTableDefs::insert_def(AlarmTableDef def) { AlarmTableDefKey key(def.alarm_index(), def.severity()); _key_to_def.emplace(key, def); }