[ninux-dev] Convertire NetJSON a UCI

Nemesis nemesis at ninux.org
Fri Sep 18 19:13:44 CEST 2015


A lavoro sto scrivendo un tool per convertire NetJSON a UCI che mi
aiuterà a mandare in pensione OpenWISP Manager.

La libreria si chiama netjsonconfig
<https://github.com/openwisp/netjsonconfig>.

L'obiettivo finale è poter salvare la configurazione dei device in un
unico campo JSONinvece che 3mila tabelle SQL tutte intrecciate.

Sto ottenendo risultati incoraggianti, ad esempio, questo NetJSON:

        {
            "type": "DeviceConfiguration",
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "addresses": [
                        {
                            "address": "192.168.1.1",
                            "mask": 24,
                            "proto": "static",
                            "family": "ipv4"
                        }
                    ],
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "ssid": "MyWifiAP",
                        "hidden": True
                    }
                }
            ],
            "radios": [
                {
                    "name": "radio0",
                    "phy": "phy0",
                    "driver": "mac80211",
                    "protocol": "802.11n",
                    "channel": 3,
                    "channel_width": 20,
                    "tx_power": 3
                }
            ]
        }

Diventa:

    package network

    config interface 'wlan0'
        option ifname 'wlan0'
        option ipaddr '192.168.1.1/24'
        option proto 'static'

    package wireless

    config wifi-device 'radio0'
        option channel '3'
        option htmode 'HT20'
        option hwmode '11g'
        option phy 'phy0'
        option txpower '3'
        option type 'mac80211'

    config wifi-iface
        option device 'radio0'
        option hidden '1'
        option mode 'ap'
        option network 'wlan0'
        option ssid 'MyWifiAP'

Qui c'è il codice del test, se ci buttate un occhio dovreste capire
facilmente cosa succede, è molto leggibile:
https://github.com/openwisp/netjsonconfig/blob/master/tests/test_openwrt.py#L625-L684

Per svilupparla sto seguendo la documentazione di UCI
<http://wiki.openwrt.org/doc/uci> e sto imparando una marea di cose!

Ogni tanto provo le config generate su un routerino e pare che
funzionano, ma sicuramente quando si andrà a regime ne scoprirò delle
belle ... :-D

Cmq la buona notizia in tutto questo è che lo strumento finale che
uscirà fuori da tutto questo lavoro lo potremo utilizzare anche in
ninux, ogni isola, gruppo o individuo potrebbe farsi il suo
configuratore con i suoi template ecc.

L'altra buona notizia è che l'architettura della libreria permette di
aggiungere il supporto a più firmware creando nuovi backend. Quindi si
possono potenzialmente scrivere backend per versioni customizzate di
OpenWRT, DDWRT, Libremesh o addirittura AirOS (che ha un file di
configurazione che non è molto lontano da quello che esce fuori facendo
"uci show" su OpenWRT), l'importante è che il backend avrà come output
una configurazione installabile.

Nemesis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ml.ninux.org/pipermail/ninux-dev/attachments/20150918/7acffdf3/attachment-0001.html>


More information about the ninux-dev mailing list