PDA

View Full Version : [Ipotesi] Aggiungere funzionalità a tutti i router Netgear con porta USB


Pagine : [1] 2 3

cionci
03-09-2010, 15:56
In questi giorni mi è nata una pazza idea. Sul mercato ormai ci sono molti router Netgear dotati di porta USB.
I router più o meno offrono le stesse funzionalità di base e a chi più e chi meno servirebbero varie feature che potrebbero essere aggiunte tramite firmware custom.
Il problema dei firmware custom è che ogni persona potrebbe lavorare solo sul proprio modello di router ed in ogni caso il rischio nel testare firmware con svariati flash è assolutamente alto e poco pratico.
L'idea era quella di fare delle modifiche base ai firmware originali, modifiche facilmente eseguibili e che non necessitano di test approfonditi (si tratterebbe di modificare solo pochissimi file di testo).
Successivamente le funzionalità aggiuntive potrebbero essere proposte come pacchetti installabili semplicemente inserendole in una chiavetta/disco usb collegata al router o tramite una interfaccia web.
Tutte le funzionalità aggiuntive rimarrebbero nella memoria di massa collegata al router, quindi con il router avviato senza memoria di massa il firmware sarebbe quello base.

Le funzionalità facilmente inseribili sarebbero varie:
- interprete PHP (per poter scrivere in modo più agevole le pagine web)
- modifica del Target SNR Margin
- port forwarding (redirigere una porta di IP pubblico su una porta diversa di un ip privato)
- controllo avanzato del QoS (tramite l'utility tc già inclusa nel firmware)
- wake on lan
- pianificazione wifi
- nfs server (http://unfs3.sourceforge.net/)
- telnet attivo all'avvio
- supporto per la condivisione delle stampanti
- server ssh (http://matt.ucc.asn.au/dropbear/dropbear.html)
- supporto per ext2/3 (fuse già attivo nel kernel, http://sourceforge.net/projects/fuse-ext2/)
- supporto per scrittura su ntfs (tramite ntfs-3g, per chi non ce l'ha)
- condivisione file personalizzata, con vari livelli di privilegio
- UPnP DLNA per lo streaming audio/video tramite rete (http://sourceforge.net/projects/minidlna/)
- client torrent (assolutamente da verificare se le prestazioni sono sufficienti)
- probabilmente anche supporto a chiavi UMTS (ma qui ci sarebbe da lavorare molto)

Parlo solo dei router netgear perché sono quelli che hanno la possibilità di costruire un firmware custom in pochissimi passaggi. Qualsiasi altro router potrebbe essere utilizzabile con la stessa metodologia, purché sia possibile costruire un firmware custom e sia disponibile una toolchain funzionante.

Su come fare la creazione dei pacchetti e la relativa installazione ho già diverse idee in mente.
La cosa principale è la disponibilità di un buon programmatore web, che abbia voglia di dare un'impostazione dal punto di vista grafico e di CSS all'interfaccia web.
Per la parte PHP ci posso essere anche io.
Per organizzarci per la parte tecnica useremo un thread in programmazione.
Intanto mi sarebbe piaciuto saggiare la disponibilità di qualche utente a dare una mano e come questa cosa potrebbe essere accolta dai possessori dei router in questione.

Router Netgear che sono attualmente supportati:
- DGN2200
- DGN3500

Router Netgear che potrebbero essere supportati:
- DGND3300
- WNDR3300
- WNDR3400
- WNR3500
- WNR3500L
- WNDR3700

nuovoUtente86
03-09-2010, 16:08
Idea sicuramente interessante : aggiungerei al tuo elenco il supporto al QoS e Traffic Shaping dove non presente e alla semplificazione (per favorire utenti inesperti) del setup dove già presente. Interessante anche il supporto per apparecchi voip USB.
Non posso darti la disponibilità per lo sviluppo della parte front-end per la quale non avrei nè la pazienza nè il tempo, ma per lo sviluppo delle funzionalità sicuramente.

cionci
03-09-2010, 17:18
Idea sicuramente interessante : aggiungerei al tuo elenco il supporto al QoS e Traffic Shaping dove non presente e alla semplificazione (per favorire utenti inesperti) del setup dove già presente.
Questo è già più complicato credo, no ? A meno di supporto già presente, ma non abilitato nel firmware.

Alfonso78
03-09-2010, 17:28
interessante... ;)

mi iscrivo per curiosità...!!!

nuovoUtente86
03-09-2010, 17:51
Questo è già più complicato credo, no ? A meno di supporto già presente, ma non abilitato nel firmware.

Dipende da quanto si può/voglia andare a scrivere a basso livello. Non conosco esattamente il set di funzionalità messo a disposizione dal tool di sviluppo (come ad esempio eventuali API già esposte), ma nel caso specifico si tratta di andare ad interfacciarsi con le code dell' interfaccia (scusate il gioco di parole) wan/ATM.
Per il voip il discorso è un po analogo all' umts

cionci
03-09-2010, 18:02
Dipende da quanto si può/voglia andare a scrivere a basso livello. Non conosco esattamente il set di funzionalità messo a disposizione dal tool di sviluppo (come ad esempio eventuali API già esposte), ma nel caso specifico si tratta di andare ad interfacciarsi con le code dell' interfaccia (scusate il gioco di parole) wan/ATM.
Fai conto che sono tutti basati su Linux.
Non ho mai indagato fino in fondo, ma mi sa che senza ricompilare il kernel sia impossibile. L'algoritmo di scheduling del QoS è una funzione messa a disposizione dal kernel.
Certo non è impossibile nemmeno questo, ma diciamo che in tal caso andrebbe oltre al target previsto (nessuna modifica importante al firmware ufficiale).
Per il voip il discorso è un po analogo all' umts
Per le chiavette UMTS si tratterebbe di compilare moduli per il kernel e poi fare delle modifiche alla tabella di routing, senza quindi ricompilare il kernel o fare alcuna modifica al firmware. Per il supporto a telefoni VoIP ci sarebbero più problemi, visto che bisognerebbe includere anche un supporto alle periferiche audio.

nuovoUtente86
03-09-2010, 18:14
Fai conto che sono tutti basati su Linux.
Non ho mai indagato fino in fondo, ma mi sa che senza ricompilare il kernel sia impossibile. L'algoritmo di scheduling del QoS è una funzione messa a disposizione dal kernel.
Certo non è impossibile nemmeno questo, ma diciamo che in tal caso andrebbe oltre al target previsto (nessuna modifica importante al firmware ufficiale).

Si, sicuramente è un lavoro di più basso livello, ma credo come cosa sia molto intrigante, soprattutto a livello di studio e valutazione dello politiche di scheluling più che la mera implementazione.

Per le chiavette UMTS si tratterebbe di compilare moduli per il kernel e poi fare delle modifiche alla tabella di routing, senza quindi ricompilare il kernel o fare alcuna modifica al firmware. Per il supporto a telefoni VoIP ci sarebbero più problemi, visto che bisognerebbe includere anche un supporto alle periferiche audio.
Be per l' umts, in definitifa si tratta di utilizzare come model la chiavetta piuttosto che ATM o rj45. Però in ogni caso, seppur vero che bisognerebbe pilotare i dispositivi di I/o audio (ma comunque si riduce ad interfacciarsi con una periferica sia essa un modem o un phoneUsb), la parte interessante è l' implementazione dei protocollo di segnalazione e codifica (che in generale, una volta studiati non comportano un grosso sforzo).

cionci
03-09-2010, 18:32
Non c'è assolutamente da implementare niente. Basta compilare e installare il modulo del kernel e inviare all'emulatore di porta seriale i giusti comandi AT per la connessione. A quel punto ci si trova un'interfaccia di rete, ci si lancia il client DHCP e si impostano default route e DNS nel sistema.

Comunque cerchiamo di rimanere sul generico, sulle questioni tecniche ne discuteremo più avanti.

gnommo
03-09-2010, 18:38
Mi iscrivo, pronto a sviluppare e testare sul dgn3500

nuovoUtente86
03-09-2010, 18:50
Non c'è assolutamente da implementare niente. Basta compilare e installare il modulo del kernel e inviare all'emulatore di porta seriale i giusti comandi AT per la connessione. A quel punto ci si trova un'interfaccia di rete, ci si lancia il client DHCP e si impostano default route e DNS nel sistema.

Comunque cerchiamo di rimanere sul generico, sulle questioni tecniche ne discuteremo più avanti.

Mi riferivo alla parte voip , non al modulo UMTS.
Si in ogni caso la parte tecnica verrà dopo.

gnommo
04-09-2010, 10:48
Ho testato il php, funziona.
Meno male che esiste openwrt da cui si possono scaricare molti programmi per mips già compilati :D
Certo ha qualche problemino di integrazione con mini_httpd ma adesso vedo se ricompilando il php riesco a risolvere, mentre con il httpd che si può cacciare dalla busybox funziona.

cionci
04-09-2010, 10:52
Che io sappia per minihttpd bisogna fare qualche modifica: http://www.hochstrasser.org/wiki/pmwiki.php/Linux/MiniHttpd (dubito che ci sia quel modulo del kernel già pronto, potremmo optare per l'inserimento del percorso dell'interprete)
In ogni caso potremmo tranquillamente killare il minihttpd lanciato di default e metterne uno compilato ad hoc ;)

gnommo
04-09-2010, 11:08
Che io sappia per minihttpd bisogna fare qualche modifica: http://www.hochstrasser.org/wiki/pmwiki.php/Linux/MiniHttpd (dubito che ci sia quel modulo del kernel già pronto, potremmo optare per l'inserimento del percorso dell'interprete)
In ogni caso potremmo tranquillamente killare il minihttpd lanciato di default e metterne uno compilato ad hoc ;)

Non è quello il problema, per quello basta inserire nei file php all'inizio
#!/percorso/php

Il problema invece è che il php vuole settata la variabile SCRIPT_FILENAME che mini_httpd non setta, ho fatto un wrapper per settare a mano ma ancora non sono riuscito a farlo andare mi da sempre a browser
No input file specified.
Devo vedere se ricompilando il php e modificando quella parte di codice riesce ad aprire correttamente il file.

cionci
04-09-2010, 11:24
Il problema invece è che il php vuole settata la variabile SCRIPT_FILENAME che mini_httpd non setta, ho fatto un wrapper per settare a mano ma ancora non sono riuscito a farlo andare mi da sempre a browser
No input file
Devo vedere se ricompilando il php e modificando quella parte di codice riesce ad aprire correttamente il file.
La patch per mini_httpd linkata sopra riguarda proprio questo problema ;)

cionci
04-09-2010, 11:38
Cerco di spiegare brevemente le modifiche da fare al sorgente del firmware dei vari router, sono davvero basilari:
- creare un soft-link "mod" (o qualsiasi altro nome scelto) nel punto in cui si trovano i file HTML alla dir /mnt/main/http
- creare un soft-link /mnt che punta /tmp/mnt
- modificare la pagina html del frame superiore (quella che resta sempre visibile) per contenere il link all'interfaccia web delle modifiche del firmware
- modificare lo script di avvio (solitamente /etc/init.d/rcS o /usr/etc/rcS)

Quest'ultima modifica dovrà:
- creare /tmp/mnt/main
- per ogni partizione trovata:
--- montare la partizione su /mnt/main
--- fare il check sull'esistenza di /mnt/main/bin/boot.sh
--- se viene trovato deve eseguirlo e terminare
--- se non viene trovato deve andare alla prossima partizione

Sulla periferica usb la struttura dei file sarà così composta (ovviamente tutto in via provvisoria):

|- http: pagine html, php etc etc
|- db: db sqlite da usare per salvare dati (ogni pacchetto avrà un db diverso)
|- bin: file eseguibili (da mettere in path)
|- etc: file di configurazione
|- packs: i vari pacchetti verranno estratti qui
---|- nomepacchetto
------|- bin: eseguibili dal soft-linkare nella bin principale
------|- etc: configurazioni da soft-linkare nella etc principale
------|- data: file dati, pagine html etc etc
------|- scripts
---------|- boot.sh: script da eseguire al boot
---------|- install.sh: script da eseguire al momento dell'installazione
---------|- remove.sh: script da eseguire al momento della rimozione

Ovviamente il boot.sh principale eseguirà i boot.sh di ogni pacchetto.

gnommo
05-09-2010, 08:49
Sulla periferica usb la struttura dei file sarà così composta (ovviamente tutto in via provvisoria):

|- http: pagine html, php etc etc
|- db: db sqlite da usare per salvare dati (ogni pacchetto avrà un db diverso)
|- bin: file eseguibili (da mettere in path)
|- etc: file di configurazione
|- packs: i vari pacchetti verranno estratti qui
---|- nomepacchetto
------|- bin: eseguibili dal soft-linkare nella bin principale
------|- etc: configurazioni da soft-linkare nella etc principale
------|- data: file dati, pagine html etc etc
------|- scripts
---------|- boot.sh: script da eseguire al boot
---------|- install.sh: script da eseguire al momento dell'installazione
---------|- remove.sh: script da eseguire al momento della rimozione

Ma è possibile fare tutto questo su partizione fat32 ?

Per quanto riguarda il php facendo uno script cgi

#!/bin/sh
export LD_LIBRARY_PATH=/mnt/shares/U
export SCRIPT_FILENAME=prova.php
/mnt/shares/U/php-fcgi -f $SCRIPT_FILENAME

dovrebbe funzionare ed invece dice no dice No input file specified. Quindi credo che sia un problema nel php precompilato che ho preso su openwrt (sia in versione 4 che 5), provo a ricompilarlo modificandolo. Penso che se funziona così sarebbe anche la cosa migliore, così non si tocca mini_httpd

cionci
05-09-2010, 08:58
Ma è possibile fare tutto questo su partizione fat32 ?
Per i permessi dici ? O per quale altro motivo ?

cionci
07-09-2010, 09:14
Altri servizi che potrebbero essere inseriti:
- controllo avanzato del QoS (tramite l'utility tc già inclusa nel firmware)
- UPnP DLNA per lo streaming audio/video tramite rete (http://sourceforge.net/projects/minidlna/)

Io per ora non posso lavorarci. Verso inizio/metà ottobre mi procurerò un DGN2200 e avrò qualche giorno per lavorarci a pieno.

cionci
07-09-2010, 09:43
Ma è possibile fare tutto questo su partizione fat32 ?
Ah, ora forse ho capito a cosa ti riferisci. In effetti credo che sia impossibile usare ln su fat32. Basta copiare i file al posto di linkarli ;)

cionci
15-09-2010, 08:27
Gnommo...intanto che mi arriva il router... Non è che mi puoi inserire un

cat /proc/partitions

con collegato al router un hub usb e due dischi o un solo disco con due partizioni ?
Il DGN3500 ci scrive su NTFS ?

gnommo
15-09-2010, 08:57
Gnommo...intanto che mi arriva il router... Non è che mi puoi inserire un

cat /proc/partitions

con collegato al router un hub usb e due dischi o un solo disco con due partizioni ?
Il DGN3500 ci scrive su NTFS ?

L'hub non ce l'ho, mi sono affacciato il cinese sotto casa non c'è, dopo faccio un salto al supermercato per vedere se ne trovo qualcuno nei cestoni :D.
Ho preso una chiavetta e ci ho messo due partizioni la prima formattata ext3 e la seconda fat32, ovviamente cat /proc/partitions su dgn3500 da
major minor #blocks name

31 0 14848 mtdblock0
31 1 16000 mtdblock1
31 2 64 mtdblock2
31 3 64 mtdblock3
31 4 64 mtdblock4
31 5 64 mtdblock5
31 6 64 mtdblock6
31 7 64 mtdblock7
8 0 3944448 sda
8 1 987966 sda1
8 2 2955960 sda2
Il montaggio automatico non riconosce la seconda partizione fat32, ma montando manualmente la seconda partizione ovviamente non ci sono problemi, fat32 è supportato nativamente.

Ovvio che ntfs è supportato in scrittura e lettura via fuse.

cionci
15-09-2010, 09:08
Ora mi sorge il dubbio: come rilevare il tipo di una partizione per fare il mount ? Con fdisk sarebbe semplice ed il DGN3500 ha già fdisk abilitato in busybox, mentre il DGN2200 no.
Il mount ha la modalità auto attivata sul DGN3500 ?

cionci
15-09-2010, 09:37
Non avevo notato che il DGN2200 ha un nuovo sistema di build interamente basato su Makefile e che ogni volta viene compilato tutto da capo :eek: Mi sta ricompilando anche il kernel :eek: Mi sa che ci sarà da tremare al momento del flash :D

Certo è anche un bel vantaggio: significa poter abilitare nativamente il supporto a ext3 e per tante altre cose. Intanto vediamo se finisce.

gnommo
15-09-2010, 10:44
Non avevo notato che il DGN2200 ha un nuovo sistema di build interamente basato su Makefile e che ogni volta viene compilato tutto da capo :eek: Mi sta ricompilando anche il kernel :eek: Mi sa che ci sarà da tremare al momento del flash :D

Certo è anche un bel vantaggio: significa poter abilitare nativamente il supporto a ext3 e per tante altre cose. Intanto vediamo se finisce.
Invece nel dgn3500 c'è tutto precompilato, ma ricompilare il kernel interamente non è possibile perchè mancano parecchi file, si possono solo compilare quei moduli che appunto non hanno riferimenti a quei file non presenti.

Sul dgn3500 appunto se vedi nel file eseguibile rc controlla tramite fdisk il tipo di filesystem se è ntfs o fat32 ed in base a questo richiama ntfsmount o mount. Sul dgn2200 è tutto diverso, utilizza ntfs-3g, con il solo comando mount viene correttamente montato ntfs ?

cionci
15-09-2010, 10:50
Devo ancora provare. Fino a quando non mi arriva il DGN2200 è difficile :D

Sinceramente preferivo com'era nel DG834G e nel DGN3500. Almeno avessero fornito i binari precompilati anche dei sorgenti open...sarebbe stato possibile saltare tutto il lavoro di ricompilazione. Infatti ho già un'errore sulla verifica dei simboli delle librerie dinamiche con i precompilati closed :muro:
Così sto ricompilando la toolchain, sperando di aver fatto qualche errore con le versioni delle librerie della toolchain, anche se dubito.

cionci
15-09-2010, 15:18
Ok, compilato il firmware, anche se non corrisponde alla versione binaria distribuita da Netgear, ma c'era da aspettarselo avendo dovuto compilare il mondo...
La cosa buffa era che l'errore era originato da un tab in più all'inzio della riga di un makefile. Poi subito dopo c'era un errore su fakeroot. Il genialone che ha compilato il firmware ha ben pensato di metterci un percorso assoluto per la ricerca delle librerie :yeah: :muro:
Prima di flashare provo se funziona la vecchia procedura di recupero con il led power che flasha rosso e verde. Meglio essere previdenti. Mi scoccerebbe non poco bruciare il router nuovo.

gnommo
15-09-2010, 16:18
Ok, compilato il firmware, anche se non corrisponde alla versione binaria distribuita da Netgear, ma c'era da aspettarselo avendo dovuto compilare il mondo...
La cosa buffa era che l'errore era originato da un tab in più all'inzio della riga di un makefile. Poi subito dopo c'era un errore su fakeroot. Il genialone che ha compilato il firmware ha ben pensato di metterci un percorso assoluto per la ricerca delle librerie :yeah: :muro:
Prima di flashare provo se funziona la vecchia procedura di recupero con il led power che flasha rosso e verde. Meglio essere previdenti. Mi scoccerebbe non poco bruciare il router nuovo.
Mai quanto la compilazione per i moduli del kernel del dgn3500, oltre a centinaia di riferimenti a file chissà dove ubicati e che chissà quando decideranno di distribuire, c'erano linee di codice cancellate a metà forse tentativi di copia ed incolla andati male, ho dovuto spulciare nel kernel vanilla per vedere cosa avevano tentato di cancellare/aggiungere.

Io ancora non mi sono avventurato nel flash :D , perchè ancora non ho capito come funziona il bootloader, sulla fonera per esempio ho la piena padronanza e faccio tutte le porcherie che mi gira, tanto so sempre come recuperare :D

cionci
15-09-2010, 16:37
Sul Netgear, almeno quelli Broadcom, l'importante è non sputtanare il CFE. Se quello è integro si può avviare il router in modalità di recupero, tenendo premuto il reset mentre accendi.
A quel punto recuperi il 99% delle volte in cui si può bloccare per un aggiornamento del firmware ;)

cionci
15-09-2010, 20:11
Allora... Nel DGN2200 hanno adottato un demone httpd closed source, quindi si rende necessario usare un mini_httpd esterno, magari su un'altra porta. Per non appesantire troppo potremmo attivarlo al momento in cui dalla vecchia interfaccia grafica si passa alla nuova e spegnerlo con un time out di inutilizzo.
Hanno usato questo demone per poter fare la traduzione in tempo reale del testo nell'interfaccia web.

gnommo
15-09-2010, 20:20
Allora... Nel DGN2200 hanno adottato un demone httpd closed source, quindi si rende necessario usare un mini_httpd esterno, magari su un'altra porta. Per non appesantire troppo potremmo attivarlo al momento in cui dalla vecchia interfaccia grafica si passa alla nuova e spegnerlo con un time out di inutilizzo.
Hanno usato questo demone per poter fare la traduzione in tempo reale del testo nell'interfaccia web.

Ah si avevo visto che nel codice html c'erano dei tag strani.
Ma quindi questo che comporta? L'importante è che è in grado di eseguire i cgi. Alla fine per risolvere il problema di sopra del php, basta modificare e ricompilare il php.

cionci
15-09-2010, 20:28
Ah si avevo visto che nel codice html c'erano dei tag strani.
Ma quindi questo che comporta? L'importante è che è in grado di eseguire i cgi. Alla fine per risolvere il problema di sopra del php, basta modificare e ricompilare il php.
Sì, ma li farà girare i cgi ? E' completamente chiuso, non c'è alcun dettaglio. Appena arriva provo a fargli eseguire qualche script bash e così vediamo. Credo tra l'altro che filtri automaticamente ogni richiesta sostituendo quei tag con le varie stringhe.

gnommo
15-09-2010, 21:31
Ma il dgn2200 ha un mips big endian?
Se è così ti segnalo http://downloads.openwrt.org/kamikaze/8.09/ar71xx/packages/
dove poter prelevare qualche programma precompilato, naturalmente sai come si estraggono i file dagli ipk,si rinomina in tar.gz

cionci
16-09-2010, 08:52
Sì, è big endian. Grazie ;)

Leggi un po' questo: http://www.hwupgrade.it/forum/showthread.php?p=33102051#post33102051

Questa è il diff fra le due configurazioni:
4c4
< # Wed Sep 15 18:42:47 2010
---
> # Tue Nov 24 08:59:12 2009
206,207c206,207
< CONFIG_PREEMPT_NONE=y
< # CONFIG_PREEMPT_VOLUNTARY is not set
---
> # CONFIG_PREEMPT_NONE is not set
> CONFIG_PREEMPT_VOLUNTARY=y
209c209
< # CONFIG_PREEMPT_SOFTIRQS is not set
---
> CONFIG_PREEMPT_SOFTIRQS=y
241c241
< # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
---
> CONFIG_CC_OPTIMIZE_FOR_SIZE=y
256c256
< # CONFIG_VM_EVENT_COUNTERS is not set
---
> CONFIG_VM_EVENT_COUNTERS=y
761c761
< # CONFIG_MII is not set
---
> CONFIG_MII=y
840c840
< # CONFIG_PPP_ASYNC is not set
---
> CONFIG_PPP_ASYNC=y (questo credo che serva per il dial tramite ppp sull'interfaccia seriale del modem utms)
989,993c989
< CONFIG_USB_EHCI_HCD=y
< CONFIG_USB_EHCI_SPLIT_ISO=y
< CONFIG_USB_EHCI_ROOT_HUB_TT=y
< # CONFIG_USB_EHCI_TT_NEWSCHED is not set
< # CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
---
> # CONFIG_USB_EHCI_HCD is not set
1017c1013
< CONFIG_USB_STORAGE_DATAFAB=y
---
> # CONFIG_USB_STORAGE_DATAFAB is not set
1021,1022c1017,1018
< CONFIG_USB_STORAGE_SDDR09=y
< CONFIG_USB_STORAGE_SDDR55=y
---
> # CONFIG_USB_STORAGE_SDDR09 is not set
> # CONFIG_USB_STORAGE_SDDR55 is not set
1049,1050c1045,1056
< # CONFIG_USB_USBNET_MII is not set
< # CONFIG_USB_USBNET is not set
---
> CONFIG_USB_USBNET_MII=m
> CONFIG_USB_USBNET=y
> CONFIG_USB_NET_AX8817X=m (questo è un chipset per adattatori ethernet usb, a che gli serve ?)
1060c1066,1104
< # CONFIG_USB_SERIAL is not set
---
> CONFIG_USB_SERIAL=y (questa è differenza importante)
> # CONFIG_USB_SERIAL_CONSOLE is not set
> CONFIG_USB_SERIAL_GENERIC=y
> CONFIG_USB_SERIAL_SIERRAWIRELESS=m
1080d1123
< # CONFIG_USB_SISUSBVGA is not set
1184c1227,1229
< # CONFIG_NTFS_FS is not set
---
> CONFIG_NTFS_FS=y
> # CONFIG_NTFS_DEBUG is not set
> CONFIG_NTFS_RW=y
1214c1259
< CONFIG_SQUASHFS_VMALLOC=y
---
> # CONFIG_SQUASHFS_VMALLOC is not set
1340a1386
> CONFIG_BITREVERSE=y
1343c1389
< # CONFIG_CRC32 is not set
---
> CONFIG_CRC32=y

gnommo
16-09-2010, 09:35
< è il dgn2200? E non ha usb_serial abilitato? Strano il dgn3500 ce l'ha.
Ma non ho capito le chiavette hanno bisogno di un particolare supporto del kernel, oppure possono essere usate come un modem seriale su usb? E c'è speranza di utilizzare i normali cellulari come modem. Io ne ho attaccato qualcuno e vengono riconosciuti e vengono settati come usb_serial_generic

cionci
16-09-2010, 09:48
Ho appena scaricato il firmware del MBRN3000 e ci sono riferimenti e configurazioni anche DGN2200M.
Il supporto, al contrario di quello che pensavo, è interno al kernel.
Ed è rappresentato da questi moduli (uno compilato nel kernel purtroppo, non so se si possa compilare come modulo): Edit: si può compilare anche come modulo

> CONFIG_USB_USBNET_MII=m
> CONFIG_USB_USBNET=y
> CONFIG_USB_NET_AX8817X=m
> CONFIG_USB_SERIAL_SIERRAWIRELESS=m


Per instaurare la connessione, l'MBRN3000, credo che comunichi direttamente con la seriale tramite una specie di minicom (chiamato microcom).
Quindi problemi per gestire il riconoscimento non ce ne sono, basta abilitare la stessa configurazione del kernel anche sul DGN2200.
Magari ci sono problemi per instaurare la connessione (non mi sembra di aver visto script per la connessione nel firmware del MBR3000).
Tra l'altro ci sono anche i file di configurazione per il kernel del DGN2200M e per l'intero sistema di compilazione ;)

cionci
16-09-2010, 09:54
Ci sarà molto da smanettare: il DGN2200 fa solo il fast NAT, il DGN2200M invece ha abilitato anche il modulo NF_CONNTRACK. Vediamo...
Certo se uscisse il firmware del DGN2200M sarebbe tutto più semplice :D Perché il problema non è tanto il kernel, ma quanto i file esterni di configurazione e per la gestione. Tra l'altro credo che tutta l'inizializzazione dei servizi venga fatta da un eseguibile Netgear :( Non è più come nel DGN834Gv4/GT dove avevi tutto bello spiattellato davanti :D

gnommo
16-09-2010, 10:05
Tra l'altro credo che tutta l'inizializzazione dei servizi venga fatta da un eseguibile Netgear :( Non è più come nel DGN834Gv4/GT dove avevi tutto bello spiattellato davanti :D

no infatti, anche con il dgn3500 il grosso lo fa l'eseguibile rc

cionci
18-09-2010, 15:14
Sto analizzando le differenze fra l'immagine del firmware ufficiale e quella generata da me. Non torna nemmeno la dimensione dei blocchi del file system squash !!!

Ecco qui la generazione dell'immagine squash:
Creating big endian 3.0 filesystem on /home/cionci/DGN2200/DGN2200/targets/96358GW/rootfs.img, block size 65536.
[=============================================================================================================================================================================================================================] 721/721 100%
Exportable Big endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments, duplicates are removed
Filesystem size 4167.66 Kbytes (4.07 Mbytes)
21.68% of uncompressed filesystem size (19221.52 Kbytes)
Inode table size 5697 bytes (5.56 Kbytes)
22.83% of uncompressed inode table size (24954 bytes)
Directory table size 6853 bytes (6.69 Kbytes)
52.57% of uncompressed directory table size (13035 bytes)
Number of duplicate files found 33
Number of inodes 859
Number of files 483
Number of fragments 38
Number of symbolic links 102
Number of device nodes 237
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 37
Number of uids 1

Come vedi block size 65536.
Analizzando il firmware ufficiale si vede che il file system è lungo 4210688 e non è quindi multiplo di 65536, ma di 16K !!! :rolleyes:
Anche se il block size non è fondamentale, questo significa comunque che ci sono delle incongruenze fra lo script che ha permesso di costruire il firmware ufficiale e quello rilasciato sotto GPL :muro:

Ora non mi rimane altro che operare di reverse engineering sul firmware ufficiale. Quindi estraggo l'immagine squash, la scompatto, faccio le modifiche, la ricompatto e la vado ad inserire nuovamente nel punto del firmware che mi interessa...però fanno un po' girare le scatole :rolleyes:
Anche perché a questo punto ci giochiamo la possibilità di modificare il firmware, anche se sarebbe possibile intervenire anche lì allo stesso modo, ma lo vedo un tantino rischioso.

gnommo
18-09-2010, 15:30
Io ancora non ho verificato se lo script del dgn3500 ricostruisce il fim bene... :D

cionci
18-09-2010, 18:30
Anche perché a questo punto ci giochiamo la possibilità di modificare il firmware, anche se sarebbe possibile intervenire anche lì allo stesso modo, ma lo vedo un tantino rischioso.
Al posto di "firmware" volevo scrivere kernel :D

Dovresti fare presto... Dovrebbe ricostruire il tutto in maniera esatta fino all'ultimo byte. Mi raccomando fai tutto da root, anche quando estrai il file system dentro l'archivio target. Questo perché ci sono dei block file e possono essere creati solo da root ;)

Comunque ho estratto l'immagine squash, il problema è che l'immagine è stata creata per un sistema big endian. Quindi non si riesce a montare. Assurdo che mksquash possa creare immagini big e little endian, ma possa estrarre solo immagini con l'endianess della macchina attuale :doh:
A studiarmi tutto il sorgente non ci penso nemmeno :stordita: Quando mi ritorna indietro il router userò quello per estrarre l'immagine ;)

gionnico
20-09-2010, 23:33
Per l'NTFS un po' di mesi fa il modulo nel kernel non era completo e instabile in scrittura.
Esiste da qualche anno NTFS-3G che gira su FUSE.

cionci
25-09-2010, 15:23
Dopo essere riuscito a riprstinare il router sto pensando a quale potrebbe essere la soluzione migliore per modificare il firmware.
Almeno sul DGN2200 posso compilare liberamente ed installare i moduli del kernel :eek:
Ho appena provato con ext2 e wxt3 e funziona alla grande !!!
Ora sul DGN3500 potrebbe essere più problematica la cosa, perché ti dovresti appoggiare a fuse...

In ogni caso ci sono alcune problematiche relative ai file. Almeno sul DGN2200 i file su Fat32 non vengono montati con il bit x attivato. Di conseguenza non è possibile eseguire alcuno script tramite interfaccia web.

gnommo
25-09-2010, 16:35
In ogni caso ci sono alcune problematiche relative ai file. Almeno sul DGN2200 i file su Fat32 non vengono montati con il bit x attivato. Di conseguenza non è possibile eseguire alcuno script tramite interfaccia web.

O cacchio, allora sono stato fortunato :eek: è comodo eseguire i programmi su fat32.
I moduli di kernel riesco a compilarli, ho compilato sia ext2 ed ext3 e jffs2, è il kernel che non riesco a compilare.
Alla fine usare ext2/ext3 è meglio, ad esempio il client bittorent btpd, non funzionava perchè quando impostavo la sua home su fat32 creava anche un file per la comunicazione IPC, che non è possibile creare su fat32, infatti ho risolto modificando il sorgente in modo che lo creasse in var/tmp ed invece la home dove scarica i torrent su fat32. Ora però ho un altro problema quando gli vado a dare un comando va in segmentation fault,
Hai per caso un gdb già compilato per mips big endian? :D

cionci
25-09-2010, 16:41
Hai per caso un gdb già compilato per mips big endian? :D
Sì...nella toolchain che ho compilato ci dovrebbe essere.
Aspetta che la uppo...

cionci
25-09-2010, 16:42
Mi sono sbagliato sul bit x... E' settato, non so come ho fatto a vedere che non fosse settato.

cionci
25-09-2010, 17:09
gnommo...ma te, se apri

http://192.168.0.1/shares/USB_Storage/

che è il percorso di una mia partizione della pennetta e click su un bash script, lui te lo esegue ?

gnommo
25-09-2010, 17:30
gnommo...ma te, se apri

http://192.168.0.1/shares/USB_Storage/

che è il percorso di una mia partizione della pennetta e click su un bash script, lui te lo esegue ?
Rinominato in .cgi certo.
Il percorso a me è del tipo
http://192.168.0.1/shares/U/

cionci
25-09-2010, 17:43
Rinominato in .cgi certo.
Il percorso a me è del tipo
http://192.168.0.1/shares/U/
Sul mio no :(
Invece le partizioni FAT e NTFS le monta tutte anche se ce n'è più di una.

gnommo
25-09-2010, 17:59
Sul mio no :(
Invece le partizioni FAT e NTFS le monta tutte anche se ce n'è più di una.

Ah ma intendi una partizione montata manualmente?

Ho fatto la seguente prova:
ho preso un sd card da 64MB l'ho formattata ext3 e copiato alcuni file.
L'ho messa nel dgn3500, ovviamente non l'ha montata automaticamente perchè il programma che si occupa di montare fa il controllo tramite fdisk e monta solo partizioni fat o ntfs.
Quindi l'ho montata a mano aggiungendo una dir T in /mnt/shares. Poi è ovvio che devi controllare se in /www c'è il soft link a /mnt/shares .
Se do http://192.168.0.1/shares/T/ non mi fa vedere il contenuto, però se accedo ad un sotto directory
http://192.168.0.1/shares/T/meter/
si

cionci
25-09-2010, 18:07
Avevo capito che il DGN3500 montava solo la prima partizione e se ce n'erano altre anche supportate non le montava...

gnommo
25-09-2010, 18:14
Avevo capito che il DGN3500 montava solo la prima partizione e se ce n'erano altre anche supportate non le montava...

:D Non ho capito cosa intendevi.
Tu stai dicendo che il server http non esegue i cgi?
Ti toccherà aggiungere su un'altra porta mini_httpd oppure httpd contenuto in busybox,ho testato va lo stesso bene.

cionci
25-09-2010, 18:46
Questa è la toolchain: http://www.mediafire.com/download.php?9a7qa8522bz4l54

Non vorrei però che gdb sia nella versione remota... Cioè una specie di versione client-server.

Sto diventando un po' pessimista.

Non riesco ad estrarre i file dal firmware originale. Estraendo la parte riguardante il root file system si vede benissimo che termina dopo circa 4.2 MB lasciando un po' di spazio libero (tutti 0). Prendendo quella parte del firmware non c'è comunque verso di montarla o di estrarla :confused: Nemmeno eseguendo unsquashfs dal router.

Copiando i file direttamente dal file system del router e creando una struttura identica al 100%, quando vado a creare l'immagine con mksquashfs (con le stesse opzioni usate nel sorgente del firmware) viene intorno ai 4.7 MB :confused:
Ho provato anche mksquashfs diversi...e tutti creano file da 4.7 MB.
Le cose sono due: o l'immagine nel firmware non finisce lì, ma mi sembra strano, o hanno passato l'immagine su un qualche ulteriore algoritmo di compressione.

cionci
26-09-2010, 13:10
Sto facendo un script per attivare il telnet (con telnetenable) e poi lanciare uno script su una partizione (in pratica ricerca lo script fra le directory presenti in /mnt/shares).
Tutto bene, solo che ho avuto un problema assurdo. Il DGN2200 non ha le shadow password :eek:
Erano almeno 10-12 anni che non vedevo un sistema linux o unix senza shadow password...evidentemente non lo vedevano più nemmeno quelli di Busybox. Infatti l'utilty "login" (che si può passare come parametro a telnetd per fare l'autenticazione) non funzionava anche con i dati corretti.
Ho dovuto modificare il sorgente...peccato che ancora non funzioni. Pur autenticandomi correttamente, quando va a lanciare la shell si ferma sulla execv stampando l'errore:

: No such file or directory

:confused:

Chiaramente ho guardato tutti i parametri della execv e sono assolutamente corretti !!! Esegue /bin/sh. Mistero...

gnommo
27-09-2010, 14:14
Ho fatto funzionare la condivisione stampanti.
Ho creato /bin/mknod /dev/usblp0 c 180 0
ho inserito il modulo di kernel usblp
Ho usato il programma per condividere le stampanti p910nd
Da windows ho aggiunto una stampante di rete e ciè voluto un pò ma me l'ha riconosciuta ma ho dovuto selezionare il modello manualmente e ho stampato.
Ho seguito questa guida in pratica:
http://www.dd-wrt.com/wiki/index.php/Printer_Sharing

cionci
27-09-2010, 14:15
Come hai fatto a creare il /dev/usblp0 ? Non è read only /dev ?
Se avessi voglia di dare uno sguardo anche tu...
Il comando per estrarre il root file system dal firmware:

dd bs=1 if=DGN2200-V1.0.0.20_4.0.20.chk of=rootfs.sqsh skip=314 count=4210688

Questo è lo squashfs che supporta il kernel :mbe:

squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
squashfs: LZMA suppport for slax.org by jro

Purtroppo il kernel non ha il supporto per i loop device. Anche se lo aggiungo però mancano proprio i device node, che non posso aggiungere perché /dev è read-only...
Il tuo router ce l'ha ?

gnommo
27-09-2010, 14:19
Come hai fatto a creare il /dev/usblp0 ? Non è read only /dev ?
Se avessi voglia di dare uno sguardo anche tu...
Il comando per estrarre il root file system dal firmware:

dd bs=1 if=DGN2200-V1.0.0.20_4.0.20.chk of=rootfs.sqsh skip=314 count=4210688

Questo è lo squashfs che supporta il kernel :mbe:

squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
squashfs: LZMA suppport for slax.org by jro

Purtroppo il kernel non ha il supporto per i loop device. Anche se lo aggiungo però mancano proprio i loop device...
Il tuo router ce l'ha ?

si ce l'ha, almeno mi trovavo in make menuconfig e c'è selezionato, ora vedo che riesco a capire

cionci
27-09-2010, 14:24
Mi sa che ho trovato un modo per montare il loop device con un device creato nel file system temporaneo...

losetup /dev/loop0 example.img
mount /dev/loop0 /home/you/dir

Ora bisogna trovare questo losetup.

gnommo
27-09-2010, 14:34
Mi sa che ho trovato un modo per montare il loop device con un device creato nel file system temporaneo...

losetup /dev/loop0 example.img
mount /dev/loop0 /home/you/dir

Ora bisogna trovare questo losetup.
http://downloads.openwrt.org/kamikaze/8.09/ar71xx/packages/losetup_2.13.0.1-2_mips.ipk ;)

cionci
27-09-2010, 14:57
http://downloads.openwrt.org/kamikaze/8.09/ar71xx/packages/losetup_2.13.0.1-2_mips.ipk ;)
Sì, già preso ;)

cionci
27-09-2010, 17:14
Ok, ci siamo. Sono riuscito ad ottenere un file compresso identico, almeno in dimensioni.

gnommo
27-09-2010, 17:48
Come hai fatto a creare il /dev/usblp0 ? Non è read only /dev ?


ramfs on /dev type ramfs (rw)

cionci
27-09-2010, 17:55
ramfs on /dev type ramfs (rw)
Beato te :cry:

Sono riuscito a creare un file di dimensioni uguali, anche se non è proprio uguale dal punto di vista binario. Ora lo sposto sul router e lo provo a montare.

gnommo
27-09-2010, 18:06
Beato te :cry:

Sono riuscito a creare un file di dimensioni uguali, anche se non è proprio uguale dal punto di vista binario. Ora lo sposto sul router e lo provo a montare.

Perchè non provi a flasharlo... :D

cionci
27-09-2010, 19:30
Perchè non provi a flasharlo... :D
Provo provo, prima ci faccio qualche modifica. Se devo provare...provo bene :D
Ci sto mettendo lo script per cercare il file chiamato setup.sh sui dischi montati e lo lancia.

gnommo
27-09-2010, 19:52
La prossima prova che vorrei fare, è connettere il mio nokia per usarlo come modem umts.
Hai qualche idea per potersi loggare come root con telnet?

cionci
28-09-2010, 07:49
Ovviamente il file non e' stato riconosciuto del sistema di upgrade. Devo ricostruire il file tramite i tool Netgear, vediamo se ci riesco.

Per abilitare il telnet prova l'interfaccia di debug: http://192.168.0.1/setup.cgi?todo=debug
Se invece una volta abilitato non ti fa entrare come root: http://forum1.netgear.com/showthread.php?t=53401

cionci
28-09-2010, 10:10
Ce l'ho fatta !!!
Ho adattato il sistema di build per creare il file system di cui avevo fatto il dump dal router.
Ho usato il vmlinux compresso presente nel firmware originale e questo è bastato a farlo funzionare. Probabilmente il primo flash non era andato a buon fine per un kernel panic.

Metto un busybox migliore, metto la modifica del SNR Margin e lo script per la riconnessione e poi si può partire.

Gigi_84
28-09-2010, 10:50
Interessante quando sarà rilasciato il firmware mod?
Il flash ora è sicuro?

gnommo
28-09-2010, 10:53
Il flash ora è sicuro?

Vabbè male che vada, ti vedi suonare alla porta cionci con la jtag ed il saldatore sottobraccio :D

Gigi_84
28-09-2010, 11:01
Vabbè male che vada, ti vedi suonare alla porta cionci con la jtag ed il saldatore sottobraccio :D

:asd: :asd:

cionci
28-09-2010, 11:42
Vabbè male che vada, ti vedi suonare alla porta cionci con la jtag ed il saldatore sottobraccio :D
Ti dico la verità...mi sono anche divertito a costruire il JTAG :D Era veramente tanto tempo che non saldavo...

Gigi_84: attualmente è sicuro. Ho flashato da interfaccia web e tutto è andato bene.

Sono indeciso se mettere o meno all'esterno le funzionalità relative al SNR Margin. Da un lato farei molto prima (sarei in pratica già pronto per rilasciare il firmware), dall'altro per me la funzionalità è talmente importante che preferirei averla built in.

Potrei però fare una via di mezzo, l'interfaccia web per la congigurazione sulla chiavetta (considerando anche le difficoltà a far andare i miei CGI con il server http personalizzato di netgear), il target SNR viene invece mantenuto anche con il boot senza chiavetta.

Credo che opterò per quest'ultima possibilità.

gnommo
28-09-2010, 12:05
Qualcosa andrà per forza nel firm, ad esempio i moduli di kernel. Penso che toccherà anche a me inserire qualcosa nel firm. Ad esempio se voglio aggirare la limitazione del mount della singola partizione e della limitazione di filesystem a solo fat32 e ntfs, dovrò cambia lo script usb_m.sh che richiama /usr/sbin/rc sd mount $1 per il montaggio, dovrò fare un programma sostitutivo di rc che monti correttamente tutte le partizioni e che modifichi /etc/samba/smb.conf per aggiungerlo alla condivisione.
Non c'è modo di mettere queste modifiche su chiavetta, perchè è una cosa da fare prima di montarla,giusto?

Gigi_84
28-09-2010, 12:21
Ti dico la verità...mi sono anche divertito a costruire il JTAG :D Era veramente tanto tempo che non saldavo...

Gigi_84: attualmente è sicuro. Ho flashato da interfaccia web e tutto è andato bene.

Sono indeciso se mettere o meno all'esterno le funzionalità relative al SNR Margin. Da un lato farei molto prima (sarei in pratica già pronto per rilasciare il firmware), dall'altro per me la funzionalità è talmente importante che preferirei averla built in.

Potrei però fare una via di mezzo, l'interfaccia web per la congigurazione sulla chiavetta (considerando anche le difficoltà a far andare i miei CGI con il server http personalizzato di netgear), il target SNR viene invece mantenuto anche con il boot senza chiavetta.

Credo che opterò per quest'ultima possibilità.

Anche a me come a te serve di + la forzatura dell'snr perchè anche la mia linea fa molto pena

cionci
28-09-2010, 13:04
Qualcosa andrà per forza nel firm, ad esempio i moduli di kernel. Penso che toccherà anche a me inserire qualcosa nel firm. Ad esempio se voglio aggirare la limitazione del mount della singola partizione e della limitazione di filesystem a solo fat32 e ntfs, dovrò cambia lo script usb_m.sh che richiama /usr/sbin/rc sd mount $1 per il montaggio, dovrò fare un programma sostitutivo di rc che monti correttamente tutte le partizioni e che modifichi /etc/samba/smb.conf per aggiungerlo alla condivisione.
Non c'è modo di mettere queste modifiche su chiavetta, perchè è una cosa da fare prima di montarla,giusto?
Perché i moduli li vuoi mettere interni ?
Secondo me vanno bene anche esterni. Bisognerebbe solo fare una procedura di "sganciamento" da interfaccia grafica. In modo da liberare tutte le risorse, compresi i moduli del kernel, nel caso si volesse disconnettere l'unità usb.
Ovviamente il discorso è valido, ma non per tutti i moduli. Per alcuni sarebbe davvero complicato rimuoverli una volta aggiunti.

L'automount si può mettere anche su chiavetta, basta smontare tutte le partizioni già montate (se necessario, ovviamente esclusa quella dove si trova il firmware modded), killare il processo e rimontarle dove e come vogliamo noi.

Magari tutto questo potremmo metterlo in un pacchetto aggiuntivo, ad alcuni sono sicuro che basti anche come monta le partizioni il router.

Così come per il supporto alle stampanti, anche quello lo si potrebbe mettere in un pacchetto aggiuntivo.

gnommo
28-09-2010, 13:24
Così come per il supporto alle stampanti, anche quello lo si potrebbe mettere in un pacchetto aggiuntivo.
Secondo te per la condivisione stampanti conviene usare questo server, oppure appoggiarsi su samba ed altro print server?
Ieri ho stampato 40 pagine abbastanza pesanti senza problemi, avevo il timore che si bloccasse qualcosa o si resettasse il router :D
Quello che non funziona almeno con la mia stampante sono alcune caratteristiche dei driver, tipo la visione del livello degli inchiostri,la stampa fronte retro manuale,etc. Non so se sono caratteristiche che si possono recuperare con altri server di stampa.

cionci
28-09-2010, 14:22
Non ho molta esperienza con i server di stampa purtroppo :(
Non te lo so dire...

Valerio5000
28-09-2010, 15:44
veramente una bella idea xò:D :)

cionci
29-09-2010, 16:17
Allora...dopo qualche difficoltà con le librerie (o dovuto compilare busybox in modo statico) eccomi pronto. Ho completato il firmware per la modifica del Target SNR Margin (si modifica tramite telnet e basta). Ovviamente non ho potuto fare niente tramite interfaccia web, proprio per le limitazioni del server web custom usato nel DGN2200.

Allora per php che si fa ? Si passa ad server HTTP esterno ? Io sono obbligato a farlo.

Dovremmo anche scegliere una toolchain di riferimento. Tu quale hai disponibile e che versione di compilatore ?

La mia versione è la 4.2.3. Quindi abbastanza recente.

Ecco qui lo script da integrare nel firmware per lanciare setup.sh ciclando su tutte le condivisioni:

#!/bin/sh

export PATH=/bin:/sbin:/usr/sbin:/usr/bin
export LD_LIBRARY_PATH=/lib:/lib/private:/lib/public

for i in 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
do
sleep 2
ls /tmp/shares/ | while read line; do
result=`ls /tmp/shares/$line/setup.sh 2>&1`
if [ "$result" = "/tmp/shares/$line/setup.sh" ]; then
exec "$result"
fi
done
done

Lo lancio da rcS con:

/usr/sbin/mod_setup.sh &

Ho un problemi con il telnet e le password in chiaro...c'è un bel po' di casino nel firmware originale, sia in passwd che in group.
Per ora sono costretto a lanciare un telnet da chiavetta.

gnommo
29-09-2010, 17:08
La questione dello script di start la posso posporre fino all'ultimo.
Per quanto riguarda il php, dipende da quanto complesse saranno le pagine da renderizzare, non so con cgi ed ajax forse si possono raggiungere gli stessi risultati, alleggerendo il carico del router?
Visto che l'interfaccia dobbiamo farla noi :D , io direi di attenerci ad un layout simile
http://www.dd-wrt.com/wiki/images/3/32/Web-gui-elements.png
per quanto riguarda le funzionalità fatti un giro nella demo di dd-wrt
http://www.informatione.gmxhome.de/DDWRT/Standard/V24BetaVPN/index.html (questa demo è pure limitata, in realtà ci sono ancora di più caratteristiche)
, io sarei dell'idea di copiarle il più possibile

gnommo
29-09-2010, 17:21
la demo aggiornata di dd-wrt
http://www.dd-wrt.com/demo/

cionci
29-09-2010, 18:00
Sai, il carico del server è una cosa relativa, visto che c'è solamente quando si vanno ad interpretare le pagine PHP. Si spera che l'utente non stia lì tutto il giorno a ricaricare le pagine come un tonto :D
Sinceramente pensavo a PHP per togliersi di torno tutti i possibili problemi di compatibilità fra le shell, tra i binari, le librerie etc etc.
Se le cose si fanno da PHP si può saltare tutta questa parte e soprattutto il debugging dei cgi (che siano programmi in C o script Bash).

Stavo pensando alla struttura dei file da mettere sulla chiavetta.
Mettere un file di avvio e tutti gli script subito leggibili espone davvero a grandissimi rischi per la sicurezza, dato che il drive è anche pubblicato sulla rete.
Imho si potrebbe pensare ad un loop device. Magari ext3, così si avrebbe il journalling ed anche la capacità di scrittura (che con altri file system come squash non avremmo).
Tutto sarebbe incluso in quel file e non servirebbero altri file sulla chiavetta (tranne i moduli del kernel, se non li volessi mettere nell'immagine del firmware).
Almeno un minimo di sicurezza in più c'è. Certo non è sicuro al 100%, ma magari potremmo tentare di impedire l'accesso a quel file impedendo l'accesso alla risorsa dalla rete.
Ovviamente gli script per montare e smontare tale file system dovrebbero venire inclusi nel firmware del router.

Ecco qui come usarlo:
http://www.walkernews.net/2007/07/01/create-linux-loopback-file-system-on-disk-file/

cionci
29-09-2010, 18:03
Per le pagine web... Io odio fare pagine web. Per ora partirei con un menu javascript preconfezionato, magari a scomparsa e poi andrei di HTML semplice e scarso per fare le pagine. Giusto per fare le cose alla svelta.
Poi si spera che qualcuno si interessi a questa cosa e ci dia una mano dal punto di vista grafico.

carlo8280
29-09-2010, 18:13
quindi questo firmware per impostare l'snr margin e il telnet abilitato e mantenere le modifiche anche dopo il riavvio del router è già pronto cionci?
lo metterai disponibile a tutti?

cionci
29-09-2010, 18:14
quindi questo firmware per impostare l'snr margin e il telnet abilitato e mantenere le modifiche anche dopo il riavvio del router è già pronto cionci?
lo metterai disponibile a tutti?
L'ho già messo nella discussione del DGN2200, ovviamente siamo agli inizi ;)

gnommo
29-09-2010, 18:14
Ora mi devi chiarire un pò come pensi di salvare tutte le impostazioni e come riapplicarle all'avvio, io non ne ho idea al momento.

cionci
29-09-2010, 18:39
Ora mi devi chiarire un pò come pensi di salvare tutte le impostazioni e come riapplicarle all'avvio, io non ne ho idea al momento.
Per salvare le impostazioni direi che sarebbe il caso di fare qualche programmino con sqlite.
Me ne vengono in mente tre...

Il primo che possiamo chiamare "dbram" (l'analogo del comando nvram o param del router) serve a salvare impostazioni globali del router.
Lo farei con le stesse impostazioni di nvram. Abbastanza semplice quindi da accedere tramite shell.
Un secondo potrebbe essere un traduttore di comandi, ad esempio:

routercmd DGN2200 nome_modulo id_comando (può essere anche una stringa)

e in output ritorna il comando o lo script da eseguire per attivare il telnet sul DGN2200.

Per settare il comando:

routercmd_set DGN2200 nome_modulo id_comando "comando"

Per installare un modulo:

package -i nome_archivio

Per rimuovere un modulo:

package -u nome_modulo

Per ottenere la lista dei moduli installati:

package -l

Per settare le impostazioni...basterà chiamare boot.sh nella root del fs ext3. boot.sh chiamerà boot.sh di ogni modulo installato.

Per settare le impostazioni più complesse (come settare le regole per un eventuale modulo per il port forwarding) potremmo lanciare uno script php direttamente da linea di comando che accederà ad un proprio db di sqlite.

Per spegnere il tutto bisogna lanciare shutdown.sh che chiamerà shutdown.sh per ogni modulo installato.

Faccio un esempio di modulo con quello per abilitare il telnet così credo che tu possa capire meglio ;)

carlo8280
29-09-2010, 18:51
ho letto il tuo post di là cionci. quindiil file chk si può flashare dalla pagina di configurazione del router e una volta dato il comando come spieghi nelle istruzioni questo viene mantenuto anche spegnendo e riaccendendo il router giusto?

cionci
29-09-2010, 19:05
ho letto il tuo post di là cionci. quindiil file chk si può flashare dalla pagina di configurazione del router e una volta dato il comando come spieghi nelle istruzioni questo viene mantenuto anche spegnendo e riaccendendo il router giusto?
Certo ;)

gnommo
30-09-2010, 08:25
Per salvare le impostazioni direi che sarebbe il caso di fare qualche programmino con sqlite.
Me ne vengono in mente tre...


Quindi avremmo un database accessibile tramite dbram che ha delle righe che contengono:
chiave nome modulo # flag abilitato/disabilitato # stringa eseguibile startup # stringa shutdown
Il dbram ha comandi set get count.
Lo script di boot cicla sulle righe ed esegue gli script con flag abilitato.

Ogni pacchetto avrà il suo database dove tenere le sue impostazioni.

Problema,facciamo un esempio: la pianificazione wifi e la pianificazione wol dipendono entrambe da crond. Possono appendere le loro stringhe a crontab, però il crontab del dgn3500 ha una riga che reimposta il crontab ogni notte cancellando quindi le impostazioni noi abbiamo aggiunto,se si toglie quella riga comunque se si eseguono delle configurazioni nel pannello originale quelle nostre vengono cancellate.
Si dovrebbe utilizzare un altro crond con altro crontab.
Sia il pacchetto wol che pianificazione wifi richiederanno il crond custom attivo e dovranno agire sulle proprie righe senza cancellare le altre.
Come si fanno a gestire le dipendenze e le condivisioni fra pacchetti?

gnommo
30-09-2010, 08:35
La tua modifica del target snr, mi ha fatto venire la curiosità se sul dgn3500 la questione è chiusa.
Confermi che io in adsl1, comunque non potrei testarla in alcun modo?
Perchè ho trovato una discussione dove parlano della modifica snr sul ar7.
In pratica con un flag attivano il SRA (seamless adaptive rate) ed impostano un margin threshold a 0.5db
Sul dgn3500 nel dsl_cpe_control c'è un comando per sapere/impostare il rate adaptive e ci sono tre possibilità:
at init
dynamic
dynamic SOS
pare che dynamic SOS e SRA siano la stessa cosa.
A me è impostato su dynamic se cerco di forzarlo a SOS mi da errore.
Un altro comando permette di impostare un Delta SNR margin fra -0.5db e 0.5db ma anche questo non me lo fa impostare.
Non è che su adsl2+ si può impostare SOS (o è già impostato) e si può impostare questo delta snr margin?

cionci
30-09-2010, 08:50
Sul Broadcom si può fare anche in ADSL1. Sono in ADSL1 anche io.

Per farti un esempio di come funziona dbram: come si chiama il comando per interagire con la nvram per il DGN3500 ?

Come si fanno a gestire le dipendenze e le condivisioni fra pacchetti?
Su questo credo che si debba agire al momento dell'installazione del pacchetto. Semplicemente il pacchetto non si installa se non si installa prima il pacchetto con il crond.
Questa notte ho realizzato dbram e routercmd (che ho chiamato routerdb) con degli script bash che richiamano i client di sqlite.

Questo è lo script per installare l'immagine ext3 e far partire il boot.sh:

#!/bin/sh

shares="/tmp/shares"
modules="/lib/modules/mod"
loopdev="/dev/loop0"
mountpath="/tmp/mod_fs"

for i in 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
do
sleep 2
ls $shares | while read line; do
image=`ls $shares/$line/mod_image.bin 2>&1`
if [ "$image" = "$shares/$line/mod_image.bin" ]; then
insmod $modules/mbcache.ko
insmod $modules/jdb.ko
insmod $modules/ext3.ko
insmod $modules/loop.ko
losetup $loopdev $image
mkdir $mountpath
mount -t ext3 $loopdev $mountpath
exec "$mountpath/boot.sh $mountpath"
fi
done
done

gnommo
30-09-2010, 18:51
Se vabbene io procederei così seguendo un layout simile
http://www.dd-wrt.com/wiki/images/3/32/Web-gui-elements.png

abbiamo

<div id="content">

<div id="header"></div>

<div id="menu">
<ul id="menuMainList">
<li class="current">
<div id="menuSub">
<ul id="menuSubList"></ul>
</div>

<div id="main">
<div id="contents"></div>
</div>

<div id="footer"></div>
</div>

Io direi ti tenere questa struttura statica della pagina e,
data la struttura a pacchetti, di popolare il menulist tramite una chiamata ajax ad uno script cgi o php che costruisca dinamicamente (al volo o solo all'installazione di un nuovo pacchetto) menu e sotto menu ed un altra chiamata che costruisca il main.
Utilizzando jquery, il tutto è abbastanza semplice.
Quindi un particolare pacchetto dovrà indicare l'appartenenza ad un particolare categoria in cui avrà una voce dedicata.
Per esempio il pacchetto ssh dovrà informare che appartiene alla categoria Services e dovrà informare se vuole un sottomenu dedicato o solo un div dedicato nella sezione Services nel sotto menu Services di default.
Così come in esempio:
http://www.dd-wrt.com/demo/Services.asp

Troppo complicato? :D

cionci
30-09-2010, 23:54
Io te l'ho detto...odio fare le pagine web :Prrr:
Comunque è chiaro, la generazione del menu deve essere fatta dinamicamente. Tramite Ajax + PHP o tramite PHP generando codice JavaScript cambia poco (generando le voci del menu).
Io per ora starei sul semplice, magari con un semplice menu javascript a scomparsa. Se ti prendi tu la briga di tirare su la pagina a me va anche bene quello complicato :sofico:

Senti la proposta... Per i vari servizi (o anche per tutti i pacchetti) sarebbe carino permettere di scegliere:
- avvio al boot
- start
- stop
- uninstall
Basterebbe una cosa semplice:
Nome pacchetto | Version | Stato | Check per l'avvio al boot | Tasto Start/Stop a seconda dello stato | Uninstall

Riguardo all'ordine di avvio, ho già pensato ad un sistema a priorità (se un servizio deve essere avviato dopo un altro, allora deve avere il valore di priorità più alto).

Riguardo a dove mettere le varie possibilità di configurazione. Sì, potremmo fare come hai detto. Una voce globale od un sottomenu. Aggiungo tutto nel database ;)

Sto lavorando sullo script "package"... Sono a buon punto ma devo fare ancora molti test.

Ti do un'anteprima:

!/bin/sh

sqlite="sqlite3"
systemdb="system"

modfs=/tmp/mod_fs

usage()
{
echo "List packages: $0 -l"
echo "List packages (human readable): $0 -ll"
echo "Boot priority listing: $0 -bp"
echo "Reverse boot priority listing: $0 -rbp"
echo "Install package (full path): $0 -i /path/package.tar.gz"
echo "Check for an installed package: $0 -c packagename"
echo "Uninstall package: $0 -u packagename"
}

wrong=1

if [ "$1" = "-c" ]; then
if [ "$2" != "" ]; then
wrong=0
res=`$sqlite $systemdb "SELECT * FROM packages WHERE Name='$2';"`
if [ "$res" = "" ]; then
echo "not installed"
else
echo "installed"
fi
fi
fi

if [ "$1" = "-l" ]; then
$sqlite $systemdb "SELECT * FROM packages;"
wrong=0
fi

if [ "$1" = "-ll" ]; then
$sqlite -column -header $systemdb "SELECT * FROM packages;"
wrong=0
fi

if [ "$1" = "-bp" ]; then
$sqlite $systemdb "SELECT Name FROM packages WHERE Boot=1 ORDER BY Priority ASC;"
wrong=0
fi

if [ "$1" = "-rbp" ]; then
$sqlite $systemdb "SELECT Name FROM packages WHERE Boot=1 ORDER BY Priority DESC;"
wrong=0
fi

if [ "$1" = "-i" ]; then
$sqlite $systemdb "SELECT * FROM packages;"
if [ "$2" != "" ]; then
wrong=0
mkdir $modfs/tmp/_install
cd $modfs/tmp/_install
tar zxf $2
cat scripts/package.descriptor | while read $line; do
echo $line
done

#check if package is installed
res=`package -c $PKG_NAME`
if [ "$res" = "installed" ]; then
echo "Unable to install: '$PKG_NAME' already installed"
rm -rf $PKG_NAME/_install
exit 1
fi

#check for dependencies
for dep in $PKG_DEPENDENCIES; do
res=`package -c $dep`
if [ "$res" = "not installed" ]; then
echo "Unable to install: missing dependence '$dep'"
rm -rf $modfs/tmp/_install
exit 1
fi
done

mkdir $modfs/packs/$PKG_NAME
mv * $modfs/packs/$PKG_NAME/
$modfs/packs/$PKG_NAME/scripts/install.sh
fi
fi


if [ "$wrong" = "1" ]; then
usage
exit 1
fi

exit 0

package.descriptor ha questa struttura (aggiornato con le nuove informazioni):
PKG_NAME=telnet
PKG_VERSION=0.1
PKG_DEPENDENCIES=pippo pluto
PKG_STARTATBOOT=1
PKG_PRIORITY=1
PKG_GROUP=Services
PKG_SUBGROUP=Telnet

cionci
01-10-2010, 11:09
total used free shared buffers
Mem: 29368 28808 560 0 2840
Swap: 0 0 0
Total: 29368 28808 560
:eek:
Mi sembra impossibile :eek:
Magari finisce tutto nel tmpfs o nel ramfs ? Come faccio a modificarne la dimensione ?

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/mtdblock0 4480 4480 0 100% /
tmpfs 16 0 16 0% /mnt
/dev/sda1 2092348 110320 1982028 5% /tmp/mnt/usb0/part1
/dev/sda5 2642660 101868 2540792 4% /tmp/mnt/usb0/part5

Il tmpfs tra l'altro è inutilizzato: /mnt è vuota.

cionci
01-10-2010, 11:14
# mount
/dev/mtdblock0 on / type squashfs (ro)
/proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
tmpfs on /mnt type tmpfs (rw)
none on /proc/bus/usb type usbfs (rw)

kwb
01-10-2010, 12:16
Interessante il progetto... Sebbene non abbia un router netgear voglio seguire per vedere fin dove arrivate...
Vorrei poter dare la mia disponibilità per un'interfaccia html + css ma non so se avrei tempo di farla... Lo avessi saputo prima mi sarei proposto! :(

cionci
01-10-2010, 12:23
Lo avessi saputo prima mi sarei proposto! :(
Sei sempre in tempo :D

kwb
01-10-2010, 15:16
Sei sempre in tempo :D

Ma giusto per sapere...
Si tratta semplicemente di fare un'interfaccia grafica partendo dalla html scarno ( visto che immagino di non poter usare dei miei tag, credo siano collegati a qualche funzione php magari? ) e impaginarlo col css?

cionci
01-10-2010, 15:44
Ma giusto per sapere...
Si tratta semplicemente di fare un'interfaccia grafica partendo dalla html scarno ( visto che immagino di non poter usare dei miei tag, credo siano collegati a qualche funzione php magari? ) e impaginarlo col css?
Volendo puoi usare qualsiasi cosa ;) Per ora non c'è alcuna funzione PHP definita. Quindi ci sarebbe da creare la struttura da includere nei nostri script che si occupano di lavorare sulle opzioni vere e proprie del router.

Basta metterci d'accordo. In pratica quello che dobbiamo fare sono delle pagine php. Quindi in teoria tu potresti occuparti di grafica (non importa fare cose immense, anzi, meglio una cosa leggera) + CSS + HTML e della generazione tramite PHP dei menu. Il tutto a tua completa fantasia, magari prendendo spunto da quanto abbiamo postato qualche post fa ed utilizzando i classici colori Netgear, giusto per richiamare un po' l'interfaccia del router.
Per la generazione dei menu si tratta semplicemente di accedere ad alcune tabelle sqlite tramite php.

Poi per la parte di "azione" ci potremmo pensare noi. Basta che tu ci dia delle direttive per l'impaginazione delle form ;)

Se anche non riuscissi a scrivere la parte PHP per impostare il nostro lavoro, ci basterebbe anche una impostazione generale dal punto di vista HTML.

kwb
01-10-2010, 18:15
Se anche non riuscissi a scrivere la parte PHP per impostare il nostro lavoro, ci basterebbe anche una impostazione generale dal punto di vista HTML.
Eh no non ci riuscirei perchè non conosco il PHP... Comunque se ho carta bianca si fa interessante la cosa...
Entro quanto sperate/volete concludere? O è a tempo perso la cosa?

cionci
01-10-2010, 18:21
Diciamo che se ci facessi una interfaccia anche primitiva nei prossimi giorni sarebbe meglio. Anche proprio tirata via, giusto per definire le classi css e la struttura da usare per le form (per non ritornare a mettere le mani da capo nelle form). Poi la puoi davvero sviluppare per intero quando vuoi.
Comunque sentiamo gnommo, non so se stava o meno preparando qualcosa.

Io credo di finire il backend entro i prossimi giorni.

kwb
01-10-2010, 19:48
Si il fatto è che dovreste, per lo meno, shottarmi qualche pagina del router così da capire come è fatta l'interfaccia...

gnommo
01-10-2010, 20:35
Si il fatto è che dovreste, per lo meno, shottarmi qualche pagina del router così da capire come è fatta l'interfaccia...

Quella del router è orrida fatta di frame
http://interface.netgear-forum.com/DGN2000/start.htm
I menu non posso stare in quella posizione altrimenti scorrerli tutti diventa scomodissimo

Un layout del genere invece,perlomeno per me, risulta più comodo ed ordinato
http://www.dd-wrt.com/wiki/images/3/32/Web-gui-elements.png

Tutte le voci del menu devono essere caricate dinamicamente, quindi la struttura deve contenere i div da riempire. Io insisto che con una chiamata ajax e con jquery è facilissimo riempirli, mentre il file contente i menu viene rigenerato solo quando viene installato un nuovo pacchetto, ti voglio invece a generare tutta la pagina da php ed inserire i menu nel posto giusto :D
Lo stesso per per il corpo della pagina, penserei di allegare un file ad ogni pacchetto contenente il corpo che deve essere mostrato e caricarlo nella struttura tramite ajax. Sono fissato dallo svincolare il router da ogni carico :D

cionci
01-10-2010, 21:04
Intanto qui trovi un po' lo stile delle pagine interne: ftp://downloads.netgear.com/files/DGN2200_UM_30Mar10.pdf
Qui ci sono un paio di screen:
http://www.mediafire.com/?zizsc7sf4gdfm9p
http://www.mediafire.com/?8c8x4eqfeipk7fn

Ovviamente usa il tutto come ispirazione per i colori, perché come ti ha detto gnommo, l'interfaccia del router fa schifo.
Quindi niente frame e pagina che si ricarica ogni volta. Quella del DD-WRT secondo me è ottima.

kwb
01-10-2010, 23:30
Beh non sembra complicato... Magari domani faccio qualcosa su photoshop e se ho terminato vi posto la "preview" di ciò che ne vorrei tirar fuori coi css...

Ma posso usare immagini di sfondo o solo colori?

cionci
02-10-2010, 07:35
Deve essere leggerissimo. Solo colori al limite qualche immagine per le tab dei menu, ma sarebbe il caso di sfondarle e di metterci sotto i colori.
Poi a questo punto all'architettura con jquery e ajax ci pensa gnommo :D

Una volta che abbiamo la struttura della pagina...il php lo contatta gnommo con Ajax e carichiamo solo la parte della pagina che ci interessa, ovvero quella che avrà i vari comandi.

Chiaramente in ogni pacchetto ci dovrà essere anche un file php che rispetta i requisiti. Darà quindi in output la pagina rispondendo ad un dato comando (che so, ?action=view).
Quello che odio è la validazione delle form... C'è qualcosa di precostruito in modo da fare tutto client side ?

Servirebbe qualcosa del tipo:
- checkInteger(form, field, required)
- checkIntegerRange(form, field, max, min, required)
- checkFloatingPoint(form, field, required)
- checkString(form, field, required)
- checkIPAddress(form, field, required)

Si potrebbero mettere anche direttamente nell'onchange dei vari campi. Magari si semplifica tutto.

kwb
02-10-2010, 10:22
Deve essere leggerissimo. Solo colori al limite qualche immagine per le tab dei menu, ma sarebbe il caso di sfondarle e di metterci sotto i colori.
Poi a questo punto all'architettura con jquery e ajax ci pensa gnommo :D

Ok capito!

kwb
03-10-2010, 10:58
Eccomi, ho fatto un mock-up dell'interfaccia... Essenzialmente ho copiato quella del DD-WRT cambiandoci i colori.

http://c.imagehost.org/t/0867/Preview.jpg (http://c.imagehost.org/view/0867/Preview)

Alcune note:
Visto che mi devo tenere sul leggero, non utilizzerò praticamente alcuna immagine, se non quelle per la linea divisoria tra le varie voci del sottomenù. Tutto ovviamente se mi è permesso...
Se si vuole si può aggiungere un'immagine nell'header, ditemi voi se si e cosa.
Il menù sarà tipo questo: http://www.dynamicdrive.com/style/csslibrary/item/two-level-css-tabs-menu/ . Ovviamente tutto CSS senza scripting dietro.
I bottoni in basso saranno simili, anche perchè riprodurre la stessa grafica dei bottoni HTML è difficile per me in Photoshop. Quindi non aspettateveli identici.
Le dimensioni dei testi saranno tutte in em ( lo specifico perchè nell'immagine ho messo i pt, era una comodità con PS ).
Le dimensioni dei div pensavo di farle in percentuale ( se si riesce ), così da fare un'interfaccia a "schermo pieno".
Il font utilizzato sarà Arial
I div 'paralleli' ( due alla stessa altezza per intenderci ) avranno le seguenti dimensioni: il più grande 70% e l'altro 30% ( ovviamente ).


Se avete note o appunti da farmi, ditemi pure! :D

Chiudo dicendo che ho difficoltà a testarlo con IE 7 e inferiore a risoluzioni differenti visto che non ho computer con tale browser installato

gnommo
03-10-2010, 11:50
Eccomi, ho fatto un mock-up dell'interfaccia... Essenzialmente ho copiato quella del DD-WRT cambiandoci i colori.

http://c.imagehost.org/t/0867/Preview.jpg (http://c.imagehost.org/view/0867/Preview)

Alcune note:
Visto che mi devo tenere sul leggero, non utilizzerò praticamente alcuna immagine, se non quelle per la linea divisoria tra le varie voci del sottomenù. Tutto ovviamente se mi è permesso...
Se si vuole si può aggiungere un'immagine nell'header, ditemi voi se si e cosa.
Il menù sarà tipo questo: http://www.dynamicdrive.com/style/csslibrary/item/two-level-css-tabs-menu/ . Ovviamente tutto CSS senza scripting dietro.
I bottoni in basso saranno simili, anche perchè riprodurre la stessa grafica dei bottoni HTML è difficile per me in Photoshop. Quindi non aspettateveli identici.
Le dimensioni dei testi saranno tutte in em ( lo specifico perchè nell'immagine ho messo i pt, era una comodità con PS ).
Le dimensioni dei div pensavo di farle in percentuale ( se si riesce ), così da fare un'interfaccia a "schermo pieno".
Il font utilizzato sarà Arial
I div 'paralleli' ( due alla stessa altezza per intenderci ) avranno le seguenti dimensioni: il più grande 70% e l'altro 30% ( ovviamente ).


Se avete note o appunti da farmi, ditemi pure! :D

Chiudo dicendo che ho difficoltà a testarlo con IE 7 e inferiore a risoluzioni differenti visto che non ho computer con tale browser installato
Ottimo! Ti è consentito tutto :D, se vuoi aggiungere qualche altra immagine fai pure.

kwb
03-10-2010, 12:06
Ottimo! Ti è consentito tutto :D, se vuoi aggiungere qualche altra immagine fai pure.

Beh meglio di no, perchè se no poi mi lascio prendere la mano! :D

gnommo
03-10-2010, 13:34
Beh meglio di no, perchè se no poi mi lascio prendere la mano! :D

Lasciati prendere pure la mano :D, tanto tutto quello che vedi intorno a dove sta scritto Configuration here, sarà caricato solo una volta.

kwb
03-10-2010, 15:29
Lasciati prendere pure la mano :D, tanto tutto quello che vedi intorno a dove sta scritto Configuration here, sarà caricato solo una volta.

Intendi dire che la parte che viene caricata più di una volta è solo quella delle configurazioni?
Ma ad esempio i menù? E l'help?
La barra dei bottoni in basso? Penso che cambino di pagina in pagina...

cionci
03-10-2010, 15:36
Ottimo kwb ;)
Quello che volevo sapere è quale funzionalità intendi eseguire con i bottoni in basso a sinistra.

Nota che all'interno delle pagina ci potranno anche essere funzionalità eterogenee. Quindi form diversi e divisi che avranno i propri bottoni.

Metto insieme tutto e poi posto la prima immagine ext3 da mettere sulla chiavetta usb, così nel frattempo gnommo potrà lavorare per testare ed adeguare il tutto per il DGN3500.

Da ora in poi potrò dedicare molto meno tempo al progetto :(

cionci
03-10-2010, 16:40
Per gnommo:

Questo è mod_setup.sh:
#!/bin/sh

shares="/tmp/shares"
modules="/lib/modules/mod"
loopdev="/dev/loop0"

for i in 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
do
sleep 2
ls $shares | while read line; do
image=`ls $shares/$line/mod_image.bin 2>&1`
if [ "$image" = "$shares/$line/mod_image.bin" ]; then
insmod $modules/mbcache.ko
insmod $modules/jbd.ko
insmod $modules/ext3.ko
insmod $modules/loop.ko
losetup $loopdev $image
# debug
mountpath="$shares/$line/modfs"
# release
#mountpath="/tmp/modfs"
mkdir -p $mountpath
mount -t ext3 $loopdev $mountpath
exec "$mountpath/boot.sh $mountpath"
exit 0
fi
done
done
E' il file che viene eseguito all'avvio del router e che verifica la presenza di mod_image.bin nella root della chiavetta. Esegue boot.sh che si trova nella root dell'immagine.
boot.sh setta delle variabili d'ambiente, abbia tutti i pacchetti che devono essere fatti partire al boot ed avvia il demone http (nel mio caso, anche se ancora non l'ho fatto).
Tu potresti anche evitare di lanciare boot.sh ed eseguire tutto in mod_setup.sh (visto che lo esegui da http, mentre nel mio caso è direttamente nel firmware).

Quello che dovresti fare principalmente è:
- procedura per rilevare il DGN3500 in router_detect
- per il pacchetto telnet: comandi per telnet_up e telnet_down in install.sh e uninstall.sh per il DGN3500
- per creare il pacchetto telnet: crei il tar.gz del contenuto della directory package/telnet (solo del contenuto non deve essere presente la directory "telnet")
- testare il programma package e routerdb

Io ho usato busybox 1.01 (per compatibilità, visto che sul router era presente la 1.00, mi immagino che sia lo stesso anche sul DGN3500). Quindi in teoria, potremmo mettere tutto busybox 1.01 nell'immagine. Basterebbe poi lanciare telnetd modificando il percorso di bin/sh per avere il nuovo busybox in telnet (questa è una soluzione temporanea, almeno fino a quando non fixo il problema dell'accesso tramite login). L'unico inconveniente è che il demone http del DGN3500 non avrebbe il path modificato, quindi non vedrebbe busybox modificato.
Per rendere il tutto il più possibile congruente userei un demone httpd personalizzato anche sul DGN3500, ma a te la scelta ;)
In questo modo potremmo utilizzare un boot.sh identico per tutti i router. Anche se possiamo comunque discriminare in base a "device".

Attualmente di routerdb e package funziona tutto (dbram l'ho cassato, era ridondante). Si possono installare e rimuovere pacchetti, avviare e stoppare i relativi servizi. Comunque il funzionamento è descritto se dai il comando senza opzioni.
Ho dovuto aggirare i limiti e i bug di busybox, per questo sarebbe bello poter usare lo stesso identico busybox per tutti ;)

Ho caricato mod_image.bin qui (per gli altri: non aggiunge alcuna funzionalità, non lo scaricate): http://www.mediafire.com/?4en788s732nqsuw

Quello che posso aggiungere prossimamente:
- caricamento dell'httpd (magari tramite un pacchetto, quello di busybox 1.17 magari, forse addirittura meglio di mini_httpd) e configurazione di PHP
- creazione dei link simbolici ai file contenuti nelle dir bin, www, lib del pacchetto nelle dir dell'immagine al momento dell'installazione e rimozione al momento della disinstallazione

Tu invece potresti creare un pacchetto per la stampante. Per i moduli usa la dir data/DGN3500, ovviamente quando avrai finito porterò il tutto sul DGN2200.

Che ne dici ?

Attualmente ho un bug sul mio router, il pacchetto telnet non si avvia e non capisco perché. Mentre lanciando boot.sh da telnet si avvia tranquillamente :eek: Devo ancora investigare a fondo.

kwb
03-10-2010, 17:38
Ottimo kwb ;)
Quello che volevo sapere è quale funzionalità intendi eseguire con i bottoni in basso a sinistra.

