[Nut-upsdev] [Nut-upsuser] Powerware 9155 with SNMP card

Arjen de Korte nut+devel at de-korte.org
Tue Aug 14 13:31:38 UTC 2007

> I'm trying to add an instant command to pwmib:
> #define IETF_OID_UPS_TEST_ID	  ""      /*
> UPS-MIB::upsTestID.0 */
> #define IETF_OID_UPS_TEST_QBATT   ""      /*
> UPS-MIB::upsTestQuickBatteryTest.0 */
> { "test.battery.start", ST_FLAG_STRING, SU_INFOSIZE,
> NULL },
> what I hope it to do is write IETF_OID_UPS_TEST_QBATT into
> IETF_OID_UPS_TEST_ID to trigger the test. I hope my understanding of the
> code is right that in this way the string in snmp_info_t->dfl get
> written to OID IETF_OID_UPS_TEST_ID?
> though for whatever reason upscmd -l ups doesnt list any instant
> commands... is there anything else to be done to register an instant
> command? apccmib.h and mgemib.h both seem to do nothing else?

The problem is in the upsdrv_initinfo() function in 'snmp-ups.c':

	/* add instant commands to the info database. */
	for (su_info_p = &snmp_info[0]; su_info_p->info_type != NULL ; su_info_p++)
		su_info_p->flags |= SU_FLAG_OK;
		if (SU_TYPE(su_info_p) == SU_TYPE_CMD)

It looks like we're missing some curly brackets here. Unlike what the
indentation suggests, the dstate_addcmd() will not be called in the for()
loop, but only when it has finished. At that time, su_info_p->info_type is
NULL, so regardless of what SU_TYPE(su_info_p) evaluates to, this never
adds something useful.

I guess you're the first to notice this, congratulations. Can we persuade
to join the development team? :-)

Best regards, Arjen

More information about the Nut-upsdev mailing list