     [file paths.texi not included]

Copyright © 2001 Hewlett-Packard Company

Copyright © 2002 Massachusetts Institute of Technology

This document is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Ceci est Le manuel de Laptop-net, édition 1.5, version originale du 28 Octobre 2002 (traduction française du 11 Août 2002). .

Introduction
************

Le paquet laptop-net est un mécanisme de configuration pour les ordinateurs portables qui disposent d'une interface réseau intégrée. Il complète les outils d'administration de réseau standards GNU/Linux afin de faciliter le déplacement de l'ordinateur portable entre plusieurs environnements de réseau différents. De plus, pour les ordinateurs dont l'interface réseau est supportée, il détecte aussi automatiquement l'insertion et le débranchement du cable réseau.

Le paquet est construit autour de deux concepts de base, qui seront décrits plus loin de manière plus détaillée. Un premier fichier de configuration décrit comment le réseau doit être initialisé pour chaque environnement particulier. Cette information est organisée en une série de schèmes (NdT: schemes) désignés chacun par un nom, qui décrivent chacun la configuration du réseau pour un environnement particulier. Par exemple, une configuration réseau typique devrait spécifier une adresse IP, un masque de réseau associé, une passerelle, etc. Un second fichier de configuration précise des détails de plus haut niveau, comme une copie de /etc/printcap décrivant les imprimantes disponibles dans cet environnement particulier. Cette information de plus haut niveau est organisée en une série de profils (NdT: profiles), qui sont indexés d'après un motif (NdT: pattern) d'adresses IP. Ensemble, ces deux mécanismes fournissent un moyen flexible pour configurer l'environnement de réseau.

Le mécanisme des profils est basé sur un mécanisme similaire à celui du paquet boot-profiles écrit par Al Stone. Le mécanisme que voici est ma tentative pour intégrer cette fonctionalité directement dans le code d'administration du réseau. Le mécanisme des schèmes est basé sur le mécanisme de pcmcia-cs écrit par David Hinds.

Ce paquet at été conçu et testé sur les modèles 6000 et 500 d'OmniBook de Hewlett-Packard, qui ont été fournis par Hewlett-Packard pour supporter le développement de ce logiciel. Bien qu'il n'ait pas été testé sur d'autres machines, ce paquet a été conçu pour avoir une portée générale et devrait pouvoir être porté facilement.

Ce paquet a été testé uniquement sur des systèmes faisant tourner Debian GNU/Linux. Et malheureusement une partie du code est spécifique à Debian, ce qui veut dire que porter ce code pour un autre système GNU/Linux requiert quelque attention. Néanmoins, le code spécifique à Debian a été isolé autant que possible du reste du paquet.

Le fichier de configuration générale
************************************

Le fichier de configuration donne quelques renseignements utiles au fonctionnement général du paquet et il est nommé CONFIG_FILE. C'est un script d'interpréteur de commande Bourne dont l'utilité est de définir quelques variables à l'interpréteur de commandes pour définir la manière dont doit être opérée la configuration du réseau.

MODULE_NAME
     doit contenir le nom du module du noyau qui contient le pilote de l'interface réseau intégrée. Si cette variable n'est pas laissée vide, le paquet laptop-net chargera et déchargera le module lorsque ce sera nécessaire.

     Il est à noter qu'il est nécessaire que le pilote soit compilé en tant que module et que la variable contienne son nom, pour les versions du noyau antérieures à 2.4. Cela est aussi nécessaire si le pilote du noyau 2.4 ne gère pas correctement l'économie d'énergie. Dans tous les cas cette méthode est considérée comme sûre, mais si le pilote et la puce supportent la gestion de l'économie d'énergie, il est préférable de ne pas renseigner MODULE_NAME.

     Jusqu'ici cette procédure a été uniquement testée avec le module MODULE_NAME="3c59x". Elle reste nécessaire sur les ordinateurs portables HP OmniBook 500 et 6000, parce que le code du pilote pour la gestion d'énergie du noyau 2.4 n'est pas complètement fonctionnel pour la puce qui se trouve dans ces machines.