Nota che all'interno delle pagina ci potranno anche essere funzionalità eterogenee. Quindi form diversi e divisi che avranno i propri bottoni.

Metto insieme tutto e poi posto la prima immagine ext3 da mettere sulla chiavetta usb, così nel frattempo gnommo potrà lavorare per testare ed adeguare il tutto per il DGN3500.

Da ora in poi potrò dedicare molto meno tempo al progetto :(

Ma che ne so, io faccio la grafica, voi mettete la programmazione...
Io l'ho messo perchè pensavo vi servisse, se non vi serve la piallo via.... Ditemi voi...
Per i form io do uno stile generico... È ovvio che poi le rifiniture si fanno al termine del vostro lavoro di programmazione... Anche perchè di quello che state facendo, dal punto di vista della programmazione, ci capisco molto poco

cionci
03-10-2010, 18:24
Ero solo per capire per cosa li avevi pensati e per chiarirti come sono poi le pagine del router ;)
Chiaro che ora tu possa dare solo uno stile approssimativo ora.

cionci
04-10-2010, 11:05
Attualmente ho un bug sul mio router, il pacchetto telnet non si avvia e non capisco perché. Mentre lanciando boot.sh da telnet si avvia tranquillamente :eek: Devo ancora investigare a fondo.
Nuova versione di boot.sh che corregge questo problema:
#!/bin/sh


