[Bologna] Fwd: [ninux-dev] Convertire NetJSON a UCI

ThEgAmEr xthegamerx a gmail.com
Ven 18 Set 2015 20:24:58 CEST


Cose belle da Nemesis di Ninux Roma!


---------- Forwarded message ----------
From: Nemesis <nemesis a ninux.org>
Date: 2015-09-18 19:13 GMT+02:00
Subject: [ninux-dev] Convertire NetJSON a UCI
To: ninux-dev a ninux.org


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.

L'obiettivo finale è poter salvare la configurazione dei device in un
unico campo JSON invece 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 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

_______________________________________________
ninux-dev mailing list
ninux-dev a ml.ninux.org
http://ml.ninux.org/mailman/listinfo/ninux-dev



Maggiori informazioni sulla lista Bologna