ovn-sim

Synopsis

ovn-sim [option]… [script]…

Description

ovn-sim is a wrapper script that adds ovn related commands on top of ovs-sim.

ovs-sim provides a convenient environment for running one or more Open vSwitch instances and related software in a sandboxed simulation environment.

To use ovn-sim, first build Open vSwitch, then invoke it directly from the build directory, e.g.:

git clone https://github.com/openvswitch/ovs.git
cd ovs
./boot.sh && ./configure && make
cd ..
git clone https://github.com/ovn-org/ovn.git
cd ovn
./boot.sh && ./configure --with-ovs-source=${PWD}/../ovs
make
utilities/ovn-sim

See documentation on ovs-sim for info on simulator, including the parameters you can use.

OVN Commands

These commands interact with OVN, the Open Virtual Network.

ovn_start [options]

Creates and initializes the central OVN databases (both ovn-sb(5) and ovn-nb(5)) and starts an instance of ovsdb-server for each one. Also starts an instance of ovn-northd.

The following options are available:

--nbdb-model model

Uses the given database model for the northbound database. The model may be standalone (the default), backup, or clustered.

--nbdb-servers n

For a clustered northbound database, the number of servers in the cluster. The default is 3.

--sbdb-model model

Uses the given database model for the southbound database. The model may be standalone (the default), backup, or clustered.

--sbdb-servers n

For a clustered southbound database, the number of servers in the cluster. The default is 3.

ovn_attach network bridge ip [masklen]

First, this command attaches bridge to interconnection network network, just like net_attach network bridge. Second, it configures (simulated) IP address ip (with network mask length masklen, which defaults to 24) on bridge. Finally, it configures the Open vSwitch database to work with OVN and starts ovn-controller.

Examples

Simulating hypervisors, starting ovn controller (via ovn_attach) and adding a logical port on each one of them:

ovn_start
ovn-nbctl ls-add lsw0
net_add n1
for i in 0 1; do
    sim_add hv$i
    as hv$i
    ovs-vsctl add-br br-phys
    ovn_attach n1 br-phys 192.168.0.`expr $i + 1`
    ovs-vsctl add-port br-int vif$i -- \
        set Interface vif$i external-ids:iface-id=lp$i
    ovn-nbctl lsp-add lsw0 lp$i
    ovn-nbctl lsp-set-addresses lp$i f0:00:00:00:00:0$i
done

Here’s a primitive OVN “scale test” (adjust the scale by changing n in the first line):

n=200; export n
ovn_start --sbdb-model=clustered
net_add n1
ovn-nbctl ls-add br0
for i in `seq $n`; do
    (sim_add hv$i
    as hv$i
    ovs-vsctl add-br br-phys
    y=$(expr $i / 256)
    x=$(expr $i % 256)
    ovn_attach n1 br-phys 192.168.$y.$x
    ovs-vsctl add-port br-int vif$i -- \
        set Interface vif$i external-ids:iface-id=lp$i) &
    case $i in
        *50|*00) echo $i; wait ;;
    esac
done
wait
for i in `seq $n`; do
    yy=$(printf %02x $(expr $i / 256))
    xx=$(printf %02x $(expr $i % 256))
    ovn-nbctl lsp-add br0 lp$i
    ovn-nbctl lsp-set-addresses lp$i f0:00:00:00:$yy:$xx
done

When the scale test has finished initializing, you can watch the logical ports come up with a command like this:

watch 'for i in `seq $n`; do \
if test `ovn-nbctl lsp-get-up lp$i` != up; then echo $i; fi; done'