Пример #1
0
int Test_Resource(SaHpiSessionIdT session, SaHpiResourceIdT resource)
{
	SaErrorT status;
	int retval = SAF_TEST_UNKNOWN;
	SaHpiEventLogEntryIdT PrevLogEntry, NextLogEntry;
	SaHpiEventLogEntryT LogEntry;

	//
	//  Call saHpiEventLogEntryGet passing in a bad sessionId
	//
	status = saHpiEventLogEntryGet(INVALID_SESSION_ID,
				       resource,
				       SAHPI_OLDEST_ENTRY,
				       &NextLogEntry,
				       &PrevLogEntry, &LogEntry, NULL, NULL);
	if (status == SA_ERR_HPI_INVALID_SESSION)
		retval = SAF_TEST_PASS;
	else {
		e_print(saHpiEventLogEntryGet,
			SA_ERR_HPI_INVALID_SESSION, status);
		retval = SAF_TEST_FAIL;
	}

	return (retval);
}
Пример #2
0
int main(int argc, char **argv)
{
	SaHpiSessionIdT sid = 0;
	SaHpiEventT entry;
	SaHpiEventLogEntryT logentry;
	SaHpiEventLogEntryIdT prev, next;
	SaErrorT rc = SA_OK;

        rc = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sid, NULL);
	if (rc != SA_OK) {
		dbg("Failed to open session");
                return -1;
	}

	rc = saHpiDiscover(sid);
	if (rc != SA_OK) {
		dbg("Failed to run discover");
                return -1;
	}

        /* get the resource id of the chassis */
        SaHpiResourceIdT resid = get_resid(sid, SAHPI_ENT_SYSTEM_CHASSIS);
        if (resid == 0) {
		dbg("Couldn't find the resource id of the chassis");
                return -1;
	}

        /* initialize the new event log entry */
        entry.Source = SAHPI_UNSPECIFIED_RESOURCE_ID;
        entry.EventType = SAHPI_ET_USER;
        entry.Timestamp = 0;
        entry.Severity = SAHPI_INFORMATIONAL;
        oh_init_textbuffer(&entry.EventDataUnion.UserEvent.UserEventData);
        oh_append_textbuffer(&entry.EventDataUnion.UserEvent.UserEventData,
                             "My user data");

        /* add event log entry */
        rc = saHpiEventLogEntryAdd(sid, resid, &entry);
        if (rc != SA_OK) {
		dbg("Couldn't add event log entry");
		dbg("Error %s",oh_lookup_error(rc));
                return -1;
	}

        /* get event log entry */
        rc = saHpiEventLogEntryGet(sid, resid, SAHPI_NEWEST_ENTRY, &prev, &next,
                                   &logentry, NULL, NULL);
        if (rc != SA_OK) {
		dbg("Couldn't get event log entry");
		dbg("Error %s",oh_lookup_error(rc));
                return -1;
	}

	return 0;
}
Пример #3
0
int main(int argc, char **argv)
{
	SaHpiSessionIdT sid = 0;
	SaErrorT rc = SA_OK;
	int event_ctr = 0;
	SaHpiEventLogEntryT ele;
	SaHpiRdrT rdr;
	SaHpiRptEntryT rpte;
	SaHpiEventLogEntryIdT eleid, neleid, peleid;

	rc = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sid, NULL);
	if(rc != SA_OK)
		return -1;

	rc = saHpiSubscribe(sid);
	if(rc != SA_OK)
		return -1;

	rc = saHpiDiscover(sid);
	if (rc != SA_OK)
		return -1;

	/* count discovery events */
	eleid = neleid = SAHPI_OLDEST_ENTRY;
	while (rc == SA_OK && neleid != SAHPI_NO_MORE_ENTRIES) {
		rc = saHpiEventLogEntryGet(sid,
					   SAHPI_UNSPECIFIED_RESOURCE_ID,
					   eleid,
					   &peleid,
					   &neleid,
					   &ele,
					   &rdr,
					   &rpte);
		if (ele.Event.EventType == SAHPI_ET_RESOURCE)
			event_ctr++;

		eleid = neleid;
	}
	
	if (rc != SA_OK) {
		printf("SaHpiEventLogEntryGet returned %d.\n", rc);
		return -1;
	}
	/* A FRU device does NOT generate an ADD event. So our Hot Swap Disk
	 * Drive Bay resource will not generate an ADD event since it is marked
	 * as a FRU. If you change this, this test will see an additional event.
	 */
	if (event_ctr != 4) {
		printf("Incorrect number of events returned. Found %d events.\n",
		       event_ctr);
		return -1;
	}

	return 0;
}
Пример #4
0
int main(int argc, char **argv)
{
        SaErrorT        rv = SA_OK;
        SaHpiSessionIdT sessionid;
        SaHpiResourceIdT resourceId = SAHPI_UNSPECIFIED_RESOURCE_ID;
        SaHpiEventLogEntryIdT currentId = SAHPI_FIRST_ENTRY, prevId, nextId;
        SaHpiEventLogEntryT entry;
        SaHpiRdrT rdr;
        SaHpiRptEntryT rptentry;
        SaHpiEntityPathT *ep = NULL;

        printf("saHpiEventLogEntyGet: Test for hpi eventlog "
               "entry get function\n");
        rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL);
        if (rv != SA_OK) {
                printf("saHpiSessionOpen failed with error: %s\n",
                       oh_lookup_error(rv));
                exit(-1);
        }

        do {
                rv = saHpiEventLogEntryGet(sessionid, resourceId, currentId,
                                           &prevId, &nextId, &entry, &rdr,
                                           &rptentry);
                if (rv != SA_OK) {
                        printf("Get event log entry failed with error: %s\n",
                               oh_lookup_error(rv));
                        printf("Test case - FAIL\n");
                        exit (-1);
                }

                if (rptentry.ResourceCapabilities) {
                        ep = &rptentry.ResourceEntity;
                        oh_print_eventlogentry(&entry, ep, 6);
                }
                currentId = nextId;
        } while (nextId != SAHPI_NO_MORE_ENTRIES);

        printf("Test case - PASS\n");
        rv = saHpiSessionClose(sessionid);
        return 0;
}
Пример #5
0
void cHpiSubProviderLogEntry::GetInfo( std::deque<HpiInfo>& info ) const
{
    info.clear();

    SaErrorT rv;
    SaHpiEventLogEntryIdT prev_id, next_id;
    SaHpiEventLogEntryT elentry;
    SaHpiRdrT rdr;
    SaHpiRptEntryT rpte;

    rv = saHpiEventLogEntryGet( m_ctx.session_id,
                                m_ctx.resource_id,
                                m_ctx.log_entry_id,
                                &prev_id,
                                &next_id,
                                &elentry,
                                &rdr,
                                &rpte );
    if ( rv != SA_OK ) {
        Line( info, L"saHpiEventLogEntryGet failed", rv, I32_SaError );
        return;
    }

    Line( info, L"Entry Id", elentry.EntryId, UI32_SaHpiEventLogEntryId );
    Line( info, L"Timestamp", elentry.Timestamp, I64_SaHpiTime );

    const SaHpiEventT& e = elentry.Event;
    Line( info, L"Event", L"" );
    Line( info, L"  Source Resource", e.Source, UI32_SaHpiResourceId );
    Line( info, L"  Event Type", e.EventType );
    Line( info, L"  Timestamp", e.Timestamp, I64_SaHpiTime );
    Line( info, L"  Severity", e.Severity );
    GetEventDataInfo( e.EventType, e.EventDataUnion, info );

    // TODO rdr, rpte
}
Пример #6
0
int Test_Resource(SaHpiSessionIdT session)
{
	SaErrorT status;
	int retval = SAF_TEST_UNKNOWN;
	SaHpiEventLogEntryIdT NextLogEntry, PrevLogEntry;
	SaHpiEventLogEntryT LogEntry;
	//
	//  Call saHpiEventLogEntryGet passing in a bad ResourceId
	//
	status = saHpiEventLogEntryGet(session,
				       INVALID_RESOURCE_ID,
				       SAHPI_NEWEST_ENTRY,
				       &NextLogEntry,
				       &PrevLogEntry, &LogEntry, NULL, NULL);

	if (status != SA_ERR_HPI_INVALID_RESOURCE) {
		e_print(saHpiEventLogEntryGet,
			SA_ERR_HPI_INVALID_RESOURCE, status);
		retval = SAF_TEST_FAIL;
	} else
		retval = SAF_TEST_PASS;

	return (retval);
}
Пример #7
0
SaErrorT show_event_log(SaHpiSessionIdT sessionid, SaHpiResourceIdT resourceid,
                        int show_short, hpi_ui_print_cb_t proc)
{
    SaErrorT                rv = SA_OK;
    SaHpiRptEntryT          rptentry;
    SaHpiEventLogInfoT      info;
    SaHpiEventLogEntryIdT   entryid;
    SaHpiEventLogEntryIdT   nextentryid;
    SaHpiEventLogEntryIdT   preventryid;
    SaHpiEventLogEntryT     sel;
    SaHpiRdrT               rdr;
    SaHpiRptEntryT          rpt;
    char                    buf[SHOW_BUF_SZ];
    char                    date[30], date1[30];

    if (resourceid != SAHPI_UNSPECIFIED_RESOURCE_ID) {
        rv = saHpiRptEntryGetByResourceId(sessionid, resourceid, &rptentry);
        if (rv != SA_OK) {
            snprintf(buf, SHOW_BUF_SZ,
                     "ERROR: saHpiRptEntryGetByResourceId error = %s\n",
                     oh_lookup_error(rv));
            proc(buf);
            return rv;
        };
        if (!(rptentry.ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
            proc("ERROR: The designated resource hasn't SEL.\n");
            return SA_OK;
        }
    };

    rv = saHpiEventLogInfoGet(sessionid, resourceid, &info);
    if (rv != SA_OK) {
        snprintf(buf, SHOW_BUF_SZ, "ERROR: saHpiEventLogInfoGet error = %s\n",
                 oh_lookup_error(rv));
        proc(buf);
        return rv;
    }
    snprintf(buf, SHOW_BUF_SZ, "EventLog: entries = %d, size = %d, enabled = %d\n",
             info.Entries, info.Size, info.Enabled);
    if (proc(buf) != HPI_UI_OK) return(SA_OK);
    time2str(info.UpdateTimestamp, date, 30);
    time2str(info.CurrentTime, date1, 30);
    snprintf(buf, SHOW_BUF_SZ, "UpdateTime = %s  CurrentTime = %s  Overflow = %d\n",
             date, date1, info.OverflowFlag);
    if (proc(buf) != HPI_UI_OK) return(SA_OK);

    if (info.Entries != 0) {
        entryid = SAHPI_OLDEST_ENTRY;
        while (entryid != SAHPI_NO_MORE_ENTRIES)
        {
            rv = saHpiEventLogEntryGet(sessionid, resourceid,
                                       entryid, &preventryid, &nextentryid,
                                       &sel, &rdr, &rpt);
            if (rv != SA_OK) {
                snprintf(buf, SHOW_BUF_SZ,
                         "ERROR: saHpiEventLogEntryGet error = %s\n",
                         oh_lookup_error(rv));
                proc(buf);
                return -1;
            };
            if (show_short) {
                if (show_short_event(&(sel.Event), proc) != HPI_UI_OK)
                    return(SA_OK);
            } else {
                if (rpt.ResourceCapabilities != 0) {
                    oh_print_eventlogentry(&sel, &rpt.ResourceEntity, 1);
                } else if (rdr.RdrType != SAHPI_NO_RECORD) {
                    oh_print_eventlogentry(&sel, &rdr.Entity, 1);
                } else {
                    oh_print_eventlogentry(&sel, NULL, 1);
                }
            }


            preventryid = entryid;
            entryid = nextentryid;
        }
    } else {
        proc("SEL is empty\n");
    };
    return SA_OK;
}
Пример #8
0
int Test_Resource(SaHpiSessionIdT session, SaHpiResourceIdT resource)
{
	SaErrorT status;
	int retval = SAF_TEST_UNKNOWN;
	SaHpiEventLogEntryT LogEntry;
	SaHpiEventLogEntryIdT PrevLogEntry;
	SaHpiEventT EvtEntry;
	SaHpiEventLogInfoT info;

	//
	//  Check to see if there needs to be an eventlog entry added.
	// 
	status = saHpiEventLogInfoGet(session, resource, &info);
	if (status != SA_OK) {
		retval = SAF_TEST_UNRESOLVED;
		e_print(saHpiEventLogInfoGet, SA_OK, status);
	} else {
		if (info.Size == 0) {
			retval = SAF_TEST_NOTSUPPORT;
		} else if (info.Entries == 0) {
			EvtEntry.EventType = SAHPI_ET_USER;
			EvtEntry.Source = SAHPI_UNSPECIFIED_RESOURCE_ID;
			EvtEntry.Timestamp = SAHPI_TIME_UNSPECIFIED;
			EvtEntry.Severity = SAHPI_OK;
			strncpy(EvtEntry.EventDataUnion.UserEvent.UserEventData.
				Data, TEST_STRING, TEST_STRING_LENGTH);
			EvtEntry.EventDataUnion.UserEvent.UserEventData.
			    DataLength = TEST_STRING_LENGTH;
			EvtEntry.EventDataUnion.UserEvent.UserEventData.
			    Language = SAHPI_LANG_ENGLISH;
			EvtEntry.EventDataUnion.UserEvent.UserEventData.
			    DataType = SAHPI_TL_TYPE_TEXT;

			status = saHpiEventLogEntryAdd(session,
						       resource, &EvtEntry);
			if (status != SA_OK) {
				e_print(saHpiEventLogEntryAdd, SA_OK, status);
				retval = SAF_TEST_UNRESOLVED;
			}
		}
	}

	if (retval == SAF_TEST_UNKNOWN) {
		//
		//  Call saHpiEventLogEntryGet while passing in a NULL
		//  pointer for PrevEntryId.
		//
		status = saHpiEventLogEntryGet(session,
					       resource,
					       SAHPI_OLDEST_ENTRY,
					       &PrevLogEntry,
					       NULL, &LogEntry, NULL, NULL);
		if (status == SA_ERR_HPI_INVALID_PARAMS)
			retval = SAF_TEST_PASS;
		else {
			e_print(saHpiEventLogEntryGet,
				SA_ERR_HPI_INVALID_PARAMS, status);
			retval = SAF_TEST_FAIL;
		}
	}

	return (retval);
}
Пример #9
0
static int sa_show_evtlog(SaHpiResourceIdT resourceid)
{
	SaErrorT rv = SA_OK;
	SaHpiSelInfoT info;
	SaHpiRptEntryT rptentry;
	SaHpiEntryIdT rptentryid;
	SaHpiEntryIdT nextrptentryid;
	SaHpiSelEntryIdT entryid;
	SaHpiSelEntryIdT nextentryid;
	SaHpiSelEntryIdT preventryid;
	SaHpiSelEntryT  sel;
	SaHpiRdrT rdr;
	char date[30];

	rptentryid = SAHPI_FIRST_ENTRY;
	while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY))
	{
		rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry);
		if (!(rptentry.ResourceCapabilities & SAHPI_CAPABILITY_SEL)) {
			rptentryid = nextrptentryid;
			continue;  /* no SEL here, try next RPT */
		}
		if (rptentry.ResourceId == resourceid) {
			break;
		}
		rptentryid = nextrptentryid;
	}
	if ((rv != SA_OK) || (rptentryid == SAHPI_LAST_ENTRY)) {
		printf("The designated resource hasn't SEL.\n");
		return SA_OK;
	}

	rv = saHpiEventLogInfoGet(sessionid,resourceid,&info);
	if (rv != SA_OK) {
		printf("saHpiEventLogInfoGet error %d\n",rv);
		return -1;
	}
	printf("EventLog entries=%d, size=%d, enabled=%d\n",
		info.Entries,info.Size,info.Enabled);
	saftime2str(info.UpdateTimestamp,date,30);
	printf("UpdateTime = %s, ", date);
	saftime2str(info.CurrentTime,date,30);
	printf("CurrentTime = %s\n", date);
	printf("Overflow = %d\n", info.OverflowFlag);
	printf("DeleteEntrySupported = %d\n", info.DeleteEntrySupported);

	if (info.Entries != 0){
		entryid = SAHPI_OLDEST_ENTRY;
		while (entryid != SAHPI_NO_MORE_ENTRIES)
		{
			rv = saHpiEventLogEntryGet(sessionid,resourceid,
					entryid,&preventryid,&nextentryid,
					&sel,&rdr,NULL);
			if (rv != SA_OK) {
				printf("saHpiEventLogEntryGet error %d\n",rv);
				return -1;
			}

			ShowSel(&sel, &rdr, &rptentry);
			preventryid = entryid;
			entryid = nextentryid;
		}
	} else
		printf("SEL is empty\n");

	return SA_OK;
}
Пример #10
0
int main(int argc, char **argv)
{
        SaErrorT err;
	SaHpiRdrT rdr;
	SaHpiEntryIdT rptid, next_rptid;
	SaHpiRptEntryT rpt;
	SaHpiResourceIdT chassis_rid=0;
	SaHpiSelEntryT logentry;
	SaHpiSelEntryIdT prev_logid, next_logid;
        SaHpiSessionIdT sessionid;
        SaHpiVersionT hpiVer;
	char *hash_key, *logstr;
	SnmpMibInfoT *hash_value;

	/* Setup Infra-structure */
        err = saHpiInitialize(&hpiVer);
        if (err != SA_OK) {
                printf("Error! saHpiInitialize: err=%d\n", err);
                return -1;
        }

        err = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID, &sessionid, NULL);
        if (err != SA_OK) {
	  printf("Error! saHpiSessionOpen: err=%d\n", err);
	  return -1;
        }
 
        err = saHpiResourcesDiscover(sessionid);
        if (err != SA_OK) {
	  printf("Error! saHpiResourcesDiscover: err=%d\n", err);
	  return -1;
        }

	/* Find first SEL capable Resource - assume its the chassis */
	rptid = SAHPI_FIRST_ENTRY;
	while ((err == SA_OK) && (rptid != SAHPI_LAST_ENTRY))
	{
		err = saHpiRptEntryGet(sessionid, rptid, &next_rptid, &rpt);
		if (err != SA_OK) {
			printf("Error! saHpiRptEntryGet: err=%d\n", err);
			return -1;
		}
		
		if ((rpt.ResourceCapabilities & SAHPI_CAPABILITY_SEL)) {
			chassis_rid = rpt.ResourceId;
			break;
		}
		else {
			rptid = next_rptid;
			continue;
		}
	}
	if (chassis_rid == 0) {
		printf("Error! saHpiRptEntryGet couldn't find SEL RID\n");
		return -1;
	}

	/* If test OID not already in sim hash table; create it */
	if (!g_hash_table_lookup_extended(sim_hash, 
					  ERROR_LOG_MSG_OID,
					  (gpointer)&hash_key, 
					  (gpointer)&hash_value)) {

		hash_key = g_strdup(ERROR_LOG_MSG_OID);
		if (!hash_key) {
			printf("Error: Cannot allocate memory for oid key=%s\n", ERROR_LOG_MSG_OID);
			return -1;
		}
		
		hash_value = g_malloc0(sizeof(SnmpMibInfoT));
		if (!hash_value) {
			printf("Cannot allocate memory for hash value for oid=%s", ERROR_LOG_MSG_OID);
			return -1;
		}
	}

	printf("Calling Clear\n");

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	printf("Calling EntryGet\n");

	/************************************************************
	 * TestCase - Mapped Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Event recovered in next testcase
	 ************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Mapped Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Chassis Recovery Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Recover event in previous testcase
	 *************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_FALSE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Chassis Recovery Event (EN_CUTOFF_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Chassis Duplicate Event ( EN_PFA_HI_FAULT_3_35V)
         * Previous state check depends on previous testcase!
	 *************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended voltage on +3.3v. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Chassis Duplicate Event ( EN_PFA_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Blade Duplicate Event ( EN_PFA_HI_FAULT_3_35V)
         * Same as previous testcase only for the blade not chassis
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_10  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended voltage on +3.3v. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Blade Duplicate Event ( EN_PFA_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Non-mapped Event (Severity=INFO)
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_01  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus message not in string to event table";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Non-mapped Event (Severity=INFO)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Better to test a mapped login event - don't have one yet */
	/*************************************************************
	 * TestCase - Non-mapped Login Event (Severity=WARN)
	 *************************************************************/
	logstr = "Severity:WARN  Source:SWITCH_4  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus login message Login ID:\'\'myid\' @ someaddress\'";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_MINOR))) {
		printf("Error! TestCase - Non-mapped Login Event (Severity=WARN)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/************************************************************
	 * TestCase - Daughter Card Event (EN_PFA_HI_OVER_TEMP_DASD1)
	 ************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:BSE Option over recommended temperature.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)0) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)0))) {
		printf("Error! TestCase - Daughter Card Event (EN_PFA_HI_OVER_TEMP_DASD1)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Hot-swap switch installed (EN_SWITCH_3_INSTALLED) 
	 *************************************************************/
	logstr = "Severity:INFO  Source:SWITCH_3  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:I/O module 3 was installed.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_ACTIVE_HEALTHY) && 
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_ACTIVE_HEALTHY))) {
		printf("Error! TestCase - Hot-swap switch installed (EN_SWITCH_3_INSTALLED)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/****************************************************************
	 * TestCase - Hot-swap Media Tray removal (EN_MEDIA_TRAY_REMOVED)
         * This event is recovered in the next testcase
	 ****************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:The media tray was removed.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_NOT_PRESENT) && 
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_ACTIVE_HEALTHY))) {
		printf("Error! TestCase - Hot-swap Media Tray removal (EN_MEDIA_TRAY_REMOVED)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/****************************************************************
	 * TestCase - Hot-swap Media Tray recovery (EN_MEDIA_TRAY_REMOVED)
         * Recovery of previous event
	 ****************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery The media tray was removed.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_ACTIVE_HEALTHY) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_NOT_PRESENT))) {
		printf("Error! TestCase - Hot-swap Media Tray recovery (EN_MEDIA_TRAY_REMOVED)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/************************************
	 * Drive some error paths in the code
         ************************************/ 

	/******************************************************************
	 * TestCase - Bogus threshold strings
 	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Bogus Read value 3.5 Bogus Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Bogus threshold strings\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/******************************************************************
	 * TestCase - Recovery string not first character of text string
         * (blank is first character). Should not treat as a recovery event
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text: Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Recovery string not first character of text string\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/******************************************************************
	 * TestCase - In string table but not mapped
         * Uses special defined Test event in bc_str2event.c
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus Test Event.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - In string table but not mapped\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/****************** 
	 * End of testcases 
         ******************/

        err = saHpiSessionClose(sessionid);
        if (err != SA_OK) {
	  printf("Error! saHpiSessionClose: err=%d\n", err);
	  return -1;
        }

        err = saHpiFinalize();
        if (err != SA_OK) {
	  printf("Error! saHpiFinalize: err=%d\n", err);
	  return -1;
        }

        return 0;
}
Пример #11
0
SaErrorT populate_saHpiEventLog (SaHpiSessionIdT sessionid)
{

	SaErrorT rv;
        SaHpiEntryIdT rpt_entry_id;

        SaHpiEventLogEntryIdT      event_entry_id;
        SaHpiEventLogEntryIdT  pre_event_entry_id;
        SaHpiEventLogEntryT       event_log_entry;
        
	SaHpiRptEntryT rpt_entry;

	SaHpiRptEntryT  event_rpt_entry;
	SaHpiRdrT       event_rdr_entry;

	oid evt_log_oid[EVENT_LOG_INDEX_NR];
	netsnmp_index evt_log_index;
	saHpiEventLogTable_context *evt_log_context;

        DR_XREF *dr_entry;
	SaHpiDomainIdResourceIdArrayT dr_pair;

        oid child_oid[MAX_OID_LEN];
        size_t child_oid_len;

	printf( "populate_saHpiEventLog\n");
        printf(" ***************************************\n");
        printf(" ***************************************\n");
        printf(" EVENT LOG TABLES \n");


        rpt_entry_id = SAHPI_FIRST_ENTRY;
        do {
                rv = saHpiRptEntryGet(sessionid, rpt_entry_id, &rpt_entry_id, &rpt_entry);

                if (rv != SA_OK) {
                        DEBUGMSGTL ((AGENT, 
                        "populate_saHpiEventLog, saHpiRptEntryGet Failed: rv = %d\n",rv));
                        rv =  AGENT_ERR_INTERNAL_ERROR;
                        break;
                }

                printf("ResourceId [%d]\n", rpt_entry.ResourceId);

                event_entry_id = SAHPI_OLDEST_ENTRY;
                do {
                        rv = saHpiEventLogEntryGet (sessionid, 
                                                    rpt_entry.ResourceId,
                                                    event_entry_id,
                                                    &pre_event_entry_id,
                                                    &event_entry_id,
                                                    &event_log_entry,
                                                    &event_rdr_entry,
                                                    &event_rpt_entry);

                        printf("        Entry ID [%d]\n", event_entry_id);
                        printf("        EventType [%d]\n", event_log_entry.Event.EventType);
                        printf("        rv [%d]\n", rv);


                        if (rv == SA_ERR_HPI_CAPABILITY) {
                                printf ("populate_saHpiEventLog, saHpiEventLogEntryGet() == SA_ERR_HPI_CAPABILITY\n");
                                DEBUGMSGTL ((AGENT, "populate_saHpiEventLog, saHpiEventLogEntryGet() == SA_ERR_HPI_CAPABILITY\n"));
                                rv = AGENT_ERR_NOERROR;
                                break;
                        } else if (rv == SA_ERR_HPI_NOT_PRESENT) {
                                printf ("populate_saHpiEventLog, saHpiEventLogEntryGet() == SA_ERR_HPI_NOT_PRESENT\n");
                                DEBUGMSGTL ((AGENT, "populatesaHpiResourcesDiscover_saHpiEventLog, saHpiEventLogEntryGet() == SA_ERR_HPI_NOT_PRESENT\n"));
                                rv = AGENT_ERR_NOERROR;
                                break;
                        } else if (rv != SA_OK) {
                                printf ("populate_saHpiEventLog Failed: rv = %d\n",rv);
                                DEBUGMSGTL ((AGENT, "populate_saHpiEventLog Failed: rv = %d\n",rv));
                                rv = AGENT_ERR_INTERNAL_ERROR;
                                break;
                        }


                        switch (event_log_entry.Event.EventType) {
                        case SAHPI_ET_RESOURCE:
                                printf("SAHPI_ET_RESOURCE: rv [%d]\n", rv);
                                printf("        Event Type: [%s]\n", 
                                       oh_lookup_resourceeventtype(event_log_entry.Event.EventDataUnion.ResourceEvent.ResourceEventType));
                                printf("        Resource: [%d]\n", event_log_entry.Event.Source);
                                printf("        Severity: [%s]\n\n",oh_lookup_severity(event_log_entry.Event.Severity));
                                populate_saHpiResourceEventLogTable(sessionid, &event_log_entry,                                           
                                                                    child_oid, 
                                                                    &child_oid_len);
                                break;
                        case SAHPI_ET_SENSOR:
                                printf("SAHPI_ET_SENSOR: rv [%d]\n", rv);
                                printf("        Sensor Type: [%s]\n\n",
                                       oh_lookup_sensortype(event_log_entry.Event.EventDataUnion.SensorEvent.SensorType));
                                populate_saHpiSensorEventLogTable(sessionid, &event_log_entry,                                           
                                                                  child_oid, 
                                                                  &child_oid_len,
                                                                  &event_rdr_entry);
                                break;
                        case SAHPI_ET_SENSOR_ENABLE_CHANGE:
                                printf("SAHPI_ET_SENSOR_ENABLE_CHANGE: rv [%d]\n\n", rv);
                                populate_saHpiSensorEnableChangeEventLogTable(sessionid, &event_log_entry,                                           
                                                                   child_oid, 
                                                                   &child_oid_len);
                                break;
                        case SAHPI_ET_HOTSWAP:
                                printf("SAHPI_ET_HOTSWAP: rv [%d]\n\n", rv);
                                populate_saHpiHotSwapEventLogTable(sessionid, &event_log_entry,  					 
                                				   child_oid, 
                                				   &child_oid_len);
								   

                                break;
                        case SAHPI_ET_WATCHDOG:
                                printf("SAHPI_ET_WATCHDOG: rv [%d]\n\n", rv);
                                populate_saHpiWatchdogEventLogTable(sessionid, &event_log_entry, 
				                                  child_oid, 
                                				  &child_oid_len);
								 
                                break;
                        case SAHPI_ET_HPI_SW:
                                printf("SAHPI_ET_HPI_SW: rv [%d]\n\n", rv);
                                populate_saHpiSoftwareEventLogTable(sessionid, &event_log_entry,                                           
                                                                    child_oid, 
                                                                    &child_oid_len);
                                break;
                        case SAHPI_ET_OEM:
                                printf("SAHPI_ET_OEM: rv [%d]\n\n", rv);
                                populate_saHpiOemEventLogTable(sessionid, &event_log_entry,                                           
                                                                child_oid, 
                                                                &child_oid_len);
                                break;
                        case SAHPI_ET_USER:
                                printf("SAHPI_ET_USER: rv [%d]\n\n", rv);
                                populate_saHpiUserEventLogTable(sessionid, &event_log_entry,                                           
                                                                child_oid, 
                                                                &child_oid_len);
                                break;
                        default:
                                printf("********* unknown event type *********\n");
                                break;        
                        }

                        /* BUILD oid for new row */
                                /* assign the number of indices */
                        evt_log_index.len = EVENT_LOG_INDEX_NR;
                        /** Index saHpiDomainId is external */
                        evt_log_oid[0] = get_domain_id(sessionid);
                        /** Index saHpiResourceId is external */
                        evt_log_oid[1] = rpt_entry.ResourceId;
                        /** Index saHpiEventLogIndex is internal */
                        dr_pair.domainId_resourceId_arry[0] = get_domain_id(sessionid);
                        dr_pair.domainId_resourceId_arry[1] = rpt_entry.ResourceId;
                        dr_entry = domain_resource_pair_get(&dr_pair, &dr_table); 
                        if (dr_entry == NULL) {
                                DEBUGMSGTL ((AGENT, 
                                "ERROR: populate_saHpEventLogTable() domain_resource_pair_get returned NULL\n"));
                                return AGENT_ERR_INTERNAL_ERROR;
                        }
                        evt_log_oid[2] = dr_entry->entry_id++;
                        /* assign the indices to the index */
                        evt_log_index.oids = (oid *) & evt_log_oid;
	
                        /* See if it exists. */
                        evt_log_context = NULL;
                        evt_log_context = CONTAINER_FIND (cb.container, &evt_log_index);
		
                        if (!evt_log_context) { 
                                // New entry. Add it
                                evt_log_context = 
                                        saHpiEventLogTable_create_row ( &evt_log_index);
                        }
                        if (!evt_log_context) {
                                snmp_log (LOG_ERR, "Not enough memory for a EventLog row!");
                                rv = AGENT_ERR_INTERNAL_ERROR;
                                break;
                        }

                        /** SaHpiEntryId = ASN_UNSIGNED */
                        evt_log_context->saHpiEventLogIndex = evt_log_oid[2];

                        /** INTEGER = ASN_INTEGER */
                        evt_log_context->saHpiEventLogType = 
                                event_log_entry.Event.EventType; 

                        /** SaHpiTime = ASN_COUNTER64 */
                        evt_log_context->saHpiEventLogAddedTimestamp = 
                                event_log_entry.Timestamp;

                        /** RowPointer = ASN_OBJECT_ID */
                        evt_log_context->saHpiEventLogRowPointer_len = 
                                child_oid_len * sizeof (oid);
                        memcpy (evt_log_context->saHpiEventLogRowPointer, 
                                child_oid, 
                                evt_log_context->saHpiEventLogRowPointer_len);

                        CONTAINER_INSERT (cb.container, evt_log_context);

                } while (event_entry_id != SAHPI_NO_MORE_ENTRIES);

	} while (rpt_entry_id != SAHPI_LAST_ENTRY);

        /******************************************************/
        /* now get the Domain Event Log Info for this session */
        /* this is accomplished by using                      */
        /* in saHpiEventLogInfoGet()                          */
        /* SAHPI_UNSPECIFIED_RESOURCE_ID                      */
        /******************************************************/
        rv = saHpiEventLogEntryGet (sessionid, 
                                    SAHPI_UNSPECIFIED_RESOURCE_ID,
                                    event_entry_id,
                                    &pre_event_entry_id,
                                    &event_entry_id,
                                    &event_log_entry,
                                    &event_rdr_entry,
                                    &event_rpt_entry);

        if (rv == SA_ERR_HPI_NOT_PRESENT) {
                DEBUGMSGTL ((AGENT, "Domain Event Log Empty\n"));
                return AGENT_ERR_NOERROR;
        }
        if (rv != SA_OK) {
                DEBUGMSGTL ((AGENT, "getting Domain Event Log Failed: rv = %d\n",rv));
                return AGENT_ERR_INTERNAL_ERROR;
        }

        printf("SAHPI_ET_DOMAIN: rv [%d]\n\n", rv);
        populate_saHpiDomainEventLogTable(sessionid, 
	                                    &event_log_entry,					    
                                            child_oid, 
                                            &child_oid_len);

        /* BUILD oid for new row */
                /* assign the number of indices */
        evt_log_index.len = EVENT_LOG_INDEX_NR;
        /** Index saHpiDomainId is external */
        evt_log_oid[0] = get_domain_id(sessionid);
        /** Index saHpiResourceId is external */
        evt_log_oid[1] = SAHPI_UNSPECIFIED_RESOURCE_ID;
        /** Index saHpiEventLogIndex is internal */
        dr_pair.domainId_resourceId_arry[0] = get_domain_id(sessionid);
        dr_pair.domainId_resourceId_arry[1] = rpt_entry.ResourceId;
        dr_entry = domain_resource_pair_get(&dr_pair, &dr_table); 
        if (dr_entry == NULL) {
                DEBUGMSGTL ((AGENT, 
                "ERROR: populate_saHpEventLogTable() domain_resource_pair_get returned NULL\n"));
                return AGENT_ERR_INTERNAL_ERROR;
        }
        evt_log_oid[2] = dr_entry->entry_id++;
        /* assign the indices to the index */
        evt_log_index.oids = (oid *) & evt_log_oid;
	
        /* See if it exists. */
        evt_log_context = NULL;
        evt_log_context = CONTAINER_FIND (cb.container, &evt_log_index);
	
        if (!evt_log_context) { 
                // New entry. Add it
                evt_log_context = 
                        saHpiEventLogTable_create_row ( &evt_log_index);
        }
        if (!evt_log_context) {
                snmp_log (LOG_ERR, "Not enough memory for a EventLog row!");
                rv = AGENT_ERR_INTERNAL_ERROR;
        }

        /** SaHpiEntryId = ASN_UNSIGNED */
        evt_log_context->saHpiEventLogIndex = evt_log_oid[2];

        /** INTEGER = ASN_INTEGER */
        evt_log_context->saHpiEventLogType = 
                event_log_entry.Event.EventType; 

        /** SaHpiTime = ASN_COUNTER64 */
        evt_log_context->saHpiEventLogAddedTimestamp = 
                event_log_entry.Timestamp;

        /** RowPointer = ASN_OBJECT_ID */
        evt_log_context->saHpiEventLogRowPointer_len = 
                child_oid_len * sizeof (oid);
        memcpy (evt_log_context->saHpiEventLogRowPointer, 
                child_oid, 
                evt_log_context->saHpiEventLogRowPointer_len);

        CONTAINER_INSERT (cb.container, evt_log_context);

	return rv;

}
Пример #12
0
int
main(int argc, char **argv)
{
  char c;
  SaErrorT rv;
  SaHpiVersionT hpiVer;
  SaHpiSessionIdT sessionid;
  SaHpiRptInfoT rptinfo;
  SaHpiRptEntryT rptentry;
  SaHpiEntryIdT rptentryid;
  SaHpiEntryIdT nextrptentryid;
  SaHpiResourceIdT resourceid;
  SaHpiSelEntryIdT entryid;
  SaHpiSelEntryIdT nextentryid;
  SaHpiSelEntryIdT preventryid;
  SaHpiSelInfoT info;
  SaHpiSelEntryT  sel;
  SaHpiRdrT rdr;

  printf("%s: version %s\n",argv[0],progver); 

  while ( (c = getopt( argc, argv,"cx?")) != EOF )
  switch(c) {
        case 'c': fclear = 1; break;
        case 'x': fdebug = 1; break;
        default:
                printf("Usage %s [-cx]\n",argv[0]);
                printf("where -c clears the event log\n");
                printf("      -x displays eXtra debug messages\n");
                exit(1);
  }
  rv = saHpiInitialize(&hpiVer);
  if (rv != SA_OK) {
	printf("saHpiInitialize: %s\n",decode_error(rv));
	exit(-1);
	}
  rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL);
  if (rv != SA_OK) {
	if (rv == SA_ERR_HPI_ERROR) 
	   printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv);
	else
	   printf("saHpiSessionOpen: %s\n",decode_error(rv));
	exit(-1);
	}
 
  rv = saHpiResourcesDiscover(sessionid);
  if (fdebug) printf("saHpiResourcesDiscover %s\n",decode_error(rv));
  rv = saHpiRptInfoGet(sessionid,&rptinfo);
  if (fdebug) printf("saHpiRptInfoGet %s\n",decode_error(rv));
  printf("RptInfo: UpdateCount = %d, UpdateTime = %lx\n",
         rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp);

