2015-02-18 16:25:19 +01:00
|
|
|
#
|
|
|
|
# Common code to marry kernel config(8) goo and module building goo.
|
|
|
|
#
|
|
|
|
|
|
|
|
# Generate options files that otherwise would be built
|
|
|
|
# in substantially similar ways through the tree. Move
|
|
|
|
# the code here when they all produce identical results
|
|
|
|
# (or should)
|
|
|
|
.if !defined(KERNBUILDDIR)
|
2020-01-29 19:50:55 +01:00
|
|
|
opt_global.h:
|
2020-01-29 19:54:21 +01:00
|
|
|
touch ${.TARGET}
|
2020-02-05 21:57:45 +01:00
|
|
|
@echo "#define SMP 1" >> ${.TARGET}
|
2020-01-29 23:40:13 +01:00
|
|
|
@echo "#define MAC 1" >> ${.TARGET}
|
2020-02-05 21:57:45 +01:00
|
|
|
@echo "#define VIMAGE 1" >> ${.TARGET}
|
2022-10-24 20:12:17 +02:00
|
|
|
# Note: Define 'options' in DEFAULTS to 1. For simplicity, no check if the
|
|
|
|
# option is in opt_global.h. Nearly all the options in DEFAUlTS today are in
|
|
|
|
# opt_global.h with GEOM_* being the main exceptions. Move any options from
|
|
|
|
# GENERIC or std.* files to DEFAULTS to get this treatment for untied builds.
|
|
|
|
@awk '$$1 == "options" && $$2 !~ "GEOM_" { print "#define ", $$2, " 1"; }' \
|
|
|
|
< ${SYSDIR}/${MACHINE}/conf/DEFAULTS \
|
|
|
|
>> ${.TARGET}
|
Initial support for bhyve save and restore.
Save and restore (also known as suspend and resume) permits a snapshot
to be taken of a guest's state that can later be resumed. In the
current implementation, bhyve(8) creates a UNIX domain socket that is
used by bhyvectl(8) to send a request to save a snapshot (and
optionally exit after the snapshot has been taken). A snapshot
currently consists of two files: the first holds a copy of guest RAM,
and the second file holds other guest state such as vCPU register
values and device model state.
To resume a guest, bhyve(8) must be started with a matching pair of
command line arguments to instantiate the same set of device models as
well as a pointer to the saved snapshot.
While the current implementation is useful for several uses cases, it
has a few limitations. The file format for saving the guest state is
tied to the ABI of internal bhyve structures and is not
self-describing (in that it does not communicate the set of device
models present in the system). In addition, the state saved for some
device models closely matches the internal data structures which might
prove a challenge for compatibility of snapshot files across a range
of bhyve versions. The file format also does not currently support
versioning of individual chunks of state. As a result, the current
file format is not a fixed binary format and future revisions to save
and restore will break binary compatiblity of snapshot files. The
goal is to move to a more flexible format that adds versioning,
etc. and at that point to commit to providing a reasonable level of
compatibility. As a result, the current implementation is not enabled
by default. It can be enabled via the WITH_BHYVE_SNAPSHOT=yes option
for userland builds, and the kernel option BHYVE_SHAPSHOT.
Submitted by: Mihai Tiganus, Flavius Anton, Darius Mihai
Submitted by: Elena Mihailescu, Mihai Carabas, Sergiu Weisz
Relnotes: yes
Sponsored by: University Politehnica of Bucharest
Sponsored by: Matthew Grooms (student scholarships)
Sponsored by: iXsystems
Differential Revision: https://reviews.freebsd.org/D19495
2020-05-05 02:02:04 +02:00
|
|
|
.if ${MK_BHYVE_SNAPSHOT} != "no"
|
|
|
|
opt_bhyve_snapshot.h:
|
|
|
|
@echo "#define BHYVE_SNAPSHOT 1" > ${.TARGET}
|
|
|
|
.endif
|
2015-02-18 16:25:19 +01:00
|
|
|
opt_bpf.h:
|
|
|
|
echo "#define DEV_BPF 1" > ${.TARGET}
|
|
|
|
.if ${MK_INET_SUPPORT} != "no"
|
|
|
|
opt_inet.h:
|
|
|
|
@echo "#define INET 1" > ${.TARGET}
|
|
|
|
@echo "#define TCP_OFFLOAD 1" >> ${.TARGET}
|
|
|
|
.endif
|
|
|
|
.if ${MK_INET6_SUPPORT} != "no"
|
|
|
|
opt_inet6.h:
|
|
|
|
@echo "#define INET6 1" > ${.TARGET}
|
|
|
|
.endif
|
2020-05-30 02:47:03 +02:00
|
|
|
.if ${MK_IPSEC_SUPPORT} != "no"
|
2020-05-29 21:21:35 +02:00
|
|
|
opt_ipsec.h:
|
|
|
|
@echo "#define IPSEC_SUPPORT 1" > ${.TARGET}
|
2020-05-30 02:47:03 +02:00
|
|
|
.endif
|
Implement kernel support for hardware rate limited sockets.
- Add RATELIMIT kernel configuration keyword which must be set to
enable the new functionality.
- Add support for hardware driven, Receive Side Scaling, RSS aware, rate
limited sendqueues and expose the functionality through the already
established SO_MAX_PACING_RATE setsockopt(). The API support rates in
the range from 1 to 4Gbytes/s which are suitable for regular TCP and
UDP streams. The setsockopt(2) manual page has been updated.
- Add rate limit function callback API to "struct ifnet" which supports
the following operations: if_snd_tag_alloc(), if_snd_tag_modify(),
if_snd_tag_query() and if_snd_tag_free().
- Add support to ifconfig to view, set and clear the IFCAP_TXRTLMT
flag, which tells if a network driver supports rate limiting or not.
- This patch also adds support for rate limiting through VLAN and LAGG
intermediate network devices.
- How rate limiting works:
1) The userspace application calls setsockopt() after accepting or
making a new connection to set the rate which is then stored in the
socket structure in the kernel. Later on when packets are transmitted
a check is made in the transmit path for rate changes. A rate change
implies a non-blocking ifp->if_snd_tag_alloc() call will be made to the
destination network interface, which then sets up a custom sendqueue
with the given rate limitation parameter. A "struct m_snd_tag" pointer is
returned which serves as a "snd_tag" hint in the m_pkthdr for the
subsequently transmitted mbufs.
2) When the network driver sees the "m->m_pkthdr.snd_tag" different
from NULL, it will move the packets into a designated rate limited sendqueue
given by the snd_tag pointer. It is up to the individual drivers how the rate
limited traffic will be rate limited.
3) Route changes are detected by the NIC drivers in the ifp->if_transmit()
routine when the ifnet pointer in the incoming snd_tag mismatches the
one of the network interface. The network adapter frees the mbuf and
returns EAGAIN which causes the ip_output() to release and clear the send
tag. Upon next ip_output() a new "snd_tag" will be tried allocated.
4) When the PCB is detached the custom sendqueue will be released by a
non-blocking ifp->if_snd_tag_free() call to the currently bound network
interface.
Reviewed by: wblock (manpages), adrian, gallatin, scottl (network)
Differential Revision: https://reviews.freebsd.org/D3687
Sponsored by: Mellanox Technologies
MFC after: 3 months
2017-01-18 14:31:17 +01:00
|
|
|
.if ${MK_RATELIMIT} != "no"
|
|
|
|
opt_ratelimit.h:
|
|
|
|
@echo "#define RATELIMIT 1" > ${.TARGET}
|
|
|
|
.endif
|
2015-02-18 16:25:19 +01:00
|
|
|
opt_mrouting.h:
|
2022-04-05 21:39:09 +02:00
|
|
|
@echo "#define MROUTING 1" > ${.TARGET}
|
|
|
|
.if ${MK_FDT} != "no"
|
|
|
|
opt_platform.h:
|
|
|
|
@echo "#define FDT 1" > ${.TARGET}
|
|
|
|
.endif
|
2017-02-25 23:11:10 +01:00
|
|
|
opt_printf.h:
|
|
|
|
echo "#define PRINTF_BUFR_SIZE 128" > ${.TARGET}
|
2015-02-18 16:25:19 +01:00
|
|
|
opt_scsi.h:
|
|
|
|
echo "#define SCSI_DELAY 15000" > ${.TARGET}
|
2020-06-25 17:25:00 +02:00
|
|
|
.if ${MK_SCTP_SUPPORT} != "no"
|
|
|
|
opt_sctp.h:
|
|
|
|
@echo "#define SCTP_SUPPORT 1" > ${.TARGET}
|
|
|
|
.endif
|
2015-02-18 16:25:19 +01:00
|
|
|
opt_wlan.h:
|
|
|
|
echo "#define IEEE80211_DEBUG 1" > ${.TARGET}
|
|
|
|
echo "#define IEEE80211_SUPPORT_MESH 1" >> ${.TARGET}
|
2024-07-18 19:55:12 +02:00
|
|
|
KERN_OPTS.i386=DEV_PCI
|
|
|
|
KERN_OPTS.amd64=DEV_PCI
|
|
|
|
KERN_OPTS.powerpc=DEV_PCI
|
2017-04-24 23:21:49 +02:00
|
|
|
KERN_OPTS=MROUTING IEEE80211_DEBUG \
|
2019-01-20 16:17:56 +01:00
|
|
|
IEEE80211_SUPPORT_MESH DEV_BPF \
|
2015-02-18 16:25:19 +01:00
|
|
|
${KERN_OPTS.${MACHINE}} ${KERN_OPTS_EXTRA}
|
Initial support for bhyve save and restore.
Save and restore (also known as suspend and resume) permits a snapshot
to be taken of a guest's state that can later be resumed. In the
current implementation, bhyve(8) creates a UNIX domain socket that is
used by bhyvectl(8) to send a request to save a snapshot (and
optionally exit after the snapshot has been taken). A snapshot
currently consists of two files: the first holds a copy of guest RAM,
and the second file holds other guest state such as vCPU register
values and device model state.
To resume a guest, bhyve(8) must be started with a matching pair of
command line arguments to instantiate the same set of device models as
well as a pointer to the saved snapshot.
While the current implementation is useful for several uses cases, it
has a few limitations. The file format for saving the guest state is
tied to the ABI of internal bhyve structures and is not
self-describing (in that it does not communicate the set of device
models present in the system). In addition, the state saved for some
device models closely matches the internal data structures which might
prove a challenge for compatibility of snapshot files across a range
of bhyve versions. The file format also does not currently support
versioning of individual chunks of state. As a result, the current
file format is not a fixed binary format and future revisions to save
and restore will break binary compatiblity of snapshot files. The
goal is to move to a more flexible format that adds versioning,
etc. and at that point to commit to providing a reasonable level of
compatibility. As a result, the current implementation is not enabled
by default. It can be enabled via the WITH_BHYVE_SNAPSHOT=yes option
for userland builds, and the kernel option BHYVE_SHAPSHOT.
Submitted by: Mihai Tiganus, Flavius Anton, Darius Mihai
Submitted by: Elena Mihailescu, Mihai Carabas, Sergiu Weisz
Relnotes: yes
Sponsored by: University Politehnica of Bucharest
Sponsored by: Matthew Grooms (student scholarships)
Sponsored by: iXsystems
Differential Revision: https://reviews.freebsd.org/D19495
2020-05-05 02:02:04 +02:00
|
|
|
.if ${MK_BHYVE_SNAPSHOT} != "no"
|
|
|
|
KERN_OPTS+= BHYVE_SNAPSHOT
|
|
|
|
.endif
|
2015-02-18 16:25:19 +01:00
|
|
|
.if ${MK_INET_SUPPORT} != "no"
|
|
|
|
KERN_OPTS+= INET TCP_OFFLOAD
|
|
|
|
.endif
|
|
|
|
.if ${MK_INET6_SUPPORT} != "no"
|
|
|
|
KERN_OPTS+= INET6
|
|
|
|
.endif
|
2020-05-30 02:47:03 +02:00
|
|
|
.if ${MK_IPSEC_SUPPORT} != "no"
|
|
|
|
KERN_OPTS+= IPSEC_SUPPORT
|
|
|
|
.endif
|
2020-06-25 17:25:00 +02:00
|
|
|
.if ${MK_SCTP_SUPPORT} != "no"
|
|
|
|
KERN_OPTS+= SCTP_SUPPORT
|
|
|
|
.endif
|
2016-03-12 23:21:02 +01:00
|
|
|
.elif !defined(KERN_OPTS)
|
2019-07-19 19:48:29 +02:00
|
|
|
# Add all the options that are mentioned in any opt_*.h file when we
|
|
|
|
# have a kernel build directory to pull them from.
|
2015-02-18 16:25:19 +01:00
|
|
|
KERN_OPTS!=cat ${KERNBUILDDIR}/opt*.h | awk '{print $$2;}' | sort -u
|
2016-03-12 23:21:02 +01:00
|
|
|
.export KERN_OPTS
|
2015-02-18 16:25:19 +01:00
|
|
|
.endif
|
2016-03-12 23:21:14 +01:00
|
|
|
|
2018-03-10 03:09:36 +01:00
|
|
|
.if !defined(NO_MODULES) && !defined(__MPATH) && !make(install) && \
|
|
|
|
(empty(.MAKEFLAGS:M-V) || defined(NO_SKIP_MPATH))
|
2016-03-12 23:21:14 +01:00
|
|
|
__MPATH!=find ${SYSDIR:tA}/ -name \*_if.m
|
|
|
|
.export __MPATH
|
|
|
|
.endif
|