# $1 is full path of boot.sh

export PATH=$PATH:$1/bin
export LD_LIBRARY_PATH=$1/lib:$LD_LIBRARY_PATH

export sqlite="sqlite3"
export modfs="$1"
export routerdb="routerdb"
export package="package"
export dbdir="$1/db"
export systemdb="$dbdir/system"
export device=`router_detect`


# remove tmp contents
rm -rf $1/tmp

# setting up startup log
mkdir -p $1/tmp/log

echo "* Booting up..." >> $1/tmp/log/startup.log 2>&1
echo "* Wait for router to settle" >> $1/tmp/log/startup.log 2>&1
sleep 5

# può essere tolto una volta verificato che il telnet funzioni all'avvio sulla porta 23
telnetd -p 24 -l /bin/sh

# start each package that must be started at boot
$package -bp | while read line; do
echo "* Starting package $line..." >> $1/tmp/log/startup.log 2>&1
$sqlite $systemdb "UPDATE Packages SET State=0 WHERE Name='$line';" >> $1/tmp/log/startup.log 2>&1
$package -start $line >> $1/tmp/log/startup.log 2>&1
if [ "$?" = "0" ]; then
echo "* Package $line started" >> $1/tmp/log/startup.log 2>&1
else
echo "* Failed starting package $line" >> $1/tmp/log/startup.log 2>&1
fi
done

