Aggiornamento, novembre 2026: a distanza di quattro anni sono riuscito a installarci OpenWrt. Il seguito è in OpenWrt su un router Fastweb Telsey CPVL7.

Il Telsey CPVL7 è un router che Fastweb ha dismesso da tempo. In passato gli era stata tolta la porta fibra, al cui posto era stata collegata una presa Ethernet. Era rimasto spento per almeno tre o quattro anni. Volevo capire cosa ci fosse dentro e se si potesse ancora farne qualcosa, liberandolo dai programmi dell’operatore.

La console seriale

Il primo passo è stato saldare i connettori sulla scheda e collegare un adattatore USB-TTL. Saldare i pin non basta: per abilitare la console serve anche un ponticello di stagno su A1 e A2, e va tolta la resistenza da 0 ohm in B.

Scheda del Telsey CPVL7 con i pin TX, RX e GND della console, il ponticello A1/A2 e la resistenza B

TX e RX vanno incrociati con quelli dell’adattatore. La console va a 115200 baud:

sudo screen /dev/tty.usbserial-XXX 115200

Al login bastano user / user, che portano a una CLI ridotta. Da lì il comando sh apre una shell BusyBox come root. Con la shell a disposizione si vede con che cosa si ha a che fare: un BCM6368 a 400 MHz, 64 MB di RAM e 16 MB di flash parallela, con Linux 2.6.21.5 e BusyBox 1.00. La radice è uno squashfs compresso con la variante LZMA di Broadcom, riconoscibile dal magic qshs, che con un LZMA standard non si apre.

Dalla shell si può anche smontare il bridge e assegnare un indirizzo a mano a una porta, per raggiungere l’interfaccia web anche quando la configurazione non è quella giusta:

ifconfig br0 down
brctl delbr br0
ifconfig eth0 10.0.120.1 netmask 255.255.255.0

eth0 è la prima porta da destra. Con il computer su 10.0.120.2 si entra su http://10.0.120.1 con l’account di supporto, e da lì si può caricare un file di configurazione funzionante. Dopo il caricamento servivano ancora due comandi via telnet, il secondo per fare il NAT in uscita dalla porta eth5:

iptables -D FORWARD 4
iptables -t nat -A POSTROUTING -o eth5 -j MASQUERADE

Il dump della flash

Linux espone una sola partizione, l’immagine in uso, quindi per avere tutta la flash bisogna partire dal bootloader. È un CFE di Broadcom, e premendo Ctrl-C durante l’avvio ci si ferma al prompt CFE>. Il suo comando dm stampa il contenuto della memoria in esadecimale, e la flash è mappata lì.

Basta quindi uno script che mandi dm sulla seriale e ricomponga i byte dal testo: ho usato cfetool, in Python con pyserial. Non è veloce, perché a circa 2 kB/s i 16 MB richiedono quasi due ore, ma non scrive nulla.

Com’è organizzata la flash

Con binwalk si estrae lo squashfs, e confrontando i file con il dump si ricostruisce la mappa:

Offset Contenuto
0x000000 Bootloader, con il board ID CPVL7 a 0x684
0x020000–0x72cb50 Immagine 1: CPVL7_IPV6_SIP_FAST, versione 10.30L.25
0x740000–0xa20000 Vuota
0xa20000–0xcc0000 Dati compressi senza tag, forse residui di una vecchia copia del firmware
0xcc0000–0xfdb9ec Immagine 2: CPVL7_SIP_FASTWEB_R, versione 25.0L.0
0xfe0000–0xff8000 Vuota
0xff8000–0x1000000 Dati, forse la configurazione

Le due immagini seguono lo stesso schema: un tag Broadcom di 256 byte, poi il root filesystem e il kernel. Dall’immagine 2 ho estratto anche il kernel, che comincia a 0x255100 dall’inizio dell’immagine: dopo un’intestazione di 12 byte c’è un normale LZMA, che scompattato arriva a 2,6 MB.

L’immagine 2 è molto più piccola dell’altra, con un root filesystem da 2,4 MB contro 6,4 MB, e ha una R in fondo al tag: potrebbe essere un’immagine ridotta o di recupero.

Si può mettere OpenWrt?

Per il CPVL7 non ho trovato un’immagine di OpenWrt. Ho scaricato come riferimento le build di OpenWrt 22.03.2 per il Telsey CPVA642 e il Pirelli A226M, oltre al firmware del CPVA642, ma sono tutte per il chip 6358. Anche il progetto cfe-bcm63xx, dedicato a questo bootloader, cita 6338, 6348 e 6358, non il 6368.

Scrivere una di quelle immagini sul CPVL7 non avrebbe senso. Con un backup completo, una shell di root e la mappa della flash la base c’è, ma per andare oltre serve una build fatta apposta per questa scheda.