batman-adv: fix visualization output without neighbors on the primary interface
authorMatthias Schiffer <mschiffer@universe-factory.net>
Sat, 5 May 2012 15:51:53 +0000 (17:51 +0200)
committerAntonio Quartulli <ordex@autistici.org>
Mon, 18 Jun 2012 16:01:04 +0000 (18:01 +0200)
The primary entry and the corresponding secondary entries are missing when there
are no neighbors on the primary interface. This also causes the TT entries to
miss and makes nodes with multiply secondary interface fall apart since there
is no way to see they are related without a primary entry.

Fix this by always emitting a primary entry.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
net/batman-adv/vis.c

index 411c0e16f911c7773e26afd16832d31b3b837809..01d5da54143e740bf6449a37676475b556a85dad 100644 (file)
@@ -207,7 +207,6 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
        int vis_server = atomic_read(&bat_priv->vis_mode);
        size_t buff_pos, buf_size;
        char *buff;
-       int compare;
 
        primary_if = primary_if_get_selected(bat_priv);
        if (!primary_if)
@@ -228,14 +227,18 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
                        entries = (struct vis_info_entry *)
                                ((char *)packet + sizeof(*packet));
 
+                       vis_data_insert_interface(packet->vis_orig,
+                                                 &vis_if_list, true);
+
                        for (j = 0; j < packet->entries; j++) {
                                if (entries[j].quality == 0)
                                        continue;
-                               compare =
-                                compare_eth(entries[j].src, packet->vis_orig);
+                               if (compare_eth(entries[j].src,
+                                               packet->vis_orig))
+                                       continue;
                                vis_data_insert_interface(entries[j].src,
                                                          &vis_if_list,
-                                                         compare);
+                                                         false);
                        }
 
                        hlist_for_each_entry(entry, pos, &vis_if_list, list) {
@@ -276,14 +279,18 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
                        entries = (struct vis_info_entry *)
                                ((char *)packet + sizeof(*packet));
 
+                       vis_data_insert_interface(packet->vis_orig,
+                                                 &vis_if_list, true);
+
                        for (j = 0; j < packet->entries; j++) {
                                if (entries[j].quality == 0)
                                        continue;
-                               compare =
-                                compare_eth(entries[j].src, packet->vis_orig);
+                               if (compare_eth(entries[j].src,
+                                               packet->vis_orig))
+                                       continue;
                                vis_data_insert_interface(entries[j].src,
                                                          &vis_if_list,
-                                                         compare);
+                                                         false);
                        }
 
                        hlist_for_each_entry(entry, pos, &vis_if_list, list) {