net/devlink/trap.c
Source file repositories/reference/linux-study-clean/net/devlink/trap.c
File Facts
- System
- Linux kernel
- Corpus path
net/devlink/trap.c- Extension
.c- Size
- 47705 bytes
- Lines
- 1855
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
trace/events/devlink.hdevl_internal.h
Detected Declarations
struct devlink_statsstruct devlink_trap_policer_itemstruct devlink_trap_group_itemstruct devlink_trap_itemfunction devlink_trap_policer_item_lookupfunction list_for_each_entryfunction devlink_trap_item_lookupfunction list_for_each_entryfunction devlink_trap_item_get_from_infofunction devlink_trap_action_get_from_infofunction devlink_trap_metadata_putfunction devlink_trap_stats_readfunction devlink_trap_group_stats_putfunction devlink_trap_stats_putfunction devlink_nl_trap_fillfunction devlink_nl_trap_get_doitfunction devlink_nl_trap_get_dump_onefunction list_for_each_entryfunction devlink_nl_trap_get_dumpitfunction __devlink_trap_action_setfunction devlink_trap_action_setfunction devlink_nl_trap_set_doitfunction devlink_trap_group_item_lookupfunction list_for_each_entryfunction devlink_trap_group_item_lookup_by_idfunction list_for_each_entryfunction devlink_trap_group_item_get_from_infofunction devlink_nl_trap_group_fillfunction devlink_nl_trap_group_get_doitfunction devlink_nl_trap_group_get_dump_onefunction list_for_each_entryfunction devlink_nl_trap_group_get_dumpitfunction __devlink_trap_group_action_setfunction list_for_each_entryfunction list_for_each_entryfunction devlink_trap_group_action_setfunction devlink_trap_group_setfunction devlink_nl_trap_group_set_doitfunction devlink_trap_policer_item_get_from_infofunction devlink_trap_policer_stats_putfunction devlink_nl_trap_policer_fillfunction devlink_nl_trap_policer_get_doitfunction devlink_nl_trap_policer_get_dump_onefunction list_for_each_entryfunction devlink_nl_trap_policer_get_dumpitfunction devlink_trap_policer_setfunction devlink_nl_trap_policer_set_doitfunction devlink_trap_generic_verify
Annotated Snippet
struct devlink_stats {
u64_stats_t rx_bytes;
u64_stats_t rx_packets;
struct u64_stats_sync syncp;
};
/**
* struct devlink_trap_policer_item - Packet trap policer attributes.
* @policer: Immutable packet trap policer attributes.
* @rate: Rate in packets / sec.
* @burst: Burst size in packets.
* @list: trap_policer_list member.
*
* Describes packet trap policer attributes. Created by devlink during trap
* policer registration.
*/
struct devlink_trap_policer_item {
const struct devlink_trap_policer *policer;
u64 rate;
u64 burst;
struct list_head list;
};
/**
* struct devlink_trap_group_item - Packet trap group attributes.
* @group: Immutable packet trap group attributes.
* @policer_item: Associated policer item. Can be NULL.
* @list: trap_group_list member.
* @stats: Trap group statistics.
*
* Describes packet trap group attributes. Created by devlink during trap
* group registration.
*/
struct devlink_trap_group_item {
const struct devlink_trap_group *group;
struct devlink_trap_policer_item *policer_item;
struct list_head list;
struct devlink_stats __percpu *stats;
};
/**
* struct devlink_trap_item - Packet trap attributes.
* @trap: Immutable packet trap attributes.
* @group_item: Associated group item.
* @list: trap_list member.
* @action: Trap action.
* @stats: Trap statistics.
* @priv: Driver private information.
*
* Describes both mutable and immutable packet trap attributes. Created by
* devlink during trap registration and used for all trap related operations.
*/
struct devlink_trap_item {
const struct devlink_trap *trap;
struct devlink_trap_group_item *group_item;
struct list_head list;
enum devlink_trap_action action;
struct devlink_stats __percpu *stats;
void *priv;
};
static struct devlink_trap_policer_item *
devlink_trap_policer_item_lookup(struct devlink *devlink, u32 id)
{
struct devlink_trap_policer_item *policer_item;
list_for_each_entry(policer_item, &devlink->trap_policer_list, list) {
if (policer_item->policer->id == id)
return policer_item;
}
return NULL;
}
static struct devlink_trap_item *
devlink_trap_item_lookup(struct devlink *devlink, const char *name)
{
struct devlink_trap_item *trap_item;
list_for_each_entry(trap_item, &devlink->trap_list, list) {
if (!strcmp(trap_item->trap->name, name))
return trap_item;
}
return NULL;
}
static struct devlink_trap_item *
devlink_trap_item_get_from_info(struct devlink *devlink,
struct genl_info *info)
Annotation
- Immediate include surface: `trace/events/devlink.h`, `devl_internal.h`.
- Detected declarations: `struct devlink_stats`, `struct devlink_trap_policer_item`, `struct devlink_trap_group_item`, `struct devlink_trap_item`, `function devlink_trap_policer_item_lookup`, `function list_for_each_entry`, `function devlink_trap_item_lookup`, `function list_for_each_entry`, `function devlink_trap_item_get_from_info`, `function devlink_trap_action_get_from_info`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.