# SPDX-License-Identifier: GPL-2.0-only
#
# Traffic control configuration.
#

menuconfig NET_SCHED
	bool "QoS and/or fair queueing"
	select NET_SCH_FIFO
	help
	  When the kernel has several packets to send out over a network
	  device, it has to decide which ones to send first, which ones to
	  delay, and which ones to drop. This is the job of the queueing
	  disciplines, several different algorithms for how to do this
	  "fairly" have been proposed.

	  If you say N here, you will get the standard packet scheduler, which
	  is a FIFO (first come, first served). If you say Y here, you will be
	  able to choose from among several alternative algorithms which can
	  then be attached to different network devices. This is useful for
	  example if some of your network devices are real time devices that
	  need a certain minimum data flow rate, or if you need to limit the
	  maximum data flow rate for traffic which matches specified criteria.
	  This code is considered to be experimental.

	  To administer these schedulers, you'll need the user-level utilities
	  from the package iproute2+tc at
	  <https://www.kernel.org/pub/linux/utils/net/iproute2/>.  That package
	  also contains some documentation; for more, check out
	  <http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2>.

	  This Quality of Service (QoS) support will enable you to use
	  Differentiated Services (diffserv) and Resource Reservation Protocol
	  (RSVP) on your Linux router if you also say Y to the corresponding
	  classifiers below.  Documentation and software is at
	  <http://diffserv.sourceforge.net/>.

	  If you say Y here and to "/proc file system" below, you will be able
	  to read status information about packet schedulers from the file
	  /proc/net/psched.

	  The available schedulers are listed in the following questions; you
	  can say Y to as many as you like. If unsure, say N now.

if NET_SCHED

comment "Queueing/Scheduling"

config NET_SCH_HTB
	tristate "Hierarchical Token Bucket (HTB)"
	help
	  Say Y here if you want to use the Hierarchical Token Buckets (HTB)
	  packet scheduling algorithm. See
	  <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
	  in-depth articles.

	  HTB is very similar to CBQ regarding its goals however is has
	  different properties and different algorithm.

	  To compile this code as a module, choose M here: the
	  module will be called sch_htb.

config NET_SCH_HFSC
	tristate "Hierarchical Fair Service Curve (HFSC)"
	help
	  Say Y here if you want to use the Hierarchical Fair Service Curve
	  (HFSC) packet scheduling algorithm.

	  To compile this code as a module, choose M here: the
	  module will be called sch_hfsc.

config NET_SCH_PRIO
	tristate "Multi Band Priority Queueing (PRIO)"
	help
	  Say Y here if you want to use an n-band priority queue packet
	  scheduler.

	  To compile this code as a module, choose M here: the
	  module will be called sch_prio.

config NET_SCH_MULTIQ
	tristate "Hardware Multiqueue-aware Multi Band Queuing (MULTIQ)"
	help
	  Say Y here if you want to use an n-band queue packet scheduler
	  to support devices that have multiple hardware transmit queues.

	  To compile this code as a module, choose M here: the
	  module will be called sch_multiq.

config NET_SCH_RED
	tristate "Random Early Detection (RED)"
	help
	  Say Y here if you want to use the Random Early Detection (RED)
	  packet scheduling algorithm.

	  See the top of <file:net/sched/sch_red.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_red.

config NET_SCH_SFB
	tristate "Stochastic Fair Blue (SFB)"
	help
	  Say Y here if you want to use the Stochastic Fair Blue (SFB)
	  packet scheduling algorithm.

	  See the top of <file:net/sched/sch_sfb.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_sfb.

config NET_SCH_SFQ
	tristate "Stochastic Fairness Queueing (SFQ)"
	help
	  Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
	  packet scheduling algorithm.

	  See the top of <file:net/sched/sch_sfq.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_sfq.

