mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +00:00
odp-execute: Add command to switch action implementation.
This commit adds a new command to allow the user to switch the active action implementation at runtime. Usage: $ ovs-appctl odp-execute/action-impl-set scalar This commit also adds a new command to retrieve the list of available action implementations. This can be used by to check what implementations of actions are available and what implementation is active during runtime. Usage: $ ovs-appctl odp-execute/action-impl-show Added separate test-case for ovs-actions show/set commands: odp-execute - actions implementation Signed-off-by: Emma Finn <emma.finn@intel.com> Signed-off-by: Kumar Amber <kumar.amber@intel.com> Signed-off-by: Sunil Pai G <sunil.pai.g@intel.com> Co-authored-by: Kumar Amber <kumar.amber@intel.com> Co-authored-by: Sunil Pai G <sunil.pai.g@intel.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com> Acked-by: Eelco Chaudron <echaudro@redhat.com> Signed-off-by: Ian Stokes <ian.stokes@intel.com>
This commit is contained in:
parent
eec8227614
commit
1713fc0116
2
NEWS
2
NEWS
@ -57,6 +57,8 @@ Post-v2.17.0
|
||||
The old variant is kept for backward compatibility.
|
||||
* Add actions auto-validator function to compare different actions
|
||||
implementations against default implementation.
|
||||
* Add command line option to switch between different actions
|
||||
implementations available at run time.
|
||||
- Linux datapath:
|
||||
* Add offloading meter tc police.
|
||||
* Add support for offloading the check_pkt_len action.
|
||||
|
@ -584,6 +584,7 @@ MAN_FRAGMENTS += \
|
||||
lib/netdev-dpdk-unixctl.man \
|
||||
lib/dpif-netdev-unixctl.man \
|
||||
lib/dpif-netlink-unixctl.man \
|
||||
lib/odp-execute-unixctl.man \
|
||||
lib/ofp-version.man \
|
||||
lib/ovs.tmac \
|
||||
lib/ovs-replay.man \
|
||||
|
@ -67,6 +67,18 @@ odp_execute_action_set(const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
odp_execute_action_get_info(struct ds *string)
|
||||
{
|
||||
ds_put_cstr(string, "Available Actions implementations:\n");
|
||||
for (int i = 0; i < ACTION_IMPL_MAX; i++) {
|
||||
ds_put_format(string, " %s (available: %s, active: %s)\n",
|
||||
action_impls[i].name,
|
||||
action_impls[i].available ? "Yes" : "No",
|
||||
i == active_action_impl_index ? "Yes" : "No");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
odp_execute_action_init(void)
|
||||
{
|
||||
|
@ -78,4 +78,6 @@ struct odp_execute_action_impl * odp_execute_action_set(const char *name);
|
||||
|
||||
int action_autoval_init(struct odp_execute_action_impl *self);
|
||||
|
||||
void odp_execute_action_get_info(struct ds *name);
|
||||
|
||||
#endif /* ODP_EXTRACT_PRIVATE */
|
||||
|
10
lib/odp-execute-unixctl.man
Normal file
10
lib/odp-execute-unixctl.man
Normal file
@ -0,0 +1,10 @@
|
||||
.SS "ODP-EXECUTE COMMANDS"
|
||||
These commands manage the "odp-execute" component.
|
||||
|
||||
.IP "\fBodp-execute/action-impl-show\fR
|
||||
Lists the actions implementations that are available and highlights the
|
||||
currently enabled one.
|
||||
.
|
||||
.IP "\fBodp-execute/action-impl-set\fR \fIaction_impl\fR"
|
||||
Sets the action implementation to any available implementation. By default
|
||||
"scalar" is used.
|
@ -39,6 +39,7 @@
|
||||
#include "csum.h"
|
||||
#include "conntrack.h"
|
||||
#include "openvswitch/vlog.h"
|
||||
#include "unixctl.h"
|
||||
|
||||
VLOG_DEFINE_THIS_MODULE(odp_execute);
|
||||
COVERAGE_DEFINE(datapath_drop_sample_error);
|
||||
@ -876,6 +877,48 @@ odp_actions_impl_set(const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
action_impl_set(struct unixctl_conn *conn, int argc OVS_UNUSED,
|
||||
const char *argv[], void *aux OVS_UNUSED)
|
||||
{
|
||||
struct ds reply = DS_EMPTY_INITIALIZER;
|
||||
|
||||
int err = odp_actions_impl_set(argv[1]);
|
||||
if (err) {
|
||||
ds_put_format(&reply,
|
||||
"Error: unknown action implementation, %s, specified!",
|
||||
argv[1]);
|
||||
unixctl_command_reply_error(conn, ds_cstr(&reply));
|
||||
} else {
|
||||
ds_put_format(&reply, "Action implementation set to %s.", argv[1]);
|
||||
unixctl_command_reply(conn, ds_cstr(&reply));
|
||||
}
|
||||
|
||||
ds_destroy(&reply);
|
||||
}
|
||||
|
||||
static void
|
||||
action_impl_show(struct unixctl_conn *conn, int argc OVS_UNUSED,
|
||||
const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED)
|
||||
{
|
||||
struct ds reply = DS_EMPTY_INITIALIZER;
|
||||
|
||||
odp_execute_action_get_info(&reply);
|
||||
unixctl_command_reply(conn, ds_cstr(&reply));
|
||||
ds_destroy(&reply);
|
||||
}
|
||||
|
||||
static void
|
||||
odp_execute_unixctl_init(void)
|
||||
{
|
||||
unixctl_command_register("odp-execute/action-impl-set", "name",
|
||||
1, 1, action_impl_set,
|
||||
NULL);
|
||||
unixctl_command_register("odp-execute/action-impl-show", "",
|
||||
0, 0, action_impl_show,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
odp_execute_init(void)
|
||||
{
|
||||
@ -883,6 +926,7 @@ odp_execute_init(void)
|
||||
if (ovsthread_once_start(&once)) {
|
||||
odp_execute_action_init();
|
||||
odp_actions_impl_set("scalar");
|
||||
odp_execute_unixctl_init();
|
||||
ovsthread_once_done(&once);
|
||||
}
|
||||
}
|
||||
|
39
tests/odp.at
39
tests/odp.at
@ -472,3 +472,42 @@ AT_CHECK_UNQUOTED([ovstest test-odp parse-keys < odp-in.txt], [0], [dnl
|
||||
odp_flow_from_string: error (syntax error at encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap(encap())))))))))))))))))))))))))))))))))
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_BANNER([datapath actions in userspace])
|
||||
AT_SETUP([odp-execute - actions implementation])
|
||||
OVS_VSWITCHD_START()
|
||||
|
||||
AT_CHECK([ovs-vsctl show], [], [stdout])
|
||||
|
||||
dnl Set the scalar first, so we always have the scalar impl as Active.
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-set scalar], [0], [dnl
|
||||
Action implementation set to scalar.
|
||||
])
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-show | grep "scalar"], [], [dnl
|
||||
scalar (available: Yes, active: Yes)
|
||||
])
|
||||
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-show | grep "autovalidator"], [], [dnl
|
||||
autovalidator (available: Yes, active: No)
|
||||
])
|
||||
|
||||
dnl Set the autovalidator impl to active.
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-set autovalidator], [0], [dnl
|
||||
Action implementation set to autovalidator.
|
||||
])
|
||||
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-show | grep "scalar"], [], [dnl
|
||||
scalar (available: Yes, active: No)
|
||||
])
|
||||
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-show | grep "autovalidator"], [], [dnl
|
||||
autovalidator (available: Yes, active: Yes)
|
||||
])
|
||||
|
||||
AT_CHECK([ovs-appctl odp-execute/action-impl-set invalid_implementation], [2], [], [dnl
|
||||
Error: unknown action implementation, invalid_implementation, specified!
|
||||
ovs-appctl: ovs-vswitchd: server returned an error
|
||||
])
|
||||
|
||||
OVS_VSWITCHD_STOP(["/Failed setting action implementation to invalid_implementation/d"])
|
||||
AT_CLEANUP
|
||||
|
@ -282,6 +282,7 @@ type).
|
||||
.so lib/dpif-netdev-unixctl.man
|
||||
.so lib/dpif-netlink-unixctl.man
|
||||
.so lib/netdev-dpdk-unixctl.man
|
||||
.so lib/odp-execute-unixctl.man
|
||||
.so ofproto/ofproto-dpif-unixctl.man
|
||||
.so ofproto/ofproto-unixctl.man
|
||||
.so lib/vlog-unixctl.man
|
||||
|
Loading…
x
Reference in New Issue
Block a user