gnommo
04-10-2010, 16:11
Sto procedendo...
non so come ma sono due volte che piallo la partizione ext3...
cioè al successivo reboot o rimontaggio la partizione è vuota, e ancora non ci ho acceduto minimamente in scrittura.
Mi tocca ricopiare l'originale sulla penna :muro:

cionci
04-10-2010, 16:15
Strano, a me non è mai successo :confused:
Hai per caso richiamato boot.sh ?
In tal caso ricordati di passargli sempre il path completo come argomento.

Nella pausa pranzo ho risolto il problema che avevo con il login tramite telnet. Ho dovuto modificare il sorgente di BusyBox perché non funzionava con le password in chiaro.
Il file passwd com'è sul DGN3500 ? Pensa che sul DGN2200 avevano scritto male il file passwd (che creano ad ogni boot) ed avevano lasciato una carattere strano in fondo ad ogni riga e la lettura della shell quindi non includeva il carattere strano. Così mi diceva che non trovava la shell.

gnommo
04-10-2010, 16:35
Strano, a me non è mai successo :confused:
Hai per caso richiamato boot.sh ?
In tal caso ricordati di passargli sempre il path completo come argomento.

Nella pausa pranzo ho risolto il problema che avevo con il login tramite telnet. Ho dovuto modificare il sorgente di BusyBox perché non funzionava con le password in chiaro.
Il file passwd com'è sul DGN3500 ? Pensa che sul DGN2200 avevano scritto male il file passwd (che creano ad ogni boot) ed avevano lasciato una carattere strano in fondo ad ogni riga e la lettura della shell quindi non includeva il carattere strano. Così mi diceva che non trovava la shell.
Non ho fatto partire boot.sh
il file passwd è in chiaro, io invece non riesco a loggarmi come root, ho provato a modificare in vari modi il file o a far partire un telnet alternativo, ma non si riesce.

cionci
04-10-2010, 16:55
Non ho fatto partire boot.sh
il file passwd è in chiaro, io invece non riesco a loggarmi come root, ho provato a modificare in vari modi il file o a far partire un telnet alternativo, ma non si riesce.
Ci sta che abbia anche tu un carattere strano a fine riga ?
Riesci a loggarti come un altro utente ? Gli utenti sono differenziati ? Sul DGN2200 no. Hanno tutti lo stesso id.

gnommo
05-10-2010, 08:23
Mi serve inserire busybox, perchè comandi che hai utilizzato nei tool mancano nel firmware.
Io sto usando la 1.13, pensavo di compilare tutti i comandi disponibili. Ma visto che all'interno ci sono anche telnetd,sshd etc, poi come si fa con i pacchetti? Per abilitarli sia nell'interfaccia che all'avvio, pensavo di fare dei pacchetti senza gli eseguibili ma solo con le informazioni per l'avvio e per l'interfaccia.

Ho arrangiato in questo modo router_detect, non mi è venuto in mente niente di meglio :D

#!/bin/sh

if [ -f param ]; then
board_id=`param get board_id`
if [ "$board_id" = "U12L146T00_NETGEAR" ]; then
echo "DGN2200"
fi
else
if [ -f /etc/svn.info ]; then
board_id=`grep BOARD_ID /etc/svn.info`
if [ "$board_id" = "BOARD_ID: DGN3500_16M" ]; then
echo "DGN3500"
fi
fi
fi



Mentre mod_setup me la sono aggiustata per il momento così:

#!/bin/sh

/bin/echo "Content-type: text/html\n"

export PATH=/sbin:/bin:/usr/sbin:/usr/bin
shares="/mnt/shares"
modules="."
loopdev="/dev/loop0"

if [ -e $loopdev ];
then
echo "Script già avviato"
exit 1
fi


ls $shares | while read line; do
image=`ls $shares/$line/mod_image.bin 2>&1`
if [ "$image" = "$shares/$line/mod_image.bin" ]; then
insmod $shares/$line/jbd.ko
insmod $shares/$line/ext3.ko
mknod $loopdev b 7 0
$shares/$line/losetup $loopdev $image
# debug
mountpath="$shares/modfs"
# release
#mountpath="/tmp/modfs"
mkdir -p $mountpath
mount -t ext3 $loopdev $mountpath
# exec "$mountpath/boot.sh $mountpath"
cat >>/etc/samba/smb.conf <<EOF
[MODFS]
path=$mountpath
read list = admin,nobody
write list = admin,nobody
EOF
exit 1
fi
done

cionci
05-10-2010, 08:48
In nvram non hai alcuna variabile che possa identificare il router ?

Anche io penso che comincerò ad usare busybox esterno, anche per coerenza. Certo mi preoccupa un po' usare un busybox in una versione così diversa da quella del router. Questo perché una volta settate le variabili d'ambiente, sia da telnet che da http (almeno per me) il busybox di default sarà di fatto quello esterno. In questo modo anche i programmi interni al router che vengono invocati da telnet e da php utilizzeranno i comandi esterni che possono avere anche comportamenti diversi dalla versione 1.00.
Quale compilatore usiamo ? I tuoi che versione sono ?

