This interface will make it possible for users to configure data at rest encryption for volumes exposed through SMA. The crypto parameters are part of volume parameters specified when a volume is attached. Once a volume is attached it is not possible to change it. Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com> Change-Id: I795cfab67523ace47d366d50e33b253737716668 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13868 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Dong Yi <dongx.yi@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
117 lines
3.1 KiB
Protocol Buffer
117 lines
3.1 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
import "nvme.proto";
|
|
import "virtio_blk.proto";
|
|
import "nvmf_tcp.proto";
|
|
import "nvmf.proto";
|
|
|
|
// This file provides the generic definitions for the Storage Management Agent
|
|
// gRPC calls. All of the methods are supposed to be idempotent. Errors are
|
|
// reported as standard gRPC status codes.
|
|
|
|
package sma;
|
|
|
|
option go_package = "spdk.io/sma";
|
|
|
|
// Volume's crypto parameters
|
|
message VolumeCryptoParameters {
|
|
// Key to be used for encryption
|
|
bytes key = 1;
|
|
// Second key (only required by some ciphers)
|
|
bytes key2 = 2;
|
|
enum Cipher {
|
|
AES_CBC = 0;
|
|
AES_XTS = 1;
|
|
}
|
|
// Cipher to use
|
|
Cipher cipher = 3;
|
|
}
|
|
|
|
// Parameters describing a volume
|
|
message VolumeParameters {
|
|
// Volume GUID/UUID
|
|
bytes volume_id = 1;
|
|
oneof connection_params {
|
|
// NVMeoF volume
|
|
nvmf.VolumeConnectionParameters nvmf = 2;
|
|
}
|
|
// Crypto parameters (optional)
|
|
VolumeCryptoParameters crypto = 3;
|
|
}
|
|
|
|
// Create device request
|
|
message CreateDeviceRequest {
|
|
// Volume to immediately attach to the created device. This field may be
|
|
// optional for some device types (e.g. NVMe), while it may be required for
|
|
// others (e.g. virtio-blk).
|
|
VolumeParameters volume = 1;
|
|
// Device-specific parameters
|
|
oneof params {
|
|
// NVMe parameters
|
|
nvme.DeviceParameters nvme = 2;
|
|
// Virtio-blk parameters
|
|
virtio_blk.DeviceParameters virtio_blk = 3;
|
|
// NVMe/TCP parameters
|
|
nvmf_tcp.DeviceParameters nvmf_tcp = 4;
|
|
}
|
|
}
|
|
|
|
// Create device response
|
|
message CreateDeviceResponse {
|
|
// Device handle that can uniquely identify a device within an instance of
|
|
// Storage Management Agent
|
|
string handle = 1;
|
|
}
|
|
|
|
// Delete device request
|
|
message DeleteDeviceRequest {
|
|
// Device handle
|
|
string handle = 1;
|
|
}
|
|
|
|
// Delete device response
|
|
message DeleteDeviceResponse {}
|
|
|
|
// Attach volume request
|
|
message AttachVolumeRequest {
|
|
// Volume parameters
|
|
VolumeParameters volume = 1;
|
|
// Device handle
|
|
string device_handle = 2;
|
|
}
|
|
|
|
// Attach volume response
|
|
message AttachVolumeResponse {}
|
|
|
|
// Detach volume request
|
|
message DetachVolumeRequest {
|
|
// Volume GUID/UUID
|
|
bytes volume_id = 1;
|
|
// Device handle
|
|
string device_handle = 2;
|
|
}
|
|
|
|
// Detach volume response
|
|
message DetachVolumeResponse {}
|
|
|
|
// Storage Management Agent gRPC service definition
|
|
service StorageManagementAgent {
|
|
// Creates a new device. A device is an entity that can be used to expose
|
|
// volumes (e.g. an NVMeoF subsystem).
|
|
rpc CreateDevice (CreateDeviceRequest)
|
|
returns (CreateDeviceResponse) {}
|
|
// Deletes a device
|
|
rpc DeleteDevice (DeleteDeviceRequest)
|
|
returns (DeleteDeviceResponse) {}
|
|
// Attaches a volume to a specified device making it available through that
|
|
// device (e.g. for NVMeoF this results in adding a namespace to an NVMeoF
|
|
// subsystem). The type of volume doesn't need to match the type of device
|
|
// (e.g. it's perfectly fine to attach an NVMe/TCP volume to a virtio-blk
|
|
// device).
|
|
rpc AttachVolume (AttachVolumeRequest)
|
|
returns (AttachVolumeResponse) {}
|
|
// Detaches a volume from a device
|
|
rpc DetachVolume (DetachVolumeRequest)
|
|
returns (DetachVolumeRequest) {}
|
|
}
|