forked from allanliu/smartmontools
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsmartctl.h
110 lines (90 loc) · 3.27 KB
/
smartctl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* smartctl.h
*
* Home page of code is: http://www.smartmontools.org
*
* Copyright (C) 2002-10 Bruce Allen
* Copyright (C) 2008-10 Christian Franke
* Copyright (C) 2000 Michael Cornwell <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* You should have received a copy of the GNU General Public License
* (for example COPYING); if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This code was originally developed as a Senior Thesis by Michael Cornwell
* at the Concurrent Systems Laboratory (now part of the Storage Systems
* Research Center), Jack Baskin School of Engineering, University of
* California, Santa Cruz. http://ssrc.soe.ucsc.edu/
*
*/
#ifndef SMARTCTL_H_
#define SMARTCTL_H_
#define SMARTCTL_H_CVSID "$Id$\n"
// Return codes (bitmask)
// command line did not parse, or internal error occured in smartctl
#define FAILCMD (0x01 << 0)
// device open failed
#define FAILDEV (0x01 << 1)
// device is in low power mode and -n option requests to exit
#define FAILPOWER (0x01 << 1)
// read device identity (ATA only) failed
#define FAILID (0x01 << 1)
// smart command failed, or ATA identify device structure missing information
#define FAILSMART (0x01 << 2)
// SMART STATUS returned FAILURE
#define FAILSTATUS (0x01 << 3)
// Attributes found <= threshold with prefail=1
#define FAILATTR (0x01 << 4)
// SMART STATUS returned GOOD but age attributes failed or prefail
// attributes have failed in the past
#define FAILAGE (0x01 << 5)
// Device had Errors in the error log
#define FAILERR (0x01 << 6)
// Device had Errors in the self-test log
#define FAILLOG (0x01 << 7)
// Classes of SMART commands. Here 'mandatory' means "Required by the
// ATA/ATAPI-5 Specification if the device implements the S.M.A.R.T.
// command set." The 'mandatory' S.M.A.R.T. commands are: (1)
// Enable/Disable Attribute Autosave, (2) Enable/Disable S.M.A.R.T.,
// and (3) S.M.A.R.T. Return Status. All others are optional.
enum failure_type {
OPTIONAL_CMD,
MANDATORY_CMD,
};
// Globals to set failuretest() policy
extern bool failuretest_conservative;
extern unsigned char failuretest_permissive;
// Compares failure type to policy in effect, and either exits or
// simply returns to the calling routine.
void failuretest(failure_type type, int returnvalue);
/*
* @brief Compares failure type to policy.
*
* @param failure type of either OPTIONAL_CMD or MANDATORY_CMD
*
* @return true for pass, false for fail
*/
// This function only returning a primitive type for consistency with rest of
// code. This may need to be refactored to return specific Err Types (which
// handled at the )
bool softfailuretest(failure_type type);
// Globals to control printing
extern bool printing_is_switchable;
extern bool printing_is_off;
// Printing control functions
inline void print_on() {
if (printing_is_switchable)
printing_is_off = false;
}
inline void print_off() {
if (printing_is_switchable)
printing_is_off = true;
}
#endif