xref: /linux/net/Kconfig (revision 45bd443bfd8697a7da308c16c3e75e2bb353b3d1)
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Network configuration
4#
5
6menuconfig NET
7	bool "Networking support"
8	select NLATTR
9	select GENERIC_NET_UTILS
10	select BPF
11	help
12	  Unless you really know what you are doing, you should say Y here.
13	  The reason is that some programs need kernel networking support even
14	  when running on a stand-alone machine that isn't connected to any
15	  other computer.
16
17	  If you are upgrading from an older kernel, you
18	  should consider updating your networking tools too because changes
19	  in the kernel and the tools often go hand in hand. The tools are
20	  contained in the package net-tools, the location and version number
21	  of which are given in <file:Documentation/Changes>.
22
23	  For a general introduction to Linux networking, it is highly
24	  recommended to read the NET-HOWTO, available from
25	  <http://www.tldp.org/docs.html#howto>.
26
27if NET
28
29config WANT_COMPAT_NETLINK_MESSAGES
30	bool
31	help
32	  This option can be selected by other options that need compat
33	  netlink messages.
34
35config COMPAT_NETLINK_MESSAGES
36	def_bool y
37	depends on COMPAT
38	depends on WEXT_CORE || WANT_COMPAT_NETLINK_MESSAGES
39	help
40	  This option makes it possible to send different netlink messages
41	  to tasks depending on whether the task is a compat task or not. To
42	  achieve this, you need to set skb_shinfo(skb)->frag_list to the
43	  compat skb before sending the skb, the netlink code will sort out
44	  which message to actually pass to the task.
45
46	  Newly written code should NEVER need this option but do
47	  compat-independent messages instead!
48
49config NET_INGRESS
50	bool
51
52config NET_EGRESS
53	bool
54
55config NET_XGRESS
56	select NET_INGRESS
57	select NET_EGRESS
58	bool
59
60config NET_REDIRECT
61	bool
62
63config SKB_DECRYPTED
64	bool
65
66config SKB_EXTENSIONS
67	bool
68
69config NET_DEVMEM
70	def_bool y
71	depends on DMA_SHARED_BUFFER
72	depends on GENERIC_ALLOCATOR
73	depends on PAGE_POOL
74
75config NET_SHAPER
76	bool
77
78menu "Networking options"
79
80source "net/packet/Kconfig"
81source "net/unix/Kconfig"
82source "net/tls/Kconfig"
83source "net/xfrm/Kconfig"
84source "net/iucv/Kconfig"
85source "net/smc/Kconfig"
86source "net/xdp/Kconfig"
87
88config NET_HANDSHAKE
89	bool
90	depends on SUNRPC || NVME_TARGET_TCP || NVME_TCP
91	default y
92
93config NET_HANDSHAKE_KUNIT_TEST
94	tristate "KUnit tests for the handshake upcall mechanism" if !KUNIT_ALL_TESTS
95	default KUNIT_ALL_TESTS
96	depends on KUNIT
97	help
98	  This builds the KUnit tests for the handshake upcall mechanism.
99
100	  KUnit tests run during boot and output the results to the debug
101	  log in TAP format (https://testanything.org/). Only useful for
102	  kernel devs running KUnit test harness and are not for inclusion
103	  into a production build.
104
105	  For more information on KUnit and unit tests in general, refer
106	  to the KUnit documentation in Documentation/dev-tools/kunit/.
107
108config INET
109	bool "TCP/IP networking"
110	help
111	  These are the protocols used on the Internet and on most local
112	  Ethernets. It is highly recommended to say Y here (this will enlarge
113	  your kernel by about 400 KB), since some programs (e.g. the X window
114	  system) use TCP/IP even if your machine is not connected to any
115	  other computer. You will get the so-called loopback device which
116	  allows you to ping yourself (great fun, that!).
117
118	  For an excellent introduction to Linux networking, please read the
119	  Linux Networking HOWTO, available from
120	  <http://www.tldp.org/docs.html#howto>.
121
122	  If you say Y here and also to "/proc file system support" and
123	  "Sysctl support" below, you can change various aspects of the
124	  behavior of the TCP/IP code by writing to the (virtual) files in
125	  /proc/sys/net/ipv4/*; the options are explained in the file
126	  <file:Documentation/networking/ip-sysctl.rst>.
127
128	  Short answer: say Y.
129
130if INET
131source "net/ipv4/Kconfig"
132source "net/ipv6/Kconfig"
133source "net/netlabel/Kconfig"
134source "net/mptcp/Kconfig"
135
136endif # if INET
137
138config NETWORK_SECMARK
139	bool "Security Marking"
140	help
141	  This enables security marking of network packets, similar
142	  to nfmark, but designated for security purposes.
143	  If you are unsure how to answer this question, answer N.
144
145config NET_PTP_CLASSIFY
146	def_bool n
147
148config NETWORK_PHY_TIMESTAMPING
149	bool "Timestamping in PHY devices"
150	select NET_PTP_CLASSIFY
151	help
152	  This allows timestamping of network packets by PHYs (or
153	  other MII bus snooping devices) with hardware timestamping
154	  capabilities. This option adds some overhead in the transmit
155	  and receive paths.
156
157	  If you are unsure how to answer this question, answer N.
158
159menuconfig NETFILTER
160	bool "Network packet filtering framework (Netfilter)"
161	help
162	  Netfilter is a framework for filtering and mangling network packets
163	  that pass through your Linux box.
164
165	  The most common use of packet filtering is to run your Linux box as
166	  a firewall protecting a local network from the Internet. The type of
167	  firewall provided by this kernel support is called a "packet
168	  filter", which means that it can reject individual network packets
169	  based on type, source, destination etc. The other kind of firewall,
170	  a "proxy-based" one, is more secure but more intrusive and more
171	  bothersome to set up; it inspects the network traffic much more
172	  closely, modifies it and has knowledge about the higher level
173	  protocols, which a packet filter lacks. Moreover, proxy-based
174	  firewalls often require changes to the programs running on the local
175	  clients. Proxy-based firewalls don't need support by the kernel, but
176	  they are often combined with a packet filter, which only works if
177	  you say Y here.
178
179	  You should also say Y here if you intend to use your Linux box as
180	  the gateway to the Internet for a local network of machines without
181	  globally valid IP addresses. This is called "masquerading": if one
182	  of the computers on your local network wants to send something to
183	  the outside, your box can "masquerade" as that computer, i.e. it
184	  forwards the traffic to the intended outside destination, but
185	  modifies the packets to make it look like they came from the
186	  firewall box itself. It works both ways: if the outside host
187	  replies, the Linux box will silently forward the traffic to the
188	  correct local computer. This way, the computers on your local net
189	  are completely invisible to the outside world, even though they can
190	  reach the outside and can receive replies. It is even possible to
191	  run globally visible servers from within a masqueraded local network
192	  using a mechanism called portforwarding. Masquerading is also often
193	  called NAT (Network Address Translation).
194
195	  Another use of Netfilter is in transparent proxying: if a machine on
196	  the local network tries to connect to an outside host, your Linux
197	  box can transparently forward the traffic to a local server,
198	  typically a caching proxy server.
199
200	  Yet another use of Netfilter is building a bridging firewall. Using
201	  a bridge with Network packet filtering enabled makes iptables "see"
202	  the bridged traffic. For filtering on the lower network and Ethernet
203	  protocols over the bridge, use ebtables (under bridge netfilter
204	  configuration).
205
206	  Various modules exist for netfilter which replace the previous
207	  masquerading (ipmasqadm), packet filtering (ipchains), transparent
208	  proxying, and portforwarding mechanisms. Please see
209	  <file:Documentation/Changes> under "iptables" for the location of
210	  these packages.
211
212if NETFILTER
213
214config NETFILTER_ADVANCED
215	bool "Advanced netfilter configuration"
216	depends on NETFILTER
217	default y
218	help
219	  If you say Y here you can select between all the netfilter modules.
220	  If you say N the more unusual ones will not be shown and the
221	  basic ones needed by most people will default to 'M'.
222
223	  If unsure, say Y.
224
225config BRIDGE_NETFILTER
226	tristate "Bridged IP/ARP packets filtering"
227	depends on BRIDGE
228	depends on NETFILTER && INET
229	depends on NETFILTER_ADVANCED
230	select NETFILTER_FAMILY_BRIDGE
231	select SKB_EXTENSIONS
232	help
233	  Enabling this option will let arptables resp. iptables see bridged
234	  ARP resp. IP traffic. If you want a bridging firewall, you probably
235	  want this option enabled.
236	  Enabling or disabling this option doesn't enable or disable
237	  ebtables.
238
239	  If unsure, say N.
240
241source "net/netfilter/Kconfig"
242source "net/ipv4/netfilter/Kconfig"
243source "net/ipv6/netfilter/Kconfig"
244source "net/bridge/netfilter/Kconfig"
245
246endif
247
248source "net/sctp/Kconfig"
249source "net/rds/Kconfig"
250source "net/tipc/Kconfig"
251source "net/atm/Kconfig"
252source "net/l2tp/Kconfig"
253source "net/802/Kconfig"
254source "net/bridge/Kconfig"
255source "net/dsa/Kconfig"
256source "net/8021q/Kconfig"
257source "net/llc/Kconfig"
258source "net/appletalk/Kconfig"
259source "net/x25/Kconfig"
260source "net/lapb/Kconfig"
261source "net/phonet/Kconfig"
262source "net/6lowpan/Kconfig"
263source "net/ieee802154/Kconfig"
264source "net/mac802154/Kconfig"
265source "net/sched/Kconfig"
266source "net/dcb/Kconfig"
267source "net/dns_resolver/Kconfig"
268source "net/batman-adv/Kconfig"
269source "net/openvswitch/Kconfig"
270source "net/vmw_vsock/Kconfig"
271source "net/netlink/Kconfig"
272source "net/mpls/Kconfig"
273source "net/nsh/Kconfig"
274source "net/hsr/Kconfig"
275source "net/switchdev/Kconfig"
276source "net/l3mdev/Kconfig"
277source "net/qrtr/Kconfig"
278source "net/ncsi/Kconfig"
279
280config PCPU_DEV_REFCNT
281	bool "Use percpu variables to maintain network device refcount"
282	depends on SMP
283	default y
284	help
285	  network device refcount are using per cpu variables if this option is set.
286	  This can be forced to N to detect underflows (with a performance drop).
287
288config MAX_SKB_FRAGS
289	int "Maximum number of fragments per skb_shared_info"
290	range 17 45
291	default 17
292	help
293	  Having more fragments per skb_shared_info can help GRO efficiency.
294	  This helps BIG TCP workloads, but might expose bugs in some
295	  legacy drivers.
296	  This also increases memory overhead of small packets,
297	  and in drivers using build_skb().
298	  If unsure, say 17.
299
300config RPS
301	bool "Receive packet steering"
302	depends on SMP && SYSFS
303	default y
304	help
305	  Software receive side packet steering (RPS) distributes the
306	  load of received packet processing across multiple CPUs.
307
308config RFS_ACCEL
309	bool "Hardware acceleration of RFS"
310	depends on RPS
311	select CPU_RMAP
312	default y
313	help
314	  Allowing drivers for multiqueue hardware with flow filter tables to
315	  accelerate RFS.
316
317config SOCK_RX_QUEUE_MAPPING
318	bool
319
320config XPS
321	bool
322	depends on SMP
323	select SOCK_RX_QUEUE_MAPPING
324	default y
325
326config HWBM
327	bool
328
329config CGROUP_NET_PRIO
330	bool "Network priority cgroup"
331	depends on CGROUPS
332	select SOCK_CGROUP_DATA
333	help
334	  Cgroup subsystem for use in assigning processes to network priorities on
335	  a per-interface basis.
336
337config CGROUP_NET_CLASSID
338	bool "Network classid cgroup"
339	depends on CGROUPS
340	select SOCK_CGROUP_DATA
341	help
342	  Cgroup subsystem for use as general purpose socket classid marker that is
343	  being used in cls_cgroup and for netfilter matching.
344
345config NET_RX_BUSY_POLL
346	bool
347	default y if !PREEMPT_RT || (PREEMPT_RT && !NETCONSOLE)
348
349config BQL
350	bool
351	prompt "Enable Byte Queue Limits"
352	depends on SYSFS
353	select DQL
354	default y
355
356config BPF_STREAM_PARSER
357	bool "enable BPF STREAM_PARSER"
358	depends on INET
359	depends on BPF_SYSCALL
360	depends on CGROUP_BPF
361	select STREAM_PARSER
362	select NET_SOCK_MSG
363	help
364	  Enabling this allows a TCP stream parser to be used with
365	  BPF_MAP_TYPE_SOCKMAP.
366
367config NET_FLOW_LIMIT
368	bool "Net flow limit"
369	depends on RPS
370	default y
371	help
372	  The network stack has to drop packets when a receive processing CPU's
373	  backlog reaches netdev_max_backlog. If a few out of many active flows
374	  generate the vast majority of load, drop their traffic earlier to
375	  maintain capacity for the other flows. This feature provides servers
376	  with many clients some protection against DoS by a single (spoofed)
377	  flow that greatly exceeds average workload.
378
379menu "Network testing"
380
381config NET_PKTGEN
382	tristate "Packet Generator (USE WITH CAUTION)"
383	depends on INET && PROC_FS
384	help
385	  This module will inject preconfigured packets, at a configurable
386	  rate, out of a given interface.  It is used for network interface
387	  stress testing and performance analysis.  If you don't understand
388	  what was just said, you don't need it: say N.
389
390	  Documentation on how to use the packet generator can be found
391	  at <file:Documentation/networking/pktgen.rst>.
392
393	  To compile this code as a module, choose M here: the
394	  module will be called pktgen.
395
396config NET_DROP_MONITOR
397	tristate "Network packet drop alerting service"
398	depends on INET && TRACEPOINTS
399	help
400	  This feature provides an alerting service to userspace in the
401	  event that packets are discarded in the network stack.  Alerts
402	  are broadcast via netlink socket to any listening user space
403	  process.  If you don't need network drop alerts, or if you are ok
404	  just checking the various proc files and other utilities for
405	  drop statistics, say N here.
406
407endmenu
408
409endmenu
410
411source "net/ax25/Kconfig"
412source "net/can/Kconfig"
413source "net/bluetooth/Kconfig"
414source "net/rxrpc/Kconfig"
415source "net/kcm/Kconfig"
416source "net/strparser/Kconfig"
417source "net/mctp/Kconfig"
418
419config FIB_RULES
420	bool
421
422menuconfig WIRELESS
423	bool "Wireless"
424	depends on !S390
425	default y
426
427if WIRELESS
428
429source "net/wireless/Kconfig"
430source "net/mac80211/Kconfig"
431
432endif # WIRELESS
433
434source "net/rfkill/Kconfig"
435source "net/9p/Kconfig"
436source "net/caif/Kconfig"
437source "net/ceph/Kconfig"
438source "net/nfc/Kconfig"
439source "net/psample/Kconfig"
440source "net/ife/Kconfig"
441
442config LWTUNNEL
443	bool "Network light weight tunnels"
444	help
445	  This feature provides an infrastructure to support light weight
446	  tunnels like mpls. There is no netdevice associated with a light
447	  weight tunnel endpoint. Tunnel encapsulation parameters are stored
448	  with light weight tunnel state associated with fib routes.
449
450config LWTUNNEL_BPF
451	bool "Execute BPF program as route nexthop action"
452	depends on LWTUNNEL && INET
453	default y if LWTUNNEL=y
454	help
455	  Allows to run BPF programs as a nexthop action following a route
456	  lookup for incoming and outgoing packets.
457
458config DST_CACHE
459	bool
460	default n
461
462config GRO_CELLS
463	bool
464	default n
465
466config SOCK_VALIDATE_XMIT
467	bool
468
469config NET_IEEE8021Q_HELPERS
470	bool
471
472config NET_SELFTESTS
473	def_tristate PHYLIB
474	depends on PHYLIB && INET
475
476config NET_SOCK_MSG
477	bool
478	default n
479	help
480	  The NET_SOCK_MSG provides a framework for plain sockets (e.g. TCP) or
481	  ULPs (upper layer modules, e.g. TLS) to process L7 application data
482	  with the help of BPF programs.
483
484config NET_DEVLINK
485	bool
486	default n
487
488config PAGE_POOL
489	bool
490
491config PAGE_POOL_STATS
492	default n
493	bool "Page pool stats"
494	depends on PAGE_POOL
495	help
496	  Enable page pool statistics to track page allocation and recycling
497	  in page pools. This option incurs additional CPU cost in allocation
498	  and recycle paths and additional memory cost to store the statistics.
499	  These statistics are only available if this option is enabled and if
500	  the driver using the page pool supports exporting this data.
501
502	  If unsure, say N.
503
504config FAILOVER
505	tristate "Generic failover module"
506	help
507	  The failover module provides a generic interface for paravirtual
508	  drivers to register a netdev and a set of ops with a failover
509	  instance. The ops are used as event handlers that get called to
510	  handle netdev register/unregister/link change/name change events
511	  on slave pci ethernet devices with the same mac address as the
512	  failover netdev. This enables paravirtual drivers to use a
513	  VF as an accelerated low latency datapath. It also allows live
514	  migration of VMs with direct attached VFs by failing over to the
515	  paravirtual datapath when the VF is unplugged.
516
517config ETHTOOL_NETLINK
518	bool "Netlink interface for ethtool"
519	select DIMLIB
520	default y
521	help
522	  An alternative userspace interface for ethtool based on generic
523	  netlink. It provides better extensibility and some new features,
524	  e.g. notification messages.
525
526config NETDEV_ADDR_LIST_TEST
527	tristate "Unit tests for device address list"
528	default KUNIT_ALL_TESTS
529	depends on KUNIT
530
531config NET_TEST
532	tristate "KUnit tests for networking" if !KUNIT_ALL_TESTS
533	depends on KUNIT
534	default KUNIT_ALL_TESTS
535	help
536	  KUnit tests covering core networking infra, such as sk_buff.
537
538	  If unsure, say N.
539
540endif   # if NET
541