ipmi_rs/connection/
completion_code.rs1#[derive(Clone, Copy, Debug, PartialEq)]
2pub enum ResponseUnavailableReason {
3 Unknown,
4 SDRInUpdate,
5 DeviceInFwUpdate,
6 BMCInitializing,
7}
8
9#[derive(Clone, Copy, Debug, PartialEq)]
10pub enum CompletionCode {
11 Success,
12 NodeBusy,
13 InvalidCommand,
14 InvalidCommandForLun,
15 ProcessingTimeout,
16 OutOfSpace,
17 ReservationCancelledOrInvalidId,
18 RequestDataTruncated,
19 RequestDataLenInvalid,
20 RequestDataLengthLimitExceeded,
21 ParameterOutOfRange,
22 CannotReturnNumOfRequestedBytes,
23 RequestedDatapointNotPresent,
24 InvalidDataFieldInRequest,
25 CommandIllegalForSensorOrRecord,
26 ResponseUnavailable { reason: ResponseUnavailableReason },
27 CannotExecuteDuplicateRequest,
28 DestinationUnavailable,
29 InsufficientPrivilege,
30 CannotExecuteCommandInCurrentState,
31 SubFunctionDisabled,
32 Unspecified,
33 Oem(u8),
34 CommandSpecific(u8),
35 Reserved(u8),
36}
37
38impl From<u8> for CompletionCode {
39 fn from(value: u8) -> Self {
40 match value {
41 0x00 => Self::Success,
42 0xC0 => Self::NodeBusy,
43 0xC1 => Self::InvalidCommand,
44 0xC2 => Self::InvalidCommandForLun,
45 0xC3 => Self::ProcessingTimeout,
46 0xC4 => Self::OutOfSpace,
47 0xC5 => Self::ReservationCancelledOrInvalidId,
48 0xC6 => Self::RequestDataTruncated,
49 0xC7 => Self::RequestDataLenInvalid,
50 0xC8 => Self::RequestDataLengthLimitExceeded,
51 0xC9 => Self::ParameterOutOfRange,
52 0xCA => Self::CannotReturnNumOfRequestedBytes,
53 0xCB => Self::RequestedDatapointNotPresent,
54 0xCC => Self::InvalidDataFieldInRequest,
55 0xCD => Self::CommandIllegalForSensorOrRecord,
56 0xCE => Self::ResponseUnavailable {
57 reason: ResponseUnavailableReason::Unknown,
58 },
59 0xCF => Self::CannotExecuteDuplicateRequest,
60 0xD0 => Self::ResponseUnavailable {
61 reason: ResponseUnavailableReason::SDRInUpdate,
62 },
63 0xD1 => Self::ResponseUnavailable {
64 reason: ResponseUnavailableReason::DeviceInFwUpdate,
65 },
66 0xD2 => Self::ResponseUnavailable {
67 reason: ResponseUnavailableReason::BMCInitializing,
68 },
69 0xD3 => Self::DestinationUnavailable,
70 0xD4 => Self::InsufficientPrivilege,
71 0xD5 => Self::CannotExecuteCommandInCurrentState,
72 0xD6 => Self::SubFunctionDisabled,
73 0xFF => Self::Unspecified,
74 0x01..=0x7E => Self::Oem(value),
75 0x80..=0xBE => Self::CommandSpecific(value),
76 v => Self::Reserved(v),
77 }
78 }
79}
80
81impl CompletionCode {
82 pub fn is_success(&self) -> bool {
83 matches!(self, Self::Success)
84 }
85
86 pub fn is_reserved(&self) -> bool {
87 matches!(self, Self::Reserved(_))
88 }
89}