message L4SysProtoMsg {
	// experiment types
	enum ExperimentType {
		GPRFLIP = 1;
		RATFLIP = 2;
		IDCFLIP = 3;
		ALUINSTR = 4;
	}
	// parameters
	required ExperimentType exp_type = 1;
	required int32 instr_offset = 2;
	required int32 bit_offset = 3;

	// registers
	enum RegisterType {
		EAX = 1;
		ECX = 2;
		EDX = 3;
		EBX = 4;
		ESP = 5;
		EBP = 6;
		ESI = 7;
		EDI = 8;
	}
	optional RegisterType register_offset = 4;

	// results
	// make these optional to reduce overhead for server->client communication
	enum ResultType {
		DONE = 1;
		INCOMPLETE = 2;
		TIMEOUT = 3;
		WRONG = 4;
		UNKNOWN = 5;
	}
	// instruction pointer where injection was done
	optional uint32 injection_ip = 5;
	// result type, see above
	optional ResultType resulttype = 6;
	// result data, depending on resulttype (see source code)
	optional uint32 resultdata = 7;
	// generated output
	optional string output = 8;
	// optional textual description of what happened
	optional string details = 9;
}
