gns3-registry/docker/openvswitch/init.sh
2024-05-15 15:12:56 +02:00

55 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (C) 2024 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see <http://www.gnu.org/licenses/>.
firstrun=0
[ -f "/etc/openvswitch/conf.db" ] || firstrun=1
if [ $firstrun -ne 0 ]; then
# create database
ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
fi
# start openvswitch daemons
mkdir -p /var/log/openvswitch /var/run/openvswitch
ovsdb-server --detach --pidfile --remote=punix:/var/run/openvswitch/db.sock \
--log-file --verbose=off:syslog
ovs-vswitchd --detach --pidfile --log-file --verbose=off:syslog
if [ $firstrun -ne 0 ]; then
ovs-vsctl --no-wait init
# create br0..br3
for intf in br0 br1 br2 br3; do
ovs-vsctl add-br $intf
ovs-vsctl set bridge $intf datapath_type=netdev
done
# add all ethernet interfaces to br0, except MANAGEMENT_INTERFACE
[ "$MANAGEMENT_INTERFACE" = 1 ] && MANAGEMENT_INTERFACE=eth0
sed -n 's/^ *\(eth[0-9]*\): .*/\1/p' /proc/net/dev | sort -V | \
while read -r intf; do
[ "$intf" = "$MANAGEMENT_INTERFACE" ] || ovs-vsctl add-port br0 "$intf"
done
fi
# activate bridge interfaces
ovs-vsctl --bare -f table --columns=name find interface type=internal | \
while read -r intf; do
ip link set dev "$intf" up
ifup -f "$intf"
done