Blame view

drivers/net/bonding/bond_debugfs.c 2.52 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  // SPDX-License-Identifier: GPL-2.0
f073c7ca2   Taku Izumi   bonding: add the ...
2
3
4
5
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/device.h>
  #include <linux/netdevice.h>
1ef8019be   David S. Miller   net: Move bonding...
6
7
  #include <net/bonding.h>
  #include <net/bond_alb.h>
f073c7ca2   Taku Izumi   bonding: add the ...
8

96ca7ffe7   Eric W. Biederman   bonding: debugfs ...
9
  #if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_NET_NS)
f073c7ca2   Taku Izumi   bonding: add the ...
10
11
12
13
14
  
  #include <linux/debugfs.h>
  #include <linux/seq_file.h>
  
  static struct dentry *bonding_debug_root;
547942cac   Nikolay Aleksandrov   bonding: trivial:...
15
  /* Show RLB hash table */
caafa8425   Taku Izumi   bonding: add the ...
16
17
18
19
20
21
  static int bond_debug_rlb_hash_show(struct seq_file *m, void *v)
  {
  	struct bonding *bond = m->private;
  	struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
  	struct rlb_client_info *client_info;
  	u32 hash_index;
01844098e   Veaceslav Falico   bonding: create a...
22
  	if (BOND_MODE(bond) != BOND_MODE_ALB)
caafa8425   Taku Izumi   bonding: add the ...
23
24
25
26
27
  		return 0;
  
  	seq_printf(m, "SourceIP        DestinationIP   "
  			"Destination MAC   DEV
  ");
4bab16d7c   Nikolay Aleksandrov   bonding: alb: con...
28
  	spin_lock_bh(&bond->mode_lock);
caafa8425   Taku Izumi   bonding: add the ...
29

e53665c6e   Jiri Bohac   bonding: delete m...
30
31
32
  	hash_index = bond_info->rx_hashtbl_used_head;
  	for (; hash_index != RLB_NULL_INDEX;
  	     hash_index = client_info->used_next) {
caafa8425   Taku Izumi   bonding: add the ...
33
34
35
36
37
38
39
40
  		client_info = &(bond_info->rx_hashtbl[hash_index]);
  		seq_printf(m, "%-15pI4 %-15pI4 %-17pM %s
  ",
  			&client_info->ip_src,
  			&client_info->ip_dst,
  			&client_info->mac_dst,
  			client_info->slave->dev->name);
  	}
4bab16d7c   Nikolay Aleksandrov   bonding: alb: con...
41
  	spin_unlock_bh(&bond->mode_lock);
caafa8425   Taku Izumi   bonding: add the ...
42
43
44
  
  	return 0;
  }
4e6feb7ad   Yangtao Li   bonding: convert ...
45
  DEFINE_SHOW_ATTRIBUTE(bond_debug_rlb_hash);
caafa8425   Taku Izumi   bonding: add the ...
46

f073c7ca2   Taku Izumi   bonding: add the ...
47
48
49
50
51
52
53
  void bond_debug_register(struct bonding *bond)
  {
  	if (!bonding_debug_root)
  		return;
  
  	bond->debug_dir =
  		debugfs_create_dir(bond->dev->name, bonding_debug_root);
caafa8425   Taku Izumi   bonding: add the ...
54
55
  	debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir,
  				bond, &bond_debug_rlb_hash_fops);
f073c7ca2   Taku Izumi   bonding: add the ...
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  }
  
  void bond_debug_unregister(struct bonding *bond)
  {
  	if (!bonding_debug_root)
  		return;
  
  	debugfs_remove_recursive(bond->debug_dir);
  }
  
  void bond_debug_reregister(struct bonding *bond)
  {
  	struct dentry *d;
  
  	if (!bonding_debug_root)
  		return;
  
  	d = debugfs_rename(bonding_debug_root, bond->debug_dir,
  			   bonding_debug_root, bond->dev->name);
  	if (d) {
  		bond->debug_dir = d;
  	} else {
9ef1cf16c   Veaceslav Falico   bonding: convert ...
78
79
  		netdev_warn(bond->dev, "failed to reregister, so just unregister old one
  ");
f073c7ca2   Taku Izumi   bonding: add the ...
80
81
82
83
84
85
86
87
88
  		bond_debug_unregister(bond);
  	}
  }
  
  void bond_create_debugfs(void)
  {
  	bonding_debug_root = debugfs_create_dir("bonding", NULL);
  
  	if (!bonding_debug_root) {
91565ebbc   Joe Perches   bonding: Convert ...
89
90
  		pr_warn("Warning: Cannot create bonding directory in debugfs
  ");
f073c7ca2   Taku Izumi   bonding: add the ...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  	}
  }
  
  void bond_destroy_debugfs(void)
  {
  	debugfs_remove_recursive(bonding_debug_root);
  	bonding_debug_root = NULL;
  }
  
  
  #else /* !CONFIG_DEBUG_FS */
  
  void bond_debug_register(struct bonding *bond)
  {
  }
  
  void bond_debug_unregister(struct bonding *bond)
  {
  }
  
  void bond_debug_reregister(struct bonding *bond)
  {
  }
  
  void bond_create_debugfs(void)
  {
  }
  
  void bond_destroy_debugfs(void)
  {
  }
  
  #endif /* CONFIG_DEBUG_FS */