config NET_SCH_TEQL
	tristate "True Link Equalizer (TEQL)"
	help
	  Say Y here if you want to use the True Link Equalizer (TLE) packet
	  scheduling algorithm. This queueing discipline allows the combination
	  of several physical devices into one virtual device.

	  See the top of <file:net/sched/sch_teql.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_teql.

config NET_SCH_TBF
	tristate "Token Bucket Filter (TBF)"
	help
	  Say Y here if you want to use the Token Bucket Filter (TBF) packet
	  scheduling algorithm.

	  See the top of <file:net/sched/sch_tbf.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_tbf.

config NET_SCH_CBS
	tristate "Credit Based Shaper (CBS)"
	help
	  Say Y here if you want to use the Credit Based Shaper (CBS) packet
	  scheduling algorithm.

	  See the top of <file:net/sched/sch_cbs.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_cbs.

config NET_SCH_ETF
	tristate "Earliest TxTime First (ETF)"
	help
	  Say Y here if you want to use the Earliest TxTime First (ETF) packet
	  scheduling algorithm.

	  See the top of <file:net/sched/sch_etf.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_etf.

config NET_SCH_MQPRIO_LIB
	tristate
	help
	  Common library for manipulating mqprio queue configurations.

config NET_SCH_TAPRIO
	tristate "Time Aware Priority (taprio) Scheduler"
	select NET_SCH_MQPRIO_LIB
	help
	  Say Y here if you want to use the Time Aware Priority (taprio) packet
	  scheduling algorithm.

	  See the top of <file:net/sched/sch_taprio.c> for more details.

	  To compile this code as a module, choose M here: the
	  module will be called sch_taprio.

config NET_SCH_GRED
	tristate "Generic Random Early Detection (GRED)"
	help
	  Say Y here if you want to use the Generic Random Early Detection
	  (GRED) packet scheduling algorithm for some of your network devices
	  (see the top of <file:net/sched/sch_red.c> for details and
	  references about the algorithm).

	  To compile this code as a module, choose M here: the
	  module will be called sch_gred.

config NET_SCH_NETEM
	tristate "Network emulator (NETEM)"
	help
	  Say Y if you want to emulate network delay, loss, and packet
	  re-ordering. This is often useful to simulate networks when
	  testing applications or protocols.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_netem.

	  If unsure, say N.

config NET_SCH_DRR
	tristate "Deficit Round Robin scheduler (DRR)"
	help
	  Say Y here if you want to use the Deficit Round Robin (DRR) packet
	  scheduling algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_drr.

	  If unsure, say N.

config NET_SCH_MQPRIO
	tristate "Multi-queue priority scheduler (MQPRIO)"
	select NET_SCH_MQPRIO_LIB
	help
	  Say Y here if you want to use the Multi-queue Priority scheduler.
	  This scheduler allows QOS to be offloaded on NICs that have support
	  for offloading QOS schedulers.

	  To compile this driver as a module, choose M here: the module will
	  be called sch_mqprio.

	  If unsure, say N.

config NET_SCH_SKBPRIO
	tristate "SKB priority queue scheduler (SKBPRIO)"
	help
	  Say Y here if you want to use the SKB priority queue
	  scheduler. This schedules packets according to skb->priority,
	  which is useful for request packets in DoS mitigation systems such
	  as Gatekeeper.

	  To compile this driver as a module, choose M here: the module will
	  be called sch_skbprio.

	  If unsure, say N.

config NET_SCH_CHOKE
	tristate "CHOose and Keep responsive flow scheduler (CHOKE)"
	help
	  Say Y here if you want to use the CHOKe packet scheduler (CHOose
	  and Keep for responsive flows, CHOose and Kill for unresponsive
	  flows). This is a variation of RED which tries to penalize flows
	  that monopolize the queue.

	  To compile this code as a module, choose M here: the
	  module will be called sch_choke.

config NET_SCH_QFQ
	tristate "Quick Fair Queueing scheduler (QFQ)"
	help
	  Say Y here if you want to use the Quick Fair Queueing Scheduler (QFQ)
	  packet scheduling algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_qfq.

	  If unsure, say N.

