From cb9cadad578297ffd78fa8a33670bdf1ab669e7e Mon Sep 17 00:00:00 2001 From: Ed Warnicke Date: Tue, 8 Dec 2015 15:45:58 -0700 Subject: Initial commit of vpp code. Change-Id: Ib246f1fbfce93274020ee93ce461e3d8bd8b9f17 Signed-off-by: Ed Warnicke --- vpp/api/n1k_harness.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 vpp/api/n1k_harness.c (limited to 'vpp/api/n1k_harness.c') diff --git a/vpp/api/n1k_harness.c b/vpp/api/n1k_harness.c new file mode 100644 index 00000000..4a5df4bd --- /dev/null +++ b/vpp/api/n1k_harness.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include + +void vlib_cli_output (void * vm, char * fmt, ...) +{ clib_warning ("%s", fmt); } + +/* + * build system finesse hack + * since we can't build everything in one build system, this + * hack exists to make sure that the invoked program runs against + * the right libraries. + */ + +int main (int argc, char ** argv) +{ + void *handle, *main_handle; + int (*fp)(int argc, char **argv); + int rv; + + /* n1k_harness */ + + if (argc < 2) { + fformat (stderr, "usage: %s [...]\n", + argv[0]); + exit (1); + } + + handle = dlopen (argv[1], RTLD_LAZY); + + /* + * Note: this can happen if the plugin has an undefined symbol reference, + * so print a warning. Otherwise, the poor slob won't know what happened. + * Ask me how I know that... + */ + if (handle == 0) + { + clib_warning ("%s", dlerror()); + exit(1); + } + + main_handle = dlsym (handle, "plugin_main"); + if (main_handle == 0) { + clib_warning ("plugin_main(int argc, char **argv) missing...\n"); + exit(1); + } + + fp = main_handle; + + rv = (*fp)(argc-2, argv+2); + + return rv; +} -- cgit 1.2.3-korg