Skip to content

Commit b837585

Browse files
Jiri Pirkodavem330
Jiri Pirko
authored andcommitted
devlink: add port to line card relationship set
In order to properly inform user about relationship between port and line card, introduce a driver API to set line card for a port. Use this information to extend port devlink netlink message by line card index and also include the line card index into phys_port_name and by that into a netdevice name. Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent fc9f50d commit b837585

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

include/net/devlink.h

+3
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ struct devlink_port {
136136
struct mutex reporters_lock; /* Protects reporter_list */
137137

138138
struct devlink_rate *devlink_rate;
139+
struct devlink_linecard *linecard;
139140
};
140141

141142
struct devlink_port_new_attrs {
@@ -1571,6 +1572,8 @@ void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port,
15711572
int devlink_rate_leaf_create(struct devlink_port *port, void *priv);
15721573
void devlink_rate_leaf_destroy(struct devlink_port *devlink_port);
15731574
void devlink_rate_nodes_destroy(struct devlink *devlink);
1575+
void devlink_port_linecard_set(struct devlink_port *devlink_port,
1576+
struct devlink_linecard *linecard);
15741577
struct devlink_linecard *
15751578
devlink_linecard_create(struct devlink *devlink, unsigned int linecard_index,
15761579
const struct devlink_linecard_ops *ops, void *priv);

net/core/devlink.c

+25-1
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,10 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
12431243
goto nla_put_failure;
12441244
if (devlink_nl_port_function_attrs_put(msg, devlink_port, extack))
12451245
goto nla_put_failure;
1246+
if (devlink_port->linecard &&
1247+
nla_put_u32(msg, DEVLINK_ATTR_LINECARD_INDEX,
1248+
devlink_port->linecard->index))
1249+
goto nla_put_failure;
12461250

12471251
genlmsg_end(msg, hdr);
12481252
return 0;
@@ -10105,6 +10109,21 @@ void devlink_rate_nodes_destroy(struct devlink *devlink)
1010510109
}
1010610110
EXPORT_SYMBOL_GPL(devlink_rate_nodes_destroy);
1010710111

10112+
/**
10113+
* devlink_port_linecard_set - Link port with a linecard
10114+
*
10115+
* @devlink_port: devlink port
10116+
* @linecard: devlink linecard
10117+
*/
10118+
void devlink_port_linecard_set(struct devlink_port *devlink_port,
10119+
struct devlink_linecard *linecard)
10120+
{
10121+
if (WARN_ON(devlink_port->devlink))
10122+
return;
10123+
devlink_port->linecard = linecard;
10124+
}
10125+
EXPORT_SYMBOL_GPL(devlink_port_linecard_set);
10126+
1010810127
static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
1010910128
char *name, size_t len)
1011010129
{
@@ -10116,7 +10135,12 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
1011610135

1011710136
switch (attrs->flavour) {
1011810137
case DEVLINK_PORT_FLAVOUR_PHYSICAL:
10119-
n = snprintf(name, len, "p%u", attrs->phys.port_number);
10138+
if (devlink_port->linecard)
10139+
n = snprintf(name, len, "l%u",
10140+
devlink_port->linecard->index);
10141+
if (n < len)
10142+
n += snprintf(name + n, len - n, "p%u",
10143+
attrs->phys.port_number);
1012010144
if (n < len && attrs->split)
1012110145
n += snprintf(name + n, len - n, "s%u",
1012210146
attrs->phys.split_subport_number);

0 commit comments

Comments
 (0)