api: fix vac_read return codes 68/20268/6
authorPaul Vinciguerra <pvinci@vinciconsulting.com>
Thu, 20 Jun 2019 17:46:46 +0000 (13:46 -0400)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Tue, 25 Jun 2019 11:25:07 +0000 (11:25 +0000)
- vac_read was returning the same code for multiple errors.
- Refactor VppTransportShmemIOError to capture rv and description.

Type: refactor

Change-Id: Ifb8ca5ff679f658bcd92a43ecddaffd2fc18dbd5
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
src/vpp-api/client/client.c
src/vpp-api/python/vpp_papi/vpp_transport_shmem.py

index 5b47fd4..50d088c 100644 (file)
@@ -450,11 +450,13 @@ vac_read (char **p, int *l, u16 timeout)
   int rv;
   vl_shmem_hdr_t *shmem_hdr;
 
-  if (!pm->connected_to_vlib) return -1;
+  /* svm_queue_sub(below) returns {-1, -2} */
+  if (!pm->connected_to_vlib) return -3;
 
   *l = 0;
 
-  if (am->our_pid == 0) return (-1);
+  /* svm_queue_sub(below) returns {-1, -2} */
+  if (am->our_pid == 0) return (-4);
 
   /* Poke timeout thread */
   if (timeout)
index 53ae775..64c1a59 100644 (file)
@@ -48,7 +48,13 @@ def vac_error_handler(arg, msg, msg_len):
 
 
 class VppTransportShmemIOError(IOError):
-    pass
+    """ exception communicating with vpp over shared memory """
+
+    def __init__(self, rv, descr):
+        self.rv = rv
+        self.desc = descr
+
+        super(VppTransportShmemIOError, self).__init__(rv, descr)
 
 
 class VppTransport(object):
@@ -117,7 +123,8 @@ class VppTransport(object):
         size = ffi.new("int *")
         rv = vpp_api.vac_read(mem, size, self.read_timeout)
         if rv:
-            raise VppTransportShmemIOError(rv, 'vac_read failed')
+            strerror = 'vac_read failed.  It is likely that VPP died.'
+            raise VppTransportShmemIOError(rv, strerror)
         msg = bytes(ffi.buffer(mem[0], size[0]))
         vpp_api.vac_free(mem[0])
         return msg