2
0
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:
Emma Finn 2022-07-15 10:16:17 +00:00 committed by Ian Stokes
parent eec8227614
commit 1713fc0116
8 changed files with 111 additions and 0 deletions

2
NEWS
View File

@ -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.

View File

@ -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 \

View File

@ -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)
{

View File

@ -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 */

View 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.

View File

@ -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);
}
}

View File

@ -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

View File

@ -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