gnommo
05-10-2010, 09:21
In nvram non hai alcuna variabile che possa identificare il router ?

No, al massimo c'è un file contenente il product id, ma in nvram niente.


Anche io penso che comincerò ad usare busybox esterno, anche per coerenza. Certo mi preoccupa un po' usare un busybox in una versione così diversa da quella del router. Questo perché una volta settate le variabili d'ambiente, sia da telnet che da http (almeno per me) il busybox di default sarà di fatto quello esterno. In questo modo anche i programmi interni al router che vengono invocati da telnet e da php utilizzeranno i comandi esterni che possono avere anche comportamenti diversi dalla versione 1.00.
Quale compilatore usiamo ? I tuoi che versione sono ?
Non vedo il problema, ho dato un'occhiata la maggior parte dei programmi del firmware comunque utilizzeranno la busybox interna perchè utilizzano percorsi assoluti per richiamare i comandi.
Anche per il compilatore finora ho usato una commistione
di busybox interna,busybox compilata, librerie precompilate,programmi compilati, programmi precompilati, e non è sorto alcun problema.
Penso che anche sul dgn3500 andrà messo un altro server http perchè se metto modfs fuori dai percorsi raggiungibili con la condivisione, ovviamente non posso raggiungere le pagine web presenti in modfs con mini_httpd del firmware.
Anche se dobbiamo essere parsimoniosi con tutti questi server duplicati per la memoria, sul dgn3500, samba per ogni disco condiviso utilizza 16MB di cache, con due dischi condivisi la memoria libera arriva a 2MB.

cionci
05-10-2010, 12:33
Mettere modfs in percorsi visibili dalla condivisione purtroppo sarebbe rischioso.
In teoria modificando il firmware originale potresti ovviare tranquillamente a questo problema mettendo un link alla dir di modfs con le pagine.

Vero, in qualche modo bisogna regolarci sulla memoria. L'ideale sarebbe poter abilitare lo swap, ma senza ricompilare il kernel non si può. Almeno sul DGN2200.
Vediamo cosa scegliere...il server web di busybox (che può funzionare anche con PHP) o mini_httpd patchato. A questo punto sarebbe meglio scegliere quello che richiede meno ram.

Non c'è modo di configurare un demone samba unico per tutte le condivisioni ?

Riguardo al compilatore ? Cerchiamo di uniformare, almeno abbiamo anche le stesse librerie.

gnommo
05-10-2010, 13:19
Mettere modfs in percorsi visibili dalla condivisione purtroppo sarebbe rischioso.
In teoria modificando il firmware originale potresti ovviare tranquillamente a questo problema mettendo un link alla dir di modfs con le pagine.

Vero, in qualche modo bisogna regolarci sulla memoria. L'ideale sarebbe poter abilitare lo swap, ma senza ricompilare il kernel non si può. Almeno sul DGN2200.
Vediamo cosa scegliere...il server web di busybox (che può funzionare anche con PHP) o mini_httpd patchato. A questo punto sarebbe meglio scegliere quello che richiede meno ram.

Non c'è modo di configurare un demone samba unico per tutte le condivisioni ?

Riguardo al compilatore ? Cerchiamo di uniformare, almeno abbiamo anche le stesse librerie.

Io uso il 4.1.1 per avere la massima compatibilità con tutte le applicazioni/librerie già compilate per dd-wrt/openwrt

gnommo
05-10-2010, 14:28
Ho caricato dentro busybox 1.1.3
http://www.mediafire.com/download.php?ap3ba0p51cokc9l

cionci
05-10-2010, 15:30
Ho caricato dentro busybox 1.1.3
http://www.mediafire.com/download.php?ap3ba0p51cokc9l
Un link al compilatore ?
Comunque lo devo ricompilare, altrimenti l'applicazione login non funziona con le password in chiaro ;)

cionci
05-10-2010, 15:37
Un'altra cosa, non è un po' troppo cicciotta busybox con 1,6 MB ?
Non vorrei occupasse troppa memoria. Se dovessimo fare uno script che monitora l'usb per eventuali inserimenti, porterebbe via un bel po' di memoria. Così come gli eventuali login tramite telnet.
Ti faccio vedere come l'ho ridotta io.

Secondo me per certi programmi come i demoni telnet, http e ssh converrebbe compilare la versione di busybox da sola, così si riduce ulteriormente la memoria occupata dall'eseguibile.

gnommo
05-10-2010, 16:33
Un'altra cosa, non è un po' troppo cicciotta busybox con 1,6 MB ?
Non vorrei occupasse troppa memoria. Se dovessimo fare uno script che monitora l'usb per eventuali inserimenti, porterebbe via un bel po' di memoria. Così come gli eventuali login tramite telnet.
Ti faccio vedere come l'ho ridotta io.

Secondo me per certi programmi come i demoni telnet, http e ssh converrebbe compilare la versione di busybox da sola, così si riduce ulteriormente la memoria occupata dall'eseguibile.

Dici? Ho caricato in memoria tre telnetd su porte diverse,ovviamente tutti con un client collegato, 3 httpd su porte diverse, la memoria è diminuita di 3 0 400Kb.
Io non vedo alcuna differenza.

cionci
05-10-2010, 17:05
In teoria l'eseguibile viene caricato in memoria... Ci sta che essendo lo stesso eseguibile questo venga caricato una sola volta in memoria ? Però il primo busybox dovrebbe venire caricato, no ?

Quindi comunque un po' di memoria la si spreca. Provo a limitarlo come ho fatto per quello che ho installato sul router (circa 600KB).

Ma nel tuo lo swap si può attivare ?

gnommo
05-10-2010, 17:20
Ma nel tuo lo swap si può attivare ?
no

cionci
05-10-2010, 17:22
Ehm il link alla toolchain :D

gnommo
05-10-2010, 17:29
Ehm il link alla toolchain :D

Boh l'ho compilata,
Qui già compilata spero non abbiano cambiato versione,
http://www.dd-wrt.com/dd-wrtv2/downloads/others/sourcecode/toolchains/current-toolchains.tar.bz2

cionci
05-10-2010, 17:37
Non è meglio se mi metti la tua su qualche host ? Almeno siamo sicuri.

gnommo
05-10-2010, 18:12
Non è meglio se mi metti la tua su qualche host ? Almeno siamo sicuri.

http://www.mediafire.com/download.php?5kcjy0kdnnzf8b5

gnommo
05-10-2010, 18:39
Io passo all'interfaccia web, pare che httpd sia più leggero in termini di ram di mini_httpd, l'unico problema è che senza file di configurazione i cgi li esegue solo dal path cgi, risolto questo posso anche killare mini_httpd e far funzionare anche l'interfaccia del router su httpd.
Nel frattempo continuo a fare prove varie su routedb e package per vedere se esce qualche bug.

cionci
05-10-2010, 18:46
E perché non possiamo usare il file di configurazione ?

http://www.mediafire.com/download.php?g4gcg91y786lu73

Qui c'è busybox 1.1.3 compilato con il tuo compilatore. Ho rimosso un po' di roba e si risparmia un bel po'. Guarda pure, ho allegato il .config e dimmi cosa secondo te servirebbe.
Ho anche allegato il file che ho modificato per far funzionare l'applet login con le password in chiaro in passwd.

Qualche giorno fa ho fatto qualche prova con dropbear e purtroppo non funziona :( Non mi fa fare il login. Dice sempre che la password è sbagliata.

cionci
05-10-2010, 18:56
Ah, ho aggiunto un'altra utility. Si chiama execcmd e serve per eseguire i comandi presenti nel db in modo più agevole.
Ecco qua:
#!/bin/sh

if [ "$1" != "" ]; then
cmd=`$routerdb get $device $1`
if [ "$2" = "print" ]; then
echo $cmd
fi
eval $cmd
exit $?
fi

echo "Usage: `basename $0` command [print]
exit 2

In questo modo diventa un po' più snello ;)
Ad esempio:

execcmd telnet_up

"print" serve in fase di debug per vedere il comando eseguito.

carlo8280
05-10-2010, 19:23
scusate se mi intrometto col firmware di cionci mi succede una cosa strana cioè a volte in maniera totalmente random si freeza la connessione wireless e dopo qualche secondo torna su, è successo a qualcun altro perchè col firmware originale non succedeva, magari è solo una casualità

cionci
05-10-2010, 20:31
scusate se mi intrometto col firmware di cionci mi succede una cosa strana cioè a volte in maniera totalmente random si freeza la connessione wireless e dopo qualche secondo torna su, è successo a qualcun altro perchè col firmware originale non succedeva, magari è solo una casualità
Mi sembra strano. Prova a fare un reset alle impostazioni di fabbrica e riprova. Era successa una cosa simile ad un altro, con il firmware originale però.

gnommo
06-10-2010, 07:51
E perché non possiamo usare il file di configurazione ?

http://www.mediafire.com/download.php?g4gcg91y786lu73

Qui c'è busybox 1.1.3 compilato con il tuo compilatore. Ho rimosso un po' di roba e si risparmia un bel po'. Guarda pure, ho allegato il .config e dimmi cosa secondo te servirebbe.
Ho anche allegato il file che ho modificato per far funzionare l'applet login con le password in chiaro in passwd.

Qualche giorno fa ho fatto qualche prova con dropbear e purtroppo non funziona :( Non mi fa fare il login. Dice sempre che la password è sbagliata.
Testato dropbear e telnet, l'autenticazione avviene correttamente senza alcuna modifica, a me ha sempre funzionato con le password in chiaro.

cionci
06-10-2010, 08:42
Testato dropbear e telnet, l'autenticazione avviene correttamente senza alcuna modifica, a me ha sempre funzionato con le password in chiaro.
Ora provo a compilarlo con il tuo compilatore e a tenerlo senza la modifica...
Con quali opzioni hai dato il configure ?

gnommo
06-10-2010, 09:09
Ora provo a compilarlo con il tuo compilatore e a tenerlo senza la modifica...
Con quali opzioni hai dato il configure ?
Intendi busybox,telnet o dropbear?
Dropbear ho utilizzato quello già compilato che si trova dove prendo tutti i programmi già precompilati.
Busybox, alternativamente o quella presente nel firm o la 1.1.3 è la stessa cosa.

cionci
06-10-2010, 09:10
dropbear...avevo tentato di ricompilarlo.
Ora provo quello già precompilato.

gnommo
06-10-2010, 09:12
dropbear...avevo tentato di ricompilarlo.
Ora provo quello già precompilato.
basta che lo avvi con -E e vedi che errore ti da, ti deve pur dare una motivazione perchè fallisce il login

cionci
06-10-2010, 09:19
basta che lo avvi con -E e vedi che errore ti da, ti deve pur dare una motivazione perchè fallisce il login
L'avevo giù fatto...ma dice bad password... Provo quello precompialto.

gnommo
06-10-2010, 09:25
ho un problema con sqlite3, in pratica select,insert funzionano la delete no, dice SQL error: database disk image is malformed
ho provato a dare PRAGMA integrity_check; mi dice ok
allora ho provato a creare un altro database e rimettergli lo schema, ma sulla create table mi dice SQL error: file is encrypted or is not a database

cionci
06-10-2010, 09:30
Che sia una questione di librerie ? Se fossi in te lo ricompilerei con lo stesso compilatore. L'avevo ricompilato con il mio.

kwb
06-10-2010, 09:58
Ciao ad entrambi!
Mi sono documentato un po' sul menu che mi ero proposto di implementare, e ho letto che non è troppo compatibile con vecchie versioni dei browser.
Ho quindi optato per questa scelta: http://www.bluelobsterart.com/previews/menu.html
Fatemi sapere se vi sta bene.

cionci
07-10-2010, 07:44
Allora...ho verificato e senza alcun cambiamento, il login funziona con busybox 1.1.3, però solamente usando il tuo compilatore. Evidentemente le configurazioni per la generazione della toolchain preimpostate dalla netgear avevano qualcosa di strano. I moduli del kernel continuano stranamente a funzionare. Boh, misteri...
Secondo me la differenza sta in qualche opzioni di libcrypt (quella funzione crypt in assenza di shadow password dovrebbe ritornare la stringa stessa, mentre con il mio compilatore non lo fa).

gnommo
07-10-2010, 09:48
Anche libsqlite3 si è risolto con con un compilata.
Strano anche il pacchetto precompilato preso su openwrt dava lo stesso errore :muro:

cionci
07-10-2010, 09:52
Strano anche il pacchetto precompilato preso su openwrt dava lo stesso errore :muro:
Ho visto che usano uclibc 0.9.29, non 0.9.28. Magari è per quello ?

cionci
07-10-2010, 09:53
Ciao ad entrambi!
Mi sono documentato un po' sul menu che mi ero proposto di implementare, e ho letto che non è troppo compatibile con vecchie versioni dei browser.
Ho quindi optato per questa scelta: http://www.bluelobsterart.com/previews/menu.html
Fatemi sapere se vi sta bene.
Non sarebbe meglio fare un menu statico, come in dd-wrt ? Penserà poi gnommo tramite Ajax a caricare i sottomenu dinamicamente.

gnommo
07-10-2010, 10:39
Allora httpd di telnet o mini_httpd ?
httpd è più flessibile grazie al file di configurazione si possono aggiungere mime type, l'esecuzione diretta dei .php,
però temo che non si possano eseguire i cgi dovunque, ma nel url ci deve essere /cgi-bin/ per fargli riconoscere che è un cgi.
Quindi non posso sostituirlo al mini_httpd del router per farci girare il menu originale.
mini_httpd, invece è un pò difficoltoso sia l'inserimento dei mime type sia l'esecuzione dei php.
Alla fine io voglio farlo girare sulla porta 80 e killare il mini_httpd originale e mettere il menu originale come opzione.

cionci
07-10-2010, 10:55
Io sinceramente per ora punterei ad ottenere un comportamento identico per entrambi i router. Poi dopo puoi pensare anche a questo.
Altrimenti credo che si inseriscano troppe eccezioni.
httpd mi sembra meglio. Ha di buono che si può anche aggiornare la configurazione in tempo reale, senza riavvviarlo.

gnommo
07-10-2010, 10:59
Io sinceramente per ora punterei ad ottenere un comportamento identico per entrambi i router. Poi dopo puoi pensare anche a questo.
Altrimenti credo che si inseriscano troppe eccezioni.
httpd mi sembra meglio. Ha di buono che si può anche aggiornare la configurazione in tempo reale, senza riavvviarlo.

Quindi quale porta? Così preparo il pacchetto, senza binari, ma solo con i comandi per l'avvio automatico,etc.

cionci
07-10-2010, 11:01
Quindi quale porta? Così preparo il pacchetto, senza binari, ma solo con i comandi per l'avvio automatico,disinstallazione etc.
Boh, anche 81. Ma per httpd vuoi fare un pacchetto ? Non è un componente fondamentale ? Anche perché se si disabilita dopo non è più possibile riabilitarlo.

gnommo
07-10-2010, 11:12
Boh, anche 81. Ma per httpd vuoi fare un pacchetto ? Non è un componente fondamentale ? Anche perché se si disabilita dopo non è più possibile riabilitarlo.

Per non modificare boot.sh, lo si inserisce nel database e si mettono gli script di start e stop, se vogliamo cambiarlo con un comando lo togliamo. Magari se prevediamo la gestione dei pacchetti da interfaccia web, lì non lo rendiamo visibile o disinstallabile.

cionci
07-10-2010, 11:17
Per non modificare boot.sh, lo si inserisce nel database e si mettono gli script di start e stop, se vogliamo cambiarlo con un comando lo togliamo. Magari se prevediamo la gestione dei pacchetti da interfaccia web, lì non lo rendiamo visibile o disinstallabile.
Ok, dai ;)

Riguardo a PHP ? La versione openwrt ti funziona ?

gnommo
07-10-2010, 11:21
Ok, dai ;)

Riguardo a PHP ? La versione openwrt ti funziona ?

Si, ora la testo bene però.
Il php non ha bisogno di un pacchetto si può inserire direttamente,si?

Un'altra cosa riguardo l'interfaccia originale come si fa? Potrebbe generare dei conflitti, cioè se uno va a modificare delle cose nell'interfaccia originale, questa potrebbe sovrascrivere alcune impostazioni settate da noi, per esempio mi è successo con crond,iptables,samba.

cionci
07-10-2010, 11:31
Si, ora la testo bene però.
Il php non ha bisogno di un pacchetto si può inserire direttamente,si?
Mettilo nel pacchetto dell'httpd, no ?
Un'altra cosa riguardo l'interfaccia originale come si fa? Potrebbe generare dei conflitti, cioè se uno va a modificare delle cose nell'interfaccia originale, questa potrebbe sovrascrivere alcune impostazioni settate da noi, per esempio mi è successo con crond,iptables,samba.
Questa è una cosa che non possiamo controllare. Diciamo all'utente che se utilizza un certo pacchetto non deve usare altre cose sul router. Poi chiaramente facciamo in modo che router funzioni con le nostre impostazioni all'avvio. Se ne vengono fatte altre dall'interfaccia originale sono cavoli degli utenti ;)
Ad esempio io ho l'automount (che disabiliterò all'avvio non appena riusciremo a studiare qualcosa di personalizzato) che ogni volta mi va a cambiare passwd rimettendoci i soliti errori.
Il DGN2200 non ha nemmeno crond, fortunatamente...

kwb
07-10-2010, 15:02
Non sarebbe meglio fare un menu statico, come in dd-wrt ? Penserà poi gnommo tramite Ajax a caricare i sottomenu dinamicamente.

Cioè voi volete che io vi spari li solo le due barre dei menu e poi ci pensate voi a riempirle?
Perchè io pensavo funzionasse così: io creo la struttura.
Poi gnommo ( o tu, non so ), prende la parte che crea il sottomenù e la inserisce in una funzione che lo autogenera, con le giuste entrate, al click dei link nel primo menù.

Ditemi voi.

EDIT: E poi guarda che alla fine quello che avevo messo prima è uguale a questo solo che si presenta diversamente :D .
Cmq alla fine pure questa ha problemi di compatibilità coi vecchi browser IE < 7 ... Non so, vediamo di capire che fare... Trovarne uno che sia poi perfettamente compatibile la vedo dura... Anche dal punto di vista dello scripting, non so che livello di programmazione supportino i browser IE6-style... :rolleyes:

cionci
07-10-2010, 15:12
Cioè voi volete che io vi spari li solo le due barre dei menu e poi ci pensate voi a riempirle?
Non solo quello. Le barre dei menu, la struttura dell'intera pagina e lo stile delle form ;)
Magari se potessi anche evidenziare le opzioni dei menu che sono state selezionate sarebbe l'ideale.
Perchè io pensavo funzionasse così: io creo la struttura.
Poi gnommo ( o tu, non so ), prende la parte che crea il sottomenù e la inserisce in una funzione che lo autogenera, con le giuste entrate, al click dei link nel primo menù.
Però credo che sia meglio con un sottomenu statico e sempre visibile invece che con un sottomenu a scomparsa ;)

gnommo
07-10-2010, 17:04
A quanto pare anche il php ha bisogno di una ricompilata :shy:

Quello precompilato è stato configurato così:
./configure' '--target=mips-linux' '--host=mips-linux' '--build=x86_64-linux-gnu' '--program-prefix=' '--program-suffix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--libexecdir=/usr/lib' '--sysconfdir=/etc' '--datadir=/usr/share' '--localstatedir=/var' '--mandir=/usr/man' '--infodir=/usr/info' '--disable-nls' '--enable-shared' '--disable-static' '--disable-rpath' '--disable-debug' '--without-pear' '--disable-spl' '--with-config-file-path=/etc' '--disable-ipv6' '--enable-magic-quotes' '--enable-memory-limit' '--disable-short-tags' '--disable-ctype' '--disable-dom' '--enable-ftp=shared' '--without-gettext' '--without-iconv' '--disable-libxml' '--without-libxml-dir' '--disable-xmlreader' '--disable-xmlwriter' '--disable-mbstring' '--disable-mbregex' '--with-openssl=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-kerberos=no' '--with-openssl-dir=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--enable-session=shared' '--disable-simplexml' '--disable-soap' '--enable-sockets=shared' '--disable-tokenizer' '--with-zlib=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-zlib-dir=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--disable-filter' '--with-curl=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-gd=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--without-freetype-dir' '--with-jpeg-dir=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-png-dir=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--without-xpm-dir' '--without-ttf' '--without-t1lib' '--enable-gd-native-ttf' '--disable-gd-jis-conv' '--with-gmp=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-ldap=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-ldap-sasl=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-mysql=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-pcre-regex=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-pgsql=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-sqlite=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--enable-pdo=shared' '--with-pdo-sqlite=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--enable-xml=shared,/home/nbd/release/ar71xx/staging_dir/mips/usr' '--with-libexpat-dir=/home/nbd/release/ar71xx/staging_dir/mips/usr' '--enable-apc' '--disable-apc-mmap' '--disable-apc-pthreadmutex' '--enable-exif' '--enable-fastcgi' '--enable-force-cgi-redirect' '--enable-discard-path'

Andrebbe tolto --enable-force-cgi-redirect

kwb
07-10-2010, 18:56
Non solo quello. Le barre dei menu, la struttura dell'intera pagina e lo stile delle form ;)
Magari se potessi anche evidenziare le opzioni dei menu che sono state selezionate sarebbe l'ideale.

Però credo che sia meglio con un sottomenu statico e sempre visibile invece che con un sottomenu a scomparsa ;)

In sostanza quello che avevo in mente di fare...
Beh vi farò allora un menu come il primo... Vedo come viene... Anche se mi sa che senza scripting, se non si vuole il cambio col passaggio del cursore sul link, non so cosa venga...

cionci
07-10-2010, 18:59
Un po' di scripting ce lo puoi mettere se ti entra. In pratica fai come se una pagina del router sia stata caricata, ma non sia possibile caricarne una seconda tramite i link nel menu.

