dpif_flow_stats_format(&f->stats, ds);
if (dpctl_p->verbosity && f->attrs.offloaded) {
- ds_put_cstr(ds, ", offloaded:yes");
+ if (f->attrs.dp_layer && !strcmp(f->attrs.dp_layer, "ovs")) {
+ ds_put_cstr(ds, ", offloaded:partial");
+ } else {
+ ds_put_cstr(ds, ", offloaded:yes");
+ }
}
if (dpctl_p->verbosity && f->attrs.dp_layer) {
ds_put_format(ds, ", dp:%s", f->attrs.dp_layer);
struct dump_types {
bool ovs;
bool tc;
+ bool dpdk;
bool offloaded;
bool non_offloaded;
+ bool partially_offloaded;
};
static void
{
dump_types->ovs = true;
dump_types->tc = true;
+ dump_types->dpdk = true;
dump_types->offloaded = true;
dump_types->non_offloaded = true;
+ dump_types->partially_offloaded = true;
}
static int
dump_types->ovs = true;
} else if (!strcmp(current_type, "tc")) {
dump_types->tc = true;
+ } else if (!strcmp(current_type, "dpdk")) {
+ dump_types->dpdk = true;
} else if (!strcmp(current_type, "offloaded")) {
dump_types->offloaded = true;
} else if (!strcmp(current_type, "non-offloaded")) {
dump_types->non_offloaded = true;
+ } else if (!strcmp(current_type, "partially-offloaded")) {
+ dump_types->partially_offloaded = true;
} else if (!strcmp(current_type, "all")) {
enable_all_dump_types(dump_types);
} else {
{
dpif_dump_types->ovs_flows = dump_types->ovs || dump_types->non_offloaded;
dpif_dump_types->netdev_flows = dump_types->tc || dump_types->offloaded
- || dump_types->non_offloaded;
+ || dump_types->non_offloaded
+ || dump_types->dpdk
+ || dump_types->partially_offloaded;
}
static bool
if (dump_types->tc && !strcmp(f->attrs.dp_layer, "tc")) {
return true;
}
- if (dump_types->offloaded && f->attrs.offloaded) {
+ if (dump_types->dpdk && !strcmp(f->attrs.dp_layer, "dpdk")) {
+ return true;
+ }
+ if (dump_types->offloaded && f->attrs.offloaded &&
+ strcmp(f->attrs.dp_layer, "ovs")) {
+ return true;
+ }
+ if (dump_types->partially_offloaded && f->attrs.offloaded &&
+ !strcmp(f->attrs.dp_layer, "ovs")) {
return true;
}
if (dump_types->non_offloaded && !(f->attrs.offloaded)) {
.
\fBovs\fR - displays flows handled in the ovs dp
\fBtc\fR - displays flows handled in the tc dp
+ \fBdpdk\fR - displays flows fully offloaded by dpdk
\fBoffloaded\fR - displays flows offloaded to the HW
\fBnon-offloaded\fR - displays flows not offloaded to the HW
+ \fBpartially-offloaded\fR - displays flows where only part of their proccessing is done in HW
\fBall\fR - displays all the types of flows
.IP
By default all the types of flows are displayed.