{"id":2215684,"url":"http://patchwork.ozlabs.org/api/covers/2215684/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-cifs-client/cover/cover.1774410440.git.lucien.xin@gmail.com/","project":{"id":12,"url":"http://patchwork.ozlabs.org/api/projects/12/?format=json","name":"Linux CIFS Client","link_name":"linux-cifs-client","list_id":"linux-cifs.vger.kernel.org","list_email":"linux-cifs@vger.kernel.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<cover.1774410440.git.lucien.xin@gmail.com>","list_archive_url":null,"date":"2026-03-25T03:47:05","name":"[net-next,v11,00/15] net: introduce QUIC infrastructure and core subcomponents","submitter":{"id":61073,"url":"http://patchwork.ozlabs.org/api/people/61073/?format=json","name":"Xin Long","email":"lucien.xin@gmail.com"},"mbox":"http://patchwork.ozlabs.org/project/linux-cifs-client/cover/cover.1774410440.git.lucien.xin@gmail.com/mbox/","series":[{"id":497380,"url":"http://patchwork.ozlabs.org/api/series/497380/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-cifs-client/list/?series=497380","date":"2026-03-25T03:47:06","name":"net: introduce QUIC infrastructure and core subcomponents","version":11,"mbox":"http://patchwork.ozlabs.org/series/497380/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/2215684/comments/","headers":{"Return-Path":"\n <linux-cifs+bounces-10502-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-cifs@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=P6+uhUSW;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-cifs+bounces-10502-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=\"P6+uhUSW\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.160.181","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=gmail.com"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fgXww1zf8z1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 14:50:08 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 82605302293D\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 03:49:27 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D3DDB2E040D;\n\tWed, 25 Mar 2026 03:49:24 +0000 (UTC)","from mail-qt1-f181.google.com (mail-qt1-f181.google.com\n [209.85.160.181])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id A664C1428F4\n\tfor <linux-cifs@vger.kernel.org>; Wed, 25 Mar 2026 03:49:22 +0000 (UTC)","by mail-qt1-f181.google.com with SMTP id\n d75a77b69052e-50b2d6f9d00so53650541cf.2\n        for <linux-cifs@vger.kernel.org>;\n Tue, 24 Mar 2026 20:49:22 -0700 (PDT)","from wsfd-netdev58.anl.eng.rdu2.dc.redhat.com ([66.187.232.140])\n        by smtp.gmail.com with ESMTPSA id\n d75a77b69052e-50b36cb2e29sm150093001cf.1.2026.03.24.20.49.18\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Tue, 24 Mar 2026 20:49:20 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774410564; cv=none;\n b=j5bYAB17iQ66NaSJG82L1Y3oH4mptuYgOfHPI5tjCKc+uLF6TZlXIVi24zmlpYT8SeGiEDYElMJfdPvjBnn+bBzJMMEuiqzJ0tSkZNh1xKXD+jDCXZjdWGaM+qFl7XcHQ+++vonbB6VrIBfl6gM2iMbDCT1VAP65sbzA1KJFLx0=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774410564; c=relaxed/simple;\n\tbh=eXwq1fBKdPa2hwmYsy5RYWHmgsc6FmApgo1Afs6qxTM=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type;\n b=rzfWn1nlymk9C/+zPIrmFfl5VPlVvpq//tkX2sfGqLYElf+QUTeaq2SH+Ev+RihsCIvr4aq44WfpxvbnXWS2sUfYwLv6cp8K14ZvlOv6x9R89ef+p3+darPwIEiMhvr8kfwk3U7Lh+9kLLpYr7pedxLINqvGCidFYNzlp/hiuD0=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com;\n spf=pass smtp.mailfrom=gmail.com;\n dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=P6+uhUSW; arc=none smtp.client-ip=209.85.160.181","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1774410561; x=1775015361;\n darn=vger.kernel.org;\n        h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n         :to:from:from:to:cc:subject:date:message-id:reply-to;\n        bh=F/qt/YnFNs8jU2lYt2U9vke2ZAkaGHfw4oS5sOaADeI=;\n        b=P6+uhUSWT02acyzEkJTQ0XrSNhFrXQ9gpt6QCpJCMeGJB4UanEyugqzKsKv8TsXX1N\n         AjCW9hpHWhC6k4F+HEpo1i8TXkLj2SzlVdAFeKa6V4tjsEGeU43AHOTfuxYSgNj7vfBr\n         5Tf16I9jdEzgSgqim/ksqlCZcxdBRadmjRreCGjcB/qAhKC6dv3dDu6zFvfSBVAlsOjl\n         h4mkipHGaxAwVQ+8GpmbOibDgyiuwodIqPX0aHdpMYc+WtACo7y1pdC7wI5LO1jtGVZF\n         QSFNLYjz/s2nC6WdEGHjNb2c4kUVAJAc4YJ7rArZnITeLrHEEs8pFhbQxRw1GeJ3OB4f\n         Bxhg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1774410561; x=1775015361;\n        h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=F/qt/YnFNs8jU2lYt2U9vke2ZAkaGHfw4oS5sOaADeI=;\n        b=QjBeQKjod0rKpJhBzOhi5lii9ShrqIhf672q/R9d4skbZiYa7xgeWF+WnfqosIBDcx\n         U/GGst5F51fX6c00Yn9fObY7UbQPiI3M4t6judGetQB+9qns+kXJA/eMf9AquBFjocvC\n         xx41LgSQMLRM0LGobwhn34Af4SICVW51YZ1F7m2m0BMitPKn0pnmolCP8JF0GicdfqFw\n         UjrtN+tz9xNDj6shYmp/sae50JWVu5lm0tQ0N/LNXEI05t66Hdq8JLNiZKT9HdMM1F+j\n         +zeHgioexCNSWE+Xo63hSOzkEbaVBhVwO/tKbcvd/DJd+znIvMSo7l/uQFGQS0SeVWeR\n         vn4g==","X-Forwarded-Encrypted":"i=1;\n AJvYcCWZUBE2u31yorf9eX42xEN3ZAB/AUotycejtXmzoCEze7HMkVV7HnKIfM5pKJxvDmNoGSxFBs9v/pxc@vger.kernel.org","X-Gm-Message-State":"AOJu0Yy1PHjAs9VgqdKkjM4oGb+2rdUKK2qaHqjA7f8vDpCNJ4sFvzBg\n\tyneGWzDkVjKVFNfefCisCTlzUB97a/q/RNGw7E/IgrFEcDZipWhnTBz0","X-Gm-Gg":"ATEYQzyugrOiwR+lGKKbw779lFjh5QVr78vI1sRAsPC8NEWax/7aPMz1MBU0eJdZHni\n\tVjn/rK3Gfmi6S2jLIx/VLpMX1OENVZ5tc1a5gZ+D4eUkpJq41Q7o+YNRvTeKdrpjb2Ad+vEU2ei\n\t3xRC44L8ANjZ7saxAl8G9/3Q39OpOzaSo1xHLw0aY/z73RLYiagKjdukZAKX8HTItRi6QzYYAYW\n\tLlgJ91iviF2x7Skluj3Uu6fh2H8VZMefzjY9335pv/OwQv4cjRzImfMOLbMadaO+4LukhzJ08gy\n\t3K0/5B/Koq9a/NZJXTqD//DVv1aSmSs9mfzA2T2tibgzx2F/uSoNbTxClPql945YcBrvh5nMpOu\n\tKWn79HesFbOgDvwnpFJnnwZ20kG41WO9rsFdeV8TmNmFtbzast4aSzBOSZP7d9Wy/Vy+0ELZVPn\n\tauOj2bhC4qAhaYHSL1JJaw6lUHiOI+zNFBkd0CqTF8ck5HQ6/d1RTGaeZV4pbQNMN/yuLNuVbJ6\n\txAiK24ttE4E7mZ1xvyltM9Ch+BtoLwCgI9b/W8XaESGeeyNfzKueNgNM2+NvUsbHQ==","X-Received":"by 2002:a05:622a:905:b0:509:2053:ab5a with SMTP id\n d75a77b69052e-50b80e6717dmr28801071cf.57.1774410561224;\n        Tue, 24 Mar 2026 20:49:21 -0700 (PDT)","From":"Xin Long <lucien.xin@gmail.com>","To":"network dev <netdev@vger.kernel.org>,\n\tquic@lists.linux.dev","Cc":"davem@davemloft.net,\n\tkuba@kernel.org,\n\tEric Dumazet <edumazet@google.com>,\n\tPaolo Abeni <pabeni@redhat.com>,\n\tSimon Horman <horms@kernel.org>,\n\tStefan Metzmacher <metze@samba.org>,\n\tMoritz Buhl <mbuhl@openbsd.org>,\n\tTyler Fanelli <tfanelli@redhat.com>,\n\tPengtao He <hepengtao@xiaomi.com>,\n\tThomas Dreibholz <dreibh@simula.no>,\n\tlinux-cifs@vger.kernel.org,\n\tSteve French <smfrench@gmail.com>,\n\tNamjae Jeon <linkinjeon@kernel.org>,\n\tPaulo Alcantara <pc@manguebit.com>,\n\tTom Talpey <tom@talpey.com>,\n\tkernel-tls-handshake@lists.linux.dev,\n\tChuck Lever <chuck.lever@oracle.com>,\n\tJeff Layton <jlayton@kernel.org>,\n\tSteve Dickson <steved@redhat.com>,\n\tHannes Reinecke <hare@suse.de>,\n\tAlexander Aring <aahringo@redhat.com>,\n\tDavid Howells <dhowells@redhat.com>,\n\tMatthieu Baerts <matttbe@kernel.org>,\n\tJohn Ericson <mail@johnericson.me>,\n\tCong Wang <xiyou.wangcong@gmail.com>,\n\t\"D . Wythe\" <alibuda@linux.alibaba.com>,\n\tJason Baron <jbaron@akamai.com>,\n\tilliliti <illiliti@protonmail.com>,\n\tSabrina Dubroca <sd@queasysnail.net>,\n\tMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>,\n\tDaniel Stenberg <daniel@haxx.se>,\n\tAndy Gospodarek <andrew.gospodarek@broadcom.com>,\n\t\"Marc E . Fiuczynski\" <marc@fiuczynski.com>","Subject":"[PATCH net-next v11 00/15] net: introduce QUIC infrastructure and\n core subcomponents","Date":"Tue, 24 Mar 2026 23:47:05 -0400","Message-ID":"<cover.1774410440.git.lucien.xin@gmail.com>","X-Mailer":"git-send-email 2.47.1","Precedence":"bulk","X-Mailing-List":"linux-cifs@vger.kernel.org","List-Id":"<linux-cifs.vger.kernel.org>","List-Subscribe":"<mailto:linux-cifs+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-cifs+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit"},"content":"Introduction\n============\n\nThe QUIC protocol, defined in RFC 9000, is a secure, multiplexed transport\nbuilt on top of UDP. It enables low-latency connection establishment,\nstream-based communication with flow control, and supports connection\nmigration across network paths, while ensuring confidentiality, integrity,\nand availability.\n\nThis implementation introduces QUIC support in Linux Kernel, offering\nseveral key advantages:\n\n- In-Kernel QUIC Support for Subsystems: Enables kernel subsystems\n  such as SMB and NFS to operate over QUIC with minimal changes. Once the\n  handshake is complete via the net/handshake APIs, data exchange proceeds\n  over standard in-kernel transport interfaces.\n\n- Standard Socket API Semantics: Implements core socket operations\n  (listen(), accept(), connect(), sendmsg(), recvmsg(), close(),\n  getsockopt(), setsockopt(), getsockname(), and getpeername()),\n  allowing user space to interact with QUIC sockets in a familiar,\n  POSIX-compliant way.\n\n- ALPN-Based Connection Dispatching: Supports in-kernel ALPN\n  (Application-Layer Protocol Negotiation) routing, allowing demultiplexing\n  of QUIC connections across different user-space processes based\n  on the ALPN identifiers.\n\n- Performance Enhancements: Handles all control messages in-kernel\n  to reduce syscall overhead, incorporates zero-copy mechanisms such as\n  sendfile() to minimize data movement, and is also structured to support\n  future crypto hardware offloads.\n\nThis implementation offers fundamental support for the following RFCs:\n\n- RFC9000 - QUIC: A UDP-Based Multiplexed and Secure Transport\n- RFC9001 - Using TLS to Secure QUIC\n- RFC9002 - QUIC Loss Detection and Congestion Control\n- RFC9221 - An Unreliable Datagram Extension to QUIC\n- RFC9287 - Greasing the QUIC Bit\n- RFC9368 - Compatible Version Negotiation for QUIC\n- RFC9369 - QUIC Version 2\n\nThe socket APIs for QUIC follow the RFC draft [1]:\n\n- The Sockets API Extensions for In-kernel QUIC Implementations\n\nImplementation\n==============\n\nThe central design is to implement QUIC within the kernel while delegating\nthe handshake to userspace.\n\nOnly the processing and creation of raw TLS Handshake Messages are handled\nin userspace, facilitated by a TLS library like GnuTLS. These messages are\nexchanged between kernel and userspace via sendmsg() and recvmsg(), with\ncryptographic details conveyed through control messages (cmsg).\n\nThe entire QUIC protocol, aside from the TLS Handshake Messages processing\nand creation, is managed in the kernel. Rather than using an Upper Layer\nProtocol (ULP) layer, this implementation establishes a socket of type\nIPPROTO_QUIC (similar to IPPROTO_MPTCP), operating over UDP tunnels.\n\nFor kernel consumers, they can initiate a handshake request from the kernel\nto userspace using the existing net/handshake netlink. The userspace\ncomponent, such as tlshd service [2], then manages the processing\nof the QUIC handshake request.\n\n- Handshake Architecture:\n\n  ┌──────┐  ┌──────┐\n  │ APP1 │  │ APP2 │ ...\n  └──────┘  └──────┘\n  ┌──────────────────────────────────────────┐\n  │     {quic_client/server_handshake()}     │<─────────────┐\n  └──────────────────────────────────────────┘       ┌─────────────┐\n   {send/recvmsg()}      {set/getsockopt()}          │    tlshd    │\n   [CMSG handshake_info] [SOCKOPT_CRYPTO_SECRET]     └─────────────┘\n                         [SOCKOPT_TRANSPORT_PARAM_EXT]    │   ^\n                │ ^                  │ ^                  │   │\n  Userspace     │ │                  │ │                  │   │\n  ──────────────│─│──────────────────│─│──────────────────│───│───────\n  Kernel        │ │                  │ │                  │   │\n                v │                  v │                  v   │\n  ┌──────────────────┬───────────────────────┐       ┌─────────────┐\n  │ protocol, timer, │ socket (IPPROTO_QUIC) │<──┐   │ handshake   │\n  │                  ├───────────────────────┤   │   │netlink APIs │\n  │ common, family,  │ outqueue  |  inqueue  │   │   └─────────────┘\n  │                  ├───────────────────────┤   │      │       │\n  │ stream, connid,  │         frame         │   │   ┌─────┐ ┌─────┐\n  │                  ├───────────────────────┤   │   │     │ │     │\n  │ path, pnspace,   │         packet        │   │───│ SMB │ │ NFS │...\n  │                  ├───────────────────────┤   │   │     │ │     │\n  │ cong, crypto     │       UDP tunnels     │   │   └─────┘ └─────┘\n  └──────────────────┴───────────────────────┘   └──────┴───────┘\n\n- User Data Architecture:\n\n  ┌──────┐  ┌──────┐\n  │ APP1 │  │ APP2 │ ...\n  └──────┘  └──────┘\n   {send/recvmsg()}   {set/getsockopt()}              {recvmsg()}\n   [CMSG stream_info] [SOCKOPT_KEY_UPDATE]            [EVENT conn update]\n                      [SOCKOPT_CONNECTION_MIGRATION]  [EVENT stream update]\n                      [SOCKOPT_STREAM_OPEN/RESET/STOP]\n                │ ^               │ ^                     ^\n  Userspace     │ │               │ │                     │\n  ──────────────│─│───────────────│─│─────────────────────│───────────\n  Kernel        │ │               │ │                     │\n                v │               v │  ┌──────────────────┘\n  ┌──────────────────┬───────────────────────┐\n  │ protocol, timer, │ socket (IPPROTO_QUIC) │<──┐{kernel_send/recvmsg()}\n  │                  ├───────────────────────┤   │{kernel_set/getsockopt()}\n  │ common, family,  │ outqueue  |  inqueue  │   │{kernel_recvmsg()}\n  │                  ├───────────────────────┤   │\n  │ stream, connid,  │         frame         │   │   ┌─────┐ ┌─────┐\n  │                  ├───────────────────────┤   │   │     │ │     │\n  │ path, pnspace,   │         packet        │   │───│ SMB │ │ NFS │...\n  │                  ├───────────────────────┤   │   │     │ │     │\n  │ cong, crypto     │       UDP tunnels     │   │   └─────┘ └─────┘\n  └──────────────────┴───────────────────────┘   └──────┴───────┘\n\nInterface\n=========\n\nThis implementation supports a mapping of QUIC into sockets APIs. Similar\nto TCP and SCTP, a typical Server and Client use the following system call\nsequence to communicate:\n\n    Client                             Server\n  ──────────────────────────────────────────────────────────────────────\n  sockfd = socket(IPPROTO_QUIC)      listenfd = socket(IPPROTO_QUIC)\n  bind(sockfd)                       bind(listenfd)\n                                     listen(listenfd)\n  connect(sockfd)\n  quic_client_handshake(sockfd)\n                                     sockfd = accept(listenfd)\n                                     quic_server_handshake(sockfd, cert)\n\n  sendmsg(sockfd)                    recvmsg(sockfd)\n  close(sockfd)                      close(sockfd)\n                                     close(listenfd)\n\nPlease note that quic_client_handshake() and quic_server_handshake()\nfunctions are currently sourced from libquic [3]. These functions are\nresponsible for receiving and processing the raw TLS handshake messages\nuntil the completion of the handshake process.\n\nFor utilization by kernel consumers, it is essential to have tlshd\nservice [2] installed and running in userspace. This service receives\nand manages kernel handshake requests for kernel sockets. In the kernel,\nthe APIs closely resemble those used in userspace:\n\n    Client                             Server\n  ────────────────────────────────────────────────────────────────────────\n  __sock_create(IPPROTO_QUIC, &sock)  __sock_create(IPPROTO_QUIC, &sock)\n  kernel_bind(sock)                   kernel_bind(sock)\n                                      kernel_listen(sock)\n  kernel_connect(sock)\n  tls_client_hello_x509(args:{sock})\n                                      kernel_accept(sock, &newsock)\n                                      tls_server_hello_x509(args:{newsock})\n\n  kernel_sendmsg(sock)                kernel_recvmsg(newsock)\n  sock_release(sock)                  sock_release(newsock)\n                                      sock_release(sock)\n\nPlease be aware that tls_client_hello_x509() and tls_server_hello_x509()\nare APIs from net/handshake/. They are used to dispatch the handshake\nrequest to the userspace tlshd service and subsequently block until the\nhandshake process is completed.\n\nUse Cases\n=========\n\n- Samba\n\n  Stefan Metzmacher has integrated Linux QUIC into Samba for both client\n  and server roles [4].\n\n- tlshd\n\n  The tlshd daemon [2] facilitates Linux QUIC handshake requests from\n  kernel sockets. This is essential for enabling protocols like SMB\n  and NFS over QUIC.\n\n- curl\n\n  Linux QUIC is being integrated into curl [5] for HTTP/3. Example usage:\n\n  # curl --http3-only https://nghttp2.org:4433/\n  # curl --http3-only https://www.google.com/\n  # curl --http3-only https://facebook.com/\n  # curl --http3-only https://outlook.office.com/\n  # curl --http3-only https://cloudflare-quic.com/\n\n- httpd-portable\n\n  Moritz Buhl has deployed an HTTP/3 server over Linux QUIC [6] that is\n  accessible via Firefox and curl:\n\n  https://d.moritzbuhl.de/pub\n\n- NetPerfMeter\n\n  The latest NetPerfMeter release supports Linux QUIC and can be used to\n  run performance evaluations [10].\n\nTest Coverage\n=============\n\nThe Coverage (gcov) of Functional and Interop Tests:\n\nhttps://d.moritzbuhl.de/lcov\n\n- Functional Tests\n\n  The libquic self-tests (make check) pass on all major architectures:\n  x86_64, i386, s390x, aarch64, ppc64le.\n\n- Interop tests\n\n  Interoperability was validated using the QUIC Interop Runner [7] against\n  all major userland QUIC stacks. Results are available at:\n\n  https://d.moritzbuhl.de/\n\n- Fuzzing via Syzkaller\n\n  Syzkaller has been running kernel fuzzing with QUIC for weeks using\n  tests/syzkaller/ in libquic [3].\n\n- Performance Testing\n\n  Performance was benchmarked using iperf [8] over a 100G NIC using\n  various MTUs and packet sizes:\n\n  - QUIC vs. kTLS:\n\n    UNIT        size:1024      size:4096      size:16384     size:65536\n    Gbits/sec   QUIC | kTLS    QUIC | kTLS    QUIC | kTLS    QUIC | kTLS\n    ────────────────────────────────────────────────────────────────────\n    mtu:1500    2.27 | 3.26    3.02 | 6.97    3.36 | 9.74    3.48 | 10.8\n    ────────────────────────────────────────────────────────────────────\n    mtu:9000    3.66 | 3.72    5.87 | 8.92    7.03 | 11.2    8.04 | 11.4\n\n  - QUIC(disable_1rtt_encryption) vs. TCP:\n\n    UNIT        size:1024      size:4096      size:16384     size:65536\n    Gbits/sec   QUIC | TCP     QUIC | TCP     QUIC | TCP     QUIC | TCP\n    ────────────────────────────────────────────────────────────────────\n    mtu:1500    3.09 | 4.59    4.46 | 14.2    5.07 | 21.3    5.18 | 23.9\n    ────────────────────────────────────────────────────────────────────\n    mtu:9000    4.60 | 4.65    8.41 | 14.0    11.3 | 28.9    13.5 | 39.2\n\n\n  The performance gap between QUIC and kTLS may be attributed to:\n\n  - The absence of Generic Segmentation Offload (GSO) for QUIC.\n  - An additional data copy on the transmission (TX) path.\n  - Extra encryption required for header protection in QUIC.\n  - A longer header length for the stream data in QUIC.\n\nPatches\n=======\n\nNote: This implementation is organized into five parts and submitted across\ntwo patchsets for review. This patchset includes Parts 1–2, while Parts 3–5\nwill be submitted in a subsequent patchset. For complete series, see [9].\n\n1. Infrastructure (2):\n\n  net: define IPPROTO_QUIC and SOL_QUIC constants\n  net: build socket infrastructure for QUIC protocol\n\n2. Subcomponents (13):\n\n  quic: provide common utilities and data structures\n  quic: provide family ops for address and protocol\n  quic: provide quic.h header files for kernel and userspace\n  quic: add stream management\n  quic: add connection id management\n  quic: add path management\n  quic: add congestion control\n  quic: add packet number space\n  quic: add crypto key derivation and installation\n  quic: add crypto packet encryption and decryption\n  quic: add timer management\n  quic: add packet builder base\n  quic: add packet parser base\n\n3. Data Processing (8):\n\n  quic: add frame encoder and decoder base\n  quic: implement outqueue transmission and flow control\n  quic: implement outqueue sack and retransmission\n  quic: implement inqueue receiving and flow control\n  quic: implement frame creation functions\n  quic: implement frame processing functions\n  quic: implement packet creation functions\n  quic: implement packet processing functions\n\n4. Socket APIs (6):\n\n  quic: support bind/listen/connect/accept/close()\n  quic: support sendmsg() and recvmsg()\n  quic: support socket options related to interaction after handshake\n  quic: support socket options related to settings prior to handshake\n  quic: support socket options related to setup during handshake\n  quic: support socket ioctls and socket dump via procfs\n\n5. Documentation and Selftests (3):\n\n  Documentation: describe QUIC protocol interface in quic.rst\n  quic: create sample test using handshake APIs for kernel consumers\n  selftests: net: add tests for QUIC protocol\n\nNotice: The QUIC module is currently labeled as \"EXPERIMENTAL\".\n\nAll contributors are recognized in the respective patches with the tag of\n'Signed-off-by:'. Special thanks to Moritz Buhl and Stefan Metzmacher whose\npractical use cases and insightful feedback have been instrumental in\nshaping the design and advancing the development.\n\nReferences\n==========\n\n[1]  https://datatracker.ietf.org/doc/html/draft-lxin-quic-socket-apis\n[2]  https://github.com/oracle/ktls-utils\n[3]  https://github.com/lxin/quic\n[4]  https://gitlab.com/samba-team/samba/-/merge_requests/4019\n[5]  https://github.com/moritzbuhl/curl/tree/linux_curl\n[6]  https://github.com/moritzbuhl/httpd-portable\n[7]  https://github.com/quic-interop/quic-interop-runner\n[8]  https://github.com/lxin/iperf\n[9]  https://github.com/lxin/net-next/commits/quic/\n[10] https://www.nntb.no/~dreibh/netperfmeter/\n\nChanges in v2-v11: See individual patch changelogs for details.\n\nXin Long (15):\n  net: define IPPROTO_QUIC and SOL_QUIC constants\n  net: build socket infrastructure for QUIC protocol\n  quic: provide common utilities and data structures\n  quic: provide family ops for address and protocol\n  quic: provide quic.h header files for kernel and userspace\n  quic: add stream management\n  quic: add connection id management\n  quic: add path management\n  quic: add congestion control\n  quic: add packet number space\n  quic: add crypto key derivation and installation\n  quic: add crypto packet encryption and decryption\n  quic: add timer management\n  quic: add packet builder base\n  quic: add packet parser base\n\n Documentation/networking/ip-sysctl.rst |   39 +\n MAINTAINERS                            |    9 +\n include/linux/quic.h                   |   22 +\n include/linux/socket.h                 |    1 +\n include/uapi/linux/in.h                |    2 +\n include/uapi/linux/quic.h              |  237 +++++\n net/Kconfig                            |    1 +\n net/Makefile                           |    1 +\n net/quic/Kconfig                       |   36 +\n net/quic/Makefile                      |    9 +\n net/quic/common.c                      |  564 +++++++++++\n net/quic/common.h                      |  212 +++++\n net/quic/cong.c                        |  314 ++++++\n net/quic/cong.h                        |  129 +++\n net/quic/connid.c                      |  249 +++++\n net/quic/connid.h                      |  182 ++++\n net/quic/crypto.c                      | 1204 ++++++++++++++++++++++++\n net/quic/crypto.h                      |   92 ++\n net/quic/family.c                      |  402 ++++++++\n net/quic/family.h                      |   39 +\n net/quic/packet.c                      |  873 +++++++++++++++++\n net/quic/packet.h                      |  125 +++\n net/quic/path.c                        |  560 +++++++++++\n net/quic/path.h                        |  186 ++++\n net/quic/pnspace.c                     |  250 +++++\n net/quic/pnspace.h                     |  157 +++\n net/quic/protocol.c                    |  418 ++++++++\n net/quic/protocol.h                    |   63 ++\n net/quic/socket.c                      |  456 +++++++++\n net/quic/socket.h                      |  209 ++++\n net/quic/stream.c                      |  444 +++++++++\n net/quic/stream.h                      |  133 +++\n net/quic/timer.c                       |  165 ++++\n net/quic/timer.h                       |   47 +\n usr/include/Makefile                   |    1 +\n 35 files changed, 7831 insertions(+)\n create mode 100644 include/linux/quic.h\n create mode 100644 include/uapi/linux/quic.h\n create mode 100644 net/quic/Kconfig\n create mode 100644 net/quic/Makefile\n create mode 100644 net/quic/common.c\n create mode 100644 net/quic/common.h\n create mode 100644 net/quic/cong.c\n create mode 100644 net/quic/cong.h\n create mode 100644 net/quic/connid.c\n create mode 100644 net/quic/connid.h\n create mode 100644 net/quic/crypto.c\n create mode 100644 net/quic/crypto.h\n create mode 100644 net/quic/family.c\n create mode 100644 net/quic/family.h\n create mode 100644 net/quic/packet.c\n create mode 100644 net/quic/packet.h\n create mode 100644 net/quic/path.c\n create mode 100644 net/quic/path.h\n create mode 100644 net/quic/pnspace.c\n create mode 100644 net/quic/pnspace.h\n create mode 100644 net/quic/protocol.c\n create mode 100644 net/quic/protocol.h\n create mode 100644 net/quic/socket.c\n create mode 100644 net/quic/socket.h\n create mode 100644 net/quic/stream.c\n create mode 100644 net/quic/stream.h\n create mode 100644 net/quic/timer.c\n create mode 100644 net/quic/timer.h"}