Print this page
NEX-17772 libfmd_snmp should learn about new FmProblem fields
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
@@ -22,15 +22,21 @@
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2018 Nexenta Systems, Inc.
+ */
+
#include <sys/fm/protocol.h>
+
#include <fm/fmd_msg.h>
-#include <strings.h>
+
#include <alloca.h>
#include <stdio.h>
+#include <strings.h>
#include <fmd_protocol.h>
#include <fmd_module.h>
#include <fmd_conf.h>
#include <fmd_subr.h>
@@ -146,11 +152,11 @@
{
int64_t tod[2];
nvlist_t *nvl;
int err = 0;
fmd_msg_hdl_t *msghdl;
- char *severity;
+ char *item;
tod[0] = tvp->tv_sec;
tod[1] = tvp->tv_usec;
if (nvlist_xalloc(&nvl, NV_UNIQUE_NAME, &fmd.d_nva) != 0)
@@ -179,26 +185,36 @@
err |= nvlist_add_uint8_array(nvl,
FM_SUSPECT_FAULT_STATUS, flagv, argc);
}
/*
- * Attempt to lookup the severity associated with this diagnosis from
- * the portable object file using the diag code. Failure to init
- * libfmd_msg or add to the nvlist will be treated as fatal. However,
- * we won't treat a fmd_msg_getitem_id failure as fatal since during
- * development it's not uncommon to be working with po/dict files that
- * haven't yet been updated with newly added diagnoses.
+ * Attempt to lookup the type, severity, and description associated with
+ * this diagnosis from the portable object file using the diag code.
+ * Failure to init libfmd_msg or add to the nvlist will be treated as
+ * fatal. However, we won't treat a fmd_msg_getitem_id failure as fatal
+ * since during development it's not uncommon to be working with po/dict
+ * files that haven't yet been updated with newly added diagnoses.
*/
msghdl = fmd_msg_init(fmd.d_rootdir, FMD_MSG_VERSION);
if (msghdl == NULL)
fmd_panic("failed to initialize libfmd_msg\n");
- if ((severity = fmd_msg_getitem_id(msghdl, NULL, code,
+ if ((item = fmd_msg_getitem_id(msghdl, NULL, code,
+ FMD_MSG_ITEM_TYPE)) != NULL) {
+ err |= nvlist_add_string(nvl, FM_SUSPECT_TYPE, item);
+ free(item);
+ }
+ if ((item = fmd_msg_getitem_id(msghdl, NULL, code,
FMD_MSG_ITEM_SEVERITY)) != NULL) {
- err |= nvlist_add_string(nvl, FM_SUSPECT_SEVERITY, severity);
- free(severity);
+ err |= nvlist_add_string(nvl, FM_SUSPECT_SEVERITY, item);
+ free(item);
}
+ if ((item = fmd_msg_getitem_id(msghdl, NULL, code,
+ FMD_MSG_ITEM_DESC)) != NULL) {
+ err |= nvlist_add_string(nvl, FM_SUSPECT_DESC, item);
+ free(item);
+ }
fmd_msg_fini(msghdl);
if (err != 0)
fmd_panic("failed to populate nvlist: %s\n", fmd_strerror(err));