MII_SUPPORTED
     doit être positionnée à "yes" si le pilote de l'interface réseau supporte MII, et à "no" dans les autres cas. La détection du branchement du câble réseau n'est disponible que lorsque MII_SUPPORTED est positionnée à  "yes".

Schèmes
*******

Le paquet laptop-net organise les informations concernant la configuration du réseau en une série de schèmes désignés chacun par un nom. Chaque schème peut aussi spécifier l'utilisation du protocole DHCP (Dynamic Host Configuration Protocol) pour obtenir la configuration; un tel schème peut être utilisé pour configurer le réseau dans tout lieu qui propose le service DHCP.

À tout moment, il existe un schème sélectionné. Sur les systèmes Debian, le schème sélectionné peut être affiché en lançant la commande suivante:

     /etc/init.d/laptop-net scheme

Le schème initial est appelé default. Un nouveau schème NOM peut être sélectionné en lançant la commande:

     /etc/init.d/laptop-net scheme NOM

Il est aussi possible de sélectionner le schème automatiquement en spécifiant une ou plusieurs adresses IP qui sont associées à un schème particulier. Ensuite, lorsque l'ordinateur portable est connecté à un réseau, il cherche la présence de ces adresses dans le sous-réseau local et s'il trouve l'une d'elle, il sélectionne le schème qui lui est associé.

Fichier des schèmes
===================

Les schèmes sont définis en éditant un fichier de configuration appelé SCHEMES_FILE. Ce fichier est un script d'interpréteur de commandes Bourne; il sert à déterminer certaines variables de l'interpréteur de commande, lesquelles définissent la configuration du réseau. Certaines de ces variables sont utilisées par le fichier de configuration lorsqu'il est exécuté. Le script utilise les variables suivantes pour déterminer ce qu'il faut faire:

SCHEME
     le nom du schème sélectionné. Cela peut être par exemple: default, maison ou bureau. C'est vous qui définissez les noms spécifiques qui seront utilisés lorsque vous éditez le fichier de configuration.

INTERFACE
     est le nom de l'interface résau intégrée. C'est presque toujours eth0.

Les variables qui peuvent être définies dans le fichier de configuration sont nombreuses, mais on peut les diviser en groupes correspondant aux types de configuration de base. Il existe trois types de configuration différents, comme expliqué ci-dessous:

 1. Si aucune autre variable n'est définie, l'interface réseau est désactivée. Dans le fichier de configuration par défaut fourni avec ce paquet, le schème offline est configuré de cette manière.

 2. Si la variable DHCP est définie, alors l'interface réseau sera configurée en utilisant le protocole DHCP. Ce type de configuration est décrite ici sous le nom de configuration dynamique. C'est le type de configuration le plus apprécié, parce qu'il simplifie la configuration et améliore considérablement la portabilité du système.

 3. Si les variables ADDRESS et NETMASK sont définies, l'interface réseau doit être configurée manuellement. Ce type de configuration est décrite ici sous le nom de configuration statique.

Voici les variables spécifiques à la configuration dynamique:

DHCP
     doit être positionnée à yes si vous voulez que l'interface réseau soit configurée en utilisant DHCP. Positionnez-la à no ou laissez-là non configurée si vous ne voulez pas utiliser DHCP.

Voici les variables spécifiques à la configuration statique:

ADDRESS
     doit être définie comme une adresse IP. Par exemple: ADDRESS=192.168.1.17.

NETMASK
     définit le masque de sous-réseau qui correspond à l'adresse IP définie dans ADDRESS. Par exemple: NETMASK=255.255.255.0.

GATEWAY
     définit l'adresse de la passerelle pour le sous-réseau qui correspond à l'adresse IP définie dans ADDRESS. Par exemple: GATEWAY=192.168.1.1.

BROADCAST
     definit l'adresse de diffusion qui peut être calculée à partir de ADDRESS et NETMASK. Normalement cette variable n'est pas nécessaire puisque l'adresse de diffusion du réseau peut être calculée à partir de ADDRESS et NETMASK. Par exemple: BROADCAST=192.168.1.255.

