const char *dev_name;
unsigned int port_index;
bool port_index_valid;
+ unsigned int devlink_index;
+ bool devlink_index_valid;
long data[];
};
memset(desc, 0, sizeof(*desc));
desc->bus_name = devlink_bus_name(devlink);
desc->dev_name = devlink_dev_name(devlink);
+ desc->devlink_index = devlink->index;
+ desc->devlink_index_valid = true;
}
static inline void devlink_nl_obj_desc_port_set(struct devlink_obj_desc *desc,
flt->dev_name = pos;
}
+ if (attrs[DEVLINK_ATTR_INDEX]) {
+ flt->devlink_index = nla_get_uint(attrs[DEVLINK_ATTR_INDEX]);
+ flt->devlink_index_valid = true;
+ }
+
if (attrs[DEVLINK_ATTR_PORT_INDEX]) {
flt->port_index = nla_get_u32(attrs[DEVLINK_ATTR_PORT_INDEX]);
flt->port_index_valid = true;
}
/* Don't attach empty filter. */
- if (!flt->bus_name && !flt->dev_name && !flt->port_index_valid) {
+ if (!flt->bus_name && !flt->dev_name &&
+ !flt->devlink_index_valid && !flt->port_index_valid) {
kfree(flt);
flt = NULL;
}
static bool devlink_obj_desc_match(const struct devlink_obj_desc *desc,
const struct devlink_obj_desc *flt)
{
+ if (desc->devlink_index_valid && flt->devlink_index_valid &&
+ desc->devlink_index != flt->devlink_index)
+ return false;
if (desc->bus_name && flt->bus_name &&
strcmp(desc->bus_name, flt->bus_name))
return false;