aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/vis.c
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2012-05-05 11:51:53 -0400
committerAntonio Quartulli <ordex@autistici.org>2012-06-18 12:01:04 -0400
commitbeeb96a4142180c34ddf592aef5a278c2d676bf0 (patch)
tree08c96dbb5baf1c6e1f92e6c327a6fe2c43ebf203 /net/batman-adv/vis.c
parent16a703459bb58aa873c5b36f42093f0f681628af (diff)
batman-adv: fix visualization output without neighbors on the primary interface
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>
Diffstat (limited to 'net/batman-adv/vis.c')
-rw-r--r--net/batman-adv/vis.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index 411c0e16f91..01d5da54143 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -207,7 +207,6 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
207 int vis_server = atomic_read(&bat_priv->vis_mode); 207 int vis_server = atomic_read(&bat_priv->vis_mode);
208 size_t buff_pos, buf_size; 208 size_t buff_pos, buf_size;
209 char *buff; 209 char *buff;
210 int compare;
211 210
212 primary_if = primary_if_get_selected(bat_priv); 211 primary_if = primary_if_get_selected(bat_priv);
213 if (!primary_if) 212 if (!primary_if)
@@ -228,14 +227,18 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
228 entries = (struct vis_info_entry *) 227 entries = (struct vis_info_entry *)
229 ((char *)packet + sizeof(*packet)); 228 ((char *)packet + sizeof(*packet));
230 229
230 vis_data_insert_interface(packet->vis_orig,
231 &vis_if_list, true);
232
231 for (j = 0; j < packet->entries; j++) { 233 for (j = 0; j < packet->entries; j++) {
232 if (entries[j].quality == 0) 234 if (entries[j].quality == 0)
233 continue; 235 continue;
234 compare = 236 if (compare_eth(entries[j].src,
235 compare_eth(entries[j].src, packet->vis_orig); 237 packet->vis_orig))
238 continue;
236 vis_data_insert_interface(entries[j].src, 239 vis_data_insert_interface(entries[j].src,
237 &vis_if_list, 240 &vis_if_list,
238 compare); 241 false);
239 } 242 }
240 243
241 hlist_for_each_entry(entry, pos, &vis_if_list, list) { 244 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)
276 entries = (struct vis_info_entry *) 279 entries = (struct vis_info_entry *)
277 ((char *)packet + sizeof(*packet)); 280 ((char *)packet + sizeof(*packet));
278 281
282 vis_data_insert_interface(packet->vis_orig,
283 &vis_if_list, true);
284
279 for (j = 0; j < packet->entries; j++) { 285 for (j = 0; j < packet->entries; j++) {
280 if (entries[j].quality == 0) 286 if (entries[j].quality == 0)
281 continue; 287 continue;
282 compare = 288 if (compare_eth(entries[j].src,
283 compare_eth(entries[j].src, packet->vis_orig); 289 packet->vis_orig))
290 continue;
284 vis_data_insert_interface(entries[j].src, 291 vis_data_insert_interface(entries[j].src,
285 &vis_if_list, 292 &vis_if_list,
286 compare); 293 false);
287 } 294 }
288 295
289 hlist_for_each_entry(entry, pos, &vis_if_list, list) { 296 hlist_for_each_entry(entry, pos, &vis_if_list, list) {