NETWORK
     définit l'adresse de réseau du sous-réseau qui correspond à l'adresse IP de ADDRESS. Normalement cette variable n'est pas nécessaire puisque l'adresse du réseau peut être calculée à partir de ADDRESS et NETMASK. Par exemple: NETWORK=192.168.1.0.

Les variables suivantes sont nécessaires pour une configuration statique. (Seule l'une des variables DOMAIN et SEARCH ont besoin d'être définies.) Pour une configuration dynamique, elles sont optionnelles et ne sont généralement pas nécessaires.

DOMAIN
     définit le nom de domaine local. Par exemple: DOMAIN=ai.mit.edu.

SEARCH
     définit une liste de noms de domaines séparée par des espaces. Ces noms sont recherchés, dans l'ordre, lors d'une requête vers un nom de DNS qui ne contient aucun point. Il est à noter que vous devez entourer la partie droite de la variable de guillemets doubles; sinon les espaces vont poser problème à l'interpréteur de commandes. Par exemple: SEARCH="ai.mit.edu mit.edu".

NAMESERVERS
     définit une liste d'adresses IP de serveurs DNS, lesquelles doivent être séparées par des espaces. Il est à noter que vous devez entourer la partie droite de la variable de guillemets doubles; sinon les espaces vont poser problème à l'interpréteur de commandes. Par exemple: NAMESERVERS="192.168.1.57 192.168.4.71".

Le fichier de la carte des IP
=============================

Laptop-net a la capacité de choisir automatiquement le schème en testant le réseau. Cette opération est accomplie en associant une ou plusieurs adresses IP avec un ou plusieurs schèmes. Lorsque l'ordinateur est connecté à un réseau, il teste ce réseau pour voir les adresses IP présentes dans ce sous-réseau. Si l'une de ces adresses IP est trouvée, le schème associé est sélectionné.

L'association entre le nom du schème et les adresses IP est stockée dans un fichier de configuration nommé IP_MAP_FILE; ce fichier est appelé normalement la carte des IP. Cette carte des adressses IP consiste en une série d'entrées d'une ligne chacune. Chaque ligne commence avec le nom d'un schème dans la première colonne, et est suivie par une ou plusieurs adresses IP, séparées par des espaces ou des marques de tabulation. Les lignes vides sont autorisées, ainsi que les commentaires qui commencent par le caractère # et se terminent à la fin de la ligne.

Si le fichier de la carte des IP contient une ou plusieurs entrées, alors le réseau est testé en envoyant un paquet de requête ARP Address Resolution Protocol vers chaque adresse IP apparaissant dans la carte. Si un paquet de réponse ARP est reçu, son adresse IP source est recherchée dans la carte, et le schème est sélectionné. (La première réponse seulement est utilisée.) Si le schème sélectionné a été changé manuellement par l'utilisateur, alors il n'est pas changé. Par contre, si le schème a été sélectionné automatiquement par un test du réseau, alors le schème par défaut (default) est sélectionné.

Si le fichier de la carte des IP ne contient aucune entrée, ou s'il n'existe pas, alors le réseau n'est pas testé et le schème sélectionné n'est pas changé automatiquement.

Un exemple de schèmes
=====================

Voici un exemple complet pour vous donner une idée de la structure générale du fichier de schèmes:

     case $SCHEME in
     home)
         # À la maison on utilise une configuration statique.
         ADDRESS=192.168.1.6
         NETMASK=255.255.255.0
         GATEWAY=192.168.1.254
         SEARCH="ai.mit.edu mit.edu"
         NAMESERVERS="24.128.44.6 24.128.52.6 24.128.1.80"
         ;;
     offline)
         # Le schème offline ne configure pas le réseau.
         ;;
     *)
         # Tous les autres schèmes utilisent une configuration dynamique.
         DHCP=yes
         ;;
     esac

Et voici un fichier de carte des adresses IP correspondant:

     home 192.168.1.1 192.168.1.2
     office 192.168.2.1 192.168.2.2 192.168.2.3

Profils
*******

Le second niveau de la configuration est celui du profil (NdT: profile), qui adapte la configuration logicielle de l'ordinateur pour qu'elle corresponde à l'environnement du réseau. Par exemple, si vous avez des profils pour votre domicile personnel et pour votre bureau, vous aurez d'ordinaire besoin d'avoir une copie différente du fichier /etc/printcap pour chaque endroit, parce que les imprimantes y sont à chaque fois différentes.

