Skip to content

Commit f2e8346

Browse files
committed
Merge branch 'drop_monitor-Convert-to-use-devlink-tracepoint'
Ido Schimmel says: ==================== drop_monitor: Convert to use devlink tracepoint Drop monitor is able to monitor both software and hardware originated drops. Software drops are monitored by having drop monitor register its probe on the 'kfree_skb' tracepoint. Hardware originated drops are monitored by having devlink call into drop monitor whenever it receives a dropped packet from the underlying hardware. This patch set converts drop monitor to monitor both software and hardware originated drops in the same way - by registering its probe on the relevant tracepoint. In addition to drop monitor being more consistent, it is now also possible to build drop monitor as module instead of as a builtin and still monitor hardware originated drops. Initially, CONFIG_NET_DEVLINK implied CONFIG_NET_DROP_MONITOR, but after commit def2fbf ("kconfig: allow symbols implied by y to become m") we can have CONFIG_NET_DEVLINK=y and CONFIG_NET_DROP_MONITOR=m and hardware originated drops will not be monitored. Patch set overview: Patch #1 adds a tracepoint in devlink for trap reports. Patch #2 prepares probe functions in drop monitor for the new tracepoint. Patch #3 converts drop monitor to use the new tracepoint. Patches #4-#6 perform cleanups after the conversion. Patch #7 adds a test case for drop monitor. Both software originated drops and hardware originated drops (using netdevsim) are tested. Tested: | CONFIG_NET_DEVLINK | CONFIG_NET_DROP_MONITOR | Build | SW drops | HW drops | | -------------------|-------------------------|-------|----------|----------| | y | y | v | v | v | | y | m | v | v | v | | y | n | v | x | x | | n | y | v | v | x | | n | m | v | v | x | | n | n | v | x | x | ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 8333c1c + b7cc6d3 commit f2e8346

File tree

10 files changed

+368
-112
lines changed

10 files changed

+368
-112
lines changed

MAINTAINERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12065,7 +12065,6 @@ M: Neil Horman <[email protected]>
1206512065
1206612066
S: Maintained
1206712067
W: https://fedorahosted.org/dropwatch/
12068-
F: include/net/drop_monitor.h
1206912068
F: include/uapi/linux/net_dropmon.h
1207012069
F: net/core/drop_monitor.c
1207112070

include/net/devlink.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,22 @@ struct devlink_health_reporter_ops {
624624
struct netlink_ext_ack *extack);
625625
};
626626

627+
/**
628+
* struct devlink_trap_metadata - Packet trap metadata.
629+
* @trap_name: Trap name.
630+
* @trap_group_name: Trap group name.
631+
* @input_dev: Input netdevice.
632+
* @fa_cookie: Flow action user cookie.
633+
* @trap_type: Trap type.
634+
*/
635+
struct devlink_trap_metadata {
636+
const char *trap_name;
637+
const char *trap_group_name;
638+
struct net_device *input_dev;
639+
const struct flow_action_cookie *fa_cookie;
640+
enum devlink_trap_type trap_type;
641+
};
642+
627643
/**
628644
* struct devlink_trap_policer - Immutable packet trap policer attributes.
629645
* @id: Policer identifier.

include/net/drop_monitor.h

Lines changed: 0 additions & 36 deletions
This file was deleted.

include/trace/events/devlink.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,43 @@ TRACE_EVENT(devlink_health_reporter_state_update,
171171
__entry->new_state)
172172
);
173173

174+
/*
175+
* Tracepoint for devlink packet trap:
176+
*/
177+
TRACE_EVENT(devlink_trap_report,
178+
TP_PROTO(const struct devlink *devlink, struct sk_buff *skb,
179+
const struct devlink_trap_metadata *metadata),
180+
181+
TP_ARGS(devlink, skb, metadata),
182+
183+
TP_STRUCT__entry(
184+
__string(bus_name, devlink->dev->bus->name)
185+
__string(dev_name, dev_name(devlink->dev))
186+
__string(driver_name, devlink->dev->driver->name)
187+
__string(trap_name, metadata->trap_name)
188+
__string(trap_group_name, metadata->trap_group_name)
189+
__dynamic_array(char, input_dev_name, IFNAMSIZ)
190+
),
191+
192+
TP_fast_assign(
193+
struct net_device *input_dev = metadata->input_dev;
194+
195+
__assign_str(bus_name, devlink->dev->bus->name);
196+
__assign_str(dev_name, dev_name(devlink->dev));
197+
__assign_str(driver_name, devlink->dev->driver->name);
198+
__assign_str(trap_name, metadata->trap_name);
199+
__assign_str(trap_group_name, metadata->trap_group_name);
200+
__assign_str(input_dev_name,
201+
(input_dev ? input_dev->name : "NULL"));
202+
),
203+
204+
TP_printk("bus_name=%s dev_name=%s driver_name=%s trap_name=%s "
205+
"trap_group_name=%s input_dev_name=%s", __get_str(bus_name),
206+
__get_str(dev_name), __get_str(driver_name),
207+
__get_str(trap_name), __get_str(trap_group_name),
208+
__get_str(input_dev_name))
209+
);
210+
174211
#endif /* _TRACE_DEVLINK_H */
175212

