[ovs-dev] [PATCH] test-controller: Rename to ovs-testcontroller, again install.

Ben Pfaff blp at nicira.com
Thu Aug 14 18:16:41 UTC 2014


mininet uses the Open vSwitch controller by default, for testing.

CC: 757761 at bugs.debian.org
Reported-at: https://bugs.debian.org/757761
Requested-by: Tomasz Buchert <tomasz.buchert at inria.fr>
Requested-by: Dariusz Dwornikowski <dariusz.dwornikowski at cs.put.poznan.pl>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 FAQ                                                |   7 +-
 INSTALL.SSL                                        |   8 +-
 INSTALL.XenServer                                  |   2 +-
 NEWS                                               |   4 +-
 README                                             |   3 +
 debian/.gitignore                                  |   1 +
 debian/automake.mk                                 |   8 +
 debian/changelog                                   |   5 +
 debian/control                                     |  17 +-
 debian/openvswitch-testcontroller.README.Debian    |  12 +
 debian/openvswitch-testcontroller.default          |  29 +++
 debian/openvswitch-testcontroller.dirs             |   1 +
 debian/openvswitch-testcontroller.init             | 278 +++++++++++++++++++++
 debian/openvswitch-testcontroller.install          |   1 +
 debian/openvswitch-testcontroller.manpages         |   1 +
 debian/openvswitch-testcontroller.postinst         |  60 +++++
 debian/openvswitch-testcontroller.postrm           |  44 ++++
 lib/ssl-bootstrap.man                              |   4 +-
 manpages.mk                                        |  38 +--
 ovsdb/ovsdb-client.1.in                            |   2 +
 ovsdb/ovsdb-server.1.in                            |   2 +
 rhel/openvswitch-fedora.spec.in                    |   2 +
 rhel/openvswitch.spec.in                           |   4 +-
 tests/.gitignore                                   |   2 -
 tests/automake.mk                                  |   7 -
 utilities/.gitignore                               |   2 +
 utilities/automake.mk                              |   7 +
 utilities/bugtool/ovs-bugtool.in                   |   5 +-
 utilities/ovs-ofctl.8.in                           |   1 +
 utilities/ovs-pki.8.in                             |   4 +
 .../ovs-testcontroller.8.in                        |  50 ++--
 .../ovs-testcontroller.c                           |   0
 utilities/ovs-vsctl.8.in                           |   6 +-
 vswitchd/ovs-vswitchd.8.in                         |   2 +
 vtep/vtep-ctl.8.in                                 |   2 +
 xenserver/openvswitch-xen.spec.in                  |   4 +-
 36 files changed, 551 insertions(+), 74 deletions(-)
 create mode 100644 debian/openvswitch-testcontroller.README.Debian
 create mode 100644 debian/openvswitch-testcontroller.default
 create mode 100644 debian/openvswitch-testcontroller.dirs
 create mode 100755 debian/openvswitch-testcontroller.init
 create mode 100644 debian/openvswitch-testcontroller.install
 create mode 100644 debian/openvswitch-testcontroller.manpages
 create mode 100755 debian/openvswitch-testcontroller.postinst
 create mode 100755 debian/openvswitch-testcontroller.postrm
 rename tests/test-controller.8.in => utilities/ovs-testcontroller.8.in (76%)
 rename tests/test-controller.c => utilities/ovs-testcontroller.c (100%)

