[ovs-dev] [PATCH 5/5] ovs-ofctl: Add "snoop" command.
Ben Pfaff
blp at nicira.com
Wed May 12 16:50:50 UTC 2010
Thanks, I pushed it out without change.
On Tue, May 11, 2010 at 05:55:06PM -0700, Jesse Gross wrote:
> This set looks good.
>
> On Tue, May 11, 2010 at 12:45 PM, Ben Pfaff <blp at nicira.com> wrote:
>
> > The "snoop" command does roughly the same thing as "monitor", but it is
> > easier to use in the common case where one just wants to look at the
> > OpenFlow controller connection for a bridge. Instead of, for example,
> > ovs-ofctl monitor unix:/var/run/openvswitch/br0.snoop
> > one merely types
> > ovs-ofctl snoop br0
> > ---
> > utilities/ovs-ofctl.8.in | 27 ++++++++++++++++++++++-----
> > utilities/ovs-ofctl.c | 44
> > ++++++++++++++++++++++++++++++++++----------
> > 2 files changed, 56 insertions(+), 15 deletions(-)
> >
> > diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
> > index 3c19be3..d84b481 100644
> > --- a/utilities/ovs-ofctl.8.in
> > +++ b/utilities/ovs-ofctl.8.in
> > @@ -143,8 +143,24 @@ omitted and the \fB--strict\fR option is not used, all
> > flows in the
> > switch's tables are removed. See \fBFlow Syntax\fR, below, for the
> > syntax of \fIflows\fR.
> > .
> > -.TP
> > -\fBmonitor \fIswitch\fR [\fImiss-len\fR]
> > +.IP "\fBsnoop \fIswitch\fR"
> > +Connects to \fIswitch\fR and prints to the console all OpenFlow
> > +messages received. Unlike other \fBovs\-ofctl\fR commands, if
> > +\fIswitch\fR is the name of a bridge, then the \fBsnoop\fR command
> > +connects to a Unix domain socket named
> > +\fB at RUNDIR@/\fIbridge\fB.snoop\fR. \fBovs\-vswitchd\fR listens on
> > +such a socket for each bridge and sends to it all of the OpenFlow
> > +messages sent to or received from its configured OpenFlow controller.
> > +Thus, this command can be used to view OpenFlow protocol activity
> > +between a switch and its controller.
> > +.IP
> > +When a switch has more than one controller configured, only the
> > +protocol to and from a single controller, chosen arbitrarily by Open
> > +vSwitch, is given. If a switch has no controller configured, or if
> > +the configured controller is disconnected, no traffic is sent, so
> > +monitoring will not show any traffic.
> > +.
> > +.IQ "\fBmonitor \fIswitch\fR [\fImiss-len\fR]"
> > Connects to \fIswitch\fR and prints to the console all OpenFlow
> > messages received. Usually, \fIswitch\fR should specify a connection
> > named on \fBovs\-openflowd\fR(8)'s \fB-l\fR or \fB--listen\fR command line
> > @@ -152,10 +168,11 @@ option.
> > .IP
> > If \fImiss-len\fR is provided, \fBovs\-ofctl\fR sends an OpenFlow ``set
> > configuration'' message at connection setup time that requests
> > -\fImiss-len\fR bytes of each packet that misses the flow table. The
> > -OpenFlow reference implementation does not send these messages to the
> > +\fImiss-len\fR bytes of each packet that misses the flow table. Open
> > vSwitch
> > +does not send these and other asynchronous messages to an
> > \fBovs\-ofctl monitor\fR client connection unless a nonzero value is
> > -specified on this argument.
> > +specified on this argument. (Thus, if \fImiss\-len\fR is not
> > +specified, very little traffic will ordinarily be printed.)
> > .IP
> > This command may be useful for debugging switch or controller
> > implementations.
> > diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
> > index 4699482..1a0c936 100644
> > --- a/utilities/ovs-ofctl.c
> > +++ b/utilities/ovs-ofctl.c
> > @@ -214,13 +214,14 @@ open_vconn_socket(const char *name, struct vconn
> > **vconnp)
> > }
> >
> > static void
> > -open_vconn(const char *name, struct vconn **vconnp)
> > +open_vconn__(const char *name, const char *default_suffix,
> > + struct vconn **vconnp)
> > {
> > struct dpif *dpif;
> > struct stat s;
> > char *bridge_path, *datapath_name, *datapath_type;
> >
> > - bridge_path = xasprintf("%s/%s.mgmt", ovs_rundir, name);
> > + bridge_path = xasprintf("%s/%s.%s", ovs_rundir, name, default_suffix);
> > dp_parse_name(name, &datapath_name, &datapath_type);
> >
> > if (strstr(name, ":")) {
> > @@ -241,7 +242,8 @@ open_vconn(const char *name, struct vconn **vconnp)
> > VLOG_INFO("datapath %s is named %s", name, dpif_name);
> > }
> >
> > - socket_name = xasprintf("%s/%s.mgmt", ovs_rundir, dpif_name);
> > + socket_name = xasprintf("%s/%s.%s",
> > + ovs_rundir, dpif_name, default_suffix);
> > if (stat(socket_name, &s)) {
> > ovs_fatal(errno, "cannot connect to %s: stat failed on %s",
> > name, socket_name);
> > @@ -261,6 +263,12 @@ open_vconn(const char *name, struct vconn **vconnp)
> > free(bridge_path);
> > }
> >
> > +static void
> > +open_vconn(const char *name, struct vconn **vconnp)
> > +{
> > + return open_vconn__(name, "mgmt", vconnp);
> > +}
> > +
> > static void *
> > alloc_stats_request(size_t body_len, uint16_t type, struct ofpbuf
> > **bufferp)
> > {
> > @@ -1060,7 +1068,18 @@ do_tun_cookie(int argc OVS_UNUSED, char *argv[])
> > }
> >
> > static void
> > -do_monitor(int argc OVS_UNUSED, char *argv[])
> > +monitor_vconn(struct vconn *vconn)
> > +{
> > + for (;;) {
> > + struct ofpbuf *b;
> > + run(vconn_recv_block(vconn, &b), "vconn_recv");
> > + ofp_print(stderr, b->data, b->size, 2);
> > + ofpbuf_delete(b);
> > + }
> > +}
> > +
> > +static void
> > +do_monitor(int argc, char *argv[])
> > {
> > struct vconn *vconn;
> >
> > @@ -1074,12 +1093,16 @@ do_monitor(int argc OVS_UNUSED, char *argv[])
> > osc->miss_send_len = htons(miss_send_len);
> > send_openflow_buffer(vconn, buf);
> > }
> > - for (;;) {
> > - struct ofpbuf *b;
> > - run(vconn_recv_block(vconn, &b), "vconn_recv");
> > - ofp_print(stderr, b->data, b->size, 2);
> > - ofpbuf_delete(b);
> > - }
> > + monitor_vconn(vconn);
> > +}
> > +
> > +static void
> > +do_snoop(int argc OVS_UNUSED, char *argv[])
> > +{
> > + struct vconn *vconn;
> > +
> > + open_vconn__(argv[1], "snoop", &vconn);
> > + monitor_vconn(vconn);
> > }
> >
> > static void
> > @@ -1292,6 +1315,7 @@ static const struct command all_commands[] = {
> > { "show", 1, 1, do_show },
> > { "status", 1, 2, do_status },
> > { "monitor", 1, 2, do_monitor },
> > + { "snoop", 1, 1, do_snoop },
> > { "dump-desc", 1, 1, do_dump_desc },
> > { "dump-tables", 1, 1, do_dump_tables },
> > { "dump-flows", 1, 2, do_dump_flows },
> > --
> > 1.7.1
> >
> >
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
> >
More information about the dev
mailing list