diff --git a/qemu-adm b/qemu-adm index 5a90713..cb74cb6 100755 --- a/qemu-adm +++ b/qemu-adm @@ -53,6 +53,21 @@ nouvMV() "iso") echo "--cdrom ${1} \\" >> ${chemin_mv} ;; + "reseau") + if [[ "${4}" != "false" ]]; then + echo "#PONT=${4}" >> ${chemin_mv} + fi + case "${6}" in + "a") + echo "#VLAN=${7}" >> ${chemin_mv} + ;; + "t") + echo "#8021Q=${7}" >> ${chemin_mv} + ;; + esac + + echo "-device ${2},netdev=${1} -netdev tap,id=${1},ifname=${1},script=no,downscript=no \\" >> ${chemin_mv} + ;; esac } @@ -209,6 +224,120 @@ creeMV() presenceParametre "$#" "$1" echo "reseau parametre=${parametre}" # Debogage shift + + # Interface réseau simple : + ## :(virtio|e1000): + # :(virtio|e1000):n + # + # Interface réseau dans un pont + ## :(virtio|e1000):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:))) + + # Initialisation des variables + reseau_nom_interface=false + reseau_type=false + reseau_activ_pont=false + reseau_nom_pont=false + reseau_activ_8021q=false + reseau_mode_8021q=false + reseau_vid=false + + 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 + 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 + "n"|"N") + ;; + "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 + 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 + fi + case ${reseau_activ_8021q} 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 + 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 + ;; + "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" + fi + ;; + *) + die "${reseau_mode_8021q} n'est pas une valeur connue.\nSyntaxe attendue : :(virtio|e1000):o::o:(t:|a:)\n" + ;; + 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 + ;; + 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 + ;; + 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 + ;; '-p') # Parametres echo "parametres" # Debogage