summaryrefslogtreecommitdiff
path: root/utilities/ovs-ofctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'utilities/ovs-ofctl.c')
-rw-r--r--utilities/ovs-ofctl.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index 6771973ae..b6d103ffd 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -1740,6 +1740,7 @@ ofctl_flow_mod__(const char *remote, struct ofputil_flow_mod *fms,
{
enum ofputil_protocol protocol;
struct vconn *vconn;
+ struct ds ds = DS_EMPTY_INITIALIZER;
size_t i;
if (bundle) {
@@ -1751,11 +1752,23 @@ ofctl_flow_mod__(const char *remote, struct ofputil_flow_mod *fms,
for (i = 0; i < n_fms; i++) {
struct ofputil_flow_mod *fm = &fms[i];
-
- transact_noreply(vconn, ofputil_encode_flow_mod(fm, protocol));
+ struct ofpbuf *buf = ofputil_encode_flow_mod(fm, protocol);
+
+ /* If user has opted for verbosity of 5 or more dump the
+ * constructed OpenFlow packet in hex format */
+ if (verbosity == 5) {
+ ds_put_hex_dump(&ds, buf->data, buf->size, 0, true);
+ } else if (verbosity > 5) {
+ ds_put_hex(&ds, buf->data, buf->size);
+ ds_put_char(&ds, '\n');
+ }
+ transact_noreply(vconn, buf);
free(CONST_CAST(struct ofpact *, fm->ofpacts));
minimatch_destroy(&fm->match);
}
+ fputs(ds_cstr(&ds), stdout);
+ ds_destroy(&ds);
+
vconn_close(vconn);
}
@@ -2239,6 +2252,7 @@ ofctl_monitor(struct ovs_cmdl_context *ctx)
{
struct vconn *vconn;
int i;
+ enum ofputil_protocol protocol;
enum ofputil_protocol usable_protocols;
/* If the user wants the invalid_ttl_to_controller feature, limit the
@@ -2263,7 +2277,7 @@ ofctl_monitor(struct ovs_cmdl_context *ctx)
}
}
- open_vconn(ctx->argv[1], &vconn);
+ protocol = open_vconn(ctx->argv[1], &vconn);
bool resume_continuations = false;
for (i = 2; i < ctx->argc; i++) {
const char *arg = ctx->argv[i];
@@ -2298,7 +2312,7 @@ ofctl_monitor(struct ovs_cmdl_context *ctx)
}
msg = ofpbuf_new(0);
- ofputil_append_flow_monitor_request(&fmr, msg);
+ ofputil_append_flow_monitor_request(&fmr, msg, protocol);
dump_transaction(vconn, msg);
fflush(stdout);
} else if (!strcmp(arg, "resume")) {