Un profil consiste en une série de fichiers qui sont copiés dans le système de fichiers, ainsi qu'en une série de scripts d'interpréreur de commandes qui sont exécutés lorsque le profil est sélectionné ou déselectionné. À chaque profil correspond aussi une série de motifs (NdT: patterns) qui spécifient les adresses IP avec lesquelles il est associé. Toutes les fois que le réseau est reconfiguré, que ce soit lors de sa mise en route, de son arrêt ou lors d'un changement de l'adresse de réseau, laptop-net recherche les profils disponibles pour en trouver un qui corresponde. Si le nouveau profil est différent du profil courant, le profil courant est déselectionné et le nouveau est sélectionné à la place.

Le comportement des profils pourrait avoir été intégré dans la couche des schèmes. Mais les profils sont mis en application comme une couche séparée parce que cela rend leur utilisation plus flexible. En effet un schème appelé qui emploie la configuration dynamique peut avoir différentes adresses IP, et à chacune de ces adresses pourrait correspondre à un profil différent. Il peut aussi y avoir deux schèmes différents qui correspondent au même profil, par exemple lorsqu'un schème configuré statiquement et un schème configuré dynamiquement sont susceptibles d'être chacun employés dans le même réseau.

Le répertoire des profils
=========================

Les profils sont définis en créant des sous-répertoires dans le répertoire des profils, lequel est appelé PROFILE_DIR. Un profil est un sous-répertoire du répertoire des profils. Le premier caractère du nom du sous-répertoire doit être une lettre minuscule ou un chiffre;  les autres sous-répertoires sont ignorés. Voici quelques exemples de sous-répertoires de profil:

     PROFILE_DIR/home
     PROFILE_DIR/office
     PROFILE_DIR/default

Un sous-répertoire de profil lui-même contient d'autres fichiers et sous-répertoires, chacun ayant une fonction spécifique, comme suit:

patterns
     Ce fichier contient les motifs (NdT: patterns) qui correspondent à des adresses IP, avec un motif sur chaque ligne. Ces motifs reprennent le principe des motifs de recherche par noms de fichiers (NdT: filemane-globbing) d'interpréteur de commande courant, où le caractère * correspond à n'importe quelle sous-chaîne de caractères et le caractère ? correspond à n'importe quel caractère. Ainsi, par exemple, 18. *. *. * correspond à n'importe quelle adresse IP commençant par 18., alors que  *.*.*.* correspondra à n'importe quelle adresse IP. Voir ci-dessous pour de plus amples informations sur la façon dont les motifs sont employés pour choisir un profil.

files.d/
     Ce sous-répertoire contient les fichiers qui doivent être copiés dans le système de fichiers quand le profil est choisi. Les fichiers de ce répertoire seront copiés directement dans le répertoire racine de la machine. Ainsi, par exemple, le fichier files.d/etc/printcap sera copié vers /etc/printcap.

     Les fichiers sont copiés en utilisant la commande:

          (cd files.d; /bin/cp -pr * /)

     ce qui signifie que les droits sur tous les fichiers sont préservés et que le contenu des sous-répertoires est copié lui aussi. Cela signifie aussi que les fichiers commençant par le caractère . ne seront pas copiés.

before-select
     Ce fichier est un programme à exécuter avant que le profil soit sélectionné. Il est invoqué avec deux arguments. Le premier argument est le nom de fichier du répertoire des profils, et le second est le nom du profil choisi. Par exemple.

          before-select PROFILE_DIR home

after-select
     Ce fichier est un programme à exécuter après que le profil ait été sélectionné. Comme before-select, il est invoqué avec deux arguments, le nom de fichier du répertoire des profils, et le nom du profil choisi.

before-deselect
     Ce fichier est un programme à exécuter avant que le profil soit déselectionné. Comme before-select, il est invoqué avec deux arguments, le nom de fichier du répertoire des profils, et le nom du profil déselectionné.

