Unsolclic: Diferència entre les revisions

De Guifi.net - Wiki Català

Línia 1: Línia 1:
 
= Introducció i Definició =
 
= Introducció i Definició =
  
El UnsolClic és una eina per configurar els aparells que formen part de la xarxa [http://guifi.net 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.  
+
L'UnsolClic és una eina per configurar els aparells que formen part de la xarxa [http://guifi.net 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 [https://gitorious.org/guifi/drupal-guifi Drupal-Guifi], tots els processos involucrats en la  confecció  del UnsolClic
 
Aquest document vol descriure, des de la vessant del desenvolupament del mòdul [https://gitorious.org/guifi/drupal-guifi Drupal-Guifi], tots els processos involucrats en la  confecció  del UnsolClic
Línia 44: Línia 44:
 
== Fitxers involucrats (per ordre d'execució) ==  
 
== Fitxers involucrats (per ordre d'execució) ==  
 
<pre>
 
<pre>
├── guifi.module : Definició de rutes
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi.module guifi.module] : Definició de rutes
├── guifi_unsolclic.inc.php : Execució Ruta UnSolclic, preparació de dependencies, generació Unsolclic
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_unsolclic.inc.php guifi_unsolclic.inc.php] : Execució Ruta UnSolclic, preparació de dependencies, generació Unsolclic
├── guifi_includes.inc.php : Funcions diverses de guifi.
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_includes.inc.php guifi_includes.inc.php] : Funcions diverses de guifi.
├── guifi_node.inc.php : Càrrega de la informació del node
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_node.inc.php guifi_node.inc.php] : Càrrega de la informació del node
├── guifi_devices.inc.php : Càrrega de la informació del trasto
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_devices.inc.php guifi_devices.inc.php] : Càrrega de la informació del trasto
├── guifi_radios.inc.php : Càrrega de la informació de la radio
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_radios.inc.php guifi_radios.inc.php] : Càrrega de la informació de la radio
├── guifi_interfaces.inc.php : Càrrega de la informació de les interfaces
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_interfaces.inc.php 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
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_ipv4.inc.php 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
+
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_links.inc.php guifi_links.inc.php] : Càrrega de la informació dels enllaços
 
</pre>
 
</pre>
  
Línia 82: Línia 82:
  
 
TODO : Faltaria afegir altres firmwares com els de QMP, etc...  
 
TODO : Faltaria afegir altres firmwares com els de QMP, etc...  
 +
 +
Actualment, tot el codi implicat dels unsolclics  es troba dins de la carpeta [https://gitorious.org/guifi/drupal-guifi/trees/master/firmware firmware], on tenim un fitxer per cadascuna de les families esmentades.
 +
<pre>
 +
├── [https://gitorious.org/guifi/drupal-guifi/trees/master/firmware firmware]
 +
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/airos.inc.php airos.inc.php]
 +
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/firmware-todo.inc.php firmware-todo.inc.php]
 +
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/guifistationos.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
 +
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/kamikaze.inc.php kamikaze.inc.php]
 +
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/mikrotik-routeros.inc.php mikrotik-routeros.inc.php]
 +
│   └── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/wrt-sveasoft-dd.inc.php wrt-sveasoft-dd.inc.php]
 +
</pre>
 +
 +
 +
 +
== Explicació de l'execució del codi  ==
 +
 +
1. Es crida la URL de generació del UnSolclic
 +
 +
 +
 +
  
 
= Afegir suport per a nous aparells =  
 
= Afegir suport per a nous aparells =  

Revisió de 23:06, 28 set 2012

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ós dels trastos per a tots els usuaris
    • Dona consistencia a la xarxa
  • Febleses
    • Ha de generar codi en diferents llenguatges per a diferents dispositius, per tant s'ha de conèixer mímimament aquests llenguatges
    • La incorporació de dispositius nous requereix aquesta codificació i porta temps.
    • És 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ó)

├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi.module guifi.module] : Definició de rutes
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_unsolclic.inc.php guifi_unsolclic.inc.php] : Execució Ruta UnSolclic, preparació de dependencies, generació Unsolclic
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_includes.inc.php guifi_includes.inc.php] : Funcions diverses de guifi.
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_node.inc.php guifi_node.inc.php] : Càrrega de la informació del node
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_devices.inc.php guifi_devices.inc.php] : Càrrega de la informació del trasto
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_radios.inc.php guifi_radios.inc.php] : Càrrega de la informació de la radio
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_interfaces.inc.php guifi_interfaces.inc.php] : Càrrega de la informació de les interfaces
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_ipv4.inc.php guifi_ipv4.inc.php] : Càrrega de la informació de les adreces ip
├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/guifi_links.inc.php 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 :

  • Kamikaze
  • AirOs
  • GuifiStation
  • Mikrotik
  • WRT-SveaSoft

TODO : Faltaria afegir altres firmwares com els 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.

├── [https://gitorious.org/guifi/drupal-guifi/trees/master/firmware firmware]
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/airos.inc.php airos.inc.php]
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/firmware-todo.inc.php firmware-todo.inc.php]
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/guifistationos.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
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/kamikaze.inc.php kamikaze.inc.php]
│   ├── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/mikrotik-routeros.inc.php mikrotik-routeros.inc.php]
│   └── [https://gitorious.org/guifi/drupal-guifi/blobs/master/firmware/wrt-sveasoft-dd.inc.php wrt-sveasoft-dd.inc.php]


Explicació de l'execució del codi

1. Es crida la URL de generació del UnSolclic



Afegir suport per a nous aparells

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

Eines de l'usuari