config NET_SCH_CODEL
	tristate "Controlled Delay AQM (CODEL)"
	help
	  Say Y here if you want to use the Controlled Delay (CODEL)
	  packet scheduling algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_codel.

	  If unsure, say N.

config NET_SCH_FQ_CODEL
	tristate "Fair Queue Controlled Delay AQM (FQ_CODEL)"
	help
	  Say Y here if you want to use the FQ Controlled Delay (FQ_CODEL)
	  packet scheduling algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_fq_codel.

	  If unsure, say N.

config NET_SCH_CAKE
	tristate "Common Applications Kept Enhanced (CAKE)"
	help
	  Say Y here if you want to use the Common Applications Kept Enhanced
	  (CAKE) queue management algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_cake.

	  If unsure, say N.

config NET_SCH_FQ
	tristate "Fair Queue"
	help
	  Say Y here if you want to use the FQ packet scheduling algorithm.

	  FQ does flow separation, and is able to respect pacing requirements
	  set by TCP stack into sk->sk_pacing_rate (for locally generated
	  traffic)

	  To compile this driver as a module, choose M here: the module
	  will be called sch_fq.

	  If unsure, say N.

config NET_SCH_HHF
	tristate "Heavy-Hitter Filter (HHF)"
	help
	  Say Y here if you want to use the Heavy-Hitter Filter (HHF)
	  packet scheduling algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_hhf.

config NET_SCH_PIE
	tristate "Proportional Integral controller Enhanced (PIE) scheduler"
	help
	  Say Y here if you want to use the Proportional Integral controller
	  Enhanced scheduler packet scheduling algorithm.
	  For more information, please see https://tools.ietf.org/html/rfc8033

	  To compile this driver as a module, choose M here: the module
	  will be called sch_pie.

	  If unsure, say N.

config NET_SCH_FQ_PIE
	depends on NET_SCH_PIE
	tristate "Flow Queue Proportional Integral controller Enhanced (FQ-PIE)"
	help
	  Say Y here if you want to use the Flow Queue Proportional Integral
	  controller Enhanced (FQ-PIE) packet scheduling algorithm.
	  For more information, please see https://tools.ietf.org/html/rfc8033

	  To compile this driver as a module, choose M here: the module
	  will be called sch_fq_pie.

	  If unsure, say N.

config NET_SCH_INGRESS
	tristate "Ingress/classifier-action Qdisc"
	depends on NET_CLS_ACT
	select NET_INGRESS
	select NET_EGRESS
	help
	  Say Y here if you want to use classifiers for incoming and/or outgoing
	  packets. This qdisc doesn't do anything else besides running classifiers,
	  which can also have actions attached to them. In case of outgoing packets,
	  classifiers that this qdisc holds are executed in the transmit path
	  before real enqueuing to an egress qdisc happens.

	  If unsure, say Y.

	  To compile this code as a module, choose M here: the module will be
	  called sch_ingress with alias of sch_clsact.

config NET_SCH_PLUG
	tristate "Plug network traffic until release (PLUG)"
	help

	  This queuing discipline allows userspace to plug/unplug a network
	  output queue, using the netlink interface.  When it receives an
	  enqueue command it inserts a plug into the outbound queue that
	  causes following packets to enqueue until a dequeue command arrives
	  over netlink, causing the plug to be removed and resuming the normal
	  packet flow.

	  This module also provides a generic "network output buffering"
	  functionality (aka output commit), wherein upon arrival of a dequeue
	  command, only packets up to the first plug are released for delivery.
	  The Remus HA project uses this module to enable speculative execution
	  of virtual machines by allowing the generated network output to be rolled
	  back if needed.

	  For more information, please refer to <http://wiki.xenproject.org/wiki/Remus>

	  Say Y here if you are using this kernel for Xen dom0 and
	  want to protect Xen guests with Remus.

	  To compile this code as a module, choose M here: the
	  module will be called sch_plug.

