<?xml version="1.0" encoding="utf-8"?>

<creole>

    <files>
        <file filelist='interface_0' name='/etc/eole/network/interface_0.conf' rm='True' />
    </files>


    <variables>

        <family name='Interface-0' icon='sitemap'>

            <variable name='eth0_method' type='string' description="Méthode d'attribution de l'adressage pour l'interface 0" mode='basic'>
                <value>statique</value>
            </variable>

            <!-- Addresses -->
            <variable name='adresse_ip_eth0' type='local_ip' description="Adresse IP de l'interface 0" mandatory='True' mode='basic'/>
            <variable name='adresse_netmask_eth0' type='netmask' description="Masque de sous réseau de l'interface 0" mandatory='True' mode='basic'/>
            <variable name='adresse_network_eth0' type='network' description="Adresse réseau de l'interface 0"/>
            <variable name='adresse_broadcast_eth0' type='broadcast' description="Adresse broadcast de sous réseau de l'interface 0"/>

            <!-- Gateway -->
            <variable name='adresse_ip_gw' type='ip' description='Adresse IP de la passerelle par défaut' mode='basic'/>
            <!-- conserver pour raison de compatibilité, devrait être remplacé par nom_carte_eth0 -->
            <variable name='interface_gw' type='string' description='Interface de sortie'/>

            <!-- Physical device -->
            <variable name='nom_carte_eth0' type='string' description="Nom de l'interface réseau 0" multi='True' mode='expert'/>
            <variable name='nom_zone_eth0' type='string' description="Nom de l'interface réseau de la zone 0" mode='expert'/>

            <!-- Promiscuous mode -->
            <variable name='activer_promiscuous_eth0' type='oui/non' description='Activer le mode promiscuous pour l’interface 0' mode='expert'>
                <value>non</value>
            </variable>

            <!-- Bonding -->
            <variable name='activer_bonding_eth0' type='oui/non' description="Paramétrer cette zone pour du bonding" hidden='True' mode='expert'/>
            <variable name='bonding_mode_eth0' type='string' description="Mode de bonding" mode='expert' />
            <variable name='bonding_miimon_eth0' type='number' description="Fréquence des MII link monitoring en millisecondes" mandatory='True' mode='expert'>
                <value>100</value>
            </variable>
            <variable name='bonding_downdelay_eth0' type='number' description="Temps en millisecondes pour qu'une interface soit détectée down" mandatory='True' mode='expert'>
                <value>200</value>
            </variable>
            <variable name='bonding_updelay_eth0' type='number' description="Temps en millisecondes pour qu'une interface soit détectée comme active" mandatory='True' mode='expert'>
                <value>200</value>
            </variable>

            <!-- Speed -->
            <variable name='debit_carte_eth0_autoneg' type='oui/non' description="Auto-négociation de la connexion pour l'interface 0" mode='expert'>
                <value>oui</value>
            </variable>
            <variable name='debit_carte_eth0_speed' type='string' description="Vitesse de la connexion pour l'interface 0" mode='expert' />
            <variable name='debit_carte_eth0_duplex' type='string' description="Duplex de la connexion pour l'interface 0" mode='expert' />

            <!-- SSH -->
            <variable name='ssh_eth0' type='oui/non' description='Autoriser les connexions SSH' mode='basic'>
                <value>oui</value>
            </variable>
            <variable name='ip_ssh_eth0' type='network' description="Adresse IP réseau autorisée pour les connexions SSH" multi='True' mandatory='True'/>
            <variable name='netmask_ssh_eth0' type='netmask' description="Masque du sous réseau pour les connexions SSH" mandatory='True'/>

            <!-- Admin/EAD -->
            <variable name='admin_eth0' type='oui/non' description='Autoriser les connexions pour administrer le serveur (EAD, phpMyAdmin, ...)' mode='basic'>
                <value>oui</value>
            </variable>
            <variable name='ip_admin_eth0' type='network' description="Adresse IP réseau autorisée pour administrer le serveur" multi='True' mandatory='True'/>
            <variable name='netmask_admin_eth0' type='netmask' description="Masque du sous réseau pour administrer le serveur" mandatory='True'/>

            <!-- Aliases -->
            <variable name='alias_eth0' type='oui/non' description="Ajouter des IP alias sur l'interface 0" >
                <value>non</value>
            </variable>
            <variable name='alias_ip_eth0' type='ip' description="Adresse IP alias pour l'interface 0" multi='True' mandatory='True' />
            <variable name='alias_netmask_eth0' type='netmask' description="Masque de sous réseau correspondant à cet alias" mandatory='True' />
            <variable name='alias_network_eth0' type='network' description="Adresse réseau correspondant à cet alias"/>
            <variable name='alias_broadcast_eth0' type='broadcast' description="Adresse broadcast correspondant à cet alias"/>
            <variable name='alias_gw_eth0' type='ip' description="Adresse de la passerelle pour cet alias (nécessaire à l'agrégation de liens)" hidden='True'/>

            <!-- VLAN -->
            <variable name='vlan_eth0' type='oui/non' description="Activer le support des VLAN sur l'interface 0" >
                <value>non</value>
            </variable>
            <variable name='vlan_id_eth0' type='number' description="Numéro d'identifiant du VLAN" multi='True' mandatory='True' />
            <variable name='vlan_ip_eth0' type='ip' description="Adresse IP de l'interface 0 dans ce VLAN" mandatory='True' />
            <variable name='vlan_netmask_eth0' type='netmask' description="Masque de sous réseau de l'interface 0 dans ce VLAN" mandatory='True' >
                <value>255.255.255.0</value>
            </variable>
            <variable name='vlan_network_eth0' type='network' description="Adresse réseau de l'interface 0 dans ce VLAN" />
            <variable name='vlan_broadcast_eth0' type='broadcast' description="Adresse de broadcast de l'interface 0 dans ce VLAN" />
            <variable name='vlan_gw_eth0' type='ip' description='Adresse de la passerelle pour ce VLAN' />

        </family>

        <separators>
            <separator name='eth0_method'>Configuration de l'interface</separator>
            <separator name='ssh_eth0' never_hidden='True'>Administration distante sur l'interface</separator>
            <separator name='alias_eth0'>Configuration des alias sur l'interface</separator>
            <separator name='vlan_eth0'>Configuration des VLAN sur l'interface</separator>
        </separators>

    </variables>


    <constraints>

        <check name='valid_enum' target='eth0_method'>
            <param>['non géré', 'dhcp', 'statique']</param>
        </check>


        <!-- Addresses -->
        <check name="valid_ipnetmask" target="adresse_netmask_eth0" level="warning">
            <param type='eole'>adresse_ip_eth0</param>
        </check>

        <!-- The adresses are automatically calculated and hidden -->
        <condition name='frozen_if_not_in' source='eth0_method'>
            <param>statique</param>
            <target type='variable'>adresse_ip_eth0</target>
            <target type='variable'>adresse_netmask_eth0</target>
            <target type='variable'>adresse_ip_gw</target>
        </condition>

        <auto name='auto_eth' target='adresse_ip_eth0'>
            <param type='eole'>nom_zone_eth0</param>
            <param name='condition'>dhcp</param>
            <param type='eole' name='parametre'>eth0_method</param>
        </auto>

        <auto name='auto_netmask' target='adresse_netmask_eth0'>
            <param type='eole'>nom_zone_eth0</param>
            <param name='condition'>dhcp</param>
            <param type='eole' name='parametre'>eth0_method</param>
        </auto>

        <auto name='calc_or_auto_network' target='adresse_network_eth0'>
            <param type='eole' name='nom_carte'>nom_zone_eth0</param>
            <param name='condition'>dhcp</param>
            <param type='eole' name='parametre'>eth0_method</param>
            <param type='eole' name='ip'>adresse_ip_eth0</param>
            <param type='eole' name='netmask'>adresse_netmask_eth0</param>
        </auto>

        <auto name='calc_or_auto_broadcast' target='adresse_broadcast_eth0'>
            <param type='eole' name='nom_carte'>nom_zone_eth0</param>
            <param name='condition'>dhcp</param>
            <param type='eole' name='parametre'>eth0_method</param>
            <param type='eole' name='ip'>adresse_ip_eth0</param>
            <param type='eole' name='netmask'>adresse_netmask_eth0</param>
        </auto>


        <!-- Gateway -->
        <auto name='auto_defaultgw_ip' target='adresse_ip_gw'>
            <param type='eole'>eth0_method</param>
            <param type='eole'>nom_zone_eth0</param>
        </auto>

        <!-- Gateway -->
        <auto name='calc_val' target='interface_gw'>
            <param type='eole'>nom_zone_eth0</param>
        </auto>

        <check name="valid_in_network" target="adresse_ip_gw" level="warning">
            <param type='eole'>adresse_network_eth0</param>
            <param type='eole'>adresse_netmask_eth0</param>
        </check>

        <check name="valid_differ" target="adresse_ip_gw">
            <param type='eole'>adresse_ip_eth0</param>
        </check>


        <!-- SSH -->
        <group master='ip_ssh_eth0'>
            <slave>netmask_ssh_eth0</slave>
        </group>

        <condition name='disabled_if_in' source='activer_firewall'>
            <param>non</param>
            <target type='variable'>ssh_eth0</target>
        </condition>
        <condition name='disabled_if_in' source='ssh_eth0'>
            <param>non</param>
            <target type='variable'>ip_ssh_eth0</target>
            <target type='variable'>netmask_ssh_eth0</target>
        </condition>

        <check name="valid_networknetmask" target="netmask_ssh_eth0">
            <param type='eole'>ip_ssh_eth0</param>
        </check>


        <!-- Admin/EAD -->
        <group master='ip_admin_eth0'>
            <slave>netmask_admin_eth0</slave>
        </group>

        <condition name='disabled_if_in' source='activer_firewall'>
            <param>non</param>
            <target type='variable'>admin_eth0</target>
        </condition>

        <condition name='disabled_if_in' source='admin_eth0'>
            <param>non</param>
            <target type='variable'>ip_admin_eth0</target>
            <target type='variable'>netmask_admin_eth0</target>
        </condition>

        <check name="valid_networknetmask" target="netmask_admin_eth0">
            <param type='eole'>ip_admin_eth0</param>
        </check>


        <!-- Alias -->
        <group master='alias_ip_eth0'>
            <slave>alias_netmask_eth0</slave>
            <slave>alias_network_eth0</slave>
            <slave>alias_broadcast_eth0</slave>
            <slave>alias_gw_eth0</slave>
        </group>

        <condition name='disabled_if_in' source='alias_eth0'>
            <param>non</param>
            <target type='variable'>alias_ip_eth0</target>
            <target type='variable'>alias_netmask_eth0</target>
            <target type='variable'>alias_network_eth0</target>
            <target type='variable'>alias_broadcast_eth0</target>
        </condition>

        <fill name='calc_val' target='alias_netmask_eth0'>
            <param type='eole' name='valeur'>adresse_netmask_eth0</param>
        </fill>

        <auto name='calc_network' target='alias_network_eth0'>
            <param type='eole' name='ip'>alias_ip_eth0</param>
            <param type='eole' name='netmask'>alias_netmask_eth0</param>
        </auto>

        <auto name='calc_broadcast' target='alias_broadcast_eth0'>
            <param type='eole' name='ip'>alias_ip_eth0</param>
            <param type='eole' name='netmask'>alias_netmask_eth0</param>
        </auto>


        <!-- VLAN -->
        <group master='vlan_id_eth0'>
            <slave>vlan_ip_eth0</slave>
            <slave>vlan_netmask_eth0</slave>
            <slave>vlan_network_eth0</slave>
            <slave>vlan_broadcast_eth0</slave>
            <slave>vlan_gw_eth0</slave>
        </group>

        <condition name='disabled_if_in' source='vlan_eth0'>
            <param>non</param>
            <target type='variable'>vlan_id_eth0</target>
            <target type='variable'>vlan_ip_eth0</target>
            <target type='variable'>vlan_netmask_eth0</target>
            <target type='variable'>vlan_network_eth0</target>
            <target type='variable'>vlan_broadcast_eth0</target>
            <target type='variable'>vlan_gw_eth0</target>
        </condition>

        <auto name='calc_network' target='vlan_network_eth0'>
            <param type='eole' name='ip'>vlan_ip_eth0</param>
            <param type='eole' name='netmask'>vlan_netmask_eth0</param>
        </auto>

        <auto name='calc_broadcast' target='vlan_broadcast_eth0'>
            <param type='eole' name='ip'>vlan_ip_eth0</param>
            <param type='eole' name='netmask'>vlan_netmask_eth0</param>
        </auto>


        <!-- Bonding -->
        <check name="valid_enum" target="bonding_mode_eth0">
            <param>['balance-rr', 'active-backup', 'balance-xor', 'broadcast', '802.3ad', 'balance-tlb', 'balance-alb']</param>
        </check>

        <auto name='list_len_gt' target='activer_bonding_eth0'>
            <param type='eole' name='param'>nom_carte_eth0</param>
            <param name='max_len'>1</param>
            <param name='match'>oui</param>
            <param name='mismatch'>non</param>
        </auto>

        <condition name='disabled_if_in' source='activer_bonding_eth0'>
            <param>non</param>
            <target type='variable'>bonding_mode_eth0</target>
            <target type='variable'>bonding_miimon_eth0</target>
            <target type='variable'>bonding_downdelay_eth0</target>
            <target type='variable'>bonding_updelay_eth0</target>
        </condition>


        <!-- Physical device -->
        <check name='valid_enum' target="nom_carte_eth0">
            <param type='python'>eosfunc.get_net_devices()</param>
            <param name="checkval">False</param>
        </check>

        <fill name='get_net_device' target="nom_carte_eth0">
            <param type='number'>0</param>
            <param type='eole' optional='True' name="mode_zephir">mode_zephir</param>
        </fill>

        <fill name='get_zone_name' target='nom_zone_eth0'>
            <param type='eole' name='nom_carte'>nom_carte_eth0</param>
            <param type='eole' name='method'>eth0_method</param>
            <param name='interface_no'>0</param>
        </fill>

        <!-- Not on Zéphir: mandatory carte and zone names -->
        <condition name='mandatory_if_in' source='mode_zephir' fallback="True">
            <param>non</param>
            <target type='variable'>nom_carte_eth0</target>
            <target type='variable'>nom_zone_eth0</target>
            <target type='variable'>interface_gw</target>
        </condition>

        <!-- Avoid 2 interfaces with the same name -->
        <check name="valid_differ" target="nom_carte_eth0" level="warning">
            <param type='eole' hidden='False'>nom_carte_eth1</param>
        </check>

        <check name="valid_differ" target="nom_carte_eth0" level="warning">
            <param type='eole' hidden='False'>nom_carte_eth2</param>
        </check>

        <check name="valid_differ" target="nom_carte_eth0" level="warning">
            <param type='eole' hidden='False'>nom_carte_eth3</param>
        </check>

        <check name="valid_differ" target="nom_carte_eth0" level="warning">
            <param type='eole' hidden='False'>nom_carte_eth4</param>
        </check>


        <!-- Speed -->
        <condition name='disabled_if_in' source='debit_carte_eth0_autoneg'>
            <param>oui</param>
            <target type='variable'>debit_carte_eth0_speed</target>
            <target type='variable'>debit_carte_eth0_duplex</target>
        </condition>
        <check name='valid_enum' target='debit_carte_eth0_speed'>
            <param>['10', '100', '1000']</param>
            <param name="checkval">False</param>
        </check>
        <check name='valid_enum' target='debit_carte_eth0_duplex'>
            <param>['full', 'half']</param>
        </check>

    </constraints>


    <help>

        <family name='Interface-0'>Configuration de l'interface 0</family>
        <variable name='adresse_ip_eth0'>Adresse IP de la première interface réseau (ex: 10.21.5.1)</variable>
        <variable name='adresse_netmask_eth0'>Adresse du masque de sous réseau de la première interface réseau (ex: 255.255.255.0)</variable>
        <variable name='adresse_network_eth0'>'Adresse réseau de la première interface réseau (ex: 10.21.5.0)</variable>
        <variable name='adresse_broadcast_eth0'>Adresse de broadcast (diffusion) de la première interface réseau (ex: 10.21.5.255)</variable>
        <variable name='activer_promiscuous_eth0'>Le mode promiscuous est nécessaire au fonctionnement des modules utilisant des conteneurs LXC et virtualisés avec VirtualBox</variable>
        <variable name='bonding_mode_eth0'>Mode de fonctionnement du bond</variable>
        <variable name='bonding_miimon_eth0'>Intervalle de temps pour le monitoring des interfaces</variable>

    </help>

</creole>
