diff options
author | 2021-10-29 20:40:52 +0500 | |
---|---|---|
committer | 2025-03-04 10:04:14 +0000 | |
commit | 75b66b374067ddfc4d9ed316d66250c4e60db985 (patch) | |
tree | e3acc58a9734ddd904bf2e43dc1a2b90bb12256b | |
parent | 86abfc3e0aee3a1a1ae9107d03d98bf1cdcedd33 (diff) |
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 <themiron@yandex-team.ru>
Change-Id: Ib777db9dabc3a5a3ff83f07ec211cf2fb3c15cf0
Signed-off-by: Ole Troan <otroan@employees.org>
-rw-r--r-- | src/vpp-api/python/vpp_papi/vpp_papi_async.py | 3 | ||||
-rw-r--r-- | src/vpp-api/python/vpp_papi/vpp_transport_socket.py | 3 |
2 files changed, 4 insertions, 2 deletions
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.""" |