<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    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 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 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 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 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 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 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 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 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 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 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>
  </body>
</html>