/*********************************************************
- * Copyright (C) 2018-2019 VMware, Inc. All rights reserved.
+ * Copyright (C) 2018-2021 VMware, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
uint32 fieldId;
uint64 value;
} hdr;
+ struct {
+ uint32 type;
+ uint32 fieldId;
+ uint64 value;
+ } flags;
struct {
uint32 type;
uint32 fieldId;
hdr.fieldId = htonl(1); // GUESTRPCPKT_FIELD_TYPE
hdr.value = _vmxlog_htonll(1); // GUESTRPCPKT_TYPE_DATA
+ /*
+ * Adding the fast_close flag GUESTRPCPKT_FIELD_FAST_CLOSE in the packet
+ * to indicate vmx to close the channel as soon as the response is sent.
+ */
+ flags.type = htonl(1); // DMFIELDTYPE_INT64
+ flags.fieldId = htonl(3); // GUESTRPCPKT_FIELD_FAST_CLOSE
+ flags.value = _vmxlog_htonll(1); // GUESTRPCPKT_TYPE_DATA
+
/*
* this part of the data doesn't seem to care about network byte
* order, but do it anyways.
payload.fieldId = htonl(2); // GUESTRPCPKT_FIELD_PAYLOAD
payload.len = htonl(len); // length of 'cmd'
- plen = sizeof(hdr) + sizeof(payload) + len;
+ plen = sizeof(hdr) + sizeof(flags) + sizeof(payload) + len;
tlen = plen + sizeof(int);
packet = (char *) g_malloc(tlen);
memcpy(p, &hdr, sizeof hdr);
p += sizeof hdr;
+ memcpy(p, &flags, sizeof flags);
+ p += sizeof flags;
memcpy(p, &payload, sizeof payload);
p += sizeof payload;
memcpy(p, cmd, len);