mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
dpctl: Expand the flow dump type filter
Added new types to the flow dump filter, and allowed multiple filter types to be passed at once, as a comma separated list. The new types added are: * tc - specifies flows handled by the tc dp * non-offloaded - specifies flows not offloaded to the HW * all - specifies flows of all types The type list is now fully parsed by the dpctl, and a new struct was added to dpif which enables dpctl to define which types of dumps to provide, rather than passing the type string and having dpif parse it. Signed-off-by: Gavi Teitz <gavi@mellanox.com> Acked-by: Roi Dayan <roid@mellanox.com> Signed-off-by: Simon Horman <simon.horman@netronome.com>
This commit is contained in:
@@ -1465,16 +1465,6 @@ dpif_netlink_init_flow_del(struct dpif_netlink *dpif,
|
||||
del->ufid, del->terse, request);
|
||||
}
|
||||
|
||||
enum {
|
||||
DUMP_OVS_FLOWS_BIT = 0,
|
||||
DUMP_NETDEV_FLOWS_BIT = 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
DUMP_OVS_FLOWS = (1 << DUMP_OVS_FLOWS_BIT),
|
||||
DUMP_NETDEV_FLOWS = (1 << DUMP_NETDEV_FLOWS_BIT),
|
||||
};
|
||||
|
||||
struct dpif_netlink_flow_dump {
|
||||
struct dpif_flow_dump up;
|
||||
struct nl_dump nl_dump;
|
||||
@@ -1483,7 +1473,7 @@ struct dpif_netlink_flow_dump {
|
||||
int netdev_dumps_num; /* Number of netdev_flow_dumps */
|
||||
struct ovs_mutex netdev_lock; /* Guards the following. */
|
||||
int netdev_current_dump OVS_GUARDED; /* Shared current dump */
|
||||
int type; /* Type of dump */
|
||||
struct dpif_flow_dump_types types; /* Type of dump */
|
||||
};
|
||||
|
||||
static struct dpif_netlink_flow_dump *
|
||||
@@ -1498,7 +1488,7 @@ start_netdev_dump(const struct dpif *dpif_,
|
||||
{
|
||||
ovs_mutex_init(&dump->netdev_lock);
|
||||
|
||||
if (!(dump->type & DUMP_NETDEV_FLOWS)) {
|
||||
if (!(dump->types.netdev_flows)) {
|
||||
dump->netdev_dumps_num = 0;
|
||||
dump->netdev_dumps = NULL;
|
||||
return;
|
||||
@@ -1512,24 +1502,21 @@ start_netdev_dump(const struct dpif *dpif_,
|
||||
ovs_mutex_unlock(&dump->netdev_lock);
|
||||
}
|
||||
|
||||
static int
|
||||
dpif_netlink_get_dump_type(char *str) {
|
||||
int type = 0;
|
||||
|
||||
if (!str || !strcmp(str, "ovs") || !strcmp(str, "dpctl")) {
|
||||
type |= DUMP_OVS_FLOWS;
|
||||
static void
|
||||
dpif_netlink_populate_flow_dump_types(struct dpif_netlink_flow_dump *dump,
|
||||
struct dpif_flow_dump_types *types)
|
||||
{
|
||||
if (!types) {
|
||||
dump->types.ovs_flows = true;
|
||||
dump->types.netdev_flows = true;
|
||||
} else {
|
||||
memcpy(&dump->types, types, sizeof *types);
|
||||
}
|
||||
if ((netdev_is_flow_api_enabled() && !str)
|
||||
|| (str && (!strcmp(str, "offloaded") || !strcmp(str, "dpctl")))) {
|
||||
type |= DUMP_NETDEV_FLOWS;
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
static struct dpif_flow_dump *
|
||||
dpif_netlink_flow_dump_create(const struct dpif *dpif_, bool terse,
|
||||
char *type)
|
||||
struct dpif_flow_dump_types *types)
|
||||
{
|
||||
const struct dpif_netlink *dpif = dpif_netlink_cast(dpif_);
|
||||
struct dpif_netlink_flow_dump *dump;
|
||||
@@ -1539,9 +1526,9 @@ dpif_netlink_flow_dump_create(const struct dpif *dpif_, bool terse,
|
||||
dump = xmalloc(sizeof *dump);
|
||||
dpif_flow_dump_init(&dump->up, dpif_);
|
||||
|
||||
dump->type = dpif_netlink_get_dump_type(type);
|
||||
dpif_netlink_populate_flow_dump_types(dump, types);
|
||||
|
||||
if (dump->type & DUMP_OVS_FLOWS) {
|
||||
if (dump->types.ovs_flows) {
|
||||
dpif_netlink_flow_init(&request);
|
||||
request.cmd = OVS_FLOW_CMD_GET;
|
||||
request.dp_ifindex = dpif->dp_ifindex;
|
||||
@@ -1568,7 +1555,7 @@ dpif_netlink_flow_dump_destroy(struct dpif_flow_dump *dump_)
|
||||
unsigned int nl_status = 0;
|
||||
int dump_status;
|
||||
|
||||
if (dump->type & DUMP_OVS_FLOWS) {
|
||||
if (dump->types.ovs_flows) {
|
||||
nl_status = nl_dump_done(&dump->nl_dump);
|
||||
}
|
||||
|
||||
@@ -1804,7 +1791,7 @@ dpif_netlink_flow_dump_next(struct dpif_flow_dump_thread *thread_,
|
||||
}
|
||||
}
|
||||
|
||||
if (!(dump->type & DUMP_OVS_FLOWS)) {
|
||||
if (!(dump->types.ovs_flows)) {
|
||||
return n_flows;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user