There's no good reason to limit plugins to Linux, make it available
on FreeBSD too.

Signed-off-by: Panu Matilainen <pmatilai at redhat.com>
---
 lib/librte_eal/bsdapp/eal/eal.c            |  2 ++
 lib/librte_eal/common/eal_common_options.c | 52 +++++++++++++++++++++++++++++
 lib/librte_eal/common/eal_options.h        |  1 +
 lib/librte_eal/linuxapp/eal/eal.c          | 53 ------------------------------
 4 files changed, 55 insertions(+), 53 deletions(-)

diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c
index 1b6f705..73dab89 100644
--- a/lib/librte_eal/bsdapp/eal/eal.c
+++ b/lib/librte_eal/bsdapp/eal/eal.c
@@ -543,6 +543,8 @@ rte_eal_init(int argc, char **argv)

        rte_eal_mcfg_complete();

+       eal_plugins_init();
+
        eal_thread_init_master(rte_config.master_lcore);

        ret = eal_thread_dump_affinity(cpuset, RTE_CPU_AFFINITY_STR_LEN);
diff --git a/lib/librte_eal/common/eal_common_options.c 
b/lib/librte_eal/common/eal_common_options.c
index 1f459ac..f8fc68a 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -39,6 +39,7 @@
 #include <limits.h>
 #include <errno.h>
 #include <getopt.h>
+#include <dlfcn.h>

 #include <rte_eal.h>
 #include <rte_log.h>
@@ -93,6 +94,20 @@ eal_long_options[] = {
        {0,                     0, NULL, 0                        }
 };

+TAILQ_HEAD(shared_driver_list, shared_driver);
+
+/* Definition for shared object drivers. */
+struct shared_driver {
+       TAILQ_ENTRY(shared_driver) next;
+
+       char    name[PATH_MAX];
+       void*   lib_handle;
+};
+
+/* List of external loadable drivers */
+static struct shared_driver_list solib_list =
+TAILQ_HEAD_INITIALIZER(solib_list);
+
 static int lcores_parsed;
 static int master_lcore_parsed;
 static int mem_parsed;
@@ -134,6 +149,37 @@ eal_reset_internal_config(struct internal_config 
*internal_cfg)
        internal_cfg->create_uio_dev = 0;
 }

+static int
+eal_plugin_add(const char *path)
+{
+       struct shared_driver *solib;
+
+       solib = malloc(sizeof(*solib));
+       if (solib == NULL) {
+               RTE_LOG(ERR, EAL, "malloc(solib) failed\n");
+               return -1;
+       }
+       memset(solib, 0, sizeof(*solib));
+       strncpy(solib->name, path, PATH_MAX-1);
+       solib->name[PATH_MAX-1] = 0;
+       TAILQ_INSERT_TAIL(&solib_list, solib, next);
+
+       return 0;
+}
+
+void
+eal_plugins_init(void)
+{
+       struct shared_driver *solib = NULL;
+
+       TAILQ_FOREACH(solib, &solib_list, next) {
+               RTE_LOG(DEBUG, EAL, "open shared lib %s\n", solib->name);
+               solib->lib_handle = dlopen(solib->name, RTLD_NOW);
+               if (solib->lib_handle == NULL)
+                       RTE_LOG(WARNING, EAL, "%s\n", dlerror());
+       }
+}
+
 /*
  * Parse the coremask given as argument (hexadecimal string) and fill
  * the global configuration (core role and core count) with the parsed
@@ -716,6 +762,11 @@ eal_parse_common_option(int opt, const char *optarg,
                 * even if info or warning messages are disabled */
                RTE_LOG(CRIT, EAL, "RTE Version: '%s'\n", rte_version());
                break;
+       /* force loading of external driver */
+       case 'd':
+               if (eal_plugin_add(optarg) == -1)
+                       return -1;
+               break;

        /* long options */
        case OPT_NO_HUGE_NUM:
@@ -902,6 +953,7 @@ eal_common_usage(void)
               "  --"OPT_PROC_TYPE"         Type of this process 
(primary|secondary|auto)\n"
               "  --"OPT_SYSLOG"            Set syslog facility\n"
               "  --"OPT_LOG_LEVEL"         Set default log level\n"
