1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 23 */ 24 25#include <fmdump.h> 26#include <stdio.h> 27#include <time.h> 28 29/*ARGSUSED*/ 30static int 31err_short(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) 32{ 33 char buf[32]; 34 35 fmdump_printf(fp, "%-20s %-32s\n", 36 fmdump_date(buf, sizeof (buf), rp), rp->rec_class); 37 38 return (0); 39} 40 41/*ARGSUSED*/ 42static int 43err_verb1(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) 44{ 45 uint64_t ena = 0; 46 char buf[32]; 47 48 (void) nvlist_lookup_uint64(rp->rec_nvl, FM_EREPORT_ENA, &ena); 49 50 fmdump_printf(fp, "%-20s %-37s 0x%016llx\n", 51 fmdump_date(buf, sizeof (buf), rp), rp->rec_class, ena); 52 53 return (0); 54} 55 56/*ARGSUSED*/ 57static int 58err_verb23_cmn(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp, 59 nvlist_prtctl_t pctl) 60{ 61 char buf[32]; 62 63 fmdump_printf(fp, "%-20s.%9.9llu %s\n", 64 fmdump_year(buf, sizeof (buf), rp), rp->rec_nsec, rp->rec_class); 65 66 if (pctl) 67 nvlist_prt(rp->rec_nvl, pctl); 68 else 69 nvlist_print(fp, rp->rec_nvl); 70 71 fmdump_printf(fp, "\n"); 72 return (0); 73} 74 75static int 76err_verb2(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) 77{ 78 return (err_verb23_cmn(lp, rp, fp, NULL)); 79} 80 81static int 82err_pretty(fmd_log_t *lp, const fmd_log_record_t *rp, FILE *fp) 83{ 84 nvlist_prtctl_t pctl; 85 int rc; 86 87 if ((pctl = nvlist_prtctl_alloc()) != NULL) { 88 nvlist_prtctl_setdest(pctl, fp); 89 nvlist_prtctlop_nvlist(pctl, fmdump_render_nvlist, NULL); 90 } 91 92 rc = err_verb23_cmn(lp, rp, fp, pctl); 93 94 nvlist_prtctl_free(pctl); 95 return (rc); 96} 97 98const fmdump_ops_t fmdump_err_ops = { 99"error", { 100{ 101"TIME CLASS", 102(fmd_log_rec_f *)err_short 103}, { 104"TIME CLASS ENA", 105(fmd_log_rec_f *)err_verb1 106}, { 107"TIME CLASS", 108(fmd_log_rec_f *)err_verb2 109}, { 110"TIME CLASS", 111(fmd_log_rec_f *)err_pretty 112}, { 113NULL, NULL 114} } 115}; 116