Lines Matching refs:devlink
73 devlink_trap_policer_item_lookup(struct devlink *devlink, u32 id) in devlink_trap_policer_item_lookup() argument
77 list_for_each_entry(policer_item, &devlink->trap_policer_list, list) { in devlink_trap_policer_item_lookup()
86 devlink_trap_item_lookup(struct devlink *devlink, const char *name) in devlink_trap_item_lookup() argument
90 list_for_each_entry(trap_item, &devlink->trap_list, list) { in devlink_trap_item_lookup()
99 devlink_trap_item_get_from_info(struct devlink *devlink, in devlink_trap_item_get_from_info() argument
108 return devlink_trap_item_lookup(devlink, nla_data(attr)); in devlink_trap_item_get_from_info()
211 static int devlink_trap_stats_put(struct sk_buff *msg, struct devlink *devlink, in devlink_trap_stats_put() argument
219 if (devlink->ops->trap_drop_counter_get) { in devlink_trap_stats_put()
220 err = devlink->ops->trap_drop_counter_get(devlink, in devlink_trap_stats_put()
233 if (devlink->ops->trap_drop_counter_get && in devlink_trap_stats_put()
257 static int devlink_nl_trap_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_trap_fill() argument
270 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_trap_fill()
294 err = devlink_trap_stats_put(msg, devlink, trap_item); in devlink_nl_trap_fill()
310 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_trap_get_doit() local
315 if (list_empty(&devlink->trap_list)) in devlink_nl_trap_get_doit()
318 trap_item = devlink_trap_item_get_from_info(devlink, info); in devlink_nl_trap_get_doit()
328 err = devlink_nl_trap_fill(msg, devlink, trap_item, in devlink_nl_trap_get_doit()
342 struct devlink *devlink, in devlink_nl_trap_get_dump_one() argument
350 list_for_each_entry(trap_item, &devlink->trap_list, list) { in devlink_nl_trap_get_dump_one()
355 err = devlink_nl_trap_fill(msg, devlink, trap_item, in devlink_nl_trap_get_dump_one()
374 static int __devlink_trap_action_set(struct devlink *devlink, in __devlink_trap_action_set() argument
387 err = devlink->ops->trap_action_set(devlink, trap_item->trap, in __devlink_trap_action_set()
397 static int devlink_trap_action_set(struct devlink *devlink, in devlink_trap_action_set() argument
413 return __devlink_trap_action_set(devlink, trap_item, trap_action, in devlink_trap_action_set()
420 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_trap_set_doit() local
423 if (list_empty(&devlink->trap_list)) in devlink_nl_cmd_trap_set_doit()
426 trap_item = devlink_trap_item_get_from_info(devlink, info); in devlink_nl_cmd_trap_set_doit()
432 return devlink_trap_action_set(devlink, trap_item, info); in devlink_nl_cmd_trap_set_doit()
436 devlink_trap_group_item_lookup(struct devlink *devlink, const char *name) in devlink_trap_group_item_lookup() argument
440 list_for_each_entry(group_item, &devlink->trap_group_list, list) { in devlink_trap_group_item_lookup()
449 devlink_trap_group_item_lookup_by_id(struct devlink *devlink, u16 id) in devlink_trap_group_item_lookup_by_id() argument
453 list_for_each_entry(group_item, &devlink->trap_group_list, list) { in devlink_trap_group_item_lookup_by_id()
462 devlink_trap_group_item_get_from_info(struct devlink *devlink, in devlink_trap_group_item_get_from_info() argument
471 return devlink_trap_group_item_lookup(devlink, name); in devlink_trap_group_item_get_from_info()
475 devlink_nl_trap_group_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_trap_group_fill() argument
487 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_trap_group_fill()
519 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_trap_group_get_doit() local
524 if (list_empty(&devlink->trap_group_list)) in devlink_nl_trap_group_get_doit()
527 group_item = devlink_trap_group_item_get_from_info(devlink, info); in devlink_nl_trap_group_get_doit()
537 err = devlink_nl_trap_group_fill(msg, devlink, group_item, in devlink_nl_trap_group_get_doit()
551 struct devlink *devlink, in devlink_nl_trap_group_get_dump_one() argument
560 list_for_each_entry(group_item, &devlink->trap_group_list, list) { in devlink_nl_trap_group_get_dump_one()
565 err = devlink_nl_trap_group_fill(msg, devlink, group_item, in devlink_nl_trap_group_get_dump_one()
586 __devlink_trap_group_action_set(struct devlink *devlink, in __devlink_trap_group_action_set() argument
595 if (devlink->ops->trap_group_action_set) { in __devlink_trap_group_action_set()
596 err = devlink->ops->trap_group_action_set(devlink, group_item->group, in __devlink_trap_group_action_set()
601 list_for_each_entry(trap_item, &devlink->trap_list, list) { in __devlink_trap_group_action_set()
613 list_for_each_entry(trap_item, &devlink->trap_list, list) { in __devlink_trap_group_action_set()
616 err = __devlink_trap_action_set(devlink, trap_item, in __devlink_trap_group_action_set()
626 devlink_trap_group_action_set(struct devlink *devlink, in devlink_trap_group_action_set() argument
642 err = __devlink_trap_group_action_set(devlink, group_item, trap_action, in devlink_trap_group_action_set()
652 static int devlink_trap_group_set(struct devlink *devlink, in devlink_trap_group_set() argument
666 if (!devlink->ops->trap_group_set) in devlink_trap_group_set()
670 policer_item = devlink_trap_policer_item_lookup(devlink, policer_id); in devlink_trap_group_set()
677 err = devlink->ops->trap_group_set(devlink, group_item->group, policer, in devlink_trap_group_set()
691 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_trap_group_set_doit() local
696 if (list_empty(&devlink->trap_group_list)) in devlink_nl_cmd_trap_group_set_doit()
699 group_item = devlink_trap_group_item_get_from_info(devlink, info); in devlink_nl_cmd_trap_group_set_doit()
705 err = devlink_trap_group_action_set(devlink, group_item, info, in devlink_nl_cmd_trap_group_set_doit()
710 err = devlink_trap_group_set(devlink, group_item, info); in devlink_nl_cmd_trap_group_set_doit()
723 devlink_trap_policer_item_get_from_info(struct devlink *devlink, in devlink_trap_policer_item_get_from_info() argument
732 return devlink_trap_policer_item_lookup(devlink, id); in devlink_trap_policer_item_get_from_info()
736 devlink_trap_policer_stats_put(struct sk_buff *msg, struct devlink *devlink, in devlink_trap_policer_stats_put() argument
743 if (!devlink->ops->trap_policer_counter_get) in devlink_trap_policer_stats_put()
746 err = devlink->ops->trap_policer_counter_get(devlink, policer, &drops); in devlink_trap_policer_stats_put()
768 devlink_nl_trap_policer_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_trap_policer_fill() argument
780 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_trap_policer_fill()
795 err = devlink_trap_policer_stats_put(msg, devlink, in devlink_nl_trap_policer_fill()
814 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_trap_policer_get_doit() local
818 if (list_empty(&devlink->trap_policer_list)) in devlink_nl_trap_policer_get_doit()
821 policer_item = devlink_trap_policer_item_get_from_info(devlink, info); in devlink_nl_trap_policer_get_doit()
831 err = devlink_nl_trap_policer_fill(msg, devlink, policer_item, in devlink_nl_trap_policer_get_doit()
845 struct devlink *devlink, in devlink_nl_trap_policer_get_dump_one() argument
854 list_for_each_entry(policer_item, &devlink->trap_policer_list, list) { in devlink_nl_trap_policer_get_dump_one()
859 err = devlink_nl_trap_policer_fill(msg, devlink, policer_item, in devlink_nl_trap_policer_get_dump_one()
880 devlink_trap_policer_set(struct devlink *devlink, in devlink_trap_policer_set() argument
918 err = devlink->ops->trap_policer_set(devlink, policer_item->policer, in devlink_trap_policer_set()
934 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_trap_policer_set_doit() local
936 if (list_empty(&devlink->trap_policer_list)) in devlink_nl_cmd_trap_policer_set_doit()
939 if (!devlink->ops->trap_policer_set) in devlink_nl_cmd_trap_policer_set_doit()
942 policer_item = devlink_trap_policer_item_get_from_info(devlink, info); in devlink_nl_cmd_trap_policer_set_doit()
948 return devlink_trap_policer_set(devlink, policer_item, info); in devlink_nl_cmd_trap_policer_set_doit()
1168 devlink_trap_group_notify(struct devlink *devlink, in devlink_trap_group_notify() argument
1177 if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED)) in devlink_trap_group_notify()
1184 err = devlink_nl_trap_group_fill(msg, devlink, group_item, cmd, 0, 0, in devlink_trap_group_notify()
1191 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_trap_group_notify()
1195 void devlink_trap_groups_notify_register(struct devlink *devlink) in devlink_trap_groups_notify_register() argument
1199 list_for_each_entry(group_item, &devlink->trap_group_list, list) in devlink_trap_groups_notify_register()
1200 devlink_trap_group_notify(devlink, group_item, in devlink_trap_groups_notify_register()
1204 void devlink_trap_groups_notify_unregister(struct devlink *devlink) in devlink_trap_groups_notify_unregister() argument
1208 list_for_each_entry_reverse(group_item, &devlink->trap_group_list, list) in devlink_trap_groups_notify_unregister()
1209 devlink_trap_group_notify(devlink, group_item, in devlink_trap_groups_notify_unregister()
1214 devlink_trap_item_group_link(struct devlink *devlink, in devlink_trap_item_group_link() argument
1220 group_item = devlink_trap_group_item_lookup_by_id(devlink, group_id); in devlink_trap_item_group_link()
1229 static void devlink_trap_notify(struct devlink *devlink, in devlink_trap_notify() argument
1238 if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED)) in devlink_trap_notify()
1245 err = devlink_nl_trap_fill(msg, devlink, trap_item, cmd, 0, 0, 0); in devlink_trap_notify()
1251 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_trap_notify()
1255 void devlink_traps_notify_register(struct devlink *devlink) in devlink_traps_notify_register() argument
1259 list_for_each_entry(trap_item, &devlink->trap_list, list) in devlink_traps_notify_register()
1260 devlink_trap_notify(devlink, trap_item, DEVLINK_CMD_TRAP_NEW); in devlink_traps_notify_register()
1263 void devlink_traps_notify_unregister(struct devlink *devlink) in devlink_traps_notify_unregister() argument
1267 list_for_each_entry_reverse(trap_item, &devlink->trap_list, list) in devlink_traps_notify_unregister()
1268 devlink_trap_notify(devlink, trap_item, DEVLINK_CMD_TRAP_DEL); in devlink_traps_notify_unregister()
1272 devlink_trap_register(struct devlink *devlink, in devlink_trap_register() argument
1278 if (devlink_trap_item_lookup(devlink, trap->name)) in devlink_trap_register()
1295 err = devlink_trap_item_group_link(devlink, trap_item); in devlink_trap_register()
1299 err = devlink->ops->trap_init(devlink, trap, trap_item); in devlink_trap_register()
1303 list_add_tail(&trap_item->list, &devlink->trap_list); in devlink_trap_register()
1304 devlink_trap_notify(devlink, trap_item, DEVLINK_CMD_TRAP_NEW); in devlink_trap_register()
1316 static void devlink_trap_unregister(struct devlink *devlink, in devlink_trap_unregister() argument
1321 trap_item = devlink_trap_item_lookup(devlink, trap->name); in devlink_trap_unregister()
1325 devlink_trap_notify(devlink, trap_item, DEVLINK_CMD_TRAP_DEL); in devlink_trap_unregister()
1327 if (devlink->ops->trap_fini) in devlink_trap_unregister()
1328 devlink->ops->trap_fini(devlink, trap, trap_item); in devlink_trap_unregister()
1333 static void devlink_trap_disable(struct devlink *devlink, in devlink_trap_disable() argument
1338 trap_item = devlink_trap_item_lookup(devlink, trap->name); in devlink_trap_disable()
1342 devlink->ops->trap_action_set(devlink, trap, DEVLINK_TRAP_ACTION_DROP, in devlink_trap_disable()
1356 int devl_traps_register(struct devlink *devlink, in devl_traps_register() argument
1362 if (!devlink->ops->trap_init || !devlink->ops->trap_action_set) in devl_traps_register()
1365 devl_assert_locked(devlink); in devl_traps_register()
1373 err = devlink_trap_register(devlink, trap, priv); in devl_traps_register()
1383 devlink_trap_unregister(devlink, &traps[i]); in devl_traps_register()
1399 int devlink_traps_register(struct devlink *devlink, in devlink_traps_register() argument
1405 devl_lock(devlink); in devlink_traps_register()
1406 err = devl_traps_register(devlink, traps, traps_count, priv); in devlink_traps_register()
1407 devl_unlock(devlink); in devlink_traps_register()
1418 void devl_traps_unregister(struct devlink *devlink, in devl_traps_unregister() argument
1424 devl_assert_locked(devlink); in devl_traps_unregister()
1429 devlink_trap_disable(devlink, &traps[i]); in devl_traps_unregister()
1432 devlink_trap_unregister(devlink, &traps[i]); in devl_traps_unregister()
1444 void devlink_traps_unregister(struct devlink *devlink, in devlink_traps_unregister() argument
1448 devl_lock(devlink); in devlink_traps_unregister()
1449 devl_traps_unregister(devlink, traps, traps_count); in devlink_traps_unregister()
1450 devl_unlock(devlink); in devlink_traps_unregister()
1492 void devlink_trap_report(struct devlink *devlink, struct sk_buff *skb, in devlink_trap_report() argument
1507 trace_devlink_trap_report(devlink, skb, &metadata); in devlink_trap_report()
1527 devlink_trap_group_item_policer_link(struct devlink *devlink, in devlink_trap_group_item_policer_link() argument
1536 policer_item = devlink_trap_policer_item_lookup(devlink, policer_id); in devlink_trap_group_item_policer_link()
1546 devlink_trap_group_register(struct devlink *devlink, in devlink_trap_group_register() argument
1552 if (devlink_trap_group_item_lookup(devlink, group->name)) in devlink_trap_group_register()
1567 err = devlink_trap_group_item_policer_link(devlink, group_item); in devlink_trap_group_register()
1571 if (devlink->ops->trap_group_init) { in devlink_trap_group_register()
1572 err = devlink->ops->trap_group_init(devlink, group); in devlink_trap_group_register()
1577 list_add_tail(&group_item->list, &devlink->trap_group_list); in devlink_trap_group_register()
1578 devlink_trap_group_notify(devlink, group_item, in devlink_trap_group_register()
1592 devlink_trap_group_unregister(struct devlink *devlink, in devlink_trap_group_unregister() argument
1597 group_item = devlink_trap_group_item_lookup(devlink, group->name); in devlink_trap_group_unregister()
1601 devlink_trap_group_notify(devlink, group_item, in devlink_trap_group_unregister()
1616 int devl_trap_groups_register(struct devlink *devlink, in devl_trap_groups_register() argument
1622 devl_assert_locked(devlink); in devl_trap_groups_register()
1630 err = devlink_trap_group_register(devlink, group); in devl_trap_groups_register()
1640 devlink_trap_group_unregister(devlink, &groups[i]); in devl_trap_groups_register()
1655 int devlink_trap_groups_register(struct devlink *devlink, in devlink_trap_groups_register() argument
1661 devl_lock(devlink); in devlink_trap_groups_register()
1662 err = devl_trap_groups_register(devlink, groups, groups_count); in devlink_trap_groups_register()
1663 devl_unlock(devlink); in devlink_trap_groups_register()
1674 void devl_trap_groups_unregister(struct devlink *devlink, in devl_trap_groups_unregister() argument
1680 devl_assert_locked(devlink); in devl_trap_groups_unregister()
1682 devlink_trap_group_unregister(devlink, &groups[i]); in devl_trap_groups_unregister()
1694 void devlink_trap_groups_unregister(struct devlink *devlink, in devlink_trap_groups_unregister() argument
1698 devl_lock(devlink); in devlink_trap_groups_unregister()
1699 devl_trap_groups_unregister(devlink, groups, groups_count); in devlink_trap_groups_unregister()
1700 devl_unlock(devlink); in devlink_trap_groups_unregister()
1705 devlink_trap_policer_notify(struct devlink *devlink, in devlink_trap_policer_notify() argument
1714 if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED)) in devlink_trap_policer_notify()
1721 err = devlink_nl_trap_policer_fill(msg, devlink, policer_item, cmd, 0, in devlink_trap_policer_notify()
1728 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_trap_policer_notify()
1732 void devlink_trap_policers_notify_register(struct devlink *devlink) in devlink_trap_policers_notify_register() argument
1736 list_for_each_entry(policer_item, &devlink->trap_policer_list, list) in devlink_trap_policers_notify_register()
1737 devlink_trap_policer_notify(devlink, policer_item, in devlink_trap_policers_notify_register()
1741 void devlink_trap_policers_notify_unregister(struct devlink *devlink) in devlink_trap_policers_notify_unregister() argument
1745 list_for_each_entry_reverse(policer_item, &devlink->trap_policer_list, in devlink_trap_policers_notify_unregister()
1747 devlink_trap_policer_notify(devlink, policer_item, in devlink_trap_policers_notify_unregister()
1752 devlink_trap_policer_register(struct devlink *devlink, in devlink_trap_policer_register() argument
1758 if (devlink_trap_policer_item_lookup(devlink, policer->id)) in devlink_trap_policer_register()
1769 if (devlink->ops->trap_policer_init) { in devlink_trap_policer_register()
1770 err = devlink->ops->trap_policer_init(devlink, policer); in devlink_trap_policer_register()
1775 list_add_tail(&policer_item->list, &devlink->trap_policer_list); in devlink_trap_policer_register()
1776 devlink_trap_policer_notify(devlink, policer_item, in devlink_trap_policer_register()
1787 devlink_trap_policer_unregister(struct devlink *devlink, in devlink_trap_policer_unregister() argument
1792 policer_item = devlink_trap_policer_item_lookup(devlink, policer->id); in devlink_trap_policer_unregister()
1796 devlink_trap_policer_notify(devlink, policer_item, in devlink_trap_policer_unregister()
1799 if (devlink->ops->trap_policer_fini) in devlink_trap_policer_unregister()
1800 devlink->ops->trap_policer_fini(devlink, policer); in devlink_trap_policer_unregister()
1813 devl_trap_policers_register(struct devlink *devlink, in devl_trap_policers_register() argument
1819 devl_assert_locked(devlink); in devl_trap_policers_register()
1830 err = devlink_trap_policer_register(devlink, policer); in devl_trap_policers_register()
1839 devlink_trap_policer_unregister(devlink, &policers[i]); in devl_trap_policers_register()
1851 devl_trap_policers_unregister(struct devlink *devlink, in devl_trap_policers_unregister() argument
1857 devl_assert_locked(devlink); in devl_trap_policers_unregister()
1859 devlink_trap_policer_unregister(devlink, &policers[i]); in devl_trap_policers_unregister()