X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fpython%2Fvpp_papi%2Fvpp_transport_shmem.py;h=4e40f2352e4f4f37c882a35ec1ddca00f80a4f56;hb=daa4bff16;hp=4d56e3cf00aa393e5fc7144d038042d8b911bf91;hpb=40cca7585d969499e92b98c32956bbe3f2050e4e;p=vpp.git diff --git a/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py b/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py index 4d56e3cf00a..4e40f2352e4 100644 --- a/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py +++ b/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py @@ -47,7 +47,19 @@ def vac_error_handler(arg, msg, msg_len): vpp_object.logger.warning("VPP API client:: %s", ffi.string(msg, msg_len)) -class VppTransport: +class VppTransportShmemIOError(IOError): + """ 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): + VppTransportShmemIOError = VppTransportShmemIOError + def __init__(self, parent, read_timeout, server_address): self.connected = False self.read_timeout = read_timeout @@ -71,7 +83,7 @@ class VppTransport: self.connected = True if not pfx: pfx = ffi.NULL - return vpp_api.vac_connect(name, pfx, msg_handler, rx_qlen) + return vpp_api.vac_connect(name.encode('ascii'), pfx, msg_handler, rx_qlen) def disconnect(self): self.connected = False @@ -83,11 +95,11 @@ class VppTransport: def resume(self): vpp_api.vac_rx_resume() - def get_callback(self, async): - return vac_callback_sync if not async else vac_callback_async + def get_callback(self, do_async): + return vac_callback_sync if not do_async else vac_callback_async def get_msg_index(self, name): - return vpp_api.vac_get_msg_index(name) + return vpp_api.vac_get_msg_index(name.encode('ascii')) def msg_table_max_index(self): return vpp_api.vac_msg_table_max_index() @@ -95,23 +107,24 @@ class VppTransport: def _write_new_cffi(self, buf): """Send a binary-packed message to VPP.""" if not self.connected: - raise IOError(1, 'Not connected') + raise VppTransportShmemIOError(1, 'Not connected') return vpp_api.vac_write(ffi.from_buffer(buf), len(buf)) def _write_legacy_cffi(self, buf): """Send a binary-packed message to VPP.""" if not self.connected: - raise IOError(1, 'Not connected') + raise VppTransportShmemIOError(1, 'Not connected') return vpp_api.vac_write(bytes(buf), len(buf)) def read(self): if not self.connected: - raise IOError(1, 'Not connected') + raise VppTransportShmemIOError(1, 'Not connected') mem = ffi.new("char **") size = ffi.new("int *") rv = vpp_api.vac_read(mem, size, self.read_timeout) if rv: - raise IOError(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