diff --git a/FAQ b/FAQ
index 3470983..7fbf9a9 100644
--- a/FAQ
+++ b/FAQ
@@ -89,9 +89,10 @@ A: Distributed vswitch applications (e.g., VMware vNetwork distributed
    environments: OpenFlow, which exposes flow-based forwarding state,
    and the OVSDB management protocol, which exposes switch port state.
    In addition to the switch implementation itself, Open vSwitch
-   includes tools (ovs-ofctl, ovs-vsctl) that developers can script and
-   extend to provide distributed vswitch capabilities that are closely
-   integrated with their virtualization management platform.
+   includes tools (ovs-ofctl, ovs-vsctl, ovs-appctl) that developers
+   can script and extend to provide distributed vswitch capabilities
+   that are closely integrated with their virtualization management
+   platform.
 
 Q: Why doesn't Open vSwitch support distribution?
 
diff --git a/INSTALL.SSL b/INSTALL.SSL
index 061af97..a6931d2 100644
--- a/INSTALL.SSL
+++ b/INSTALL.SSL
@@ -115,10 +115,10 @@ that contains the PKI structure:
       % ovs-pki req+sign ctl controller
 
 ctl-privkey.pem and ctl-cert.pem would need to be copied to the
-controller for its use at runtime.  If you were to use test-controller,
-the simple OpenFlow controller included with Open vSwitch, then the
---private-key and --certificate options, respectively, would point to
-these files.
+controller for its use at runtime.  If, for testing purposes, you were
+to use ovs-testcontroller, the simple OpenFlow controller included
+with Open vSwitch, then the --private-key and --certificate options,
+respectively, would point to these files.
 
 It is very important to make sure that no stray copies of
 ctl-privkey.pem are created, because they could be used to impersonate
diff --git a/INSTALL.XenServer b/INSTALL.XenServer
index 1e23634..8c07d24 100644
--- a/INSTALL.XenServer
+++ b/INSTALL.XenServer
@@ -172,7 +172,7 @@ controller on XenServer and, as a consequence of the step above that
 deletes all of the bridges at boot time, controller configuration only
 persists until XenServer reboot.  The configuration database manager
 can, however, configure controllers for bridges.  See the BUGS section
-of test-controller(8) for more information on this topic.
+of ovs-testcontroller(8) for more information on this topic.
 
 * The Open vSwitch startup script automatically adds a firewall rule
 to allow GRE traffic. This rule is needed for the XenServer feature
diff --git a/NEWS b/NEWS
index 15abe45..3ff3d3d 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,9 @@ Post-v2.3.0
      * OpenFlow 1.5 (draft) extended registers are now supported.
      * OpenFlow 1.5 (draft) Copy-Field action is now supported.
      * OpenFlow 1.3+ table features requests are now supported (read-only).
-
+   - test-controller has been rename ovs-testcontroller at request of users
+     who find it useful for testing basic OpenFlow setups.  It is still not
+     a necessary or desirable part of most Open vSwitch deployments.
 
 v2.3.0 - xx xxx xxxx
 ---------------------
diff --git a/README b/README
index fa41c16..0e034ef 100644
--- a/README
+++ b/README
@@ -72,6 +72,9 @@ Open vSwitch also provides some tools:
     * ovs-pki, a utility for creating and managing the public-key
       infrastructure for OpenFlow switches.
 
+    * ovs-testcontroller, a simple OpenFlow controller that is useful
+      for testing (though not for production).
+
     * A patch to tcpdump that enables it to parse OpenFlow messages.
 
 What other documentation is available?
diff --git a/debian/.gitignore b/debian/.gitignore
index 3d37698..b612eec 100644
--- a/debian/.gitignore
+++ b/debian/.gitignore
@@ -16,5 +16,6 @@
 /openvswitch-switch
 /openvswitch-switch.copyright
 /openvswitch-test
+/openvswitch-testcontroller
 /python-openvswitch
 /tmp
diff --git a/debian/automake.mk b/debian/automake.mk
index 948a619..86c1310 100644
--- a/debian/automake.mk
+++ b/debian/automake.mk
@@ -37,6 +37,14 @@ EXTRA_DIST += \
 	debian/openvswitch-test.dirs \
 	debian/openvswitch-test.install \
 	debian/openvswitch-test.manpages \
+	debian/openvswitch-testcontroller.README.Debian \
+	debian/openvswitch-testcontroller.default \
+	debian/openvswitch-testcontroller.dirs \
+	debian/openvswitch-testcontroller.init \
+	debian/openvswitch-testcontroller.install \
+	debian/openvswitch-testcontroller.manpages \
+	debian/openvswitch-testcontroller.postinst \
+	debian/openvswitch-testcontroller.postrm \
 	debian/openvswitch-vtep.default \
 	debian/openvswitch-vtep.dirs \
 	debian/openvswitch-vtep.init \
diff --git a/debian/changelog b/debian/changelog
index 4658a3d..395d10f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,10 @@
 openvswitch (2.3.90-1) unstable; urgency=low
    [ Open vSwitch team ]
+   * The openvswitch-testcontroller package is new.  It reintroduces the
+     simple OpenFlow controller that was packaged with Open vSwitch prior to 
+     version 2.1, at request of users who find it useful for testing basic
+     OpenFlow setups.  It is still not a necessary or desirable part of most
+     Open vSwitch deployments.
    * New upstream version
     - Nothing yet!  Try NEWS...
 
diff --git a/debian/control b/debian/control
index af4af4e..0fe7018 100644
--- a/debian/control
+++ b/debian/control
@@ -60,7 +60,8 @@ Description: Open vSwitch common components
  to support distribution across multiple physical servers similar to
  VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
  .
- openvswitch-common provides components required by both openvswitch-switch.
+ openvswitch-common provides components required by both openvswitch-switch
+ and openvswitch-testcontroller.
 
 Package: openvswitch-switch
 Architecture: linux-any
@@ -117,6 +118,17 @@ Description: Open vSwitch public key infrastructure dependency package
  Open vSwitch switches and controllers, reducing the risk of
  man-in-the-middle attacks on the Open vSwitch network infrastructure.
 
+Package: openvswitch-testcontroller
+Architecture: linux-any
+Depends:
+ ${shlibs:Depends}, openvswitch-common (= ${binary:Version}),
+ openvswitch-pki (= ${source:Version}), ${misc:Depends}
+Description: Simple controller for testing OpenFlow setups
+ This controller enables OpenFlow switches that connect to it to act
+ as MAC-learning Ethernet switches.  It can be used for initial
+ testing of OpenFlow networks.  It is not a necessary or desirable
+ part of a production OpenFlow deployment.
+
 Package: openvswitch-dbg
 Section: debug
 Architecture: linux-any
@@ -124,6 +136,9 @@ Depends:
  ${shlibs:Depends}, ${misc:Depends},
  openvswitch-common (= ${binary:Version}),
  openvswitch-switch (= ${binary:Version})
+Conflicts:
+ openvswitch-testcontroller (<< ${binary:Version}),
+ openvswitch-testcontroller (>> ${binary:Version})
 Description: Debug symbols for Open vSwitch packages
  Open vSwitch is a production quality, multilayer, software-based,
  Ethernet virtual switch. It is designed to enable massive network
diff --git a/debian/openvswitch-testcontroller.README.Debian b/debian/openvswitch-testcontroller.README.Debian
new file mode 100644
index 0000000..0548826
--- /dev/null
+++ b/debian/openvswitch-testcontroller.README.Debian
@@ -0,0 +1,12 @@
+README.Debian for openvswitch-testcontroller
+--------------------------------------------
+
+The controller in this package enables OpenFlow switches that connect
+to it to act as MAC-learning Ethernet switches.  It can be used for
+initial testing of OpenFlow networks.  It is not a necessary or
+desirable part of a production OpenFlow deployment.
+
+To (re)configure the controller, edit /etc/default/openvswitch-testcontroller
+and run "/etc/init.d/openvswitch-testcontroller restart".
+
+ -- Ben Pfaff <pfaffben at debian.org>, Thu, 14 Aug 2014 10:49:34 -0700
diff --git a/debian/openvswitch-testcontroller.default b/debian/openvswitch-testcontroller.default
new file mode 100644
index 0000000..48b53f1
--- /dev/null
+++ b/debian/openvswitch-testcontroller.default
@@ -0,0 +1,29 @@
+# This is a POSIX shell fragment                -*- sh -*-
+
+# LISTEN: What OpenFlow connection methods should the controller listen on?
+#
+# This is a space-delimited list of connection methods:
+#
+# * "pssl:[PORT]": Listen for SSL connections on the specified PORT
+#   (default: 6633).  The private key, certificate, and CA certificate
+#   must be specified below.
+#
+# * "ptcp:[PORT]": Listen for TCP connections on the specified PORT
+#   (default: 6633).  Not recommended for security reasons.
+#
+LISTEN="pssl:"
+
+# PRIVKEY: Name of file containing controller's private key.
+# Required if SSL enabled.
+PRIVKEY=/etc/openvswitch-testcontroller/privkey.pem
+
+# CERT: Name of file containing certificate for private key.
+# Required if SSL enabled.
+CERT=/etc/openvswitch-testcontroller/cert.pem
+
+# CACERT: Name of file containing switch CA certificate.
+# Required if SSL enabled.
+CACERT=/etc/openvswitch-testcontroller/cacert.pem
+
+# Additional options to pass to ovs-testcontroller, e.g. "--hub"
+DAEMON_OPTS=""
diff --git a/debian/openvswitch-testcontroller.dirs b/debian/openvswitch-testcontroller.dirs
new file mode 100644
index 0000000..d8d4f77
--- /dev/null
+++ b/debian/openvswitch-testcontroller.dirs
@@ -0,0 +1 @@
+etc/openvswitch-testcontroller
diff --git a/debian/openvswitch-testcontroller.init b/debian/openvswitch-testcontroller.init
new file mode 100755
index 0000000..8c27ae1
--- /dev/null
+++ b/debian/openvswitch-testcontroller.init
@@ -0,0 +1,278 @@
+#!/bin/sh
+#
+# Copyright (c) 2011, 2014 Nicira, Inc.
+# Copyright (c) 2007, 2009 Javier Fernandez-Sanguino <jfs at debian.org>
+#
+# This is free software; you may redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2,
+# or (at your option) any later version.
+#
+# This is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License with
+# the Debian operating system, in /usr/share/common-licenses/GPL;  if
+# not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+#
+### BEGIN INIT INFO
+# Provides:          openvswitch-testcontroller
+# Required-Start:    $network $local_fs $remote_fs
+# Required-Stop:     $remote_fs
+# Should-Start:      $named
+# Should-Stop:       
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Simple OpenFLow controller for testing
+# Description:       This controller enables OpenFlow switches that connect to
+#                    it to act as MAC-learning Ethernet switches.
+### END INIT INFO
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+DAEMON=/usr/bin/ovs-testcontroller # Introduce the server's location here
+NAME=ovs-testcontroller         # Introduce the short server's name here
+DESC=ovs-testcontroller         # Introduce a short description here
+LOGDIR=/var/log/openvswitch	# Log directory to use
+
+PIDFILE=/var/run/openvswitch/$NAME.pid 
+
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+# Default options, these can be overriden by the information
+# at /etc/default/openvswitch-testcontroller
+DAEMON_OPTS=""          # Additional options given to the server 
+
+DODTIME=10              # Time to wait for the server to die, in seconds
+                        # If this value is set too low you might not
+                        # let some servers to die gracefully and
+                        # 'restart' will not work
+                        
+LOGFILE=$LOGDIR/$NAME.log  # Server logfile
+#DAEMONUSER=            # User to run the daemons as. If this value
+                        # is set start-stop-daemon will chuid the server
+
+# Include defaults if available
+default=/etc/default/openvswitch-testcontroller
+if [ -f $default ] ; then
+    . $default
+fi
+
+# Check that the user exists (if we set a user)
+# Does the user exist?
+if [ -n "$DAEMONUSER" ] ; then
+    if getent passwd | grep -q "^$DAEMONUSER:"; then
+        # Obtain the uid and gid
+        DAEMONUID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}'`
+        DAEMONGID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}'`
+    else
+        log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist."
+        exit 1
+    fi
+fi
+
+
+set -e
+
+running_pid() {
+# Check if a given process pid's cmdline matches a given name
+    pid=$1
+    name=$2
+    [ -z "$pid" ] && return 1 
+    [ ! -d /proc/$pid ] &&  return 1
+    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
+    # Is this the expected server
+    [ "$cmd" != "$name" ] &&  return 1
+    return 0
+}
+
+running() {
+# Check if the process is running looking at /proc
+# (works for all users)
+
+    # No pidfile, probably no daemon present
+    [ ! -f "$PIDFILE" ] && return 1
+    pid=`cat $PIDFILE`
+    running_pid $pid $DAEMON || return 1
+    return 0
+}
+
+start_server() {
+    if [ -z "$LISTEN" ]; then
+        echo "$default: No connection methods configured, controller disabled" >&2
+        exit 0
+    fi
+
+    if [ ! -d /var/run/openvswitch ]; then
+        install -d -m 755 -o root -g root /var/run/openvswitch
+    fi
+
+    SSL_OPTS=
+    case $LISTEN in
+        *ssl*)
+            : ${PRIVKEY:=/etc/openvswitch-testcontroller/privkey.pem}
+            : ${CERT:=/etc/openvswitch-testcontroller/cert.pem}
+            : ${CACERT:=/etc/openvswitch-testcontroller/cacert.pem}
+            if test ! -e "$PRIVKEY" || test ! -e "$CERT" ||
+                test ! -e "$CACERT"; then
+                if test ! -e "$PRIVKEY"; then
+                    echo "$PRIVKEY: private key missing" >&2
+                fi
+                if test ! -e "$CERT"; then
+                    echo "$CERT: certificate for private key missing" >&2
+                fi
+                if test ! -e "$CACERT"; then
+                    echo "$CACERT: CA certificate missing" >&2
+                fi
+                exit 1
+            fi
+            SSL_OPTS="--private-key=$PRIVKEY --certificate=$CERT --ca-cert=$CACERT"
+            ;;
+    esac
+
+# Start the process using the wrapper
+        if [ -z "$DAEMONUSER" ] ; then
+            start-stop-daemon --start --pidfile $PIDFILE \
+                        --exec $DAEMON -- --detach --pidfile=$PIDFILE \
+                        $LISTEN $DAEMON_OPTS $SSL_OPTS
+            errcode=$?
+        else
+# if we are using a daemonuser then change the user id
+            start-stop-daemon --start --quiet --pidfile $PIDFILE \
+                        --chuid $DAEMONUSER --exec $DAEMON -- \
+                        --detach --pidfile=$PIDFILE $LISTEN $DAEMON_OPTS \
+                        $SSL_OPTS
+            errcode=$?
+        fi
+        return $errcode
+}
+
+stop_server() {
+# Stop the process using the wrapper
+        if [ -z "$DAEMONUSER" ] ; then
+            start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+                        --exec $DAEMON
+            errcode=$?
+        else
+# if we are using a daemonuser then look for process that match
+            start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+                        --user $DAEMONUSER --exec $DAEMON
+            errcode=$?
+        fi
+
+        return $errcode
+}
+
+reload_server() {
+    [ ! -f "$PIDFILE" ] && return 1
+    pid=`cat $PIDFILE` # This is the daemon's pid
+    # Send a SIGHUP
+    kill -1 $pid
+    return $?
+}
+
+force_stop() {
+# Force the process to die killing it manually
+    [ ! -e "$PIDFILE" ] && return
+    if running ; then
+        kill -15 $pid
+        # Is it really dead?
+        sleep "$DODTIME"
+        if running ; then
+            kill -9 $pid
+            sleep "$DODTIME"
+            if running ; then
+                echo "Cannot kill $NAME (pid=$pid)!"
+                exit 1
+            fi
+        fi
+    fi
+    rm -f $PIDFILE
+}
+
+
+case "$1" in
+  start)
+        log_daemon_msg "Starting $DESC " "$NAME"
+        # Check if it's running first
+        if running ;  then
+            log_progress_msg "apparently already running"
+            log_end_msg 0
+            exit 0
+        fi
+        if start_server && running ;  then
+            # It's ok, the server started and is running
+            log_end_msg 0
+        else
+            # Either we could not start it or it is not running
+            # after we did
+            # NOTE: Some servers might die some time after they start,
+            # this code does not try to detect this and might give
+            # a false positive (use 'status' for that)
+            log_end_msg 1
+        fi
+        ;;
+  stop)
+        log_daemon_msg "Stopping $DESC" "$NAME"
+        if running ; then
+            # Only stop the server if we see it running
+            stop_server
+            log_end_msg $?
+        else
+            # If it's not running don't do anything
+            log_progress_msg "apparently not running"
+            log_end_msg 0
+            exit 0
+        fi
+        ;;
+  force-stop)
+        # First try to stop gracefully the program
+        $0 stop
+        if running; then
+            # If it's still running try to kill it more forcefully
+            log_daemon_msg "Stopping (force) $DESC" "$NAME"
+            force_stop
+            log_end_msg $?
+        fi
+        ;;
+  restart|force-reload)
+        log_daemon_msg "Restarting $DESC" "$NAME"
+        if running; then
+            stop_server
+            # Wait some sensible amount, some server need this.
+            [ -n "$DODTIME" ] && sleep $DODTIME
+        fi
+        start_server
+        running
+        log_end_msg $?
+        ;;
+  status)
+
+        log_daemon_msg "Checking status of $DESC" "$NAME"
+        if running ;  then
+            log_progress_msg "running"
+            log_end_msg 0
+        else
+            log_progress_msg "apparently not running"
+            log_end_msg 1
+            exit 1
+        fi
+        ;;
+  # Use this if the daemon cannot reload
+  reload)
+        log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
+        log_warning_msg "cannot re-read the config file (use restart)."
+        ;;
+  *)
+        N=/etc/init.d/openvswitch-testcontroller
+        echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
+        exit 1
+        ;;
+esac
+
+exit 0
diff --git a/debian/openvswitch-testcontroller.install b/debian/openvswitch-testcontroller.install
new file mode 100644
index 0000000..d368f2a
--- /dev/null
+++ b/debian/openvswitch-testcontroller.install
@@ -0,0 +1 @@
+usr/bin/ovs-testcontroller
diff --git a/debian/openvswitch-testcontroller.manpages b/debian/openvswitch-testcontroller.manpages
new file mode 100644
index 0000000..4ea1781
--- /dev/null
+++ b/debian/openvswitch-testcontroller.manpages
@@ -0,0 +1 @@
+_debian/utilities/ovs-testcontroller.8
diff --git a/debian/openvswitch-testcontroller.postinst b/debian/openvswitch-testcontroller.postinst
new file mode 100755
index 0000000..7242b4a
--- /dev/null
+++ b/debian/openvswitch-testcontroller.postinst
@@ -0,0 +1,60 @@
+#!/bin/sh
+# postinst script for openvswitch-testcontroller
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <postinst> `abort-remove'
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    configure)
+        cd /etc/openvswitch-testcontroller
+
+        # If cacert.pem is a symlink to the old location for cacert.pem,
+        # remove it so that we can symlink it to the new location.
+        if test -h cacert.pem && \
+           test X"`readlink cacert.pem`" = X/usr/share/openvswitch/pki/switchca/cacert.pem; then
+            rm -f cacert.pem
+        fi
+
+        if ! test -e cacert.pem; then
+            ln -s /var/lib/openvswitch/pki/switchca/cacert.pem cacert.pem
+        fi
+        if ! test -e privkey.pem || ! test -e cert.pem; then
+            oldumask=$(umask)
+            umask 077
+            ovs-pki req+sign tmp controller >/dev/null
+            mv tmp-privkey.pem privkey.pem
+            mv tmp-cert.pem cert.pem
+            mv tmp-req.pem req.pem
+            chmod go+r cert.pem req.pem
+            umask $oldumask
+        fi
+        ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+        ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+        ;;
+esac
+
+#DEBHELPER#
+
+exit 0
+
+
diff --git a/debian/openvswitch-testcontroller.postrm b/debian/openvswitch-testcontroller.postrm
new file mode 100755
index 0000000..afca1bb
--- /dev/null
+++ b/debian/openvswitch-testcontroller.postrm
@@ -0,0 +1,44 @@
+#!/bin/sh
+# postrm script for openvswitch-testcontroller
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postrm> `remove'
+#        * <postrm> `purge'
+#        * <old-postrm> `upgrade' <new-version>
+#        * <new-postrm> `failed-upgrade' <old-version>
+#        * <new-postrm> `abort-install'
+#        * <new-postrm> `abort-install' <old-version>
+#        * <new-postrm> `abort-upgrade' <old-version>
+#        * <disappearer's-postrm> `disappear' <overwriter>
+#          <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    purge)
+        if cd /etc/openvswitch-testcontroller; then
+            rm -f cacert.pem cert.pem privkey.pem req.pem
+            rm -f tmp-privkey.pem tmp-cert.pem tmp-req.pem
+        fi
+        ;;
+
+    remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+        ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+        ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/lib/ssl-bootstrap.man b/lib/ssl-bootstrap.man
index c112f9a..37ed791 100644
--- a/lib/ssl-bootstrap.man
+++ b/lib/ssl-bootstrap.man
@@ -14,7 +14,9 @@ for bootstrapping.
 .IP
 This option is only useful if the SSL peer sends its CA certificate as
 part of the SSL certificate chain.  The SSL protocol does not require
