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