#!/bin/sh # /etc/rc.d/rc.vde2 # This script is used to bring up various tap interfaces that can be used by # virtual machines as host-only interfaces. # # (c) 2010, 2021 Michiel Broek ############################ # READ NETWORK CONFIG FILE # ############################ # Message logging. info_log() { # If possible, log events in /var/log/messages: if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then /usr/bin/logger -t "rc.vde2" --id="$$" "$*" else printf "%s: %s\\n" "rc.vde2" "$*" fi } # Make sure we have a work dir mkdir -p /run/vde2 chmod 775 /run/vde2 2>/dev/null chgrp netdev /run/vde2 2>/dev/null start(){ echo -n "Starting VDE: " info_log "Starting VDE" # Load tun module /sbin/modprobe tun || { echo "Error, cannot load 'tun' module. Exiting..." ; exit 1 ; } # Start VDE switches if /bin/ls /etc/vde2/conf.d/*.conf 1> /dev/null 2> /dev/null ; then for config in /etc/vde2/conf.d/*.conf ; do . $config VDE_NAME="$(basename $config | cut -d '.' -f 1)" echo -n "$VDE_NAME " VDECMD="/usr/bin/vde_switch" [ "$VDE_HUB" == "yes" ] && VDECMD="$VDECMD --hub" [ -n "$VDE_NUMPORTS" ] && VDECMD="$VDECMD --numports $VDE_NUMPORTS" [ "$VDE_FSTP" == "yes" ] && VDECMD="$VDECMD --fstp" [ -n "$VDE_MAC" ] && VDECMD="$VDECMD --macaddr $VDE_MAC" [ -n "$VDE_PRIORITY" ] && VDECMD="$VDECMD --priority $VDE_PRIORITY" [ -n "$VDE_HASHSIZE" ] && VDECMD="$VDECMD --hashsize $VDE_HASHSIZE" VDECMD="$VDECMD --sock /run/vde2/ctl.$VDE_NAME --mode $VDE_SOCK_MODE --group $VDE_SOCK_GROUP" VDECMD="$VDECMD --mgmt /run/vde2/mgmt.$VDE_NAME --mgmtmode $VDE_MGMT_SOCK_MODE --mgmtgroup $VDE_MGMT_SOCK_GROUP" [ -n "$VDE_TAP" ] && VDECMD="$VDECMD --tap $VDE_TAP" VDECMD="$VDECMD $VDE_OPTIONS --daemon" info_log "$VDECMD" $VDECMD if [ "$SLIRP" == "yes" ]; then # Attach slirp SLIRPCMD="/usr/bin/slirpvde --socket /run/vde2/ctl.$VDE_NAME --group $VDE_SOCK_GROUP" if [ "$SLIRP_DHCP" == "yes" ]; then SLIRPCMD="$SLIRPCMD --dhcp" [ -n "$SLIRP_HOST" ] && SLIRPCMD="$SLIRPCMD --host $SLIRP_HOST" [ -n "$SLIRP_TFTP" ] && SLIRPCMD="$SLIRPCMD --tftp $SLIRP_TFTP" fi SLIRPCMD="$SLIRPCMD $SLIRP_OPTIONS --pidfile /run/vde2/slirpvde-${VDE_NAME}.pid --daemon" info_log $SLIRPCMD $SLIRPCMD fi done fi echo } stop(){ echo -n "Stopping VDE: " info_log "Stopping VDE" if /bin/ls /etc/vde2/conf.d/*.conf 1> /dev/null 2> /dev/null ; then for config in /etc/vde2/conf.d/*.conf ; do . $config VDE_NAME="$(basename $config | cut -d '.' -f 1)" echo -n "$VDE_NAME " if [ "$SLIRP" == "yes" ] && [ -f /run/vde2/slirpvde-${VDE_NAME}.pid ]; then info_log "Shutdown slirpvde ${VDE_NAME}" kill $(cat /run/vde2/slirpvde-${VDE_NAME}.pid) rm -f /run/vde2/slirpvde-${VDE_NAME}.pid fi if [ -S /run/vde2/mgmt.${VDE_NAME} ]; then info_log "/usr/bin/vdecmd -s /run/vde2/mgmt.${VDE_NAME} shutdown" /usr/bin/vdecmd -s /run/vde2/mgmt.${VDE_NAME} shutdown fi done fi # Remove tun module if possible. /usr/bin/sleep .2 /sbin/modprobe -r tun 2>/dev/null echo } status() { echo "Status Virtual Distributed Ethernet:" if /bin/ls /etc/vde2/conf.d/*.conf 1> /dev/null 2> /dev/null ; then for config in /etc/vde2/conf.d/*.conf ; do . $config VDE_NAME="$(basename $config | cut -d '.' -f 1)" echo echo -n "Ethernet switch \`$VDE_NAME' " if [ -S /run/vde2/mgmt.${VDE_NAME} ]; then echo "is up, status:" # Show IP address if this is a tap network [ -n "$VDE_TAP" ] && /usr/sbin/ip addr show dev $VDE_TAP | grep inet # Some other info to show. /usr/bin/vdecmd -s /run/vde2/mgmt.$VDE_NAME vlan/allprint /usr/bin/vdecmd -s /run/vde2/mgmt.$VDE_NAME port/showinfo /usr/bin/vdecmd -s /run/vde2/mgmt.$VDE_NAME port/allprint else echo "is down" fi done fi echo } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|status|restart}" ;; esac