diff options
author | Taku Izumi <izumi.taku@jp.fujitsu.com> | 2010-12-12 14:04:43 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-16 16:16:05 -0500 |
commit | caafa84251b886feb6cdf23d50e2cc99dcdaaaf3 (patch) | |
tree | 13f37d7be313fea5eb2b9d8e0557a5e3ff1107fb /drivers/net/bonding | |
parent | 411204a5a1ec1a35363d8ef450c77e2b8235da4d (diff) |
bonding: add the debugfs interface to see RLB hash table
This patch provices the debugfs interface to see RLB hash table
like the following:
# cat /sys/kernel/debug/bonding/bond0/rlb_hash_table
SourceIP DestinationIP Destination MAC DEV
10.124.196.205 10.124.196.205 ff:ff:ff:ff:ff:ff eth4
10.124.196.205 10.124.196.81 00:19:99:XX:XX:XX eth3
10.124.196.205 10.124.196.1 00:21:d8:XX:XX:XX eth0
This is helpful to check if the receive load balancing works as expected.
Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-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) |