Title: Wifi à la demande avec le vénérable Linksys WRT54G
Date: 2017-03-09 15:57
Category: sysadmin
Tags: OpenWRT, Wifi, réseau, pl-fr
Status: published

Dans le cadre de mon travail, il m'a été demandé de mettre en place pour un
centre d'animation un petit réseau wifi afin que les adhérents puissent se
connecter à Internet : deux ordinateurs fixe sous Debian et un point d'accès
Wifi. J'ai donc recyclé une vieille unité centrale pour en faire un petit
routeur proxy filtrant avec [ipfire][l_ipfire] et un vénérable [Linksys
WRT54G][l_wrt54g] qui traînait.

[l_ipfire]:http://www.ipfire.org/
[l_wrt54g]:https://wiki.openwrt.org/toh/linksys/wrt54g

Les postes sous Debian sont en accès libre toute la journée mais  les animateurs
voulaient que le wifi soit activé certains jours  de 14h à 18h et éventuellement
à la demande. Le WRT54G sert à la fois de switch réseau et de point d'accès
Wifi. Bien entendu il y a OpenWRT d'installé dessus avec le SSH d'activé (son
adresse est 10.0.0.250).

###Mise en place d'un script pour l'activation-désactivation du Wifi

La première étape est la création d'un script shell pour activer désactiver
l'interface wifi du Linksys. Connectons nous à notre Linksys

~~~
ssh root@10.0.0.250
~~~

Créons le fichier contenant le script, rendons-le exécutable et ouvrons-le avec vi.

~~~
touch /sbin/wtoggle.sh
chmod + x /sbin/wtoggle.sh
vi /sbin/wtoggle.sh
~~~

Il suffit maintenant de coller les commandes ci-dessous.

```bash
#!/bin/sh

device="wl0"
case $1 in
    "disable")
        wifi down $device
        echo 0 > /proc/diag/led/ses_white
        echo 1 > /proc/diag/led/ses_orange
        echo 0 > /proc/diag/led/wlan
        uci set wireless.$device.disabled=1
        uci commit wireless
        logger "Wifi disabled"
    ;;
    "enable")
        uci set wireless.$device.disabled=0
        uci commit wireless
        wifi up $device
        echo 1 > /proc/diag/led/ses_white
        echo 0 > /proc/diag/led/ses_orange
        echo 2 > /proc/diag/led/wlan
        logger "Wifi enabled"
    ;;
esac
```

Le script fait trois choses :

1.  Activer / Désactiver le point d'accès Wifi
2.  Allumer la diode SES en blanc / orange en fonction de l'état de la connexion
3.  Activer / désactiver la diode WLAN

L'utilisation est simple : `wtoggle enable` pour activer le wifi et `wtoggle disable` pour le désactiver.

### Créer la tache cron pour activer le wifi à certaines heures

Il suffit d'ajouter les deux lignes suivantes au cron pour programmer la mise en
route du Wifi avec la commande ``crontab -e``

~~~
00 14 * * 1-6 wtoggle enable
00 18 * * 1-6 wtoggle disable
~~~

Le réseau Wifi est donc allumé du lundi au samedi de 14h à 18h. Mais sur Openwrt
le service cron n'est pas activé[^n_cron-openwrt]. Il faut donc le faire avec
les commandes[^n_openwrt-buttons]

~~~
/etc/init.d/cron start
/etc/init.d/cron enable
~~~

[^n_cron-openwrt]: voir sur la [documentation
 d'openwrt](https://wiki.openwrt.org/doc/howto/cron#activating_cron)

### Activation / désactivation à la demande du Wifi

Il est parfois nécessaire d'allumer ou d'éteindre le wifi manuellement, pour ça
nous allons détourner le bouton SES du routeur (vous savez celui avec le logo
cisco dessus). si le Wifi est désactivé, une pression sur ce bouton l'activera
et une autre pression le désactivera à nouveau.

Créons un fichiers ``bouttons`` dans le répertoire ``/etc/hotswap.d/button/``
qui va contenir les commandes à effectuer lors de la pression d'un boutons sur
le Linksys

~~~
mkdir -p /etc/hotswap.d/button/
vi /etc/hotswap.d/button/buttons
~~~

Voici le contenu de ce fichier

```bash
#!/bin/sh
device="wl0"
if [ "$BUTTON" = "ses" ] && [ "$ACTION" = "pressed" ] ; then
case $(uci get wireless.$device.disabled) in
0)
/sbin/wtoggle.sh disable
;;
1)
/sbin/wtoggle.sh enable
;;
esac		
fi 
```

Une fois enregistré, le tout devrait fonctionner : le bouton SES pour allumer
/éteindre le wifi et la tâche cron pour le faire automatiquement en fonction des
heures d'ouvertures. Le voyant du logo Cisco servant aux animateurs à visualiser
rapidement si le réseau Wifi est actif ou non.

[^n_openwrt-buttons]:voir sur la [documentation d'openwrt](https://wiki.openwrt.org/doc/howto/hardware.button)