after-deselect
     Ce fichier est un programme à exécuter après que le profil ait été déselectionné. Comme before-select, il est invoqué avec deux arguments, le nom de fichier du répertoire des profils, et le nom du profil déselectionné.

rc.d/
     Ce sous-répertoire contient des liens symboliques vers des scripts de démarrage qui démarrent et arrêtent des services du système d'exploitation. Ces liens procurent une manière simple de contrôler ces services, bien que vous puissiez évidemment le faire en utilisant les programmes after-select et after-deselect. Voir plus loin pour plus de précisions sur le répertoire rc.d/.

La gestion des profils
======================

La gestion des profils est réalisée par deux processus. Le premier est le processus de détermination du profil, au cours duquel il est recherché un profil qui corresponde à l'adresse IP courante au sein de l'ensemble des profils disponibles. Le second est le processus de sélection du profil au cours duquel le profil courant est déselectionné et le nouveau profil sélectionné.

La détermination du profil suit une simple procédure de recherche. D'abord, l'adresse IP courante est détectée. Elle peut avoir l'une de ces trois valeurs:

 1. Une adresse IP valide consistant en quatre nombres décimaux séparés par des points. Par exemple 192.168.1.17.

 2. Le mot down, qui signifie que l'interface réseau est inactive et ne possède pas d'adresse IP valide.

 3. Le mot unknown, signifiant qu'il était impossible de détecter l'état de l'interface réseau. (Par exemple, si le pilote de cette interface n'a pu être chargé).

Ensuite, les profils sont examinés, dans l'ordre alphabétique de leurs noms. Chaque profil est testé en examinant le contenu de son fichier de motifs, le fichier patterns. (Si le fichier n'existe pas ou ne peut être lu, le profil est ignoré.) Chaque motif du fichier est comparé à l'adresse IP courante, et si l'un de ces motifs correspond, alors il est considére que ce profil correspond à l'adresse.

Ce motif de recherche peut être utilisé pour créer un profil par défaut qui est utilisé quand rien d'autre ne correspond. Pour ce faire, créez un profil dont le nom sera toujours trié après les autres noms de profils (par exemple zzz-défaut, et donnez lui le simple motif *.

Une fois que le profil a été déterminé par le processus de concordance, il doit être sélectionné. (Il est à noter, toutefois, que rien n'est fait si le nouveau profil est le même que le profil courant.) Le processus de sélection du profil se fait en deux phases. Premièrement, s'il existe un profil courant, les étapes suivantes sont accomplies pour le déselectionner.

 1. Si le programme before-deselect existe, il est exécuté.

 2. Si le répertoire rc.d/ existe, tous les services spécifiés dans celui-ci sont stoppés. Voir plus loin pour plus de détails sur cette opération.

 3. Si le programme after-deselect existe, il est exécuté.

Ensuite, si un nouveau profil existe, les étapes suivantes sont accomplies afin de le sélectionner:

 1. Si le programme before-select existe, il est exécuté.

 2. Si le répertoire files.d/ existe, tous les fichiers qu'il contient sont copiés dans le répertoire racine.

 3. Si le répertoire rc.d/ existe, tous les services spécifiés dans celui-ci sont démarrés. Voir plus loin pour plus de détails sur cette opération.

 4. Si le fichier after-select existe, il est exécuté.

Il mérite d'être mentionné que le processus de sélection pourvoit aux situations où il n'existe aucun profil. Ainsi, lorsqu'il n'y a aucun profil courant, le nouveau profil reste sélectionné de manière correcte. De même, lorsqu'il y a un profil courant mais aucun profil de remplacement, le profil courant sera tout de même déselectionné.

Gérer les services du système
=============================

La dernière complexité restante est le répertoire rc.d/, qui requiert une petite explication. La plupart des systèmes GNU/Linux emploient un mécanisme appelé scripts d'initialisation SysV, dans lequel chaque service possède un script d'interpréteur de commandes qui est utilisé pour le démarrer et l'arrêter. Le détail précis du fonctionnement de ce mécanisme n'est pas important, mais en bref, le script est appelé avec l'argument start pour démarrer le service et stop pour l'arrêter. Sur les systèmes Debian, ces scripts sont normalement stockés dans le répertoire /etc/init.d/, mais sur certains autres systèmes (par exemple Linux RedHat), ils sont stockés dans /etc/rc.d/init.d/.

Le répertoire rc.d/ contient des liens symboliques vers ces scripts, avec des noms spéciaux qui contrôlent comment ils sont démarrés et arrêtés et dans quel ordre. Chaque nom est formé d'une lettre, soit S, soit K, suivie par deux chiffres décimaux, suivis apr le nom du script. Des exemples de ces noms pour le script lpd seraient S20lpd et K20lpd.

Les noms sont interprétés comme suit. Lorsqu'un profil est sélectionné, nous démarrons tous les services dans le répertoire rc.d/. Cela signifie que nous cherchons tous les liens commençant par S et que, dans l'ordre alphabétique standard, chacun d'eux est appelé avec l'argument start. Lorsque nous déselectionnons un profil, nous cherchons tous les liens commençant par K et nous les appelons dans l'ordre avec l'argument stop.

Il est à noter que le système d'exploitation a des liens similaires stockés dans des répertoires appelés /etc/rcN.d/, où N est un chiffre. (Ces répertoires sont appelés /etc/rc.d/rcN.d/ sur les systèmes RedHat.) Normalement vous devriez utiliser les mêmes noms de liens que ceux présents dans les répertoires du système d'exploitation, puisque les mainteneurs du système ont déjà déterminé les ordres appropriés pour démarrer et arrêter les services. En outre, pour un meilleur fonctionnement vous devriez effacer les liens du système d'exploitation, puisque ces services seront désormais contrôlés par laptop-net. (Sur les systèmes Debian, les liens sont gérés par le programme update-rc.d; voir la page man de ce programme pour des instructions sur la manière d'enlever les liens.)

