Lines Matching full:shaper
139 const struct net_shaper *shaper, in net_shaper_fill_one() argument
149 net_shaper_fill_handle(msg, &shaper->parent, in net_shaper_fill_one()
151 net_shaper_fill_handle(msg, &shaper->handle, in net_shaper_fill_one()
153 ((shaper->bw_min || shaper->bw_max || shaper->burst) && in net_shaper_fill_one()
154 nla_put_u32(msg, NET_SHAPER_A_METRIC, shaper->metric)) || in net_shaper_fill_one()
155 (shaper->bw_min && in net_shaper_fill_one()
156 nla_put_uint(msg, NET_SHAPER_A_BW_MIN, shaper->bw_min)) || in net_shaper_fill_one()
157 (shaper->bw_max && in net_shaper_fill_one()
158 nla_put_uint(msg, NET_SHAPER_A_BW_MAX, shaper->bw_max)) || in net_shaper_fill_one()
159 (shaper->burst && in net_shaper_fill_one()
160 nla_put_uint(msg, NET_SHAPER_A_BURST, shaper->burst)) || in net_shaper_fill_one()
161 (shaper->priority && in net_shaper_fill_one()
162 nla_put_u32(msg, NET_SHAPER_A_PRIORITY, shaper->priority)) || in net_shaper_fill_one()
163 (shaper->weight && in net_shaper_fill_one()
164 nla_put_u32(msg, NET_SHAPER_A_WEIGHT, shaper->weight))) in net_shaper_fill_one()
264 /* Allocate on demand the per device shaper's hierarchy container.
265 * Called under the net shaper lock
291 /* Prepare the hierarchy container to actually insert the given shaper, doing
324 NL_SET_ERR_MSG(extack, "Can't allocate new id for NODE shaper"); in net_shaper_pre_insert()
338 /* Mark 'tentative' shaper inside the hierarchy container. in net_shaper_pre_insert()
346 NL_SET_ERR_MSG(extack, "Can't insert shaper into device store"); in net_shaper_pre_insert()
429 * NODE shaper creation (ID_UNSPEC) and reuse of existing in net_shaper_parse_handle()
430 * shaper (any other value). in net_shaper_parse_handle()
445 struct net_shaper *shaper) in net_shaper_validate_caps() argument
451 ops->capabilities(binding, shaper->handle.scope, &caps); in net_shaper_validate_caps()
477 if (shaper->handle.scope == NET_SHAPER_SCOPE_QUEUE && in net_shaper_validate_caps()
479 shaper->handle.id >= binding->netdev->real_num_tx_queues) { in net_shaper_validate_caps()
482 shaper->handle.id, in net_shaper_validate_caps()
491 if (shaper->burst || shaper->bw_min || shaper->bw_max) { in net_shaper_validate_caps()
493 shaper->metric; in net_shaper_validate_caps()
503 shaper->metric); in net_shaper_validate_caps()
513 struct net_shaper *shaper, in net_shaper_parse_info() argument
519 /* The shaper handle is the only mandatory attribute. */ in net_shaper_parse_info()
524 &shaper->handle); in net_shaper_parse_info()
528 if (shaper->handle.scope == NET_SHAPER_SCOPE_UNSPEC) { in net_shaper_parse_info()
534 * incrementally update the existing shaper configuration. in net_shaper_parse_info()
536 old = net_shaper_lookup(binding, &shaper->handle); in net_shaper_parse_info()
538 *shaper = *old; in net_shaper_parse_info()
542 shaper->metric = nla_get_u32(tb[NET_SHAPER_A_METRIC]); in net_shaper_parse_info()
545 shaper->bw_min = nla_get_uint(tb[NET_SHAPER_A_BW_MIN]); in net_shaper_parse_info()
548 shaper->bw_max = nla_get_uint(tb[NET_SHAPER_A_BW_MAX]); in net_shaper_parse_info()
551 shaper->burst = nla_get_uint(tb[NET_SHAPER_A_BURST]); in net_shaper_parse_info()
554 shaper->priority = nla_get_u32(tb[NET_SHAPER_A_PRIORITY]); in net_shaper_parse_info()
557 shaper->weight = nla_get_u32(tb[NET_SHAPER_A_WEIGHT]); in net_shaper_parse_info()
559 ret = net_shaper_validate_caps(binding, tb, info, shaper); in net_shaper_parse_info()
567 const struct net_shaper *shaper, in net_shaper_validate_nesting() argument
573 ops->capabilities(binding, shaper->handle.scope, &caps); in net_shaper_validate_nesting()
577 shaper->handle.scope); in net_shaper_validate_nesting()
590 struct net_shaper *shaper) in net_shaper_parse_leaf() argument
601 ret = net_shaper_parse_info(binding, tb, info, shaper, &exists); in net_shaper_parse_leaf()
605 if (shaper->handle.scope != NET_SHAPER_SCOPE_QUEUE) { in net_shaper_parse_leaf()
611 ret = net_shaper_validate_nesting(binding, shaper, in net_shaper_parse_leaf()
618 net_shaper_default_parent(&shaper->handle, &shaper->parent); in net_shaper_parse_leaf()
623 * the shaper's parent handle.
628 struct net_shaper *shaper) in net_shaper_parse_node() argument
633 ret = net_shaper_parse_info(binding, tb, info, shaper, &exists); in net_shaper_parse_node()
637 if (shaper->handle.scope != NET_SHAPER_SCOPE_NODE && in net_shaper_parse_node()
638 shaper->handle.scope != NET_SHAPER_SCOPE_NETDEV) { in net_shaper_parse_node()
645 &shaper->parent); in net_shaper_parse_node()
649 if (shaper->parent.scope != NET_SHAPER_SCOPE_NODE && in net_shaper_parse_node()
650 shaper->parent.scope != NET_SHAPER_SCOPE_NETDEV) { in net_shaper_parse_node()
730 struct net_shaper *shaper; in net_shaper_nl_get_doit() local
748 shaper = net_shaper_lookup(binding, &handle); in net_shaper_nl_get_doit()
749 if (!shaper) { in net_shaper_nl_get_doit()
757 ret = net_shaper_fill_one(msg, binding, shaper, info); in net_shaper_nl_get_doit()
780 struct net_shaper *shaper; in net_shaper_nl_get_dumpit() local
790 for (; (shaper = xa_find(&hierarchy->shapers, &ctx->start_index, in net_shaper_nl_get_dumpit()
792 ret = net_shaper_fill_one(skb, binding, shaper, info); in net_shaper_nl_get_dumpit()
807 struct net_shaper shaper = {}; in net_shaper_nl_set_doit() local
814 ret = net_shaper_parse_info(binding, info->attrs, info, &shaper, in net_shaper_nl_set_doit()
820 net_shaper_default_parent(&shaper.handle, &shaper.parent); in net_shaper_nl_set_doit()
829 handle = shaper.handle; in net_shaper_nl_set_doit()
841 ret = ops->set(binding, &shaper, info->extack); in net_shaper_nl_set_doit()
847 net_shaper_commit(binding, 1, &shaper); in net_shaper_nl_set_doit()
855 struct net_shaper *shaper, in __net_shaper_delete() argument
859 struct net_shaper_handle parent_handle, handle = shaper->handle; in __net_shaper_delete()
864 parent_handle = shaper->parent; in __net_shaper_delete()
871 kfree_rcu(shaper, rcu); in __net_shaper_delete()
875 shaper = net_shaper_lookup(binding, &parent_handle); in __net_shaper_delete()
876 if (shaper && !--shaper->leaves) { in __net_shaper_delete()
931 NL_SET_ERR_MSG_FMT(extack, "Node shaper %d:%d does not exists", in __net_shaper_group()
954 NL_SET_ERR_MSG_FMT(extack, "Node parent shaper %d:%d does not exists", in __net_shaper_group()
965 /* For newly created node scope shaper, the following will in __net_shaper_group()
1010 const struct net_shaper *shaper, in net_shaper_pre_del_node() argument
1019 if (!shaper->leaves) in net_shaper_pre_del_node()
1023 node.handle = shaper->parent; in net_shaper_pre_del_node()
1028 /* A scope NODE shaper can be nested only to the NETDEV scope in net_shaper_pre_del_node()
1029 * shaper without creating the latter, this check may fail only in net_shaper_pre_del_node()
1036 leaves = kcalloc(shaper->leaves, sizeof(struct net_shaper), in net_shaper_pre_del_node()
1043 if (net_shaper_handle_cmp(&cur->parent, &shaper->handle)) in net_shaper_pre_del_node()
1046 if (WARN_ON_ONCE(leaves_count == shaper->leaves)) { in net_shaper_pre_del_node()
1054 /* When re-linking to the netdev shaper, avoid the eventual, implicit, in net_shaper_pre_del_node()
1072 struct net_shaper *shaper; in net_shaper_nl_delete_doit() local
1092 shaper = net_shaper_lookup(binding, &handle); in net_shaper_nl_delete_doit()
1093 if (!shaper) { in net_shaper_nl_delete_doit()
1099 ret = net_shaper_pre_del_node(binding, shaper, info->extack); in net_shaper_nl_delete_doit()
1104 ret = __net_shaper_delete(binding, shaper, info->extack); in net_shaper_nl_delete_doit()
1406 struct net_shaper *shaper; in net_shaper_set_real_num_tx_queues() local
1411 shaper = net_shaper_lookup(&binding, &handle); in net_shaper_set_real_num_tx_queues()
1412 if (!shaper) in net_shaper_set_real_num_tx_queues()
1415 /* Don't touch the H/W for the queue shaper, the drivers already in net_shaper_set_real_num_tx_queues()
1418 parent_handle = shaper->parent; in net_shaper_set_real_num_tx_queues()
1421 kfree_rcu(shaper, rcu); in net_shaper_set_real_num_tx_queues()
1427 shaper = net_shaper_lookup(&binding, &parent_handle); in net_shaper_set_real_num_tx_queues()
1428 if (shaper && !--shaper->leaves) in net_shaper_set_real_num_tx_queues()
1429 __net_shaper_delete(&binding, shaper, NULL); in net_shaper_set_real_num_tx_queues()