aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>2012-06-18 12:39:26 -0400
committerAntonio Quartulli <ordex@autistici.org>2012-08-23 08:02:41 -0400
commit536a23f119e35e58c762a219bafd398ba2ed7980 (patch)
treef3d5e962a364029ff97bffa5dcb8afe9e29b1191
parentc70437289c989d865633486fc24c61441ba32b9e (diff)
batman-adv: Add the backbone gateway list to debugfs
This is especially useful if there are no claims yet, but we still want to know which gateways are using bridge loop avoidance in the network. Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
-rw-r--r--Documentation/networking/batman-adv.txt7
-rw-r--r--net/batman-adv/bridge_loop_avoidance.c65
-rw-r--r--net/batman-adv/bridge_loop_avoidance.h8
-rw-r--r--net/batman-adv/debugfs.c12
4 files changed, 89 insertions, 3 deletions
diff --git a/Documentation/networking/batman-adv.txt b/Documentation/networking/batman-adv.txt
index 8f3ae4a6147..a173d2a879f 100644
--- a/Documentation/networking/batman-adv.txt
+++ b/Documentation/networking/batman-adv.txt
@@ -75,9 +75,10 @@ folder:
75 75
76There is a special folder for debugging information: 76There is a special folder for debugging information:
77 77
78# ls /sys/kernel/debug/batman_adv/bat0/ 78# ls /sys/kernel/debug/batman_adv/bat0/
79# bla_claim_table log socket transtable_local 79# bla_backbone_table log transtable_global
80# gateways originators transtable_global vis_data 80# bla_claim_table originators transtable_local
81# gateways socket vis_data
81 82
82Some of the files contain all sort of status information regard- 83Some of the files contain all sort of status information regard-
83ing the mesh network. For example, you can view the table of 84ing the mesh network. For example, you can view the table of
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
index 6705d35b17c..7e60466f571 100644
--- a/net/batman-adv/bridge_loop_avoidance.c
+++ b/net/batman-adv/bridge_loop_avoidance.c
@@ -1616,3 +1616,68 @@ out:
1616 batadv_hardif_free_ref(primary_if); 1616 batadv_hardif_free_ref(primary_if);
1617 return ret; 1617 return ret;
1618} 1618}
1619
1620int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset)
1621{
1622 struct net_device *net_dev = (struct net_device *)seq->private;
1623 struct batadv_priv *bat_priv = netdev_priv(net_dev);
1624 struct batadv_hashtable *hash = bat_priv->backbone_hash;
1625 struct batadv_backbone_gw *backbone_gw;
1626 struct batadv_hard_iface *primary_if;
1627 struct hlist_node *node;
1628 struct hlist_head *head;
1629 int secs, msecs;
1630 uint32_t i;
1631 bool is_own;
1632 int ret = 0;
1633 uint8_t *primary_addr;
1634
1635 primary_if = batadv_primary_if_get_selected(bat_priv);
1636 if (!primary_if) {
1637 ret = seq_printf(seq,
1638 "BATMAN mesh %s disabled - please specify interfaces to enable it\n",
1639 net_dev->name);
1640 goto out;
1641 }
1642
1643 if (primary_if->if_status != BATADV_IF_ACTIVE) {
1644 ret = seq_printf(seq,
1645 "BATMAN mesh %s disabled - primary interface not active\n",
1646 net_dev->name);
1647 goto out;
1648 }
1649
1650 primary_addr = primary_if->net_dev->dev_addr;
1651 seq_printf(seq,
1652 "Backbones announced for the mesh %s (orig %pM, group id %04x)\n",
1653 net_dev->name, primary_addr,
1654 ntohs(bat_priv->claim_dest.group));
1655 seq_printf(seq, " %-17s %-5s %-9s (%-4s)\n",
1656 "Originator", "VID", "last seen", "CRC");
1657 for (i = 0; i < hash->size; i++) {
1658 head = &hash->table[i];
1659
1660 rcu_read_lock();
1661 hlist_for_each_entry_rcu(backbone_gw, node, head, hash_entry) {
1662 msecs = jiffies_to_msecs(jiffies -
1663 backbone_gw->lasttime);
1664 secs = msecs / 1000;
1665 msecs = msecs % 1000;
1666
1667 is_own = batadv_compare_eth(backbone_gw->orig,
1668 primary_addr);
1669 if (is_own)
1670 continue;
1671
1672 seq_printf(seq,
1673 " * %pM on % 5d % 4i.%03is (%04x)\n",
1674 backbone_gw->orig, backbone_gw->vid,
1675 secs, msecs, backbone_gw->crc);
1676 }
1677 rcu_read_unlock();
1678 }
1679out:
1680 if (primary_if)
1681 batadv_hardif_free_ref(primary_if);
1682 return ret;
1683}
diff --git a/net/batman-adv/bridge_loop_avoidance.h b/net/batman-adv/bridge_loop_avoidance.h
index 3f0dfa2f6d7..789cb73bde6 100644
--- a/net/batman-adv/bridge_loop_avoidance.h
+++ b/net/batman-adv/bridge_loop_avoidance.h
@@ -27,6 +27,8 @@ int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, short vid);
27int batadv_bla_is_backbone_gw(struct sk_buff *skb, 27int batadv_bla_is_backbone_gw(struct sk_buff *skb,
28 struct batadv_orig_node *orig_node, int hdr_size); 28 struct batadv_orig_node *orig_node, int hdr_size);
29int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset); 29int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset);
30int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq,
31 void *offset);
30int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, uint8_t *orig); 32int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, uint8_t *orig);
31int batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, 33int batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv,
32 struct batadv_bcast_packet *bcast_packet, 34 struct batadv_bcast_packet *bcast_packet,
@@ -65,6 +67,12 @@ static inline int batadv_bla_claim_table_seq_print_text(struct seq_file *seq,
65 return 0; 67 return 0;
66} 68}
67 69
70static inline int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq,
71 void *offset)
72{
73 return 0;
74}
75
68static inline int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv, 76static inline int batadv_bla_is_backbone_gw_orig(struct batadv_priv *bat_priv,
69 uint8_t *orig) 77 uint8_t *orig)
70{ 78{
diff --git a/net/batman-adv/debugfs.c b/net/batman-adv/debugfs.c
index 34fbb1667bc..391d4fb2026 100644
--- a/net/batman-adv/debugfs.c
+++ b/net/batman-adv/debugfs.c
@@ -267,6 +267,15 @@ static int batadv_bla_claim_table_open(struct inode *inode, struct file *file)
267 return single_open(file, batadv_bla_claim_table_seq_print_text, 267 return single_open(file, batadv_bla_claim_table_seq_print_text,
268 net_dev); 268 net_dev);
269} 269}
270
271static int batadv_bla_backbone_table_open(struct inode *inode,
272 struct file *file)
273{
274 struct net_device *net_dev = (struct net_device *)inode->i_private;
275 return single_open(file, batadv_bla_backbone_table_seq_print_text,
276 net_dev);
277}
278
270#endif 279#endif
271 280
272static int batadv_transtable_local_open(struct inode *inode, struct file *file) 281static int batadv_transtable_local_open(struct inode *inode, struct file *file)
@@ -305,6 +314,8 @@ static BATADV_DEBUGINFO(transtable_global, S_IRUGO,
305 batadv_transtable_global_open); 314 batadv_transtable_global_open);
306#ifdef CONFIG_BATMAN_ADV_BLA 315#ifdef CONFIG_BATMAN_ADV_BLA
307static BATADV_DEBUGINFO(bla_claim_table, S_IRUGO, batadv_bla_claim_table_open); 316static BATADV_DEBUGINFO(bla_claim_table, S_IRUGO, batadv_bla_claim_table_open);
317static BATADV_DEBUGINFO(bla_backbone_table, S_IRUGO,
318 batadv_bla_backbone_table_open);
308#endif 319#endif
309static BATADV_DEBUGINFO(transtable_local, S_IRUGO, 320static BATADV_DEBUGINFO(transtable_local, S_IRUGO,
310 batadv_transtable_local_open); 321 batadv_transtable_local_open);
@@ -316,6 +327,7 @@ static struct batadv_debuginfo *batadv_mesh_debuginfos[] = {
316 &batadv_debuginfo_transtable_global, 327 &batadv_debuginfo_transtable_global,
317#ifdef CONFIG_BATMAN_ADV_BLA 328#ifdef CONFIG_BATMAN_ADV_BLA
318 &batadv_debuginfo_bla_claim_table, 329 &batadv_debuginfo_bla_claim_table,
330 &batadv_debuginfo_bla_backbone_table,
319#endif 331#endif
320 &batadv_debuginfo_transtable_local, 332 &batadv_debuginfo_transtable_local,
321 &batadv_debuginfo_vis_data, 333 &batadv_debuginfo_vis_data,