Thanks Ben ;D
On Tue, Aug 6, 2013 at 9:47 AM, Ben Pfaff <[email protected]> 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 <[email protected]> wrote: > > > > > Looks good to me, tested with the ofp log snooped from controller. > > > > > > > > > > > > On Tue, Jul 23, 2013 at 11:13 AM, Ben Pfaff <[email protected]> wrote: > > > > > >> Signed-off-by: Ben Pfaff <[email protected] > > >> --- > > >> 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 > > >> [email protected] > > >> http://openvswitch.org/mailman/listinfo/dev > > >> > > > > > > >
_______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
