#! /bin/sh
#
-# Copyright (c) 2013, 2015 Nicira, Inc.
+# Copyright (c) 2013, 2015, 2016 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
ovn=false
ovnsb_schema=
ovnnb_schema=
+ovn_rbac=true
+dummy=override
for option; do
# This option-parsing mechanism borrowed from a Autoconf-generated
--gdb-ovn-northd run ovn-northd under gdb
--gdb-ovn-controller run ovn-controller under gdb
--gdb-ovn-controller-vtep run ovn-controller-vtep under gdb
+ --dummy=ARG pass --enable-dummy=ARG to vswitchd (default: override)
-R, --gdb-run automatically start running the daemon in gdb
for any daemon set to run under gdb
-S, --schema=FILE use FILE as vswitch.ovsschema
-o, --ovn enable OVN
+ --no-ovn-rbac disable role-based access control for OVN
Other options:
-h, --help Print this usage message.
srcdir=$optarg
built=false
;;
+ --dummy)
+ prev=dummy
+ ;;
+ --dummy=*)
+ dummy=$optarg
+ ;;
-s|--sr*)
prev=srcdir
built=false
-o|--ovn)
ovn=true
;;
+ --no-ovn-rbac)
+ ovn_rbac=false
+ ;;
-R|--gdb-run)
gdb_vswitchd_ex=true
gdb_ovsdb_ex=true
case $srcdir in
'')
srcdir=$builddir
- if test ! -e "$srcdir"/WHY-OVS.md; then
+ if test ! -e "$srcdir"/README.rst; then
srcdir=`cd $builddir/.. && pwd`
fi
;;
if $built; then
# Easy access to OVS manpages.
- (cd "$builddir" && ${MAKE-make} install-man mandir="$sandbox"/man)
+ (cd "$builddir" && ${MAKE-make} install-man install-man-rst mandir="$sandbox"/man)
MANPATH=$sandbox/man:; export MANPATH
fi
touch "$sandbox"/.ovnsb.db.~lock~
touch "$sandbox"/.ovnnb.db.~lock~
run ovsdb-tool create ovnsb.db "$ovnsb_schema"
+ run ovsdb-tool create ovnsb2.db "$ovnsb_schema"
run ovsdb-tool create ovnnb.db "$ovnnb_schema"
run ovsdb-tool create vtep.db "$vtep_schema"
- ovsdb_server_args="ovnsb.db ovnnb.db vtep.db conf.db"
+ ovsdb_server_args="vtep.db conf.db"
+ ovsdb_sb_server_args="ovnsb.db"
+ ovsdb_sb_backup_server_args="ovnsb2.db"
+ ovsdb_nb_server_args="ovnnb.db"
+
+ if [ "$HAVE_OPENSSL" = yes ]; then
+ OVS_PKI="run ovs-pki --dir=$sandbox/pki --log=$sandbox/ovs-pki.log"
+ $OVS_PKI -B 1024 init
+ $OVS_PKI -B 1024 req+sign ovnsb switch
+ $OVS_PKI -B 1024 req+sign ovnnb switch
+ $OVS_PKI -B 1024 -u req+sign chassis-1 switch
+ fi
fi
rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
--remote=punix:"$sandbox"/db.sock $ovsdb_server_args
+if $ovn; then
+ rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
+ --pidfile="$sandbox"/ovnnb_db.pid -vconsole:off \
+ --log-file="$sandbox"/ovnnb_db.log \
+ --remote=db:OVN_Northbound,NB_Global,connections \
+ --private-key=db:OVN_Northbound,SSL,private_key \
+ --certificate=db:OVN_Northbound,SSL,certificate \
+ --ca-cert=db:OVN_Northbound,SSL,ca_cert \
+ --ssl-protocols=db:OVN_Northbound,SSL,ssl_protocols \
+ --ssl-ciphers=db:OVN_Northbound,SSL,ssl_ciphers \
+ --remote=punix:"$sandbox"/ovnnb_db.sock $ovsdb_nb_server_args
+ rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
+ --pidfile="$sandbox"/ovnsb_db.pid -vconsole:off \
+ --log-file="$sandbox"/ovnsb_db.log \
+ --remote=db:OVN_Southbound,SB_Global,connections \
+ --private-key=db:OVN_Southbound,SSL,private_key \
+ --certificate=db:OVN_Southbound,SSL,certificate \
+ --ca-cert=db:OVN_Southbound,SSL,ca_cert \
+ --ssl-protocols=db:OVN_Southbound,SSL,ssl_protocols \
+ --ssl-ciphers=db:OVN_Southbound,SSL,ssl_ciphers \
+ --remote=punix:"$sandbox"/ovnsb_db.sock $ovsdb_sb_server_args
+ # Start SB back up server
+ rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
+ --pidfile="$sandbox"/ovnsb_db2.pid -vconsole:off \
+ --log-file="$sandbox"/ovnsb_db2.log \
+ --private-key=db:OVN_Southbound,SSL,private_key \
+ --certificate=db:OVN_Southbound,SSL,certificate \
+ --ca-cert=db:OVN_Southbound,SSL,ca_cert \
+ --remote=punix:"$sandbox"/ovnsb_db2.sock \
+ --unixctl="$sandbox"/sb_backup_unixctl \
+ --sync-from=unix:"$sandbox"/ovnsb_db.sock $ovsdb_sb_backup_server_args
+fi
#Add a small delay to allow ovsdb-server to launch.
sleep 0.1
#Wait for ovsdb-server to finish launching.
if test ! -e "$sandbox"/db.sock; then
- echo -n "Waiting for ovsdb-server to start..."
+ printf "Waiting for ovsdb-server to start..."
while test ! -e "$sandbox"/db.sock; do
sleep 1;
done
# Start ovs-vswitchd.
rungdb $gdb_vswitchd $gdb_vswitchd_ex ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
- --enable-dummy=override -vvconn -vnetdev_dummy
+ --enable-dummy=$dummy -vvconn -vnetdev_dummy
if $ovn; then
- ovs-vsctl set open . external-ids:system-id=56b18105-5706-46ef-80c4-ff20979ab068
- ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/db.sock
+ ovn-nbctl init
+ ovn-sbctl init
+
+ ovs-vsctl set open . external-ids:system-id=chassis-1
+ ovs-vsctl set open . external-ids:hostname=sandbox
ovs-vsctl set open . external-ids:ovn-encap-type=geneve
ovs-vsctl set open . external-ids:ovn-encap-ip=127.0.0.1
- rungdb $gdb_ovn_northd $gdb_ovn_northd_ex ovn-northd --detach --no-chdir --pidfile -vconsole:off --log-file
- rungdb $gdb_ovn_controller $gdb_ovn_controller_ex ovn-controller --detach --no-chdir --pidfile -vconsole:off --log-file
- rungdb $gdb_ovn_controller_vtep $gdb_ovn_controller_vtep_ex ovn-controller-vtep --detach --no-chdir --pidfile -vconsole:off --log-file
+ if [ "$HAVE_OPENSSL" = yes ]; then
+ ovn-nbctl set-ssl $sandbox/ovnnb-privkey.pem $sandbox/ovnnb-cert.pem $sandbox/pki/switchca/cacert.pem
+ ovn-nbctl set-connection pssl:6641
+ ovn-sbctl set-ssl $sandbox/ovnsb-privkey.pem $sandbox/ovnsb-cert.pem $sandbox/pki/switchca/cacert.pem
+ if $ovn_rbac; then
+ ovn-sbctl set-connection role=ovn-controller pssl:6642
+ else
+ ovn-sbctl set-connection pssl:6642
+ fi
+ ovs-vsctl set open . external-ids:ovn-remote=ssl:127.0.0.1:6642
+ OVN_CTRLR_PKI="-p $sandbox/chassis-1-privkey.pem -c $sandbox/chassis-1-cert.pem -C $sandbox/pki/switchca/cacert.pem"
+ else
+ ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/ovnsb_db.sock
+ OVN_CTRLR_PKI=""
+ fi
+ rungdb $gdb_ovn_northd $gdb_ovn_northd_ex ovn-northd --detach \
+ --no-chdir --pidfile -vconsole:off --log-file \
+ --ovnsb-db=unix:"$sandbox"/ovnsb_db.sock \
+ --ovnnb-db=unix:"$sandbox"/ovnnb_db.sock
+ rungdb $gdb_ovn_controller $gdb_ovn_controller_ex ovn-controller \
+ $OVN_CTRLR_PKI --detach --no-chdir --pidfile -vconsole:off --log-file
+ rungdb $gdb_ovn_controller_vtep $gdb_ovn_controller_vtep_ex \
+ ovn-controller-vtep --detach --no-chdir --pidfile -vconsole:off \
+ $OVN_CTRLR_PKI --log-file --ovnsb-db=unix:"$sandbox"/ovnsb_db.sock
fi
cat <<EOF
----------------------------------------------------------------------
You are running in a dummy Open vSwitch environment. You can use
ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the
-dummy switch.
+dummy switch.
+
+EOF
+if $ovn; then cat << EOF
+This environment also has the OVN daemons and databases enabled.
+You can use ovn-nbctl and ovn-sbctl to interact with the OVN databases.
+
+The backup server of OVN SB can be accessed by:
+* ovn-sbctl --db=unix:`pwd`/sandbox/ovnsb_db2.sock
+* ovs-appctl -t `pwd`/sandbox/sb_backup_unixctl
+The backup database file is "sandbox"/ovnsb2.db
+
+EOF
+fi
+cat <<EOF
Log files, pidfiles, and the configuration database are in the
"sandbox" subdirectory.