-the server to send the CA certificate.
+the server to send the CA certificate, but
+\fB\*(SN\fR(8) can be configured to do so with the
+\fB\-\-peer\-ca\-cert\fR option.
 .IP
 This option is mutually exclusive with \fB\-C\fR and
 \fB\-\-ca\-cert\fR.
diff --git a/manpages.mk b/manpages.mk
index 446b30a..2d8824f 100644
--- a/manpages.mk
+++ b/manpages.mk
@@ -84,8 +84,24 @@ lib/common.man:
 lib/vlog-syn.man:
 lib/vlog.man:
 
-tests/test-controller.8: \
-	tests/test-controller.8.in \
+utilities/bugtool/ovs-bugtool.8: \
+	utilities/bugtool/ovs-bugtool.8.in
+utilities/bugtool/ovs-bugtool.8.in:
+
+utilities/ovs-appctl.8: \
+	utilities/ovs-appctl.8.in \
+	lib/common.man
+utilities/ovs-appctl.8.in:
+lib/common.man:
+
+utilities/ovs-benchmark.1: \
+	utilities/ovs-benchmark.1.in \
+	lib/ovs.tmac
+utilities/ovs-benchmark.1.in:
+lib/ovs.tmac:
+
+utilities/ovs-controller.8: \
+	utilities/ovs-controller.8.in \
 	lib/common.man \
 	lib/daemon.man \
 	lib/ssl-peer-ca-cert.man \
@@ -94,7 +110,7 @@ tests/test-controller.8: \
 	lib/vconn-active.man \
 	lib/vconn-passive.man \
 	lib/vlog.man
-tests/test-controller.8.in:
+utilities/ovs-controller.8.in:
 lib/common.man:
 lib/daemon.man:
 lib/ssl-peer-ca-cert.man:
@@ -104,22 +120,6 @@ lib/vconn-active.man:
 lib/vconn-passive.man:
 lib/vlog.man:
 
-utilities/bugtool/ovs-bugtool.8: \
-	utilities/bugtool/ovs-bugtool.8.in
-utilities/bugtool/ovs-bugtool.8.in:
-
-utilities/ovs-appctl.8: \
-	utilities/ovs-appctl.8.in \
-	lib/common.man
-utilities/ovs-appctl.8.in:
-lib/common.man:
-
-utilities/ovs-benchmark.1: \
-	utilities/ovs-benchmark.1.in \
-	lib/ovs.tmac
-utilities/ovs-benchmark.1.in:
-lib/ovs.tmac:
-
 utilities/ovs-dpctl-top.8: \
 	utilities/ovs-dpctl-top.8.in
 utilities/ovs-dpctl-top.8.in:
diff --git a/ovsdb/ovsdb-client.1.in b/ovsdb/ovsdb-client.1.in
index fbb7148..5704127 100644
--- a/ovsdb/ovsdb-client.1.in
+++ b/ovsdb/ovsdb-client.1.in
@@ -8,6 +8,8 @@
 .TH ovsdb\-client 1 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
 .\" This program's name:
 .ds PN ovsdb\-client
+.\" SSL peer program's name:
+.ds SN ovsdb\-server
 .
 .SH NAME
 ovsdb\-client \- command-line interface to \fBovsdb-server\fR(1)
diff --git a/ovsdb/ovsdb-server.1.in b/ovsdb/ovsdb-server.1.in
index ec408a6..db0c216 100644
--- a/ovsdb/ovsdb-server.1.in
+++ b/ovsdb/ovsdb-server.1.in
@@ -7,6 +7,8 @@
 .TH ovsdb\-server 1 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
 .\" This program's name:
 .ds PN ovsdb\-server
+.\" SSL peer program's name:
+.ds SN ovsdb\-client
 .
 .SH NAME
 ovsdb\-server \- Open vSwitch database server
diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
index 9f66f41..0efebd4 100644
--- a/rhel/openvswitch-fedora.spec.in
+++ b/rhel/openvswitch-fedora.spec.in
@@ -179,10 +179,12 @@ systemctl start openvswitch.service
 /usr/bin/ovs-vsctl
 /usr/bin/ovsdb-client
 /usr/bin/ovsdb-tool
+/usr/bin/ovs-testcontroller
 /usr/bin/ovs-pki
 /usr/bin/ovs-test
 /usr/bin/ovs-l3ping
 /usr/bin/vtep-ctl
+%doc /usr/share/man/man8/ovs-testcontroller.8.gz
 %doc /usr/share/man/man8/ovs-pki.8.gz
 %doc /usr/share/man/man1/ovsdb-client.1.gz
 %doc /usr/share/man/man1/ovsdb-server.1.gz
diff --git a/rhel/openvswitch.spec.in b/rhel/openvswitch.spec.in
index 251cfe5..88bc673 100644
--- a/rhel/openvswitch.spec.in
+++ b/rhel/openvswitch.spec.in
@@ -1,6 +1,6 @@
 # Spec file for Open vSwitch on Red Hat Enterprise Linux.
 
-# Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
@@ -60,6 +60,8 @@ install python/compat/argparse.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
 
 # Get rid of stuff we don't want to make RPM happy.
 rm \
+    $RPM_BUILD_ROOT/usr/bin/ovs-testcontroller \
+    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-testcontroller.8 \
     $RPM_BUILD_ROOT/usr/bin/ovs-test \
     $RPM_BUILD_ROOT/usr/bin/ovs-l3ping \
     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8 \
diff --git a/tests/.gitignore b/tests/.gitignore
index 5b55a7d..7c98061 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -14,8 +14,6 @@
 /test-bundle
 /test-byte-order
 /test-classifier
-/test-controller.8
-/test-controller
 /test-csum
 /test-flows
 /test-hash
diff --git a/tests/automake.mk b/tests/automake.mk
index 2b88ad2..470c1b9 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -181,13 +181,6 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
 	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
 	} >'$(srcdir)/package.m4'
 
