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:
@ -116,11 +116,14 @@ pneum_rx_thread_fn (void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
pneum_connect (char *name)
|
pneum_connect (char * name, char * chroot_prefix)
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
pneum_main_t *pm = &pneum_main;
|
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"))) {
|
if ((rv = vl_client_api_map("/vpe-api"))) {
|
||||||
clib_warning ("vl_client_api map rv %d", rv);
|
clib_warning ("vl_client_api map rv %d", rv);
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#ifndef included_pneum_h
|
#ifndef included_pneum_h
|
||||||
#define 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_disconnect(void);
|
||||||
int pneum_read(char **data, int *l);
|
int pneum_read(char **data, int *l);
|
||||||
int pneum_write(char *data, int len);
|
int pneum_write(char *data, int len);
|
||||||
|
@ -76,7 +76,7 @@ int main (int argc, char ** argv)
|
|||||||
vl_api_show_version_t message;
|
vl_api_show_version_t message;
|
||||||
vl_api_show_version_t *mp;
|
vl_api_show_version_t *mp;
|
||||||
int async = 1;
|
int async = 1;
|
||||||
int rv = pneum_connect("pneum_client");
|
int rv = pneum_connect("pneum_client", NULL);
|
||||||
|
|
||||||
if (rv != 0) {
|
if (rv != 0) {
|
||||||
printf("Connect failed: %d\n", rv);
|
printf("Connect failed: %d\n", rv);
|
||||||
|
@ -44,11 +44,11 @@ wrap_pneum_callback (char *data, int len)
|
|||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_connect (PyObject *self, PyObject *args)
|
wrap_connect (PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *name;
|
char * name, * chroot_prefix = NULL;
|
||||||
int rv;
|
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);
|
return (NULL);
|
||||||
|
|
||||||
if (!PyCallable_Check(temp)) {
|
if (!PyCallable_Check(temp)) {
|
||||||
@ -61,7 +61,7 @@ wrap_connect (PyObject *self, PyObject *args)
|
|||||||
pneum_callback = temp; /* Remember new callback */
|
pneum_callback = temp; /* Remember new callback */
|
||||||
|
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
rv = pneum_connect(name);
|
rv = pneum_connect(name, chroot_prefix);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
return PyLong_FromLong(rv);
|
return PyLong_FromLong(rv);
|
||||||
}
|
}
|
||||||
|
@ -86,12 +86,16 @@ def handler(signum, frame):
|
|||||||
print('Signal handler called with signal', signum)
|
print('Signal handler called with signal', signum)
|
||||||
raise IOError("Couldn't connect to VPP!")
|
raise IOError("Couldn't connect to VPP!")
|
||||||
|
|
||||||
def connect(name):
|
def connect(name, chroot_prefix = None):
|
||||||
# Set the signal handler
|
# Set the signal handler
|
||||||
signal.signal(signal.SIGALRM, handler)
|
signal.signal(signal.SIGALRM, handler)
|
||||||
|
|
||||||
signal.alarm(3) # 3 second
|
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)
|
signal.alarm(0)
|
||||||
|
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user