<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Germano, ora non riesco a studiare nel
dettaglio la tua mail e risponderti.<br>
Direi di vederci dopo la festa di halloween, con calma, non il
giovedì sera perchè sono cotto, magari un sabato o una domenica
pomeriggio, e lavorarci insieme.<br>
<br>
Federico<br>
<br>
<br>
On 10/19/2015 05:47 PM, Germano Massullo wrote:<br>
</div>
<blockquote cite="mid:56251085.6010806@gmail.com" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=windows-1252">
Dato che non esiste una documentazione del codice di
Batman/Alfred, sto cercando di capire come Alfred client gestisce
le strutture dati che gli permettono di memorizzare tutti i MAC
dei vari host. In particolare mi interessa sapere come Alfred
itera sui vari host (per qualsiasi azione).<br>
<br>
Prima di porvi la domanda, affinché possa dare rapidamente
un'occhiata anche chi non abbia mai visto questo codice, ho
scritto una breve e becera cronologia delle azioni eseguite dal
software alfred-vis (client) [0] all'avvio, durante la richiesta
di stampa di un output JSONDoc. Inoltre, per riprodurre in maniera
rapida un ambiente con il quale "giocare" con il software, vi
rimando a [10]<br>
<br>
0) in vis.c vi è una variabile globale statica chiamata
vis_globals di tipo struct globals, la cui definizione è in vis.h
[2];<br>
<br>
1) Il main [3] istanzia un puntatore di tipo struct globals,
dopodiché esegue la funzione vis_init() che prende gli input da
tastiera e ne inserisce il contenuto nella variabile globale
vis_globals;<br>
<br>
2) dato che vis_init() restituisce un puntatore di tipo struct
globals, al punto [4] il main inserisce nella variabile globals
l'indirizzo di memoria della variabile globale vis_globals. In tal
maniera ogni operazione sulla variabile locale globals va ad
influire direttamente sulla variabile globale vis_globals;<br>
<br>
3) lo switch presente nel main() entra nel caso OPMODE_CLIENT ed
invoca la funzione vis_get_data();<br>
<br>
3.1) vis_get_data() invoca vis_request_data() che chiede al
sistema una socket UNIX e ne memorizza l'id in
globals->unix_sock. Serve per far comunicare il client alfred
con alfred-master;<br>
<br>
3.2) vis_get_data() [5] invoca la funzione vis_read_answer con
parametro globals;<br>
<br>
3.2.1) vis_read_answer() [6] si occupa della lettura dei dati dal
processo (servizio?) alfred-master tuttavia non è chiara l'utilità
di strutture come<br>
<blockquote>struct vis_print_ops<br>
struct vis_v1<br>
struct vis_iface<br>
struct vis_entry<br>
</blockquote>
(al di là del codice C che è facilmente interpretabile).<br>
Inoltre il while [8] legge i dati interenti tutti i nodi della
rete oppure i dati di un solo nodo? Andando a ritroso nella
presente lista si evince che la prima ipotesi dovrebbe essere
corretta, anche perché terminato il ciclo, la funzione ritorna, e
la funzione chiamante (vis_get_data()) termina anch'essa.<br>
<br>
4) La scrittura a schermo dell'output JSONDoc viene effettuata
richiamando le funzioni presenti in static const struct
vis_print_ops vis_jsondoc_ops [9]<br>
<br>
===Domanda===<br>
<br>
Studiando il codice, ho dedotto che per ogni host vi è un array
con tutte le interfacce, dove a 0 è la primaria, dopodiché vengono
le interfacce secondarie. Ciò si evince ad esempio nella funzione<br>
static void vis_json_interfaces(uint8_t iface_n, struct
vis_iface *ifaces)<br>
<br>
Vorrei chiedervi conferma della seguente cosa: file vis.c [1] ,
alla riga 611 c'è<br>
mac_to_str(ifaces[vis_entries[i].ifindex].mac));<br>
che ricava il MAC del router.<br>
ifaces contiene l'intera collezione di indirizzi MAC di tutti gli
host, vis_entries[i] identifica il singolo host. La mia
interpretazione è corretta?<br>
<br>
<br>
<br>
===NOTE ED URL===<br>
[0]: N.B. batadv-vis è solamente un alfred-client<br>
[1]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l611">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l611</a><br>
[2]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.h#l92">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.h#l92</a><br>
[3]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l917">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l917</a><br>
[4]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l921">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l921</a><br>
[5]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l800">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l800</a><br>
[6]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l748">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l748</a><br>
[7]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l715">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l715</a><br>
[8]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l772">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l772</a><br>
[9]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l740">http://git.open-mesh.org/alfred.git/blob/HEAD:/vis/vis.c#l740</a><br>
[10]: <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://ml.ninux.org/pipermail/ninux-dev/2015-September/000506.html">http://ml.ninux.org/pipermail/ninux-dev/2015-September/000506.html</a>
[ninux-dev] Iniziare a generare output json* da batman/alfred<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
ninux-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:ninux-dev@ml.ninux.org">ninux-dev@ml.ninux.org</a>
<a class="moz-txt-link-freetext" href="http://ml.ninux.org/mailman/listinfo/ninux-dev">http://ml.ninux.org/mailman/listinfo/ninux-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>