diff options
| author | Gavin Maltby <gavin.maltby@oracle.com> | 2010-07-30 17:04:17 +1000 |
|---|---|---|
| committer | Gavin Maltby <gavin.maltby@oracle.com> | 2010-07-30 17:04:17 +1000 |
| commit | f6e214c7418f43af38bd8c3a557e3d0a1d311cfa (patch) | |
| tree | 0f0e4cee5ead68ee30660107f9eccf7cd9e72c2e /usr/src/uts/common/sys | |
| parent | 265a964d7aa43c47170d21d2f01bcf873d7fd79d (diff) | |
| download | illumos-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.h | 12 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/dumphdr.h | 10 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/fm/protocol.h | 31 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/fm/util.h | 6 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/nvpair.h | 5 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/panic.h | 20 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/sysevent.h | 5 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/sysevent_impl.h | 77 |
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 |
