/
reserve_sdr_repository.go
66 lines (51 loc) · 1.54 KB
/
reserve_sdr_repository.go
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
package ipmi
import (
"encoding/binary"
"fmt"
"github.com/google/gopacket"
"github.com/google/gopacket/layers"
)
// ReserveSDRRepositoryRsp represents the response to a Reserve SDR Repository
// command, specified in 33.11 of IPMI v2.0.
type ReserveSDRRepositoryRsp struct {
layers.BaseLayer
ReservationID ReservationID
}
func (*ReserveSDRRepositoryRsp) LayerType() gopacket.LayerType {
return LayerTypeReserveSDRRepositoryRsp
}
func (r *ReserveSDRRepositoryRsp) CanDecode() gopacket.LayerClass {
return r.LayerType()
}
func (*ReserveSDRRepositoryRsp) NextLayerType() gopacket.LayerType {
return gopacket.LayerTypePayload
}
func (r *ReserveSDRRepositoryRsp) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error {
if len(data) < 2 {
df.SetTruncated()
return fmt.Errorf("response must be at least 2 bytes, got %v", len(data))
}
r.BaseLayer.Contents = data[:2]
r.ReservationID = ReservationID(binary.LittleEndian.Uint16(data[0:2]))
return nil
}
type ReserveSDRRepositoryCmd struct {
Rsp ReserveSDRRepositoryRsp
}
// Name returns "Reserve SDR Repository".
func (*ReserveSDRRepositoryCmd) Name() string {
return "Reserve SDR Repository"
}
// Operation returns &OperationReserveSDRRepositoryReq.
func (*ReserveSDRRepositoryCmd) Operation() *Operation {
return &OperationReserveSDRRepositoryReq
}
func (c *ReserveSDRRepositoryCmd) RemoteLUN() LUN {
return LUNBMC
}
func (c *ReserveSDRRepositoryCmd) Request() gopacket.SerializableLayer {
return nil
}
func (c *ReserveSDRRepositoryCmd) Response() gopacket.DecodingLayer {
return &c.Rsp
}