diff options
-rw-r--r-- | drivers/net/bonding/bond_debugfs.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/net/bonding/bond_debugfs.c b/drivers/net/bonding/bond_debugfs.c index ae1eb2fc3a4..3680aa251de 100644 --- a/drivers/net/bonding/bond_debugfs.c +++ b/drivers/net/bonding/bond_debugfs.c | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/netdevice.h> | 4 | #include <linux/netdevice.h> |
5 | 5 | ||
6 | #include "bonding.h" | 6 | #include "bonding.h" |
7 | #include "bond_alb.h" | ||
7 | 8 | ||
8 | #ifdef CONFIG_DEBUG_FS | 9 | #ifdef CONFIG_DEBUG_FS |
9 | 10 | ||
@@ -12,6 +13,52 @@ | |||
12 | 13 | ||
13 | static struct dentry *bonding_debug_root; | 14 | static struct dentry *bonding_debug_root; |
14 | 15 | ||
16 | /* | ||
17 | * Show RLB hash table | ||
18 | */ | ||
19 | static int bond_debug_rlb_hash_show(struct seq_file *m, void *v) | ||
20 | { | ||
21 | struct bonding *bond = m->private; | ||
22 | struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond)); | ||
23 | struct rlb_client_info *client_info; | ||
24 | u32 hash_index; | ||
25 | |||
26 | if (bond->params.mode != BOND_MODE_ALB) | ||
27 | return 0; | ||
28 | |||
29 | seq_printf(m, "SourceIP DestinationIP " | ||
30 | "Destination MAC DEV\n"); | ||
31 | |||
32 | spin_lock_bh(&(BOND_ALB_INFO(bond).rx_hashtbl_lock)); | ||
33 | |||
34 | hash_index = bond_info->rx_hashtbl_head; | ||
35 | for (; hash_index != RLB_NULL_INDEX; hash_index = client_info->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_ALB_INFO(bond).rx_hashtbl_lock)); | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static int bond_debug_rlb_hash_open(struct inode *inode, struct file *file) | ||
50 | { | ||
51 | return single_open(file, bond_debug_rlb_hash_show, inode->i_private); | ||
52 | } | ||
53 | |||
54 | static const struct file_operations bond_debug_rlb_hash_fops = { | ||
55 | .owner = THIS_MODULE, | ||
56 | .open = bond_debug_rlb_hash_open, | ||
57 | .read = seq_read, | ||
58 | .llseek = seq_lseek, | ||
59 | .release = single_release, | ||
60 | }; | ||
61 | |||
15 | void bond_debug_register(struct bonding *bond) | 62 | void bond_debug_register(struct bonding *bond) |
16 | { | 63 | { |
17 | if (!bonding_debug_root) | 64 | if (!bonding_debug_root) |
@@ -25,6 +72,9 @@ void bond_debug_register(struct bonding *bond) | |||
25 | bond->dev->name); | 72 | bond->dev->name); |
26 | return; | 73 | return; |
27 | } | 74 | } |
75 | |||
76 | debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir, | ||
77 | bond, &bond_debug_rlb_hash_fops); | ||
28 | } | 78 | } |
29 | 79 | ||
30 | void bond_debug_unregister(struct bonding *bond) | 80 | void bond_debug_unregister(struct bonding *bond) |