-noinst_PROGRAMS += tests/test-controller
-MAN_ROOTS += tests/test-controller.8.in
-DISTCLEANFILES += tests/test-controller.8
-noinst_man_MANS += tests/test-controller.8
-tests_test_controller_SOURCES = tests/test-controller.c
-tests_test_controller_LDADD = lib/libopenvswitch.la
-
 noinst_PROGRAMS += tests/test-ovsdb
 tests_test_ovsdb_SOURCES = \
 	tests/test-ovsdb.c \
diff --git a/utilities/.gitignore b/utilities/.gitignore
index d2baa66..dda889b 100644
--- a/utilities/.gitignore
+++ b/utilities/.gitignore
@@ -8,6 +8,8 @@
 /ovs-cfg-mod
 /ovs-cfg-mod.8
 /ovs-check-dead-ifs
+/ovs-testcontroller
+/ovs-testcontroller.8
 /ovs-ctl
 /ovs-dpctl
 /ovs-dpctl.8
diff --git a/utilities/automake.mk b/utilities/automake.mk
index 3e38e37..87ccb98 100644
--- a/utilities/automake.mk
+++ b/utilities/automake.mk
@@ -1,5 +1,6 @@
 bin_PROGRAMS += \
 	utilities/ovs-appctl \
+	utilities/ovs-testcontroller \
 	utilities/ovs-dpctl \
 	utilities/ovs-ofctl \
 	utilities/ovs-vsctl
