net/dsa/devlink.c
Source file repositories/reference/linux-study-clean/net/dsa/devlink.c
File Facts
- System
- Linux kernel
- Corpus path
net/dsa/devlink.c- Extension
.c- Size
- 10638 bytes
- Lines
- 403
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
net/dsa.hnet/devlink.hdevlink.h
Detected Declarations
function dsa_devlink_info_getfunction dsa_devlink_sb_pool_getfunction dsa_devlink_sb_pool_setfunction dsa_devlink_sb_port_pool_getfunction dsa_devlink_sb_port_pool_setfunction dsa_devlink_sb_tc_pool_bind_getfunction dsa_devlink_sb_tc_pool_bind_setfunction dsa_devlink_sb_occ_snapshotfunction dsa_devlink_sb_occ_max_clearfunction dsa_devlink_sb_occ_port_pool_getfunction dsa_devlink_sb_occ_tc_port_bind_getfunction dsa_devlink_param_getfunction dsa_devlink_param_setfunction dsa_devlink_params_registerfunction dsa_devlink_params_unregisterfunction dsa_devlink_resource_registerfunction dsa_devlink_resources_unregisterfunction dsa_devlink_resource_occ_get_registerfunction dsa_devlink_resource_occ_get_unregisterfunction dsa_devlink_region_createfunction dsa_devlink_port_region_createfunction dsa_devlink_region_destroyfunction dsa_port_devlink_setupfunction dsa_port_devlink_teardownfunction dsa_switch_devlink_registerfunction dsa_switch_devlink_unregisterfunction dsa_switch_devlink_allocfunction dsa_switch_devlink_freeexport dsa_devlink_param_getexport dsa_devlink_param_setexport dsa_devlink_params_registerexport dsa_devlink_params_unregisterexport dsa_devlink_resource_registerexport dsa_devlink_resources_unregisterexport dsa_devlink_resource_occ_get_registerexport dsa_devlink_resource_occ_get_unregisterexport dsa_devlink_region_createexport dsa_devlink_port_region_createexport dsa_devlink_region_destroy
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* DSA devlink handling
*/
#include <net/dsa.h>
#include <net/devlink.h>
#include "devlink.h"
static int dsa_devlink_info_get(struct devlink *dl,
struct devlink_info_req *req,
struct netlink_ext_ack *extack)
{
struct dsa_switch *ds = dsa_devlink_to_ds(dl);
if (ds->ops->devlink_info_get)
return ds->ops->devlink_info_get(ds, req, extack);
return -EOPNOTSUPP;
}
static int dsa_devlink_sb_pool_get(struct devlink *dl,
unsigned int sb_index, u16 pool_index,
struct devlink_sb_pool_info *pool_info)
{
struct dsa_switch *ds = dsa_devlink_to_ds(dl);
if (!ds->ops->devlink_sb_pool_get)
return -EOPNOTSUPP;
return ds->ops->devlink_sb_pool_get(ds, sb_index, pool_index,
pool_info);
}
static int dsa_devlink_sb_pool_set(struct devlink *dl, unsigned int sb_index,
u16 pool_index, u32 size,
enum devlink_sb_threshold_type threshold_type,
struct netlink_ext_ack *extack)
{
struct dsa_switch *ds = dsa_devlink_to_ds(dl);
if (!ds->ops->devlink_sb_pool_set)
return -EOPNOTSUPP;
return ds->ops->devlink_sb_pool_set(ds, sb_index, pool_index, size,
threshold_type, extack);
}
static int dsa_devlink_sb_port_pool_get(struct devlink_port *dlp,
unsigned int sb_index, u16 pool_index,
u32 *p_threshold)
{
struct dsa_switch *ds = dsa_devlink_port_to_ds(dlp);
int port = dsa_devlink_port_to_port(dlp);
if (!ds->ops->devlink_sb_port_pool_get)
return -EOPNOTSUPP;
return ds->ops->devlink_sb_port_pool_get(ds, port, sb_index,
pool_index, p_threshold);
}
static int dsa_devlink_sb_port_pool_set(struct devlink_port *dlp,
unsigned int sb_index, u16 pool_index,
u32 threshold,
struct netlink_ext_ack *extack)
{
struct dsa_switch *ds = dsa_devlink_port_to_ds(dlp);
int port = dsa_devlink_port_to_port(dlp);
if (!ds->ops->devlink_sb_port_pool_set)
return -EOPNOTSUPP;
return ds->ops->devlink_sb_port_pool_set(ds, port, sb_index,
pool_index, threshold, extack);
}
static int
dsa_devlink_sb_tc_pool_bind_get(struct devlink_port *dlp,
unsigned int sb_index, u16 tc_index,
enum devlink_sb_pool_type pool_type,
u16 *p_pool_index, u32 *p_threshold)
{
struct dsa_switch *ds = dsa_devlink_port_to_ds(dlp);
int port = dsa_devlink_port_to_port(dlp);
if (!ds->ops->devlink_sb_tc_pool_bind_get)
return -EOPNOTSUPP;
Annotation
- Immediate include surface: `net/dsa.h`, `net/devlink.h`, `devlink.h`.
- Detected declarations: `function dsa_devlink_info_get`, `function dsa_devlink_sb_pool_get`, `function dsa_devlink_sb_pool_set`, `function dsa_devlink_sb_port_pool_get`, `function dsa_devlink_sb_port_pool_set`, `function dsa_devlink_sb_tc_pool_bind_get`, `function dsa_devlink_sb_tc_pool_bind_set`, `function dsa_devlink_sb_occ_snapshot`, `function dsa_devlink_sb_occ_max_clear`, `function dsa_devlink_sb_occ_port_pool_get`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
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.