176213
/* This part must be outside protection */

net/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,6 @@ config NET_SOCK_MSG
434434
config NET_DEVLINK
435435
bool
436436
default n
437-
imply NET_DROP_MONITOR
438437

439438
config PAGE_POOL
440439
bool

net/core/devlink.c

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#include <net/net_namespace.h>
2828
#include <net/sock.h>
2929
#include <net/devlink.h>
30-
#include <net/drop_monitor.h>
3130
#define CREATE_TRACE_POINTS
3231
#include <trace/events/devlink.h>
3332

@@ -84,6 +83,7 @@ EXPORT_SYMBOL(devlink_dpipe_header_ipv6);
8483

8584
EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwmsg);
8685
EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwerr);
86+
EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_trap_report);
8787

8888
static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1] = {
8989
[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY },
@@ -9261,20 +9261,19 @@ devlink_trap_stats_update(struct devlink_stats __percpu *trap_stats,
92619261
}
92629262

92639263
static void
9264-
devlink_trap_report_metadata_fill(struct net_dm_hw_metadata *hw_metadata,
9265-
const struct devlink_trap_item *trap_item,
9266-
struct devlink_port *in_devlink_port,
9267-
const struct flow_action_cookie *fa_cookie)
9264+
devlink_trap_report_metadata_set(struct devlink_trap_metadata *metadata,
9265+
const struct devlink_trap_item *trap_item,
9266+
struct devlink_port *in_devlink_port,
9267+
const struct flow_action_cookie *fa_cookie)
92689268
{
9269-
struct devlink_trap_group_item *group_item = trap_item->group_item;
9270-
9271-
hw_metadata->trap_group_name = group_item->group->name;
9272-
hw_metadata->trap_name = trap_item->trap->name;
9273-
hw_metadata->fa_cookie = fa_cookie;
9269+
metadata->trap_name = trap_item->trap->name;
9270+
metadata->trap_group_name = trap_item->group_item->group->name;
9271+
metadata->fa_cookie = fa_cookie;
9272+
metadata->trap_type = trap_item->trap->type;
92749273

92759274
spin_lock(&in_devlink_port->type_lock);
92769275
if (in_devlink_port->type == DEVLINK_PORT_TYPE_ETH)
9277-
hw_metadata->input_dev = in_devlink_port->type_dev;
9276+
metadata->input_dev = in_devlink_port->type_dev;
92789277
spin_unlock(&in_devlink_port->type_lock);
92799278
}
92809279

@@ -9292,21 +9291,17 @@ void devlink_trap_report(struct devlink *devlink, struct sk_buff *skb,
92929291

92939292
{
92949293
struct devlink_trap_item *trap_item = trap_ctx;
9295-
struct net_dm_hw_metadata hw_metadata = {};
92969294

92979295
devlink_trap_stats_update(trap_item->stats, skb->len);
92989296
devlink_trap_stats_update(trap_item->group_item->stats, skb->len);
92999297

9300-
/* Control packets were not dropped by the device or encountered an
9301-
* exception during forwarding and therefore should not be reported to
9302-
* the kernel's drop monitor.
9303-
*/
9304-
if (trap_item->trap->type == DEVLINK_TRAP_TYPE_CONTROL)
9305-
return;
9298+
if (trace_devlink_trap_report_enabled()) {
9299+
struct devlink_trap_metadata metadata = {};
93069300

9307-
devlink_trap_report_metadata_fill(&hw_metadata, trap_item,
9308-
in_devlink_port, fa_cookie);
9309-
net_dm_hw_report(skb, &hw_metadata);
9301+
devlink_trap_report_metadata_set(&metadata, trap_item,
9302+
in_devlink_port, fa_cookie);
9303+
trace_devlink_trap_report(devlink, skb, &metadata);
9304+
}
93109305
}
93119306
EXPORT_SYMBOL_GPL(devlink_trap_report);
93129307

0 commit comments

Comments
 (0)