From ca8526e01561671273655e0c28b545736b1d1506 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 27 Jan 2012 09:22:41 -0800 Subject: [PATCH] ovs-ofctl: Fix "snoop" command. The vconn that "snoop" opens does not process and reply to requests, so sending a request to set the packet-in format will hang forever, which means that "snoop" never actually prints any of the traffic that it receives. Bug #9346. Reported-by: Alan Shieh Signed-off-by: Ben Pfaff --- AUTHORS | 1 + utilities/ovs-ofctl.8.in | 2 +- utilities/ovs-ofctl.c | 38 +++++++++++++++++++------------------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/AUTHORS b/AUTHORS index 4479aebb..a24f9707 100644 --- a/AUTHORS +++ b/AUTHORS @@ -62,6 +62,7 @@ provided helpful bug reports or suggestions. Aaron M. Ucko ucko@debian.org Aaron Rosen arosen@clemson.edu Ahmed Bilal numan252@gmail.com +Alan Shieh ashieh@nicira.com Alban Browaeys prahal@yahoo.com Alex Yip alex@nicira.com Alexey I. Froloff raorn@altlinux.org diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in index 2a20a2f4..e9e2e6fd 100644 --- a/utilities/ovs-ofctl.8.in +++ b/utilities/ovs-ofctl.8.in @@ -1086,7 +1086,7 @@ allow the switch to choose its default if \fBnxm\fR is unsupported. When \fIformat\fR is one of the formats listed in the above table, \fBovs\-ofctl\fR will insist on the selected format. If the switch does not support the requested format, \fBovs\-ofctl\fR will report a fatal error. This option only -affects the \fBmonitor\fR and \fBsnoop\fR commands. +affects the \fBmonitor\fR command. . .IP "\fB\-m\fR" .IQ "\fB\-\-more\fR" diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c index eb6d5a8a..3d3a7b76 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -830,24 +830,6 @@ monitor_vconn(struct vconn *vconn) bool exiting = false; int error, fd; - if (preferred_packet_in_format >= 0) { - set_packet_in_format(vconn, preferred_packet_in_format); - } else { - struct ofpbuf *spif, *reply; - - spif = ofputil_make_set_packet_in_format(NXPIF_NXM); - run(vconn_transact_noreply(vconn, spif, &reply), - "talking to %s", vconn_get_name(vconn)); - if (reply) { - char *s = ofp_to_string(reply->data, reply->size, 2); - VLOG_DBG("%s: failed to set packet in format to nxm, controller" - " replied: %s. Falling back to the switch default.", - vconn_get_name(vconn), s); - free(s); - ofpbuf_delete(reply); - } - } - /* Daemonization will close stderr but we really want to keep it, so make a * copy. */ fd = dup(STDERR_FILENO); @@ -910,6 +892,24 @@ do_monitor(int argc, char *argv[]) monitor_set_invalid_ttl_to_controller(vconn); } } + if (preferred_packet_in_format >= 0) { + set_packet_in_format(vconn, preferred_packet_in_format); + } else { + struct ofpbuf *spif, *reply; + + spif = ofputil_make_set_packet_in_format(NXPIF_NXM); + run(vconn_transact_noreply(vconn, spif, &reply), + "talking to %s", vconn_get_name(vconn)); + if (reply) { + char *s = ofp_to_string(reply->data, reply->size, 2); + VLOG_DBG("%s: failed to set packet in format to nxm, controller" + " replied: %s. Falling back to the switch default.", + vconn_get_name(vconn), s); + free(s); + ofpbuf_delete(reply); + } + } + monitor_vconn(vconn); } -- 2.30.2