summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys
diff options
context:
space:
mode:
authorGavin Maltby <gavin.maltby@oracle.com>2010-07-30 17:04:17 +1000
committerGavin Maltby <gavin.maltby@oracle.com>2010-07-30 17:04:17 +1000
commitf6e214c7418f43af38bd8c3a557e3d0a1d311cfa (patch)
tree0f0e4cee5ead68ee30660107f9eccf7cd9e72c2e /usr/src/uts/common/sys
parent265a964d7aa43c47170d21d2f01bcf873d7fd79d (diff)
downloadillumos-joyent-f6e214c7418f43af38bd8c3a557e3d0a1d311cfa.tar.gz
PSARC/2009/617 Software Events Notification Parameters CLI
PSARC/2009/618 snmp-notify: SNMP Notification Daemon for Software Events PSARC/2009/619 smtp-notify: Email Notification Daemon for Software Events PSARC/2010/225 fmd for non-global Solaris zones PSARC/2010/226 Solaris Instance UUID PSARC/2010/227 nvlist_nvflag(3NVPAIR) PSARC/2010/228 libfmevent additions PSARC/2010/257 sysevent_evc_setpropnvl and sysevent_evc_getpropnvl PSARC/2010/265 FMRI and FMA Event Stabilty, 'ireport' category 1 event class, and the 'sw' FMRI scheme PSARC/2010/278 FMA/SMF integration: instance state transitions PSARC/2010/279 Modelling panics within FMA PSARC/2010/290 logadm.conf upgrade 6392476 fmdump needs to pretty-print 6393375 userland ereport/ireport event generation interfaces 6445732 Add email notification agent for FMA and software events 6804168 RFE: Allow an efficient means to monitor SMF services status changes 6866661 scf_values_destroy(3SCF) will segfault if is passed NULL 6884709 Add snmp notification agent for FMA and software events 6884712 Add private interface to tap into libfmd_msg macro expansion capabilities 6897919 fmd to run in a non-global zone 6897937 fmd use of non-private doors is not safe 6900081 add a UUID to Solaris kernel image for use in crashdump identification 6914884 model panic events as a defect diagnosis in FMA 6944862 fmd_case_open_uuid, fmd_case_uuisresolved, fmd_nvl_create_defect 6944866 log legacy sysevents in fmd 6944867 enumerate svc scheme in topo 6944868 software-diagnosis and software-response fmd modules 6944870 model SMF maintenance state as a defect diagnosis in FMA 6944876 savecore runs in foreground for systems with zfs root and dedicated dump 6965796 Implement notification parameters for SMF state transitions and FMA events 6968287 SUN-FM-MIB.mib needs to be updated to reflect Oracle information 6972331 logadm.conf upgrade PSARC/2010/290
Diffstat (limited to 'usr/src/uts/common/sys')
-rw-r--r--usr/src/uts/common/sys/dumpadm.h12
-rw-r--r--usr/src/uts/common/sys/dumphdr.h10
-rw-r--r--usr/src/uts/common/sys/fm/protocol.h31
-rw-r--r--usr/src/uts/common/sys/fm/util.h6
-rw-r--r--usr/src/uts/common/sys/nvpair.h5
-rw-r--r--usr/src/uts/common/sys/panic.h20
-rw-r--r--usr/src/uts/common/sys/sysevent.h5
-rw-r--r--usr/src/uts/common/sys/sysevent_impl.h77
8 files changed, 111 insertions, 55 deletions
diff --git a/usr/src/uts/common/sys/dumpadm.h b/usr/src/uts/common/sys/dumpadm.h
index 679ca04005..4e3704985d 100644
--- a/usr/src/uts/common/sys/dumpadm.h
+++ b/usr/src/uts/common/sys/dumpadm.h
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,15 +19,12 @@
* CDDL HEADER END
*/
/*
- * Copyright (c) 1998-2000 by Sun Microsystems, Inc.
- * All rights reserved.
+ * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_DUMPADM_H
#define _SYS_DUMPADM_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -44,6 +40,8 @@ extern "C" {
#define DIOCSETDEV (DDIOC | 0x14)
#define DIOCTRYDEV (DDIOC | 0x15)
#define DIOCDUMP (DDIOC | 0x16)
+#define DIOCSETUUID (DDIOC | 0x17)
+#define DIOCGETUUID (DDIOC | 0x18)
/*
* Kernel-controlled dump state flags for dump_conflags
diff --git a/usr/src/uts/common/sys/dumphdr.h b/usr/src/uts/common/sys/dumphdr.h
index 5fc27bf44e..e0f2b1aebd 100644
--- a/usr/src/uts/common/sys/dumphdr.h
+++ b/usr/src/uts/common/sys/dumphdr.h
@@ -43,7 +43,7 @@ extern "C" {
* overwritten by swap activity. See dumpadm(1M) for dump configuration.
*/
#define DUMP_MAGIC 0xdefec8edU /* dump magic number */
-#define DUMP_VERSION 9 /* version of this dumphdr */
+#define DUMP_VERSION 10 /* version of this dumphdr */
#define DUMP_WORDSIZE (sizeof (long) * NBBY) /* word size (32 or 64) */
#define DUMP_PANICSIZE 200 /* Max panic string copied */
#define DUMP_COMPRESS_RATIO 2 /* conservative; usually 2.5+ */
@@ -54,6 +54,10 @@ extern "C" {
(ERPT_EVCH_MAX + \
ERPT_MAX_ERRS * ERPT_HIWAT), \
DUMP_OFFSET)) /* ereport save area */
+#define DUMP_SUMMARYSIZE (P2ROUNDUP( \
+ (STACK_BUF_SIZE + \
+ sizeof (summary_dump_t) + 1024), \
+ DUMP_OFFSET)) /* summary save area */
typedef struct dumphdr {
uint32_t dump_magic; /* magic number */
@@ -76,6 +80,8 @@ typedef struct dumphdr {
pgcnt_t dump_npages; /* number of data pages */
size_t dump_ksyms_size; /* kernel symbol table size */
size_t dump_ksyms_csize; /* compressed symbol table size */
+ uint32_t dump_fm_panic; /* initiated from fm subsystems */
+ char dump_uuid[36 + 1]; /* os image uuid */
} dumphdr_t;
/*
@@ -190,6 +196,8 @@ extern int dumpvp_resize(void);
extern int dump_plat_addr(void);
extern void dump_plat_pfn(void);
extern int dump_plat_data(void *);
+extern int dump_set_uuid(const char *);
+extern const char *dump_get_uuid(void);
/*
* Define a CPU count threshold that determines when to employ
diff --git a/usr/src/uts/common/sys/fm/protocol.h b/usr/src/uts/common/sys/fm/protocol.h
index c4103c48a4..5eca760dad 100644
--- a/usr/src/uts/common/sys/fm/protocol.h
+++ b/usr/src/uts/common/sys/fm/protocol.h
@@ -43,12 +43,13 @@ extern "C" {
#define FM_CLASS "class"
#define FM_VERSION "version"
-/* FM event class values */
+/* FM protocol category 1 class names */
#define FM_EREPORT_CLASS "ereport"
#define FM_FAULT_CLASS "fault"
#define FM_DEFECT_CLASS "defect"
#define FM_RSRC_CLASS "resource"
#define FM_LIST_EVENT "list"
+#define FM_IREPORT_CLASS "ireport"
/* FM list.* event class values */
#define FM_LIST_SUSPECT_CLASS FM_LIST_EVENT ".suspect"
@@ -72,6 +73,12 @@ extern "C" {
/* list.* event payload member names */
#define FM_LIST_EVENT_SIZE "list-sz"
+/* ireport.* event payload member names */
+#define FM_IREPORT_DETECTOR "detector"
+#define FM_IREPORT_UUID "uuid"
+#define FM_IREPORT_PRIORITY "pri"
+#define FM_IREPORT_ATTRIBUTES "attr"
+
/*
* list.suspect, isolated, updated, repaired and resolved
* versions/payload member names.
@@ -192,6 +199,7 @@ extern "C" {
#define FM_FMRI_SCHEME_PKG "pkg"
#define FM_FMRI_SCHEME_LEGACY "legacy-hc"
#define FM_FMRI_SCHEME_ZFS "zfs"
+#define FM_FMRI_SCHEME_SW "sw"
/* Scheme versions */
#define FMD_SCHEME_VERSION0 0
@@ -215,6 +223,8 @@ extern "C" {
#define FM_SVC_SCHEME_VERSION SVC_SCHEME_VERSION0
#define ZFS_SCHEME_VERSION0 0
#define FM_ZFS_SCHEME_VERSION ZFS_SCHEME_VERSION0
+#define SW_SCHEME_VERSION0 0
+#define FM_SW_SCHEME_VERSION SW_SCHEME_VERSION0
/* hc scheme member names */
#define FM_FMRI_HC_SERIAL_ID "serial"
@@ -299,6 +309,25 @@ extern "C" {
#define FM_FMRI_ZFS_POOL "pool"
#define FM_FMRI_ZFS_VDEV "vdev"
+/* sw scheme member names - extra indentation for members of an nvlist */
+#define FM_FMRI_SW_OBJ "object"
+#define FM_FMRI_SW_OBJ_PATH "path"
+#define FM_FMRI_SW_OBJ_ROOT "root"
+#define FM_FMRI_SW_OBJ_PKG "pkg"
+#define FM_FMRI_SW_SITE "site"
+#define FM_FMRI_SW_SITE_TOKEN "token"
+#define FM_FMRI_SW_SITE_MODULE "module"
+#define FM_FMRI_SW_SITE_FILE "file"
+#define FM_FMRI_SW_SITE_LINE "line"
+#define FM_FMRI_SW_SITE_FUNC "func"
+#define FM_FMRI_SW_CTXT "context"
+#define FM_FMRI_SW_CTXT_ORIGIN "origin"
+#define FM_FMRI_SW_CTXT_EXECNAME "execname"
+#define FM_FMRI_SW_CTXT_PID "pid"
+#define FM_FMRI_SW_CTXT_ZONE "zone"
+#define FM_FMRI_SW_CTXT_CTID "ctid"
+#define FM_FMRI_SW_CTXT_STACK "stack"
+
extern nv_alloc_t *fm_nva_xcreate(char *, size_t);
extern void fm_nva_xdestroy(nv_alloc_t *);
diff --git a/usr/src/uts/common/sys/fm/util.h b/usr/src/uts/common/sys/fm/util.h
index 4934814d86..37334101b3 100644
--- a/usr/src/uts/common/sys/fm/util.h
+++ b/usr/src/uts/common/sys/fm/util.h
@@ -20,15 +20,12 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_FM_UTIL_H
#define _SYS_FM_UTIL_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -96,6 +93,7 @@ extern void fm_ereport_post(nvlist_t *, int);
extern void fm_payload_stack_add(nvlist_t *, const pc_t *, int);
+extern int is_fm_panic();
#endif /* _KERNEL */
#ifdef __cplusplus
diff --git a/usr/src/uts/common/sys/nvpair.h b/usr/src/uts/common/sys/nvpair.h
index 58037b0653..30ff4e0667 100644
--- a/usr/src/uts/common/sys/nvpair.h
+++ b/usr/src/uts/common/sys/nvpair.h
@@ -19,8 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_NVPAIR_H
@@ -158,6 +157,8 @@ int nvlist_unpack(char *, size_t, nvlist_t **, int);
int nvlist_dup(nvlist_t *, nvlist_t **, int);
int nvlist_merge(nvlist_t *, nvlist_t *, int);
+uint_t nvlist_nvflag(nvlist_t *);
+
int nvlist_xalloc(nvlist_t **, uint_t, nv_alloc_t *);
int nvlist_xpack(nvlist_t *, char **, size_t *, int, nv_alloc_t *);
int nvlist_xunpack(char *, size_t, nvlist_t **, nv_alloc_t *);
diff --git a/usr/src/uts/common/sys/panic.h b/usr/src/uts/common/sys/panic.h
index 9dd04a0626..1fa00f5f5a 100644
--- a/usr/src/uts/common/sys/panic.h
+++ b/usr/src/uts/common/sys/panic.h
@@ -19,15 +19,12 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_PANIC_H
#define _SYS_PANIC_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#if !defined(_ASM)
#include <sys/types.h>
#include <sys/thread.h>
@@ -45,10 +42,13 @@ extern "C" {
#endif
#define PANICBUFSIZE 8192
-#define PANICBUFVERS 1
+#define PANICBUFVERS 2
#define PANICNVNAMELEN 16
+#define STACK_BUF_SIZE 2048
+#define SUMMARY_MAGIC 0xdead0d8a
+
/*
* Panicbuf Format:
*
@@ -80,9 +80,19 @@ typedef struct panic_nv {
typedef struct panic_data {
uint32_t pd_version; /* Version number of panic_data_t */
uint32_t pd_msgoff; /* Message byte offset in panicbuf */
+ char pd_uuid[36 + 1]; /* image uuid */
panic_nv_t pd_nvdata[1]; /* Array of named data */
} panic_data_t;
+typedef struct summary_dump {
+ uint32_t sd_magic; /* magic number */
+ uint32_t sd_ssum; /* checsksum32(stack buffer) */
+ /*
+ * stack buffer and other summary data follow here -- see
+ * dump_summary()
+ */
+} summary_dump_t;
+
#if defined(_KERNEL)
/*
diff --git a/usr/src/uts/common/sys/sysevent.h b/usr/src/uts/common/sys/sysevent.h
index 44b5d069fb..2b26441973 100644
--- a/usr/src/uts/common/sys/sysevent.h
+++ b/usr/src/uts/common/sys/sysevent.h
@@ -20,8 +20,7 @@
*/
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_SYSEVENT_H
@@ -226,6 +225,8 @@ extern int sysevent_evc_unsubscribe(evchan_t *, const char *);
extern int sysevent_evc_publish(evchan_t *, const char *, const char *,
const char *, const char *, nvlist_t *, uint32_t);
extern int sysevent_evc_control(evchan_t *, int, ...);
+extern int sysevent_evc_setpropnvl(evchan_t *, nvlist_t *);
+extern int sysevent_evc_getpropnvl(evchan_t *, nvlist_t **);
#ifndef _KERNEL
diff --git a/usr/src/uts/common/sys/sysevent_impl.h b/usr/src/uts/common/sys/sysevent_impl.h
index 215862fbdd..117452765f 100644
--- a/usr/src/uts/common/sys/sysevent_impl.h
+++ b/usr/src/uts/common/sys/sysevent_impl.h
@@ -18,9 +18,9 @@
*
* CDDL HEADER END
*/
+
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SYS_SYSEVENT_IMPL_H
@@ -76,7 +76,7 @@ typedef struct sysevent_attr_impl {
/*
* sysevent event header information -
- * contained in every event generated. The header and the event
+ * contained in every event generated. The header and the event
* must remain 64-bit aligned. The header, up to the attribute
* offset, can be contained in a single cache line.
*/
@@ -98,7 +98,7 @@ typedef struct sys_event_impl {
se_data_t se_class_name; /* class string in contig memory */
se_data_t se_subclass_name; /* subclass string in contig memory */
se_data_t se_pub; /* publisher string in contig mem */
- se_data_t se_attr_buf; /* contiguous attribute memory */
+ se_data_t se_attr_buf; /* contiguous attribute memory */
} sysevent_impl_t;
/* Helpful defines */
@@ -237,14 +237,14 @@ typedef struct sysevent_channel_descriptor {
/*
* log_sysevent private interfaces
*/
-void log_event_init(void);
-void log_sysevent_flushq(int cmd, uint_t flag);
-int log_sysevent_filename(char *file);
-int log_usr_sysevent(sysevent_t *ev, int ev_size, sysevent_id_t *eid);
-int log_sysevent_copyout_data(sysevent_id_t *eid, size_t ubuflen, caddr_t ubuf);
-int log_sysevent_free_data(sysevent_id_t *eid);
-int log_sysevent_register(char *channel_name, char *data, se_pubsub_t *udata);
-uint64_t log_sysevent_new_id();
+extern void log_event_init(void);
+extern void log_sysevent_flushq(int, uint_t);
+extern int log_sysevent_filename(char *);
+extern int log_usr_sysevent(sysevent_t *, int, sysevent_id_t *);
+extern int log_sysevent_copyout_data(sysevent_id_t *, size_t, caddr_t);
+extern int log_sysevent_free_data(sysevent_id_t *);
+extern int log_sysevent_register(char *, char *, se_pubsub_t *);
+extern uint64_t log_sysevent_new_id(void);
/*
* Structures and definitions for general purpose event channels
@@ -281,8 +281,8 @@ typedef struct evch_qelem {
typedef struct {
evch_qelem_t *sq_head;
evch_qelem_t *sq_tail;
- uint32_t sq_count;
- uint32_t sq_highwm;
+ uint32_t sq_count;
+ uint32_t sq_highwm;
} evch_squeue_t;
/*
@@ -394,6 +394,8 @@ typedef struct {
int ch_maxsubscr; /* Maximum number of subscriptions */
int ch_holdpend; /* Hold pending events mode if != 0 */
time_t ch_ctime; /* Channel creation time */
+ nvlist_t *ch_propnvl; /* Channel properties nvlist */
+ int64_t ch_propnvlgen; /* Properties generation number */
} evch_chan_t;
/*
@@ -413,26 +415,28 @@ typedef struct {
sysevent_impl_t *sn_nxtev; /* Pointer to find next event */
} evchanq_t;
-/* Project privat interfaces */
-evchan_t *evch_usrchanopen(const char *name, uint32_t flags, int *err);
-void evch_usrchanclose(evchan_t *cbp);
-sysevent_impl_t *evch_usrallocev(size_t evsize, uint32_t flags);
-void evch_usrfreeev(sysevent_impl_t *ev);
-int evch_usrpostevent(evchan_t *bp, sysevent_impl_t *ev, uint32_t flags);
-int evch_usrsubscribe(evchan_t *bp, const char *sid, const char *class,
+/* Project private interfaces */
+extern evchan_t *evch_usrchanopen(const char *name, uint32_t flags, int *err);
+extern void evch_usrchanclose(evchan_t *cbp);
+extern sysevent_impl_t *evch_usrallocev(size_t evsize, uint32_t flags);
+extern void evch_usrfreeev(sysevent_impl_t *ev);
+extern int evch_usrpostevent(evchan_t *bp, sysevent_impl_t *ev, uint32_t flags);
+extern int evch_usrsubscribe(evchan_t *bp, const char *sid, const char *class,
int d, uint32_t flags);
-int evch_usrcontrol_set(evchan_t *bp, int cmd, uint32_t value);
-int evch_usrcontrol_get(evchan_t *bp, int cmd, uint32_t *value);
-void evch_usrunsubscribe(evchan_t *bp, const char *subid, uint32_t flag);
-int evch_usrgetchnames(char *buf, size_t size);
-int evch_usrgetchdata(char *chname, void *buf, size_t size);
-
-void sysevent_evc_init();
-void sysevent_evc_thrinit();
-evchanq_t *sysevent_evc_walk_init(evchan_t *, char *);
-sysevent_t *sysevent_evc_walk_step(evchanq_t *);
-void sysevent_evc_walk_fini(evchanq_t *);
-char *sysevent_evc_event_attr(sysevent_t *, size_t *);
+extern int evch_usrcontrol_set(evchan_t *bp, int cmd, uint32_t value);
+extern int evch_usrcontrol_get(evchan_t *bp, int cmd, uint32_t *value);
+extern void evch_usrunsubscribe(evchan_t *bp, const char *subid, uint32_t flag);
+extern int evch_usrgetchnames(char *buf, size_t size);
+extern int evch_usrgetchdata(char *chname, void *buf, size_t size);
+extern void evch_usrsetpropnvl(evchan_t *bp, nvlist_t *nvl);
+extern int evch_usrgetpropnvl(evchan_t *bp, nvlist_t **nvlp, int64_t *genp);
+
+extern void sysevent_evc_init();
+extern void sysevent_evc_thrinit();
+extern evchanq_t *sysevent_evc_walk_init(evchan_t *, char *);
+extern sysevent_t *sysevent_evc_walk_step(evchanq_t *);
+extern void sysevent_evc_walk_fini(evchanq_t *);
+extern char *sysevent_evc_event_attr(sysevent_t *, size_t *);
#endif /* _KERNEL */
@@ -508,6 +512,8 @@ typedef struct {
#define SEV_UNSUBSCRIBE SEV_BASE | 0x05
#define SEV_CHANNAMES SEV_BASE | 0x06
#define SEV_CHANDATA SEV_BASE | 0x07
+#define SEV_SETPROPNVL SEV_BASE | 0x08
+#define SEV_GETPROPNVL SEV_BASE | 0x09
#define DEVSYSEVENT "/dev/sysevent"
#define DEVICESYSEVENT "/devices/pseudo/sysevent@0:sysevent"
@@ -560,6 +566,11 @@ typedef struct chandata {
sev_box_t out_data;
} sev_chandata_args_t;
+typedef struct propnvl_args {
+ sev_box_t packednvl; /* input and output */
+ int64_t generation; /* output on get operation */
+} sev_propnvl_args_t;
+
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
#pragma pack()
#endif