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 <jiri@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fc9f50d5b3
commit
b837585985
@ -136,6 +136,7 @@ struct devlink_port {
|
||||
struct mutex reporters_lock; /* Protects reporter_list */
|
||||
|
||||
struct devlink_rate *devlink_rate;
|
||||
struct devlink_linecard *linecard;
|
||||
};
|
||||
|
||||
struct devlink_port_new_attrs {
|
||||
@ -1571,6 +1572,8 @@ void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port,
|
||||
int devlink_rate_leaf_create(struct devlink_port *port, void *priv);
|
||||
void devlink_rate_leaf_destroy(struct devlink_port *devlink_port);
|
||||
void devlink_rate_nodes_destroy(struct devlink *devlink);
|
||||
void devlink_port_linecard_set(struct devlink_port *devlink_port,
|
||||
struct devlink_linecard *linecard);
|
||||
struct devlink_linecard *
|
||||
devlink_linecard_create(struct devlink *devlink, unsigned int linecard_index,
|
||||
const struct devlink_linecard_ops *ops, void *priv);
|
||||
|
@ -1243,6 +1243,10 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
|
||||
goto nla_put_failure;
|
||||
if (devlink_nl_port_function_attrs_put(msg, devlink_port, extack))
|
||||
goto nla_put_failure;
|
||||
if (devlink_port->linecard &&
|
||||
nla_put_u32(msg, DEVLINK_ATTR_LINECARD_INDEX,
|
||||
devlink_port->linecard->index))
|
||||
goto nla_put_failure;
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
return 0;
|
||||
@ -10105,6 +10109,21 @@ void devlink_rate_nodes_destroy(struct devlink *devlink)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_rate_nodes_destroy);
|
||||
|
||||
/**
|
||||
* devlink_port_linecard_set - Link port with a linecard
|
||||
*
|
||||
* @devlink_port: devlink port
|
||||
* @linecard: devlink linecard
|
||||
*/
|
||||
void devlink_port_linecard_set(struct devlink_port *devlink_port,
|
||||
struct devlink_linecard *linecard)
|
||||
{
|
||||
if (WARN_ON(devlink_port->devlink))
|
||||
return;
|
||||
devlink_port->linecard = linecard;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_port_linecard_set);
|
||||
|
||||
static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
|
||||
char *name, size_t len)
|
||||
{
|
||||
@ -10116,7 +10135,12 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
|
||||
|
||||
switch (attrs->flavour) {
|
||||
case DEVLINK_PORT_FLAVOUR_PHYSICAL:
|
||||
n = snprintf(name, len, "p%u", attrs->phys.port_number);
|
||||
if (devlink_port->linecard)
|
||||
n = snprintf(name, len, "l%u",
|
||||
devlink_port->linecard->index);
|
||||
if (n < len)
|
||||
n += snprintf(name + n, len - n, "p%u",
|
||||
attrs->phys.port_number);
|
||||
if (n < len && attrs->split)
|
||||
n += snprintf(name + n, len - n, "s%u",
|
||||
attrs->phys.split_subport_number);
|
||||
|
Loading…
Reference in New Issue
Block a user