config NET_SCH_ETS
	tristate "Enhanced transmission selection scheduler (ETS)"
	help
          The Enhanced Transmission Selection scheduler is a classful
          queuing discipline that merges functionality of PRIO and DRR
          qdiscs in one scheduler. ETS makes it easy to configure a set of
          strict and bandwidth-sharing bands to implement the transmission
          selection described in 802.1Qaz.

	  Say Y here if you want to use the ETS packet scheduling
	  algorithm.

	  To compile this driver as a module, choose M here: the module
	  will be called sch_ets.

	  If unsure, say N.

menuconfig NET_SCH_DEFAULT
	bool "Allow override default queue discipline"
	help
	  Support for selection of default queuing discipline.

	  Nearly all users can safely say no here, and the default
	  of pfifo_fast will be used. Many distributions already set
	  the default value via /proc/sys/net/core/default_qdisc.

	  If unsure, say N.

if NET_SCH_DEFAULT

choice
	prompt "Default queuing discipline"
	default DEFAULT_PFIFO_FAST
	help
	  Select the queueing discipline that will be used by default
	  for all network devices.

	config DEFAULT_FQ
		bool "Fair Queue" if NET_SCH_FQ

	config DEFAULT_CODEL
		bool "Controlled Delay" if NET_SCH_CODEL

	config DEFAULT_FQ_CODEL
		bool "Fair Queue Controlled Delay" if NET_SCH_FQ_CODEL

	config DEFAULT_FQ_PIE
		bool "Flow Queue Proportional Integral controller Enhanced" if NET_SCH_FQ_PIE

	config DEFAULT_SFQ
		bool "Stochastic Fair Queue" if NET_SCH_SFQ

	config DEFAULT_PFIFO_FAST
		bool "Priority FIFO Fast"
endchoice

config DEFAULT_NET_SCH
	string
	default "pfifo_fast" if DEFAULT_PFIFO_FAST
	default "fq" if DEFAULT_FQ
	default "fq_codel" if DEFAULT_FQ_CODEL
	default "fq_pie" if DEFAULT_FQ_PIE
	default "sfq" if DEFAULT_SFQ
	default "pfifo_fast"
endif

comment "Classification"

config NET_CLS
	bool

config NET_CLS_BASIC
	tristate "Elementary classification (BASIC)"
	select NET_CLS
	help
	  Say Y here if you want to be able to classify packets using
	  only extended matches and actions.

	  To compile this code as a module, choose M here: the
	  module will be called cls_basic.

config NET_CLS_ROUTE4
	tristate "Routing decision (ROUTE)"
	depends on INET
	select IP_ROUTE_CLASSID
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets
	  according to the route table entry they matched.

	  To compile this code as a module, choose M here: the
	  module will be called cls_route.

config NET_CLS_FW
	tristate "Netfilter mark (FW)"
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets
	  according to netfilter/firewall marks.

	  To compile this code as a module, choose M here: the
	  module will be called cls_fw.

config NET_CLS_U32
	tristate "Universal 32bit comparisons w/ hashing (U32)"
	select NET_CLS
	help
	  Say Y here to be able to classify packets using a universal
	  32bit pieces based comparison scheme.

	  To compile this code as a module, choose M here: the
	  module will be called cls_u32.

config CLS_U32_PERF
	bool "Performance counters support"
	depends on NET_CLS_U32
	help
	  Say Y here to make u32 gather additional statistics useful for
	  fine tuning u32 classifiers.

config CLS_U32_MARK
	bool "Netfilter marks support"
	depends on NET_CLS_U32
	help
	  Say Y here to be able to use netfilter marks as u32 key.

config NET_CLS_FLOW
	tristate "Flow classifier"
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets based on
	  a configurable combination of packet keys. This is mostly useful
	  in combination with SFQ.

	  To compile this code as a module, choose M here: the
	  module will be called cls_flow.