@@ -39,6 +40,7 @@ EXTRA_DIST += \
 MAN_ROOTS += \
 	utilities/ovs-appctl.8.in \
 	utilities/ovs-benchmark.1.in \
+	utilities/ovs-testcontroller.8.in \
 	utilities/ovs-ctl.8 \
 	utilities/ovs-dpctl.8.in \
 	utilities/ovs-dpctl-top.8.in \
@@ -58,6 +60,7 @@ DISTCLEANFILES += \
 	utilities/ovs-ctl \
 	utilities/ovs-benchmark.1 \
 	utilities/ovs-check-dead-ifs \
+	utilities/ovs-testcontroller.8 \
 	utilities/ovs-dpctl.8 \
 	utilities/ovs-dpctl-top \
 	utilities/ovs-dpctl-top.8 \
@@ -83,6 +86,7 @@ man_MANS += \
 	utilities/ovs-appctl.8 \
 	utilities/ovs-benchmark.1 \
 	utilities/ovs-ctl.8 \
+	utilities/ovs-testcontroller.8 \
 	utilities/ovs-dpctl.8 \
 	utilities/ovs-dpctl-top.8 \
 	utilities/ovs-l3ping.8 \
@@ -99,6 +103,9 @@ man_MANS += \
 utilities_ovs_appctl_SOURCES = utilities/ovs-appctl.c
 utilities_ovs_appctl_LDADD = lib/libopenvswitch.la
 