kwb
07-10-2010, 19:00
Un po' di scripting ce lo puoi mettere se ti entra. In pratica fai come se una pagina del router sia stata caricata, ma non sia possibile caricarne una seconda tramite i link nel menu.

Quello che posso trovare sulla rete è un menù fatto in CSS + JS. Io però mi limiterei a copincollare il JS perchè ( sebbene simile al C ) non l'ho mai studiato approfonditamente e a quel livello di programmazione non ci sono mai arrivato... Farei fatica a capire che diamine di istruzioni da...

cionci
07-10-2010, 19:02
A quanto pare anche il php ha bisogno di una ricompilata :shy:

Quello precompilato è stato configurato così:

Andrebbe tolto --enable-force-cgi-redirect
Anche --enable-fastcgi non dovrebbe essere necessario.

Credo che vada risolta anche la differenza di versione per uclibc fra il tuo compilatore e quello che usano loro, per altre applicazioni da usare in futuro.
Edit: sono ufficialmente un lammone, non avevo visto che nel buildroot ridotto di OpenWRT c'era già il compilatore :doh:

cionci
07-10-2010, 19:04
Quello che posso trovare sulla rete è un menù fatto in CSS + JS. Io però mi limiterei a copincollare il JS perchè ( sebbene simile al C ) non l'ho mai studiato approfonditamente e a quel livello di programmazione non ci sono mai arrivato... Farei fatica a capire che diamine di istruzioni da...
Allora lascia perdere. Evidenzia il tab del menu corrente, sia il tab del sottomenu corrente con un colore diverso e dovrebbe andare ;) Poi ce la vediamo noi sul resto.

kwb
07-10-2010, 19:05
Allora lascia perdere. Evidenzia il tab del menu corrente, sia il tab del sottomenu corrente con un colore diverso e dovrebbe andare ;) Poi ce la vediamo noi sul resto.

Ok, capito!

cionci
07-10-2010, 19:19
gnommo: come ti dicevo la versione di uClibc è questa: uClibc-0.9.29.so

Quindi probabilmente dovremmo usare quelle librerie da mettere nella dir lib sul firmware. A quel punto non ci dovrebbero essere problemi con le applicazioni già compilate (a parte ovviamente quelle compilate con le opzioni sbagliate).

cionci
07-10-2010, 19:37
Con la toolchain di OpenWRT non si può fare la build di busybox :muro: :rolleyes:
Ottengo una marea di errori sulla parte relativa a sys-include (dovrebbe essere la parte relativa alla CPU).

E non va nemmeno il server svn...
svn: Il server ha inviato un valore di ritorno inaspettato (405 Not Allowed) nella risposta
OPTIONS alla richiesta di 'https://svn.openwrt.org/openwrt/branches/whiterussian'

Edit: quello del ramo 8.09 di kamikaze funziona...

cionci
08-10-2010, 11:20
Continuo ad avere problemi a creare la toolchain di openwrt. Non mi compila busybox 1.1.3, ma l'ultima versione me la compila. Ci sta che ci siano problemi con i kernel header che sono troppo recenti ?

gnommo
08-10-2010, 11:38
Continuo ad avere problemi a creare la toolchain di openwrt. Non mi compila busybox 1.1.3, ma l'ultima versione me la compila. Ci sta che ci siano problemi con i kernel header che sono troppo recenti ?

Vabbè cionci, ora funziona tutto bene così,si può continuare avanti così, perchè poi magari cambiando libreria non funzionano più i tool (e non lo fanno,provato)che ci sono nel firm.

Per il php se ti accontenti di modificare l'estensione da .php in cgi e aggiungere in testa allo script
#!/path/php-cli
ed in ogni script inviare esplicitamente anche il Content type
funziona bene e poi non ci dovrebbero essere altre differenze.

cionci
08-10-2010, 11:43
Vabbè cionci, ora funziona tutto bene così,si può continuare avanti così, perchè poi magari cambiando libreria non funzionano più i tool (e non lo fanno,provato)che ci sono nel firm.
Eh lo so, ma io ho la .29 nel firmware... Tu hai la .28 ?

Questa cosa del php bisogna farla anche configurando httpd per supportare l'estensione .php ?

* httpd.conf has the following format:
*
* A:172.20. # Allow address from 172.20.0.0/16
* A:10.0.0.0/25 # Allow any address from 10.0.0.0-10.0.0.127
* A:10.0.0.0/255.255.255.128 # Allow any address that previous set
* A:127.0.0.1 # Allow local loopback connections
* D:* # Deny from other IP connections
* /cgi-bin:foo:bar # Require user foo, pwd bar on urls starting with /cgi-bin/
* /adm:admin:setup # Require user admin, pwd setup on urls starting with /adm/
* /adm:toor:PaSsWd # or user toor, pwd PaSsWd on urls starting with /adm/
* .au:audio/basic # additional mime type for audio.au files
* *.php:/path/php # running cgi.php scripts through an interpreter

gnommo
08-10-2010, 11:49
Eh lo so, ma io ho la .29 nel firmware... Tu hai la .28 ?

Questa cosa del php bisogna farla anche configurando httpd per supportare l'estensione .php ?

* httpd.conf has the following format:
*
* A:172.20. # Allow address from 172.20.0.0/16
* A:10.0.0.0/25 # Allow any address from 10.0.0.0-10.0.0.127
* A:10.0.0.0/255.255.255.128 # Allow any address that previous set
* A:127.0.0.1 # Allow local loopback connections
* D:* # Deny from other IP connections
* /cgi-bin:foo:bar # Require user foo, pwd bar on urls starting with /cgi-bin/
* /adm:admin:setup # Require user admin, pwd setup on urls starting with /adm/
* /adm:toor:PaSsWd # or user toor, pwd PaSsWd on urls starting with /adm/
* .au:audio/basic # additional mime type for audio.au files
* *.php:/path/php # running cgi.php scripts through an interpreter

Rinominando in cgi funziona sempre senza modifiche e file di configurazione, invece aggiungendo *.php:/path/php si deve ricompilare httpd e si deve aggiungere l'esportazione della variabile di ambiente SCRIPT_FILENAME.

cionci
08-10-2010, 11:53
httpd l'avevo già ricompilato con quella opzione...
si deve aggiungere l'esportazione della variabile di ambiente SCRIPT_FILENAME.
Anche con quella opzione ?

Comunque se abbiamo librerie diverse mi sa che conviene suddividere i binari e le librerie.

Gli script si mettono lasciano tutti in bin. Poi si fa una sottodirectory in bin e in lib per ogni router supportato. A quel punto con la stringa ritornata da "router_detect" si setta il PATH e LD_LIBRARY_PATH aggiungendo quei percorsi. Mi sa che è l'unica cosa da fare.
Per il resto basta una ricompilazione, l'importante è condividere gli stessi file di configurazione.

cionci
08-10-2010, 14:18
Confermo che il problema con busybox erano gli header del kernel troppo recenti.
Credo che a questo punto sia obbligatorio anche separare le toolchain. Così ognuno usa la propria versione di uClibc e di kernel headers.

cionci
08-10-2010, 14:26
L'Atheros AR71xx non è compatibile con la mia CPU, è un mips32r2, mentre la mia è un mips32 e basta :stordita:

cionci
08-10-2010, 20:04
Ho trovato un demone http che fa tutto quello che ci serve: http://code.google.com/p/mongoose/

Per lanciarlo:

mongoose -p 81 -d no -r $modfs/www -I $modfs/bin/DGN2200/php-cgi

Funziona benino a quanto sembra. Bisognerebbe metterlo un po' sotto stress per essere sicuri. E non c'è alcun bisogno di specificare il percorso dell'interprete PHP nei file .php.
Supporta anche SSL.

cionci
08-10-2010, 20:21
Funziona tranquillamente anche il POST con le form.

gnommo
08-10-2010, 21:05
mongoose -p 81 -d no -r $modfs/www -I $modfs/bin/DGN2200/php-cgi

E non c'è alcun bisogno di specificare il percorso dell'interprete PHP nei file .php.

Così poi però gli altri cgi non li esegue, e comunque a me dice no input file come sempre,cioè con php-cli funziona con php-fcgi no.
Non è che mi passeresti il php che hai compilato. :D

cionci
08-10-2010, 21:15
Questo perché non ha il supporto al Fast CGI, così come httpd e mini_httpd ;)
Per "altri CGI" mi immagino che tu ti riferisca a quelli del router. Per me non è un problema, per te mi immagino di sì.
Per il PHP ho cercato di tenerlo più semplice possibile, cercando di eliminare man mano gli errori di configurazione che mi dava.

./configure --host=mips-linux --prefix=./_install --without-pear --disable-libxml --disable-dom --without-iconv --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter
Viene fuori 11 mega di eseguibile :eek:

cionci
08-10-2010, 21:28
Se hai un errore in fase di linking (non trova dlopen etc), apri il Makefile e aggiungi -ldl a EXTRA_LIBS
Edit: aggiungi -Os a CFLAGS, così viene solo 4 MB ;)

gnommo
08-10-2010, 21:42
Questo perché non ha il supporto al Fast CGI, così come httpd e mini_httpd ;)
Per "altri CGI" mi immagino che tu ti riferisca a quelli del router.

Intendo altri cgi :D quelli compilati in c o script di shell.
L'ho testato con la pagina che ho fatto che mostra il segnale del wifi e non va bene, con mini_httpd e httpd invece funziona bene, anche l'esecuzione dei php mi pare che sia abbastanza lenta.

cionci
08-10-2010, 21:49
Ah, con i cgi che avevi fatto già.
Ma non sarebbe il caso di passarli in PHP ?
La prima volta quando carica (soprattutto se hai fatto il php da 11 Mega) è lento. Poi le volte successive è più veloce.

A me mini_httpd non funziona. Non riesce a fare il bind e ritorna un errore assurdo... Bad file descriptor
Sia con httpd che con mini_httpd c'è il problema che PATH e LD_LIBRARY_PATH sono built in e settabili solo a tempo di compilazione (a me va a cercare librt che in /lib sul router non c'è).

cionci
08-10-2010, 21:59
Questo script ad esempio non mi sembra così lento: http://www.paehl.de/sqliteguest.zip

cionci
09-10-2010, 08:28
Ho provato php4 ed è assolutamente più leggero. A partire dall'uso della memoria fino al carico sulla CPU.

Per la build di php 4:
Va modificato ./configure: cerca "cross compil" e toglie "exit 1;" per ogni riga.

Va patchato per uclibc: http://bugs.gentoo.org/attachment.cgi?id=71601


CFLAGS="-Os" ./configure --host=mips-unknown-linux-uclibc --prefix=./_install --without-pear --disable-libxml --disable-dom --without-iconv --disable-simplexml --disable-xml --disable-ipv6


L'unico neo è che il supporto ad sqlite deve essere inserito tramite extension. Sinceramente non ho ancora provato, però potremmo passare /tmp come percorso di ricerca di php.ini a configure ;) In questo modo potremmo caricare tranquillamente l'estensione.

http://pecl.php.net/package/sqlite3 (versione 0.5)

Per i cgi: non potremmo chiamarli direttamente da uno script php ? Basterebbe fargli un frontend in php, no ? Chiaramente ci sarebbe qualche problema per i link, ma non è certo insormontabile.

<?php
$output = array();

exec("sh ./prova.sh", $output);

for($i = 0; $i < count($output); ++$i)
echo $output[$i]."\n";
?>

In teoria chiamando il file php allo stesso modo del cgi originale (usando .cgi come estensione) si potrebbe anche fare una cosa trasparente.

gnommo
09-10-2010, 10:28
Vedi un pò tu... ma se si riesce a fare eseguire i cgi ed i php senza escamotage è meglio. Penso che ci servano tutti e due, quando è più utile il php si usa il php, quando è meglio una riga di bash o un programma scritto in C, si usano i cgi. Non stiamo facendo un esercizio di stile che dobbiamo uniformare tutto in un solo linguaggio :D

Io sono partito con l'interfaccia grafica, basandomi su una struttura base, non appena kwb finisce integro gli script nella sua.

cionci
09-10-2010, 11:04
Potrei patchare il sorgente mettendo il supporto alla dir cgi-bin...va bene ?

Comunque preferivo php per un semplice motivo: permettere anche ad altri di sviluppare in modo semplice.

carlo8280
09-10-2010, 20:04
ho fatto alcune prove cionci il freeze del wireless che ti dicevo giorni fa accade quando il router parte con la chiavetta usb con dentro boot.sh se lo avvio senza chiavetta va per giorni senza nessun freeze del wifi.

cionci
10-10-2010, 00:41
ho fatto alcune prove cionci il freeze del wireless che ti dicevo giorni fa accade quando il router parte con la chiavetta usb con dentro boot.sh se lo avvio senza chiavetta va per giorni senza nessun freeze del wifi.
Mi sembra molto strano. Prima di tutto boot.sh non fa altro che lanciare un demone telnet. Inoltre dopo che hai configurato il SNR la chiavetta la puoi anche togliere, non importa tenerla dentro. Diciamo che magari il problema è la chiavetta, non certo il fatto che ci sia boot.sh dentro. Però anche questo sarebbe strano.

cionci
10-10-2010, 08:32
ho fatto alcune prove cionci il freeze del wireless che ti dicevo giorni fa accade quando il router parte con la chiavetta usb con dentro boot.sh se lo avvio senza chiavetta va per giorni senza nessun freeze del wifi.
Ho verificato ora ed il mio wifi è ancora attivo dopo due giorni di ininterrotta attività del router. E ci faccio molto di più che lanciare un semplice demone telnet.
Prova a far partire il router con boot.sh dentro la chiavetta e quando si pianta entra in telnet e dai il comando dmesg. Ri portami le ultime righe se riguardano il wifi o l'usb.

cionci
10-10-2010, 08:47
Gnommo: http://www.mediafire.com/download.php?vauxfvvo2d1klf7

L'ho patchato ed ora utilizza l'interprete solo per i file .php. I .cgi invece li esegue direttamente sempre e comunque.

Intanto io aggiungerei a boot.sh queste righe:

export $bindir=$modfs/bin/$device
ln -s $bindir/sh /tmp/sh
ln -s $bindir/php /tmp/php

In modo da tenere fisso il percorso per l'interprete del firmware mod negli script.

Per lanciare mongoose:

mongoose -p 81 -r $modfs/www -I /tmp/php

cionci
10-10-2010, 13:57
Ci dovremmo essere: http://www.mediafire.com/download.php?1d7nolnzcw71ok7

Dovresti inserire:
- il tuo busybox in bin/DGN3500
- il tuo mongoose e il tuo php in packages/httpd/bin/DGN3500
- i tuoi comandi per l'avvio e l'arresto di telnet

Per il resto ci dovremmo essere. Dai uno sguardo alle modifiche in boot.sh.
Ora come interprete per gli script possiamo usare direttamente /tmp/sh, per uniformare.
Sia gli script sh che gli exe dovrebbero funzionare con estensione .cgi.
Quando hai fatto magari passami un link con i file modificati.

Riunisco qui anche il modo per compilare php e mongoose, casomai servisse ad altri:
Ho provato php4 ed è assolutamente più leggero. A partire dall'uso della memoria fino al carico sulla CPU.

Per la build di php 4:
Va modificato ./configure: cerca "cross compil" e toglie "exit 1;" per ogni riga.

Va patchato per uclibc: http://bugs.gentoo.org/attachment.cgi?id=71601


CFLAGS="-Os" ./configure --host=mips-unknown-linux-uclibc --prefix=./_install --without-pear --disable-libxml --disable-dom --without-iconv --disable-simplexml --disable-xml --disable-ipv6


L'unico neo è che il supporto ad sqlite deve essere inserito tramite extension. Sinceramente non ho ancora provato, però potremmo passare /tmp come percorso di ricerca di php.ini a configure ;) In questo modo potremmo caricare tranquillamente l'estensione.

http://pecl.php.net/package/sqlite3 (versione 0.5)

Versione modificata di mongoose: http://www.mediafire.com/download.php?vauxfvvo2d1klf7

L'ho patchato ed ora utilizza l'interprete solo per i file .php. I .cgi invece li esegue direttamente sempre e comunque.

Per compilare: make linux

gnommo
10-10-2010, 14:29
Allora, interfaccia pronta, cionci te la allego per testarla.
http://www.mediafire.com/?ahjo90dh1s9a90s
Naturalmente la struttura non l'aspetto.

E' composta così:
un file index.htm
che contiene questo body :rotfl: :
<body>
<div id="container">
<div id="header"></div>
<div id="navigation">
<div id="MainMenu"><ul></ul></div>
<div id="SubMenu"><ul></ul></div>
</div>
<div id="content"></div>
<div id="footer"></div>
</div>
</body>
che javascript riempie così:
carica il file Menu che contiene il menu, questo file è semplice ed ha la forma:
Setup
Services
NAT-QoS
Diagnostic
cioè una lista di menu separati da un a capo.
Questo file va rigenerato solo ad ogni installazione o disinstallazione di pacchetto tramite uno script (da implementare) che fa una query nel database che restituisce i PKG_TYPE.
Un pacchetto quindi che non ha interfaccia dovrà settare PKG_TYPE a NONE, e la query escluderà questa categoria.

Per ogni voce presente in Menu esiste un file con lo stesso nome che contiene i sottomenu, nella stessa forma.
Ad esempio esisterà un file NAT-QoS che contiene

Port Forwarding
Port Range Forwarding
QoS

(Tutti i menu e sottomenu menzionati sono solo esempi)
Quindi lo script da invocare all'installazione di una pacchetto rigenererà anche questi file facendo per ogni PKG_TYPE una query che ne mostra i PKG_SUBTYPE.
Ancora una volta un package che non ha un suo sotto menu ma solo una voce nel sottomenu di default avrà PKG_SUBTYPE settato a NONE.

Qui finisce la parte riguardo i menu.
Javascript dopo aver caricato menu e sottomenu carica la parte che contiene il contenuto.
Il contenuto è un file che avrà questa struttura base:
<div id="content">

<script type="text/javascript">
function validator(){


return true;
}
</script>


<script src="serve.js"></script>


<form id="mainform" name="mainform" onsubmit="process(); return false;">
</form>

</div>
Cioè un div con id content che ha una una form ed una funzione validator in cui vengono validati i dati della form.
In seguito metterò degli esempi di validazione usando jquery.
La form conterrà dei fieldset, nell'esempio ne ho messi vari esempi che possono essere usati come base di partenza, e sono del tipo:
<fieldset id="telnet">
<legend>Telnet</legend>
<input name="telnet" type="radio" value="enabled" id="t_en" /> <label for="t_en">Enabled</label>
<input name="telnet" type="radio" value="disabled" id="t_dis" /> <label for="t_dis">Disabled</label>
</fieldset>

Nell'esempio tutto questo è contenuto nel file Serve, ma dovrà essere richiamato uno script che va a pescare questo file nel pacchetto se ha un suo sottomenu, oppure se si tratta del sottomenu di default, dovrà caricare tutti i fieldset dei vari pacchetti e creare un file unico con la struttura di Serve.

Quando verrà premuto un tasto per sottomettere la form verrà lanciato il validatore e il form non verrà direttamente inviato, questo comporterebbe il ricaricamento dell'intera pagina, ma invece viene mandata una chiamata ajax che invia i dati del form ad un file che ho chiamato process.php (da implementare).

Testato sugli ultimi firefox,chrome,opera,ie7.

cionci
10-10-2010, 14:51
Ottimo ;)
Buona l'idea di generare le voci dei menu in modo statico. Dovrebbe essere molto più performante invece di fare le query ogni volta.
Mi studio bene il modo in cui validi i dati, sono anni che non metto mano a pagine web, quindi Ajax e jquery per me sono cose nuove.

Tra l'altro volevo implementare il form per il target SNR...

gnommo
10-10-2010, 15:29
Ottimo ;)
Buona l'idea di generare le voci dei menu in modo statico. Dovrebbe essere molto più performante invece di fare le query ogni volta.
Mi studio bene il modo in cui validi i dati, sono anni che non metto mano a pagine web, quindi Ajax e jquery per me sono cose nuove.

Tra l'altro volevo implementare il form per il target SNR...

Esempio di validazione:
abbiamo un fieldset:
<fieldset id="WOL">
<legend>Wake on Lan</legend>
<label for="ip">Ip address:</label>
<input type="text" id="ip" name="ip" value="192.168.1.255">
<label for="mac">Mac address:</label>
<input type="text" id="mac" name="mac">
</fieldset>

Vogliamo testare se viene inserito un mac address nella forma corretta, modifichiamo la funzione validator:
function validator(){

var m=$("#mac").val();
if ( m.match(/^([0-9a-f]{2}([:-]|$)){6}$|([0-9a-f]{4}([.]|$)){3}$/i) != null)
{
alert("Right mac: "+m);
return true;
}
else return false;
}

In generale tramite
$("#id").val();
dove id è l'id del tag input di cui vogliamo testare il valore, accediamo al valore che poi va testato in qualche modo.
Quindi la funzione validator è la sequenza di tutti i test che vogliamo fare.
C'è un plugin per jquery che aggiunge un supporto alla validazione, ma anche così non mi pare troppo difficile si accede ad un valore e lo si testa.

cionci
11-10-2010, 08:27
Stanotte ho fatto qualche prova con minidlna. Lo dicevo io che aveva troppe dipendenze: il pargolo si è portato via il 33% della memoria del DGN2200, arrivando fino ad esaurirla al secondo scan.

Riguardo ai file dei menu: non sarebbe il caso di spostarli all'interno di una sottodirectory ? Mi sembra che creino un po' di confusione lì, non ti sembra ?