config NET_CLS_CGROUP
	tristate "Control Group Classifier"
	select NET_CLS
	select CGROUP_NET_CLASSID
	depends on CGROUPS
	help
	  Say Y here if you want to classify packets based on the control
	  cgroup of their process.

	  To compile this code as a module, choose M here: the
	  module will be called cls_cgroup.

config NET_CLS_BPF
	tristate "BPF-based classifier"
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets based on
	  programmable BPF (JIT'ed) filters as an alternative to ematches.

	  To compile this code as a module, choose M here: the module will
	  be called cls_bpf.

config NET_CLS_FLOWER
	tristate "Flower classifier"
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets based on
	  a configurable combination of packet keys and masks.

	  To compile this code as a module, choose M here: the module will
	  be called cls_flower.

config NET_CLS_MATCHALL
	tristate "Match-all classifier"
	select NET_CLS
	help
	  If you say Y here, you will be able to classify packets based on
	  nothing. Every packet will match.

	  To compile this code as a module, choose M here: the module will
	  be called cls_matchall.

config NET_EMATCH
	bool "Extended Matches"
	select NET_CLS
	help
	  Say Y here if you want to use extended matches on top of classifiers
	  and select the extended matches below.

	  Extended matches are small classification helpers not worth writing
	  a separate classifier for.

	  A recent version of the iproute2 package is required to use
	  extended matches.

config NET_EMATCH_STACK
	int "Stack size"
	depends on NET_EMATCH
	default "32"
	help
	  Size of the local stack variable used while evaluating the tree of
	  ematches. Limits the depth of the tree, i.e. the number of
	  encapsulated precedences. Every level requires 4 bytes of additional
	  stack space.

config NET_EMATCH_CMP
	tristate "Simple packet data comparison"
	depends on NET_EMATCH
	help
	  Say Y here if you want to be able to classify packets based on
	  simple packet data comparisons for 8, 16, and 32bit values.

	  To compile this code as a module, choose M here: the
	  module will be called em_cmp.

config NET_EMATCH_NBYTE
	tristate "Multi byte comparison"
	depends on NET_EMATCH
	help
	  Say Y here if you want to be able to classify packets based on
	  multiple byte comparisons mainly useful for IPv6 address comparisons.

	  To compile this code as a module, choose M here: the
	  module will be called em_nbyte.

config NET_EMATCH_U32
	tristate "U32 key"
	depends on NET_EMATCH
	help
	  Say Y here if you want to be able to classify packets using
	  the famous u32 key in combination with logic relations.

	  To compile this code as a module, choose M here: the
	  module will be called em_u32.

config NET_EMATCH_META
	tristate "Metadata"
	depends on NET_EMATCH
	help
	  Say Y here if you want to be able to classify packets based on
	  metadata such as load average, netfilter attributes, socket
	  attributes and routing decisions.

	  To compile this code as a module, choose M here: the
	  module will be called em_meta.

config NET_EMATCH_TEXT
	tristate "Textsearch"
	depends on NET_EMATCH
	select TEXTSEARCH
	select TEXTSEARCH_KMP
	select TEXTSEARCH_BM
	select TEXTSEARCH_FSM
	help
	  Say Y here if you want to be able to classify packets based on
	  textsearch comparisons.

	  To compile this code as a module, choose M here: the
	  module will be called em_text.

config NET_EMATCH_CANID
	tristate "CAN Identifier"
	depends on NET_EMATCH && (CAN=y || CAN=m)
	help
	  Say Y here if you want to be able to classify CAN frames based
	  on CAN Identifier.

	  To compile this code as a module, choose M here: the
	  module will be called em_canid.

config NET_EMATCH_IPSET
	tristate "IPset"
	depends on NET_EMATCH && IP_SET
	help
	  Say Y here if you want to be able to classify packets based on
	  ipset membership.

	  To compile this code as a module, choose M here: the
	  module will be called em_ipset.

config NET_EMATCH_IPT
	tristate "IPtables Matches"
	depends on NET_EMATCH && NETFILTER && NETFILTER_XTABLES
	help
	  Say Y here to be able to classify packets based on iptables
	  matches.
	  Current supported match is "policy" which allows packet classification
	  based on IPsec policy that was used during decapsulation

	  To compile this code as a module, choose M here: the
	  module will be called em_ipt.

config NET_CLS_ACT
	bool "Actions"
	select NET_CLS
	help
	  Say Y here if you want to use traffic control actions. Actions
	  get attached to classifiers and are invoked after a successful
	  classification. They are used to overwrite the classification
	  result, instantly drop or redirect packets, etc.

	  A recent version of the iproute2 package is required to use
	  extended matches.

config NET_ACT_POLICE
	tristate "Traffic Policing"
	depends on NET_CLS_ACT
	help
	  Say Y here if you want to do traffic policing, i.e. strict
	  bandwidth limiting. This action replaces the existing policing
	  module.

	  To compile this code as a module, choose M here: the
	  module will be called act_police.

config NET_ACT_GACT
	tristate "Generic actions"
	depends on NET_CLS_ACT
	help
	  Say Y here to take generic actions such as dropping and
	  accepting packets.

	  To compile this code as a module, choose M here: the
	  module will be called act_gact.

config GACT_PROB
	bool "Probability support"
	depends on NET_ACT_GACT
	help
	  Say Y here to use the generic action randomly or deterministically.

config NET_ACT_MIRRED
	tristate "Redirecting and Mirroring"
	depends on NET_CLS_ACT
	help
	  Say Y here to allow packets to be mirrored or redirected to
	  other devices.

	  To compile this code as a module, choose M here: the
	  module will be called act_mirred.

config NET_ACT_SAMPLE
	tristate "Traffic Sampling"
	depends on NET_CLS_ACT
	select PSAMPLE
	help
	  Say Y here to allow packet sampling tc action. The packet sample
	  action consists of statistically choosing packets and sampling
	  them using the psample module.

	  To compile this code as a module, choose M here: the
	  module will be called act_sample.

config NET_ACT_IPT
	tristate "IPtables targets"
	depends on NET_CLS_ACT && NETFILTER && NETFILTER_XTABLES
	help
	  Say Y here to be able to invoke iptables targets after successful
	  classification.

	  To compile this code as a module, choose M here: the
	  module will be called act_ipt.

config NET_ACT_NAT
	tristate "Stateless NAT"
	depends on NET_CLS_ACT
	help
	  Say Y here to do stateless NAT on IPv4 packets.  You should use
	  netfilter for NAT unless you know what you are doing.

	  To compile this code as a module, choose M here: the
	  module will be called act_nat.

config NET_ACT_PEDIT
	tristate "Packet Editing"
	depends on NET_CLS_ACT
	help
	  Say Y here if you want to mangle the content of packets.

	  To compile this code as a module, choose M here: the
	  module will be called act_pedit.

config NET_ACT_SIMP
	tristate "Simple Example (Debug)"
	depends on NET_CLS_ACT
	help
	  Say Y here to add a simple action for demonstration purposes.
	  It is meant as an example and for debugging purposes. It will
	  print a configured policy string followed by the packet count
	  to the console for every packet that passes by.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_simple.

config NET_ACT_SKBEDIT
	tristate "SKB Editing"
	depends on NET_CLS_ACT
	help
	  Say Y here to change skb priority or queue_mapping settings.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_skbedit.

config NET_ACT_CSUM
	tristate "Checksum Updating"
	depends on NET_CLS_ACT && INET
	select LIBCRC32C
	help
	  Say Y here to update some common checksum after some direct
	  packet alterations.

	  To compile this code as a module, choose M here: the
	  module will be called act_csum.

config NET_ACT_MPLS
	tristate "MPLS manipulation"
	depends on NET_CLS_ACT
	help
	  Say Y here to push or pop MPLS headers.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_mpls.

config NET_ACT_VLAN
	tristate "Vlan manipulation"
	depends on NET_CLS_ACT
	help
	  Say Y here to push or pop vlan headers.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_vlan.

config NET_ACT_BPF
	tristate "BPF based action"
	depends on NET_CLS_ACT
	help
	  Say Y here to execute BPF code on packets. The BPF code will decide
	  if the packet should be dropped or not.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_bpf.

config NET_ACT_CONNMARK
	tristate "Netfilter Connection Mark Retriever"
	depends on NET_CLS_ACT && NETFILTER
	depends on NF_CONNTRACK && NF_CONNTRACK_MARK
	help
	  Say Y here to allow retrieving of conn mark

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_connmark.

config NET_ACT_CTINFO
	tristate "Netfilter Connection Mark Actions"
	depends on NET_CLS_ACT && NETFILTER
	depends on NF_CONNTRACK && NF_CONNTRACK_MARK
	help
	  Say Y here to allow transfer of a connmark stored information.
	  Current actions transfer connmark stored DSCP into
	  ipv4/v6 diffserv and/or to transfer connmark to packet
	  mark.  Both are useful for restoring egress based marks
	  back onto ingress connections for qdisc priority mapping
	  purposes.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_ctinfo.

config NET_ACT_SKBMOD
	tristate "skb data modification action"
	depends on NET_CLS_ACT
	help
	 Say Y here to allow modification of skb data

	 If unsure, say N.

	 To compile this code as a module, choose M here: the
	 module will be called act_skbmod.

config NET_ACT_IFE
	tristate "Inter-FE action based on IETF ForCES InterFE LFB"
	depends on NET_CLS_ACT
	select NET_IFE
	help
	  Say Y here to allow for sourcing and terminating metadata
	  For details refer to netdev01 paper:
	  "Distributing Linux Traffic Control Classifier-Action Subsystem"
	   Authors: Jamal Hadi Salim and Damascene M. Joachimpillai

	  To compile this code as a module, choose M here: the
	  module will be called act_ife.

config NET_ACT_TUNNEL_KEY
	tristate "IP tunnel metadata manipulation"
	depends on NET_CLS_ACT
	help
	  Say Y here to set/release ip tunnel metadata.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_tunnel_key.

config NET_ACT_CT
	tristate "connection tracking tc action"
	depends on NET_CLS_ACT && NF_CONNTRACK && (!NF_NAT || NF_NAT) && NF_FLOW_TABLE
	select NF_CONNTRACK_OVS
	select NF_NAT_OVS if NF_NAT
	help
	  Say Y here to allow sending the packets to conntrack module.

	  If unsure, say N.

	  To compile this code as a module, choose M here: the
	  module will be called act_ct.

config NET_ACT_GATE
	tristate "Frame gate entry list control tc action"
	depends on NET_CLS_ACT
	help
	  Say Y here to allow to control the ingress flow to be passed at
	  specific time slot and be dropped at other specific time slot by
	  the gate entry list.

	  If unsure, say N.
	  To compile this code as a module, choose M here: the
	  module will be called act_gate.

config NET_IFE_SKBMARK
	tristate "Support to encoding decoding skb mark on IFE action"
	depends on NET_ACT_IFE

config NET_IFE_SKBPRIO
	tristate "Support to encoding decoding skb prio on IFE action"
	depends on NET_ACT_IFE

config NET_IFE_SKBTCINDEX
	tristate "Support to encoding decoding skb tcindex on IFE action"
	depends on NET_ACT_IFE

config NET_TC_SKB_EXT
	bool "TC recirculation support"
	depends on NET_CLS_ACT
	select SKB_EXTENSIONS

	help
	  Say Y here to allow tc chain misses to continue in OvS datapath in
	  the correct recirc_id, and hardware chain misses to continue in
	  the correct chain in tc software datapath.

	  Say N here if you won't be using tc<->ovs offload or tc chains offload.

endif # NET_SCHED

config NET_SCH_FIFO
	bool
