bridge: netlink: export per-vlan stats
Add a new LINK_XSTATS_TYPE_BRIDGE attribute and implement the RTM_GETSTATS callbacks for IFLA_STATS_LINK_XSTATS (fill_linkxstats and get_linkxstats_size) in order to export the per-vlan stats. The paddings were added because soon these fields will be needed for per-port per-vlan stats (or something else if someone beats me to it) so avoiding at least a few more netlink attributes. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
6dada9b10a
commit
a60c090361
@@ -1054,3 +1054,30 @@ void nbp_vlan_flush(struct net_bridge_port *port)
|
||||
synchronize_rcu();
|
||||
__vlan_group_free(vg);
|
||||
}
|
||||
|
||||
void br_vlan_get_stats(const struct net_bridge_vlan *v,
|
||||
struct br_vlan_stats *stats)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
for_each_possible_cpu(i) {
|
||||
u64 rxpackets, rxbytes, txpackets, txbytes;
|
||||
struct br_vlan_stats *cpu_stats;
|
||||
unsigned int start;
|
||||
|
||||
cpu_stats = per_cpu_ptr(v->stats, i);
|
||||
do {
|
||||
start = u64_stats_fetch_begin_irq(&cpu_stats->syncp);
|
||||
rxpackets = cpu_stats->rx_packets;
|
||||
rxbytes = cpu_stats->rx_bytes;
|
||||
txbytes = cpu_stats->tx_bytes;
|
||||
txpackets = cpu_stats->tx_packets;
|
||||
} while (u64_stats_fetch_retry_irq(&cpu_stats->syncp, start));
|
||||
|
||||
stats->rx_packets += rxpackets;
|
||||
stats->rx_bytes += rxbytes;
|
||||
stats->tx_bytes += txbytes;
|
||||
stats->tx_packets += txpackets;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user