+utilities_ovs_testcontroller_SOURCES = utilities/ovs-testcontroller.c
+utilities_ovs_testcontroller_LDADD = lib/libopenvswitch.la $(SSL_LIBS)
+
 utilities_ovs_dpctl_SOURCES = utilities/ovs-dpctl.c
 utilities_ovs_dpctl_LDADD = lib/libopenvswitch.la
 
diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in
index 15f8271..34656fc 100755
--- a/utilities/bugtool/ovs-bugtool.in
+++ b/utilities/bugtool/ovs-bugtool.in
@@ -13,8 +13,8 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
-# Copyright (c) 2005, 2007 XenSource Ltd.
-# Copyright (c) 2010, 2011, 2012, 2013 Nicira, Inc.
+# Copyright (c) 2005, 2007, 2014 XenSource Ltd.
+# Copyright (c) 2010, 2011, 2012 Nicira, Inc.
 
 #
 # To add new entries to the bugtool, you need to:
@@ -111,6 +111,7 @@ DHCP_LEASE_DIR = ['/var/lib/dhclient', '/var/lib/dhcp3']
 OPENVSWITCH_LOG_DIR = '@LOGDIR@/'
 OPENVSWITCH_DEFAULT_SWITCH = '/etc/default/openvswitch-switch' # Debian
 OPENVSWITCH_SYSCONFIG_SWITCH = '/etc/sysconfig/openvswitch'    # RHEL
+OPENVSWITCH_DEFAULT_CONTROLLER = '/etc/default/openvswitch-testcontroller'
 OPENVSWITCH_CONF_DB = '@DBDIR@/conf.db'
 OPENVSWITCH_COMPACT_DB = '@DBDIR@/bugtool-compact-conf.db'
 OPENVSWITCH_VSWITCHD_PID = '@RUNDIR@/ovs-vswitchd.pid'
diff --git a/utilities/ovs-ofctl.8.in b/utilities/ovs-ofctl.8.in
index aafda23..989eca4 100644
--- a/utilities/ovs-ofctl.8.in
+++ b/utilities/ovs-ofctl.8.in
@@ -2162,5 +2162,6 @@ Prints the flow entries in the switch.
 .SH "SEE ALSO"
 .
 .BR ovs\-appctl (8),
+.BR ovs\-controller (8),
 .BR ovs\-vswitchd (8)
 .BR ovs\-vswitchd.conf.db (8)
diff --git a/utilities/ovs-pki.8.in b/utilities/ovs-pki.8.in
index 9c3019b..6d042b4 100644
--- a/utilities/ovs-pki.8.in
+++ b/utilities/ovs-pki.8.in
@@ -236,3 +236,7 @@ Sets the log file to \fIfile\fR.  Default:
 .IP "\fB\-h\fR"
 .IQ "\fB\-\^\-help\fR"
 Prints a help usage message and exits.
+
+.SH "SEE ALSO"
+
+.BR ovs\-controller (8).
diff --git a/tests/test-controller.8.in b/utilities/ovs-testcontroller.8.in
similarity index 76%
rename from tests/test-controller.8.in
rename to utilities/ovs-testcontroller.8.in
index 62bfa0f..58a32eb 100644
--- a/tests/test-controller.8.in
+++ b/utilities/ovs-testcontroller.8.in
@@ -1,38 +1,28 @@
-			  .\" -*- nroff -*-
+.\" -*- nroff -*-
 .de IQ
 .  br
 .  ns
 .  IP "\\$1"
 ..
-.TH test\-controller 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
-.ds PN test\-controller
+.TH ovs\-testcontroller 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
+.ds PN ovs\-testcontroller
 .
 .SH NAME
-test\-controller \- simple OpenFlow controller for testing
+ovs\-testcontroller \- simple OpenFlow controller for
 .
 .SH SYNOPSIS
-.B test\-controller
+.B ovs\-testcontroller
 [\fIoptions\fR] \fImethod\fR \fB[\fImethod\fR]\&...
 .
 .SH DESCRIPTION
+\fBovs\-testcontroller\fR is a simple OpenFlow controller that manages
+any number of switches over the OpenFlow protocol, causing them to
+function as L2 MAC-learning switches or hubs.  It is suitable for
+initial testing of OpenFlow networks.  It is not a necessary or
+desirable part of a production OpenFlow deployment.
 .PP
-\fBtest\-controller\fR is a simple OpenFlow controller.  It is very
-easy to set up, so it may be suitable for initial testing of
-connectivity between an OpenFlow switch and a controller.  It may also
-be useful for developer testing and debugging of some Open vSwitch
-features.
-.PP
-\fBtest\-controller\fR is not a general-purpose OpenFlow controller.
-It does not make sense to deploy it routinely or in production.
-\fBtest\-controller\fR does not provide any features that are not
-built into Open vSwitch, and lacks many that are built in to Open
-vSwitch, so adding it to an Open vSwitch deployment actually reduces
-functionality and performance while increasing latency.
-.PP
-\fBtest\-controller\fR manages any number of remote switches over
-OpenFlow protocol, causing them to function as L2 MAC-learning
-switches or hub.  The switches it controls are specified as one or
-more of the following OpenFlow connection methods:
+\fBovs\-testcontroller\fR controls one or more OpenFlow switches, specified as
+one or more of the following OpenFlow connection methods:
 .
 .RS
 .so lib/vconn-passive.man
@@ -42,7 +32,7 @@ more of the following OpenFlow connection methods:
 .SH OPTIONS
 .IP "\fB\-n\fR"
 .IQ "\fB\-\-noflow\fR"
-By default, \fBtest\-controller\fR sets up a flow in each OpenFlow switch
+By default, \fBovs\-testcontroller\fR sets up a flow in each OpenFlow switch
 whenever it receives a packet whose destination is known due through
 MAC learning.  This option disables flow setup, so that every packet
 in the network passes through the controller.
@@ -75,7 +65,7 @@ performance, so it should not be used in production.
 .
 .IP "\fB\-w\fR[\fIwildcard_mask\fR]"
 .IQ "\fB\-\-wildcards\fR[\fB=\fIwildcard_mask\fR]\fR"
-By default, \fBtest\-controller\fR sets up exact-match flows.  This
+By default, \fBovs\-testcontroller\fR sets up exact-match flows.  This
 option allows it to set up wildcarded flows, which may reduce
 flow setup latency by causing less traffic to be sent up to the
 controller.
@@ -92,7 +82,7 @@ This option has no effect when \fB\-n\fR (or \fB\-\-noflow\fR) is in use
 .
 .IP "\fB\-N\fR"
 .IQ "\fB\-\-normal\fR"
-By default, \fBtest\-controller\fR directs packets to a particular port
+By default, \fBovs\-testcontroller\fR directs packets to a particular port
 or floods them.  This option causes it to direct non-flooded packets
 to the OpenFlow \fBOFPP_NORMAL\fR port.  This allows the switch itself
 to make decisions about packet destinations.  Support for
