From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EFC5C433B4 for ; Thu, 13 May 2021 07:05:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 62AB26142C for ; Thu, 13 May 2021 07:05:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231563AbhEMHGn (ORCPT ); Thu, 13 May 2021 03:06:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:43747 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231478AbhEMHG1 (ORCPT ); Thu, 13 May 2021 03:06:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1620889516; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2QoN/qYWPKdNHCNDeNjopVzVWXCp3rw9QUNzkAPeIuY=; b=KljcdESNZ4EZDrlmI7upj2HbZdM+L1lSpILceqLOpJWZeq1PiiXzj0IUANd0y2N7CAyduM 9Y89AJucbdtxZs2/ZZV4VT7MepX5DwOxyAX/u+oX7627zDkJFQbYELxvsZfp/6Ph0dfyC/ 2gDXYK4lc8MDrSh7/VFxHlPNiU/a8z0= Received: from mail-lf1-f71.google.com (mail-lf1-f71.google.com [209.85.167.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-309-_1ENoNw0MO6Ei7ZJwgWc6g-1; Thu, 13 May 2021 03:05:13 -0400 X-MC-Unique: _1ENoNw0MO6Ei7ZJwgWc6g-1 Received: by mail-lf1-f71.google.com with SMTP id p10-20020a19f10a0000b02901d675ef8fb8so4767074lfh.16 for ; Thu, 13 May 2021 00:05:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=2QoN/qYWPKdNHCNDeNjopVzVWXCp3rw9QUNzkAPeIuY=; b=hn5of8z9HCR+p9Qh8N5CvoVfynusriv3iTDTQH913wTPib7iHt9MKsYoFXzUhcuEtR 8wgvGiL+vSi8Yt4XCI2pNCOO51ggCu4tV2oItTdrKnmzGvUA5M3hAhCsFVggoEEPNkLN P37OEnN3pgnGATzQYcS2s89CrzNlmNKNbG8Iia+Fr2tmmqeD3a7U9418DW4zFnB1Lhjn TGfUOhp9muePJ4XDUcPRlnJLy6mM/FrVSwU6FhKaKEs+MJs2KnMSrjr0pFwXlluVBIum RS9zQ1qsWfIOZCSp+m4UxALZ5+9NxPsT3M7QIkxU1uBzeghH6IQlY/3fVkX/8sERs3ac YBag== X-Gm-Message-State: AOAM531n6wWLmHx9+s7ihNrToWPN2Cr/5tDmQ+JneO1rjtzWoVa9Y+84 P/B0kUJYn1LcbAsMANZLwlaQ/2c2IFFvFPznUcPPT0DL4W1vB3N//Xf/4mgVhhJhKYVtbfcPvwV o5HTMd3ZuuIZFJMprbSfSZeYzqr72Xqy5upUqIGJn X-Received: by 2002:a2e:9c91:: with SMTP id x17mr19966966lji.385.1620889511861; Thu, 13 May 2021 00:05:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypdffzA999uQ35jEl0/R02HLxiu1I8vdnbAGHp8O419AcpiLiofswnRNWgUrtRC0Q50wB0Pi8iuqmBbUuH3KE= X-Received: by 2002:a2e:9c91:: with SMTP id x17mr19966931lji.385.1620889511470; Thu, 13 May 2021 00:05:11 -0700 (PDT) MIME-Version: 1.0 References: <20210511044253.469034-1-yuri.benditovich@daynix.com> <20210511044253.469034-5-yuri.benditovich@daynix.com> <89759261-3a72-df6c-7a81-b7a48abfad44@redhat.com> In-Reply-To: From: Jason Wang Date: Thu, 13 May 2021 15:04:59 +0800 Message-ID: Subject: Re: [PATCH 4/4] tun: indicate support for USO feature To: Yuri Benditovich Cc: Yan Vugenfirer , davem , Jakub Kicinski , mst , netdev , linux-kernel , virtualization , willemdebruijn.kernel@gmail.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 13, 2021 at 12:36 PM Yuri Benditovich wrote: > > On Thu, May 13, 2021 at 5:07 AM Jason Wang wrote: > > > > On Wed, May 12, 2021 at 6:37 PM Yuri Benditovich > > wrote: > > > > > > On Wed, May 12, 2021 at 12:10 PM Jason Wang wro= te: > > > > > > > > On Wed, May 12, 2021 at 4:32 PM Yuri Benditovich > > > > wrote: > > > > > > > > > > On Wed, May 12, 2021 at 10:50 AM Jason Wang = wrote: > > > > > > > > > > > > On Wed, May 12, 2021 at 1:24 PM Yuri Benditovich > > > > > > wrote: > > > > > > > > > > > > > > On Wed, May 12, 2021 at 4:33 AM Jason Wang wrote: > > > > > > > > > > > > > > > > > > > > > > > > =E5=9C=A8 2021/5/11 =E4=B8=8B=E5=8D=884:33, Yuri Benditovic= h =E5=86=99=E9=81=93: > > > > > > > > > On Tue, May 11, 2021 at 9:50 AM Jason Wang wrote: > > > > > > > > >> > > > > > > > > >> =E5=9C=A8 2021/5/11 =E4=B8=8B=E5=8D=8812:42, Yuri Bendit= ovich =E5=86=99=E9=81=93: > > > > > > > > >>> Signed-off-by: Yuri Benditovich > > > > > > > > >>> --- > > > > > > > > >>> drivers/net/tun.c | 2 +- > > > > > > > > >>> 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > >>> > > > > > > > > >>> diff --git a/drivers/net/tun.c b/drivers/net/tun.c > > > > > > > > >>> index 84f832806313..a35054f9d941 100644 > > > > > > > > >>> --- a/drivers/net/tun.c > > > > > > > > >>> +++ b/drivers/net/tun.c > > > > > > > > >>> @@ -2812,7 +2812,7 @@ static int set_offload(struct tun= _struct *tun, unsigned long arg) > > > > > > > > >>> arg &=3D ~(TUN_F_TSO4|TUN_F_TSO6= ); > > > > > > > > >>> } > > > > > > > > >>> > > > > > > > > >>> - arg &=3D ~TUN_F_UFO; > > > > > > > > >>> + arg &=3D ~(TUN_F_UFO|TUN_F_USO); > > > > > > > > >> > > > > > > > > >> It looks to me kernel doesn't use "USO", so TUN_F_UDP_GS= O_L4 is a better > > > > > > > > >> name for this > > > > > > > > > No problem, I can change it in v2 > > > > > > > > > > > > > > > > > > and I guess we should toggle NETIF_F_UDP_GSO_l4 here? > > > > > > > > > > > > > > > > > > No, we do not, because this indicates only the fact that = the guest can > > > > > > > > > send large UDP packets and have them splitted to UDP segm= ents. > > > > > > > > > > > > > > > > > > > > > > > > Actually the reverse. The set_offload() controls the tuntap= TX path > > > > > > > > (guest RX path). > > > > > > > > > > > > > > The set_offloads does 2 things: > > > > > > > 1. At the initialization time qemu probes set_offload(somethi= ng) to > > > > > > > check which features are supported by TAP/TUN. > > > > > > > > > > > > Note that the probing is used for guest RX features not host RX= . > > > > > > > > > > It looks like the hidden assumption (till now) is that if some fe= ature > > > > > is present - it exists simultaneously for host and guest. > > > > > See QEMU get_features: if the TAP/TUN does not have UFO both HOST= and > > > > > GUEST FEATURES are cleared. > > > > > > > > Kind of, actually the assumption is: if a guest feature > > > > (VIRTIO_NET_F_GUEST_XXX) is support, the corresponding host feature > > > > (VIRTIO_NET_F_HOST_XXX) is also supported. > > > > > > So nothing tells us that the TUNSETOFFLOAD is going to set GUEST offl= oads. > > > From if_tun.h > > > #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed pack= ets. */ > > > #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets = */ > > > #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets = */ > > > #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ > > > #define TUN_F_UFO 0x10 /* I can handle UFO packets */ > > > > Yes, that's why I replied in another thread to say that there's no way > > to refuse GSO packets from userspace, even if TUN_F_XXX is not set via > > tun_set_offload(). > > > > E.g you can disable sending GSO packets to guests but you can't reject > > GSO packets from guest/userspace. > > We agree here. > Sorry for being unclear. I meant following: > According to the comment the TUN_F_CSUM is a _host_ capability. > According to the comment the TUN_F_UFO is a _guest_ capability. > > But surprisingly when TUN receives TUN_F_UFO it does not propagate it > anywhere, there is no corresponding NETIF flag. (It looks like I drop the community and other ccs accidentally, adding them back and sorry) Actually, there is one, NETIF_F_GSO_UDP. Kernel used to have NETIF_F_UFO, but it was removed due to bugs and the lack of real hardware support. Then we found it breaks uABI, so Willem tries to make it appear for userspace again, and then it was renamed to NETIF_F_GSO_UDP. But I think it's a bug that we don't proporate TUN_F_UFO to NETIF flag, this is a must for the driver that doesn't support VIRTIO_NET_F_GUEST_UFO. I just try to disable all offloads and mrg_rxbuf, then netperf UDP_STREAM from host to guest gives me bad length packet in the guest. Willem, I think we probably need to fix this. > So in fact TUN_F_UFO is processed by the TUN/TAP exactly as a host capabi= lity. > > > > > > > > > So, let's write > > > > > > #define TUN_F_UDP_L4TX 0x20 /* You can send me large UDP pac= kets */ > > > > So if we stick to the assumption "if a guest feature is supported, the > > corresponding host feature is supported". There's no need for this. > > And I think it's the most clean way. > > My personal opinion is that it is extremely wrong to extend such an > unobvious assumption to each new feature. This results in inconsistency with other GSO/CSUM flags. And will complicate the uAPI (two flags, one for RX another for TX). Considering the current code works for many years, it's not worth bothering I think. > > > > > > #define TUN_F_UDP4_L4RX 0x40 /* I can coalesce UDPv4 segments *= / > > > #define TUN_F_UDP6_L4RX 0x80 /* I can coalesce UDPv6 segments */ > > > > Any value to coalesce UDP segments here? It's better to do it in the > > TX source (guest). > > Coalescing is a consent of the guest to receive packets bigger than MTU. > Otherwise (if the guest does not agree) the host must segment/fragment > packets before transmitting them to the guest. This looks like a different feature which is not necessarily known by guest= s? Kernel supports GRO which can coalesce packets. (It was not supported by TAP yet though). > It is not related to guest TX. > > For example, Windows guest is not able to handle large UDP packets > (this is not supported by the stack yet). In this case, the corresponding guest or host features will be disabled, and the kernel won't send those kinds of GSO packets to guests. > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2. Later it configures the guest RX path according to guest's= needs/capabilities > > > > > > > Typical initialization sequence is (in case the QEMU supports= USO feature): > > > > > > > > > > > > It also depends on whether the backend(TAP) has the support for= guest RX. > > > > > > > > > > In the code of TAP and TUN I do not see any "if the backend has t= he > > > > > support for guest RX". > > > > > > > > Yes, the detection is implied as you described above. > > > > > > > > > This is just the IOCTL and set of TUN_F_* bits. Their meaning is > > > > > defined in the comments. > > > > > > > > > > > > > > > > > > TAP/TUN set offload 11 (probe for UFO support) > > > > > > > TAP/TUN set offload 21 (probe for USO support) > > > > > > > TAP/TUN set offload 0 > > > > > > > ... > > > > > > > TAP/TUN set offload 7 (configuration of offloads according to= GUEST features) > > > > > > > > > > > > > > This series of patches is for VIRTIO_NET_F_HOST_USO only, vir= tio-net > > > > > > > features like VIRTIO_NET_F_GUEST_USO_(4/6/whatever) are not d= efined in > > > > > > > the spec yet. > > > > > > > > > > > > > > > > > > > I'm a little bit confused here. Consider you want to implement = guest > > > > > > TX so there's no need for any modification on the set_offload()= . > > > > > > > > > > I do not think so. Please correct me if I'm mistaken: > > > > > QEMU needs to indicate the HOST_USO feature (or not indicate). > > > > > How can QEMU know the kernel is able to support VIRTIO_NET_HDR_GS= O_UDP_L4? > > > > > > > > Ok, I finally get you idea. Thanks for the patience. > > > > > > > > But still one issue: Assume we implement VIRTIO_NET_F_HOST_USO. How > > > > could we add VIRTIO_NET_F_GUEST_USO in the future? Adding another T= UN > > > > flag for set_offload()? Seems unnecessary and inconsistency with > > > > current TUN flags. > > > > > > > > > > > > > > > > > > > > > I think we need to implement both directions at one time as wha= t has > > > > > > been partially done in this series: > > > > > > > > > > > > > > > > You actually suggest that we need to start from Linux virtio-net > > > > > driver and implement on it both TX and RX. > > > > > Our main area is virtio-win drivers and all the rest we do when w= e can. > > > > > Currently we have 2 WIP tasks related to Linux (virtio-net RSS an= d > > > > > libvirt RSS/eBPF) and (my feeling) we hardly can start with addit= ional > > > > > one. > > > > > > > > I can help for the linux driver if you wish. > > > > > > I understand. Probably I've made a mistake from the beginning: > > > At first stage I've prepared the spec change of what we need in hope > > > that this will be fast. > > > Probably the better way was to prepare RFC patches first then start > > > changing the spec. > > > > > > So the question is what to do now: > > > A) > > > Finalize patches for guest TX and respective QEMU patches > > > Prepare RFC patches for guest RX, get ack on them > > > Change the spec > > > Finalize patches for guest RX according to the spec > > > > > > B) > > > Reject the patches for guest TX > > > Prepare RFC patches for everything, get ack on them > > > Change the spec > > > Finalize patches for everything according to the spec > > > > > > I'm for A) of course :) > > > > I'm for B :) > > > > The reasons are: > > > > 1) keep the assumption of tun_set_offload() to simply the logic and > > compatibility > > 2) it's hard or tricky to touch guest TX path only (e.g the > > virtio_net_hdr_from_skb() is called in both RX and TX) > > I suspect there is _some_ misunderstanding here. > I did not touch virtio_net_hdr_from_skb at all. > Typo, actually I meant virtio_net_hdr_to_skb(). Thanks > > > > Thanks > > > > > > > > > > > > > Thanks > > > > > > > > > This is a reason why I've added to the virtio spec only HOST_USO = and > > > > > not GUEST_USO4/6. > > > > > UDP RSC (which is actually guest rx USO) is not available on Wind= ows > > > > > at the moment. > > > > > > > > > > > 1) set_offload() is for guest RX. > > > > > > 2) virtio_net_hdr_to_skb() is for both guest TX and guest RX. > > > > > > > > > > > > For testing, you can run VM2VM on the same host, and you will g= et > > > > > > everything tested. > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > > > When VIRTIO_NET_F_GUEST_XXX was not negotiated, the corresp= onding netdev > > > > > > > > features needs to be disabled. When host tries to send thos= e packets to > > > > > > > > guest, it needs to do software segmentation. > > > > > > > > > > > > > > > > See virtio_net_apply_guest_offloads(). > > > > > > > > > > > > > > > > There's currently no way (or not need) to prevent tuntap fr= om receiving > > > > > > > > GSO packets. > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> And how about macvtap? > > > > > > > > > We will check how to do that for macvtap. We will send a = separate > > > > > > > > > patch for macvtap or ask for advice. > > > > > > > > > > > > > > > > > >> Thanks > > > > > > > > >> > > > > > > > > >> > > > > > > > > >>> } > > > > > > > > >>> > > > > > > > > >>> /* This gives the user a way to test for new fea= tures in future by > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EFA0C433ED for ; Thu, 13 May 2021 07:05:22 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 25D1B61285 for ; Thu, 13 May 2021 07:05:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25D1B61285 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id DAADB40F94; Thu, 13 May 2021 07:05:21 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DL6rVleluzne; Thu, 13 May 2021 07:05:20 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTP id B47A740F8B; Thu, 13 May 2021 07:05:19 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 924B8C000D; Thu, 13 May 2021 07:05:19 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3ADF4C0001 for ; Thu, 13 May 2021 07:05:18 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 20A3040F94 for ; Thu, 13 May 2021 07:05:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MzBkgHJt2ZLa for ; Thu, 13 May 2021 07:05:16 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id 7756C40F8B for ; Thu, 13 May 2021 07:05:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1620889515; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2QoN/qYWPKdNHCNDeNjopVzVWXCp3rw9QUNzkAPeIuY=; b=RDZ16AnHPmiPy5LD3/MmqzQhvtnzI8CGnyNwRSVzYDJE9awRd8pgsGOWhiVehzWAoRaY0q wQRdz7S2oY70Rppqov97cKGF/r5O4eDHUElMF9BHW1ykd1WctgAJwZlyNayTdktE2ZotNE +4cOfeGuSsp4bPvLNH8lmsEx/HDX8Og= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-448-8yytrDp9ODWZmA5hXEg3dw-1; Thu, 13 May 2021 03:05:13 -0400 X-MC-Unique: 8yytrDp9ODWZmA5hXEg3dw-1 Received: by mail-lf1-f72.google.com with SMTP id m27-20020a05651202fbb02901d682245882so4738227lfq.1 for ; Thu, 13 May 2021 00:05:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=2QoN/qYWPKdNHCNDeNjopVzVWXCp3rw9QUNzkAPeIuY=; b=TDN9nHc+6xi3MTDywGo90fJ6X6OT2JgpqlEShfAH4aSTtSjQ6yQWlGxsQbyjKxjL2U 2PDC8kX57QhfZY5u/a32/tJbBPC1qU3xbOKa41NE8F57eOZh4p3Dgu0rgqN+V3N1Waje yfDz7TEllaTqt40Fjs3kjrESLBz7YO5GraG6bgYYPSnuy3hp47XaWq/bmsmuEnJ70pfu esMyfZUv65vl3vBTz07IODvShJdWYio+tN/GaUoN+quMwf7X2SD7f0gMqEG1ruc5JTDt WUvw8mDm5m7UbWOvLL73cR95bJv7WrL8effECApT+1uBciEs9GlMRMmupM8hCdPSqa9v PDxg== X-Gm-Message-State: AOAM531I2XweWRmkwOSM1UUDkpFtVoTfKS+dMcpkrK/SSi/HH0H813Ed z0zVfsRFPvDFX5NErPJAAMngvU+39+pJ2ajmz8hC1xgQWhyq8oPGrA7JggHHRBnkGImnxpIIHI3 +xXdk3FbL+KVCeAai2MnYwDAAviusQKbuIClX4U4J4wBXhnRTQu/UkTe5WQ== X-Received: by 2002:a2e:9c91:: with SMTP id x17mr19966953lji.385.1620889511761; Thu, 13 May 2021 00:05:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypdffzA999uQ35jEl0/R02HLxiu1I8vdnbAGHp8O419AcpiLiofswnRNWgUrtRC0Q50wB0Pi8iuqmBbUuH3KE= X-Received: by 2002:a2e:9c91:: with SMTP id x17mr19966931lji.385.1620889511470; Thu, 13 May 2021 00:05:11 -0700 (PDT) MIME-Version: 1.0 References: <20210511044253.469034-1-yuri.benditovich@daynix.com> <20210511044253.469034-5-yuri.benditovich@daynix.com> <89759261-3a72-df6c-7a81-b7a48abfad44@redhat.com> In-Reply-To: From: Jason Wang Date: Thu, 13 May 2021 15:04:59 +0800 Message-ID: Subject: Re: [PATCH 4/4] tun: indicate support for USO feature To: Yuri Benditovich Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: willemdebruijn.kernel@gmail.com, mst , netdev , linux-kernel , virtualization , Yan Vugenfirer , Jakub Kicinski , davem X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gVGh1LCBNYXkgMTMsIDIwMjEgYXQgMTI6MzYgUE0gWXVyaSBCZW5kaXRvdmljaAo8eXVyaS5i ZW5kaXRvdmljaEBkYXluaXguY29tPiB3cm90ZToKPgo+IE9uIFRodSwgTWF5IDEzLCAyMDIxIGF0 IDU6MDcgQU0gSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4gd3JvdGU6Cj4gPgo+ID4g T24gV2VkLCBNYXkgMTIsIDIwMjEgYXQgNjozNyBQTSBZdXJpIEJlbmRpdG92aWNoCj4gPiA8eXVy aS5iZW5kaXRvdmljaEBkYXluaXguY29tPiB3cm90ZToKPiA+ID4KPiA+ID4gT24gV2VkLCBNYXkg MTIsIDIwMjEgYXQgMTI6MTAgUE0gSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4gd3Jv dGU6Cj4gPiA+ID4KPiA+ID4gPiBPbiBXZWQsIE1heSAxMiwgMjAyMSBhdCA0OjMyIFBNIFl1cmkg QmVuZGl0b3ZpY2gKPiA+ID4gPiA8eXVyaS5iZW5kaXRvdmljaEBkYXluaXguY29tPiB3cm90ZToK PiA+ID4gPiA+Cj4gPiA+ID4gPiBPbiBXZWQsIE1heSAxMiwgMjAyMSBhdCAxMDo1MCBBTSBKYXNv biBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gT24gV2VkLCBNYXkgMTIsIDIwMjEgYXQgMToyNCBQTSBZdXJpIEJlbmRpdG92aWNoCj4gPiA+ ID4gPiA+IDx5dXJpLmJlbmRpdG92aWNoQGRheW5peC5jb20+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+ID4gT24gV2VkLCBNYXkgMTIsIDIwMjEgYXQgNDozMyBBTSBKYXNvbiBXYW5n IDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiA+ID4g5ZyoIDIwMjEvNS8xMSDkuIvljYg0OjMzLCBZdXJpIEJlbmRp dG92aWNoIOWGmemBkzoKPiA+ID4gPiA+ID4gPiA+ID4gT24gVHVlLCBNYXkgMTEsIDIwMjEgYXQg OTo1MCBBTSBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+ID4gPiA+ ID4gPiA+ID4+Cj4gPiA+ID4gPiA+ID4gPiA+PiDlnKggMjAyMS81LzExIOS4i+WNiDEyOjQyLCBZ dXJpIEJlbmRpdG92aWNoIOWGmemBkzoKPiA+ID4gPiA+ID4gPiA+ID4+PiBTaWduZWQtb2ZmLWJ5 OiBZdXJpIEJlbmRpdG92aWNoIDx5dXJpLmJlbmRpdG92aWNoQGRheW5peC5jb20+Cj4gPiA+ID4g PiA+ID4gPiA+Pj4gLS0tCj4gPiA+ID4gPiA+ID4gPiA+Pj4gICAgZHJpdmVycy9uZXQvdHVuLmMg fCAyICstCj4gPiA+ID4gPiA+ID4gPiA+Pj4gICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u KCspLCAxIGRlbGV0aW9uKC0pCj4gPiA+ID4gPiA+ID4gPiA+Pj4KPiA+ID4gPiA+ID4gPiA+ID4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwo+ID4g PiA+ID4gPiA+ID4gPj4+IGluZGV4IDg0ZjgzMjgwNjMxMy4uYTM1MDU0ZjlkOTQxIDEwMDY0NAo+ ID4gPiA+ID4gPiA+ID4gPj4+IC0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCj4gPiA+ID4gPiA+ID4g PiA+Pj4gKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKPiA+ID4gPiA+ID4gPiA+ID4+PiBAQCAtMjgx Miw3ICsyODEyLDcgQEAgc3RhdGljIGludCBzZXRfb2ZmbG9hZChzdHJ1Y3QgdHVuX3N0cnVjdCAq dHVuLCB1bnNpZ25lZCBsb25nIGFyZykKPiA+ID4gPiA+ID4gPiA+ID4+PiAgICAgICAgICAgICAg ICAgICAgICAgIGFyZyAmPSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7Cj4gPiA+ID4gPiA+ID4g PiA+Pj4gICAgICAgICAgICAgICAgfQo+ID4gPiA+ID4gPiA+ID4gPj4+Cj4gPiA+ID4gPiA+ID4g PiA+Pj4gLSAgICAgICAgICAgICBhcmcgJj0gflRVTl9GX1VGTzsKPiA+ID4gPiA+ID4gPiA+ID4+ PiArICAgICAgICAgICAgIGFyZyAmPSB+KFRVTl9GX1VGT3xUVU5fRl9VU08pOwo+ID4gPiA+ID4g PiA+ID4gPj4KPiA+ID4gPiA+ID4gPiA+ID4+IEl0IGxvb2tzIHRvIG1lIGtlcm5lbCBkb2Vzbid0 IHVzZSAiVVNPIiwgc28gVFVOX0ZfVURQX0dTT19MNCBpcyBhIGJldHRlcgo+ID4gPiA+ID4gPiA+ ID4gPj4gbmFtZSBmb3IgdGhpcwo+ID4gPiA+ID4gPiA+ID4gPiBObyBwcm9ibGVtLCBJIGNhbiBj aGFuZ2UgaXQgaW4gdjIKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gICBhbmQg SSBndWVzcyB3ZSBzaG91bGQgdG9nZ2xlIE5FVElGX0ZfVURQX0dTT19sNCBoZXJlPwo+ID4gPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBObywgd2UgZG8gbm90LCBiZWNhdXNlIHRoaXMg aW5kaWNhdGVzIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgZ3Vlc3QgY2FuCj4gPiA+ID4gPiA+ID4g PiA+IHNlbmQgbGFyZ2UgVURQIHBhY2tldHMgYW5kIGhhdmUgdGhlbSBzcGxpdHRlZCB0byBVRFAg c2VnbWVudHMuCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ IEFjdHVhbGx5IHRoZSByZXZlcnNlLiBUaGUgc2V0X29mZmxvYWQoKSBjb250cm9scyB0aGUgdHVu dGFwIFRYIHBhdGgKPiA+ID4gPiA+ID4gPiA+IChndWVzdCBSWCBwYXRoKS4KPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+IFRoZSBzZXRfb2ZmbG9hZHMgZG9lcyAyIHRoaW5nczoKPiA+ID4gPiA+ ID4gPiAxLiBBdCB0aGUgaW5pdGlhbGl6YXRpb24gdGltZSBxZW11IHByb2JlcyBzZXRfb2ZmbG9h ZChzb21ldGhpbmcpIHRvCj4gPiA+ID4gPiA+ID4gY2hlY2sgd2hpY2ggZmVhdHVyZXMgYXJlIHN1 cHBvcnRlZCBieSBUQVAvVFVOLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBOb3RlIHRoYXQgdGhl IHByb2JpbmcgaXMgdXNlZCBmb3IgZ3Vlc3QgUlggZmVhdHVyZXMgbm90IGhvc3QgUlguCj4gPiA+ ID4gPgo+ID4gPiA+ID4gSXQgbG9va3MgbGlrZSB0aGUgaGlkZGVuIGFzc3VtcHRpb24gKHRpbGwg bm93KSBpcyB0aGF0IGlmIHNvbWUgZmVhdHVyZQo+ID4gPiA+ID4gaXMgcHJlc2VudCAtIGl0IGV4 aXN0cyBzaW11bHRhbmVvdXNseSBmb3IgaG9zdCBhbmQgZ3Vlc3QuCj4gPiA+ID4gPiBTZWUgUUVN VSBnZXRfZmVhdHVyZXM6IGlmIHRoZSBUQVAvVFVOIGRvZXMgbm90IGhhdmUgVUZPIGJvdGggSE9T VCBhbmQKPiA+ID4gPiA+IEdVRVNUIEZFQVRVUkVTIGFyZSBjbGVhcmVkLgo+ID4gPiA+Cj4gPiA+ ID4gS2luZCBvZiwgYWN0dWFsbHkgdGhlIGFzc3VtcHRpb24gaXM6IGlmIGEgZ3Vlc3QgZmVhdHVy ZQo+ID4gPiA+IChWSVJUSU9fTkVUX0ZfR1VFU1RfWFhYKSBpcyBzdXBwb3J0LCB0aGUgY29ycmVz cG9uZGluZyBob3N0IGZlYXR1cmUKPiA+ID4gPiAoVklSVElPX05FVF9GX0hPU1RfWFhYKSBpcyBh bHNvIHN1cHBvcnRlZC4KPiA+ID4KPiA+ID4gU28gbm90aGluZyB0ZWxscyB1cyB0aGF0IHRoZSBU VU5TRVRPRkZMT0FEIGlzIGdvaW5nIHRvIHNldCBHVUVTVCBvZmZsb2Fkcy4KPiA+ID4gRnJvbSBp Zl90dW4uaAo+ID4gPiAjZGVmaW5lIFRVTl9GX0NTVU0gICAgICAweDAxICAgIC8qIFlvdSBjYW4g aGFuZCBtZSB1bmNoZWNrc3VtbWVkIHBhY2tldHMuICovCj4gPiA+ICNkZWZpbmUgVFVOX0ZfVFNP NCAgICAgIDB4MDIgICAgLyogSSBjYW4gaGFuZGxlIFRTTyBmb3IgSVB2NCBwYWNrZXRzICovCj4g PiA+ICNkZWZpbmUgVFVOX0ZfVFNPNiAgICAgIDB4MDQgICAgLyogSSBjYW4gaGFuZGxlIFRTTyBm b3IgSVB2NiBwYWNrZXRzICovCj4gPiA+ICNkZWZpbmUgVFVOX0ZfVFNPX0VDTiAgIDB4MDggICAg LyogSSBjYW4gaGFuZGxlIFRTTyB3aXRoIEVDTiBiaXRzLiAqLwo+ID4gPiAjZGVmaW5lIFRVTl9G X1VGTyAgICAgICAweDEwICAgIC8qIEkgY2FuIGhhbmRsZSBVRk8gcGFja2V0cyAqLwo+ID4KPiA+ IFllcywgdGhhdCdzIHdoeSBJIHJlcGxpZWQgaW4gYW5vdGhlciB0aHJlYWQgdG8gc2F5IHRoYXQg dGhlcmUncyBubyB3YXkKPiA+IHRvIHJlZnVzZSBHU08gcGFja2V0cyBmcm9tIHVzZXJzcGFjZSwg ZXZlbiBpZiBUVU5fRl9YWFggaXMgbm90IHNldCB2aWEKPiA+IHR1bl9zZXRfb2ZmbG9hZCgpLgo+ ID4KPiA+IEUuZyB5b3UgY2FuIGRpc2FibGUgc2VuZGluZyBHU08gcGFja2V0cyB0byBndWVzdHMg YnV0IHlvdSBjYW4ndCByZWplY3QKPiA+IEdTTyBwYWNrZXRzIGZyb20gZ3Vlc3QvdXNlcnNwYWNl Lgo+Cj4gV2UgYWdyZWUgaGVyZS4KPiBTb3JyeSBmb3IgYmVpbmcgdW5jbGVhci4gSSBtZWFudCBm b2xsb3dpbmc6Cj4gQWNjb3JkaW5nIHRvIHRoZSBjb21tZW50IHRoZSBUVU5fRl9DU1VNIGlzIGEg X2hvc3RfIGNhcGFiaWxpdHkuCj4gQWNjb3JkaW5nIHRvIHRoZSBjb21tZW50IHRoZSBUVU5fRl9V Rk8gaXMgYSBfZ3Vlc3RfIGNhcGFiaWxpdHkuCj4KPiBCdXQgc3VycHJpc2luZ2x5IHdoZW4gVFVO IHJlY2VpdmVzIFRVTl9GX1VGTyBpdCBkb2VzIG5vdCBwcm9wYWdhdGUgaXQKPiBhbnl3aGVyZSwg dGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBORVRJRiBmbGFnLgoKKEl0IGxvb2tzIGxpa2UgSSBk cm9wIHRoZSBjb21tdW5pdHkgYW5kIG90aGVyIGNjcyBhY2NpZGVudGFsbHksIGFkZGluZwp0aGVt IGJhY2sgYW5kIHNvcnJ5KQoKQWN0dWFsbHksIHRoZXJlIGlzIG9uZSwgTkVUSUZfRl9HU09fVURQ LgoKS2VybmVsIHVzZWQgdG8gaGF2ZSBORVRJRl9GX1VGTywgYnV0IGl0IHdhcyByZW1vdmVkIGR1 ZSB0byBidWdzIGFuZAp0aGUgbGFjayBvZiByZWFsIGhhcmR3YXJlIHN1cHBvcnQuIFRoZW4gd2Ug Zm91bmQgaXQgYnJlYWtzIHVBQkksIHNvCldpbGxlbSB0cmllcyB0byBtYWtlIGl0IGFwcGVhciBm b3IgdXNlcnNwYWNlIGFnYWluLCBhbmQgdGhlbiBpdCB3YXMKcmVuYW1lZCB0byBORVRJRl9GX0dT T19VRFAuCgpCdXQgSSB0aGluayBpdCdzIGEgYnVnIHRoYXQgd2UgZG9uJ3QgcHJvcG9yYXRlIFRV Tl9GX1VGTyB0byBORVRJRgpmbGFnLCB0aGlzIGlzIGEgbXVzdCBmb3IgdGhlIGRyaXZlciB0aGF0 IGRvZXNuJ3Qgc3VwcG9ydApWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPLiBJIGp1c3QgdHJ5IHRvIGRp c2FibGUgYWxsIG9mZmxvYWRzIGFuZAptcmdfcnhidWYsIHRoZW4gbmV0cGVyZiBVRFBfU1RSRUFN IGZyb20gaG9zdCB0byBndWVzdCBnaXZlcyBtZSBiYWQKbGVuZ3RoIHBhY2tldCBpbiB0aGUgZ3Vl c3QuCgpXaWxsZW0sIEkgdGhpbmsgd2UgcHJvYmFibHkgbmVlZCB0byBmaXggdGhpcy4KCgo+IFNv IGluIGZhY3QgVFVOX0ZfVUZPIGlzIHByb2Nlc3NlZCBieSB0aGUgVFVOL1RBUCBleGFjdGx5IGFz IGEgaG9zdCBjYXBhYmlsaXR5Lgo+Cj4gPgo+ID4gPgo+ID4gPiBTbywgbGV0J3Mgd3JpdGUKPiA+ ID4KPiA+ID4gI2RlZmluZSBUVU5fRl9VRFBfTDRUWCAgICAgICAweDIwICAgIC8qIFlvdSBjYW4g c2VuZCBtZSBsYXJnZSBVRFAgcGFja2V0cyAqLwo+ID4KPiA+IFNvIGlmIHdlIHN0aWNrIHRvIHRo ZSBhc3N1bXB0aW9uICJpZiBhIGd1ZXN0IGZlYXR1cmUgaXMgc3VwcG9ydGVkLCB0aGUKPiA+IGNv cnJlc3BvbmRpbmcgaG9zdCBmZWF0dXJlIGlzIHN1cHBvcnRlZCIuIFRoZXJlJ3Mgbm8gbmVlZCBm b3IgdGhpcy4KPiA+IEFuZCBJIHRoaW5rIGl0J3MgdGhlIG1vc3QgY2xlYW4gd2F5Lgo+Cj4gTXkg cGVyc29uYWwgb3BpbmlvbiBpcyB0aGF0IGl0IGlzIGV4dHJlbWVseSB3cm9uZyB0byBleHRlbmQg c3VjaCBhbgo+IHVub2J2aW91cyBhc3N1bXB0aW9uIHRvIGVhY2ggbmV3IGZlYXR1cmUuCgpUaGlz IHJlc3VsdHMgaW4gaW5jb25zaXN0ZW5jeSB3aXRoIG90aGVyIEdTTy9DU1VNIGZsYWdzLiBBbmQg d2lsbApjb21wbGljYXRlIHRoZSB1QVBJICh0d28gZmxhZ3MsIG9uZSBmb3IgUlggYW5vdGhlciBm b3IgVFgpLgoKQ29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29kZSB3b3JrcyBmb3IgbWFueSB5ZWFy cywgaXQncyBub3Qgd29ydGgKYm90aGVyaW5nIEkgdGhpbmsuCgo+Cj4gPgo+ID4gPiAjZGVmaW5l IFRVTl9GX1VEUDRfTDRSWCAgICAgMHg0MCAgIC8qIEkgY2FuIGNvYWxlc2NlIFVEUHY0IHNlZ21l bnRzICovCj4gPiA+ICNkZWZpbmUgVFVOX0ZfVURQNl9MNFJYICAgICAweDgwICAvKiBJIGNhbiBj b2FsZXNjZSBVRFB2NiBzZWdtZW50cyAqLwo+ID4KPiA+IEFueSB2YWx1ZSB0byBjb2FsZXNjZSBV RFAgc2VnbWVudHMgaGVyZT8gSXQncyBiZXR0ZXIgdG8gZG8gaXQgaW4gdGhlCj4gPiBUWCBzb3Vy Y2UgKGd1ZXN0KS4KPgo+IENvYWxlc2NpbmcgaXMgYSBjb25zZW50IG9mIHRoZSBndWVzdCB0byBy ZWNlaXZlIHBhY2tldHMgYmlnZ2VyIHRoYW4gTVRVLgo+IE90aGVyd2lzZSAoaWYgdGhlIGd1ZXN0 IGRvZXMgbm90IGFncmVlKSB0aGUgaG9zdCBtdXN0IHNlZ21lbnQvZnJhZ21lbnQKPiBwYWNrZXRz IGJlZm9yZSB0cmFuc21pdHRpbmcgdGhlbSB0byB0aGUgZ3Vlc3QuCgpUaGlzIGxvb2tzIGxpa2Ug YSBkaWZmZXJlbnQgZmVhdHVyZSB3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkga25vd24gYnkgZ3Vl c3RzPwoKS2VybmVsIHN1cHBvcnRzIEdSTyB3aGljaCBjYW4gY29hbGVzY2UgcGFja2V0cy4gKEl0 IHdhcyBub3Qgc3VwcG9ydGVkCmJ5IFRBUCB5ZXQgdGhvdWdoKS4KCgo+IEl0IGlzIG5vdCByZWxh dGVkIHRvIGd1ZXN0IFRYLgo+Cj4gRm9yIGV4YW1wbGUsIFdpbmRvd3MgZ3Vlc3QgaXMgbm90IGFi bGUgdG8gaGFuZGxlIGxhcmdlIFVEUCBwYWNrZXRzCj4gKHRoaXMgaXMgbm90IHN1cHBvcnRlZCBi eSB0aGUgc3RhY2sgeWV0KS4KCkluIHRoaXMgY2FzZSwgdGhlIGNvcnJlc3BvbmRpbmcgZ3Vlc3Qg b3IgaG9zdCBmZWF0dXJlcyB3aWxsIGJlCmRpc2FibGVkLCBhbmQgdGhlIGtlcm5lbCB3b24ndCBz ZW5kIHRob3NlIGtpbmRzIG9mIEdTTyBwYWNrZXRzIHRvCmd1ZXN0cy4KCj4KPiA+Cj4gPiA+Cj4g PiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gMi4gTGF0ZXIgaXQgY29u ZmlndXJlcyB0aGUgZ3Vlc3QgUlggcGF0aCBhY2NvcmRpbmcgdG8gZ3Vlc3QncyBuZWVkcy9jYXBh YmlsaXRpZXMKPiA+ID4gPiA+ID4gPiBUeXBpY2FsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlz IChpbiBjYXNlIHRoZSBRRU1VIHN1cHBvcnRzIFVTTyBmZWF0dXJlKToKPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gSXQgYWxzbyBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGJhY2tlbmQoVEFQKSBoYXMg dGhlIHN1cHBvcnQgZm9yIGd1ZXN0IFJYLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEluIHRoZSBjb2Rl IG9mIFRBUCBhbmQgVFVOIEkgZG8gbm90IHNlZSBhbnkgImlmIHRoZSBiYWNrZW5kIGhhcyB0aGUK PiA+ID4gPiA+IHN1cHBvcnQgZm9yIGd1ZXN0IFJYIi4KPiA+ID4gPgo+ID4gPiA+IFllcywgdGhl IGRldGVjdGlvbiBpcyBpbXBsaWVkIGFzIHlvdSBkZXNjcmliZWQgYWJvdmUuCj4gPiA+ID4KPiA+ ID4gPiA+IFRoaXMgaXMganVzdCB0aGUgSU9DVEwgYW5kIHNldCBvZiBUVU5fRl8qIGJpdHMuIFRo ZWlyIG1lYW5pbmcgaXMKPiA+ID4gPiA+IGRlZmluZWQgaW4gdGhlIGNvbW1lbnRzLgo+ID4gPiA+ ID4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBUQVAvVFVOIHNldCBvZmZsb2FkIDExIChwcm9i ZSBmb3IgVUZPIHN1cHBvcnQpCj4gPiA+ID4gPiA+ID4gVEFQL1RVTiBzZXQgb2ZmbG9hZCAyMSAo cHJvYmUgZm9yIFVTTyBzdXBwb3J0KQo+ID4gPiA+ID4gPiA+IFRBUC9UVU4gc2V0IG9mZmxvYWQg MAo+ID4gPiA+ID4gPiA+IC4uLgo+ID4gPiA+ID4gPiA+IFRBUC9UVU4gc2V0IG9mZmxvYWQgNyAo Y29uZmlndXJhdGlvbiBvZiBvZmZsb2FkcyBhY2NvcmRpbmcgdG8gR1VFU1QgZmVhdHVyZXMpCj4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBUaGlzIHNlcmllcyBvZiBwYXRjaGVzIGlzIGZvciBW SVJUSU9fTkVUX0ZfSE9TVF9VU08gb25seSwgdmlydGlvLW5ldAo+ID4gPiA+ID4gPiA+IGZlYXR1 cmVzIGxpa2UgVklSVElPX05FVF9GX0dVRVNUX1VTT18oNC82L3doYXRldmVyKSBhcmUgbm90IGRl ZmluZWQgaW4KPiA+ID4gPiA+ID4gPiB0aGUgc3BlYyB5ZXQuCj4gPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gSSdtIGEgbGl0dGxlIGJpdCBjb25mdXNlZCBoZXJlLiBDb25zaWRl ciB5b3Ugd2FudCB0byBpbXBsZW1lbnQgZ3Vlc3QKPiA+ID4gPiA+ID4gVFggc28gdGhlcmUncyBu byBuZWVkIGZvciBhbnkgbW9kaWZpY2F0aW9uIG9uIHRoZSBzZXRfb2ZmbG9hZCgpLgo+ID4gPiA+ ID4KPiA+ID4gPiA+IEkgZG8gbm90IHRoaW5rIHNvLiBQbGVhc2UgY29ycmVjdCBtZSBpZiBJJ20g bWlzdGFrZW46Cj4gPiA+ID4gPiBRRU1VIG5lZWRzIHRvIGluZGljYXRlIHRoZSBIT1NUX1VTTyBm ZWF0dXJlIChvciBub3QgaW5kaWNhdGUpLgo+ID4gPiA+ID4gSG93IGNhbiBRRU1VIGtub3cgdGhl IGtlcm5lbCBpcyBhYmxlIHRvIHN1cHBvcnQgVklSVElPX05FVF9IRFJfR1NPX1VEUF9MND8KPiA+ ID4gPgo+ID4gPiA+IE9rLCBJIGZpbmFsbHkgZ2V0IHlvdSBpZGVhLiBUaGFua3MgZm9yIHRoZSBw YXRpZW5jZS4KPiA+ID4gPgo+ID4gPiA+IEJ1dCBzdGlsbCBvbmUgaXNzdWU6IEFzc3VtZSB3ZSBp bXBsZW1lbnQgVklSVElPX05FVF9GX0hPU1RfVVNPLiBIb3cKPiA+ID4gPiBjb3VsZCB3ZSBhZGQg VklSVElPX05FVF9GX0dVRVNUX1VTTyBpbiB0aGUgZnV0dXJlPyBBZGRpbmcgYW5vdGhlciBUVU4K PiA+ID4gPiBmbGFnIGZvciBzZXRfb2ZmbG9hZCgpPyBTZWVtcyB1bm5lY2Vzc2FyeSBhbmQgaW5j b25zaXN0ZW5jeSB3aXRoCj4gPiA+ID4gY3VycmVudCBUVU4gZmxhZ3MuCj4gPiA+ID4KPiA+ID4g PiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEkgdGhpbmsgd2UgbmVlZCB0byBpbXBsZW1lbnQg Ym90aCBkaXJlY3Rpb25zIGF0IG9uZSB0aW1lIGFzIHdoYXQgaGFzCj4gPiA+ID4gPiA+IGJlZW4g cGFydGlhbGx5IGRvbmUgaW4gdGhpcyBzZXJpZXM6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4g PiA+ID4gWW91IGFjdHVhbGx5IHN1Z2dlc3QgdGhhdCB3ZSBuZWVkIHRvIHN0YXJ0IGZyb20gTGlu dXggdmlydGlvLW5ldAo+ID4gPiA+ID4gZHJpdmVyIGFuZCBpbXBsZW1lbnQgb24gaXQgYm90aCBU WCBhbmQgUlguCj4gPiA+ID4gPiBPdXIgbWFpbiBhcmVhIGlzIHZpcnRpby13aW4gZHJpdmVycyBh bmQgYWxsIHRoZSByZXN0IHdlIGRvIHdoZW4gd2UgY2FuLgo+ID4gPiA+ID4gQ3VycmVudGx5IHdl IGhhdmUgMiBXSVAgdGFza3MgcmVsYXRlZCB0byBMaW51eCAodmlydGlvLW5ldCBSU1MgYW5kCj4g PiA+ID4gPiBsaWJ2aXJ0IFJTUy9lQlBGKSBhbmQgKG15IGZlZWxpbmcpIHdlIGhhcmRseSBjYW4g c3RhcnQgd2l0aCBhZGRpdGlvbmFsCj4gPiA+ID4gPiBvbmUuCj4gPiA+ID4KPiA+ID4gPiBJIGNh biBoZWxwIGZvciB0aGUgbGludXggZHJpdmVyIGlmIHlvdSB3aXNoLgo+ID4gPgo+ID4gPiBJIHVu ZGVyc3RhbmQuIFByb2JhYmx5IEkndmUgbWFkZSBhIG1pc3Rha2UgZnJvbSB0aGUgYmVnaW5uaW5n Ogo+ID4gPiBBdCBmaXJzdCBzdGFnZSBJJ3ZlIHByZXBhcmVkIHRoZSBzcGVjIGNoYW5nZSBvZiB3 aGF0IHdlIG5lZWQgaW4gaG9wZQo+ID4gPiB0aGF0IHRoaXMgd2lsbCBiZSBmYXN0Lgo+ID4gPiBQ cm9iYWJseSB0aGUgYmV0dGVyIHdheSB3YXMgdG8gcHJlcGFyZSBSRkMgcGF0Y2hlcyBmaXJzdCB0 aGVuIHN0YXJ0Cj4gPiA+IGNoYW5naW5nIHRoZSBzcGVjLgo+ID4gPgo+ID4gPiBTbyB0aGUgcXVl c3Rpb24gaXMgd2hhdCB0byBkbyBub3c6Cj4gPiA+IEEpCj4gPiA+IEZpbmFsaXplIHBhdGNoZXMg Zm9yIGd1ZXN0IFRYIGFuZCByZXNwZWN0aXZlIFFFTVUgcGF0Y2hlcwo+ID4gPiBQcmVwYXJlIFJG QyBwYXRjaGVzIGZvciBndWVzdCBSWCwgZ2V0IGFjayBvbiB0aGVtCj4gPiA+IENoYW5nZSB0aGUg c3BlYwo+ID4gPiBGaW5hbGl6ZSBwYXRjaGVzIGZvciBndWVzdCBSWCBhY2NvcmRpbmcgdG8gdGhl IHNwZWMKPiA+ID4KPiA+ID4gQikKPiA+ID4gUmVqZWN0IHRoZSBwYXRjaGVzIGZvciBndWVzdCBU WAo+ID4gPiBQcmVwYXJlIFJGQyBwYXRjaGVzIGZvciBldmVyeXRoaW5nLCBnZXQgYWNrIG9uIHRo ZW0KPiA+ID4gQ2hhbmdlIHRoZSBzcGVjCj4gPiA+IEZpbmFsaXplIHBhdGNoZXMgZm9yIGV2ZXJ5 dGhpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjCj4gPiA+Cj4gPiA+IEknbSBmb3IgQSkgb2YgY291 cnNlIDopCj4gPgo+ID4gSSdtIGZvciBCIDopCj4gPgo+ID4gVGhlIHJlYXNvbnMgYXJlOgo+ID4K PiA+IDEpIGtlZXAgdGhlIGFzc3VtcHRpb24gb2YgdHVuX3NldF9vZmZsb2FkKCkgdG8gc2ltcGx5 IHRoZSBsb2dpYyBhbmQKPiA+IGNvbXBhdGliaWxpdHkKPiA+IDIpIGl0J3MgaGFyZCBvciB0cmlj a3kgdG8gdG91Y2ggZ3Vlc3QgVFggcGF0aCBvbmx5IChlLmcgdGhlCj4gPiB2aXJ0aW9fbmV0X2hk cl9mcm9tX3NrYigpIGlzIGNhbGxlZCBpbiBib3RoIFJYIGFuZCBUWCkKPgo+IEkgc3VzcGVjdCB0 aGVyZSBpcyBfc29tZV8gbWlzdW5kZXJzdGFuZGluZyBoZXJlLgo+IEkgZGlkIG5vdCB0b3VjaCB2 aXJ0aW9fbmV0X2hkcl9mcm9tX3NrYiBhdCBhbGwuCj4KClR5cG8sIGFjdHVhbGx5IEkgbWVhbnQg dmlydGlvX25ldF9oZHJfdG9fc2tiKCkuCgpUaGFua3MKCj4gPgo+ID4gVGhhbmtzCj4gPgo+ID4g Pgo+ID4gPiA+Cj4gPiA+ID4gVGhhbmtzCj4gPiA+ID4KPiA+ID4gPiA+IFRoaXMgaXMgYSByZWFz b24gd2h5IEkndmUgYWRkZWQgdG8gdGhlIHZpcnRpbyBzcGVjIG9ubHkgSE9TVF9VU08gYW5kCj4g PiA+ID4gPiBub3QgR1VFU1RfVVNPNC82Lgo+ID4gPiA+ID4gVURQIFJTQyAod2hpY2ggaXMgYWN0 dWFsbHkgZ3Vlc3QgcnggVVNPKSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKPiA+ID4gPiA+ IGF0IHRoZSBtb21lbnQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gPiAxKSBzZXRfb2ZmbG9hZCgpIGlz IGZvciBndWVzdCBSWC4KPiA+ID4gPiA+ID4gMikgdmlydGlvX25ldF9oZHJfdG9fc2tiKCkgaXMg Zm9yIGJvdGggZ3Vlc3QgVFggYW5kIGd1ZXN0IFJYLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBG b3IgdGVzdGluZywgeW91IGNhbiBydW4gVk0yVk0gb24gdGhlIHNhbWUgaG9zdCwgYW5kIHlvdSB3 aWxsIGdldAo+ID4gPiA+ID4gPiBldmVyeXRoaW5nIHRlc3RlZC4KPiA+ID4gPiA+ID4KPiA+ID4g PiA+ID4gVGhhbmtzCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4g V2hlbiBWSVJUSU9fTkVUX0ZfR1VFU1RfWFhYIHdhcyBub3QgbmVnb3RpYXRlZCwgdGhlIGNvcnJl c3BvbmRpbmcgbmV0ZGV2Cj4gPiA+ID4gPiA+ID4gPiBmZWF0dXJlcyBuZWVkcyB0byBiZSBkaXNh YmxlZC4gV2hlbiBob3N0IHRyaWVzIHRvIHNlbmQgdGhvc2UgcGFja2V0cyB0bwo+ID4gPiA+ID4g PiA+ID4gZ3Vlc3QsIGl0IG5lZWRzIHRvIGRvIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4KPiA+ID4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBTZWUgdmlydGlvX25ldF9hcHBseV9ndWVzdF9vZmZs b2FkcygpLgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFRoZXJlJ3MgY3VycmVudGx5 IG5vIHdheSAob3Igbm90IG5lZWQpIHRvIHByZXZlbnQgdHVudGFwIGZyb20gcmVjZWl2aW5nCj4g PiA+ID4gPiA+ID4gPiBHU08gcGFja2V0cy4KPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g PiBUaGFua3MKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gPj4gQW5kIGhvdyBhYm91dCBtYWN2dGFwPwo+ID4gPiA+ID4gPiA+ ID4gPiBXZSB3aWxsIGNoZWNrIGhvdyB0byBkbyB0aGF0IGZvciBtYWN2dGFwLiBXZSB3aWxsIHNl bmQgYSBzZXBhcmF0ZQo+ID4gPiA+ID4gPiA+ID4gPiBwYXRjaCBmb3IgbWFjdnRhcCBvciBhc2sg Zm9yIGFkdmljZS4KPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4+IFRoYW5rcwo+ ID4gPiA+ID4gPiA+ID4gPj4KPiA+ID4gPiA+ID4gPiA+ID4+Cj4gPiA+ID4gPiA+ID4gPiA+Pj4g ICAgICAgIH0KPiA+ID4gPiA+ID4gPiA+ID4+Pgo+ID4gPiA+ID4gPiA+ID4gPj4+ICAgICAgICAv KiBUaGlzIGdpdmVzIHRoZSB1c2VyIGEgd2F5IHRvIHRlc3QgZm9yIG5ldyBmZWF0dXJlcyBpbiBm dXR1cmUgYnkKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4KPiA+ID4g PiA+Cj4gPiA+ID4KPiA+ID4KPiA+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlv bkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlv bi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==