This will be useful in unit tests, to allow switching output to a new file during "ovs-ofctl monitor" runtime.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- utilities/ovs-ofctl.8.in | 5 +++++ utilities/ovs-ofctl.c | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-) diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in index 415dddc..afde46c 100644 --- a/utilities/ovs-ofctl.8.in +++ b/utilities/ovs-ofctl.8.in @@ -1137,6 +1137,11 @@ process. The supported commands are listed below. Causes \fBovs\-ofctl\fR to gracefully terminate. This command applies only when executing the \fBmonitor\fR or \fBsnoop\fR commands. . +.IP "\fBofctl/set\-output\-file \fIfile\fR" +Causes all subsequent output to go to \fIfile\fR instead of stderr. +This command applies only when executing the \fBmonitor\fR or +\fBsnoop\fR commands. +. .IP "\fBofctl/send \fIofmsg\fR..." Sends each \fIofmsg\fR, specified as a sequence of hex digits that express an OpenFlow message, on the OpenFlow connection. This command diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c index 0006bd6..4995354 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <sys/fcntl.h> #include <sys/stat.h> #include <sys/time.h> @@ -901,6 +902,24 @@ ofctl_send(struct unixctl_conn *conn, int argc, } static void +ofctl_set_output_file(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[], void *aux OVS_UNUSED) +{ + int fd; + + fd = open(argv[1], O_CREAT | O_TRUNC | O_WRONLY, 0666); + if (fd < 0) { + unixctl_command_reply(conn, 501, strerror(errno)); + return; + } + + fflush(stderr); + dup2(fd, STDERR_FILENO); + close(fd); + unixctl_command_reply(conn, 200, ""); +} + +static void monitor_vconn(struct vconn *vconn) { struct unixctl_server *server; @@ -937,6 +956,8 @@ monitor_vconn(struct vconn *vconn) unixctl_command_register("exit", "", 0, 0, ofctl_exit, &exiting); unixctl_command_register("ofctl/send", "OFMSG...", 1, INT_MAX, ofctl_send, vconn); + unixctl_command_register("ofctl/set-output-file", "FILE", 1, 1, + ofctl_set_output_file, NULL); daemonize_complete(); /* Now get stderr back. */ -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev