vSPC: Handle VMOTION-ABORT.

VMOTION-ABORT is sent by the source host.  It does not require any
specific response or action, but we currently fail to recognize it,
which causes the _source_ vSPC connection to be terminated, and that
seems undesirable as the source should be fine -- it is the
_destination_ which has failed and is expected to disconnect.

This change handles it with a debug log message, but the side effect
of handling it is that the connection is no longer terminated.

Also fix the direction indicator for the debug message for
VMOTION-PEER-OK.

Change-Id: Id09ed363d6713c023323235a60d4c678c65079f1
This commit is contained in:
Darius Davis 2023-06-21 21:42:18 -07:00
parent 206e36008f
commit 6de3cfdc08

View File

@ -129,7 +129,7 @@ class VspcServer(object):
socket = writer.get_extra_info('socket') socket = writer.get_extra_info('socket')
peer = socket.getpeername() peer = socket.getpeername()
LOG.debug("<< %s VMOTION-PEER %s", peer, data) LOG.debug("<< %s VMOTION-PEER %s", peer, data)
LOG.debug("<< %s VMOTION-PEER-OK %s", peer, data) LOG.debug(">> %s VMOTION-PEER-OK %s", peer, data)
writer.write(IAC + SB + VMWARE_EXT + VMOTION_PEER_OK + writer.write(IAC + SB + VMWARE_EXT + VMOTION_PEER_OK +
async_telnet.AsyncTelnet.escape(data) + IAC + SE) async_telnet.AsyncTelnet.escape(data) + IAC + SE)
yield from writer.drain() yield from writer.drain()
@ -138,6 +138,10 @@ class VspcServer(object):
peer = socket.getpeername() peer = socket.getpeername()
LOG.debug("<< %s VMOTION-COMPLETE %s", peer, data) LOG.debug("<< %s VMOTION-COMPLETE %s", peer, data)
def handle_vmotion_abort(self, socket, data):
peer = socket.getpeername()
LOG.debug("<< %s VMOTION-ABORT %s", peer, data)
@asyncio.coroutine @asyncio.coroutine
def handle_do(self, writer, opt): def handle_do(self, writer, opt):
socket = writer.get_extra_info('socket') socket = writer.get_extra_info('socket')
@ -183,6 +187,8 @@ class VspcServer(object):
yield from self.handle_vmotion_peer(writer, data[2:]) yield from self.handle_vmotion_peer(writer, data[2:])
elif vmw_cmd == VMOTION_COMPLETE: elif vmw_cmd == VMOTION_COMPLETE:
self.handle_vmotion_complete(socket, data[2:]) self.handle_vmotion_complete(socket, data[2:])
elif vmw_cmd == VMOTION_ABORT:
self.handle_vmotion_abort(socket, data[2:])
else: else:
LOG.error("Unknown VMware cmd: %s %s", vmw_cmd, data[2:]) LOG.error("Unknown VMware cmd: %s %s", vmw_cmd, data[2:])
writer.close() writer.close()