syntax = "proto3";

package containerd.v1.services.shim;

import "google/protobuf/empty.proto";
import "gogoproto/gogo.proto";
import "github.com/docker/containerd/api/types/mount/mount.proto";
import "github.com/docker/containerd/api/types/container/container.proto";

service Shim {
	rpc Create(CreateRequest) returns (CreateResponse);
	rpc Start(StartRequest) returns (google.protobuf.Empty);
	rpc Delete(DeleteRequest) returns (DeleteResponse);
	rpc Exec(ExecRequest) returns (ExecResponse);
	rpc Pty(PtyRequest) returns (google.protobuf.Empty);
	rpc Events(EventsRequest) returns (stream containerd.v1.types.Event);
	rpc State(StateRequest) returns (StateResponse);
	rpc Pause(PauseRequest) returns (google.protobuf.Empty);
	rpc Resume(ResumeRequest) returns (google.protobuf.Empty);
	rpc Exit(ExitRequest) returns (google.protobuf.Empty);
}

message CreateRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	string bundle = 2;
	string runtime = 3;
	bool no_pivot = 4;
	bool terminal = 5;
	string stdin = 6;
	string stdout = 7;
	string stderr = 8;
	repeated containerd.v1.types.Mount rootfs = 9;
}

message CreateResponse {
	uint32 pid = 1;
}

message StartRequest {
}

message DeleteRequest {
	uint32 pid = 1;
}

message DeleteResponse {
	uint32 exit_status = 1;
}

message ExecRequest {
	bool terminal = 1;
	string stdin = 2;
	string stdout = 3;
	string stderr = 4;
	string selinux_label = 5;
	containerd.v1.types.User user = 6;
	repeated string args = 7;
	repeated string env = 8;
	string cwd = 9;
	repeated string capabilities = 10;
	repeated Rlimit rlimits = 11;
	bool no_new_privileges = 12;
	string apparmor_profile = 13;
}

message Rlimit {
	string type = 1;
	uint64 hard = 2;
	uint64 soft = 3;
}

message ExecResponse {
	uint32 pid = 1;
}

message PtyRequest {
	uint32 pid = 1;
	uint32 width = 2;
	uint32 height = 3;
}

message EventsRequest {
}

message StateRequest {
}

message StateResponse {
	string id = 1 [(gogoproto.customname) = "ID"];
	string bundle = 2;
	uint32 pid = 3;
	repeated containerd.v1.types.Process processes = 4;
}


message PauseRequest {
}

message ResumeRequest {
}

message ExitRequest {
}
