|
|
@@ -369,6 +369,25 @@ static struct batadv_debuginfo *batadv_mesh_debuginfos[] = {
|
|
|
NULL,
|
|
|
};
|
|
|
|
|
|
+#define BATADV_HARDIF_DEBUGINFO(_name, _mode, _open) \
|
|
|
+struct batadv_debuginfo batadv_hardif_debuginfo_##_name = { \
|
|
|
+ .attr = { \
|
|
|
+ .name = __stringify(_name), \
|
|
|
+ .mode = _mode, \
|
|
|
+ }, \
|
|
|
+ .fops = { \
|
|
|
+ .owner = THIS_MODULE, \
|
|
|
+ .open = _open, \
|
|
|
+ .read = seq_read, \
|
|
|
+ .llseek = seq_lseek, \
|
|
|
+ .release = single_release, \
|
|
|
+ }, \
|
|
|
+};
|
|
|
+
|
|
|
+static struct batadv_debuginfo *batadv_hardif_debuginfos[] = {
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
void batadv_debugfs_init(void)
|
|
|
{
|
|
|
struct batadv_debuginfo **bat_debug;
|
|
|
@@ -396,6 +415,7 @@ void batadv_debugfs_init(void)
|
|
|
return;
|
|
|
err:
|
|
|
debugfs_remove_recursive(batadv_debugfs);
|
|
|
+ batadv_debugfs = NULL;
|
|
|
}
|
|
|
|
|
|
void batadv_debugfs_destroy(void)
|
|
|
@@ -404,6 +424,59 @@ void batadv_debugfs_destroy(void)
|
|
|
batadv_debugfs = NULL;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * batadv_debugfs_add_hardif - creates the base directory for a hard interface
|
|
|
+ * in debugfs.
|
|
|
+ * @hard_iface: hard interface which should be added.
|
|
|
+ */
|
|
|
+int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
|
|
|
+{
|
|
|
+ struct batadv_debuginfo **bat_debug;
|
|
|
+ struct dentry *file;
|
|
|
+
|
|
|
+ if (!batadv_debugfs)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ hard_iface->debug_dir = debugfs_create_dir(hard_iface->net_dev->name,
|
|
|
+ batadv_debugfs);
|
|
|
+ if (!hard_iface->debug_dir)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ for (bat_debug = batadv_hardif_debuginfos; *bat_debug; ++bat_debug) {
|
|
|
+ file = debugfs_create_file(((*bat_debug)->attr).name,
|
|
|
+ S_IFREG | ((*bat_debug)->attr).mode,
|
|
|
+ hard_iface->debug_dir,
|
|
|
+ hard_iface->net_dev,
|
|
|
+ &(*bat_debug)->fops);
|
|
|
+ if (!file)
|
|
|
+ goto rem_attr;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+rem_attr:
|
|
|
+ debugfs_remove_recursive(hard_iface->debug_dir);
|
|
|
+ hard_iface->debug_dir = NULL;
|
|
|
+out:
|
|
|
+#ifdef CONFIG_DEBUG_FS
|
|
|
+ return -ENOMEM;
|
|
|
+#else
|
|
|
+ return 0;
|
|
|
+#endif /* CONFIG_DEBUG_FS */
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * batadv_debugfs_del_hardif - delete the base directory for a hard interface
|
|
|
+ * in debugfs.
|
|
|
+ * @hard_iface: hard interface which is deleted.
|
|
|
+ */
|
|
|
+void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface)
|
|
|
+{
|
|
|
+ if (batadv_debugfs) {
|
|
|
+ debugfs_remove_recursive(hard_iface->debug_dir);
|
|
|
+ hard_iface->debug_dir = NULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
int batadv_debugfs_add_meshif(struct net_device *dev)
|
|
|
{
|
|
|
struct batadv_priv *bat_priv = netdev_priv(dev);
|