Unsolclic

De Guifi.net - Wiki Català

Introducció i Definició

L'UnsolClic és una eina per configurar els aparells que formen part de la xarxa Guifi.net i un dels factors clau per al seu creixement i expansió. Pren la forma d'un fitxer de text que correspòn a una sequència d'ordres escrita en el llenguatge acceptat per el aparell que utilitzem per connectar a la xarxa lliure guifi.net.

Aquest document vol descriure, des de la vessant del desenvolupament del mòdul Drupal-Guifi, tots els processos involucrats en la confecció del UnsolClic

Fortaleses i Febleses

  • Fortaleses
    • Aïlla a l'usuari de la configuració del trasto
    • Actua com a backup de la configuració
    • Fa visibles les configuracións dels trastos per a tots els usuaris
    • Dóna consistència a la xarxa
  • Febleses
    • Ha de generar codi en diferents llenguatges per a diferents dispositius, per tant s'han de conèixer mínimament aquests llenguatges
    • La incorporació de dispositius nous requereix aquesta codificació i porta temps.
    • En la seva implementació actual es genera a l'instant i no fa cache ni manté [[control de versions

]]

Exemples

Procés de Generació

La recepta dels tres passos per connectar

Abans de generar el UnSolClic cal que completem a la web de guifi.net la recepta dels tres passos per connectar, que ens proporcionarà tota la informació imprescindible, bàsicament

  • 1. Crear un node, defineix el nom del node, la zona de la que hereta configuracions, etc...

Addnode1.png

  • 2. Crear un trasto, defineix totes les propietats del nostre aparelli el firmware que executa, així com dades identificatives del nostre trasto.

Addradio1b.png

  • 3. Crear un enllaç, defineix quines seran les connexions del nostre node, l'adreça IP assignada i quins protocols d'enrutament s'utilitzaran

Addradio3b.png

Fitxers involucrats (per ordre d'execució)

├── guifi.module : Definició de rutes
├── guifi_unsolclic.inc.php : Execució Ruta UnSolclic, preparació de dependencies, generació Unsolclic
├── guifi_includes.inc.php : Funcions diverses de guifi.
├── guifi_node.inc.php : Càrrega de la informació del node
├── guifi_devices.inc.php : Càrrega de la informació del trasto
├── guifi_radios.inc.php : Càrrega de la informació de la radio
├── guifi_interfaces.inc.php : Càrrega de la informació de les interfaces
├── guifi_ipv4.inc.php : Càrrega de la informació de les adreces ip
├── guifi_links.inc.php : Càrrega de la informació dels enllaços

Entitats involucrades

  • Zona, la més específica de les diferents zones de la xarxa guifi.net on volem connectar, és a dir, que no tingui altres subzones
  • Node, la ubicació concreta des d'on volem connectar.
    • Trasto (device), l'aparell que utilitzarem per realitzar la connexió ( un node pot tenir més de un trasto i de diferents tipus)
    • Radio , el dispositiu inalàmbric que utilitza el nostre trasto per establir una connexió física ( per enllaçar es requereix almenys una radio)
    • Interface , el nom mitjançant el qual interactuem amb la radio (n'hi pot haver vàries per cada radio)
    • IPV4 , cadascuna de les adreces IP que reben les interfaces.
    • Enllaços (links) , cadascuna de les connexions del nostre trasto amb altres trastos propers (poden ser wireless o per cable).
  • Fabricant, la casa comercial que ven el trasto
  • Model, la denominació pròpia del fabricant per a determinar el trasto
  • Firmware, el programari intern que executa el trasto per realitzar totes les seves funcions (pot ser propietat del Fabricant, de tercers o de Programari Lliure)

Esquema de la Base de Dades

En la següent imatge es pot veure l'esquema de les taules de les entitats involucreades en la generació del fitxer UnSolClic:

TaulesUnSolclic2.png

Families de Casos actuals

Les configuracions UnSolclic existents es basen en les següents famílies de firmwares :

TODO : Faltaria afegir altres firmwares com el de qMp, etc...

Actualment, tot el codi implicat dels unsolclics es troba dins de la carpeta firmware, on tenim un fitxer per cadascuna de les families esmentades.

├── firmware
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/airos.inc.php airos.inc.php
│   ├── firmware-todo.inc.php
│   ├── guifistationos.inc.php
│   ├── kamikaze
│   │   ├── ar71xx
│   │   │   └── kamikaze_ap.inc.php
│   │   ├── atheros
│   │   │   ├── kamikaze_ad-hoc.inc.php
│   │   │   ├── kamikaze_ap.inc.php
│   │   │   └── kamikaze_client.inc.php
│   │   ├── broadcom
│   │   │   ├── kamikaze_ad-hoc.inc.php
│   │   │   ├── kamikaze_ap.inc.php
│   │   │   └── kamikaze_client.inc.php
│   │   └── ixp4xx
│   │       └── kamikaze_ap.inc.php
│   ├── kamikaze.inc.php
│   ├── mikrotik-routeros.inc.php
│   └── wrt-sveasoft-dd.inc.php

Procés Original Detallat

  • Es crida la URL de generació del UnSolclic.
  • Es carrega la ruta definida a guifi.module
  $items['guifi/device/%guifi_device/view/unsolclic'] = array(
    'title' => 'unsolclic',
    'page callback' => 'guifi_unsolclic',
    'page arguments' => array(2),
    'access callback' => 'user_access',
    'access arguments' => array('access content'),
    'type' => MENU_LOCAL_TASK
  );
  • S'executa la funció guifi_unsolclic() del fitxer guifi_unsolclic.inc.php que rep tota la informació del device del que volem l'unsolclic
function guifi_unsolclic($dev, $format = 'html') {
  • Es comprova que el Device tingui assignat un firmware
  • Es carreguen els fitxers de la familia de firmwares corresponent
  • Es comprova el firmware del trasto per cridar la funció del fitxer per aquella família.
  • Es mostra per pantalla el resultat de tot el procés.


Procés Nou Detallat

Continua a partir del pas tres del Procés Original


Afegir suport per a nous aparells

Per a poder fer aquestes accions cal el rol «Developer».

Idea general

L'objectiu és millorar el procés d'incorporació de nous dispositius a l'aplicació actual. Mitjançant una nova gestió web i un sistema de plantilles estándard, els usuaris avançats podràn crear els configuradors 'UnSolClic' per als nous dispositius del mercat i mantenir els existents amb més facilitat i eficiència.

Diagrama de fluxe del procés

En el següent diagrama, partint de la situació inicial que veiem a la part superior esquerra, es mostra el procés a seguir per poder generar l'UnSolclic per a un aparell nou

Diagrama fluxe2.png

Creació de Fabricants

  • Llistat

Manufacturer1.png

  • Formulari

Manufacturer2.png

Creació de Models

Llistat

  • Models1b.png

Formulari

  • Models2c.png

Creació de Paràmetres

Llistat

  • Params1b.png

Formulari

  • Params2c.png


Creació de Firmwares

Llistat

  • Firmware1b.png

Formulari

  • Firmware2b.png

Creació de Plantilles UnsolClic

Llistat

  • Unsolclic1b.png

Formulari

  • Unsolclic2b.png


Motor de plantilles Twig

En la majoria de les webs actuals trobem que, per facilitar el manteniment i l'optimització de codi, es busca la manera de separar la presentació del contingut, el patró de disseny del Model-Vista-Controlador és el més utilitzat en la majoria de frameworks actuals. Així per una banda tenim les nostres dades i per l'altre un fitxer plantilla de com volem mostrar-les.

Per implementar la capa de presentació és molt útil recórrer a un motor de plantilles estàndard que ens faciliti la feina. En el nostre sistema utilitzarem Twig per la seva potència i simplicitat.Les seves característiques principals són les següents:

  • Orígen : Symfony 2 Framework - Llicència : BSD
  • Substitució de variables, filtres de text i crida de funcions natives.
  • Estructures de control de flux
  • Inclusió de fitxers i catxé per augment de rendiment
  • Herència de plantilles
  • Extensions, plugins i sandbox

Sintaxi de Twig

La sintaxi de Twig s'ha pensat per ser fàcil de fer servir i ràpida. Bàsicament, una plantilla és un fitxer de text en el que hi trobem variables o expressions i etiquetes que en controlen la lògica.

Per mostrar el contingut d'una variable o expressió utilitzem la següent sintaxi : Plantilla:Variable

Per utilitzar etiquetes de control, utilitzarem {% set buffer = 'un string amb quelcom' %}


En el següent exemple de plantilla podem veure diferents exemples de la sintaxi de Twig

{# hello comment! #}
{{ foo.bar }} {% set foo = 'foo' %}
{{ name|striptags|title }}
{% if users|length > 0 %}
    <ul>
        {% for user in users %}
            <li>{{ user.username|e }}</li>
        {% endfor %}
    </ul>
{% endif %}

A la documentació oficial de Twig podem veure més casos

Utilització de Twig

Des de la banda del codi, per utilitzar Twig cal incloure la llibreria, carregar l'objecte i definir mínimament el seu comportament. A la documentació oficial hi podem trobar el següent fragment de codi :

require_once '/path/to/lib/Twig/Autoloader.php';
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem('/path/to/templates');
$twig = new Twig_Environment($loader, array(
    'cache' => '/path/to/compilation_cache',
));
<pre>

Per carregar una plantilla utilitzem el següent fragment: 
<pre>
$template = $twig->loadTemplate('index.html');

i finalment per establir els valors que prendran les variables a la nostra plantilla i visualitzar-la, el següent codi :

echo $template->render(array('the' => 'variables', 'go' => 'here'));

Convencions de Guifi.net disponibles a les plantilles

Com podem extreure de les entitats de guifi.net la informació necessària per fer una plantilla UnSolClic?

Abans de la confecció de l'UnSolclic s'inicialitzen unes variables que contenen tota la informació de les entitats necessàries per tal que la poguem referenciar a les nostres plantilles. Aquesta informació arriba estructurada de diferents formes i hi podem accedir de dos formes:

  • Amb una convenció de noms


  • Jeràrquicament


Edició de plantilles UnSolclic

Validació de plantilles UnSolclic

Plantilles UnSolclic

Validades

  • Mikrotik - OmniTIK Uxx-5HnD- RouterOSv5.x

Pendents de Validar

  • Ubiquiti - NanoStation2 - AirOsv30
  • Mikrotik -Routerboard 433 - RouterOSv4.7+
  • Linksys - WRT54GL - DD-guifi (MODE AP)

Combinacions de Model - Firmware

A la pràctica, com que passem a tenir una plantilla UnSolClic per cada combinació de Model / Firmware, necessitem conèixer el total de combinacions que trobem a dins de la xarxa guifi.net, per saber quantes plantilles hauriem de confeccionar.

A continuació mostrem el llistat amb totes les combinacions existents a la BD real de guifi.net a data de 15/9/2012

total name model nom


3818 Ubiquiti NanoStation2 AirOsv30


2237 Ubiquiti NanoStation5 AirOsv30


2144 Ubiquiti AirMaxM5 Rocket/Nano/Loco AirOsv52


1785 Linksys WRT54GL DD-guifi


1428 Ubiquiti NanoStation2 Freifunk-OLSR


1319 Ubiquiti NanoStation Loco5 AirOsv30


1247 Ubiquiti AirMaxM5 Bullet/PwBrg/AirGrd/NanoBr AirOsv52


1225 Buffalo WHR-HP-G54, WHR-G54S DD-guifi


969 Mikrotik Routerboard SXT 5HnD RouterOSv5.x


892 Ubiquiti NanoStation Loco2 AirOsv30


664 Ubiquiti NanoStation Loco5 AirOsv3.6+


441 Ubiquiti AirMaxM2 Rocket/Nano/Loco AirOsv52


410 Linksys WRT54GL DD-WRTv23


362 Ubiquiti NanoStation5 AirOsv3.6+


361 Other Other n/a


297 Mikrotik Routerboard SXT 5HnD RouterOSv4.7+


292 Mikrotik Routerboard 433 RouterOSv4.0+


291 Mikrotik Routerboard 133C RouterOSv2.9


266 Ubiquiti NanoStation2 AirOsv3.6+


243 Buffalo WHR-HP-G54, WHR-G54S DD-WRTv23


242 Mikrotik Routerboard 433 RouterOSv5.x


230 Mikrotik Routerboard 600 RouterOSv5.x


186 Linksys WRT54Gv1-4 Alchemy


181 Mikrotik Routerboard 750/G RouterOSv5.x


177 Ubiquiti NanoStation5 Freifunk-OLSR


175 Mikrotik Routerboard 433 RouterOSv3.x


172 Mikrotik Routerboard 600 RouterOSv3.x


169 Linksys WRT54Gv1-4 DD-WRTv23


162 Ubiquiti AirMaxM2 Bullet/PwBrg/AirGrd/NanoBr AirOsv52


160 Mikrotik Routerboard 433 RouterOSv4.7+


124 Ubiquiti NanoStation Loco2 AirOsv3.6+


119 Mikrotik Routerboard 600 RouterOSv4.7+


117 Mikrotik Routerboard 411 RouterOSv5.x


114 Mikrotik Routerboard 411 RouterOSv3.x


112 Mikrotik Routerboard 411 RouterOSv4.7+


112 Mikrotik Routerboard 532 RouterOSv2.9


89 Linksys WRT54Gv1-4 DD-guifi


79 Mikrotik Routerboard 750/G RouterOSv4.7+


66 Ubiquiti NanoStation2 kamikaze


66 Mikrotik Supertrasto guifiBUS guifi.net RouterOSv5.x


59 Ubiquiti Bullet2 AirOsv30


53 Mikrotik Routerboard 532 RouterOSv5.x


46 Mikrotik Routerboard 800 RouterOSv5.x


43 Mikrotik Routerboard 133 RouterOSv2.9


42 Mikrotik Routerboard 532 RouterOSv4.7+


39 Linksys WRT54Gv1-4 n/a


39 Ubiquiti NanoStation Loco2 Freifunk-OLSR


36 Mikrotik Routerboard 493/G RouterOSv5.x


32 Ubiquiti RouterStation gsffirm


32 Mikrotik Routerboard 532 RouterOSv3.x


31 Mikrotik Routerboard 800 RouterOSv4.7+


30 Ubiquiti NanoStation5 AirOsv221


30 Pcengines Alix2 kamikaze


29 Mikrotik Routerboard 133 RouterOSv3.x


29 Linksys WRT54GL whiterussian


27 Linksys WRT54GSv4 DD-guifi


22 Mikrotik Supertrasto guifiBUS guifi.net RouterOSv4.7+


21 Linksys WRT54GSv4 DD-WRTv23


21 Ubiquiti LiteStation2 AirOsv30


21 Ubiquiti NanoStation2 DD-WRTv23


20 Mikrotik Routerboard 133C RouterOSv3.x


20 Pcengines Alix2 gsffirm


20 Ubiquiti LiteStation5 AirOsv30


19 Ubiquiti NanoStation2 AirOsv221


19 Linksys WRT54GL Freifunk-OLSR


17 Ubiquiti Bullet2 AirOsv3.6+


17 Mikrotik OmniTIK Uxx-5HnD RouterOSv5.x


17 Ubiquiti NanoStation5 DD-WRTv23


16 Ubiquiti RouterStation kamikaze


15 Linksys WRT54GSv1-2 DD-guifi


15 Ubiquiti NanoStation Loco2 kamikaze


15 Mikrotik Routerboard 333 RouterOSv3.x


15 Asus Asus WL-500xx DD-WRTv23


14 Linksys WRT54GL kamikaze


13 Ubiquiti Bullet5 AirOsv30


13 Ubiquiti NanoStation Loco5 AirOsv221


11 Meraki Meraki/Fonera kamikaze


11 Mikrotik Routerboard 153 RouterOSv2.9


11 Ubiquiti LiteStation2 Freifunk-OLSR


10 Linksys WRT54Gv1-4 kamikaze


10 Linksys WRT54GL DD-WRTv24preSP2


9 Mikrotik Routerboard 133 RouterOSv4.7+


8 Mikrotik Routerboard 133C RouterOSv5.x


8 Pcengines Alix3 kamikaze


7 Other Other DD-guifi


7 Mikrotik Routerboard 133 RouterOSv5.x


7 D-Link DIR-600 B1/B2 DD-WRTv24preSP2


7 Ubiquiti NanoStation Loco5 AirOsv52


7 Ubiquiti Bullet5 AirOsv3.6+


7 Ubiquiti AirMaxM5 Rocket/Nano/Loco AirOsv3.6+


7 Mikrotik Routerboard 112 RouterOSv2.9


7 Mikrotik Routerboard 1100 RouterOSv5.x


6 Setup Informatica GuifiStation2 GuifiStationOS1.0


6 Linksys WRT54GL Talisman


6 Meraki Meraki/Fonera DD-WRTv24preSP2


6 Setup Informatica GuifiStation5 GuifiStationOS1.0


5 Ubiquiti RouterStationPro kamikaze


5 Ubiquiti NanoStation Loco5 kamikaze


5 Mikrotik Routerboard 800 RouterOSv4.0+


5 Ubiquiti NanoStation Loco5 DD-WRTv23


5 Ubiquiti NanoStation5 kamikaze


5 Mikrotik Supertrasto guifiBUS guifi.net RouterOSv2.9


4 Linksys WRT54GL n/a


4 Mikrotik Routerboard 2011 RouterOSv5.x


4 Ubiquiti RouterStation DD-WRTv23


4 Ubiquiti RouterStationPro gsffirm


4 Mikrotik Supertrasto guifiBUS guifi.net RouterOSv3.x


4 Linksys WRT54Gv1-4 DD-WRTv24preSP2


4 Mikrotik Routerboard 133C RouterOSv4.7+


4 Other Other AirOsv30


4 Ubiquiti NanoStation2 AirOsv52


4 Mikrotik Routerboard 532 kamikaze


4 Ubiquiti NanoStation Loco5 Freifunk-OLSR


4 Mikrotik Routerboard 493/G RouterOSv4.7+


3 Ubiquiti NanoStation5 gsffirm


3 Ubiquiti NanoStation5 AirOsv52


3 Ubiquiti NanoStation Loco2 AirOsv221


3 Mikrotik Routerboard 333 RouterOSv4.7+


3 Mikrotik Routerboard 600 RouterOSv2.9


3 Ubiquiti AirMaxM5 Rocket/Nano/Loco AirOsv30


3 Mikrotik Routerboard 333 RouterOSv5.x


3 Other Other Alchemy


3 Linksys WRT54GSv4 kamikaze


3 Asus Asus WL-500xx kamikaze


2 Gateworks Avila GW2348-4 kamikaze


2 Ubiquiti NanoStation Loco5 gsffirm


2 Linksys WRT54Gv1-4 Talisman


2 Asus Asus WL-500xx AirOsv52


2 Mikrotik Routerboard 750/G DD-guifi


2 Mikrotik Routerboard 532 RouterOSv4.0+


2 Buffalo WHR-HP-G54, WHR-G54S n/a


2 Linksys WRT54GSv1-2 kamikaze


2 Mikrotik Routerboard 1100 RouterOSv4.7+


2 Ubiquiti RouterStationPro DD-WRTv23


2 Asus Asus WL-500xx DD-WRTv24preSP2


2 Linksys WRT54GSv1-2 DD-WRTv23


2 Mikrotik Supertrasto guifiBUS guifi.net RouterOSv4.0+


2 Mikrotik Routerboard 153 RouterOSv5.x


2 Other Other DD-WRTv23


2 Ubiquiti Bullet2 Freifunk-OLSR


2 Linksys WRT54Gv1-4 Freifunk-OLSR


2 Linksys WRT54Gv1-4 whiterussian


2 Mikrotik Supertrasto guifiBUS guifi.net kamikaze


2 Ubiquiti AirMaxM5 Bullet/PwBrg/AirGrd/NanoBr AirOsv3.6+


1 Other Other DD-WRTv24preSP2


1 Ubiquiti AirMaxM2 Rocket/Nano/Loco AirOsv221


1 Asus Asus WL-500xx AirOsv221


1 Pcengines Alix1 kamikaze


1 Ubiquiti AirMaxM2 Rocket/Nano/Loco RouterOSv5.x


1 Mikrotik Routerboard 153 RouterOSv3.x


1 Ubiquiti AirMaxM5 Bullet/PwBrg/AirGrd/NanoBr AirOsv30


1 Mikrotik Routerboard 133C n/a


1 Ubiquiti NanoStation5 RouterOSv4.0+


1 Ubiquiti LiteStation5 Freifunk-OLSR


1 Mikrotik Routerboard 112 RouterOSv4.7+


1 Ubiquiti NanoStation2 RouterOSv5.x


1 Ubiquiti AirMaxM5 Bullet/PwBrg/AirGrd/NanoBr Freifunk-OLSR


1 Ubiquiti Bullet2 AirOsv221


1 Ubiquiti LiteStation5 DD-WRTv23


1 Tp-Link TL-WA7510N n/a


1 Mikrotik Routerboard 600 RouterOSv4.0+


1 Meraki Meraki/Fonera gsffirm


1 Linksys WRT54GSv4 DD-WRTv24preSP2


1 Linksys WRT54GL RouterOSv5.x


1 Mikrotik Routerboard 750/G AirOsv30


1 Linksys WRT54Gv1-4 Freifunk-BATMAN


1 Ubiquiti AirMaxM2 Rocket/Nano/Loco DD-WRTv24preSP2


1 Ubiquiti Bullet2 DD-WRTv23


1 Linksys WRT54GSv1-2 DD-WRTv24preSP2


1 Mikrotik Routerboard 153 RouterOSv4.7+


1 Linksys WRT54GSv1-2 Alchemy


1 Asus Asus WL-500xx AirOsv3.6+


1 Mikrotik Routerboard 112 RouterOSv5.x


1 Ubiquiti AirMaxM2 Bullet/PwBrg/AirGrd/NanoBr DD-WRTv23


1 Ubiquiti AirMaxM5 Rocket/Nano/Loco RouterOSv2.9


1 Linksys WRT54GSv1-2 gsffirm


1 Mikrotik Routerboard 153 n/a


1 Pcengines Alix3 gsffirm


1 Linksys WRT54GL gsffirm


1 Buffalo WHR-HP-G54, WHR-G54S DD-WRTv24preSP2


1 Ubiquiti AirMaxM5 Bullet/PwBrg/AirGrd/NanoBr DD-WRTv24preSP2


1 Ubiquiti Bullet2 DD-WRTv24preSP2


1 Ubiquiti AirMaxM5 Rocket/Nano/Loco RouterOSv5.x


1 Ubiquiti Bullet5 DD-WRTv23


1 Ubiquiti AirMaxM5 Rocket/Nano/Loco DD-WRTv24preSP2


1 Pcengines Alix2 DD-WRTv24preSP2


1 Ubiquiti NanoStation Loco2 DD-WRTv23


1 Mikrotik Routerboard 133C AirOsv52


1 Ubiquiti NanoStation2 gsffirm


1 Linksys WRT54GSv4 Talisman


1 Linksys WRT54Gv1-4 gsffirm


1 Ubiquiti NanoStation2 DD-WRTv24preSP2

Total d'aparells per fabricant

Finalment com a curiositat un llistat del total de aparells agrupats per fabricant a data de 15/9/2012:

total name
15788 Ubiquiti
4223 Mikrotik
2859 Linksys
1471 Buffalo
378 Other
61 Pcengines
24 Asus
18 Meraki
12 Setup Informatica
7 D-Link
2 Gateworks
1 Tp-Link
Eines de l'usuari