brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · b19492a Raw
116 lines · c
1// SPDX-License-Identifier: GPL-2.02#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 15static struct dentry *bonding_debug_root;16 17/* Show RLB hash table */18static 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}48DEFINE_SHOW_ATTRIBUTE(bond_debug_rlb_hash);49 50void bond_debug_register(struct bonding *bond)51{52	bond->debug_dir =53		debugfs_create_dir(bond->dev->name, bonding_debug_root);54 55	debugfs_create_file("rlb_hash_table", 0400, bond->debug_dir,56				bond, &bond_debug_rlb_hash_fops);57}58 59void bond_debug_unregister(struct bonding *bond)60{61	debugfs_remove_recursive(bond->debug_dir);62}63 64void bond_debug_reregister(struct bonding *bond)65{66	struct dentry *d;67 68	d = debugfs_rename(bonding_debug_root, bond->debug_dir,69			   bonding_debug_root, bond->dev->name);70	if (!IS_ERR(d)) {71		bond->debug_dir = d;72	} else {73		netdev_warn(bond->dev, "failed to reregister, so just unregister old one\n");74		bond_debug_unregister(bond);75	}76}77 78void __init bond_create_debugfs(void)79{80	bonding_debug_root = debugfs_create_dir("bonding", NULL);81 82	if (IS_ERR(bonding_debug_root))83		pr_warn("Warning: Cannot create bonding directory in debugfs\n");84}85 86void bond_destroy_debugfs(void)87{88	debugfs_remove_recursive(bonding_debug_root);89	bonding_debug_root = NULL;90}91 92 93#else /* !CONFIG_DEBUG_FS */94 95void bond_debug_register(struct bonding *bond)96{97}98 99void bond_debug_unregister(struct bonding *bond)100{101}102 103void bond_debug_reregister(struct bonding *bond)104{105}106 107void __init bond_create_debugfs(void)108{109}110 111void bond_destroy_debugfs(void)112{113}114 115#endif /* CONFIG_DEBUG_FS */116