Utiliser les profils avec PCMCIA
================================

Le mécanisme des profils peut aussi utilisé avec des périphériques PCMCIA. Cependant, pour que cela fonctionne, il est nécessaire d'éditer les fichiers de configuration de pcmcia-cs. En particulier, le fichier /etc/pcmcia/networks.opts doit être édité, et les fonctions suivantes doivent être définies:

     start_fn ()
     {
         PROFILE_CHANGE $DEVICE
     }

     stop_fn ()
     {
         PROFILE_CHANGE $DEVICE down
     }

Si ces fonctions existent déjà, les appels à profile-change doivent y être ajoutés. Notez qu'il est important que profile-change soit appelé chaque fois que ce script est invoqué: sinon le mécanisme des profils risque d'être désynchronisé du réseau.

Un autre point est à prendre en considération lorsqu'il existe une interface réseau interne et une interface réseau PCMCIA qui sont toutes les deux actives en même temps. Au cas où une telle situation se présente, il faut s'assurer que les deux interfaces utilisent le même profil! Sinon le mécanisme des profils peut ne plus savoir que faire.

Un exemple de profils
=====================

Le mécanisme des profils est quelque peu compliqué, alors jetons un oeil à un exemple complet pour voir comment il peut être utilisé. Premièrement, voici une liste des fichiers présents dans notre répertoire de profils exemple:

     PROFILE_DIR:
     total 20
     drwxr-xr-x    2 root  4096 Jun 11 11:34 SHARED
     drwxr-xr-x    5 root  4096 Jun  8 23:33 home
     drwxr-xr-x    2 root  4096 Jun  8 23:34 offline
     drwxr-xr-x    5 root  4096 Jun 11 11:36 work
     drwxr-xr-x    3 root  4096 Jun  8 23:34 zzz-default

Il y a quatre sous-répertoires de profils, appelés home, offline, work et zzz-default. Le sous-répertoire appelé SHARED n'est pas un profil car il commence par une lettre majuscule. Nous verrons plus tard comment il est utilisé.

Le plus simple de ces profils est offline:

     PROFILE_DIR/offline:
     total 4
     -rw-r--r--    1 root    13 Jun  7 23:43 patterns

Voici le contenu du fichier offline/patterns:

     down
     unknown

Ce profil correspond au cas où le réseau ne fonctionne pas. Il ne fait rien du tout dans ce cas. Il est à noter qu'il aurait été possible d'omettre ce profil et que le résultat final aurait été le même.