gnommo
11-10-2010, 08:37
Stanotte ho fatto qualche prova con minidlna. Lo dicevo io che aveva troppe dipendenze: il pargolo si è portato via il 33% della memoria del DGN2200, arrivando fino ad esaurirla al secondo scan.


Il wndr3700 ha il dlna ed ha 64mb di ram come il dgn3500


Riguardo ai file dei menu: non sarebbe il caso di spostarli all'interno di una sottodirectory ? Mi sembra che creino un po' di confusione lì, non ti sembra ?
ok.

cionci
11-10-2010, 08:42
Il wndr3700 ha il dlna ed ha 64mb di ram come il dgn3500
Lo sospettavo purtroppo, aveva troppe dipendenze.
L'eseguibile non è nemmeno troppo grande, solo 500K. Sono le librerie dinamiche che carica. Dici che sarebbe il caso di provarlo a linkare staticamente ? Magari potrebbe ridurre le dimensioni strippando le funzioni inutili.

gnommo
11-10-2010, 08:46
Lo sospettavo purtroppo, aveva troppe dipendenze.
L'eseguibile non è nemmeno troppo grande, solo 500K. Sono le librerie dinamiche che carica. Dici che sarebbe il caso di provarlo a linkare staticamente ? Magari potrebbe ridurre le dimensioni strippando le funzioni inutili.

L'eseguibile statico (mips le) su sourceforge è grande 2,5MB

