<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<font face="Helvetica, Arial, sans-serif"><font face="Helvetica,
Arial, sans-serif">A lavoro sto scrivendo u<font
face="Helvetica, Arial, sans-serif">n <font face="Helvetica,
Arial, sans-serif">tool per convertire NetJSON a UCI che mi
aiuterà a mandare in pensione OpenWISP Manager.<br>
<br>
<font face="Helvetica, Arial, sans-serif">La libreria si
chiama <a
href="https://github.com/openwisp/netjsonconfig">netjsonconfig</a>.</font><br>
<br>
<font face="Helvetica, Arial, sans-serif">L'obiettivo finale
è </font>poter salvare la configu<font face="Helvetica,
Arial, sans-serif">razione dei device in <font
face="Helvetica, Arial, sans-serif">un unico campo JSON<font
face="Helvetica, Arial, sans-serif"> invece che 3<font
face="Helvetica, Arial, sans-serif">mila tabelle SQL
tutte intrecciate.<br>
<br>
<font face="Helvetica, Arial, sans-serif"><font
face="Helvetica, Arial, sans-serif">Sto
ottenendo risultati in<font face="Helvetica,
Arial, sans-serif">coraggianti, ad esempio,
questo NetJSON:<br>
</font></font></font></font></font></font></font></font></font></font></font><br>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
{<br>
"type": "DeviceConfiguration",<br>
"interfaces": [<br>
{<br>
"name": "wlan0",<br>
"type": "wireless",<br>
"addresses": [<br>
{<br>
"address": "192.168.1.1",<br>
"mask": 24,<br>
"proto": "static",<br>
"family": "ipv4"<br>
}<br>
],<br>
"wireless": {<br>
"radio": "radio0",<br>
"mode": "access_point",<br>
"ssid": "MyWifiAP",<br>
"hidden": True<br>
}<br>
}<br>
],<br>
"radios": [<br>
{<br>
"name": "radio0",<br>
"phy": "phy0",<br>
"driver": "mac80211",<br>
"protocol": "802.11n",<br>
"channel": 3,<br>
"channel_width": 20,<br>
"tx_power": 3<br>
}<br>
]<br>
}<br>
<br>
Diventa:<br>
<blockquote>package network<br>
<br>
config interface 'wlan0'<br>
option ifname 'wlan0'<br>
option ipaddr '192.168.1.1/24'<br>
option proto 'static'<br>
<br>
package wireless<br>
<br>
config wifi-device 'radio0'<br>
option channel '3'<br>
option htmode 'HT20'<br>
option hwmode '11g'<br>
option phy 'phy0'<br>
option txpower '3'<br>
option type 'mac80211'<br>
<br>
config wifi-iface<br>
option device 'radio0'<br>
option hidden '1'<br>
option mode 'ap'<br>
option network 'wlan0'<br>
option ssid 'MyWifiAP'<br>
</blockquote>
Qui c'è il codice del test, se ci buttate un occhio dovreste capire
facilmente cosa succede, è molto leggibile:<br>
<a class="moz-txt-link-freetext" href="https://github.com/openwisp/netjsonconfig/blob/master/tests/test_openwrt.py#L625-L684">https://github.com/openwisp/netjsonconfig/blob/master/tests/test_openwrt.py#L625-L684</a><br>
<br>
Per svilupparla sto seguendo la <a
href="http://wiki.openwrt.org/doc/uci">documentazione di UCI</a> e
sto imparando una marea di cose!<br>
<br>
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<br>
<br>
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.<br>
<br>
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.<br>
<br>
Nemesis<br>
</body>
</html>