Skip to content

Commit caafa84

Browse files
izumi777davem330
authored andcommitted
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 <[email protected]> Signed-off-by: Jay Vosburgh <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 411204a commit caafa84

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

drivers/net/bonding/bond_debugfs.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <linux/netdevice.h>
55

66
#include "bonding.h"
7+
#include "bond_alb.h"
78

89
#ifdef CONFIG_DEBUG_FS
910

@@ -12,6 +13,52 @@
1213

1314
static struct dentry *bonding_debug_root;
1415

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+
1562
void bond_debug_register(struct bonding *bond)
1663
{
1764
if (!bonding_debug_root)
@@ -25,6 +72,9 @@ void bond_debug_register(struct bonding *bond)
2572
bond->dev->name);
2673
return;
2774
}
75+
76+
debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir,
77+
bond, &bond_debug_rlb_hash_fops);
2878
}
2979

3080
void bond_debug_unregister(struct bonding *bond)

0 commit comments

Comments
 (0)