Ensuite, jetons un oeil à l'un des deux premiers profils, home:

     PROFILE_DIR/home:
     total 24
     drwxr-xr-x    2 root  4096 Jun 11 11:36 LOCAL
     -rwxr-xr-x    2 root    80 Jun  8 15:25 after-select
     -rwxr-xr-x    2 root   378 Jun  8 15:09 before-select
     drwxr-xr-x    3 root  4096 Jun  8 23:30 files.d
     -rw-r--r--    1 root    12 Jun  7 22:59 patterns
     drwxr-xr-x    2 root  4096 Jun 11 11:39 rc.d

Ce profil utilise la plupart des fonctionalités du mécanisme des profils: les scripts before-select et after-select, ainsi que les répertoires files.d/ et rc.d/. Il possède de plus un répertoire LOCAL qui n'est pas directement utilisé par le mécanisme des profils, mais auquel fait référence l'un des scripts. Ce profil correspond au motif d'adresses IP suivant (fichier patterns):

     192.168.1.*

Lorsque ce profil est sélectionné, le script before-select est exécuté. Ce script utilise des informations prises dans les répertoires SHARED et LOCAL pour créer un fichier /etc/fstab. Celui-ci est enregistré dans le répertoire files.d/, en conséquence de quoi il sera ensuite copié dans le système de fichiers racine.

     #!/bin/sh
     PROFILE_DIR="$1"
     PROFILE="$2"
     FSTAB="$PROFILE_DIR/$PROFILE/files.d/etc/fstab"
     FSTAB_SHARED="$PROFILE_DIR/SHARED/fstab"
     FSTAB_LOCAL="$PROFILE_DIR/$PROFILE/LOCAL/fstab"
     if [ ! -f "$FSTAB" ] \
             || [ "$FSTAB_SHARED" -nt "$FSTAB" ] \
             || [ "$FSTAB_LOCAL" -nt "$FSTAB" ]; then
         cat "$FSTAB_SHARED" "$FSTAB_LOCAL" > "$FSTAB"
     fi

D'autres fichiers saut eux-aussi stockés dans le répertoire files.d/:

     PROFILE_DIR/home/files.d:
     total 4
     drwxr-xr-x    2 root  4096 Jun 11 11:35 etc

     PROFILE_DIR/home/files.d/etc:
     total 4
     -rw-r--r--    1 root   951 Jun 22  1999 printcap

Certains services du système sont démarrés et arrêtés depuis le répertoire rc.d:

     PROFILE_DIR/home/rc.d:
     total 0
     lrwxrwxrwx  1 root    15 Jun 11 11:39 K20lpd -> /etc/init.d/lpd
     lrwxrwxrwx  1 root    19 Jun 11 11:39 K22ntpdate -> /etc/init.d/ntpdate
     lrwxrwxrwx  1 root    15 Jun 11 11:39 K23ntp -> /etc/init.d/ntp
     lrwxrwxrwx  1 root    15 Jun 11 11:39 S20lpd -> /etc/init.d/lpd
     lrwxrwxrwx  1 root    19 Jun 11 11:39 S22ntpdate -> /etc/init.d/ntpdate
     lrwxrwxrwx  1 root    15 Jun 11 11:39 S23ntp -> /etc/init.d/ntp

Ensuite nous exécutons le script after-select, qui change le ''schème'' pcmcia-cs de sorte qu'il corresponde au profil courant:

     #!/bin/sh
     PROFILE_DIR="$1"
     PROFILE="$2"
     /sbin/cardctl scheme "$PROFILE"

Et c'en est fini avec le profil home. Le profil work est à peu près identique, à part en ce qui concerne le contenu des fichiers du répertoire files.d/ et bien entendu le fichier patterns:

     18.*.*.*
     128.52.*.*

Pour terminer, nous avons le profil zzz-default, qui est une sorte de profil passe-partout pour des endroits qui n'ont pas de profils spécifiques définis:

     PROFILE_DIR/zzz-default:
     total 8
     -rw-r--r--    1 root     8 Jun  7 23:46 patterns
     drwxr-xr-x    2 root  4096 Jun 11 11:39 rc.d

