#!/bin/bash
# Script zur Erstellung von UDEV Regeln zur Benennung der Netzwerkschnittstellen
# (c) 2013 Stefan Schaefer -- stefan@invis-server.org

# License: GPLv3
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 

# Variablen
syspath="/sys/class/net"
rulefile="/etc/udev/rules.d/75-invis-net.rules"
netconfigpath="/etc/sysconfig/network/"

# ggf. Vorhandene Netzwerkkonfigurationen löschen
rm -f $netconfigpath/ifcfg-enp*
rm -f $netconfigpath/ifcfg-eth*

# Weiteres Script nur ausführen, wenn noch nicht geschehen
if [[ ! $( ifconfig extern 2> /dev/null) ]]; then
    i=0
    for device in $(ls $syspath); do
	if [[ $device != "lo" ]]; then
	    udevcrit[$i]=$(udevadm info -a -p $syspath/$device|grep "ATTR{address}"|tr -s " ")
	    i=$i+1
	fi
    done

    # Regeldatei erzeugen (wird immer neu geschrieben)
    count=${#udevcrit[*]}

    case $count in
    1)
	echo "Ihr Server verfuegt lediglich ueber eine Netzwerkkarte, damit ist kein invis-Setup möglich."
	;;
    2)
	echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ${udevcrit[0]}, ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"extern\", OPTIONS=\"last_rule\"" > $rulefile
	echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ${udevcrit[1]}, ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"intern\", OPTIONS=\"last_rule\"" >> $rulefile
	;;
    *)
	echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ${udevcrit[0]}, ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"dmz\", OPTIONS=\"last_rule\"" > $rulefile
	echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ${udevcrit[1]}, ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"extern\", OPTIONS=\"last_rule\"" >> $rulefile
	echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ${udevcrit[2]}, ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"intern\", OPTIONS=\"last_rule\"" >> $rulefile
	;;
    esac

    echo -e "Es wurden Regeln zur Benennung der vorhandenen Netzwerkkarten erzeugt.\n\nBitte starten Sie den Server jetzt neu und konfigurieren\nSie Ihre Netzwerkkarten anschließend mit YaST."
    
else
    echo "Die Umbenennung der Netzwerkschnittstellen wurden bereits vorgenommen, keine Änderungen notwendig."
fi
