[Ninux-Calabria] simulazioni su routing a terra

Giuseppe De Marco demarcog83 a gmail.com
Sab 14 Dic 2013 14:19:57 UTC


> Naturalmente si possono implementare nuovi services in python, quindi noi
aspettiamo con impazienza configurazione automatica di bridge e vlan

Presente !

http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html
e nello specifico
http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html#services

in
http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/devguide.html

si legge che CORE usa lxc containers che non avevo mai visto ma che sono
programmabili con Python :)
http://linuxcontainers.org/

Spendo due parole:

The vcmd program is used to connect to the vnoded daemon in a Linux network
namespace, for running commands in the namespace.

Il Namespace è il container, la macchina emulata. L'emulazione a container
è una sorta di evoluzione del chroot, vi si comunica esclusivamente tramite
interfacce di rete in maniera privilegiata, tramite una socket -
es. /tmp/pycore.23098/n3. Questa comunica in TCP con dei frame protocollati
secondo quanto descritto quì:
http://downloads.pf.itd.nrl.navy.mil/docs/core/core_api.pdf

tutti i comandi che inviamo al nodo sono pacchetti forgiati da vcmd e
inviati a codesta socket.

Se noi volessimo eseguire un comando su un nodo:
gnome-terminal -e vcmd -c  /tmp/pycore.23098/n3 -- bash

Ma sulla creazione/controllo dei nodi facciamo in python, sfruttando ed
integrando la GUI.
Prima cosa sarebbe carino creare in

/home/wert/.core/nodes.conf un tipo di device corrispondente ad ogni
configurazione di antenna set( bridge, router ). La sintassi è banale:

1 { router router.gif router.gif {zebra OSPFv2 OSPFv3 vtysh IPForward}
 netns {built-in type for routing} }

Nella graffa sistemiamo il "nostro" service, descritto di seguito, al posto
dei zebra,ospf, lasciando solo IPForward.

Adesso programmiamo un Service.
La API è distribuita con core-network-daemon

i sorgenti python sono in

/usr/lib/python2.7/dist-packages/core/

Prima cosa da fare è spulciare la lista dei servizi e il modo di creare
questi oggetti ed includerli, runtime, in CORE.

Semplicissimo:
basta creare una classe statica che eredita core.service.CoreService e fare
l'override di metodi e attributi.
Questa classe altro non è che una interfaccia all'uso di comandi di
sistema, estremamente semplice.
definita la classe la registriamo all'interno di CORE -   - così da farla
figurare nel menu.

    from core.service import CoreService, addservice
    addservice(MyService)

Possiamo creare file di configurazione dinamici sfruttando gli attributi
dell'oggetto node:

<code>

 def generateconfig(cls, node, filename, services):
        ''' Return a string that will be written to filename, or sent to the
            GUI for user customization.
        '''
        cfg = "#!/bin/sh\n"
        cfg += "# auto-generated by MyService (sample.py)\n"

        for ifc in node.netifs():
            cfg += 'echo "Node %s has interface %s"\n' % (node.name,
ifc.name)
            # here we do something interesting
            cfg += "\n".join(map(cls.subnetentry, ifc.addrlist))
            break
        return cfg

</code>
... infatti node.name e ifc.name sono oggetti generosi :)

Noi facciamo ninux.py e al suo interno creo N classi quanti i
servizi/comandi/configurazioni desideriamo.
Es.

OLSR, unCaptive, un SSH, insomma l'esatto corredo di software che
desideriamo sul groundrouter.

lo installiamo seguendo le indicazioni di:
/usr/share/doc/core-network-daemon/examples/myservices/README.txt

quindi:

1. Creo la classe con eseguibile + configurazione
2. la sistemo nella path user o system space
3. in /home/wert/.core/nodes.conf creo ninux_antenna e ninux_grnd_router
così da farlo apparire
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://ml.ninux.org/pipermail/calabria/attachments/20131214/134f4623/attachment-0001.htm>


Maggiori informazioni sulla lista Calabria