From: Simon Wunderlich <sw@simonwunderlich.de>
To: b.a.t.m.a.n@lists.open-mesh.org
Cc: Simon Wunderlich <simon@open-mesh.com>
Subject: [B.A.T.M.A.N.] [PATCHv4 2/2] batman-adv: add debugfs support to view multiif tables
Date: Thu, 21 Nov 2013 11:52:16 +0100 [thread overview]
Message-ID: <1385031136-15967-3-git-send-email-sw@simonwunderlich.de> (raw)
In-Reply-To: <1385031136-15967-1-git-send-email-sw@simonwunderlich.de>
From: Simon Wunderlich <simon@open-mesh.com>
Show tables for the multi interface operation. Originator tables
are added per hard interface.
This patch also changes the API by adding the interface to the
bat_orig_print() parameters.
Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
---
Changes to PACHv3:
* change *multiif* function names to *hardif* names
* fix outdated kerneldoc
Changes to PATCHv2:
* use name "originators", not "originators_multiif" for the
originator table per interface.
Changes to PATCH:
* use one file per interface instead of all tables in one file
* kernel doc and commit message improvement
---
bat_iv_ogm.c | 12 +++++++-----
debugfs.c | 16 ++++++++++++++++
originator.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
originator.h | 1 +
types.h | 3 ++-
5 files changed, 73 insertions(+), 7 deletions(-)
diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c
index dbd55f0..bf4fd9c 100644
--- a/bat_iv_ogm.c
+++ b/bat_iv_ogm.c
@@ -1781,9 +1781,11 @@ batadv_iv_ogm_orig_print_neigh(struct batadv_orig_node *orig_node,
* batadv_iv_ogm_orig_print - print the originator table
* @bat_priv: the bat priv with all the soft interface information
* @seq: debugfs table seq_file struct
+ * @if_outgoing: the outgoing interface for which this should be printed
*/
static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
- struct seq_file *seq)
+ struct seq_file *seq,
+ struct batadv_hard_iface *if_outgoing)
{
struct batadv_neigh_node *neigh_node;
struct batadv_hashtable *hash = bat_priv->orig_hash;
@@ -1805,12 +1807,12 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
rcu_read_lock();
hlist_for_each_entry_rcu(orig_node, head, hash_entry) {
neigh_node = batadv_orig_router_get(orig_node,
- BATADV_IF_DEFAULT);
+ if_outgoing);
if (!neigh_node)
continue;
n_ifinfo = batadv_neigh_ifinfo_get(neigh_node,
- BATADV_IF_DEFAULT);
+ if_outgoing);
if (!n_ifinfo)
goto next;
@@ -1828,8 +1830,8 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
neigh_node->addr,
neigh_node->if_incoming->net_dev->name);
- batadv_iv_ogm_orig_print_neigh(orig_node,
- BATADV_IF_DEFAULT, seq);
+ batadv_iv_ogm_orig_print_neigh(orig_node, if_outgoing,
+ seq);
seq_puts(seq, "\n");
batman_count++;
diff --git a/debugfs.c b/debugfs.c
index e01e1c0..f9aaeb8 100644
--- a/debugfs.c
+++ b/debugfs.c
@@ -245,6 +245,19 @@ static int batadv_originators_open(struct inode *inode, struct file *file)
return single_open(file, batadv_orig_seq_print_text, net_dev);
}
+/**
+ * batadv_originators_hardif_open - handles debugfs output for the
+ * originator table of an hard interface
+ * @inode: inode pointer to debugfs file
+ * @file: pointer to the seq_file
+ */
+static int batadv_originators_hardif_open(struct inode *inode,
+ struct file *file)
+{
+ struct net_device *net_dev = (struct net_device *)inode->i_private;
+ return single_open(file, batadv_orig_hardif_seq_print_text, net_dev);
+}
+
static int batadv_gateways_open(struct inode *inode, struct file *file)
{
struct net_device *net_dev = (struct net_device *)inode->i_private;
@@ -377,8 +390,11 @@ struct batadv_debuginfo batadv_hardif_debuginfo_##_name = { \
.release = single_release, \
} \
};
+static BATADV_HARDIF_DEBUGINFO(originators, S_IRUGO,
+ batadv_originators_hardif_open);
static struct batadv_debuginfo *batadv_hardif_debuginfos[] = {
+ &batadv_hardif_debuginfo_originators,
NULL,
};
diff --git a/originator.c b/originator.c
index 9f0ae77..a001a3d 100644
--- a/originator.c
+++ b/originator.c
@@ -932,11 +932,57 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset)
return 0;
}
- bat_priv->bat_algo_ops->bat_orig_print(bat_priv, seq);
+ bat_priv->bat_algo_ops->bat_orig_print(bat_priv, seq,
+ BATADV_IF_DEFAULT);
return 0;
}
+/**
+ * batadv_orig_hardif_seq_print_text - writes originator infos for a specific
+ * outgoing interface
+ * @seq: debugfs table seq_file struct
+ * @offset: not used
+ *
+ * Returns 0
+ */
+int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset)
+{
+ struct net_device *net_dev = (struct net_device *)seq->private;
+ struct batadv_hard_iface *hard_iface;
+ struct batadv_priv *bat_priv;
+
+ hard_iface = batadv_hardif_get_by_netdev(net_dev);
+
+ if (!hard_iface || !hard_iface->soft_iface) {
+ seq_puts(seq, "Interface not known to to B.A.T.M.A.N.\n");
+ goto out;
+ }
+
+ bat_priv = netdev_priv(hard_iface->soft_iface);
+ if (!bat_priv->bat_algo_ops->bat_orig_print) {
+ seq_puts(seq,
+ "No printing function for this routing protocol\n");
+ goto out;
+ }
+
+ if (hard_iface->if_status != BATADV_IF_ACTIVE) {
+ seq_puts(seq, "Interface not active\n");
+ goto out;
+ }
+
+ seq_printf(seq, "[B.A.T.M.A.N. adv %s, IF/MAC: %s/%pM (%s %s)]\n",
+ BATADV_SOURCE_VERSION, hard_iface->net_dev->name,
+ hard_iface->net_dev->dev_addr,
+ hard_iface->soft_iface->name, bat_priv->bat_algo_ops->name);
+
+ bat_priv->bat_algo_ops->bat_orig_print(bat_priv, seq, hard_iface);
+
+out:
+ batadv_hardif_free_ref(hard_iface);
+ return 0;
+}
+
int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
int max_if_num)
{
diff --git a/originator.h b/originator.h
index 382f335..39fa3b7 100644
--- a/originator.h
+++ b/originator.h
@@ -50,6 +50,7 @@ batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
void batadv_orig_ifinfo_free_ref(struct batadv_orig_ifinfo *orig_ifinfo);
int batadv_orig_seq_print_text(struct seq_file *seq, void *offset);
+int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset);
int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
int max_if_num);
int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface,
diff --git a/types.h b/types.h
index 0e5d238..2627a3d 100644
--- a/types.h
+++ b/types.h
@@ -1080,7 +1080,8 @@ struct batadv_algo_ops {
struct batadv_neigh_node *neigh2,
struct batadv_hard_iface *if_outgoing2);
/* orig_node handling API */
- void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq);
+ void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq,
+ struct batadv_hard_iface *hard_iface);
void (*bat_orig_free)(struct batadv_orig_node *orig_node);
int (*bat_orig_add_if)(struct batadv_orig_node *orig_node,
int max_if_num);
--
1.7.10.4
next prev parent reply other threads:[~2013-11-21 10:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-21 10:52 [B.A.T.M.A.N.] [PATCHv4 0/2] debugfs files for the network wide multi interface optimization Simon Wunderlich
2013-11-21 10:52 ` [B.A.T.M.A.N.] [PATCHv4 1/2] batman-adv: add debugfs structure for information per interface Simon Wunderlich
2013-11-21 13:16 ` [B.A.T.M.A.N.] [PATCHv5 " Simon Wunderlich
2013-11-22 17:20 ` Marek Lindner
2013-11-21 10:52 ` Simon Wunderlich [this message]
2013-11-22 17:25 ` [B.A.T.M.A.N.] [PATCHv4 2/2] batman-adv: add debugfs support to view multiif tables Marek Lindner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1385031136-15967-3-git-send-email-sw@simonwunderlich.de \
--to=sw@simonwunderlich.de \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=simon@open-mesh.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox