root/drivers/net/bonding/bond_debugfs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. bond_debug_rlb_hash_show
  2. bond_debug_register
  3. bond_debug_unregister
  4. bond_debug_reregister
  5. bond_create_debugfs
  6. bond_destroy_debugfs
  7. bond_debug_register
  8. bond_debug_unregister
  9. bond_debug_reregister
  10. bond_create_debugfs
  11. bond_destroy_debugfs

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/kernel.h>
   3 #include <linux/module.h>
   4 #include <linux/device.h>
   5 #include <linux/netdevice.h>
   6 
   7 #include <net/bonding.h>
   8 #include <net/bond_alb.h>
   9 
  10 #if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_NET_NS)
  11 
  12 #include <linux/debugfs.h>
  13 #include <linux/seq_file.h>
  14 
  15 static struct dentry *bonding_debug_root;
  16 
  17 /* Show RLB hash table */
  18 static int bond_debug_rlb_hash_show(struct seq_file *m, void *v)
  19 {
  20         struct bonding *bond = m->private;
  21         struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
  22         struct rlb_client_info *client_info;
  23         u32 hash_index;
  24 
  25         if (BOND_MODE(bond) != BOND_MODE_ALB)
  26                 return 0;
  27 
  28         seq_printf(m, "SourceIP        DestinationIP   "
  29                         "Destination MAC   DEV\n");
  30 
  31         spin_lock_bh(&bond->mode_lock);
  32 
  33         hash_index = bond_info->rx_hashtbl_used_head;
  34         for (; hash_index != RLB_NULL_INDEX;
  35              hash_index = client_info->used_next) {
  36                 client_info = &(bond_info->rx_hashtbl[hash_index]);
  37                 seq_printf(m, "%-15pI4 %-15pI4 %-17pM %s\n",
  38                         &client_info->ip_src,
  39                         &client_info->ip_dst,
  40                         &client_info->mac_dst,
  41                         client_info->slave->dev->name);
  42         }
  43 
  44         spin_unlock_bh(&bond->mode_lock);
  45 
  46         return 0;
  47 }
  48 DEFINE_SHOW_ATTRIBUTE(bond_debug_rlb_hash);
  49 
  50 void bond_debug_register(struct bonding *bond)
  51 {
  52         if (!bonding_debug_root)
  53                 return;
  54 
  55         bond->debug_dir =
  56                 debugfs_create_dir(bond->dev->name, bonding_debug_root);
  57 
  58         debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir,
  59                                 bond, &bond_debug_rlb_hash_fops);
  60 }
  61 
  62 void bond_debug_unregister(struct bonding *bond)
  63 {
  64         if (!bonding_debug_root)
  65                 return;
  66 
  67         debugfs_remove_recursive(bond->debug_dir);
  68 }
  69 
  70 void bond_debug_reregister(struct bonding *bond)
  71 {
  72         struct dentry *d;
  73 
  74         if (!bonding_debug_root)
  75                 return;
  76 
  77         d = debugfs_rename(bonding_debug_root, bond->debug_dir,
  78                            bonding_debug_root, bond->dev->name);
  79         if (d) {
  80                 bond->debug_dir = d;
  81         } else {
  82                 netdev_warn(bond->dev, "failed to reregister, so just unregister old one\n");
  83                 bond_debug_unregister(bond);
  84         }
  85 }
  86 
  87 void bond_create_debugfs(void)
  88 {
  89         bonding_debug_root = debugfs_create_dir("bonding", NULL);
  90 
  91         if (!bonding_debug_root) {
  92                 pr_warn("Warning: Cannot create bonding directory in debugfs\n");
  93         }
  94 }
  95 
  96 void bond_destroy_debugfs(void)
  97 {
  98         debugfs_remove_recursive(bonding_debug_root);
  99         bonding_debug_root = NULL;
 100 }
 101 
 102 
 103 #else /* !CONFIG_DEBUG_FS */
 104 
 105 void bond_debug_register(struct bonding *bond)
 106 {
 107 }
 108 
 109 void bond_debug_unregister(struct bonding *bond)
 110 {
 111 }
 112 
 113 void bond_debug_reregister(struct bonding *bond)
 114 {
 115 }
 116 
 117 void bond_create_debugfs(void)
 118 {
 119 }
 120 
 121 void bond_destroy_debugfs(void)
 122 {
 123 }
 124 
 125 #endif /* CONFIG_DEBUG_FS */

/* [<][>][^][v][top][bottom][index][help] */