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ó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ó)

├── 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 :

  • 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.

├── 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

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