#ifdef BUGGY
  /* ARC: Bug here in OpenHPI required re-doing discovery as a workaround. */
#endif
 
  /* walk the RPT list */
  rptentryid = SAHPI_OLDEST_ENTRY;
  while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY))
  {
     rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry);
     if (fdebug) printf("saHpiRptEntryGet %s\n",decode_error(rv));
     if (rv == SA_OK) {
	resourceid = rptentry.ResourceId;
	if (fdebug) printf("RPT %x capabilities = %x\n", resourceid,
				rptentry.ResourceCapabilities);
	if ((rptentry.ResourceCapabilities & SAHPI_CAPABILITY_SEL) == 0) 
		continue;  /* no SEL here, try next RPT */
	if (fclear) {
		rv = saHpiEventLogClear(sessionid,resourceid);
		if (rv == SA_OK) printf("EventLog successfully cleared\n");
		else printf("EventLog clear, error = %d\n",rv);
		break;
	}
        rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; 
	printf("rptentry[%d] tag: %s\n", resourceid,rptentry.ResourceTag.Data);

	rv = saHpiEventLogInfoGet(sessionid,resourceid,&info);
	if (fdebug) printf("saHpiEventLogInfoGet %s\n",decode_error(rv));
	if (rv == SA_OK) {
		/* This data isn't reliable yet with Spi beta2 implementation */
		/* Use the entryid instead to calculate log size below. */
		printf("EventLog entries=%d, size=%d, enabled=%d\n",
			info.Entries,info.Size,info.Enabled);
	}

	entryid = SAHPI_OLDEST_ENTRY;
	while ((rv == SA_OK) && (entryid != SAHPI_NO_MORE_ENTRIES))
	{
		rv = saHpiEventLogEntryGet(sessionid,resourceid,entryid,
				&preventryid,&nextentryid,&sel,&rdr,NULL);
		if (fdebug) printf("saHpiEventLogEntryGet %s\n",
					decode_error(rv));
		if (rv == SA_OK) {
			ShowSel(&sel, &rdr, &rptentry);
			preventryid = entryid;
			entryid = nextentryid;
		}
	}
	if (preventryid >= 0xff80) {
	   int free;
	   /* 
	    * This test could be more generic if the log info fields above 
	    * were accurate.  IPMI SEL logs have a fixed size of 0x10000 
	    * bytes.  New log records are thrown away when it gets full.
	    * (OLDEST = 0, NO_MORE = fffffffe , so these are ok.)
	    */
	   free = (0x10000 - 20) - preventryid;
	   printf("WARNING: Log free space is very low (%d bytes)\n"
		  "         Clear log with hpisel -c\n",free);
	   }
	rptentryid = nextrptentryid;
     }
  }
 
  rv = saHpiSessionClose(sessionid);
  rv = saHpiFinalize();

  exit(0);
  return(0);
}
Пример #13
0
int testEventLog(SaHpiSessionIdT session_id, SaHpiResourceIdT resourceId, char *name)
{
    SaHpiEventLogEntryIdT prev_entry_id;
    SaHpiEventLogEntryIdT next_entry_id;
    SaHpiEventLogEntryT entry_get;
    SaHpiEventT entry_add;
    SaHpiRdrT rdr;
    SaHpiRptEntryT rpt_entry;
    SaHpiBoolT enable_old;
    SaHpiBoolT temporarly_disabled = SAHPI_FALSE;
    SaErrorT error;
    int retval = SAF_TEST_UNKNOWN;
    SaHpiEventLogInfoT info;

    /* Disable event log state, to ensure entry is newest eventlog entry */
    error = saHpiEventLogStateGet(session_id, resourceId, &enable_old);
    if (error != SA_OK) {
        retval = SAF_TEST_UNRESOLVED;
        e_print(saHpiEventLogStateGet, SA_OK, error);
    } else {
        if (enable_old) {
            error = saHpiEventLogStateSet(session_id, resourceId, SAHPI_FALSE);
            if (error == SA_OK) {
                temporarly_disabled = SAHPI_TRUE;
            } else {
                retval = SAF_TEST_UNRESOLVED;
                e_print(saHpiEventLogStateSet, SA_OK, error);
            }
        }

        if (retval == SAF_TEST_UNKNOWN) {
            error = saHpiEventLogInfoGet(session_id, resourceId, &info);
            if (error != SA_OK) {
                retval = SAF_TEST_UNRESOLVED;
                e_print(saHpiEventLogInfoGet, SA_OK, error);
            } else {
                if (info.Entries >= info.Size) {
                    // If the event log is full
                    error = saHpiEventLogClear(session_id, rpt_entry.ResourceId);
                    if (error != SA_OK) {
                        retval = SAF_TEST_UNRESOLVED;
                        e_print(saHpiEventLogInfoGet, SA_OK, error);
                    }
                }

                if (retval == SAF_TEST_UNKNOWN) {
                    entry_add.Source = SAHPI_UNSPECIFIED_RESOURCE_ID;
                    entry_add.EventType = SAHPI_ET_USER;
                    entry_add.Timestamp = SAHPI_TIME_UNSPECIFIED;
                    entry_add.Severity = SAHPI_OK;
                    memcpy(entry_add.EventDataUnion.UserEvent.UserEventData.Data,
                                       TEST_STR, sizeof(TEST_STR));
                    entry_add.EventDataUnion.UserEvent.UserEventData.DataType =
                        SAHPI_TL_TYPE_TEXT;
                    entry_add.EventDataUnion.UserEvent.UserEventData.Language =
                        SAHPI_LANG_ENGLISH;
                    entry_add.EventDataUnion.UserEvent.UserEventData.DataLength =
                        (SaHpiUint8T) sizeof(TEST_STR);

                    error = saHpiEventLogEntryAdd(session_id, resourceId, &entry_add);
                    if (error != SA_OK) {
                        retval = SAF_TEST_FAIL;
                        e_print(saHpiEventLogStateSet, SA_OK, error);
                    } else {
                        error = saHpiEventLogEntryGet(session_id, resourceId,
                                                      SAHPI_NEWEST_ENTRY, &prev_entry_id,
                                                      &next_entry_id, &entry_get, &rdr,
                                                      &rpt_entry);
                        if (error != SA_OK) {
                            retval = SAF_TEST_FAIL;
                            e_print(saHpiEventLogEntryGet, SA_OK, error);
                        } else if (!sameUserEvent(&entry_add, &entry_get.Event)) {
                            retval = SAF_TEST_FAIL;
                            m_print("Added event log entry is invalid! (%s)!", name);
                       } else {
                            retval = SAF_TEST_PASS;
                       }
                   }
                }
            }
        }

        // Clean-up
        if (temporarly_disabled) {
            error = saHpiEventLogStateSet(session_id, resourceId, enable_old);
            if (error != SA_OK) {
                e_print(saHpiEventLogStateSet, SA_OK, error);
            }
        }
    }

    return retval;
}
Пример #14
0
int main(int argc, char **argv)
{
        SaErrorT err;
	SaHpiRdrT rdr;
	SaHpiRptEntryT rpt;
	SaHpiSelEntryT logentry;
	SaHpiSelEntryIdT prev_logid, next_logid;
        SaHpiSessionIdT sessionid;
        SaHpiVersionT hpiVer;
	char *hash_key, *logstr;
	SnmpMibInfoT *hash_value;

	/* Setup Infra-structure */
        err = saHpiInitialize(&hpiVer);
        if (err != SA_OK) {
                printf("Error! saHpiInitialize: err=%d\n", err);
                return -1;
        }

        err = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID, &sessionid, NULL);
        if (err != SA_OK) {
	  printf("Error! saHpiSessionOpen: err=%d\n", err);
	  return -1;
        }
 
        err = saHpiResourcesDiscover(sessionid);
        if (err != SA_OK) {
	  printf("Error! saHpiResourcesDiscover: err=%d\n", err);
	  return -1;
        }

	/* If test OID not already in sim hash table; create it */
	if (!g_hash_table_lookup_extended(sim_hash, 
					  ERROR_LOG_MSG_OID,
					  (gpointer)&hash_key, 
					  (gpointer)&hash_value)) {

		hash_key = g_strdup(ERROR_LOG_MSG_OID);
		if (!hash_key) {
			printf("Error: Cannot allocate memory for oid key=%s\n", ERROR_LOG_MSG_OID);
			return -1;
		}
		
		hash_value = g_malloc0(sizeof(SnmpMibInfoT));
		if (!hash_value) {
			printf("Cannot allocate memory for hash value for oid=%s", ERROR_LOG_MSG_OID);
			return -1;
		}
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/************************************************************
	 * TestCase - Mapped Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Event recovered in next testcase
	 ************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == CHASSIS_RID) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Mapped Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Chassis Recovery Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Recover event in previous testcase
	 *************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == CHASSIS_RID) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_FALSE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Chassis Recovery Event (EN_CUTOFF_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Chassis Duplicate Event ( EN_PFA_HI_FAULT_3_35V)
         * Previous state check depends on previous testcase!
	 *************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended voltage on +3.3v. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == CHASSIS_RID) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Interpreted.Value.SensorFloat32 == (float)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Interpreted.Value.SensorFloat32 == (float)3.4))) {
		printf("Error! TestCase - Chassis Duplicate Event ( EN_PFA_HI_FAULT_3_35V)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/*************************************************************
	 * TestCase - Non-mapped Event (Severity=INFO)
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_01  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus message not in string to event table";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == CHASSIS_RID)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Non-mapped Event (Severity=INFO)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Better to test a mapped login event - don't have one yet */
	/*************************************************************
	 * TestCase - Non-mapped Login Event (Severity=WARN)
	 *************************************************************/
	logstr = "Severity:WARN  Source:SWITCH_4  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus login message Login ID:\'\'myid\' @ someaddress\'";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == CHASSIS_RID)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_MINOR))) {
		printf("Error! TestCase - Non-mapped Login Event (Severity=WARN)\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/************************************
	 * Drive some error paths in the code
         ************************************/ 

	/******************************************************************
	 * TestCase - Bogus threshold strings
 	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Bogus Read value 3.5 Bogus Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/* Check expected values */
	if (!(((logentry.Event.Source == CHASSIS_RID)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Bogus threshold strings\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/******************************************************************
	 * TestCase - Recovery string not first character of text string
         * (blank is first character). Should not treat as a recovery event
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text: Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == CHASSIS_RID)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - Recovery string not first character of text string\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/******************************************************************
	 * TestCase - In string table but not mapped
         * Uses special defined Test event in rsa_str2event.c
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus Test Event.";
	memset(&logentry, 0 , sizeof(SaHpiSelEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, SAHPI_DEFAULT_DOMAIN_ID, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogEntryGet: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == CHASSIS_RID)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("Error! TestCase - In string table but not mapped\n");
		print_event(&(logentry.Event));
		return -1;
	}

	err = saHpiEventLogClear(sessionid, SAHPI_DEFAULT_DOMAIN_ID);
	if (err != SA_OK) {
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
	
	/****************** 
	 * End of testcases 
         ******************/

        err = saHpiSessionClose(sessionid);
        if (err != SA_OK) {
	  printf("Error! saHpiSessionClose: err=%d\n", err);
	  return -1;
        }

        err = saHpiFinalize();
        if (err != SA_OK) {
	  printf("Error! saHpiFinalize: err=%d\n", err);
	  return -1;
        }

        return 0;
}
Пример #15
0
int test_res(SaHpiSessionIdT session, SaHpiResourceIdT resource)
{
	SaErrorT status;
	int retval = SAF_TEST_UNKNOWN;
	SaHpiEventLogEntryIdT PrevLogEntry;
	SaHpiEventLogEntryIdT NextLogEntry;
	SaHpiEventLogEntryT LogEntry;
	SaHpiEventT EvtEntry;
	SaHpiEventLogInfoT info;
	SaHpiBoolT savedState;

	status = saHpiEventLogStateGet(session, resource, &savedState);
	if (status != SA_OK) {
		e_print(saHpiEventLogStateGet, SA_OK, status);
		return SAF_TEST_UNRESOLVED;
	}

	status = saHpiEventLogStateSet(session, resource, SAHPI_FALSE);
	if (status != SA_OK) {
		e_print(saHpiEventLogStateSet, SA_OK, status);
		return SAF_TEST_UNRESOLVED;
	}
	//
	//  Check to see if there needs to be an eventlog entry added.
	// 
	status = saHpiEventLogInfoGet(session, resource, &info);
	if (status != SA_OK) {
		// Even if this resource does not work, others will
		e_print(saHpiEventLogInfoGet, SA_OK, status);
		retval = SAF_TEST_NOTSUPPORT;
	} else {
		if (info.Size == 0)
			retval = SAF_TEST_NOTSUPPORT;
		else {
			if (info.Entries == info.Size) {
				status = saHpiEventLogClear(session, resource);
				if (status != SA_OK) {
					e_print(saHpiEventLogClear, SA_OK,
						status);
					retval = SAF_TEST_UNRESOLVED;
				}
			}

			if (retval == SAF_TEST_UNKNOWN) {
				EvtEntry.EventType = SAHPI_ET_USER;
				EvtEntry.Source = SAHPI_UNSPECIFIED_RESOURCE_ID;
				EvtEntry.Timestamp = SAHPI_TIME_UNSPECIFIED;
				EvtEntry.Severity = SAHPI_OK;
				strncpy(EvtEntry.EventDataUnion.UserEvent.
					UserEventData.Data, TEST_STRING,
					TEST_STRING_LENGTH);
				EvtEntry.EventDataUnion.UserEvent.UserEventData.
				    DataLength = TEST_STRING_LENGTH;
				EvtEntry.EventDataUnion.UserEvent.UserEventData.
				    Language = SAHPI_LANG_ENGLISH;
				EvtEntry.EventDataUnion.UserEvent.UserEventData.
				    DataType = SAHPI_TL_TYPE_TEXT;

				status = saHpiEventLogEntryAdd(session,
							       resource,
							       &EvtEntry);

				if (status == SA_ERR_HPI_INVALID_DATA) {
					retval = SAF_TEST_NOTSUPPORT;
				} else if (status == SA_ERR_HPI_OUT_OF_SPACE) {
					retval = SAF_TEST_NOTSUPPORT;
				} else if (status != SA_OK) {
					retval = SAF_TEST_UNRESOLVED;
					e_print(saHpiEventLogEntryAdd,
						SA_OK
						|| SA_ERR_HPI_INVALID_DATA,
						status);
				}
			}
		}
	}

	if (retval == SAF_TEST_UNKNOWN) {
		status = saHpiEventLogEntryGet(session,
					       resource,
					       SAHPI_NEWEST_ENTRY,
					       &PrevLogEntry,
					       &NextLogEntry,
					       &LogEntry, NULL, NULL);
		if (status != SA_OK) {
			e_print(saHpiEventLogEntryGet, SA_OK, status);
			retval = SAF_TEST_FAIL;
		} else if (sameUserEvent(&EvtEntry, &LogEntry.Event))
			retval = SAF_TEST_PASS;
		else {
			m_print("Didn't get the same event that was added!");
			retval = SAF_TEST_FAIL;
		}

		status = saHpiEventLogClear(session, resource);
		if (status != SA_OK)
			e_print(saHpiEventLogClear, SA_OK, status);

		status = saHpiEventLogStateSet(session, resource, savedState);
		if (status != SA_OK)
			e_print(savedState, SA_OK, status);
	}

	return (retval);
}
Пример #16
0
int main(int argc, char **argv)
{
        int c;
	oh_big_textbuffer bigbuf2;
        SaErrorT rv, rv_2;
        SaHpiVersionT hpiVer;
        SaHpiSessionIdT sessionid;
        
        /* Domain */
        SaHpiDomainInfoT domainInfo;

        SaHpiRptEntryT rptentry;
        SaHpiEntryIdT rptentryid;
        SaHpiEntryIdT nextrptentryid;
        SaHpiResourceIdT resourceid;
        SaHpiEventLogEntryIdT entryid;
        SaHpiEventLogEntryIdT nextentryid;
        SaHpiEventLogEntryIdT preventryid;
        SaHpiEventLogInfoT info;
        SaHpiEventLogEntryT  el;
        SaHpiRdrT rdr, *rdrptr;
	SaHpiRptEntryT rpt_2nd, *rptptr;

        int free = 50;

        printf("%s: version %s\n",argv[0],progver);

        while ( (c = getopt( argc, argv,"cdpx?")) != EOF )
                switch(c) {
                case 'c': fclear = 1; break;
                case 'd': frdr   = 1; break;
                case 'p': frpt   = 1; break;				
                case 'x': fdebug = 1; break;
                default:
                        printf("\n\n\nUsage %s [-cdpx]\n",argv[0]);
			printf("    Where                             \n");
                        printf("        -c clears the event log\n");
			printf("        -d also get RDR with the event log\n");
			printf("        -p also get RPT with the event log\n");
                        printf("        -x displays eXtra debug messages\n\n\n");
                        exit(1);
                }
	
	
	/* 
	 * House keeping:
	 * 	-- get (check?) hpi implementation version
	 *      -- open hpi session	
	 */
	if (fdebug) printf("saHpiVersionGet\n");
	hpiVer = saHpiVersionGet();
	printf("Hpi Version %d Implemented.\n", hpiVer);
	
        rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL);
        if (rv != SA_OK) {
                if (rv == SA_ERR_HPI_ERROR) 
                        printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv);
                else
                        printf("saHpiSessionOpen: %s\n", oh_lookup_error(rv));
                exit(-1);
        }

        rv = saHpiDiscover(sessionid);
        if (fdebug) printf("saHpiResourcesDiscover %s\n", oh_lookup_error(rv));
	

        rv = saHpiDomainInfoGet(sessionid, &domainInfo);

        if (fdebug) printf("saHpiDomainInfoGet %s\n", oh_lookup_error(rv));
        printf("DomainInfo: UpdateCount = %d, UpdateTime = %lx\n",
               domainInfo.RptUpdateCount, (unsigned long)domainInfo.RptUpdateTimestamp);

        /* walk the RPT list */
        rptentryid = SAHPI_FIRST_ENTRY;
        while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY))
	{
		rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry);

		if (fdebug)
			printf("saHpiRptEntryGet %s\n", oh_lookup_error(rv));
			    
		if (rv == SA_OK) {
			resourceid = rptentry.ResourceId;
				    
			if (fdebug)
				printf("RPT %d capabilities = %x\n", resourceid,
						   rptentry.ResourceCapabilities);
				    
			if (!(rptentry.ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
					    
				if (fdebug) printf("RPT doesn't have SEL\n");
				rptentryid = nextrptentryid;
				continue;  /* no SEL here, try next RPT */
			}
				    
			rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0;
	
			rv_2 = oh_init_bigtext(&bigbuf2);
			if (rv_2) return(rv_2);
			rv  = oh_decode_entitypath(&rptentry.ResourceEntity, &bigbuf2);
			printf("%s\n", bigbuf2.Data);
			printf("rptentry[%d] tag: %s\n", resourceid,rptentry.ResourceTag.Data);
				    
			/* initialize structure */
			info.Entries = 0;
			info.Size = 0;
			info.Enabled = 0;
				    
			rv_2 = saHpiEventLogInfoGet(sessionid,resourceid,&info);
			
			if (fdebug)
				printf("saHpiEventLogInfoGet %s\n", oh_lookup_error(rv));
			if (rv_2 == SA_OK) {
				printf("EventLogInfo for %s, ResourceId %d\n",
						rptentry.ResourceTag.Data, resourceid);
				oh_print_eventloginfo(&info, 4);
			} else { 
				printf("saHpiEventLogInfoGet %s\n", oh_lookup_error(rv_2));
			}
				    
			if (fclear) {
				rv = saHpiEventLogClear(sessionid,resourceid);
				if (rv == SA_OK)
					printf("EventLog successfully cleared\n");
				else
					printf("EventLog clear, error = %d, %s\n", rv, oh_lookup_error(rv));
				break;
			}
				    
			if (info.Entries != 0){
				entryid = SAHPI_OLDEST_ENTRY;
				while ((rv == SA_OK) && (entryid != SAHPI_NO_MORE_ENTRIES))
				{
				
					if (frdr) rdrptr = &rdr;
						else rdrptr = NULL;
					
					if (frpt) rptptr = &rpt_2nd;
						else rptptr = NULL;
						
						
					if(fdebug) printf("rdrptr %p, rptptr %p\n", rdrptr, rptptr);
					rv = saHpiEventLogEntryGet(sessionid,resourceid,
								entryid,&preventryid,
								&nextentryid, &el,rdrptr,rptptr);
								
					if (fdebug) printf("saHpiEventLogEntryGet %s\n",
							    			oh_lookup_error(rv));
								   
					if (rv == SA_OK) {
						oh_print_eventlogentry(&el, 6);
						if (frdr) {
							if (rdrptr->RdrType == SAHPI_NO_RECORD)
								printf("            No RDR associated with EventType =  %s\n\n", 
									 oh_lookup_eventtype(el.Event.EventType));
							else	
								oh_print_rdr(rdrptr, 12);
						}
						if (frpt) {
							if (rptptr->ResourceCapabilities == 0)
								printf("            No RPT associated with EventType =  %s\n\n", 
									 oh_lookup_eventtype(el.Event.EventType));							
							else 
								oh_print_rptentry(rptptr, 10);
						}

						preventryid = entryid;
						entryid = nextentryid;
					}
				}
				
			} else
				printf("\tSEL is empty.\n\n");
				    
			if (free < 6) {
				printf("WARNING: Log free space is very low (%d records)\n",free);
				printf("\tClear log with hpiel -c\n");
			}
		}		    
		rptentryid = nextrptentryid;
	}
	
	
	printf("done.\n");
        rv = saHpiSessionClose(sessionid);
	return(0);
}
Пример #17
0
int main(int argc, char **argv)
{
        SaErrorT err;
	SaHpiRdrT rdr;
	SaHpiEntryIdT rptid, next_rptid;
	SaHpiRptEntryT rpt;
	SaHpiResourceIdT chassis_rid=0;
	SaHpiEventLogEntryT logentry;
	SaHpiEventLogEntryIdT prev_logid, next_logid;
        SaHpiSessionIdT sessionid;
	char *hash_key, *logstr;
	SnmpMibInfoT *hash_value;

        err = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sessionid, NULL);
        if (err) {
	  printf("  Error! Testcase failed. Line=%d\n", __LINE__);
	  printf("  Received error=%s\n", oh_lookup_error(err));
	  return -1;
        }
 
        err = saHpiDiscover(sessionid);
        if (err) {
	  printf("  Error! Testcase failed. Line=%d\n", __LINE__);
	  printf("  Received error=%s\n", oh_lookup_error(err));
	  return -1;
        }

	/* Find first Event Log capable resource - assume its the chassis */
	rptid = SAHPI_FIRST_ENTRY;
	while ((err == SA_OK) && (rptid != SAHPI_LAST_ENTRY))
	{
		err = saHpiRptEntryGet(sessionid, rptid, &next_rptid, &rpt);
		if (err) {
			printf("  Error! Testcase failed. Line=%d\n", __LINE__);
			printf("  Received error=%s\n", oh_lookup_error(err));
			return -1;
		}
		
		if ((rpt.ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
			chassis_rid = rpt.ResourceId;
			break;
		}
		else {
			rptid = next_rptid;
			continue;
		}
	}
	if (chassis_rid == 0) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Cannot find Chassis RID\n");
		return -1;
	}

	/* If test OID not already in sim hash table; create it */
	if (!g_hash_table_lookup_extended(sim_hash, 
					  SNMP_BC_ERROR_LOG_MSG_OID,
					  (gpointer)&hash_key, 
					  (gpointer)&hash_value)) {

		hash_key = g_strdup(SNMP_BC_ERROR_LOG_MSG_OID);
		if (!hash_key) {
			printf("  Error! Testcase failed. Line=%d\n", __LINE__);
			printf("  Cannot allocate memory for OID key=%s.\n", SNMP_BC_ERROR_LOG_MSG_OID);
			return -1;
		}
		
		hash_value = g_malloc0(sizeof(SnmpMibInfoT));
		if (!hash_value) {
			printf("  Error! Testcase failed. Line=%d\n", __LINE__);
			printf("  Cannot allocate memory for hash value for OID=%s.\n", SNMP_BC_ERROR_LOG_MSG_OID);
			return -1;
		}
	}