+              "  -d LIB.so           Add driver (can be used multiple times)\n"
               "  -v                  Display version information on startup\n"
               "  -h, --help          This help\n"
               "\nEAL options for DEBUG use only:\n"
diff --git a/lib/librte_eal/common/eal_options.h 
b/lib/librte_eal/common/eal_options.h
index f6714d9..1f96825 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -93,5 +93,6 @@ int eal_adjust_config(struct internal_config *internal_cfg);
 int eal_check_common_options(struct internal_config *internal_cfg);
 void eal_common_usage(void);
 enum rte_proc_type_t eal_proc_type_detect(void);
+void eal_plugins_init(void);

 #endif /* EAL_OPTIONS_H */
diff --git a/lib/librte_eal/linuxapp/eal/eal.c 
b/lib/librte_eal/linuxapp/eal/eal.c
index d8a53e4..455243e 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -43,7 +43,6 @@
 #include <getopt.h>
 #include <sys/file.h>
 #include <fcntl.h>
-#include <dlfcn.h>
 #include <stddef.h>
 #include <errno.h>
 #include <limits.h>
@@ -90,20 +89,6 @@
 /* Allow the application to print its usage message too if set */
 static rte_usage_hook_t        rte_application_usage_hook = NULL;

-TAILQ_HEAD(shared_driver_list, shared_driver);
-
-/* Definition for shared object drivers. */
-struct shared_driver {
-       TAILQ_ENTRY(shared_driver) next;
-
-       char    name[PATH_MAX];
-       void*   lib_handle;
-};
-
-/* List of external loadable drivers */
-static struct shared_driver_list solib_list =
-TAILQ_HEAD_INITIALIZER(solib_list);
-
 /* early configuration structure, when memory config is not mmapped */
 static struct rte_mem_config early_mem_config;

@@ -350,7 +335,6 @@ eal_usage(const char *prgname)
        printf("\nUsage: %s ", prgname);
        eal_common_usage();
        printf("EAL Linux options:\n"
-              "  -d LIB.so           Add driver (can be used multiple times)\n"
               "  --"OPT_SOCKET_MEM"        Memory to allocate on sockets 
(comma separated values)\n"
               "  --"OPT_HUGE_DIR"          Directory where hugetlbfs is 
mounted\n"
               "  --"OPT_FILE_PREFIX"       Prefix for hugepage filenames\n"
@@ -530,37 +514,6 @@ eal_log_level_parse(int argc, char **argv)
        optind = 0; /* reset getopt lib */
 }

-static int
-eal_plugin_add(const char *path)
-{
-       struct shared_driver *solib;
-
-       solib = malloc(sizeof(*solib));
-       if (solib == NULL) {
-               RTE_LOG(ERR, EAL, "malloc(solib) failed\n");
-               return -1;
-       }
-       memset(solib, 0, sizeof(*solib));
-       strncpy(solib->name, path, PATH_MAX-1);
-       solib->name[PATH_MAX-1] = 0;
-       TAILQ_INSERT_TAIL(&solib_list, solib, next);
-
-       return 0;
-}
-
-static void
-eal_plugins_init(void)
-{
-       struct shared_driver *solib = NULL;
-
-       TAILQ_FOREACH(solib, &solib_list, next) {
-               RTE_LOG(DEBUG, EAL, "open shared lib %s\n", solib->name);
-               solib->lib_handle = dlopen(solib->name, RTLD_NOW);
-               if (solib->lib_handle == NULL)
-                       RTE_LOG(WARNING, EAL, "%s\n", dlerror());
-       }
-}
-
 /* Parse the argument given in the command line of the application */
 static int
 eal_parse_args(int argc, char **argv)
@@ -598,12 +551,6 @@ eal_parse_args(int argc, char **argv)
                        eal_usage(prgname);
                        exit(EXIT_SUCCESS);

-               /* force loading of external driver */
-               case 'd':
-                       if (eal_plugin_add(optarg) == -1)
-                               return -1;
-                       break;
-
                /* long options */
                case OPT_XEN_DOM0_NUM:
 #ifdef RTE_LIBRTE_XEN_DOM0
-- 
2.4.3

Reply via email to