diff --git a/src/libnm-core-impl/nm-setting-tc-config.c b/src/libnm-core-impl/nm-setting-tc-config.c
index f44c89cb09..a23371a10b 100644
--- a/src/libnm-core-impl/nm-setting-tc-config.c
+++ b/src/libnm-core-impl/nm-setting-tc-config.c
@@ -1820,6 +1820,282 @@ nm_setting_tc_config_class_init(NMSettingTCConfigClass *klass)
* If the #NMSettingTCConfig setting is not present, NetworkManager
* doesn't touch the qdiscs present on the interface.
**/
+ /* ---nmcli---
+ * property: qdiscs
+ * format: GPtrArray(NMTCQdisc)
+ * description-docbook:
+ *
+ * Array of TC queueing disciplines. qdisc is a basic block in the
+ * Linux traffic control subsystem
+ *
+ *
+ * Each qdisc can be specified by the following attributes:
+ *
+ *
+ *
+ * handle HANDLE
+ *
+ *
+ * specifies the qdisc handle. A qdisc, which potentially can have children, gets
+ * assigned a major number, called a 'handle', leaving the minor number namespace
+ * available for classes. The handle is expressed as '10:'. It is customary to
+ * explicitly assign a handle to qdiscs expected to have children.
+ *
+ *
+ *
+ *
+ * parent HANDLE
+ *
+ *
+ * specifies the handle of the parent qdisc the current qdisc must be
+ * attached to.
+ *
+ *
+ *
+ *
+ * root
+ *
+ *
+ * specifies that the qdisc is attached to the root of device.
+ *
+ *
+ *
+ *
+ * KIND
+ *
+ *
+ * this is the qdisc kind. NetworkManager currently supports the
+ * following kinds: fq_codel, sfq, tbf. Each qdisc kind has a
+ * different set of parameters, described below. There are also some
+ * kinds like pfifo, pfifo_fast, prio supported by NetworkManager
+ * but their parameters are not supported by NetworkManager.
+ *
+ *
+ *
+ *
+ *
+ * Parameters for 'fq_codel':
+ *
+ *
+ *
+ * limit U32
+ *
+ *
+ * the hard limit on the real queue size. When this limit is
+ * reached, incoming packets are dropped. Default is 10240 packets.
+ *
+ *
+ *
+ *
+ * memory_limit U32
+ *
+ *
+ * sets a limit on the total number of bytes that can be queued in
+ * this FQ-CoDel instance. The lower of the packet limit of the
+ * limit parameter and the memory limit will be enforced. Default is
+ * 32 MB.
+ *
+ *
+ *
+ *
+ * flows U32
+ *
+ *
+ * the number of flows into which the incoming packets are
+ * classified. Due to the stochastic nature of hashing, multiple
+ * flows may end up being hashed into the same slot. Newer flows
+ * have priority over older ones. This parameter can be set only at
+ * load time since memory has to be allocated for the hash table.
+ * Default value is 1024.
+ *
+ *
+ *
+ *
+ * target U32
+ *
+ *
+ * the acceptable minimum standing/persistent queue delay. This minimum
+ * delay is identified by tracking the local minimum queue delay that packets
+ * experience. The unit of measurement is microsecond(us). Default value is 5ms.
+ *
+ *
+ *
+ *
+ * interval U32
+ *
+ *
+ * used to ensure that the measured minimum delay does not become too stale.
+ * The minimum delay must be experienced in the last epoch of length .B
+ * interval. It should be set on the order of the worst-case RTT
+ * through the bottleneck to give endpoints sufficient time to
+ * react. Default value is 100ms.
+ *
+ *
+ *
+ *
+ * quantum U32
+ *
+ *
+ * the number of bytes used as 'deficit' in the fair queuing
+ * algorithm. Default is set to 1514 bytes which corresponds to the
+ * Ethernet MTU plus the hardware header length of 14 bytes.
+ *
+ *
+ *
+ *
+ * ecn BOOL
+ *
+ *
+ * can be used to mark packets instead of dropping them. ecn is turned
+ * on by default.
+ *
+ *
+ *
+ *
+ * ce_threshold U32
+ *
+ *
+ * sets a threshold above which all packets are marked with ECN
+ * Congestion Experienced. This is useful for DCTCP-style congestion
+ * control algorithms that require marking at very shallow queueing
+ * thresholds.
+ *
+ *
+ *
+ *
+ *
+ * Parameters for 'sfq':
+ *
+ *
+ *
+ * divisor U32
+ *
+ *
+ * can be used to set a different hash table size, available
+ * from kernel 2.6.39 onwards. The specified divisor must be
+ * a power of two and cannot be larger than 65536. Default
+ * value: 1024.
+ *
+ *
+ *
+ *
+ * limit U32
+ *
+ *
+ * Upper limit of the SFQ. Can be used to reduce the default
+ * length of 127 packets.
+ *
+ *
+ *
+ *
+ * depth U32
+ *
+ *
+ * Limit of packets per flow. Default to
+ * 127 and can be lowered.
+ *
+ *
+ *
+ *
+ * perturb_period U32
+ *
+ *
+ * Interval in seconds for queue algorithm perturbation.
+ * Defaults to 0, which means that no perturbation occurs. Do
+ * not set too low for each perturbation may cause some
+ * packet reordering or losses. Advised value: 60 This value
+ * has no effect when external flow classification is used.
+ * Its better to increase divisor value to lower risk of hash
+ * collisions.
+ *
+ *
+ *
+ *
+ * quantum U32
+ *
+ *
+ * Amount of bytes a flow is allowed to dequeue during a
+ * round of the round robin process. Defaults to the MTU of
+ * the interface which is also the advised value and the
+ * minimum value.
+ *
+ *
+ *
+ *
+ * flows U32
+ *
+ *
+ * Default value is 127.
+ *
+ *
+ *
+ *
+ *
+ * Parameters for 'tbf':
+ *
+ *
+ *
+ * rate U64
+ *
+ *
+ * Bandwidth or rate. These parameters accept a floating
+ * point number, possibly followed by either a unit (both SI
+ * and IEC units supported), or a float followed by a percent
+ * character to specify the rate as a percentage of the
+ * device's speed.
+ *
+ *
+ *
+ *
+ * burst U32
+ *
+ *
+ * Also known as buffer or maxburst. Size of the bucket, in
+ * bytes. This is the maximum amount of bytes that tokens can
+ * be available for instantaneously. In general, larger
+ * shaping rates require a larger buffer. For 10mbit/s on
+ * Intel, you need at least 10kbyte buffer if you want to
+ * reach your configured rate!
+ *
+ *
+ * If your buffer is too small, packets may be dropped
+ * because more tokens arrive per timer tick than fit in your
+ * bucket. The minimum buffer size can be calculated by
+ * dividing the rate by HZ.
+ *
+ *
+ * Token usage calculations are performed using a table which
+ * by default has a resolution of 8 packets. This resolution
+ * can be changed by specifying the cell size with the burst.
+ * For example, to specify a 6000 byte buffer with a 16 byte
+ * cell size, set a burst of 6000/16. You will probably never
+ * have to set this. Must be an integral power of 2.
+ *
+ *
+ *
+ *
+ * limit U32
+ *
+ *
+ * Limit is the number of bytes that can be queued waiting
+ * for tokens to become available.
+ *
+ *
+ *
+ *
+ * latency U32
+ *
+ *
+ * specifies the maximum amount of time a packet can
+ * sit in the TBF. The latency calculation takes into account
+ * the size of the bucket, the rate and possibly the peakrate
+ * (if set). The latency and limit are mutually exclusive.
+ *
+ *
+ *
+ *
+ * ---end---
+ **/
/* ---ifcfg-rh---
* property: qdiscs
* variable: QDISC1(+), QDISC2(+), ..., TC_COMMIT(+)
@@ -1854,6 +2130,109 @@ nm_setting_tc_config_class_init(NMSettingTCConfigClass *klass)
* If the #NMSettingTCConfig setting is not present, NetworkManager
* doesn't touch the filters present on the interface.
**/
+ /* ---nmcli---
+ * property: tfilters
+ * format: GPtrArray(NMTCTfilter)
+ * description-docbook:
+ *
+ * Array of TC traffic filters. Traffic control can manage the packet content during
+ * classification by using filters.
+ *
+ *
+ * Each tfilters can be specified by the following attributes:
+ *
+ *
+ *
+ * handle HANDLE
+ *
+ *
+ * specifies the tfilters handle. A filter is used by a classful qdisc to determine in which class
+ * a packet will be enqueued. It is important to notice that filters reside within qdiscs. Therefore,
+ * see qdiscs handle for detailed information.
+ *
+ *
+ *
+ *
+ * parent HANDLE
+ *
+ *
+ * specifies the handle of the parent qdisc the current qdisc must be
+ * attached to.
+ *
+ *
+ *
+ *
+ * root
+ *
+ *
+ * specifies that the qdisc is attached to the root of device.
+ *
+ *
+ *
+ *
+ * KIND
+ *
+ *
+ * this is the tfilters kind. NetworkManager currently supports
+ * following kinds: mirred, simple. Each filter kind has a
+ * different set of actions, described below. There are also some
+ * other kinds like matchall, basic, u32 supported by NetworkManager.
+ *
+ *
+ *
+ *
+ *
+ * Actions for 'mirred':
+ *
+ *
+ *
+ * egress bool
+ *
+ *
+ * Define whether the packet should exit from the interface.
+ *
+ *
+ *
+ *
+ * ingress bool
+ *
+ *
+ * Define whether the packet should come into the interface.
+ *
+ *
+ *
+ *
+ * mirror bool
+ *
+ *
+ * Define whether the packet should be copied to the destination space.
+ *
+ *
+ *
+ *
+ * redirect bool
+ *
+ *
+ * Define whether the packet should be moved to the destination space.
+ *
+ *
+ *
+ *
+ *
+ * Action for 'simple':
+ *
+ *
+ *
+ * sdata char[32]
+ *
+ *
+ * The actual string to print.
+ *
+ *
+ *
+ *
+ * ---end---
+ **/
/* ---ifcfg-rh---
* property: qdiscs
* variable: FILTER1(+), FILTER2(+), ..., TC_COMMIT(+)