#if 0
	printf("Calling Clear\n");
#endif
	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		
		printf("Error! saHpiEventLogClear: line=%d; err=%d\n", __LINE__, err);
		return -1;
        }
#if 0
	printf("Calling EntryGet\n");
#endif
	/************************************************************
	 * TestCase - Mapped Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Event recovered in next testcase
	 ************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/**************************************************************
	 * TestCase - Chassis Recovery Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Recover event in previous testcase.
	 **************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_FALSE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/******************************************************
	 * TestCase - Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Change sensor reading to LOWER MAJOR. Previous state 
         * depends upon previous testcase.
	 ******************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

	/* Change sensor's simulator value */ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "2.9 Volts");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_VOLT_3_3_OID, &hash_set_value);
	}

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_LOWER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_LOWER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_LOWER_MAJOR) &&      
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/* Set sensor's simulator value back to default*/ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "3.3 Volts");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_VOLT_3_3_OID, &hash_set_value);
	}

	/**************************************************************
	 * TestCase - Chassis Event (EN_CUTOFF_HI_FAULT_3_35V)
         * Change sensor reading to UPPER MAJOR. Previous state  
         * depends upon previous testcase.
	 **************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

	/* Change sensor's simulator value */ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "3.5 Volts");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_VOLT_3_3_OID, &hash_set_value);
	}

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_LOWER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_LOWER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_LOWER_MINOR) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/* Set sensor's simulator value back to default*/ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "3.3 Volts");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_VOLT_3_3_OID, &hash_set_value);
	}

	/*************************************************************
	 * TestCase - Chassis Duplicate Event (EN_PFA_HI_FAULT_3_35V)
         * Previous state check depends on previous testcase!
	 *************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended voltage on +3.3v. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/*************************************************************
	 * TestCase - Blade Duplicate Event ( EN_PFA_HI_FAULT_3_35V)
         * Same as previous testcase only for the blade not chassis
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_11  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended voltage on +3.3v. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_VOLTAGE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)3.5) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)3.4))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/**************************************************************
	 * TestCase - Chassis Temperature (EN_PFA_HI_OVER_TEMP_AMBIENT)
         * Set at nominal temperature value.
	 **************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended ambient temperature.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

	/* Change sensor's simulator value */ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "60 Centigrade");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_TEMP_OID, &hash_set_value);
	}

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/**************************************************************
	 * TestCase - Chassis Temperature (EN_PFA_HI_OVER_TEMP_AMBIENT)
         * Set above warning level.
	 **************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System over recommended ambient temperature.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

	/* Change sensor's simulator value */ 
	{
		SnmpMibInfoT hash_set_value;
		hash_set_value.type = ASN_OCTET_STR;
		strcpy(hash_set_value.value.string, "61 Centigrade");
		g_hash_table_insert(sim_hash, SNMP_BC_CHASSIS_TEMP_OID, &hash_set_value);
	}

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((logentry.Event.Source == chassis_rid) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState & SAHPI_ES_UPPER_MINOR))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/*************************************************************
	 * TestCase - Non-mapped Event (Severity=INFO)
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_01  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus message not in string to event table";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/*************************************************************
	 * TestCase - Expansion Card Event (EN_PFA_HI_OVER_TEMP_DASD1)
	 *************************************************************/
	logstr = "Severity:INFO  Source:BLADE_07  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:BSE Option over recommended temperature. Read value 87 Threshold value 75";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (!(logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_CRIT)) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MAJOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_UPPER_MINOR) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_UNSPECIFIED) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerReading.Value.SensorFloat64 == (double)87) &&
	      (logentry.Event.EventDataUnion.SensorEvent.TriggerThreshold.Value.SensorFloat64 == (double)75))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/* Better to test a mapped login event - BC doesn't seem to have one defined yet */
	/*************************************************************
	 * TestCase - Non-mapped Login Event (Severity=WARN)
	 *************************************************************/
	logstr = "Severity:WARN  Source:SWITCH_4  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus login message Login ID:\'\'myid\' @ someaddress\'";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_MINOR))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/***********************************************************
	 * TestCase - Power over temperature (EN_FAULT_PSx_OVR_TEMP)
         * This is a non-readable sensor. Recover in next testcase.
	 ***********************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Power Supply 1 Temperature Fault";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_TRUE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_OK) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_CRITICAL))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/***********************************************************
	 * TestCase - Power over temperature (EN_FAULT_PSx_OVR_TEMP)
         * This is a non-readable sensor. Recover previous testcase.
	 ***********************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery Power Supply 1 Temperature Fault";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_SENSOR) &&
	      (logentry.Event.Severity == SAHPI_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.SensorType == SAHPI_TEMPERATURE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.Assertion == SAHPI_FALSE) &&
	      (logentry.Event.EventDataUnion.SensorEvent.EventState & SAHPI_ES_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.PreviousState == SAHPI_ES_CRITICAL) &&
	      (logentry.Event.EventDataUnion.SensorEvent.CurrentState == SAHPI_ES_MAJOR_FROM_LESS))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/*************************************************************
	 * TestCase - Hotswap switch installed (EN_SWITCH_3_INSTALLED) 
	 *************************************************************/
	logstr = "Severity:INFO  Source:SWITCH_3  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:I/O module 3 was installed.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_ACTIVE) && 
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_ACTIVE))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/****************************************************************
	 * TestCase - hotswap Media Tray removal (EN_MEDIA_TRAY_REMOVED)
         * This event is recovered in the next testcase. Should be
         * MAJOR severity, since this is an unexpected failure.
	 ****************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:The media tray was removed.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_MAJOR) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_NOT_PRESENT) && 
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_ACTIVE))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/****************************************************************
	 * TestCase - hotswap Media Tray recovery (EN_MEDIA_TRAY_REMOVED)
         * Recovery of previous event.
	 ****************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Recovery The media tray was removed.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!((!(logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_HOTSWAP) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.HotSwapState == SAHPI_HS_STATE_ACTIVE) &&
	      (logentry.Event.EventDataUnion.HotSwapEvent.PreviousHotSwapState == SAHPI_HS_STATE_NOT_PRESENT))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/************************************
	 * Drive some error paths in the code
         ************************************/ 

	/******************************************************************
	 * TestCase - Bogus threshold strings
 	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:System shutoff due to +3.3v over voltage. Bogus Read value 3.5 Bogus Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }
	
	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/******************************************************************
	 * TestCase - Recovery string not first character of text string
         * (blank is first character). Should not treat as a recovery event
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text: Recovery System shutoff due to +3.3v over voltage. Read value 3.5 Threshold value 3.4";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/******************************************************************
	 * TestCase - In string table but not mapped
         * Uses special defined Test event in bc_str2event.c
	 ******************************************************************/
	logstr = "Severity:INFO  Source:SERVPROC  Name:WMN315702424  Date:10/11/03  Time:09:09:46  Text:Bogus Test Event.";
	memset(&logentry, 0 , sizeof(SaHpiEventLogEntryT));
	strcpy(hash_value->value.string, logstr);
	g_hash_table_insert(sim_hash, hash_key, hash_value);

        err = saHpiEventLogEntryGet(sessionid, chassis_rid, SAHPI_NEWEST_ENTRY,
				    &prev_logid, &next_logid, &logentry, &rdr, &rpt);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/* Check expected values */
	if (!(((logentry.Event.Source == chassis_rid)) &&
	      (logentry.Event.EventType == SAHPI_ET_OEM) &&
	      (logentry.Event.Severity == SAHPI_INFORMATIONAL))) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		oh_print_event(&(logentry.Event), 1);
		return -1;
	}

	err = saHpiEventLogClear(sessionid, chassis_rid);
	if (err) {
		printf("  Error! Testcase failed. Line=%d\n", __LINE__);
		printf("  Received error=%s\n", oh_lookup_error(err));
		return -1;
        }

	/****************** 
	 * End of testcases 
         ******************/

        err = saHpiSessionClose(sessionid);
        if (err) {
	  printf("Error! saHpiSessionClose: err=%d\n", err);
	  return -1;
        }

        return 0;
}
Пример #18
0
int main(int argc, char **argv)
{
        int c;
        SaErrorT rv;
        SaHpiVersionT hpiVer;
        SaHpiSessionIdT sessionid;
        SaHpiRptInfoT rptinfo;
        SaHpiRptEntryT rptentry;
        SaHpiEntryIdT rptentryid;
        SaHpiEntryIdT nextrptentryid;
        SaHpiResourceIdT resourceid;
        SaHpiSelEntryIdT entryid;
        SaHpiSelEntryIdT nextentryid;
        SaHpiSelEntryIdT preventryid;
        SaHpiSelInfoT info;
        SaHpiSelEntryT  sel;
        SaHpiRdrT rdr;
	int free = 50;
        
        printf("%s: version %s\n",argv[0],progver); 
        
        while ( (c = getopt( argc, argv,"cx?")) != EOF )
                switch(c) {
                case 'c': fclear = 1; break;
                case 'x': fdebug = 1; break;
                default:
                        printf("Usage %s [-cx]\n",argv[0]);
                        printf("where -c clears the event log\n");
                        printf("      -x displays eXtra debug messages\n");
                        exit(1);
                }
        rv = saHpiInitialize(&hpiVer);
        if (rv != SA_OK) {
                printf("saHpiInitialize: %s\n",decode_error(rv));
                exit(-1);
        }
        rv = saHpiSessionOpen(SAHPI_DEFAULT_DOMAIN_ID,&sessionid,NULL);
        if (rv != SA_OK) {
                if (rv == SA_ERR_HPI_ERROR) 
                        printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv);
                else
                        printf("saHpiSessionOpen: %s\n",decode_error(rv));
                exit(-1);
        }
 
        rv = saHpiResourcesDiscover(sessionid);
        if (fdebug) printf("saHpiResourcesDiscover %s\n",decode_error(rv));
        rv = saHpiRptInfoGet(sessionid,&rptinfo);
        if (fdebug) printf("saHpiRptInfoGet %s\n",decode_error(rv));
        printf("RptInfo: UpdateCount = %d, UpdateTime = %lx\n",
               rptinfo.UpdateCount, (unsigned long)rptinfo.UpdateTimestamp);
        
        /* walk the RPT list */
        rptentryid = SAHPI_FIRST_ENTRY;
        while ((rv == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY))
				{
	    	            rv = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry);
						
    	    	        if (fdebug)
								printf("saHpiRptEntryGet %s\n",decode_error(rv));
						
                		if (rv == SA_OK) {
								resourceid = rptentry.ResourceId;
								
								if (fdebug)
										printf("RPT %d capabilities = %x\n", resourceid,
                                        				   rptentry.ResourceCapabilities);
								
								if (!(rptentry.ResourceCapabilities & SAHPI_CAPABILITY_SEL)) {
										if (fdebug)
												printf("RPT doesn't have SEL\n");
										rptentryid = nextrptentryid;
										continue;  /* no SEL here, try next RPT */
								}

								rptentry.ResourceTag.Data[rptentry.ResourceTag.DataLength] = 0; 
								printf("rptentry[%d] tag: %s\n", resourceid,rptentry.ResourceTag.Data);

								/* initialize structure */
								info.Entries = 0;
								info.Size = 0;
								info.Enabled = 0;

								rv = saHpiEventLogInfoGet(sessionid,resourceid,&info);
		                        if (fdebug)
										printf("saHpiEventLogInfoGet %s\n",decode_error(rv));
								if (rv == SA_OK) {
										char date[30];
										printf("EventLog entries=%d, size=%d, enabled=%d\n",
														info.Entries,info.Size,info.Enabled);
										free = info.Size - info.Entries;
										saftime2str(info.UpdateTimestamp,date,30);
										printf("UpdateTime = %s, ", date);
										saftime2str(info.CurrentTime,date,30);
										printf("CurrentTime = %s\n", date);
										printf("Overflow = %d\n", info.OverflowFlag);
										printf("DeleteEntrySupported = %d\n", info.DeleteEntrySupported);
								}

								if (fclear) {
										rv = saHpiEventLogClear(sessionid,resourceid);
										if (rv == SA_OK)
												printf("EventLog successfully cleared\n");
										else 
												printf("EventLog clear, error = %d, %s\n",rv, decode_error(rv));
										break;
								}

								if (info.Entries != 0){
										entryid = SAHPI_OLDEST_ENTRY;
										while ((rv == SA_OK) && (entryid != SAHPI_NO_MORE_ENTRIES))
												{
														rv = saHpiEventLogEntryGet(sessionid,resourceid,
																		entryid,&preventryid,&nextentryid,
																		&sel,&rdr,NULL);
														if (fdebug)
																printf("saHpiEventLogEntryGet %s\n",
																				decode_error(rv));
														if (rv == SA_OK) {

																ShowSel(&sel, &rdr, &rptentry);
																preventryid = entryid;
																entryid = nextentryid;
														}
												}
								} else
										printf("SEL is empty\n");

								if (free < 6) {
										printf("WARNING: Log free space is very low (%d records)\n",free);
										printf("\tClear log with hpisel -c\n");
								}

								rptentryid = nextrptentryid;
						}
				}
		printf("done.\n"); 
		rv = saHpiSessionClose(sessionid);
		rv = saHpiFinalize();

