Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2
  3#ifndef _NET_SHAPER_H_
  4#define _NET_SHAPER_H_
  5
  6#include <linux/types.h>
  7
  8#include <uapi/linux/net_shaper.h>
  9
 10struct net_device;
 11struct devlink;
 12struct netlink_ext_ack;
 13
 14enum net_shaper_binding_type {
 15	NET_SHAPER_BINDING_TYPE_NETDEV,
 16	/* NET_SHAPER_BINDING_TYPE_DEVLINK_PORT */
 17};
 18
 19struct net_shaper_binding {
 20	enum net_shaper_binding_type type;
 21	union {
 22		struct net_device *netdev;
 23		struct devlink *devlink;
 24	};
 25};
 26
 27struct net_shaper_handle {
 28	enum net_shaper_scope scope;
 29	u32 id;
 30};
 31
 32/**
 33 * struct net_shaper - represents a shaping node on the NIC H/W
 34 * zeroed field are considered not set.
 35 * @parent: Unique identifier for the shaper parent, usually implied
 36 * @handle: Unique identifier for this shaper
 37 * @metric: Specify if the rate limits refers to PPS or BPS
 38 * @bw_min: Minimum guaranteed rate for this shaper
 39 * @bw_max: Maximum peak rate allowed for this shaper
 40 * @burst: Maximum burst for the peek rate of this shaper
 41 * @priority: Scheduling priority for this shaper
 42 * @weight: Scheduling weight for this shaper
 43 */
 44struct net_shaper {
 45	struct net_shaper_handle parent;
 46	struct net_shaper_handle handle;
 47	enum net_shaper_metric metric;
 48	u64 bw_min;
 49	u64 bw_max;
 50	u64 burst;
 51	u32 priority;
 52	u32 weight;
 53
 54	/* private: */
 55	u32 leaves; /* accounted only for NODE scope */
 56	struct rcu_head rcu;
 57};
 58
 59/**
 60 * struct net_shaper_ops - Operations on device H/W shapers
 61 *
 62 * The operations applies to either net_device and devlink objects.
 63 * The initial shaping configuration at device initialization is empty:
 64 * does not constraint the rate in any way.
 65 * The network core keeps track of the applied user-configuration in
 66 * the net_device or devlink structure.
 67 * The operations are serialized via a per device lock.
 68 *
 69 * Device not supporting any kind of nesting should not provide the
 70 * group operation.
 71 *
 72 * Each shaper is uniquely identified within the device with a 'handle'
 73 * comprising the shaper scope and a scope-specific id.
 74 */
 75struct net_shaper_ops {
 76	/**
 77	 * @group: create the specified shapers scheduling group
 78	 *
 79	 * Nest the @leaves shapers identified under the * @node shaper.
 80	 * All the shapers belong to the device specified by @binding.
 81	 * The @leaves arrays size is specified by @leaves_count.
 82	 * Create either the @leaves and the @node shaper; or if they already
 83	 * exists, links them together in the desired way.
 84	 * @leaves scope must be NET_SHAPER_SCOPE_QUEUE.
 85	 */
 86	int (*group)(struct net_shaper_binding *binding, int leaves_count,
 87		     const struct net_shaper *leaves,
 88		     const struct net_shaper *node,
 89		     struct netlink_ext_ack *extack);
 90
 91	/**
 92	 * @set: Updates the specified shaper
 93	 *
 94	 * Updates or creates the @shaper on the device specified by @binding.
 95	 */
 96	int (*set)(struct net_shaper_binding *binding,
 97		   const struct net_shaper *shaper,
 98		   struct netlink_ext_ack *extack);
 99
100	/**
101	 * @delete: Removes the specified shaper
102	 *
103	 * Removes the shaper configuration as identified by the given @handle
104	 * on the device specified by @binding, restoring the default behavior.
105	 */
106	int (*delete)(struct net_shaper_binding *binding,
107		      const struct net_shaper_handle *handle,
108		      struct netlink_ext_ack *extack);
109
110	/**
111	 * @capabilities: get the shaper features supported by the device
112	 *
113	 * Fills the bitmask @cap with the supported capabilities for the
114	 * specified @scope and device specified by @binding.
115	 */
116	void (*capabilities)(struct net_shaper_binding *binding,
117			     enum net_shaper_scope scope, unsigned long *cap);
118};
119
120#endif