|
17 | 17 | #define kHyperVICVersionV3 VMBUS_VERSION(3, 0)
|
18 | 18 |
|
19 | 19 | //
|
20 |
| -// Message types. |
| 20 | +// IC message types. |
21 | 21 | //
|
22 | 22 | typedef enum : UInt16 {
|
| 23 | + // IC general negotiation. |
23 | 24 | kVMBusICMessageTypeNegotiate = 0,
|
| 25 | + // Heartbeat component. |
24 | 26 | kVMBusICMessageTypeHeartbeat = 1,
|
| 27 | + // KVP component. |
25 | 28 | kVMBusICMessageTypeKVPExchange = 2,
|
| 29 | + // Guest shutdown component. |
26 | 30 | kVMBusICMessageTypeShutdown = 3,
|
| 31 | + // Time sync component. |
27 | 32 | kVMBusICMessageTypeTimeSync = 4,
|
| 33 | + // Snapshot (VSS) component. |
28 | 34 | kVMBusICMessageTypeSnapshot = 5,
|
| 35 | + // File copy component. |
29 | 36 | kVMBusICMessageTypeFileCopy = 7
|
30 | 37 | } VMBusICMessageType;
|
31 | 38 |
|
| 39 | +// IC message is part of a transaction. |
32 | 40 | #define kVMBusICFlagTransaction 1
|
| 41 | +// IC message is from host to guest. |
33 | 42 | #define kVMBusICFlagRequest 2
|
| 43 | +// IC message is from guest to host. |
34 | 44 | #define kVMBusICFlagResponse 4
|
35 | 45 |
|
36 | 46 | //
|
37 |
| -// Header and common negotiation message. |
| 47 | +// IC message header common to all integration components. |
38 | 48 | //
|
39 | 49 | typedef struct __attribute__((packed)) {
|
| 50 | + // Pipe flags? Unknown field that LIS does not use. |
40 | 51 | UInt32 pipeFlags;
|
41 |
| - UInt32 pipeMsgs; |
| 52 | + // Pipe message size? Unknown field that LIS does not use. |
| 53 | + UInt32 pipeMsgSize; |
42 | 54 |
|
| 55 | + // Framework version. |
43 | 56 | VMBusVersion frameworkVersion;
|
| 57 | + // Message type. |
44 | 58 | VMBusICMessageType type;
|
| 59 | + // Message version. |
45 | 60 | VMBusVersion msgVersion;
|
| 61 | + // Size of data excluding header. |
46 | 62 | UInt16 dataSize;
|
| 63 | + // Return status to Hyper-V. |
47 | 64 | HyperVStatus status;
|
| 65 | + // Transaction ID. Integration components seem to disregard |
| 66 | + // the VMBus transaction ID in favor of this one. |
48 | 67 | UInt8 transactionId;
|
| 68 | + // Message flags. |
49 | 69 | UInt8 flags;
|
| 70 | + // Reserved. |
50 | 71 | UInt16 reserved;
|
51 | 72 | } VMBusICMessageHeader;
|
52 | 73 |
|
| 74 | +// |
| 75 | +// IC version negotiation message. |
| 76 | +// |
53 | 77 | typedef struct __attribute__((packed)) {
|
| 78 | + // IC message header. |
54 | 79 | VMBusICMessageHeader header;
|
55 | 80 |
|
| 81 | + // Number of framework versions contained in message. |
56 | 82 | UInt16 frameworkVersionCount;
|
| 83 | + // Number of message versions contained in message. |
57 | 84 | UInt16 messageVersionCount;
|
| 85 | + // Reserved. |
58 | 86 | UInt32 reserved;
|
| 87 | + // Array containing supported framework and message versions. |
59 | 88 | VMBusVersion versions[];
|
60 | 89 | } VMBusICMessageNegotiate;
|
61 | 90 |
|
|
0 commit comments