Nouvelle fonctionnalité d'ajout d'interface tronc IEEE 802.1Q + Changement de noms de variables + ajout et correction de commentaires
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Script d'initialisation des interfaces réseau d'un conteneur Systemd-nspawn
|
# Script d'initialisation des interfaces réseau d'un conteneur Systemd-nspawn
|
||||||
|
|
||||||
if [[ -n "${1}" ]]; then
|
if [[ -n "${1}" ]]; then
|
||||||
@@ -9,8 +8,9 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
generCmdIntRzo(){
|
# Fonction exécuté en deuxième. Permet la génération de commandes pour la création d'interfaces réseau
|
||||||
# Fonction exécuté en deuxième. Permet la génération de commandes pour la création d'interfaces réseau.
|
genCmdIntRzo(){
|
||||||
|
# Création d'une interface non étiqueté (access)
|
||||||
if [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
if [[ "${pont_init}" -eq 1 && "${vlan_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||||
commandes_a_executer+=( "ip link add ${interface} type veth peer name ${interface}_h" )
|
commandes_a_executer+=( "ip link add ${interface} type veth peer name ${interface}_h" )
|
||||||
commandes_a_executer+=( "ip link set ${interface}_h up" )
|
commandes_a_executer+=( "ip link set ${interface}_h up" )
|
||||||
@@ -22,17 +22,32 @@ generCmdIntRzo(){
|
|||||||
pont_init=0
|
pont_init=0
|
||||||
vlan_init=0
|
vlan_init=0
|
||||||
interface_init=0
|
interface_init=0
|
||||||
|
|
||||||
|
# Création d'une interface étiqueté (trunk)
|
||||||
|
elif [[ "${pont_init}" -eq 1 && "${ieee8021q_init}" -eq 1 && "${interface_init}" -eq 1 ]]; then
|
||||||
|
commandes_a_executer+=( "ip link add ${interface} type veth peer name ${interface}_h" )
|
||||||
|
commandes_a_executer+=( "ip link set ${interface}_h up" )
|
||||||
|
commandes_a_executer+=( "ip link set ${interface}_h master ${pont}" )
|
||||||
|
commandes_a_executer+=( "bridge vlan del dev ${interface}_h vid 1 PVID untagged master" )
|
||||||
|
for ((id_label_vlan=0 ; "${nb_params_label}" - "${id_label_vlan}" ; id_label_vlan++)); do
|
||||||
|
commandes_a_executer+=( "bridge vlan add dev ${interface}_h vid ${label_vlan[${id_label_vlan}]} tagged master" )
|
||||||
|
done
|
||||||
|
|
||||||
|
# Réinitialisation des variables témoins
|
||||||
|
pont_init=0
|
||||||
|
ieee8021q_init=0
|
||||||
|
interface_init=0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Fonction exécuté en premier. Récupère les paramètres du fichier de configuration du conteneur
|
||||||
recupParams(){
|
recupParams(){
|
||||||
# Fonction exécuté en premier. Récuppère les paramètres du fichier de configuration du conteneur
|
|
||||||
declare -a params_int=( $(grep -B 2 "^Interface" /etc/systemd/nspawn/"${nom_conteneur}".nspawn | sed "/^--/d") )
|
declare -a params_int=( $(grep -B 2 "^Interface" /etc/systemd/nspawn/"${nom_conteneur}".nspawn | sed "/^--/d") )
|
||||||
nb_params="${#params_int[*]}"
|
nb_params="${#params_int[*]}"
|
||||||
|
|
||||||
for ((i=0 ; "${nb_params}" - "${i}" ; i++)); do
|
for ((id_param_fichier=0 ; "${nb_params}" - "${id_param_fichier}" ; id_param_fichier++)); do
|
||||||
nom_param=$(echo "${params_int[${i}]}" | sed "s/=.*//" | sed "s/#//")
|
nom_param=$(echo "${params_int[${id_param_fichier}]}" | sed "s/=.*//" | sed "s/#//")
|
||||||
val_param=$(echo "${params_int[${i}]}" | sed "s/.*=//")
|
val_param=$(echo "${params_int[${id_param_fichier}]}" | sed "s/.*=//")
|
||||||
|
|
||||||
# Récupération des données d'après le fichier de configuration
|
# Récupération des données d'après le fichier de configuration
|
||||||
if [ "${nom_param}" == "PONT" ]; then
|
if [ "${nom_param}" == "PONT" ]; then
|
||||||
@@ -56,9 +71,26 @@ recupParams(){
|
|||||||
echo "Erreur: le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
echo "Erreur: le VLAN \"${val_param}\" n'est pas un entier compris entre 1 et 4094. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
elif [ "${nom_param}" == "8021Q" ]; then
|
||||||
|
declare -a label_vlan=( $(echo ${val_param} | sed 's/,/\n/g') )
|
||||||
|
nb_params_label="${#label_vlan[*]}"
|
||||||
|
|
||||||
|
for ((id_label_vlan=0 ; "${nb_params_label}" - "${id_label_vlan}" ; id_label_vlan++)); do
|
||||||
|
if [[ "${label_vlan[${id_label_vlan}]}" =~ ^-?[0-9]+$ && "${label_vlan[${id_label_vlan}]}" -ge 1 && "${label_vlan[${id_label_vlan}]}" -le 4094 && $(echo -n "${label_vlan[${id_label_vlan}]}" | cut -c 1) -ne 0 ]]; then
|
||||||
|
if [[ "${pont_init}" -eq 1 ]]; then
|
||||||
|
ieee8021q_init=1
|
||||||
|
else
|
||||||
|
echo "Erreur: le paramètre \"#pont=votrePont\" est manquant."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Erreur: le tronc 802.1Q comporte un identifiant de VLAN (\"${val_param}\") qui n'est pas un entier compris entre 1 et 4094. Arrêt immédiat du script \"${0}\" sans aucune modification du système."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
elif [ "${nom_param}" == "Interface" ]; then
|
elif [ "${nom_param}" == "Interface" ]; then
|
||||||
if [[ ! $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
if [[ ! $(ip link show "${val_param}" 2> /dev/null) ]]; then
|
||||||
if [[ "${vlan_init}" -eq 1 ]]; then
|
if [[ "${vlan_init}" -eq 1 || "${ieee8021q_init}" -eq 1 ]]; then
|
||||||
interface="${val_param}"
|
interface="${val_param}"
|
||||||
interface_init=1
|
interface_init=1
|
||||||
else
|
else
|
||||||
@@ -70,23 +102,24 @@ recupParams(){
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Erreur: le paramètre numéro $((${i}+1)) (\"${params_int[${i}]}\") dans le fichier de configuration est mal formé (faute de frappe)."
|
echo "Erreur: le paramètre numéro $((${id_param_fichier}+1)) (\"${params_int[${id_param_fichier}]}\") dans le fichier de configuration est mal formé (faute de frappe)."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Génération des commandes de création des interfaces réseau du conteneur
|
# Génération des commandes de création des interfaces réseau du conteneur
|
||||||
generCmdIntRzo
|
genCmdIntRzo
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Fonction d'éxécution des commandes préparées dans la fonction genCmdIntRzo()
|
||||||
execCmdIntRzo(){
|
execCmdIntRzo(){
|
||||||
for ((i=0 ; "${#commandes_a_executer[*]}" - "${i}"; i++)); do
|
for ((id_commande_rzo=0 ; "${#commandes_a_executer[*]}" - "${id_commande_rzo}"; id_commande_rzo++)); do
|
||||||
${commandes_a_executer["${i}"]}
|
${commandes_a_executer["${id_commande_rzo}"]}
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Fonction d'exécution du script de création d'interfaces réseau pour le conteneur en cours
|
||||||
principale(){
|
principale(){
|
||||||
# Fonction d'exécution du script de création d'interfaces réseau pour le conteneur en cours.
|
|
||||||
recupParams
|
recupParams
|
||||||
execCmdIntRzo
|
execCmdIntRzo
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user