//		exit(0);

		return(0);
}
Пример #19
0
SaErrorT show_event_log(SaHpiSessionIdT sessionid, SaHpiResourceIdT resourceid,
	int show_short, hpi_ui_print_cb_t proc)
{
	SaErrorT		rv = SA_OK;
	SaHpiRptEntryT		rptentry;
	SaHpiEntryIdT		rptentryid;
	SaHpiEntryIdT		nextrptentryid;
	SaHpiEventLogInfoT	info;
	SaHpiEventLogEntryIdT	entryid;
	SaHpiEventLogEntryIdT	nextentryid;
	SaHpiEventLogEntryIdT	preventryid;
	SaHpiEventLogEntryT	sel;
	SaHpiRdrT		rdr;
	char			buf[1024];
	char			date[30], date1[30];

	rptentryid = SAHPI_FIRST_ENTRY;
	while (rptentryid != SAHPI_LAST_ENTRY) {
		rv = saHpiRptEntryGet(sessionid, rptentryid, &nextrptentryid, &rptentry);
		if (rv != SA_OK) {
			snprintf(buf, 1024, "ERROR: saHpiRptEntryGet error = %s\n",
				oh_lookup_error(rv));
			proc(buf);
			return rv;
		};
		if (rptentry.ResourceId == resourceid) {
			if (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)
				break;
			else {
				proc("ERROR: The designated resource hasn't SEL.\n");
				return rv;
			}
		};
		rptentryid = nextrptentryid;
	}
	if (rptentryid == SAHPI_LAST_ENTRY) {
		snprintf(buf, 1024, "ERROR: no resource for resourceId = %d\n", resourceid);
		proc(buf);
		return rv;
	}

	rv = saHpiEventLogInfoGet(sessionid, resourceid, &info);
	if (rv != SA_OK) {
		snprintf(buf, 1024, "ERROR: saHpiEventLogInfoGet error = %s\n",
			oh_lookup_error(rv));
		proc(buf);
		return -1;
	}
	snprintf(buf, 1024, "EventLog: entries = %d, size = %d, enabled = %d\n",
		info.Entries, info.Size, info.Enabled);
	proc(buf);
	time2str(info.UpdateTimestamp, date, 30);
	time2str(info.CurrentTime, date1, 30);
	snprintf(buf, 1024, "UpdateTime = %s  CurrentTime = %s  Overflow = %d\n",
		date, date1, info.OverflowFlag);
	proc(buf);

	if (info.Entries != 0){
		entryid = SAHPI_OLDEST_ENTRY;
		while (entryid != SAHPI_NO_MORE_ENTRIES)
		{
			rv = saHpiEventLogEntryGet(sessionid, resourceid,
					entryid, &preventryid, &nextentryid,
					&sel, &rdr, NULL);
			if (rv != SA_OK) {
				snprintf(buf, 1024, "ERROR: saHpiEventLogEntryGet error = %s\n",
					oh_lookup_error(rv));
				proc(buf);
				return -1;
			};
			if (show_short)
				show_short_event(&(sel.Event));
			else
				oh_print_eventlogentry(&sel, 1);

			preventryid = entryid;
			entryid = nextentryid;
		}
	} else {
		snprintf(buf, 1024, "SEL is empty\n");
		proc(buf);
	};
	return SA_OK;
}
Пример #20
0
cOpenHpiDaemon::tResult
cOpenHpiDaemon::HandleMsg( cConnection *c, 
			   const cMessageHeader &header, const void *data,
			   cMessageHeader &rh, void *&rd )
{
  cHpiMarshal *hm = HpiMarshalFind( header.m_id );

  // check for function and data length
  if ( !hm || hm->m_request_len < header.m_len )
     {
       //MessageHeaderInit( &rh, eMhError, header.m_seq, 0, 0 );
       //rd = 0;

       fprintf( stderr, "wrong message length: id %d !\n", header.m_id );

       return eResultError;
     }

  assert( hm->m_reply_len );

  // init reply header
  MessageHeaderInit( &rh, eMhReply, header.m_seq, header.m_id, hm->m_reply_len );

  // alloc reply buffer
  rd = calloc( 1, hm->m_reply_len );

  SaErrorT ret;

  switch( header.m_id )
     {
       case eFsaHpiSessionOpen:
	    {
	      SaHpiDomainIdT domain_id;
	      SaHpiSessionIdT session_id = 0;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data, (void *)&domain_id );

	      ret = saHpiSessionOpen( domain_id, &session_id, 0 );

	      DbgFunc( "saHpiSessionOpen( %x, %x ) = %d\n",
                       domain_id, session_id, ret );

	      if ( ret == SA_OK )
		   c->AddSession( session_id );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &session_id );
	    }
 
	    break;

       case eFsaHpiSessionClose:
	    {
	      SaHpiSessionIdT session_id;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data, &session_id );

	      ret = saHpiSessionClose( session_id );

	      DbgFunc( "saHpiSessionClose( %x ) = %d\n", session_id, ret );

	      if ( ret == SA_OK )
		   c->RemSession( session_id );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiResourcesDiscover:
	    {
	      SaHpiSessionIdT session_id;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data, &session_id );

	      ret = saHpiResourcesDiscover( session_id );

	      DbgFunc( "saHpiResourcesDiscover( %x ) = %d\n", session_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;
    
       case eFsaHpiRptInfoGet:
	    {
	      SaHpiSessionIdT session_id;
              SaHpiRptInfoT rpt_info;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data, &session_id );

	      ret = saHpiRptInfoGet( session_id, &rpt_info );

	      DbgFunc( "saHpiRptInfoGet( %x ) = %d\n", session_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &rpt_info );
	    }

	    break;

       case eFsaHpiRptEntryGet:
	    {
	      SaHpiSessionIdT session_id;
              SaHpiEntryIdT   entry_id;
              SaHpiEntryIdT   next_entry_id;
              SaHpiRptEntryT  rpt_entry;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
                                    &session_id, &entry_id );

	      ret = saHpiRptEntryGet( session_id, entry_id, &next_entry_id, &rpt_entry );

	      DbgFunc( "saHpiRptEntryGet( %x, %x, %x ) = %d\n",
                       session_id, entry_id, next_entry_id, ret );

	      rh.m_len = HpiMarshalReply2( hm, rd, &ret, &next_entry_id, &rpt_entry );
	    }

	    break;

       case eFsaHpiRptEntryGetByResourceId:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiRptEntryT   rpt_entry;
	      
	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiRptEntryGetByResourceId( session_id, resource_id, &rpt_entry );

	      DbgFunc( "saHpiRptEntryGetByResourceId( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &rpt_entry );
	    }

	    break;

       case eFsaHpiResourceSeveritySet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSeverityT   severity;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &severity );

	      ret = saHpiResourceSeveritySet( session_id,
					      resource_id, severity );

	      DbgFunc( "saHpiResourceSeveritySet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiResourceTagSet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiTextBufferT resource_tag;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &resource_tag );

	      ret = saHpiResourceTagSet( session_id, resource_id,
					 &resource_tag );

	      DbgFunc( "saHpiResourceTagSet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiResourceIdGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id = 0;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data,
				    &session_id );

	      ret = saHpiResourceIdGet( session_id, &resource_id );

	      DbgFunc( "saHpiResourceIdGet( %x ) = %d, %x\n",
                       session_id, ret, resource_id );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &resource_id );
	    }

	    break;

       case eFsaHpiEntitySchemaGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiUint32T    schema_id = 0;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data,
				   &session_id );

	      ret = saHpiEntitySchemaGet( session_id, &schema_id );
	      
	      DbgFunc( "saHpiEntitySchemaGet( %x ) = %d, %x\n",
                       session_id, ret, schema_id );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &schema_id );
	    }
	    
	    break;

       case eFsaHpiEventLogInfoGet:
 	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSelInfoT    info;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id );

	      ret = saHpiEventLogInfoGet( session_id, resource_id, &info );

	      DbgFunc( "saHpiEventLogInfoGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &info );
	    }

	    break;

       case eFsaHpiEventLogEntryGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSelEntryIdT entry_id;
	      SaHpiSelEntryIdT prev_entry_id = 0;
	      SaHpiSelEntryIdT next_entry_id = 0;
	      SaHpiSelEntryT   event_log_entry;
	      SaHpiRdrT        rdr;
	      SaHpiRptEntryT   rpt_entry;

	      memset( &rdr, 0, sizeof( SaHpiRdrT ) );
	      memset( &rpt_entry, 0, sizeof( SaHpiRptEntryT ) );

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &entry_id );

	      ret = saHpiEventLogEntryGet( session_id, resource_id, entry_id,
					   &prev_entry_id, &next_entry_id,
					   &event_log_entry, &rdr, &rpt_entry );

	      DbgFunc( "saHpiEventLogEntryGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, entry_id, ret );

	      rh.m_len = HpiMarshalReply5( hm, rd, &ret, &prev_entry_id, &next_entry_id,
				&event_log_entry, &rdr, &rpt_entry );
	    }

	    break;

       case eFsaHpiEventLogEntryAdd:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSelEntryT   evt_entry;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &evt_entry );

	      ret = saHpiEventLogEntryAdd( session_id, resource_id,
					   &evt_entry );
	      
	      DbgFunc( "saHpiEventLogEntryAdd( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiEventLogEntryDelete:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSelEntryIdT entry_id;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &entry_id );

	      ret = saHpiEventLogEntryDelete( session_id, resource_id, entry_id );

	      DbgFunc( "saHpiEventLogEntryDelete( %x, %x, %x ) = %d\n",
                       session_id, resource_id, entry_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiEventLogClear:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiEventLogClear( session_id, resource_id );

	      DbgFunc( "saHpiEventLogClear( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiEventLogTimeGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiTimeT       ti;
	      
	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id );

	      ret = saHpiEventLogTimeGet( session_id, resource_id, &ti );

	      DbgFunc( "saHpiEventLogTimeGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &ti );
	    }

	    break;

       case eFsaHpiEventLogTimeSet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiTimeT       ti;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id , &ti );

	      ret = saHpiEventLogTimeSet( session_id, resource_id, ti );
 
	      DbgFunc( "saHpiEventLogTimeSet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiEventLogStateGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiBoolT       enable;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiEventLogStateGet( session_id, resource_id, &enable );

	      DbgFunc( "saHpiEventLogStateGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &enable );
	    }

	    break;

       case eFsaHpiEventLogStateSet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiBoolT       enable;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &enable );

	      ret = saHpiEventLogStateSet( session_id, resource_id, enable );
	      
	      DbgFunc( "saHpiEventLogStateSet( %x, %x, %s ) = %d\n",
                       session_id, resource_id, enable ? "true" : "false", ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiSubscribe:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiBoolT      provide_active_alarms;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &provide_active_alarms );

	      ret = saHpiSubscribe( session_id, provide_active_alarms );

	      DbgFunc( "saHpiSubscribe( %x, %s ) = %d\n",
                       session_id,  provide_active_alarms ? "true" : "false",
		       ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiUnsubscribe:
	    {
	      SaHpiSessionIdT session_id;

	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data,
				    &session_id );

	      ret = saHpiUnsubscribe( session_id );

	      DbgFunc( "saHpiUnsubscribe( %x ) = %d\n",
                       session_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiEventGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiTimeoutT   timeout;
	      SaHpiEventT     event;
	      SaHpiRdrT       rdr;
	      SaHpiRptEntryT  rpt_entry;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &timeout );

	      if ( timeout == 0 )
		 {
		   ret = saHpiEventGet( session_id, timeout, &event, &rdr, &rpt_entry );

		   DbgFunc( "saHpiEventGet( %x ) = %d\n",
			    session_id, ret );

		   rh.m_len = HpiMarshalReply3( hm, rd, &ret, &event, &rdr, &rpt_entry );
		 }
	      else
		 {
		   cSession *s = c->FindSession( session_id );

		   if ( s && !s->IsEventGet() )
		      {
			s->EventGet( true );

			SaHpiTimeT end;
			gettimeofday1( &end );

			if ( timeout == SAHPI_TIMEOUT_BLOCK )
			     end += (SaHpiTimeT)10000*1000000000; //set a long time
			else
			     end += timeout;

			s->Timeout() = end;

			s->Seq() = header.m_seq;

			DbgEvent( "saHpiEventGet( %x ): add to event listener.\n",
				  s->SessionId() );

			return eResultOk;
		      }

		   // error
		   ret = SA_ERR_HPI_BUSY;
		   rh.m_len = HpiMarshalReply3( hm, rd, &ret, &event, &rdr, &rpt_entry );
		 }
	    }

	    break;

       case eFsaHpiRdrGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiEntryIdT    entry_id;
	      SaHpiEntryIdT    next_entry_id;
	      SaHpiRdrT        rdr;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &entry_id );

	      ret = saHpiRdrGet( session_id, resource_id, entry_id,
				 &next_entry_id, &rdr );

	      DbgFunc( "saHpiRdrGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, entry_id, ret );

	      rh.m_len = HpiMarshalReply2( hm, rd, &ret, &next_entry_id, &rdr );
	    }

	    break;

       case eFsaHpiSensorReadingGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorReadingT reading;
	      
	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &sensor_num );

	      ret = saHpiSensorReadingGet( session_id, resource_id,
					   sensor_num, &reading );
	      
	      DbgFunc( "saHpiSensorReadingGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &reading );
	    }

	    break;

       case eFsaHpiSensorReadingConvert:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorReadingT reading_input;
	      SaHpiSensorReadingT converted_reading;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &sensor_num,
				    &reading_input );

	      ret = saHpiSensorReadingConvert( session_id,
					       resource_id, sensor_num,
					       &reading_input,
					       &converted_reading );

	      DbgFunc( "saHpiSensorReadingConvert( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &converted_reading );
	    }

	    break;

       case eFsaHpiSensorThresholdsGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorThresholdsT sensor_thresholds;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &sensor_num );

	      ret = saHpiSensorThresholdsGet( session_id,
					      resource_id, sensor_num,
					      &sensor_thresholds);

	      DbgFunc( "saHpiSensorThresholdsGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num,  ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &sensor_thresholds );
	    }

	    break;

       case eFsaHpiSensorThresholdsSet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorThresholdsT sensor_thresholds;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &sensor_num,
				   &sensor_thresholds );

	      ret = saHpiSensorThresholdsSet( session_id, resource_id,
					      sensor_num,
					      &sensor_thresholds );

	      DbgFunc( "saHpiSensorThresholdsSet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiSensorTypeGet:
	    {
	      SaHpiResourceIdT resource_id;
	      SaHpiSessionIdT  session_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorTypeT type;
	      SaHpiEventCategoryT category;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &sensor_num );

	      ret = saHpiSensorTypeGet( session_id, resource_id,
					sensor_num, &type, &category );

	      DbgFunc( "saHpiSensorTypeGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply2( hm, rd, &ret, &type, &category );
	    }

	    break;

       case eFsaHpiSensorEventEnablesGet:
	    {
	      SaHpiSessionIdT        session_id;
	      SaHpiResourceIdT       resource_id;
	      SaHpiSensorNumT        sensor_num;
	      SaHpiSensorEvtEnablesT enables;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &sensor_num );

	      ret = saHpiSensorEventEnablesGet( session_id, resource_id,
						sensor_num, &enables );

	      DbgFunc( "saHpiSensorEventEnablesGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &enables );
	    }

	    break;

       case eFsaHpiSensorEventEnablesSet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiSensorNumT  sensor_num;
	      SaHpiSensorEvtEnablesT enables;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &sensor_num,
				    &enables );

	      ret = saHpiSensorEventEnablesSet( session_id, resource_id,
						sensor_num, &enables );
	      
	      DbgFunc( "saHpiSensorEventEnablesSet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, sensor_num, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiControlTypeGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiCtrlNumT    ctrl_num;
	      SaHpiCtrlTypeT   type;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &ctrl_num );

	      ret = saHpiControlTypeGet( session_id, resource_id, ctrl_num,
					 &type );

	      DbgFunc( "saHpiControlTypeGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, ctrl_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &type );
	    }

	    break;

       case eFsaHpiControlStateGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiCtrlNumT    ctrl_num;
	      SaHpiCtrlStateT  ctrl_state;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &ctrl_num );

	      ret = saHpiControlStateGet( session_id, resource_id,
					  ctrl_num, &ctrl_state );

	      DbgFunc( "saHpiControlStateGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, ctrl_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &ctrl_state );
	    }

	    break;

       case eFsaHpiControlStateSet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiCtrlNumT    ctrl_num;
	      SaHpiCtrlStateT  ctrl_state;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &ctrl_num,
				    &ctrl_state );

	      ret = saHpiControlStateSet( session_id, resource_id,
					  ctrl_num, &ctrl_state );

	      DbgFunc( "saHpiControlStateSet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, ctrl_num, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiEntityInventoryDataRead:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiEirIdT      eir_id;
	      SaHpiUint32T     buffer_size;
	      unsigned char   *buffer = 0;
	      SaHpiUint32T     actual_size;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &eir_id, &buffer_size );

	      if ( buffer_size )
		   buffer = new unsigned char [buffer_size];

	      ret = saHpiEntityInventoryDataRead( session_id, resource_id, eir_id,
						  buffer_size, (SaHpiInventoryDataT *)(void *)buffer,
						  &actual_size );

	      DbgFunc( "saHpintityInventoryDataRead( %x, %x, %x, %d ) = %d\n",
                       session_id, resource_id, eir_id, buffer_size, ret );

	      const cMarshalType *reply[4];
	      reply[0] = &SaErrorType; // SA_OK
	      reply[1] = &SaHpiUint32Type;  // actual size

	      const void *params[3];
	      params[0] = &ret;
	      params[1] = &actual_size;

	      if ( ret != SA_OK || buffer == 0 )
		   reply[2] = 0;		   
	      else
		 {
  		   reply[2] = &SaHpiInventoryDataType, // inventory data
		   reply[3] = 0;		   

		   params[2] = buffer;		   
		 }

	      rh.m_len = MarshalArray( reply, params, rd );

	      if ( buffer )
		   delete [] buffer;
	    }

	    break;

       case eFsaHpiEntityInventoryDataWrite:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiEirIdT      eir_id;
	      unsigned char    buffer[10240];

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &eir_id, buffer );

	      ret = saHpiEntityInventoryDataWrite( session_id, resource_id, eir_id,
						   (SaHpiInventoryDataT *)(void *)buffer );

	      DbgFunc( "saHpintityInventoryDataWrite( %x, %x, %x ) = %d\n",
                       session_id, resource_id, eir_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    break;

       case eFsaHpiWatchdogTimerGet:
	    {
	      SaHpiSessionIdT   session_id;
	      SaHpiResourceIdT  resource_id;
	      SaHpiWatchdogNumT watchdog_num;
	      SaHpiWatchdogT    watchdog;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &watchdog_num );

	      ret = saHpiWatchdogTimerGet( session_id, resource_id,
					   watchdog_num, &watchdog );

	      DbgFunc( "saHpiWatchdogTimerGet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, watchdog_num, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &watchdog );
	    }

	    break;

       case eFsaHpiWatchdogTimerSet:
	    {
	      SaHpiSessionIdT   session_id;
	      SaHpiResourceIdT  resource_id;
	      SaHpiWatchdogNumT watchdog_num;
	      SaHpiWatchdogT    watchdog;

	      HpiDemarshalRequest4( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &watchdog_num,
				    &watchdog );

	      ret = saHpiWatchdogTimerSet( session_id, resource_id,
					   watchdog_num, &watchdog );
	      
	      DbgFunc( "saHpiWatchdogTimerSet( %x, %x, %x ) = %d\n",
                       session_id, resource_id, watchdog_num, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiWatchdogTimerReset:
	    {
	      SaHpiSessionIdT   session_id;
	      SaHpiResourceIdT  resource_id;
	      SaHpiWatchdogNumT watchdog_num;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &watchdog_num );

	      ret = saHpiWatchdogTimerReset( session_id, resource_id,
					     watchdog_num );

	      DbgFunc( "eFsaHpiWatchdogTimerReset( %x, %x, %x ) = %d\n",
                       session_id, resource_id, watchdog_num, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiHotSwapControlRequest:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiHotSwapControlRequest( session_id, resource_id );

	      DbgFunc( "saHpiHotSwapControlRequest( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiResourceActiveSet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiResourceActiveSet( session_id, resource_id );
	      
	      DbgFunc( "saHpiResourceActiveSet( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiResourceInactiveSet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id );

	      ret = saHpiResourceInactiveSet( session_id, resource_id );

	      DbgFunc( "saHpiResourceInactiveSet( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiAutoInsertTimeoutGet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiTimeoutT   timeout;
	      
	      HpiDemarshalRequest1( header.m_flags & dMhEndianBit, hm, data,
				   &session_id );

	      ret = saHpiAutoInsertTimeoutGet( session_id, &timeout );
	      
	      DbgFunc( "saHpiAutoInsertTimeoutGet( %x ) = %d\n",
                       session_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &timeout );
	    }

	    break;

       case eFsaHpiAutoInsertTimeoutSet:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiTimeoutT   timeout;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &timeout );

	      ret = saHpiAutoInsertTimeoutSet( session_id, timeout );
	      
	      DbgFunc( "saHpiAutoInsertTimeoutSet( %x ) = %d\n",
                       session_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiAutoExtractTimeoutGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiTimeoutT    timeout;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id );

	      ret = saHpiAutoExtractTimeoutGet( session_id, resource_id, &timeout );

	      DbgFunc( "saHpiAutoExtractTimeoutGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &timeout );
	    }

	    break;

       case eFsaHpiAutoExtractTimeoutSet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiTimeoutT    timeout;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &timeout );

	      ret = saHpiAutoExtractTimeoutSet( session_id, resource_id, timeout );

	      DbgFunc( "saHpiAutoExtractTimeoutSet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiHotSwapStateGet:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiHsStateT    state;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiHotSwapStateGet( session_id, resource_id, &state );

	      DbgFunc( "saHpiHotSwapStateGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &state );
	    }
	    
	    break;

       case eFsaHpiHotSwapActionRequest:
	    {
	      SaHpiSessionIdT session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiHsActionT   action;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &action );

	      ret = saHpiHotSwapActionRequest( session_id, resource_id, action );

	      DbgFunc( "saHpiHotSwapActionRequest( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiResourcePowerStateGet:
	    {
	      SaHpiSessionIdT    session_id;
	      SaHpiResourceIdT   resource_id;
	      SaHpiHsPowerStateT state;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiResourcePowerStateGet( session_id, resource_id, &state );
	      
	      DbgFunc( "saHpiResourcePowerStateGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &state );
	    }
	    
	    break;

       case eFsaHpiResourcePowerStateSet:
	    {
	      SaHpiSessionIdT    session_id;
	      SaHpiResourceIdT   resource_id;
	      SaHpiHsPowerStateT state;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id, &state  );

	      ret = saHpiResourcePowerStateSet( session_id, resource_id, state );

	      DbgFunc( "(saHpiResourcePowerStateSet %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       case eFsaHpiHotSwapIndicatorStateGet:
	    {
	      SaHpiSessionIdT        session_id;
	      SaHpiResourceIdT       resource_id;
	      SaHpiHsIndicatorStateT state;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				   &session_id, &resource_id );

	      ret = saHpiHotSwapIndicatorStateGet( session_id, resource_id, &state );

	      DbgFunc( "saHpiHotSwapIndicatorStateGet( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &state );
	    }

	    break;

       case eFsaHpiHotSwapIndicatorStateSet:
	    {
	      SaHpiSessionIdT        session_id;
	      SaHpiResourceIdT       resource_id;
	      SaHpiHsIndicatorStateT state;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &state );

	      ret = saHpiHotSwapIndicatorStateSet( session_id, resource_id, state );

	      DbgFunc( "saHpiHotSwapIndicatorStateSet( %x, %x ) = %d\n",
                       session_id, resource_id , ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }
	    
	    break;

       case eFsaHpiParmControl:
	    {
	      SaHpiSessionIdT  session_id;
	      SaHpiResourceIdT resource_id;
	      SaHpiParmActionT action;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &action );

	      ret = saHpiParmControl( session_id, resource_id, action );

	      DbgFunc( "saHpiParmControl( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret  );
	    }

	    break;

       case eFsaHpiResourceResetStateGet:
	    {
	      SaHpiSessionIdT   session_id;
	      SaHpiResourceIdT  resource_id;
	      SaHpiResetActionT reset_action;

	      HpiDemarshalRequest2( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id );

	      ret = saHpiResourceResetStateGet( session_id, resource_id,
						&reset_action );

	      DbgFunc( "saHpiResourceResetStateGet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply1( hm, rd, &ret, &reset_action );
	    }

	    break;

       case eFsaHpiResourceResetStateSet:
	    {
	      SaHpiSessionIdT   session_id;
	      SaHpiResourceIdT  resource_id;
	      SaHpiResetActionT reset_action;

	      HpiDemarshalRequest3( header.m_flags & dMhEndianBit, hm, data,
				    &session_id, &resource_id, &reset_action );

	      ret = saHpiResourceResetStateSet( session_id, resource_id, reset_action );

	      DbgFunc( "saHpiResourceResetStateSet( %x, %x ) = %d\n",
                       session_id, resource_id, ret );

	      rh.m_len = HpiMarshalReply0( hm, rd, &ret );
	    }

	    break;

       default:
	    assert( 0 );
	    break;
     }

  assert( rh.m_len <= hm->m_reply_len );

  return eResultReply;
}
Пример #21
0
void list_sel(SaHpiSessionIdT session_id, SaHpiResourceIdT resource_id)
{
        char str[256];

        printf("SEL Info:\n");

        SaHpiSelInfoT info;        
        SaErrorT rv = saHpiEventLogInfoGet(session_id, resource_id, &info);

        if (rv != SA_OK) {
                printf( "Error=%d reading SEL info\n", rv);
                return;
        }

        printf("\tEntries in SEL: %d\n", info.Entries);
        printf("\tSize: %d\n", info.Size);

        time2str(info.UpdateTimestamp, str);
        printf("\tUpdateTimestamp: %s\n", str);

        time2str(info.CurrentTime, str);
        printf("\tCurrentTime    : %s\n", str);
        printf("\tEnabled: %s\n", info.Enabled ? "true" : "false");
        printf("\tOverflowFlag: %s\n", info.OverflowFlag ? "true" : "false");
        printf("\tOverflowAction: " );

        switch(info.OverflowAction) {
        case SAHPI_SEL_OVERFLOW_DROP:
                printf("SAHPI_SEL_OVERFLOW_DROP\n");
                break;

        case SAHPI_SEL_OVERFLOW_WRAP:
                printf("SAHPI_SEL_OVERFLOW_WRAP\n");
                break;

        case SAHPI_SEL_OVERFLOW_WRITELAST:
                printf("SAHPI_SEL_OVERFLOW_WRITELAST\n");
                break;

        default:
                printf("unknown(0x%x)\n", info.OverflowAction);
                break;
        }

        printf("\tDeleteEntrySupported: %s\n", info.DeleteEntrySupported ? "true" : "false" );

		if (info.Entries == 0)
				return;
		//else 
        // read sel records
        SaHpiSelEntryIdT current = SAHPI_OLDEST_ENTRY;

        do {
                SaHpiSelEntryIdT prev;
                SaHpiSelEntryIdT next;
                SaHpiSelEntryT   entry;
                SaHpiRdrT        rdr;
                SaHpiRptEntryT   res;

                rv = saHpiEventLogEntryGet(session_id, resource_id, current, &prev, &next, &entry, &rdr, &res);

                if (rv != SA_OK) {
                        printf( "Error=%d reading SEL entry %d\n", rv, current);
                        return;
                }

                printf("\t\tEntry %d, prev %d, next %d\n", entry.EntryId, prev, next);
                time2str(entry.Timestamp, str);
                printf("\t\t\tTimestamp:            %s\n", str);

                SaHpiRptEntryT rres;

                rv = saHpiRptEntryGetByResourceId(session_id, entry.Event.Source, &rres );

                if ( rv != SA_OK )
                printf("\t\t\tSource:               unknown\n" );
                else {
                        entitypath2string( &rres.ResourceEntity, str, sizeof(str));
                printf("\t\t\tSource:               %s\n", str );
                }

                printf("\t\t\tEventType:            %s\n", eventtype2str(entry.Event.EventType));
                time2str(entry.Timestamp, str);
                printf("\t\t\tEvent timestamp:      %s\n", str);
                printf("\t\t\tSeverity:             %s\n", severity2str( entry.Event.Severity ) );

                switch(entry.Event.EventType) {
                case SAHPI_ET_SENSOR:
                        {
                                SaHpiSensorEventT *se = &entry.Event.EventDataUnion.SensorEvent;
                printf("\t\t\tSensorNum:            %d\n", se->SensorNum );
                printf("\t\t\tSensorType:           %s\n", get_sensor_type(se->SensorType ) );
                printf("\t\t\tEventCategory:        %s\n", get_sensor_category( se->EventCategory ) );
                printf("\t\t\tAssertion:            %s\n", se->Assertion ? "TRUE" : "FALSE" );
                        }

                        break;

                case SAHPI_ET_HOTSWAP:
                        {
                                SaHpiHotSwapEventT *he = &entry.Event.EventDataUnion.HotSwapEvent;
                printf("\t\t\tHotSwapState:         %s\n",
                                      hotswapstate2str( he->HotSwapState ) );
                printf("\t\t\tPreviousHotSwapState: %s\n",
                                        hotswapstate2str( he->PreviousHotSwapState ) );
                        }

                        break;

                case SAHPI_ET_WATCHDOG:
                        break;

                case SAHPI_ET_OEM:
                        break;

                case SAHPI_ET_USER:
                        break;
                }
                
                current = next;
        } while(current != SAHPI_NO_MORE_ENTRIES);
}
Пример #22
0
int main(int argc, char **argv)
{
        int c;
        SaErrorT rv, rv_2;
        SaHpiVersionT hpiVer;
        SaHpiSessionIdT sessionid;
        
        /* Domain */
        SaHpiDomainInfoT domainInfo;
        SaHpiEventLogEntryIdT entryid;
        SaHpiEventLogEntryIdT nextentryid;
        SaHpiEventLogEntryIdT preventryid;
        SaHpiEventLogInfoT info;
        SaHpiEventLogEntryT  el;
	SaHpiRdrT rdr, *rdrptr;
	SaHpiRptEntryT rpt, *rptptr;


        printf("%s: version %s\n",argv[0],progver);

        while ( (c = getopt( argc, argv,"cdpx?")) != EOF )
                switch(c) {
                case 'c': fclear = 1; break;
                case 'd': frdr   = 1; break;
                case 'p': frpt   = 1; break;				
                case 'x': fdebug = 1; break;
                default:
                        printf("\n\n\nUsage %s [-cdpx]\n",argv[0]);
			printf("    Where                             \n");
                        printf("        -c clears the event log\n");
			printf("        -d also get RDR with the event log\n");
			printf("        -p also get RPT with the event log\n");
                        printf("        -x displays eXtra debug messages\n\n\n");
                        exit(1);
                }
	
	/* 
	 * House keeping:
	 * 	-- get (check?) hpi implementation version
	 *      -- open hpi session	
	 */
	if (fdebug) printf("saHpiVersionGet\n");
	hpiVer = saHpiVersionGet();
	printf("Hpi Version %d Implemented.\n", hpiVer);
	
        rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL);
        if (rv != SA_OK) {
                if (rv == SA_ERR_HPI_ERROR) 
                        printf("saHpiSessionOpen: error %d, SpiLibd not running\n",rv);
                else
                        printf("saHpiSessionOpen: %s\n", oh_lookup_error(rv));
                exit(-1);
        }

        rv = saHpiDiscover(sessionid);
        if (fdebug) printf("saHpiResourcesDiscover %s\n", oh_lookup_error(rv));
	

        rv = saHpiDomainInfoGet(sessionid, &domainInfo);
        if (fdebug) printf("saHpiDomainInfoGet %s\n", oh_lookup_error(rv));

        printf("DomainInfo: UpdateCount = %d, UpdateTime = %lx\n",
               domainInfo.RptUpdateCount, (unsigned long)domainInfo.RptUpdateTimestamp);

	/* initialize structure */
	info.Entries = 0;
	info.Size = 0;
	info.Enabled = 0;
		    
	rv_2 = saHpiEventLogInfoGet(sessionid,SAHPI_UNSPECIFIED_RESOURCE_ID,&info);
			
	if (fdebug)
			printf("saHpiEventLogInfoGet %s\n", oh_lookup_error(rv));
	if (rv_2 == SA_OK) {
		printf("Domain EventLogInfo\n");
		oh_print_eventloginfo(&info, 4);
	} else { 
		printf("Domain saHpiEventLogInfoGet %s\n", oh_lookup_error(rv_2));
	}
				    
	if (fclear) {
		rv = saHpiEventLogClear(sessionid,SAHPI_UNSPECIFIED_RESOURCE_ID);
		if (rv == SA_OK)
			printf("EventLog successfully cleared\n");
		else
			printf("EventLog clear, error = %d, %s\n", rv, oh_lookup_error(rv));
		return(0);
	}
				    
	if (info.Entries != 0){
		rv = SA_OK;
		entryid = SAHPI_OLDEST_ENTRY;
		while ((rv == SA_OK) && (entryid != SAHPI_NO_MORE_ENTRIES))
		{
		
			if (frdr) rdrptr = &rdr;
			else rdrptr = NULL;
					
			if (frpt) rptptr = &rpt;
			else rptptr = NULL;
				
			rv = saHpiEventLogEntryGet(sessionid,SAHPI_UNSPECIFIED_RESOURCE_ID,
						entryid,&preventryid,
						&nextentryid, &el, rdrptr, rptptr);
								
			if (fdebug) printf("saHpiEventLogEntryGet %s\n",
					    			oh_lookup_error(rv));
								   
			if (rv == SA_OK) {
				oh_print_eventlogentry(&el, 6);
				
				if (frdr) {
					if (rdrptr->RdrType == SAHPI_NO_RECORD)
						printf("            No RDR associated with EventType =  %s\n\n", 
						oh_lookup_eventtype(el.Event.EventType));
					else	
						oh_print_rdr(rdrptr, 12);
				}
				
				if (frpt) {
					if (rptptr->ResourceCapabilities == 0)
						printf("            No RPT associated with EventType =  %s\n\n", 
						oh_lookup_eventtype(el.Event.EventType));							
					else 
						oh_print_rptentry(rptptr, 10);
				}
				
				preventryid = entryid;
				entryid = nextentryid;
			} else {
				printf("Domain EventLogEntryGet, error = %d, %s\n", rv, oh_lookup_error(rv));
				break;
			}
		}
				
	} else 
		printf("\tSEL is empty.\n\n");		    
			    
	
        rv = saHpiSessionClose(sessionid);
	return(0);
}