Python API: Add support for shared memory prefix

Recheck.
This is to support multiple VPP instances on same host.

Change-Id: Ibe511b1f790fc8771900085577423f7e71dc45df
Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
Ole Troan
2016-10-05 11:10:50 +02:00
committed by Damjan Marion
parent d4bc9af55f
commit b8602b595f
5 changed files with 16 additions and 9 deletions

View File

@ -116,11 +116,14 @@ pneum_rx_thread_fn (void *arg)
}
int
pneum_connect (char *name)
pneum_connect (char * name, char * chroot_prefix)
{
int rv = 0;
pneum_main_t *pm = &pneum_main;
if (chroot_prefix != NULL)
vl_set_memory_root_path (chroot_prefix);
if ((rv = vl_client_api_map("/vpe-api"))) {
clib_warning ("vl_client_api map rv %d", rv);
return rv;

View File

@ -15,7 +15,7 @@
#ifndef included_pneum_h
#define included_pneum_h
int pneum_connect(char *name);
int pneum_connect(char * name, char * chroot_prefix);
int pneum_disconnect(void);
int pneum_read(char **data, int *l);
int pneum_write(char *data, int len);

View File

@ -76,7 +76,7 @@ int main (int argc, char ** argv)
vl_api_show_version_t message;
vl_api_show_version_t *mp;
int async = 1;
int rv = pneum_connect("pneum_client");
int rv = pneum_connect("pneum_client", NULL);
if (rv != 0) {
printf("Connect failed: %d\n", rv);

View File

@ -44,11 +44,11 @@ wrap_pneum_callback (char *data, int len)
static PyObject *
wrap_connect (PyObject *self, PyObject *args)
{
char *name;
char * name, * chroot_prefix = NULL;
int rv;
PyObject *temp;
PyObject * temp;
if (!PyArg_ParseTuple(args, "sO:set_callback", &name, &temp))
if (!PyArg_ParseTuple(args, "sO|s:wrap_connect", &name, &temp, &chroot_prefix))
return (NULL);
if (!PyCallable_Check(temp)) {
@ -61,7 +61,7 @@ wrap_connect (PyObject *self, PyObject *args)
pneum_callback = temp; /* Remember new callback */
Py_BEGIN_ALLOW_THREADS
rv = pneum_connect(name);
rv = pneum_connect(name, chroot_prefix);
Py_END_ALLOW_THREADS
return PyLong_FromLong(rv);
}

View File

@ -86,12 +86,16 @@ def handler(signum, frame):
print('Signal handler called with signal', signum)
raise IOError("Couldn't connect to VPP!")
def connect(name):
def connect(name, chroot_prefix = None):
# Set the signal handler
signal.signal(signal.SIGALRM, handler)
signal.alarm(3) # 3 second
rv = vpp_api.connect(name, msg_handler)
if not chroot_prefix:
rv = vpp_api.connect(name, msg_handler)
else:
rv = vpp_api.connect(name, msg_handler, chroot_prefix)
signal.alarm(0)
#