<div dir="ltr"><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><span style="font-family:arial,sans-serif;font-size:13px">&gt; Naturalmente si possono implementare nuovi services in python, quindi </span><span style="font-family:arial,sans-serif;font-size:13px">noi aspettiamo con impazienza configurazione automatica di bridge e vlan</span><br>
<div class="gmail_extra"><br>Presente !</div><div class="gmail_extra"><br></div><div class="gmail_extra"><a href="http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html">http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html</a><br>
</div><div class="gmail_extra">e nello specifico</div><div class="gmail_extra"><a href="http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html#services">http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/usage.html#services</a><br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">in </div><div class="gmail_extra"><a href="http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/devguide.html">http://downloads.pf.itd.nrl.navy.mil/docs/core/core-html/devguide.html</a><br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">si legge che CORE usa lxc containers che non avevo mai visto ma che sono programmabili con Python :)</div><div class="gmail_extra"><a href="http://linuxcontainers.org/">http://linuxcontainers.org/</a><br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">Spendo due parole:</div><div class="gmail_extra"><br></div><div class="gmail_extra">The vcmd program is used to connect to the vnoded daemon in a Linux network namespace, for running commands in the namespace.<br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">Il Namespace è il container, la macchina emulata. L&#39;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ì:</div>
<div class="gmail_extra"><a href="http://downloads.pf.itd.nrl.navy.mil/docs/core/core_api.pdf">http://downloads.pf.itd.nrl.navy.mil/docs/core/core_api.pdf</a><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">
tutti i comandi che inviamo al nodo sono pacchetti forgiati da vcmd e inviati a codesta socket.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Se noi volessimo eseguire un comando su un nodo:</div><div class="gmail_extra">
gnome-terminal -e vcmd -c  /tmp/pycore.23098/n3 -- bash<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Ma sulla creazione/controllo dei nodi facciamo in python, sfruttando ed integrando la GUI.</div>
<div class="gmail_extra">Prima cosa sarebbe carino creare in </div><div class="gmail_extra"><br></div><div class="gmail_extra">/home/wert/.core/nodes.conf un tipo di device corrispondente ad ogni configurazione di antenna set( bridge, router ). La sintassi è banale:<br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">1 { router router.gif router.gif {zebra OSPFv2 OSPFv3 vtysh IPForward}  netns {built-in type for routing} }</div><div><br></div></div>
<div class="gmail_extra">Nella graffa sistemiamo il &quot;nostro&quot; service, descritto di seguito, al posto dei zebra,ospf, lasciando solo IPForward.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Adesso programmiamo un Service.</div>
<div class="gmail_extra">La API è distribuita con core-network-daemon</div><div class="gmail_extra"><br></div><div class="gmail_extra">i sorgenti python sono in</div><div class="gmail_extra"><br></div><div class="gmail_extra">
/usr/lib/python2.7/dist-packages/core/<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Prima cosa da fare è spulciare la lista dei servizi e il modo di creare questi oggetti ed includerli, runtime, in CORE.<br>
</div><div class="gmail_extra"><br></div><div class="gmail_extra">Semplicissimo:</div><div class="gmail_extra">basta creare una classe statica che eredita core.service.CoreService e fare l&#39;override di metodi e attributi. </div>
<div class="gmail_extra">Questa classe altro non è che una interfaccia all&#39;uso di comandi di sistema, estremamente semplice.</div><div class="gmail_extra">definita la classe la registriamo all&#39;interno di CORE -   - così da farla figurare nel menu.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">    from core.service import CoreService, addservice</div><div><div>    addservice(MyService)</div></div><div><br></div><div>Possiamo creare file di configurazione dinamici sfruttando gli attributi dell&#39;oggetto node:</div>
<div><br></div><div>&lt;code&gt;</div><div><div><br></div><div> def generateconfig(cls, node, filename, services):</div><div>        &#39;&#39;&#39; Return a string that will be written to filename, or sent to the</div><div>
            GUI for user customization.</div><div>        &#39;&#39;&#39;</div><div>        cfg = &quot;#!/bin/sh\n&quot;</div><div>        cfg += &quot;# auto-generated by MyService (sample.py)\n&quot;</div><div><br></div>
<div>        for ifc in node.netifs():</div><div>            cfg += &#39;echo &quot;Node %s has interface %s&quot;\n&#39; % (<a href="http://node.name">node.name</a>, <a href="http://ifc.name">ifc.name</a>)</div><div>            # here we do something interesting </div>
<div>            cfg += &quot;\n&quot;.join(map(cls.subnetentry, ifc.addrlist))</div><div>            break</div><div>        return cfg</div></div><div><br></div><div>&lt;/code&gt;</div><div>... infatti <a href="http://node.name">node.name</a> e <a href="http://ifc.name">ifc.name</a> sono oggetti generosi :)</div>
<div><br></div><div>Noi facciamo ninux.py e al suo interno creo N classi quanti i servizi/comandi/configurazioni desideriamo.</div><div>Es.</div><div><br></div><div>OLSR, unCaptive, un SSH, insomma l&#39;esatto corredo di software che desideriamo sul groundrouter.</div>
<div><br></div><div>lo installiamo seguendo le indicazioni di:</div><div>/usr/share/doc/core-network-daemon/examples/myservices/README.txt<br></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">quindi:</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">1. Creo la classe con eseguibile + configurazione</div><div class="gmail_extra">2. la sistemo nella path user o system space</div><div class="gmail_extra">3. in /home/wert/.core/nodes.conf creo ninux_antenna e ninux_grnd_router così da farlo apparire</div>
<div class="gmail_extra"><br></div></div>