From 75b66b374067ddfc4d9ed316d66250c4e60db985 Mon Sep 17 00:00:00 2001 From: Vladislav Grishenko Date: Fri, 29 Oct 2021 20:40:52 +0500 Subject: papi: fix socket api max message id calculation In case of sparse message ids due fixed offsets, length of the message table is less than max message id, causing "IndexError: list assignment index out of range" exception in _register_function() due "self.id_msgdef[i] = msg". Unlike shmem api, socket api needs to use max id. Type: fix Signed-off-by: Vladislav Grishenko Change-Id: Ib777db9dabc3a5a3ff83f07ec211cf2fb3c15cf0 Signed-off-by: Ole Troan --- src/vpp-api/python/vpp_papi/vpp_papi_async.py | 3 ++- src/vpp-api/python/vpp_papi/vpp_transport_socket.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/vpp-api/python/vpp_papi') diff --git a/src/vpp-api/python/vpp_papi/vpp_papi_async.py b/src/vpp-api/python/vpp_papi/vpp_papi_async.py index d9a4fabb69e..44e2a78eeea 100644 --- a/src/vpp-api/python/vpp_papi/vpp_papi_async.py +++ b/src/vpp-api/python/vpp_papi/vpp_papi_async.py @@ -451,7 +451,8 @@ class VPPApiClient: for m in r.message_table: n = m.name self.message_table[n] = m.index - self.vpp_dictionary_maxid = len(self.message_table) + # Find the maximum index of the message table + self.vpp_dictionary_maxid = max(self.message_table.values() or [0]) # self.worker_task = asyncio.create_task(self.message_handler(event_queue)) requests = {} diff --git a/src/vpp-api/python/vpp_papi/vpp_transport_socket.py b/src/vpp-api/python/vpp_papi/vpp_transport_socket.py index 174ab74d0b8..1ba365ad6e1 100644 --- a/src/vpp-api/python/vpp_papi/vpp_transport_socket.py +++ b/src/vpp-api/python/vpp_papi/vpp_transport_socket.py @@ -177,7 +177,8 @@ class VppTransport: return 0 def msg_table_max_index(self): - return len(self.message_table) + """Return the maximum index of the message table.""" + return max(self.message_table.values() or [0]) def write(self, buf): """Send a binary-packed message to VPP.""" -- cgit