@@ -100,7 +90,7 @@ to make decisions about packet destinations.  Support for
 with some non-Open vSwitch switches.
 .
 .IP "\fB\-\-mute\fR"
-Prevents test\-controller from replying to any OpenFlow messages sent
+Prevents ovs\-testcontroller from replying to any OpenFlow messages sent
 to it by switches.
 .IP
 This option is only for debugging the Open vSwitch implementation of
@@ -108,7 +98,7 @@ This option is only for debugging the Open vSwitch implementation of
 .
 .IP "\fB\-q \fIid\fR"
 .IQ "\fB\-\-queue=\fIid\fR"
-By default, \fBtest\-controller\fR uses the default OpenFlow queue for
+By default, \fBovs\-testcontroller\fR uses the default OpenFlow queue for
 sending packets and setting up flows.  Use one of these options,
 supplying \fIid\fR as an OpenFlow queue ID as a decimal number, to
 instead use that specific queue.
@@ -160,7 +150,7 @@ Use this option more than once to add flows from multiple files.
 To bind locally to port 6633 (the default) and wait for incoming
 connections from OpenFlow switches:
 .IP
-\fB% test\-controller ptcp:\fR
+\fB% ovs\-testcontroller ptcp:\fR
 .PP
 In the future, the default port number will change to 6653, which is the
 IANA-defined value.
@@ -170,7 +160,7 @@ Configuring a Citrix XenServer to connect to a particular controller
 only points the remote OVSDB management connection to that controller.
 It does not also configure OpenFlow connections, because the manager
 is expected to do that over the management protocol.
-\fBtest\-controller\fR is not an Open vSwitch manager and does not know
+\fBovs\-testcontroller\fR is not an Open vSwitch manager and does not know
 how to do that.
 .PP
 As a stopgap workaround, \fBovs\-vsctl\fR can wait for an OVSDB
@@ -178,7 +168,7 @@ connection and set the controller, e.g.:
 .IP
 \fB% ovs\-vsctl \-t0 \-\-db=pssl: \-\-certificate=cert.pem
 \-\-ca\-cert=none \-\-private\-key=privkey.pem
-\-\-peer\-ca\-cert=cacert.pem set\-controller ssl:\fIip\fR
+\-\-peer\-ca\-cert=cacert.pem set\-testcontroller ssl:\fIip\fR
 .SH "SEE ALSO"
 .
 .BR ovs\-appctl (8),
diff --git a/tests/test-controller.c b/utilities/ovs-testcontroller.c
similarity index 100%
rename from tests/test-controller.c
rename to utilities/ovs-testcontroller.c
diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in
index d397721..66a501e 100644
--- a/utilities/ovs-vsctl.8.in
+++ b/utilities/ovs-vsctl.8.in
@@ -13,6 +13,8 @@
 .TH ovs\-vsctl 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
 .\" This program's name:
 .ds PN ovs\-vsctl
+.\" SSL peer program's name:
+.ds SN ovsdb\-server
 .
 .SH NAME
 ovs\-vsctl \- utility for querying and configuring \fBovs\-vswitchd\fR
@@ -467,7 +469,9 @@ for bootstrapping.
 .PP
 This option is only useful if the controller sends its CA certificate
 as part of the SSL certificate chain.  The SSL protocol does not
-require the controller to send the CA certificate.
+require the controller to send the CA certificate, but
+\fBovs\-controller\fR(8) can be configured to do so with the
+\fB\-\-peer\-ca\-cert\fR option.
 .
 .SS "Database Commands"
 .
diff --git a/vswitchd/ovs-vswitchd.8.in b/vswitchd/ovs-vswitchd.8.in
index 6e4929c..80305d1 100644
--- a/vswitchd/ovs-vswitchd.8.in
+++ b/vswitchd/ovs-vswitchd.8.in
@@ -7,6 +7,8 @@
 .TH ovs\-vswitchd 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
 .\" This program's name:
 .ds PN ovs\-vswitchd
+.\" SSL peer program's name:
+.ds SN ovs\-controller
 .
 .SH NAME
 ovs\-vswitchd \- Open vSwitch daemon
diff --git a/vtep/vtep-ctl.8.in b/vtep/vtep-ctl.8.in
index 3203854..6a30db3 100644
--- a/vtep/vtep-ctl.8.in
+++ b/vtep/vtep-ctl.8.in
@@ -13,6 +13,8 @@
 .TH vtep\-ctl 8 "March 2013" "Open vSwitch" "Open vSwitch Manual"
 .\" This program's name:
 .ds PN vtep\-ctl
+.\" SSL peer program's name:
+.ds SN ovsdb\-server
 .
 .SH NAME
 vtep\-ctl \- utility for querying and configuring a VTEP database
diff --git a/xenserver/openvswitch-xen.spec.in b/xenserver/openvswitch-xen.spec.in
index 73ac9e3..bd82681 100644
--- a/xenserver/openvswitch-xen.spec.in
+++ b/xenserver/openvswitch-xen.spec.in
@@ -1,6 +1,6 @@
 # Spec file for Open vSwitch.
 
-# Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
@@ -129,10 +129,12 @@ cp -rf $RPM_BUILD_ROOT/usr/share/openvswitch/bugtool-plugins/* $RPM_BUILD_ROOT/e
 # Get rid of stuff we don't want to make RPM happy.
 rm \
     $RPM_BUILD_ROOT/usr/bin/ovs-benchmark \
+    $RPM_BUILD_ROOT/usr/bin/ovs-testcontroller \
     $RPM_BUILD_ROOT/usr/bin/ovs-l3ping \
     $RPM_BUILD_ROOT/usr/bin/ovs-pki \
     $RPM_BUILD_ROOT/usr/bin/ovs-test \
     $RPM_BUILD_ROOT/usr/share/man/man1/ovs-benchmark.1 \
+    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-testcontroller.8 \
     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-pki.8 \
     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8
-- 
1.9.1




More information about the dev mailing list