From 1477ef807200aa00dcd8f3703fcf90d174921e34 Mon Sep 17 00:00:00 2001 From: ycharbi Date: Sun, 11 Feb 2024 14:56:06 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20param=C3=A8tre=20obligatoire=20"Aj?= =?UTF-8?q?outer=20une=20interface=20r=C3=A9seau"=20afin=20de=20permettre?= =?UTF-8?q?=20la=20d=C3=A9sactivation=20totale=20du=20r=C3=A9seau=20de=20Q?= =?UTF-8?q?emu=20si=20"n"=20ou=20"N"=20est=20sp=C3=A9cifi=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qemu-adm | 194 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 106 insertions(+), 88 deletions(-) diff --git a/qemu-adm b/qemu-adm index 868be65..86fc262 100755 --- a/qemu-adm +++ b/qemu-adm @@ -90,25 +90,28 @@ nouvMV() echo "-cdrom ${1} \\" >> ${chemin_mv} ;; "reseau") - if [[ "${4}" != "faux" ]]; then - echo "#PONT=${4}" >> ${chemin_mv} - if [[ "${5}" == "n" ]]; then - echo "#VLAN=0" >> ${chemin_mv} + if [[ "${1}" != "faux" ]]; then + if [[ "${5}" != "faux" ]]; then + echo "#PONT=${5}" >> ${chemin_mv} + if [[ "${6}" == "n" ]]; then + echo "#VLAN=0" >> ${chemin_mv} + fi fi + case "${7}" in + "a") + echo "#VLAN=${8}" >> ${chemin_mv} + ;; + "t") + echo "#8021Q=${8}" >> ${chemin_mv} + ;; + esac + if [[ "${4}" != "faux" ]]; then + echo "#INTERFACE=${2}" >> ${chemin_mv} + fi + echo "-device ${3},netdev=${2} -netdev tap,id=${2},ifname=${2},script=no,downscript=no \\" >> ${chemin_mv} + else + echo "-net none \\" >> ${chemin_mv} fi - case "${6}" in - "a") - echo "#VLAN=${7}" >> ${chemin_mv} - ;; - "t") - echo "#8021Q=${7}" >> ${chemin_mv} - ;; - esac - if [[ "${4}" != "faux" ]]; then - echo "#INTERFACE=${1}" >> ${chemin_mv} - fi - - echo "-device ${2},netdev=${1} -netdev tap,id=${1},ifname=${1},script=no,downscript=no \\" >> ${chemin_mv} ;; "kvm") echo "-enable-kvm \\" >> ${chemin_mv} @@ -290,18 +293,19 @@ creeMV() echo "reseau parametre=${parametre}" # Debogage shift + # Aucune interface réseau (désactive le réseau par défaut de Qemu si non spécifié par l'utilisateur) : + # n # Interface réseau simple : - ## :(virtio|e1000): - # :(virtio|e1000):n + ## (n|o::(virtio|e1000):) + # (n|o::(virtio|e1000):n) # # Interface réseau dans un pont - ## :(virtio|e1000):o:: - # :(virtio|e1000):o::n + ## (n|o::(virtio|e1000):o::) + # (n|o::(virtio|e1000):o::n) # # Interface réseau dans un pont avec gestion des VLAN - # :(virtio|e1000):o::o:(t:|a:) - - # :(virtio|e1000):(n|o::(n|o:(t:|a:))) + # (n|o::(virtio|e1000):o::o:(t:|a:)) + # (n|o::(virtio|e1000):(n|o::(n|o:(t:|a:)))) # Initialisation des variables reseau_nom_interface="faux" @@ -312,96 +316,110 @@ creeMV() reseau_mode_8021q="faux" reseau_vid="faux" - reseau_nom_interface=$( echo ${1} | awk -F: '{print $1}' ) - if [[ -z "${reseau_nom_interface}" ]]; then - die "L'interface réseau n'est pas renseigné.\nSyntaxe minimum attendue : :(virtio|e1000):n." 5 - fi - - reseau_type=$( echo ${1} | awk -F: '{print $2}' ) - if [[ -z "${reseau_type}" ]]; then - die "Le type d'interface réseau n'est pas renseigné.\nSyntaxe minimum attendue : :(virtio|e1000):n." 5 + reseau_activ_interface=$( echo ${1} | awk -F: '{print $1}' ) + if [[ -z "${reseau_activ_interface}" ]]; then + die "L'activation du réseau n'est pas renseigné.\nSpécifiez (n|N) pour désactiver le réseau sur la machine virtuelle ou (o|O) pour créer une interface réseau.\nVoici les deux syntaxes minimales posisbles : \n\tSans réseau :\n\t\tn\n\tAvec réseau :\n\t\to::(virtio|e1000):n." 5 fi - case ${reseau_type} in - "virtio") - reseau_type="virtio-net-pci" - ;; - "e1000") - ;; - *) - die "Le type d'interface réseau n'a pas une valeur connue.\nSyntaxe minimum attendue : :(virtio|e1000):n." 5 - ;; - esac - - reseau_activ_pont=$( echo ${1} | awk -F: '{print $3}' ) - echo "reseau_activ_pont=${reseau_activ_pont}" # Debogage - if [[ -z "${reseau_activ_pont}" ]]; then - die "L'activation du pont n'est pas renseigné.\nVoici les deux syntaxes minimum posisbles : \n\tSans pont :\n\t\t:(virtio|e1000):n\n\tAvec pont :\n\t\t:(virtio|e1000):o::n" 5 - fi - case ${reseau_activ_pont} in + case ${reseau_activ_interface} in "n"|"N") + reseau_activ_interface="faux" ;; "o"|"O") - reseau_nom_pont=$( echo ${1} | awk -F: '{print $4}' ) - if [[ -z "${reseau_nom_pont}" ]]; then - die "Le nom du pont réseau n'est pas renseigné.\nSyntaxe minimum attendue : :(virtio|e1000):o::n." 5 + reseau_nom_interface=$( echo ${1} | awk -F: '{print $2}' ) + if [[ -z "${reseau_nom_interface}" ]]; then + die "L'interface réseau n'est pas renseigné.\nSyntaxe minimale attendue : o::(virtio|e1000):n." 5 fi - reseau_activ_8021q=$( echo ${1} | awk -F: '{print $5}' ) - if [[ -z "${reseau_activ_8021q}" ]]; then - die "L'activation du VLAN n'est pas renseigné.\nVoici les deux syntaxes minimum posisbles :\n\tSans VLAN :\n\t\t:(virtio|e1000):o::n\n\tAvec VLAN :\n\t\t:(virtio|e1000):o::o:(t:|a:)" 5 + reseau_type=$( echo ${1} | awk -F: '{print $3}' ) + if [[ -z "${reseau_type}" ]]; then + die "Le type d'interface réseau n'est pas renseigné.\nSyntaxe minimale attendue : o::(virtio|e1000):n." 5 fi - case ${reseau_activ_8021q} in + case ${reseau_type} in + "virtio") + reseau_type="virtio-net-pci" + ;; + "e1000") + ;; + *) + die "Le type d'interface réseau n'a pas une valeur connue.\nSyntaxe minimale attendue : o::(virtio|e1000):n." 5 + ;; + esac + + reseau_activ_pont=$( echo ${1} | awk -F: '{print $4}' ) + echo "reseau_activ_pont=${reseau_activ_pont}" # Debogage + if [[ -z "${reseau_activ_pont}" ]]; then + die "L'activation du pont n'est pas renseigné.\nVoici les deux syntaxes minimale posisbles : \n\tSans pont :\n\t\to::(virtio|e1000):n\n\tAvec pont :\n\t\to::(virtio|e1000):o::n" 5 + fi + case ${reseau_activ_pont} in "n"|"N") ;; "o"|"O") - reseau_mode_8021q=$( echo ${1} | awk -F: '{print $6}' ) - if [[ -z "${reseau_mode_8021q}" ]]; then - die "Le mode du 802.1Q n'est pas renseigné.\nSyntaxe attendue : :(virtio|e1000):o::o:(t:|a:)" 5 + reseau_nom_pont=$( echo ${1} | awk -F: '{print $5}' ) + if [[ -z "${reseau_nom_pont}" ]]; then + die "Le nom du pont réseau n'est pas renseigné.\nSyntaxe minimale attendue : o::(virtio|e1000):o::n" 5 fi - case ${reseau_mode_8021q} in - "t"|"T") - reseau_vid=$( echo ${1} | awk -F: '{print $7}' ) - echo "reseau_vid=${reseau_vid}" # Debogage - if [[ -z "${reseau_vid}" ]]; then - die "Les identifiants de VLAN ne sont pas renseignés.\nSyntaxe attendue : :(virtio|e1000):o::o:(t:|a:).\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" 5 - fi - for vid in $(echo $reseau_vid | sed 's/,/ /g'); do - echo "vid=${vid}" # Debogage - if [[ !(${vid} -ge 1 && ${vid} -le 4096) ]]; then - die "${vid} n'est pas une valeur correcte. L'attendu est un ou plusieurs chiffres comprise entre 1 et 4096 séparé par une virgule.\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" - fi - done + + reseau_activ_8021q=$( echo ${1} | awk -F: '{print $6}' ) + if [[ -z "${reseau_activ_8021q}" ]]; then + die "L'activation du VLAN n'est pas renseigné.\nVoici les deux syntaxes minimales posisbles :\n\tSans VLAN :\n\t\to::(virtio|e1000):o::n\n\tAvec VLAN :\n\t\to::(virtio|e1000):o::o:(t:|a:)" 5 + fi + case ${reseau_activ_8021q} in + "n"|"N") ;; - "a"|"A") - reseau_vid=$( echo ${1} | awk -F: '{print $7}' ) - if [[ -z "${reseau_vid}" ]]; then - die "L'identifiant de VLAN n'est pas renseignés.\nSyntaxe attendue : :(virtio|e1000):o::o:(t:|a:).\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" 5 - fi - if [[ ! "${reseau_vid}" =~ ^[0-9]+$ ]]; then - die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" - fi - if [[ !(${reseau_vid} -ge 1 && ${reseau_vid} -le 4096) ]]; then - die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" + "o"|"O") + reseau_mode_8021q=$( echo ${1} | awk -F: '{print $7}' ) + if [[ -z "${reseau_mode_8021q}" ]]; then + die "Le mode du 802.1Q n'est pas renseigné.\nSyntaxe attendue : o::(virtio|e1000):o::o:(t:|a:)" 5 fi + case ${reseau_mode_8021q} in + "t"|"T") + reseau_vid=$( echo ${1} | awk -F: '{print $8}' ) + echo "reseau_vid=${reseau_vid}" # Debogage + if [[ -z "${reseau_vid}" ]]; then + die "Les identifiants de VLAN ne sont pas renseignés.\nSyntaxe attendue : o::(virtio|e1000):o::o:(t:|a:).\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" 5 + fi + for vid in $(echo $reseau_vid | sed 's/,/ /g'); do + echo "vid=${vid}" # Debogage + if [[ !(${vid} -ge 1 && ${vid} -le 4096) ]]; then + die "${vid} n'est pas une valeur correcte. L'attendu est un ou plusieurs chiffres comprise entre 1 et 4096 séparé par une virgule.\nExemple pour un accès via trunk aux VLAN 10 et 20 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:t:10,20" + fi + done + ;; + "a"|"A") + reseau_vid=$( echo ${1} | awk -F: '{print $8}' ) + if [[ -z "${reseau_vid}" ]]; then + die "L'identifiant de VLAN n'est pas renseignés.\nSyntaxe attendue : o::(virtio|e1000):o::o:(t:|a:).\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" 5 + fi + if [[ ! "${reseau_vid}" =~ ^[0-9]+$ ]]; then + die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" + fi + if [[ !(${reseau_vid} -ge 1 && ${reseau_vid} -le 4096) ]]; then + die "${reseau_vid} n'est pas une valeur correcte. L'attendu est un chiffre compris entre 1 et 4096.\nExemple pour un accès au VLAN 10 :\n\t qemu-adm [...] -r tap0:virtio:o:br0:o:a:10" + fi + ;; + *) + die "${reseau_mode_8021q} n'est pas une valeur connue.\nSyntaxe attendue : o::(virtio|e1000):o::o:(t:|a:)\n" + ;; + esac ;; *) - die "${reseau_mode_8021q} n'est pas une valeur connue.\nSyntaxe attendue : :(virtio|e1000):o::o:(t:|a:)\n" + die "${reseau_activ_8021q} n'est pas une valeur connue.\nVoici les deux syntaxes minimales posisbles : \n\tSans VLAN :\n\t\to::(virtio|e1000):o::n\n\tAvec VLAN :\n\t\to::(virtio|e1000):o::o:(t:|a:)" 5 ;; esac ;; + *) - die "${reseau_activ_8021q} n'est pas une valeur connue.\nVoici les deux syntaxes minimum posisbles : \n\tSans VLAN :\n\t\t:(virtio|e1000):o::n\n\tAvec VLAN :\n\t\t:(virtio|e1000):o::o:(t:|a:)" 5 + die "${reseau_activ_pont} n'est pas une valeur connue.\nVoici les deux syntaxes minimales posisbles : \n\tSans pont :\n\t\to::(virtio|e1000):n\n\tAvec pont :\n\t\to::(virtio|e1000):o::n" 5 ;; esac ;; - *) - die "${reseau_activ_pont} n'est pas une valeur connue.\nVoici les deux syntaxes minimum posisbles : \n\tSans pont :\n\t\t:(virtio|e1000):n\n\tAvec pont :\n\t\t:(virtio|e1000):o::n" 5 + die "${reseau_activ_interface} n'est pas une valeur connue.\nSpécifiez (n|N) pour désactiver le réseau sur la machine virtuelle ou (o|O) pour créer une interface réseau.\nVoici les deux syntaxes minimales posisbles : \n\tSans réseau :\n\t\tn\n\tAvec réseau :\n\t\to::(virtio|e1000):n" 5 ;; esac - commandes_a_executer+=( "nouvMV reseau ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}") - echo "nouvMV reseau ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}" # Debogage + commandes_a_executer+=( "nouvMV reseau ${reseau_activ_interface} ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}") + echo "nouvMV reseau ${reseau_activ_interface} ${reseau_nom_interface} ${reseau_type} ${reseau_activ_pont} ${reseau_nom_pont} ${reseau_activ_8021q} ${reseau_mode_8021q} ${reseau_vid}" # Debogage ;; # "-p") # VFIO PCI # echo "pci" # Debogage