cionci
12-10-2010, 07:50
L'eseguibile statico (mips le) su sourceforge è grande 2,5MB
Non sono comunque riuscito a contenere le dimensioni, ora siamo sui 5.5 MB (o ottimizzato tutte le librerie per dimensione ed ho fatto lo strip dell'eseguibile), ma il problema è che esaurisce comunque la memoria in fase di scan...

cionci
13-10-2010, 08:30
Questo minidlna mi vuole far impazzire... Ho ridotto l'eseguibile a 2.8 MB... Ho ottimizzato l'apertura degli stream modificando MAX_BUFFER_SIZE a 1 MB in upnphttp.c (lo streaming lo fa con il 4% di CPU, almeno per gli AVI da 6-700 MB).
Il problema è durante lo scan delle directory che avviene all'avvio, quando viene utilizzato ffmpeg per individuare il tipo di file, la memoria utilizzata schizza a 10 MB circa. Per evitare che mi esaurisca la memoria devo chiudere qualche processo. Una volta che ho fatto questo, l'utilizzo scende nettamente. Sul tuo credo che tu possa riuscire a farlo girare, visto che hai molta più ram libera.

inotify va disabilitato dal file di configurazione perché prende troppa CPU anche per monitorare solo una 20ina di directory.

Ti lascio qui le opzioni di configurazione per ridurre ffmpeg:
CFLAGS="-Os" ./configure --prefix=/opt/toolchains/uclibc-crosstools-gcc-4.2.3-3/usr --enable-cross-compile --cc=mips-linux-gcc --arch=mips --disable-mmx --disable-ffserver --disable-ffplay --enable-shared --disable-debug --disable-encoders --disable-decoders --disable-muxers --disable-outdevs --disable-indevs --disable-filters --disable-protocols --enable-protocol=file --enable-decoder=h264 --disable-network --disable-zlib --disable-vhook --disable-ffmpeg --disable-ffserver --disable-ffplay --enable-small --disable-mpegaudio-hp --disable-encoders --disable-muxers --disable-bsfs --disable-devices --enable-debug --disable-protocol=udp --disable-protocol=tcp --disable-protocol=rtp --disable-protocol=pipe --disable-protocol=http --disable-parser=cavsvideo --disable-parser=dca --disable-parser=dirac --disable-parser=dnxhd --disable-parser=mjpeg --disable-parser=mlp --disable-parser=pnm --disable-parser=vp3 --disable-demuxer=amr --disable-demuxer=apc --disable-demuxer=ape --disable-demuxer=ass --disable-demuxer=bethsoftvid --disable-demuxer=bfi --disable-demuxer=c93 --disable-demuxer=daud --disable-demuxer=dnxhd --disable-demuxer=dsicin --disable-demuxer=dxa --disable-demuxer=ffm --disable-demuxer=gsm --disable-demuxer=gxf --disable-demuxer=idcin --disable-demuxer=iff --disable-demuxer=image2 --disable-demuxer=image2pipe --disable-demuxer=ingenient --disable-demuxer=ipmovie --disable-demuxer=lmlm4 --disable-demuxer=mm --disable-demuxer=mmf --disable-demuxer=msnwc_tcp --disable-demuxer=mtv --disable-demuxer=mxf --disable-demuxer=nsv --disable-demuxer=nut --disable-demuxer=oma --disable-demuxer=pva --disable-demuxer=rawvideo --disable-demuxer=rl2 --disable-demuxer=roq --disable-demuxer=rpl --disable-demuxer=segafilm --disable-demuxer=shorten --disable-demuxer=siff --disable-demuxer=smacker --disable-demuxer=sol --disable-demuxer=str --disable-demuxer=thp --disable-demuxer=tiertexseq --disable-demuxer=tta --disable-demuxer=txd --disable-demuxer=vmd --disable-demuxer=voc --disable-demuxer=wc3 --disable-demuxer=wsaud --disable-demuxer=wsvqa --disable-demuxer=xa --disable-demuxer=yuv4mpegpipe --enable-demuxer=matroska

gnommo
13-10-2010, 22:19
Gnommo: http://www.mediafire.com/download.php?vauxfvvo2d1klf7

L'ho patchato ed ora utilizza l'interprete solo per i file .php. I .cgi invece li esegue direttamente sempre e comunque.

Intanto io aggiungerei a boot.sh queste righe:

export $bindir=$modfs/bin/$device
ln -s $bindir/sh /tmp/sh
ln -s $bindir/php /tmp/php

In modo da tenere fisso il percorso per l'interprete del firmware mod negli script.

Per lanciare mongoose:

mongoose -p 81 -r $modfs/www -I /tmp/php

Ehm ho perso la versione patchata di mongoose ed il link non funziona più, potresti riuppare? :D

cionci
14-10-2010, 01:06
Ecco qua: http://www.mediafire.com/?lla8uvxk67v8o6r

Ti allego lo script per avviare mongoose con tutte le opzioni abilitate. Controllo degli accessi (solo da rete interna) e autenticazione.
Credo tu debba cambiare solo il comando per il recupero della password dal router. Dimmi le modifiche da fare per farlo funzionare sul tuo e poi lo aggiungo al pacchetto httpd.

Mi daresti i sorgenti dell'applicazione dell'applicazione che monitora il wifi ?

gnommo
14-10-2010, 07:17
Ecco qua: http://www.mediafire.com/?lla8uvxk67v8o6r

Ti allego lo script per avviare mongoose con tutte le opzioni abilitate. Controllo degli accessi (solo da rete interna) e autenticazione.
Credo tu debba cambiare solo il comando per il recupero della password dal router. Dimmi le modifiche da fare per farlo funzionare sul tuo e poi lo aggiungo al pacchetto httpd.

Mi daresti i sorgenti dell'applicazione dell'applicazione che monitora il wifi ?

Anche questo link mi dice che il file non è più disponibile :confused:
Per il segnale wifi.... :D lo sapevo che andava modificata
i sorgenti sono graph_wifi.cgi stesso che è un file svg.
/proc/wireless dovrebbe restituire i valori del segnale con il valore correttamente negativo, sul dgn3500 c'è un bug, per l'output invece di usare un signed char hanno usato un unsigned char e quindi mi restituisce la rappresentazione in complemento a 2 , quindi in graph_wifi.cgi ritrasformo dalla rappresentazione in complemento a 2 nei valori negativi.

quindi dove trovi:
plot_sig[0] = Math.abs(ifsig-256);
plot_noise[0] = Math.abs(ifnoise-256);
plot_snr[0]=ifnoise-ifsig ;
o

ifsig-256;
ifnoise-256;
ifnoise-ifsig ;

devi togliere ifsig-256 ifnoise-256; perchè il valore ifsig ifnoise è già corretto ed invertire ifnoise-ifsig in ifsig-ifnoise


Mentre fetch_wifi non fa altro che leggere da /proc/wireless
e dovrebbe andare bene lo stesso:

int main(int argc, char *argv[])
{
char line[256];
int i, llen;
char buffer[256];
char *query;
int strbuffer = 0;

FILE *in = fopen("/proc/net/wireless", "rb" );

if( in == NULL )
return;

while( fgets( line, sizeof( line ), in ) != NULL )
{
if( !strchr( line, ':' ) )
continue;
if( strstr( line, "ath0" ) )
{
llen = strlen( line );
for( i = 0; i < llen; i++ )
{
buffer[strbuffer++] = line[i];
}
break;
}
}
buffer[strbuffer] = 0;
fclose( in );
printf("Content-type: text/html\n\n");
printf( "%s", buffer);
return 0;
}

cionci
14-10-2010, 09:33
Anche questo link mi dice che il file non è più disponibile :confused:
Ci mettono tutte le schifezze possibili su quel sito e mi tolgono una sorgente ? :muro:
http://www.megaupload.com/?d=LX2C88DJ

gnommo
14-10-2010, 11:28
Ci mettono tutte le schifezze possibili su quel sito e mi tolgono una sorgente ? :muro:
http://www.megaupload.com/?d=LX2C88DJ
oh ma che è? :muro:
Il file al quale si sta tentando di accedere non è temporaneamente disponibile.
edit: scaricato.

gnommo
14-10-2010, 18:11
Niente da fare, mi dispiace cionci ma mongoose non va proprio bene, non ce la fa ad eseguire lo script sul monitor di banda e segnale wifi, laddove mini_httpd e httpd lo eseguono senza problemi.
Questo la dice lunga sulla sua reattività... visto che non deve fare nient'altro se non eseguire ogni secondo o giù di lì il semplice cgi fetchwifi, invece niente si impalla.

cionci
14-10-2010, 22:41
Niente da fare, mi dispiace cionci ma mongoose non va proprio bene, non ce la fa ad eseguire lo script sul monitor di banda e segnale wifi, laddove mini_httpd e httpd lo eseguono senza problemi.
Questo la dice lunga sulla sua reattività... visto che non deve fare nient'altro se non eseguire ogni secondo o giù di lì il semplice cgi fetchwifi, invece niente si impalla.
Boh...è molto strana questa cosa. Sul mio sembra tutt'altro che lento.
Poi di fatto deve solo eseguire script esterni, mi sembra strano che sia così lento. Provo un po' a dare uno sguardo al sorgente degli altri nella parte di esecuzione dei CGI.

cionci
14-10-2010, 23:13
Non ho /proc/wireless :rolleyes: Copa probabilmente dei moduli proprietari Broadcom.
Mi dai il contenuto del file ? Guardo di recuperarlo in un altro modo.

gnommo
15-10-2010, 06:41
Non ho /proc/wireless :rolleyes: Copa probabilmente dei moduli proprietari Broadcom.
Mi dai il contenuto del file ? Guardo di recuperarlo in un altro modo.

ehm ovviamente è /proc/net/wireless
cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 21
ath0: 0005 0. 150. 150. 0 0 0 0 0 0

cionci
15-10-2010, 09:05
ehm ovviamente è /proc/net/wireless
cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 21
ath0: 0005 0. 150. 150. 0 0 0 0 0 0
Chiaro, ma non c'è :(

cionci
15-10-2010, 09:18
httpd di busybox dal sorgente supporta già SCRIPT_FILENAME e SCRIPT_NAME, ti risulta ?
Allora correggo il problema delle variabili di ambiante PATH e LD_LIBRARY_PATH ed usiamo quello ?

cionci
15-10-2010, 17:54
Ho risolto il problema dei CGI con httpd modificando i sorgenti. Ecco la patch:
--- httpd.c 2010-10-15 18:43:28.000000000 +0200
+++ httpd.c 2010-10-15 18:45:00.000000000 +0200
@@ -1179,7 +1179,6 @@
*script = '/'; /* is directory, find next '/' */
}
addEnv("PATH", "INFO", script); /* set /PATH_INFO or NULL */
- addEnv("PATH", "", getenv("PATH"));
addEnv("REQUEST", "METHOD", request);
if(config->query) {
char *uri = alloca(strlen(purl) + 2 + strlen(config->query));
@@ -1590,6 +1589,7 @@
static void handleIncoming(void)
{
char *buf = config->buf;
+ char *ext;
char *url;
char *purl;
int blank = -1;
@@ -1810,9 +1810,10 @@
if (length < 0)
break;

- if (strncmp(test, "cgi-bin", 7) == 0) {
- if(test[7] == '/' && test[8] == 0)
- goto FORBIDDEN; // protect listing cgi-bin/
+ /* httpd execute any .cgi or .php file except for /static directory */
+ ext = strrchr(test, '.');
+ if (ext && strncmp(test, "static", 6) != 0 &&
+ (strncmp(ext, ".php", 4) == 0 || strncmp(ext, ".cgi", 4) == 0)) {
sendCgi(url, prequest, length, cookie, content_type);
} else {
if (prequest != request_GET)
@@ -2109,13 +2110,6 @@

#ifdef CONFIG_FEATURE_HTTPD_CGI
{
- char *p = getenv("PATH");
- if(p) {
- p = bb_xstrdup(p);
- }
- clearenv();
- if(p)
- setenv("PATH", p, 1);
# ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
addEnvPort("SERVER");
# endif
Se vedi, in fondo eliminava tutte le variabili d'ambiente. Guarda se secondo te è il caso di rimuoverne qualcuna.

Ho aggiunto la possibilità di eseguire i .php e i .cgi in qualsiasi directory ad eccezione della dir /static (caso mai ne avessimo bisogno).

gnommo
15-10-2010, 22:49
Un'altra cosa da patchare in httpd.c è nella funzione sendCgi
è togliere
if (strstr(rbuf, "ontent-") == 0) {
bb_full_write(s, "Content-type: text/plain\r\n\r\n", 28); }
crea problemi e non consente il corretto funzionamento con php e con gli script che inviano anche loro la stringa content-type, cosa che ho fatto con i cgi perchè mini_httpd non invia la riga content-type.

Ok, finalmente funziona tutto.

gnommo
15-10-2010, 23:03
Un'altra cosa da patchare in httpd.c è nella funzione sendCgi
è togliere
if (strstr(rbuf, "ontent-") == 0) {
bb_full_write(s, "Content-type: text/plain\r\n\r\n", 28); }
crea problemi e non consente il corretto funzionamento con php e con gli script che inviano anche loro la stringa content-type, cosa che ho fatto con i cgi perchè mini_httpd non invia la riga content-type.

Ok, finalmente funziona tutto.
:doh: ho compilato php con l'opzione fast-cgi che non invia lo status code ma solo il content-type, ecco perchè avevo questo comportamento.
Vabbè :D

cionci
16-10-2010, 09:30
:doh: ho compilato php con l'opzione fast-cgi che non invia lo status code ma solo il content-type, ecco perchè avevo questo comportamento.
Vabbè :D
php che ho messo io è 4.4.9.

Ho notato un piccolo problema sul mio router nell'impostare il contento type.

Se lo imposto così funziona:

#!/bin/sh
echo "Content-Type: image/svg+xml"
echo

Se lo imposto così non funziona:

#!/bin/sh
echo "Content-type: image/svg+xml\n"

A logica dovrebbe essere il primo il modo corretto per impostarlo. Per gli header http i caratteri che devono essere inviati come separatori di linea sono CRLF ed una riga con CRLF vuota.
Ora è possibile che sul mio router (o con il mio compilatore) "\n" all'interno di una stringa bash in questo caso non venga tradotto in CRLF, ma sono in LF.

Mi dai il sorgente anche di fetchif.cgi ?

kwb
16-10-2010, 11:31
EDIT: Ho scritto una cosa senza senso :asd:

gnommo
16-10-2010, 11:49
php che ho messo io è 4.4.9.

Ho notato un piccolo problema sul mio router nell'impostare il contento type.

Se lo imposto così funziona:

#!/bin/sh
echo "Content-Type: image/svg+xml"
echo

Se lo imposto così non funziona:

#!/bin/sh
echo "Content-type: image/svg+xml\n"

A logica dovrebbe essere il primo il modo corretto per impostarlo. Per gli header http i caratteri che devono essere inviati come separatori di linea sono CRLF ed una riga con CRLF vuota.
Ora è possibile che sul mio router (o con il mio compilatore) "\n" all'interno di una stringa bash in questo caso non venga tradotto in CRLF, ma sono in LF.

Mi dai il sorgente anche di fetchif.cgi ?
E' proprio l'errore che ti dicevo, in realtà httpd già invia giù la stringa Content-Type: text/html se la prima riga del cgi non contiene il codice 200, se patchi ha il controllo sul conten-type.
Poi lo standard http prevede che fra l'header ed il contenuto ci deve essere una riga con solo \r\n
Quindi la cosa corretta è
echo "Content-type: image/svg+xml\r\n\r\n"
Io uso "\n\n" che funziona lo stesso.

il sorgente di fectif

#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <string.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>


int main(int argc, char *argv[])
{
char line[256];
int i, llen;
char buffer[256];
char *query;

query=getenv("QUERY_STRING");

if( query == NULL || strlen( query ) == 0 )
return;
int strbuffer = 0;
time_t tm;
struct tm tm_time;

time( &tm );
memcpy( &tm_time, localtime( &tm ), sizeof( tm_time ) );
char *date_fmt = "%a %b %e %H:%M:%S %Z %Y";

strftime( buffer, 200, date_fmt, &tm_time );
strbuffer = strlen( buffer );
buffer[strbuffer++] = '\n';
FILE *in = fopen( "/proc/net/dev", "rb" );

if( in == NULL )
return;

while( fgets( line, sizeof( line ), in ) != NULL )
{
if( !strchr( line, ':' ) )
continue;
if( strstr( line, query ) )
{
llen = strlen( line );
for( i = 0; i < llen; i++ )
{
buffer[strbuffer++] = line[i];
}
break;
}
}
buffer[strbuffer] = 0;
fclose( in );
printf("Content-type: text/html\n\n");
printf("%s", buffer);
return 0;
}

ma non vanno modificati, perchè questo è il comportamento normale.

cionci
16-10-2010, 11:52
Ma echo aggiunge già uno \n in fondo.

cionci
16-10-2010, 11:59
Non so se hai visto, ma ho messo il firmware del DGN2200m sul DGN2200... Avevano lasciato un file con l'immagine del root fs e il kernel dentro... L'ho estratto e l'ho messo nel sistema di build che uso per il DGN2200. Non ho potuto provare perché non ho una chiavetta.
Rispetto al DGN2200 non monta automaticamente le chiavette USB e non ha Samba :(
Rimettere insieme i pezzi mi sa che sarà un po' complesso.
Avesse avuto un normale demone httpd :muro: Invece tutto questo casino...

cionci
16-10-2010, 12:03
Quello che ha di buono il kernel del DGN2200 è che ha nf_conntrack abilitato...quindi potrei cassare il modulo nat della netgear ed aggiungere nf_conntrack, però ci sarebbero un casino di prove da smazzarsi :(
Edit: nf_conntrack non può essere aggiunto solo come modulo, qualche funzionalità deve essere anche built-in

cionci
17-10-2010, 17:00
Io ho uno o due di processi da far partire con crond. Principalmente mi servono per gestire l'aggiornamento delle password (se viene cambiata la password bisogna aggiornare il file di configurazione del demone http e, per me, il file passwd).
Mi ricordo che tu hai qualche problema con il crond (ti elimina la programmazione a mezza notte), sul mio invece crond proprio non c'è (quindi sono assolutamente libero). Come ci si muove ? Potremmo compilare un crond alternativo che magari va a cercare il crontab nella directory del firmware modded. Che ne pensi ?

gnommo
17-10-2010, 19:05
Io ho uno o due di processi da far partire con crond. Principalmente mi servono per gestire l'aggiornamento delle password (se viene cambiata la password bisogna aggiornare il file di configurazione del demone http e, per me, il file passwd).
Mi ricordo che tu hai qualche problema con il crond (ti elimina la programmazione a mezza notte), sul mio invece crond proprio non c'è (quindi sono assolutamente libero). Come ci si muove ? Potremmo compilare un crond alternativo che magari va a cercare il crontab nella directory del firmware modded. Che ne pensi ?
A me c'è una riga in crontab che a mezzanotte ricarica crontab, se la tolgo non lo fa più, ma c'è il solito problema che se si fa qualche settaggio di pianificazione nel menu del router mi sovrascrive il crontab, così come le modifiche al firewall dal menu del router sovrascrivono le modifiche a iptables.

cionci
18-10-2010, 09:11
Ho provato con una chiavetta e funziona senza problemi con il firmware del DGN2200m ;)
Le prestazioni sono anche discrete. 2 Mbps in down e 400 Kbps in up.
Ho guardato come viene instaurata la sessione ppp. Viene sfruttato il demone pppd direttamente. Il modo per farlo è praticamente identico a quello che trovi qui: http://www.santinoli.com/open/e1692-howto.html
Lo switching per il modem viene però fatto in automatico, ma non so come. Anche collegando la chiavetta con il firmware del DGN2200 sembra che lo faccia, perché inserendo il modulo del kernel il modem viene configurato correttamente.
Il problema è che se la collego all'avvio non monta la chiavetta USB, ma è possibile montarla manualmente. Con il firmware del DGN2200m la cosa è ancora più complessa, visto che non la fa nemmeno montare manualmente (dice che il device non esiste, anche se lo vede in /proc/partitions).
Il demone è configurato per lavorare in /tmp/ppp invece che in /etc/ppp.
Questo è il file gsm_chat in ppp/peers:

gsm_chat
# cat gsm_chat
# Connection script for Sierra Wireless GSM/UMTS modems
#
SAY 'Starting Wireless UMTS connect script...\n'
SAY '\n'
#######################################
SAY 'Setting the abort string\n'
SAY '\n'
# Abort String ------------------------------
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT 'NO CARRIER'
ABORT DELAYED
ABORT ERROR
REPORT CONNECT
#######################################
SAY 'Initializing modem\n'
# Modem Initialization
'' AT&F&D2&C1S0=0
SAY 'Setting Modem\n'
OK 'AT+IPR=115200'
OK 'ATS0=0'
TIMEOUT 10
#######################################
SAY '\n'
SAY 'Setting PDP type and APN\n'
# Access Point Name (APN)
# Incorrect APN or CGDCONT can often cause errors in connection.
# Below are a bunch of different popular APNs
#######################################
SAY '\n'
SAY 'Dialing...\n'
# Dial the ISP, this is the PPP dial string
OK ATD*99***1#
CONNECT ''

Questo è il file di configurazione del demone pppd (ppp/options):

unit 1
nodetach
defaultroute
noauth
/dev/ttyUSB0
115200
debug
holdoff 5
persist
logfd 2
lcp-echo-interval 10
lcp-echo-failure 3
ipcp-max-failure 5
maxfail 0
ipcp-accept-local
ipcp-accept-remote
noipdefault
ktune
noaccomp
nopcomp
noccp
novj
novjccomp
nobsdcomp
nodeflate
usepeerdns
noproxyarp
crtscts
kdebug 1
lock
connect '/usr/sbin/chat -v -V -s -t6 -f /tmp/ppp/peers/gsm_chat'

gnommo
18-10-2010, 09:23
Ho provato con una chiavetta e funziona senza problemi con il firmware del DGN2200m ;)
Le prestazioni sono anche discrete. 2 Mbps in down e 400 Kbps in up.
Ho guardato come viene instaurata la sessione ppp. Viene sfruttato il demone pppd direttamente. Il modo per farlo è praticamente identico a quello che trovi qui: http://www.santinoli.com/open/e1692-howto.html
Lo switching per il modem viene però fatto in automatico, ma non so come. Anche collegando la chiavetta con il firmware del DGN2200 sembra che lo faccia, perché inserendo il modulo del kernel il modem viene configurato correttamente.
Il problema è che se la collego all'avvio non monta la chiavetta USB, ma è possibile montarla manualmente. Con il firmware del DGN2200m la cosa è ancora più complessa, visto che non la fa nemmeno montare manualmente (dice che il device non esiste, anche se lo vede in /proc/partitions).
Il demone è configurato per lavorare in /tmp/ppp invece che in /etc/ppp.
Questo è il file gsm_chat in ppp/peers:

gsm_chat
# cat gsm_chat
# Connection script for Sierra Wireless GSM/UMTS modems
#
SAY 'Starting Wireless UMTS connect script...\n'
SAY '\n'
#######################################
SAY 'Setting the abort string\n'
SAY '\n'
# Abort String ------------------------------
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT 'NO CARRIER'
ABORT DELAYED
ABORT ERROR
REPORT CONNECT
#######################################
SAY 'Initializing modem\n'
# Modem Initialization
'' AT&F&D2&C1S0=0
SAY 'Setting Modem\n'
OK 'AT+IPR=115200'
OK 'ATS0=0'
TIMEOUT 10
#######################################
SAY '\n'
SAY 'Setting PDP type and APN\n'
# Access Point Name (APN)
# Incorrect APN or CGDCONT can often cause errors in connection.
# Below are a bunch of different popular APNs
#######################################
SAY '\n'
SAY 'Dialing...\n'
# Dial the ISP, this is the PPP dial string
OK ATD*99***1#
CONNECT ''

Questo è il file di configurazione del demone pppd (ppp/options):

unit 1
nodetach
defaultroute
noauth
/dev/ttyUSB0
115200
debug
holdoff 5
persist
logfd 2
lcp-echo-interval 10
lcp-echo-failure 3
ipcp-max-failure 5
maxfail 0
ipcp-accept-local
ipcp-accept-remote
noipdefault
ktune
noaccomp
nopcomp
noccp
novj
novjccomp
nobsdcomp
nodeflate
usepeerdns
noproxyarp
crtscts
kdebug 1
lock
connect '/usr/sbin/chat -v -V -s -t6 -f /tmp/ppp/peers/gsm_chat'

Quindi alla fine è lo stesso anche con i cellulari basta caricare i moduli di kernel.
Scusa non ho capito allora funziona anche sul dgn2200 mettendo i moduli?
Puoi allora abbandonare il firmware del dgn2200m.
Ma che settaggi ha il dgn2200m, c'è la pagina dove si setta l'apn e poi cos'altro si può settare?

cionci
18-10-2010, 09:44
Quindi alla fine è lo stesso anche con i cellulari basta caricare i moduli di kernel.
Scusa non ho capito allora funziona anche sul dgn2200 mettendo i moduli?
Diciamo che si può far funzionare anche sul DGN2200 caricando il modulo. Servono gli script pon e poff che trovi nel sorgente di pppd ed un pppd configurato ad hoc per caricare la configurazione da una directory con possibilità di scrittura.
Anche con i cellulari basta che venga installato il device /dev/ttyUSBx tramite il modulo. A quel punto forse però conviene anche specificare manualmente il comando AT +CGDCONT etc etc ed il numero *99#, come nel link. Per la chiavetta usa *99***1# perché in pratica utilizza un preset che risiede sulla chiavetta stessa ed invia automaticamente quel comando AT.
Puoi allora abbandonare il firmware del dgn2200m.
Di quello userò il kernel. Mi piace la possibilità di poter sfruttare netfilter. Inoltre il kernel è preemptive.
Ma che settaggi ha il dgn2200m, c'è la pagina dove si setta l'apn e poi cos'altro si può settare?
Ci sono i preset con i vari provider, divisi per nazione. Questi dati sarebbe molto interessante poterli sfruttare. Anche se credo si possano trovare pubblicamente.
In più c'è la possibilità di immettere i dns, lo username e la password.

cionci
18-10-2010, 10:26
A me c'è una riga in crontab che a mezzanotte ricarica crontab, se la tolgo non lo fa più, ma c'è il solito problema che se si fa qualche settaggio di pianificazione nel menu del router mi sovrascrive il crontab, così come le modifiche al firewall dal menu del router sovrascrivono le modifiche a iptables.
Il fatto delle modifiche ad iptables è purtroppo inevitabile. Su crontab invece potremmo fare qualcosa mettendo un demone crond che va a cercare i comandi direttamente sul nostro file system. Che ne dici ?

gnommo
18-10-2010, 13:35
Evvai, questo post lo sto mandando con il telefonino collegato al router
:D

cionci
18-10-2010, 14:02
Evvai, questo post lo sto mandando con il telefonino collegato al router
:D
Grande !!! :D
Alla fine i file di configurazione erano uguali, vero ? Spiegami un po' come hai fatto in dettaglio.

gnommo
18-10-2010, 14:11
Grande !!! :D
Alla fine i file di configurazione erano uguali, vero ? Spiegami un po' come hai fatto in dettaglio.
Niente di speciale la normale configurazione dei modem sotto linux.
Ho inserito il modulo cdc-acm per i modem usb, poi ho messo anche il modulo ppp_async, gli script poi quelli sono, poi chiamato il demone pppd e settato il percorso di default con route e messo i dns in resolv.conf.
Solo che con un nokia funziona perfettamente, con un sonyericsson invece lo scambio di dati non avviene risponde con caratteri strani come quando non si è settata bene la configurazione della seriale, devo vedere cosa si deve settare, ma in verità non ho mai provato a farlo andare sotto linux, quindi non so.
A casa ho più di una decina di cellulari, li provo tutti per vedere che problematiche escono, ma in generale tutti i telefonini che funzionano sotto linux dovrebbero funzionare.
Per le chiavette è un modulo chiuso oppure c'è il sorgente? Se sono moduli proprietari allora il supporto delle chiavette sarà una caratteristica del solo dgn2200 :D

cionci
18-10-2010, 14:13
Nono, assolutamente aperto. Modulo usb_serial e sierra (nel mio caso), altrimenti per altre chiavette c'è il modulo Asix.

Valerio5000
18-10-2010, 16:47
una domanda (solo si o no :D )

con queste modifiche si potrebbe aumentare il limite di potenza del wireless x aumentare la copertura giusto?

cionci
18-10-2010, 17:06
con queste modifiche si potrebbe aumentare il limite di potenza del wireless x aumentare la copertura giusto?Se scopri come fare, ben venga.

gnommo
19-10-2010, 15:01
Senti cionci, mi finisco un pò di cose...
mi faccio gli script php che mancano per l'interfaccia grafica,
con sqlite come facciamo? Non vorrei sbagliarmi ma sicuro che non è compilabile il supporto? mi pare di averlo visto in configure... mi sbaglierò... perchè mi ricordo bene che il supporto diretto per sqlite è stato introdotto con il php5.
Volevo sapere un'altra cosa ma il fatto che ci devono essere dir in bin ed in lib con il nome del router significa che nell'immagine dovranno essere presenti entrambi i binari, cioè distribuiremo un'unico mod_fs.bin in grado di funzionare su entrambi i router?

cionci
19-10-2010, 15:13
Solo in PHP 5 è embedded :( Per Sqlite ci sono due opzioni: integrarlo come extension ( http://pecl.php.net/package/SQLite ) o usare direttamente l'eseguibile sqlite3. Anche la seconda alla fine non mi pare una brutta ipotesi, magari facendo una funzioncina da includere nei vari sorgenti per astrarne un minimo l'uso.
cioè distribuiremo un'unico mod_fs.bin in grado di funzionare su entrambi i router?
Secondo me è la scelta migliore. Tu che ne dici ?

cionci
20-10-2010, 01:12
con queste modifiche si potrebbe aumentare il limite di potenza del wireless x aumentare la copertura giusto?
Se vuoi fare qualche prova sul comando wlctl sei il benvenuto. Non un dispositivo wifi N per fare queste prove.


# wlctl curpower
Power Control: On, HW
Current channel: 11u
BSS channel: 11u
BSS Local Max: 63.0 dBm
BSS Local Constraint: 0.0 dB
User Target: 31.75 dBm
SROM antgain: 2G: 2.0 dB, 5G: 0.0 dB

Regulatory Limits:
CCK : 30.0
Legacy OFDM 20MHz SISO: 30.0
Legacy OFDM 20MHz CDD : 30.0
MCS 0-7 20MHz SISO : 30.0
MCS 0-7 20MHz CDD : 30.0
MCS 0-7 20MHz STBC : 30.0
MCS 8-15 20MHz SDM : 30.0
Legacy OFDM 40MHz SISO: 30.0
Legacy OFDM 40MHz CDD : 30.0
MCS 0-7 40MHz SISO : 30.0
MCS 0-7 40MHz CDD : 30.0
MCS 0-7 40MHz STBC : 30.0
MCS 8-15 40MHz SDM : 30.0
MCS 32 : 30.0

Board Limits:
CCK : 17.50
Legacy OFDM 20MHz SISO: 15.50
Legacy OFDM 20MHz CDD : 15.50
MCS 0-7 20MHz SISO : 15.50
MCS 0-7 20MHz CDD : 15.50
MCS 0-7 20MHz STBC : 15.50
MCS 8-15 20MHz SDM : 15.50
Legacy OFDM 40MHz SISO: 15.50
Legacy OFDM 40MHz CDD : 15.50
MCS 0-7 40MHz SISO : 15.50
MCS 0-7 40MHz CDD : 15.50
MCS 0-7 40MHz STBC : 15.50
MCS 8-15 40MHz SDM : 15.50
MCS 32 : 15.50

Power Target:
CCK : 16.0
Legacy OFDM 20MHz SISO: 14.0
Legacy OFDM 20MHz CDD : 14.0
MCS 0-7 20MHz SISO : 14.0
MCS 0-7 20MHz CDD : 14.0
MCS 0-7 20MHz STBC : 14.0
MCS 8-15 20MHz SDM : 14.0
Legacy OFDM 40MHz SISO: 14.0
Legacy OFDM 40MHz CDD : 14.0
MCS 0-7 40MHz SISO : 14.0
MCS 0-7 40MHz CDD : 14.0
MCS 0-7 40MHz STBC : 14.0
MCS 8-15 40MHz SDM : 14.0
MCS 32 : 14.0

Maximum Power Target among all rates: 16.0 16.0
Rate index with Maximum Power Target: 0 0
Last adjusted est. power : 0.0 16.25

# wlctl cmds
a_rate cac_delts nvram_get scan
a_mrate cac_delts_ea noise scancache_clear
ap cac_tslist nphy_test_tssi spect
atten cac_tslist_ea nphy_test_tssi_offs scanresults
ampdu_activate_test cac_tspec nphy_rssiant status
ampdu_tid cac_tspec_ea nvotpw scansuppress
ampdu_retry_limit_tid chanim_state nrate suprates
ampdu_rr_retry_limit_tid chanim_mode nphy_antsel scan_channel_time
ampdu_send_addba down out scan_unassoc_time
ampdu_send_delba dump otpw scan_home_time
ampdu_clear_dump dfs_channel_forced otpdump scan_passive_time
antdiv dpt_deny otpstat scan_nprobes
addwep dpt_endpoint obss_scan_params ssid
authorize dpt_pmk obss_coex_action shortslot
auth dpt_fname PM shortslot_override
assoc dpt_list promisc shortslot_restrict
autocountry_default deauthorize powerindex scb_timeout
assoclist deauthenticate phyreg slowtimer
arpoe disassoc pcieserdesreg sta_info
arp_ol dfs_status plcphdr staname
arp_peerage dtim phytype sample_collect
arp_table_clear del_ie primary_key send_nulldata
arp_hostip delta_stats_interval perm_etheraddr srchmem
arp_hostip_clear delta_stats passive seq_start
arp_stats diag prb_resp_timeout seq_stop
arp_stats_clear eap phylist seq_delay
authe_sta_list evm pktcnt seq_error_index
autho_sta_list eventing protection_control scblist
assoc_pref event_msgs phy_rssi_ant tssi
add_ie eap_restrict pwr_percent txpwr
assoc_info frag pmkid_info txpwr1
autochannel fqacurcy phy_rxiqest txpathpwr
abminrate fasttimer pkteng_start txpwrlimit
ap_isolate frameburst pkteng_stop txant
apname freqtrack pkteng_stats tsc
antgain fem phytable tkip_countermeasures
assoclistinfo gpioout pavars txinstpwr
assertlog gmode povars toe
assert_bypass gmode_protection pkt_filter_add toe_ol
bg_rate gmode_protection_control pkt_filter_clear_stats toe_stats
bg_mrate gmode_protection_override pkt_filter_enable toe_stats_clear
bssid glacialtimer pkt_filter_list txfifo_sz
bssmax HCI_cmd pkt_filter_mode txmcsset
band infra pkt_filter_delete up
bands iscan_s pkt_filter_stats ucflags
bi iscan_c quiet ucantdiv
bcmerrorstr iscanresults restart upgrade
bss ignore_bcns reboot ver
btc_params isup radio wrvar
btc_flags interference rdvar wake
bmac_reboot interference_override revinfo wepstatus
cmds join rts wsec_test
clk join_pref rate wsec_restrict
ciswrite keys radioreg wsec
cisdump keep_alive rateparam wpa_auth
cis_source lrl rmwep wpa_cap
cisconvert lazywds regulatory wds
customvar1 longtrain rateset wet
cwmin legacy_erp roam_trigger wds_remote_mac
cwmax lifetime roam_delta wds_wpa_role_old
channel list_ie roam_scan_period wds_wpa_role
cur_mcsset lpphy_papdepstbl rssi wme
chanspecs lpphy_txiqcc radar wme_ac
chanspec lpphy_txlocc radarargs wme_apsd
cur_etheraddr led radarargs40 wme_apsd_sta
chanlist ledbh radarthrs wme_dp
channels led_blink_sync rm_req wme_counters
channels_in_country msglevel rm_rep wme_clear_counters
curpower monitor reinit wme_tx_params
channel_qa mrate rand wme_maxbw_params
channel_qa_start macreg reset_d11cnts wowl
country mac rifs wowl_bcn_loss
crsuprs macmode rifs_advert wowl_pattern
csa measure_req reassoc wowl_wakeind
constraint malloc_dump rxmcsset wowl_status
cap mimo_txbw srclear wowl_pkt
chan_info maxpower srdump wme_apsd_trigger
counters mimo_ss_stf srwrite wme_autotrigger
csscantimer nvram_source srcrc
closed nvram_dump srl
closednet nvset shmem
cac_addts nvget set_pmk

cionci
20-10-2010, 09:33
Che ne dici di aggiungere questo comando a boot.sh ? Dovrebbe funzionare anche sul tuo, no ?

sed 's:/bin/sh:/tmp/sh:' /etc/passwd > $modfs/tmp/passwd2 ; cp $modfs/tmp/passwd2 /etc/passwd ; rm $modfs/tmp/passwd2

In questo modo la nuova shell viene usata anche per il login tramite password, altrimenti viene usata quella vecchia.

cionci
20-10-2010, 09:43
Il pacchetto per httpd l'hai già fatto ?

gnommo
21-10-2010, 08:47
una domanda (solo si o no :D )

con queste modifiche si potrebbe aumentare il limite di potenza del wireless x aumentare la copertura giusto?

Sul dgn3500 si può modificare la txpower, ed ha impatto sulla copertura, di default è a 19dbm se lo abbasso si abbassa il segnale,se lo alzo si alza di poco, probabilmente però perchè ho provato solo fino a 21dbm, non so se sia sicuro alzare non vorrei scassare il wifi, abbassandola forse si potrebbe guadagnare in stabilità devo provare.
Però questo settaggio non so cosa significa perchè con il wifi N è tutto più complicato,ci sono diverse antenne e modalità, come illustrato da cionci.
@cionci per aumentare la copertura in wifi G dovresti aumentare Legacy OFDM 20MHz SISO però se quei valori board limits sono i limiti allora non c'è niente da migliorare

cionci
21-10-2010, 11:14
@cionci per aumentare la copertura in wifi G dovresti aumentare Legacy OFDM 20MHz SISO però se quei valori board limits sono i limiti allora non c'è niente da migliorare
Me lo immaginavo. Il problema è che non so bene come si posano alzare i valori singolarmente. Sinceramente non mi sembra che si possa, e come ci ho provato non si riesce ad andare oltre al valore già impostato.

cionci
22-10-2010, 10:17
Hai per caso il pacchettino pronto per il print server ? Così lo adatto anche al mio. Non credo che serva alcuna interfaccia grafica, giusto ?
Stavo pensando sia all'autmounter (che io devo assolutamente disabilitare, perché se collego una periferica mi smonta anche quelle già connesse) che al supporto per telefonini/chiavette UMTS.
Per il primo converrebbe monitorare /proc/partitions, per il secondo la cosa più intelligente credo che sia monitorare il file /proc/bus/usb/devices. Ce l'hai il secondo file ?
Hai qualche esperienza con il demone samba ? Io non ci ho mai lavorato a basso livello.

Credi che per diminuire l'uso della memoria converrebbe condividere direttamente la directory /tmp/shares senza creare una condivisione diversa per ogni drive ?
Magari lasciando l'opzione all'utente di personalizzare questa cosa e creare altre condivisioni avanzando nella gerarchia dell'albero delle directory.

gnommo
22-10-2010, 10:32
Hai per caso il pacchettino pronto per il print server ? Così lo adatto anche al mio. Non credo che serva alcuna interfaccia grafica, giusto ?
Stavo pensando sia all'autmounter (che io devo assolutamente disabilitare, perché se collego una periferica mi smonta anche quelle già connesse) che al supporto per telefonini/chiavette UMTS.
Per il primo converrebbe monitorare /proc/partitions, per il secondo la cosa più intelligente credo che sia monitorare il file /proc/bus/usb/devices. Ce l'hai il secondo file ?
Hai qualche esperienza con il demone samba ? Io non ci ho mai lavorato a basso livello.

Credi che per diminuire l'uso della memoria converrebbe condividere direttamente la directory /tmp/shares senza creare una condivisione diversa per ogni drive ?
Magari lasciando l'opzione all'utente di personalizzare questa cosa e creare altre condivisioni avanzando nella gerarchia dell'albero delle directory.
:D ho parecchie cose arretrate,in questo fine settimana cerco di finire tutto.
Sul dgn3500 non c'è bisogno di modificare niente per le periferiche usb, perchè non ha lo stesso sistema di montaggio del dgn2200, devo giusto sovrascrivere uno script in /etc (a me scrivibile) per far montare le altre partizioni presenti in un disco e per il supporto per i filesystem diversi da fat32 e ntfs.
Anche per le altre periferiche non ce bisogno di monitoraggio, se viene inserita la stampante o il cellulare vengono riconosciute e funzionano altrimenti no.

cionci
22-10-2010, 10:48
Ok, perché inserisci subito tutti i moduli nel kernel, mi immagino.
Io invece pensavo di installare i moduli adatti in base al vendor e product id... In modo da alleggerire il tutto.
Magari invece di fare così potrei creare un wizard per la configurazione del modem. Si sceglie il tipo di modem ed in base a quello si caricano i moduli adatti, così in effetti è ancora più semplice.

gnommo
22-10-2010, 10:58
così in effetti è ancora più semplice.

infatti :D

gigi88
27-10-2010, 08:43
Seguo con interesse :)

Luigi Merusi
28-10-2010, 21:33
Volevo segnalare che semplicemente salvando su hard disk il file http://192.168.0.1/WAN_wan.htm e modificandolo con notepad, riaprendolo e applicando i settaggi (modificati), sono riuscito a settare permanentemente l'MTU a 1478 anzichè 1458.

Ho PPPoA ma è possibile settarlo pure per PPPoE (qualsiasi valore)

Senz'altro cionci saprà come fare, però volevo segnalare che non ci vuole molto e che è possibile! :)

Ora guardo se si riesce a lavorare su altre cosette...