Mercurial > hg > nginx
diff auto/os/linux @ 8676:7df607cb2d11 quic
QUIC: ngx_quic_bpf module.
The quic kernel bpf helper inspects packet payload for DCID, extracts key
and routes the packet into socket matching the key.
Due to reuseport feature, each worker owns a personal socket, which is
identified by the same key, used to create DCID.
BPF objects are locked in RAM and are subject to RLIMIT_MEMLOCK.
The "ulimit -l" command may be used to setup proper limits, if maps
cannot be created with EPERM or updated with ETOOLONG.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Fri, 25 Dec 2020 15:01:15 +0300 |
parents | d3747ba486e7 |
children | 7f95010f10b7 |
line wrap: on
line diff
--- a/auto/os/linux +++ b/auto/os/linux @@ -234,3 +234,41 @@ if [ $ngx_found = yes ]; then CORE_SRCS="$CORE_SRCS src/core/ngx_bpf.c" CORE_DEPS="$CORE_DEPS src/core/ngx_bpf.h" fi + + +# SO_COOKIE socket option + +ngx_feature="SO_COOKIE" +ngx_feature_name="NGX_HAVE_SO_COOKIE" +ngx_feature_run=no +ngx_feature_incs="#include <sys/socket.h> + #include <stdint.h>" +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="socklen_t optlen = sizeof(uint64_t); + uint64_t cookie; + getsockopt(0, SOL_SOCKET, SO_COOKIE, &cookie, &optlen)" +. auto/feature + +if [ $ngx_found = yes ]; then + SO_COOKIE_FOUND=YES + have=NGX_HAVE_SO_COOKIE . auto/have +fi + + +# ngx_quic_bpf module uses sockhash to select socket from reuseport group, +# support appeared in Linux-5.7: +# +# commit: 9fed9000c5c6cacfcaaa48aff74818072ae294cc +# bpf: Allow selecting reuseport socket from a SOCKMAP/SOCKHASH +# +if [ $NGX_QUIC_BPF$BPF_FOUND = YESYES ]; then + echo $ngx_n "checking for kernel with reuseport/BPF support...$ngx_c" + if [ $version -lt 329472 ]; then + echo " not found (at least 5.7 is required)" + NGX_QUIC_BPF=NO + else + echo " found" + fi +fi +