[ovs-dev] [PATCH] ovs-ofctl: Add "ofp-parse" command for printing OpenFlow from a file.
Alex Wang
alexw at nicira.com
Tue Aug 6 16:50:17 UTC 2013
Thanks Ben ;D
On Tue, Aug 6, 2013 at 9:47 AM, Ben Pfaff <blp at nicira.com> wrote:
> Thank you very much! I added the test, with one change: options to
> the "echo" program are not portable, so I changed it to instead use
> the "printf" program. I also changed the hex escapes, e.g. \x41, to
> octal escapes, e.g. \101, because printf only portably supports octal
> escapes.
>
> Thanks,
>
> Ben.
>
> On Mon, Aug 05, 2013 at 02:50:53PM -0700, Alex Wang wrote:
> > Also, here is a test, if it is needed, ;D
> >
> > +
> > +AT_SETUP([ovs-ofctl ofp-parse])
> > +
> > +# Test the echo request/reply messages (0 payload).
> > +AT_CHECK([echo -n -e
> > \\x1\\x2\\x0\\x8\\x0\\x0\\x0\\x0\\x1\\x3\\x0\\x8\\x0\\x0\\x0\\x0 >
> > binary_ofp_msg])
> > +
> > +AT_CHECK([ovs-ofctl ofp-parse binary_ofp_msg], [0], [dnl
> > +OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
> > +OFPT_ECHO_REPLY (xid=0x0): 0 bytes of payload
> > +])
> > +
> > +# Test the hello (xid:1 3-byte payload).
> > +AT_CHECK([echo -n -e \\x1\\x0\\x0\\x0B\\x0\\x0\\x0\\x1\\x41\\x42\\x43 >
> > binary_ofp_msg])
> > +
> > +AT_CHECK([ovs-ofctl ofp-parse - < binary_ofp_msg], [0], [dnl
> > +OFPT_HELLO (xid=0x1):
> > + version bitmap: 0x01
> > + unknown data in hello:
> > +00000000 01 00 00 0b 00 00 00 01-41 42 43 |........ABC
> > |
> > +])
> > +
> > +AT_CLEANUP
> >
> >
> > On Mon, Aug 5, 2013 at 11:36 AM, Alex Wang <alexw at nicira.com> wrote:
> >
> > > Looks good to me, tested with the ofp log snooped from controller.
> > >
> > >
> > >
> > > On Tue, Jul 23, 2013 at 11:13 AM, Ben Pfaff <blp at nicira.com> wrote:
> > >
> > >> Signed-off-by: Ben Pfaff <blp at nicira.com
> > >> ---
> > >> NEWS | 2 +
> > >> utilities/ovs-ofctl.8.in | 8 ++++++
> > >> utilities/ovs-ofctl.c | 55
> > >> +++++++++++++++++++++++++++++++++++++++++++++-
> > >> 3 files changed, 64 insertions(+), 1 deletions(-)
> > >>
> > >> diff --git a/NEWS b/NEWS
> > >> index b46fc43..bb174ed 100644
> > >> --- a/NEWS
> > >> +++ b/NEWS
> > >> @@ -15,6 +15,8 @@ post-v1.11.0
> > >> through database paths (e.g. Private key option with the
> database
> > >> name
> > >> should look like
> "--private-key=db:Open_vSwitch,SSL,private_key").
> > >> - Added ovs-dev.py, a utility script helpful for Open vSwitch
> > >> developers.
> > >> + - ovs-ofctl:
> > >> + * New "ofp-parse" for printing OpenFlow messages read from a
> file.
> > >>
> > >>
> > >> v1.11.0 - xx xxx xxxx
> > >> diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
> > >> index e66c605..3e6c7fe 100644
> > >> --- a/utilities/ovs-ofctl.8.in
> > >> +++ b/utilities/ovs-ofctl.8.in
> > >> @@ -370,6 +370,14 @@ response. Reports the total time required.
> This is
> > >> a measure of the
> > >> maximum bandwidth to \fItarget\fR for round-trips of \fIn\fR-byte
> > >> messages.
> > >> .
> > >> +.SS "Other Commands"
> > >> +.
> > >> +.IP "\fBofp\-parse\fR \fIfile\fR"
> > >> +Reads \fIfile\fR (or \fBstdin\fR if \fIfile\fR is \fB\-\fR) as a
> > >> +series of OpenFlow messages in the binary format used on an OpenFlow
> > >> +connection, and prints them to the console. This can be useful for
> > >> +printing OpenFlow messages captured from a TCP stream.
> > >> +.
> > >> .SS "Flow Syntax"
> > >> .PP
> > >> Some \fBovs\-ofctl\fR commands accept an argument that describes a
> flow
> > >> or
> > >> diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
> > >> index 2622255..577c4ce 100644
> > >> --- a/utilities/ovs-ofctl.c
> > >> +++ b/utilities/ovs-ofctl.c
> > >> @@ -305,7 +305,9 @@ usage(void)
> > >> " probe TARGET probe whether TARGET is
> up\n"
> > >> " ping TARGET [N] latency of N-byte echos\n"
> > >> " benchmark TARGET N COUNT bandwidth of COUNT N-byte
> > >> echos\n"
> > >> - "where SWITCH or TARGET is an active OpenFlow connection
> > >> method.\n",
> > >> + "SWITCH or TARGET is an active OpenFlow connection
> method.\n"
> > >> + "\nOther commands:\n"
> > >> + " ofp-parse FILE print messages read from
> > >> FILE\n",
> > >> program_name, program_name);
> > >> vconn_usage(true, false, false);
> > >> daemon_usage();
> > >> @@ -1697,6 +1699,56 @@ ofctl_set_frags(int argc OVS_UNUSED, char
> *argv[])
> > >> }
> > >>
> > >> static void
> > >> +ofctl_ofp_parse(int argc OVS_UNUSED, char *argv[])
> > >> +{
> > >> + const char *filename = argv[1];
> > >> + struct ofpbuf b;
> > >> + FILE *file;
> > >> +
> > >> + file = !strcmp(filename, "-") ? stdin : fopen(filename, "r");
> > >> + if (file == NULL) {
> > >> + ovs_fatal(errno, "%s: open", filename);
> > >> + }
> > >> +
> > >> + ofpbuf_init(&b, 65536);
> > >> + for (;;) {
> > >> + struct ofp_header *oh;
> > >> + size_t length, tail_len;
> > >> + void *tail;
> > >> + size_t n;
> > >> +
> > >> + ofpbuf_clear(&b);
> > >> + oh = ofpbuf_put_uninit(&b, sizeof *oh);
> > >> + n = fread(oh, 1, sizeof *oh, file);
> > >> + if (n == 0) {
> > >> + break;
> > >> + } else if (n < sizeof *oh) {
> > >> + ovs_fatal(0, "%s: unexpected end of file mid-message",
> > >> filename);
> > >> + }
> > >> +
> > >> + length = ntohs(oh->length);
> > >> + if (length < sizeof *oh) {
> > >> + ovs_fatal(0, "%s: %zu-byte message is too short for
> > >> OpenFlow",
> > >> + filename, length);
> > >> + }
> > >> +
> > >> + tail_len = length - sizeof *oh;
> > >> + tail = ofpbuf_put_uninit(&b, tail_len);
> > >> + n = fread(tail, 1, tail_len, file);
> > >> + if (n < tail_len) {
> > >> + ovs_fatal(0, "%s: unexpected end of file mid-message",
> > >> filename);
> > >> + }
> > >> +
> > >> + ofp_print(stdout, b.data, b.size, verbosity + 2);
> > >> + }
> > >> + ofpbuf_uninit(&b);
> > >> +
> > >> + if (file != stdin) {
> > >> + fclose(file);
> > >> + }
> > >> +}
> > >> +
> > >> +static void
> > >> ofctl_ping(int argc, char *argv[])
> > >> {
> > >> size_t max_payload = 65535 - sizeof(struct ofp_header);
> > >> @@ -2932,6 +2984,7 @@ static const struct command all_commands[] = {
> > >> { "mod-port", 3, 3, ofctl_mod_port },
> > >> { "get-frags", 1, 1, ofctl_get_frags },
> > >> { "set-frags", 2, 2, ofctl_set_frags },
> > >> + { "ofp-parse", 1, 1, ofctl_ofp_parse },
> > >> { "probe", 1, 1, ofctl_probe },
> > >> { "ping", 1, 2, ofctl_ping },
> > >> { "benchmark", 3, 3, ofctl_benchmark },
> > >> --
> > >> 1.7.2.5
> > >>
> > >> _______________________________________________
> > >> dev mailing list
> > >> dev at openvswitch.org
> > >> http://openvswitch.org/mailman/listinfo/dev
> > >>
> > >
> > >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20130806/e594e3f4/attachment-0003.html>
More information about the dev
mailing list