Le fichier patterns du profil zzz-default est un motif qui accepte toutes les adresses IP. Le nom du profil commence par zzz afin que le motif ne soit pas examiné avant que tous les autres profils aient été essayés.

     *.*.*.*

Ce profil n'est spécialisé en aucune façons, excepté pour mettre en route le service ntp lorsqu'il est sélectionné:

     PROFILE_DIR/zzz-default/rc.d:
     total 0
     lrwxrwxrwx  1 root    19 Jun 11 11:39 K22ntpdate -> /etc/init.d/ntpdate
     lrwxrwxrwx  1 root    15 Jun 11 11:39 K23ntp -> /etc/init.d/ntp
     lrwxrwxrwx  1 root    19 Jun 11 11:39 S22ntpdate -> /etc/init.d/ntpdate
     lrwxrwxrwx  1 root    15 Jun 11 11:39 S23ntp -> /etc/init.d/ntp

Détection de porteuse
*********************

Une des autres fonctionalités majeures de ce paquet, c'est la détection automatique de la porteuse ethernet (NdT: link-beat). Cette porteuse, lorqu'elle est active, indique que la connection ethernet physique fonctionne correctement; en d'autres mots, que le cable réseau est branché à la fois à l'ordinateur et au hub, et que les deux interfaces, l'une comme l'autre, sont en fonctionnement. Débrancher le cable ou éteindre le hub stoppent la porteuse.

Sur les interfaces réseau qui supportent la détection de porteuse, laptop-net surveille la porteuse. Lorsqu'il détecte que la porteuse est arrêtée, il désactive l'interface réseau. Si la porteuse redémarre, laptop-net réactive l'interface réseau. Dans les deux cas, quand l'interface réseau est activée ou désactivée, laptop-net réinitialise le réseau et change potentiellement de profil.

Dans la pratique, la raison pour laquelle c'est utile, c'est que cela vous permet de déplacer l'ordinateur en débranchant le cable réseau, puis en installant l'ordinateur autre part et en rebranchant le cable. Le logiciel va détecter ces événements et gérer l'interface comme nécessaire. Encore mieux, si la machine utilise la configuration dynamique (et que les deux réseaux le supportent), lorsque la machine est branchée au second réseau, elle reçoit une nouvelle adresse IP et sélectionne automatiquement un nouveau profil. Ainsi, par exemple, vous pouvez débrancher l'ordinateur dans votre bureau, rentrer à la maison, rebrancher le cable réseau, et continuer à travailler sans aucune intervention manuelle pour indiquer à l'ordinateur où il est.

Le premier inconvénient de ce support, c'est que vous devez être relativement certain que chacun des services actuellement en train d'utiliser le réseau sont stoppés avant que vous débranchiez le cable réseau. Cela inclut toute connexion réseau ouverte ou tout volume NFS ouvert. Dans le cas contraire, vous vous retrouverz avec des connexions fantômes (NdT: dangling connections) sur les bras; et une fois que le câble est débranché il est difficile de les fermer proprement. (Une manière simple de détecter des connexions TCP ouvertes, c'est de lancer la commande netstat -t et de chercher les connexions dont l'état (State) est ESTABLISHED.)

L'autre problème potentiel de la détection de porteuse, c'est qu'elle n'est pas supportée par tous les pilotes de cartes réseaux; elle dépend d'une fonctionalité appelée MII (Media Independent Interface, NdT: qu'on pourrait traduire par: interface indépendante du média). Quoi qu'il en soit, de manière générale, cette fonction est présente dans la plupart des cartes récentes, et des ordinateurs portables. (Les pilotes suivants du noyau Linux 2.4.5 supportent la MII, et devraient être capables de détecter la porteuse:  3c59x, 8139too, eepro100, epic100, fealnx, hamachi, ioc3-eth, natsemi, pcnet32, pegasus, sis900, starfire, sundance, tlan, tulip, via-rhine, winbond-840, et yellowfin.)

Pour les pilotes d'interfaces réseau qui ne supportent la MII, positionnez la variable MII_SUPPORTED à "no" et la détection de porteuse sera désactivée