Linksys Wrt54gl sous OpenWrt
De MicElectroLinGenMet.
Routeur Linksys Wrt54gl
Voir autres articles sur le Wrt54gl:
Présentation
Le WRT54GL est un routeur produit par Linksys. Il permet de partager une connexion Internet (modem non intégré) vers des ordinateurs via 4 ports ethernet et une liaison à la norme Wifi : IEEE 802.11B/G.
Voir article sur wikipedia ainsi que la page du WRT54GL sur le Wiki OpenWrt pour plus de détails.
Acheté le 17/8/2007, il était installé avec le firmware linksys 4.30.7 (Page des firmwares Linksys pour le Wrt54gl.)
Celui n'est pas resté plus d'une demi-heure puisque j'ai flashé le routeur avec un firmware OpenWrt.
ATTENTION: Installer un firmware non Linksys (ce qui n'est pas sans risque) sur ce routeur supprime toute garantie !!!
Installation OpenWrt version WhiteRussian (0.9)
J'ai suivi la documentation du Wiki OpenWrt sur la page InstallingWrt54gl pour l'installation de la dernière version d'OpenWrt.
Firmware installé: WhiteRussian (0.9) (version stable à ce moment là) openwrt-wrt54g-squashfs.bin disponible sur la page [1].
L'installation est on ne peut plus simple puisqu'il suffit de passer par l'interface web Linksys du WRT54GL et de choisir le fichier bin à flasher.
Decouverte du firmware OpenWrt
Un fois le firmware flashé, le Wrt54gl est accesible par une nouvelle interface Web mais aussi par un connection telnet qui donne accés un shell Linux.
Première connection
dan@vesta:~$ telnet 192.168.1.1
BusyBox v1.00 (2007.01.30-11:42+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
WHITE RUSSIAN (0.9) -------------------------------
* 2 oz Vodka Mix the Vodka and Kahlua together
* 1 oz Kahlua over ice, then float the cream or
* 1/2oz cream milk on the top.
---------------------------------------------------
root@OpenWrt:~#
Nom de machine
root@wrt54gl:~# uname -a Linux wrt54gl 2.4.30 #1 Sat Feb 3 13:16:08 CET 2007 mips unknown
Type de processeur
root@wrt54gl:~# cat /proc/cpuinfo system type : Broadcom BCM947XX processor : 0 cpu model : BCM3302 V0.8 BogoMIPS : 199.47 wait instruction : no microsecond timers : yes tlb_entries : 32 extra interrupt vector : no hardware watchpoint : no VCED exceptions : not available VCEI exceptions : not available
Mémoire
root@wrt54gl:~# free
total used free shared buffers
Mem: 14308 10368 3940 0 876
Swap: 0 0 0
Total: 14308 10368 3940
Système fichiers
root@wrt54gl:~# mount /dev/root on /rom type squashfs (ro) none on /dev type devfs (rw) none on /proc type proc (rw) none on /tmp type tmpfs (rw,nosuid,nodev) /tmp/root on /tmp/root type mini_fo (rw) none on /dev/pts type devpts (rw) /dev/mtdblock/4 on /jffs type jffs2 (rw) /jffs on / type mini_fo (rw)
root@wrt54gl:~# df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.0M 1.0M 0 100% /rom none 7.0M 20.0k 7.0M 0% /tmp /tmp/root 1.0M 1.0M 0 100% /tmp/root /dev/mtdblock/4 2.2M 324.0k 1.9M 14% /jffs /jffs 1.0M 1.0M 0 100% /
Configuration réseau
Interfaces réseaux:
Manufacturer Model Version LAN WAN WIFI Comments Linksys WRT54GL v1.1 vlan0 vlan1 eth1 LAN is ports 0-3, WAN is port 4 * eth1 : Une interface wifi 802.11g (54Mbps) WLAN * eth0 : Regroupe toutes les interfaces réseau 10/100 Mbps * br0 : le bridge, par défaut, il regroupe vlan0 et eth1, cela permet de regrouper plusieurs interface réseau en une seule. * vlan0 : la 4 prises réseaux du LAN * vlan1 : la prise internet (WAN)
root@wrt54gl:~# ifconfig -a
br0 Link encap:Ethernet HWaddr 00:1C:10:14:09:85
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1084 errors:0 dropped:0 overruns:0 frame:0
TX packets:886 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:81464 (79.5 KiB) TX bytes:169446 (165.4 KiB)
eth0 Link encap:Ethernet HWaddr 00:1C:10:14:09:85
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1082 errors:0 dropped:0 overruns:0 frame:0
TX packets:1545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:105134 (102.6 KiB) TX bytes:396729 (387.4 KiB)
Interrupt:4
eth1 Link encap:Ethernet HWaddr 00:1C:10:14:09:87
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:88
TX packets:17 errors:5 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:4228 (4.1 KiB)
Interrupt:2 Base address:0x5000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vlan0 Link encap:Ethernet HWaddr 00:1C:10:14:09:85
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:1084 errors:0 dropped:0 overruns:0 frame:0
TX packets:886 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:85800 (83.7 KiB) TX bytes:172990 (168.9 KiB)
vlan1 Link encap:Ethernet HWaddr 00:1C:10:14:09:86
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:655 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:212220 (207.2 KiB)
Programmes (packages) installés
root@wrt54gl:~# ipkg list base-files - 9 - base-files-brcm - 2 - bridge - 1.0.6-1 - busybox - 1.00-5 - dnsmasq - 2.35-1 - dropbear - 0.48.1-1 - haserl - 0.8.0-1 - ipkg - 0.99.149-2 - iptables - 1.3.3-2 - iwlib - 28.pre7-1 - kernel - 2.4.30-brcm-5 - kmod-brcm-wl - 2.4.30-brcm-5 - kmod-diag - 2.4.30-brcm-5 - kmod-ipt-nat-default - 2.4.30-brcm-5 - kmod-ppp - 2.4.30-brcm-5 - kmod-pppoe - 2.4.30-brcm-5 - kmod-switch - 2.4.30-brcm-1 - kmod-wlcompat - 2.4.30-brcm-4 - mtd - 5 - nvram - 1 - ppp - 2.4.3-7 - ppp-mod-pppoe - 2.4.3-7 - uclibc - 0.9.27-9 - webif - 0.2-1 - wificonf - 6 - wireless-tools - 28.pre7-1 - Successfully terminated.
La nvram
La NVRAM est une mémoire non volatif contenant les paramètres de base de l'appareil.
Contenu de la NVRAM à l'installation
Voir la description des variables contenus dans la nvram sur la page (OpenWrtNVRAM)
Messages au boot
root@wrt54gl:~# dmesg CPU revision is: 00029008 Primary instruction cache 16kB, physically tagged, 2-way, linesize 16 bytes. Primary data cache 8kB, 2-way, linesize 16 bytes. Linux version 2.4.30 (nbd@ds10) (gcc version 3.4.4 (OpenWrt-1.0)) #1 Sat Feb 3 13:16:08 CET 2007 Setting the PFC value as 0x15 Determined physical RAM map: memory: 01000000 @ 00000000 (usable) On node 0 totalpages: 4096 zone(0): 4096 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200 CPU: BCM5352 rev 0 at 200 MHz Using 100.000 MHz high precision timer. Calibrating delay loop... 199.47 BogoMIPS Memory: 14228k/16384k available (1455k kernel code, 2156k reserved, 104k data, 80k init, 0k highmem) Dentry cache hash table entries: 2048 (order: 2, 16384 bytes) Inode cache hash table entries: 1024 (order: 1, 8192 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 4096 (order: 2, 16384 bytes) Checking for 'wait' instruction... unavailable. POSIX conformance testing by UNIFIX PCI: no core PCI: Fixing up bus 0 Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd Registering mini_fo version $Id$ devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au) devfs: boot_options: 0x1 JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB. Squashfs 2.1-r2 (released 2004/12/15) (C) 2002-2004 Phillip Lougher pty: 256 Unix98 ptys configured Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled ttyS00 at 0xb8000300 (irq = 3) is a 16550A ttyS01 at 0xb8000400 (irq = 0) is a 16550A b44.c:v0.93 (Mar, 2004) PCI: Setting latency timer of device 00:01.0 to 64 eth0: Broadcom 47xx 10/100BaseT Ethernet 00:1c:10:14:09:85 Physically mapped flash: Found an alias at 0x400000 for the chip at 0x0 Physically mapped flash: Found an alias at 0x800000 for the chip at 0x0 Physically mapped flash: Found an alias at 0xc00000 for the chip at 0x0 Physically mapped flash: Found an alias at 0x1000000 for the chip at 0x0 Physically mapped flash: Found an alias at 0x1400000 for the chip at 0x0 Physically mapped flash: Found an alias at 0x1800000 for the chip at 0x0 Physically mapped flash: Found an alias at 0x1c00000 for the chip at 0x0 Amd/Fujitsu Extended Query Table v3.3 at 0x0040 number of CFI chips: 1 cfi_cmdset_0002: Disabling fast programming due to code brokenness. Flash device: 0x400000 at 0x1c000000 bootloader size: 262144 Physically mapped flash: Filesystem type: squashfs, size=0xfb158 Updating TRX offsets and length: old trx = [0x0000001c, 0x000008d8, 0x0007e400], len=0x0017a000 crc32=0x1f181132 new trx = [0x0000001c, 0x000008d8, 0x0007e400], len=0x00180000 crc32=0x9cbb6f33 Done Creating 5 MTD partitions on "Physically mapped flash": 0x00000000-0x00040000 : "cfe" 0x00040000-0x003f0000 : "linux" 0x000be400-0x001c0000 : "rootfs" mtd: partition "rootfs" doesn't start on an erase block boundary -- force read-only 0x003f0000-0x00400000 : "nvram" 0x001c0000-0x003f0000 : "OpenWrt" Initializing Cryptographic API NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP, IGMP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 1024 bind 2048) ip_conntrack version 2.1 (5953 buckets, 5953 max) - 332 bytes per conntrack ip_tables: (C) 2000-2002 Netfilter core team NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. NET4: Ethernet Bridge 008 for NET4.0 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com> All bugs added by David S. Miller <davem@redhat.com> VFS: Mounted root (squashfs filesystem) readonly. Mounted devfs on /dev Freeing unused kernel memory: 80k freed Algorithmics/MIPS FPU Emulator v1.5 diag: Detected 'Linksys WRT54G/GS/GL' Probing device eth0: found! b44: eth0: Link is up at 100 Mbps, full duplex. b44: eth0: Flow control is off for TX and off for RX. mini_fo: using base directory: / mini_fo: using storage directory: /tmp/root jffs2.bbc: SIZE compression mode activated. PCI: Setting latency timer of device 00:05.0 to 64 eth1: Broadcom BCM4320 802.11 Wireless Controller 3.90.37.0 BFL_ENETADM not set in boardflags. Use force=1 to ignore. device eth0 entered promiscuous mode b44: eth0: Link is up at 100 Mbps, full duplex. b44: eth0: Flow control is off for TX and off for RX. vlan0: add 01:00:5e:00:00:01 mcast address to master interface vlan0: dev_set_promiscuity(master, 1) vlan0: dev_set_allmulti(master, 1) device eth1 entered promiscuous mode br0: port 2(eth1) entering learning state br0: port 1(vlan0) entering learning state br0: port 2(eth1) entering forwarding state br0: topology change detected, propagating br0: port 1(vlan0) entering forwarding state br0: topology change detected, propagating vlan1: Setting MAC address to 00 1c 10 14 09 86. vlan1: add 01:00:5e:00:00:01 mcast address to master interface mini_fo: using base directory: / mini_fo: using storage directory: /jffs
Uptime
root@wrt54gl:~# uptime 14:59:20 up 30 days, 5:50, load average: 0.27, 2.43, 3.47
Configuration du système
(Voir aussi les pages "howto" et "WhiteRussian Configuration" sur le site OpenWrt.)
Activation du boot_wait
La première chose à faire à la 1ière connection est de mettre la variable nvram "boot_wait" à on.
Par défaut, le boot_wait est "OFF" sur Les routeurs WRT54GL, en fait, la plupart des routeurs ont "OFF" de boot_wait par défaut.
La mise à "ON" de la variable boot_wait augmente simplement le temps au boot pour attendre une connection d'un client tftp pour mise à jour du firmware.
Cela facilite le transfert de firmware par tftp si il n'y a plus d'autre moyen de flasher le routeur !
Activation de ssh
(Voir page DropbearPublicKeyAuthenticationHowto)
Pour activer le daemon ssh en place et lieu de telnet, il suffit de changer le mot de passe de root avec la commande passwd.
De plus, j'ai copié mes clefs ssh public de ma Debian dans le fichier /etc/dropbear/authorized_keys et de lui mettre les droits suivants:
chmod 0600 authorized_keys
Mise à l'heure
(Voir page OpenWrtDocs)
Au boot le Wrt54gl sur retrouve le 1 janvier 2000.
Pour le remttre à la l'heure, j'utilise la commande rdate fourni par BusyBox au lieu d'utilise un client ntp pour économiser la mémoire qui nous reste.
j'ai rajouter cette ligne en crontab pour une mise à l'heure journalière à 00:05:
5 0 * * * /usr/sbin/rdate -s ntp.unice.fr ou rdate.dedibox.com
ainsi qu'un script pour la mise à l'heure au boot:
cat /etc/init.d/S55rdate #!/bin/sh /usr/sbin/rdate -s ntp.unice.fr
# chmod a+x /etc/init.d/S55rdate
Il est possible d'activer un serveur de temps en autorisant le service réseau time sur un Linux debian par exemple dans le fichier /etc/inetd.conf:
time stream tcp nowait root internal
Il faut aussi déclarer la "timezone" pour que l'heure corresponde au lieu du Wrt54gl.
Soit créer le fichier /etc/TZ file avec la zone de temps de Paris par exemple.
# echo "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" > /etc/TZ
ou saisir cette valeur dans la nvram:
# nvram set time_zone="CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" # nvram commit
syslog
La syslog est un daemon qui renvoie les messages systèmes dans des journaux de type fichiers ou autres.
Sur le Wrt54gl le journal est stocké en ram et lisible avec la commande logread:
root@wrt54gl:~# logread Aug 31 15:29:50 (none) kern.info dropbear[7030]: Child connection from 192.168.0.12:1396 Aug 31 15:29:56 (none) kern.notice dropbear[7030]: password auth succeeded for 'root' from 192.168.0.12:1396 Aug 31 15:30:01 (none) kern.notice crond[415]: USER root pid 7034 cmd /tmp/teleinfomysql >> /tmp/teleinfomysql.log 2>&1
Le 'buffer' de la log étant limité, il est possible de renvoyer les messages sur un autre serveur (par exemple un Linux Debian avec un daemon syslog autorisé à recevoir de l'extérieur).
Il suffit de configurer l'adresse de ce serveur dans la nvram:
# nvram set log_ipaddr=192.168.0.4 # nvram commit
Configuration du Wrt54gl en client wifi bridge
Le Wrg54gl ne sera plus un point d'accés wifi mais un client wifi qui se connectera sur une autre Ap comme le Netgear DG834G.
Il servira de pont entre cette AP et les périphériques connectés sur ses ports LAN.
Configuration inspirée de la page openwrtbridge.
Interfaces réseaux:
PHYSICALLY:
tagged +-------------------+
eth0 ============ | 5 SWITCH |
| 4 3 2 1 0 |
+-------------------+
| | | | |
...LAN 1-4... WAN
LOGICALLY:
vlan0 ------------- LAN 1-4 + eth1 (wifi)
vlan1 ------------- WAN
Dans la nouvelle configuration réseau, les 4 ports LAN (wlan0) et le port WIFI (eth1) sont bridgés ensemble sous le même réseau que le Netgear DG834G.
L'interface bridge (br0) obtiendra une adresse IP par DHCP dans la plage 192.168.0.0/24.
L'interface WAN (vlan1) n'est pas utilisée mais sera configuré comme interface d'administration en 192.168.1.1.
Désactivation de certains services
Arrét du firewall:
# chmod a-x /etc/init.d/S45firewall
Arrét du serveur DHCP:
# chmod a-x /etc/init.d/S60dnsmasq
Modification configuration réseau dans la NVRAM
Extrait des paramètres importants:
lan_dhcp=1 lan_hwaddr=00:1C:10:XX:XX:XX lan_hwnames= lan_ifname=br0 lan_ifnames=vlan0 eth1 # Wifi (eth1) et ports lan (vlan0) sont sur même réseau 192.168.0.0 lan_ipaddr=0.0.0.0 lan_lease=86400 lan_netmask=0.0.0.0 lan_proto=dhcp # Ne fonctionne pas, voir ci-dessous
wl0_channel=2 wl0_ifname=eth1 wl0_infra=1 wl0_key1=XXXXXXXXXXXXXXXXXXXXXXXXXX wl0_key=1 wl0_mode=wet wl0_radio=1 wl0_ssid=SSID wl0_wep=enabled wl0_wep_bit=64
wan_device=vlan1 wan_hostname=wrt54gl wan_iface=vlan1 wan_ifname=vlan1 wan_ifnames=vlan1 wan_ipaddr=192.168.1.1 # Port wan (vlan1) en static 192.168.1.1 wan_netmask=255.255.255.0 wan_proto=static
Ne pas oublier de faire un nvram commit pour enregistrer les variables.
Contenu complet de la NVRAM mode client wifi bridge
Modification script réseau
Le parmètre nvram "lan_proto=dhcp" n'étant pas pris en compte, il est necessaire de rajouter une ligne dans le fichier /etc/init.d/S40network.
root@wrt54gl:~# cat /etc/init.d/S40network
#!/bin/sh
case "$1" in
start|restart)
rm -f /tmp/resolv.conf
ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
ifup_interfaces=$(nvram get ifup_interfaces)
ifup_interfaces=${ifup_interfaces:-"lan wan wifi"}
for iface in $ifup_interfaces; do
ifup $iface
if [ "$iface" = "wifi" ]; then
$iface up
udhcpc -i br0 -b
fi
done
;;
esac
Configuration du Wrt54gl sans wifi
Utilisation du Wrt54gl uniquement sur interface ethernet, wifi désactivé.
Scripts pour activé/désactivé le wifi
cat /jffs/bin/wifi_disabled.sh #!/bin/sh nvram set ifup_interfaces="lan wan" # Variable utilisé dans /etc/init.d/S40network nvram set lan_ifname=vlan0 nvram set lan_ifnames=vlan0 nvram set wl0_radio=0 nvram commit
cat /jffs/bin/wifi_enabled.sh #!/bin/sh nvram set ifup_interfaces="lan wan wifi" # Variable utilisé dans /etc/init.d/S40network nvram set lan_ifname=br0 nvram set lan_ifnames="vlan0 eth1" nvram set wl0_radio=1 nvram commit
Modification script réseau
/etc/init.d/S40network modifié pour udhcpc fonctionnant avec et sans wifi.
#!/bin/sh
case "$1" in
start|restart)
rm -f /tmp/resolv.conf
ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
ifup_interfaces=$(nvram get ifup_interfaces)
ifup_interfaces=${ifup_interfaces:-"lan wan wifi"}
for iface in $ifup_interfaces; do
ifup $iface
if [ "$iface" = "wifi" ]; then
$iface up
fi
done
udhcpc -i $(nvram get lan_ifname) -b
;;
esac
Configuration aprés reboot
root@wrt54gl:~# ifconfig ...
Commandes diverse
Nvram
root@wrt54gl:~# nvram usage: nvram [get name] [set name=value] [unset name] [show]
Affiche la valeur d'une variable nvram:
# nvram get boot_wait on
Modifie la valeur d'une variable nvram (Désactivation du wifi):
# nvram set wl0_radio=0
Supprime la variable:
# nvram unset variable
Affiche toute les variables de la nvram:
# nvram show wl_radius_port=1812 wl_mac_deny= filter_dport_grp3= filter_dport_grp4= opo=0x0008 filter_dport_grp5= filter=on wan_unit=0 filter_dport_grp6= os_ram_addr=80001000 ...
Enregistre dans la nvram les variable modifiées par la commande 'get':
# nvram commit
NVRAM committing
When you set/get nvram settings, you are get/setting them in RAM. "nvram commit" writes them persistenly to the flash. But you don't have to commit in order to test,in fact it's safer not to because the flash memory has a limited write cycle life. (Don't be scared though, it's something like 1000-10.000 times; still better to only save it when really needed! NB In Faq it is however stated that this figure, according to manufacturers, can be in the range of 100,000 - 1,000,000) You can save your settings to RAM, check them out by ifdown/ifup'ing all your interfaces, and then "nvram commit" them if they are to your liking. If not, you can reboot and you're back to the last working configuration you had
Wifi
- Scan AP wifi
root@wrt54gl:~# iwlist eth1 scanning
eth1 Scan completed :
Cell 01 - Address: 00:09:5B:XX:XX:XX
ESSID:"XXXXXX"
Mode:Master
Channel:2
Quality:0/0 Signal level:-80 dBm Noise level:-98 dBm
Encryption key:on
Bit Rate:1 Mb/s
Bit Rate:2 Mb/s
Bit Rate:5.5 Mb/s
Bit Rate:11 Mb/s
Bit Rate:22 Mb/s
Bit Rate:6 Mb/s
Bit Rate:9 Mb/s
Bit Rate:12 Mb/s
Bit Rate:18 Mb/s
Bit Rate:24 Mb/s
Bit Rate:36 Mb/s
Bit Rate:48 Mb/s
Bit Rate:54 Mb/s
Cell 02 - Address: 00:18:39:26:5B:68
ESSID:"Free_degroupe"
Mode:Master
Channel:8
Quality:0/0 Signal level:-91 dBm Noise level:-96 dBm
Encryption key:on
Bit Rate:1 Mb/s
Bit Rate:2 Mb/s
Bit Rate:5.5 Mb/s
Bit Rate:11 Mb/s
Bit Rate:18 Mb/s
Bit Rate:24 Mb/s
Bit Rate:36 Mb/s
Bit Rate:54 Mb/s
Bit Rate:6 Mb/s
Bit Rate:9 Mb/s
Bit Rate:12 Mb/s
Bit Rate:48 Mb/s
Cell 03 - Address: 00:16:41:8C:3D:4C
ESSID:"Livebox-cc08"
Mode:Master
Channel:10
Quality:0/0 Signal level:-85 dBm Noise level:-95 dBm
Encryption key:on
Bit Rate:1 Mb/s
Bit Rate:2 Mb/s
Bit Rate:5.5 Mb/s
Bit Rate:11 Mb/s
Bit Rate:6 Mb/s
Bit Rate:9 Mb/s
Bit Rate:12 Mb/s
Bit Rate:18 Mb/s
Bit Rate:24 Mb/s
Bit Rate:36 Mb/s
Bit Rate:48 Mb/s
Bit Rate:54 Mb/s
- Interface wifi
root@wrt54gl:~# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 IEEE 802.11-DS ESSID:"XXXXXX"
Mode:Repeater Frequency:2.417 GHz Access Point: 00:09:5B:XX:XX:XX
Tx-Power:18 dBm
RTS thr=2347 B Fragment thr=2346 B
Encryption key:XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-X
Link Signal level:-79 dBm Noise level:-95 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1 Invalid misc:0 Missed beacon:0
br0 no wireless extensions.
vlan0 no wireless extensions.
vlan1 no wireless extensions.
- Modification puissance emetteur wifi:
root@wrt54gl:~# iwlist eth1 txpower eth1 unknown transmit-power information. Current Tx-Power:19 dBm (79 mW)
root@wrt54gl:~# iwconfig eth1 txpower 50mW
root@wrt54gl:~# iwlist eth1 txpower eth1 unknown transmit-power information. Current Tx-Power:18 dBm (63 mW)
Contrôle des LEDs
Il est possible de commander les leds du panneau en écrivant dans les fichiers virtuels dans "/proc":
root@wrt54gl:~# l /proc/diag/led/ -r-------- 1 root root 0 Aug 31 17:10 dmz -r-------- 1 root root 0 Aug 31 17:10 power -r-------- 1 root root 0 Aug 31 17:10 ses_orange -r-------- 1 root root 0 Aug 31 17:10 ses_white -r-------- 1 root root 0 Aug 31 17:10 wlan
Il suffit d'écrire un "0" pour éteindre une led, un 1 pour l'allumer ou "f" pour la faire "flasher".
root@wrt54gl:~# echo f > /proc/diag/led/ses_orange
Autre exemple permettant de vérifier que le wrt54gl est toujours en vie:
while sleep 1; do echo 1 > /proc/diag/led/ses_orange ; sleep 1; echo 0 > /proc/diag/led/ses_orange ; done &
Toutes les secondes la led ses_orange clignote.
Acceder aux ports série dur WRT
(source: http://wiki.openwrt.org/OpenWrtDocs/Hardware/Linksys/WRT54GL, http://www.rwhitby.net/projects/wrt54gs)
Le WRT54GL dispose d'un connecteur 10 broches sur le PCB appelé JP1 (JP2 sur certaines cartes V1.1). Ce connecteur fournit deux ports série TTL à 3.3V. Seuls sont disponibles les ports Rx et Tx sans contrõle de flux.
Pour connecter ces port à un PC, il faut déjà souder un connecteur (type HE10-2x5) sur le CI du WRT54GL car seules les pastilles sont disponibles (ATTENTION: cette manipulation supprime toute garantie du routeur et à réaliser à vos risques et périls).
et ensuite réaliser une interface de type Max3232 pour adapter les signaux TTL 3.3V aux signaux RS232 (-12V/+12V) d'un PC.
Pour connecter un des ports série à un ucontroleur en 5V, il faudra adapter aussi les niveaux 3.3V en 5V.
à tester ...
Brochage
| Pin 2 | +3.3V | Pin 4 | TX_0 | Pin 6 | RX_0 | Pin 8 | Not connected | Pin 10 | GND |
| Pin 1 | +3.3V | Pin 3 | TX_1 | Pin 5 | RX_1 | Pin 7 | Not connected | Pin 9 | GND |
Détail des ports série sur le WRT54GL
root@wrt54gl:~# dmesg|grep tty Kernel command line: root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200 ttyS00 at 0xb8000300 (irq = 3) is a 16550A ttyS01 at 0xb8000400 (irq = 0) is a 16550A
Le premier (/dev/tts/0) est utilisé par le système comme port console (115200,8N1) à garder comme secours au cas où le routeur devient inaccessible par le réseau.
Le deuxième (/dev/tts/1) est libre d'utilisation. Je l'ai testé avec un simple programme en C car la version actuel d'OpenWrt installée ne possède pas la commande stty. Ce port n'est pas par defaut configuré. Il n'y a pas de débit (baud) d'initialisé. Un simple "echo" dans celui-ci ne fonctionne pas.
root@wrt54gl:~# cat /proc/tty/driver/serial serinfo:1.0 driver:5.05c revision:2001-07-08 0: uart:16550A port:B8000300 irq:3 baud:113636 tx:2852 rx:44 RTS|CTS|DTR|DSR|CD 1: uart:16550A port:B8000400 irq:0 tx:0 rx:0 CTS|DSR|CD
Aprés exécution du programme test:
root@wrt54gl:/# cat /proc/tty/driver/serial serinfo:1.0 driver:5.05c revision:2001-07-08 0: uart:16550A port:B8000300 irq:3 baud:113636 tx:2881 rx:72 RTS|CTS|DTR|DSR|CD 1: uart:16550A port:B8000400 irq:0 baud:19230 tx:18 rx:0 RTS|CTS|DTR|DSR|CD
Test du port
Programme de test du port série ttyS1
Ceci est un simple programme pour tester vite fait le port (Celui-ci envoi (débit 19200,8N1) une chaine au PC et affiche chaque carractère reçu).
A compiler avec le SDK OpenWrt et transférer sur le Wrt (voir ci-dessous) .
// Simple test de l'interface série /dev/tts/1 du Wrt54gl. // Celui-ci renvoi le caratère reçu. // Utiliser "picocom -b 19200 -d 8 /dev/ttyS1" pour envoyer du PC des caratères sur le port série. #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <termios.h> #include <sys/fcntl.h> int main(void) { int fd; unsigned char c; struct termios termios_p; /* Ouverture de la liaison serie */ if ( (fd=open("/dev/tts/1",O_RDWR)) == -1 ) { perror("open"); exit(-1); } /* Lecture des parametres courants */ tcgetattr(fd,&termios_p); /* On ignore les BREAK et les caracteres avec erreurs de parite */ termios_p.c_iflag = IGNBRK | IGNPAR; /* Pas de mode de sortie particulier */ termios_p.c_oflag = 0; /* Liaison a 1200 bps avec 8 bits de donnees et pas de parite */ termios_p.c_cflag = B19200 | CS8 | CLOCAL | CREAD ; /* Mode non-canonique sans echo */ termios_p.c_lflag = 0; /* Caracteres immediatement disponibles */ termios_p.c_cc[VMIN] = 1; termios_p.c_cc[VTIME] = 0; /* Efface les données reçues mais non lues. */ tcflush(fd, TCIFLUSH); /* Sauvegarde des nouveaux parametres */ tcsetattr(fd,TCSANOW,&termios_p); /* Ecriture sur port série */ write(fd,"Wrt54gl écoute ...", 18); /* Boucle de lecture port série */ printf("Attente trame ...\n") ; while ( 1 ) { read(fd,&c,1); printf("%c", c) ; fflush ( stdout ); } /* Fermeture */ close(fd); /* Bye... */ exit(0); }
Port JTAG du WRT
Compiler des programmes pour le Wrt54gl
Information détaillée sur cette page Writing and Compiling A Simple Program For OpenWrt.
Installation du SDK
Il faut en 1ier télécharger le SDK (version pour linux) OpenWrt-SDK-Linux-i686-1.tar.bz2 sur cette page pour la version White Russian 0.9]
Le décompresser dans le répertoire de son choix.
Description de l'exemple
J'ai suivi l'exemple "helloworld" sur la page ci-dessus pour réaliser un programme de test de l'interface série du Wrt54gl.
Organisation des sources:
dan@vesta:OpenWrt-SDK-Linux-i686-1$ find package/test/ package/test/ package/test/src package/test/src/test.c package/test/src/Makefile package/test/Makefile
Le fichier test_20080217-1.tgz contient les sources, le binaire et le package généré pour le Wrt54gl sous OpenWrt WhiteRussian (0.9).
Décompresser fichier test_20080217-1.tgz dans le répertoire "package/" du SDK (OpenWrt-SDK-Linux).
Compilation
dan@vesta:OpenWrt-SDK-Linux-i686-1$ make V=99 (compilation + génération package) ...
dan@vesta:OpenWrt-SDK-Linux-i686-1$ find bin/packages/ bin/packages/test_20080217-1_mipsel.ipk Copie du package créé sur le wrt54gl: $ scp bin/packages/test_20080217-1_mipsel.ipk root@wrt54gl:/tmp
Possibilité de copier le binaire seul pour un programme simple:
$ scp build_mipsel/test/test root@wrt54gl:/tmp
Installation du package
root@wrt54gl:~# ipkg install test_20080217-1_mipsel.ipk
Pour recompiler aprés modif., il faut supprimer le répertoire créé !! ou modifier directement les sources dans ce répertoire.
$ rm -rf ./build_mipsel/test ou $ make clean (supprime tout les programmes dans ./build_mipsel.)
Execution du programme
root@wrt54gl:~# ./test
Utiliser le programme picocom pour envoyer du PC vers le Wrt54gl des caratères sur le port série
$ picocom -b 19200 -d 8 /dev/ttyS1
Autres exemples de programmes
Page Interface téléinfo. piloté par un Wrt54gl.
En cas de problème
Lien sur le site OpenWrt Troubleshooting.
Failsafe mode
Si le Wrt54gl ne démarre plus pour cause de scripts cassés ou partition corrompue, il est possible de recupérer l'appareil avec le mode Failsafe.
Comment entrer dans le mode failsafe
Il faut utiliser le bouton reset pour entrer dans ce mode seulement lorsque OpenWrt démarre mais pas pendant le bootloader ce qui peut casser le routeur.
Quand OpenWrt démarre, il allume la led DMZ pour le Wrt54gl et broadcast un packet UDP sur le port 4919 du réseau 192.168.1.x qui contient ce message:
"Press reset now, to enter Failsafe!"
Quand ce message apparait, il faut presser le bouton reset pendant 2 secondes et le message suivant doit être reçu:
Entering Failsafe!
Pour le Wrt54gl, si le reset est validé, la led DMZ flashe 3 fois par secondes.
Une fois dans le mode failsafe, le routeur ouvre un port telnet sur l'adresse 192.168.1.1 sur les ports LAN uniquement.
Ecoute du Wrt54gl sur le port 4919 avec tcpdump
vesta:~# tcpdump -vv -i eth0 src host 192.168.1.1 and port 4919 and udp tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
22:40:39.981411 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 1029) 192.168.1.1.2048 > 192.168.1.255.4919: UDP, length 100
22/8/2007




