#include "netdev-provider.h"
#include "netdev-vport.h"
#include "odp-util.h"
+#include "openvswitch/dynamic-string.h"
#include "openvswitch/list.h"
#include "openvswitch/ofp-print.h"
#include "openvswitch/vlog.h"
newargv[argc+1] = xstrdup(value);
}
+static int
+extra_dpdk_args(const char *ovs_extra_config, char ***argv, int argc)
+{
+ int ret = argc;
+ char *release_tok = xstrdup(ovs_extra_config);
+ char *tok = release_tok, *endptr = NULL;
+
+ for (tok = strtok_r(release_tok, " ", &endptr); tok != NULL;
+ tok = strtok_r(NULL, " ", &endptr)) {
+ char **newarg = grow_argv(argv, ret, 1);
+ *argv = newarg;
+ newarg[ret++] = xstrdup(tok);
+ }
+ free(release_tok);
+ return ret;
+}
+
static int
construct_dpdk_options(const struct smap *ovs_other_config,
char ***argv, const int initial_size)
get_dpdk_args(const struct smap *ovs_other_config, char ***argv,
int argc)
{
+ const char *extra_configuration;
int i = construct_dpdk_options(ovs_other_config, argv, argc);
i = construct_dpdk_mutex_options(ovs_other_config, argv, i);
+
+ extra_configuration = smap_get(ovs_other_config, "dpdk-extra");
+ if (extra_configuration) {
+ i = extra_dpdk_args(extra_configuration, argv, i);
+ }
return i;
}
optind = 1;
+ if (VLOG_IS_INFO_ENABLED()) {
+ struct ds eal_args;
+ int opt;
+ ds_init(&eal_args);
+ ds_put_cstr(&eal_args, "EAL ARGS:");
+ for (opt = 0; opt < argc; ++opt) {
+ ds_put_cstr(&eal_args, " ");
+ ds_put_cstr(&eal_args, argv[opt]);
+ }
+ VLOG_INFO("%s", ds_cstr_ro(&eal_args));
+ ds_destroy(&eal_args);
+ }
+
/* Make sure things are initialized ... */
result = rte_eal_init(argc, argv);
if (result < 0) {
if options.dpdk:
_sh("ovs-vsctl --no-wait set Open_vSwitch %s " \
"other_config:dpdk-init=true" % root_uuid)
+ _sh("ovs-vsctl --no-wait set Open_vSwitch %s other_config:" \
+ "dpdk-extra=\"%s\"" % (root_uuid, ' '.join(options.dpdk)))
else:
_sh("ovs-vsctl --no-wait set Open_vSwitch %s " \
"other_config:dpdk-init=false" % root_uuid)
help="run ovs-vswitchd under gdb")
group.add_option("--valgrind", dest="valgrind", action="store_true",
help="run ovs-vswitchd under valgrind")
- group.add_option("--dpdk", dest="dpdk", action="store_true",
- help="run ovs-vswitchd with dpdk")
+ group.add_option("--dpdk", dest="dpdk", action="callback",
+ callback=parse_subargs,
+ help="run ovs-vswitchd with dpdk subopts (ended by --)")
group.add_option("--clang", dest="clang", action="store_true",
help="Use binaries built by clang")
group.add_option("--user", dest="user", action="store", default="",