From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTP id D15985A02F1 for ; Fri, 3 May 2024 17:30:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714750214; 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=pxAP6btQirtwrbfYZL3NHlfgKUTZRH0hP4w2dHTAfb0=; b=JYwM6VxwkmxNAf/CadHkDQqqNbkM4JN10uZgc+O+92mcNuJ4+uJyx1olKAOtQYup/MJEpO QtDTvb4sPIGZsLzsiDi4lvmHNHln6tN9R8++6yXyD8DwLIyKsZgqsxKklZTI+f2mNJgUAX OjM4AdNszqfsBrNMS32l9vzp4bPZYZc= Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-193-OAsWuupMOzKgsyzEO6dcIw-1; Fri, 03 May 2024 11:30:13 -0400 X-MC-Unique: OAsWuupMOzKgsyzEO6dcIw-1 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-78ed2a710efso1132224085a.1 for ; Fri, 03 May 2024 08:30:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714750213; x=1715355013; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pxAP6btQirtwrbfYZL3NHlfgKUTZRH0hP4w2dHTAfb0=; b=fcr7YT6qVm9MZuMDI0kY74lEr+tAGGVYS4j6SUmyKN5GKnO3Za7wEzsOnLtyABOZ5G Pf2PQTPzhvDrzJZiUuUXJbANhyIpv8wfJMj10iloPxIkzUKs+4GRJeYlRZwxf+AcE7/E geqX4B4GRyITkrCTd3aVvxmK9DKeDYqk8WjSpcRWnL/Hx0txaTNsPamz5DEH1x+xdWlJ M8Mu+by2dAhcGnlYd3c3hSsDApjvU+DIDaiA2NqN9NwTPU3ZsoZH9tkt7n3pUNwVmqsH wWcYOMZPluiQTcDypn37e992/SwDNJ4rre+P63boMX2lVSWEgCku8sRJetWVBEjpi35Y SYnA== X-Gm-Message-State: AOJu0Yxs+feoI0x8Q8EocAJuphzffwyHKg7TBU8eNvU86yt3m1MqDjHP FPkPJNF0fsCMAySTeRPwIeKO7RnimfQOZYCDGkxmUtPutkZtPD02WIgdYCyaLqkr6GQ0hdLoMcT 4dfXsD3C8U3x4LRgJwwEfP0W4zkr3jDOMJZLXxjeW5kiBA3uUZQ== X-Received: by 2002:a05:620a:8007:b0:790:99d8:e6a with SMTP id ee7-20020a05620a800700b0079099d80e6amr3572502qkb.58.1714750212570; Fri, 03 May 2024 08:30:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHho4sB+3JbmgKH9QAJjBuyiWAZt4K1NYCYWx4c/fLyY3FNcRH2txoFhOBJaJHXRNmU1c3YUw== X-Received: by 2002:a05:620a:8007:b0:790:99d8:e6a with SMTP id ee7-20020a05620a800700b0079099d80e6amr3572439qkb.58.1714750211876; Fri, 03 May 2024 08:30:11 -0700 (PDT) Received: from [10.0.0.97] ([24.225.234.80]) by smtp.gmail.com with ESMTPSA id z8-20020a05620a100800b0079065de3c96sm1318959qkj.81.2024.05.03.08.30.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 03 May 2024 08:30:11 -0700 (PDT) Message-ID: Date: Fri, 3 May 2024 11:30:10 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH v2 2/2] tcp: allow retransmit when peer receive window is zero To: Stefano Brivio References: <20240501202839.3491885-1-jmaloy@redhat.com> <20240501202839.3491885-3-jmaloy@redhat.com> <20240503154316.001864a0@elisabeth> From: Jon Maloy In-Reply-To: <20240503154316.001864a0@elisabeth> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: FGKFQH3HCUFMOICE24SPXTA2CGF2CQBO X-Message-ID-Hash: FGKFQH3HCUFMOICE24SPXTA2CGF2CQBO X-MailFrom: jmaloy@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top, lvivier@redhat.com, dgibson@redhat.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDIwMjQtMDUtMDMgMDk6NDMsIFN0ZWZhbm8gQnJpdmlvIHdyb3RlOg0KPiBPbiBXZWQs ICAxIE1heSAyMDI0IDE2OjI4OjM5IC0wNDAwDQo+IEpvbiBNYWxveSA8am1hbG95QHJlZGhhdC5j b20+IHdyb3RlOg0KPg0KPj4gQSBidWcgaW4ga2VybmVsIFRDUCBtYXkgbGVhZCB0byBhIGRlYWRs b2NrIHdoZXJlIGEgemVybyB3aW5kb3cgaXMgc2VudA0KPj4gZnJvbSB0aGUgcGVlciwgd2hpbGUg aGUgaXMgdW5hYmxlIHRvIHNlbmQgb3V0IHdpbmRvdyB1cGRhdGVzIGV2ZW4gYWZ0ZXINCj4gcy9o ZS9pdC8NCnRoZXkgPyA7LSkNCj4NCj4+IHJlYWRzIGhhdmUgZnJlZWQgdXAgZW5vdWdoIGJ1ZmZl ciBzcGFjZSB0byBwZXJtaXQgYSBsYXJnZXIgd2luZG93Lg0KPj4gSW4gdGhpcyBzaXR1YXRpb24s IG5ldyB3aW5kb3cgYWR2ZXJ0aXNlbW50cyBmcm9tIHRoZSBwZWVyIGNhbiBvbmx5IGJlDQo+PiB0 cmlnZ2VyZWQgYnkgcGFja2V0cyBhcnJpdmluZyBmcm9tIHRoaXMgc2lkZS4NCj4+DQo+PiBIb3dl dmVyLCBzdWNoIHBhY2tldHMgYXJlIG5ldmVyIHNlbnQsIGJlY2F1c2UgdGhlIHplcm8td2luZG93 IGNvbmRpdGlvbg0KPj4gY3VycmVudGx5IHByZXZlbnRzIHRoaXMgc2lkZSBmcm9tIHNlbmRpbmcg b3V0IGFueSBwYWNrZXRzIHdoYXRzb2V2ZXINCj4+IHRvIHRoZSBwZWVyLg0KPj4NCj4+IFdlIG5v dGljZSB0aGF0IHRoZSBhYm92ZSBidWcgaXMgdHJpZ2dlcmVkICpvbmx5KiBhZnRlciB0aGUgcGVl ciBoYXMNCj4+IGRyb3BwZWQgYW4gYXJyaXZpbmcgcGFja2V0IGJlY2F1c2Ugb2Ygc2V2ZXJlIG1l bW9yeSBzcXVlZXplLCBhbmQgdGhhdCB3ZQ0KPj4gaGVuY2UgYWx3YXlzIGVudGVyIGEgcmV0cmFu c21pc3Npb24gc2l0dWF0aW9uIHdoZW4gdGhpcyBvY2N1cnMuDQo+IFRoaXMgaXMgY2xlYXJseSBh biBpc3N1ZSwgYnV0Og0KPg0KPj4gVGhpcw0KPj4gYWxzbyBtZWFucyB0aGF0IFJGQyA5MjkzIGlz IHZpb2xhdGVkLCBzaW5jZSB0aGUgemVyby1hZHZlcnRpc2VtZW50DQo+PiBzaHJpbmtzIHRoZSBw cmV2aW91c2x5IGFkdmVydGlzZWQgd2luZG93IHdpdGhpbiB3aGljaCB0aGUgZHJvcHBlZCBwYWNr ZXQNCj4+IG9yaWdpbmFsbHkgd2FzIHNlbnQuDQo+IC4uLkkgZG9uJ3QgdGhpbmsgdGhlIFJGQyBp cyB2aW9sYXRlZCwgaXQganVzdCBzYXlzICJTSE9VTEQgTk9UIi4NClJpZ2h0LiBJIGNhbiByZXBo cmFzZSBpdC4gQnV0IGl0IGlzIGNsZWFybHkgYSBiYWQgc2l0dWF0aW9uIHdlIGhhdmUgdG8gDQpy ZW1lZHkuDQo+DQo+PiBSRkMgOTI5MyBnaXZlcyB0aGUgc29sdXRpb24gdG8gdGhpcyBzaXR1YXRp b24uIEluIGNoYXB0ZXIgMy42LjEgd2UgZmluZA0KPj4gdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6 DQo+PiAiQSBUQ1AgcmVjZWl2ZXIgU0hPVUxEIE5PVCBzaHJpbmsgdGhlIHdpbmRvdywgaS5lLiwg bW92ZSB0aGUgcmlnaHQNCj4+IHdpbmRvdyBlZGdlIHRvIHRoZSBsZWZ0IChTSExELTE0KS4gSG93 ZXZlciwgYSBzZW5kaW5nIFRDUCBwZWVyIE1VU1QNCj4+IGJlIHJvYnVzdCBhZ2FpbnN0IHdpbmRv dyBzaHJpbmtpbmcsIHdoaWNoIG1heSBjYXVzZSB0aGUNCj4+ICJ1c2FibGUgd2luZG93IiAoc2Vl IFNlY3Rpb24gMy44LjYuMi4xKSB0byBiZWNvbWUgbmVnYXRpdmUgKE1VU1QtMzQpLg0KPj4NCj4+ IElmIHRoaXMgaGFwcGVucywgdGhlIHNlbmRlciBTSE9VTEQgTk9UIHNlbmQgbmV3IGRhdGEgKFNI TEQtMTUpLCBidXQNCj4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzICJ0aGlzIiBpcyB0aGF0IGl0 IHJlZmVycyB0byB0aGUgY2FzZSB3aGVyZSB0aGUNCj4gdXNhYmxlIHdpbmRvdyBiZWNvbWVzIG5l Z2F0aXZlLCB3aGljaCBJJ20gbm90IHN1cmUgaXQncyB0aGUgY2FzZSBoZXJlLg0KV2luZG93IHNo cmlua2luZyAqbWF5KiBjYXVzZSB0aGUgd2luZG93IHRvIGJlY29tZSBuZWdhdGl2ZSwgYnV0DQpu b3QgbmVjZXNzYXJpbHkuIEkgYWdyZWUgdGhpcyBtYXkgYmUgYSBtYXR0ZXIgb2YgaW50ZXJwcmV0 YXRpb24sIGJ1dCBjYW5ub3QNCnNlZSBhbnkgcmVhc29uIHdlIHNob3VsZCBoYW5kbGUgdGhlIHNp dHVhdGlvbiBkaWZmZXJlbnRseSBpZiB0aGUgc2hyaW5raW5nDQpsZWFkcyB0byBhIHplcm8sIG9y IGV2ZW4gYSBwb3NpdGl2ZSwgd2luZG93Lg0KPg0KPiBUaGF0IGlzLCBpZiB0aGUgemVybyB3aW5k b3cgdXBkYXRlIHlvdSBnZXQgaW5jbHVkZXMgYW4gYWNrbm93bGVkZ2VtZW50DQo+IGZvciBhbGwg dGhlIGRhdGEgdGhhdCB3YXMgc2VudCBzbyBmYXIsDQo+IHRoZSB1c2FibGUgd2luZG93IGlzIG5v dA0KPiBuZWdhdGl2ZSwgaXQncyB6ZXJvLCBhbmQgd2Ugc2hvdWxkbid0IHJldHJhbnNtaXQgYW55 dGhpbmcuDQo+DQo+IElmIHByZXZpb3VzbHkgc2VudCBkYXRhIGlzIG5vdCBhY2tub3dsZWRnZWQs IHRoZW4geWVzLCB3ZSBzaG91bGQNCj4gcmV0cmFuc21pdCBpdCBhdCB0aGlzIHBvaW50Lg0KVGhh dCBpcyBleGFjdGx5IHRoZSBzaXR1YXRpb24gd2UgYXJlIGRlYWxpbmcgd2l0aCBoZXJlLg0KPg0K PiBJbiBib3RoIGNhc2VzLCB3ZSBfbXVzdF8gaW1wbGVtZW50IHplcm8td2luZG93IHByb2Jpbmcg KDMuOC42LjEpLCB3aGljaA0KPiBpcyBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGlzIHBhdGNo LCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5Lg0KUmlnaHQuIEkgd2FzIHBsYW5uaW5nIHRvIGFk ZCB0aGF0IGluIGEgc2VwYXJhdGUgcGF0Y2guDQo+DQo+PiBTSE9VTEQgcmV0cmFuc21pdCBub3Jt YWxseSB0aGUgb2xkIHVuYWNrbm93bGVkZ2VkIGRhdGEgYmV0d2VlbiBTTkQuVU5BDQo+PiBhbmQg U05ELlVOQStTTkQuV05EIChTSExELTE2KS4gVGhlIHNlbmRlciBNQVkgYWxzbyByZXRyYW5zbWl0 IG9sZCBkYXRhDQo+PiBiZXlvbmQgU05ELlVOQStTTkQuV05EIChNQVktNykiDQo+Pg0KPj4gSXQg c2hvdWxkIGJlIG5vdGVkIHRoYXQgYWx0aG91Z2ggdGhpcyBzb2x2ZXMgdGhlIHByb2JsZW0gd2Ug aGF2ZSBhdA0KPj4gaGFuZCwgaXQgaXMgbm90IGEgZ2VudWluZSBzb2x1dGlvbiB0byB0aGUga2Vy bmVsIGJ1Zy4gVGhlcmUgbWF5IHdlbGwNCj4+IGJlIFRDUCBzdGFja3MgYXJvdW5kIGluIG90aGVy IE9TLWVzIHdoaWNoIGRvbid0IGRvIHRoaXMsIG5vciBoYXZlDQo+PiBrZWVwLWFsaXZlIHByb2Jp bmcgYXMgYW4gYWx0ZXJuYXR2ZSB3YXkgdG8gc29sdmUgdGhlIHNpdHVhdGlvbi4NCj4+DQo+PiBT aWduZWQtb2ZmLWJ5OiBKb24gTWFsb3kgPGptYWxveUByZWRoYXQuY29tPg0KPj4NCj4+IC0tLQ0K Pj4gdjI6IC0gVXNpbmcgcHJldmlvdXNseSBhZHZlcnRpc2VkIHdpbmRvdyBkdXJpbmcgcmV0cmFu c21pc3Npb24sIGluc3RlYWQNCj4+ICAgICAgICBoaWdoZXN0IHNlbmQgc2VxdWVuY2VjZSBudW1i ZXIgaW4gdGhlIGN5Y2xlLg0KPj4gLS0tDQo+PiAgIHRjcC5jICAgICAgfCAyOSArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLQ0KPj4gICB0Y3BfY29ubi5oIHwgIDIgKysNCj4+ICAgMiBmaWxl cyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQ0KPj4NCj4+IGRpZmYg LS1naXQgYS90Y3AuYyBiL3RjcC5jDQo+PiBpbmRleCA1MzVmMWEyLi43MDNjNjJmIDEwMDY0NA0K Pj4gLS0tIGEvdGNwLmMNCj4+ICsrKyBiL3RjcC5jDQo+PiBAQCAtMTc0OSw5ICsxNzQ5LDE1IEBA IHN0YXRpYyB2b2lkIHRjcF9nZXRfdGFwX3dzKHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQo+ PiAgICAqLw0KPj4gICBzdGF0aWMgdm9pZCB0Y3BfdGFwX3dpbmRvd191cGRhdGUoc3RydWN0IHRj cF90YXBfY29ubiAqY29ubiwgdW5zaWduZWQgd25kKQ0KPj4gICB7DQo+PiArCXVpbnQzMl90IHdu ZF91cHBlcjsNCj4+ICsNCj4+ICAgCXduZCA9IE1JTihNQVhfV0lORE9XLCB3bmQgPDwgY29ubi0+ d3NfZnJvbV90YXApOw0KPj4gICAJY29ubi0+d25kX2Zyb21fdGFwID0gTUlOKHduZCA+PiBjb25u LT53c19mcm9tX3RhcCwgVVNIUlRfTUFYKTsNCj4+ICAgDQo+PiArCXduZF91cHBlciA9IGNvbm4t PnNlcV9hY2tfZnJvbV90YXAgKyB3bmQ7DQo+PiArCWlmICh3bmQgJiYgU0VRX0dUKHduZF91cHBl ciwgY29ubi0+c2VxX3d1cF9mcm9tX3RhcCkpDQo+PiArCQljb25uLT5zZXFfd3VwX2Zyb21fdGFw ID0gd25kX3VwcGVyOw0KPj4gKw0KPj4gICAJLyogRklYTUU6IHJlZmxlY3QgdGhlIHRhcC1zaWRl IHJlY2VpdmVyJ3Mgd2luZG93IGJhY2sgdG8gdGhlIHNvY2stc2lkZQ0KPj4gICAJICogc2VuZGVy IGJ5IGFkanVzdGluZyBTT19SQ1ZCVUY/ICovDQo+PiAgIH0NCj4+IEBAIC0xNzg0LDYgKzE3OTAs NyBAQCBzdGF0aWMgdm9pZCB0Y3Bfc2VxX2luaXQoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0 IHRjcF90YXBfY29ubiAqY29ubiwNCj4+ICAgCW5zID0gKG5vdy0+dHZfc2VjICogMTAwMDAwMDAw MCArIG5vdy0+dHZfbnNlYykgPj4gNTsNCj4+ICAgDQo+PiAgIAljb25uLT5zZXFfdG9fdGFwID0g KCh1aW50MzJfdCkoaGFzaCA+PiAzMikgXiAodWludDMyX3QpaGFzaCkgKyBuczsNCj4+ICsJY29u bi0+c2VxX3d1cF9mcm9tX3RhcCA9IGNvbm4tPnNlcV90b190YXA7DQo+PiAgIH0NCj4+ICAgDQo+ PiAgIC8qKg0KPj4gQEAgLTIxMzMsOSArMjE0MCw4IEBAIHN0YXRpYyB2b2lkIHRjcF9kYXRhX3Rv X3RhcChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KPj4g ICAgKg0KPj4gICAgKiAjc3lzY2FsbHMgcmVjdm1zZw0KPj4gICAgKi8NCj4+IC1zdGF0aWMgaW50 IHRjcF9kYXRhX2Zyb21fc29jayhzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpj b25uKQ0KPj4gK3N0YXRpYyBpbnQgdGNwX2RhdGFfZnJvbV9zb2NrKHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIHVpbnQzMl90IHduZF9zY2FsZWQpDQo+IEZ1bmN0aW9u IGNvbW1lbnQgc2hvdWxkIGJlIHVwZGF0ZWQuDQpSaWdodC4NCkkgYWxzbyBub3RlZCB0aGF0IHRo ZSBwcm90b3R5cGUgaXMgPiA4MCBjaGFyYWN0ZXJzLCBhbHRob3VnaCANCmNoZWNrcGF0Y2gucGwg ZGlkbid0DQpjYXRjaCB0aGF0Lg0KPg0KPiBXaGlsZSBhdCBpdCwgSSB3b25kZXIgaWYgaW5zdGVh ZCBvZiBvdmVycmlkaW5nIHRoZSB3aW5kb3cgdmFsdWUsIHdlDQo+IHNob3VsZG4ndCByYXRoZXIg YWRkIGEgJ3p3cCcgb3IgJ2ZvcmNlJyBmbGFnIGhlcmUsIGJlY2F1c2UgdGhlIHJlZ3VsYXINCj4g Y2FsbCBzaXRlcyBiZWNvbWUgYSBiaXQgYXdrd2FyZCBvdGhlcndpc2U6IHdoeSB3b3VsZCB5b3Ug cGFzcyB0aGUNCj4gcmVjZWl2ZSB3aW5kb3cgdG8gYSBhIGZ1bmN0aW9uIHRoYXQncyBuYW1lZCB0 Y3BfZGF0YV9mcm9tX3NvY2soKT8NCkl0IHdpbGwgY2F1c2UgYW4gZXh0cmEgdGVzdCB3aGV0aGVy IHdlIG5lZWQgdG8gY2FsY3VsYXRlIG9yIG5vdC4NCkJlc2lkZXMsIGJ5IHRoZSBzYW1lIGxvZ2lj cywgd2h5IHdvdWxkIHdlIGV2ZW4gKmNhbGN1bGF0ZSoNCmEgcmVjZWl2ZSB3aW5kb3cgaW4gdGhh dCBmdW5jdGlvbj8NCk1heWJlIHdlIHNob3VsZCBqdXN0IGNhbGwgaXQgc29tZXRoaW5nIGVsc2Ug dGhhbiAnd25kX3NjYWxlZCI/DQpJbiB0aGlzIGZ1bmN0aW9uLCBpdCBpcyBvbmx5IGFib3V0IGhv dyBtdWNoIGRhdGEgaXQgaXMgYWxsb3dlZCB0byByZWFkIA0KYW5kIGZvcndhcmQsIHdpdGhvdXQN CmFueSBmdXJ0aGVyIGludGVycHJldGF0aW9uLg0KPg0KPiBJIHNlZSB0aGF0IHRoZXJlJ3MgYW5v dGhlciBwb2ludCB3aGVyZSB5b3Ugbm93IG5lZWQgdG8gY2FsbCBpdCB3aXRoIGENCj4gdmFsdWUg Z3JlYXRlciB0aGFuIG9uZSAoYmVsb3csIGZyb20gdGNwX2RhdGFfZnJvbV90YXAoKSksIGJ1dCBJ IHdvbmRlcg0KPiBpZiB0aGUgd2luZG93IHRvIGJlIHVzZWQsIGhlcmUsIGNvdWxkIChhbHdheXM/ KSBiZSBpbmZlcnJlZCBieSB0aGUgdmFsdWUNCj4gb2Ygc2VxX3d1cF9mcm9tX3RhcC4NCkdvb2Qg cG9pbnQuIEl0IHByb2JhYmx5IGNvdWxkLg0KPg0KPj4gICB7DQo+PiAtCXVpbnQzMl90IHduZF9z Y2FsZWQgPSBjb25uLT53bmRfZnJvbV90YXAgPDwgY29ubi0+d3NfZnJvbV90YXA7DQo+PiAgIAlp bnQgZmlsbF9idWZzLCBzZW5kX2J1ZnMgPSAwLCBsYXN0X2xlbiwgaW92X3JlbSA9IDA7DQo+PiAg IAlpbnQgc2VuZGxlbiwgbGVuLCBwbGVuLCB2NCA9IENPTk5fVjQoY29ubik7DQo+PiAgIAlpbnQg cyA9IGNvbm4tPnNvY2ssIGksIHJldCA9IDA7DQo+PiBAQCAtMjI4Miw2ICsyMjg4LDcgQEAgc3Rh dGljIGludCB0Y3BfZGF0YV9mcm9tX3RhcChzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9j b25uICpjb25uLA0KPj4gICAJdWludDMyX3QgbWF4X2Fja19zZXEgPSBjb25uLT5zZXFfYWNrX2Zy b21fdGFwOw0KPj4gICAJdWludDMyX3Qgc2VxX2Zyb21fdGFwID0gY29ubi0+c2VxX2Zyb21fdGFw Ow0KPj4gICAJc3RydWN0IG1zZ2hkciBtaCA9IHsgLm1zZ19pb3YgPSB0Y3BfaW92IH07DQo+PiAr CXVpbnQzMl90IHduZDsNCj4+ICAgCXNpemVfdCBsZW47DQo+PiAgIAlzc2l6ZV90IG47DQo+PiAg IA0KPj4gQEAgLTIzMjUsOCArMjMzMiw3IEBAIHN0YXRpYyBpbnQgdGNwX2RhdGFfZnJvbV90YXAo c3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4+ICAgCQkJICAgIFNF UV9HRShhY2tfc2VxLCBtYXhfYWNrX3NlcSkpIHsNCj4+ICAgCQkJCS8qIEZhc3QgcmUtdHJhbnNt aXQgKi8NCj4+ICAgCQkJCXJldHIgPSAhbGVuICYmICF0aC0+ZmluICYmDQo+PiAtCQkJCSAgICAg ICBhY2tfc2VxID09IG1heF9hY2tfc2VxICYmDQo+PiAtCQkJCSAgICAgICBudG9ocyh0aC0+d2lu ZG93KSA9PSBtYXhfYWNrX3NlcV93bmQ7DQo+IFRoZSByZWFzb24gZm9yIHRoaXMgY29uZGl0aW9u IGlzIHRvIHRlbGwgYXBhcnQgbWVyZSB3aW5kb3cgdXBkYXRlcyBmcm9tDQo+IG90aGVyIHNlZ21l bnRzLg0KPg0KPiBUaGF0IGlzLCBpZiB5b3UgZ2V0Og0KPg0KPiAtIGFuIGFja25vd2xlZGdlbWVu dCBmb3Igc2VxdWVuY2UgeCBhbmQgYWR2ZXJ0aXNlZCB3aW5kb3cgeTANCj4gLSBhbiBhY2tub3ds ZWRnZW1lbnQgZm9yIHNlcXVlbmNlIHggYW5kIGFkdmVydGlzZWQgd2luZG93IHkxDQo+DQo+IC4u LnRoZW4gaXQncyBub3QgYSByZXF1ZXN0IHRvIHJldHJhbnNtaXQgYW55dGhpbmcsIGl0J3MgYSB3 aW5kb3cNCj4gdXBkYXRlLg0KPg0KPiBJZiB5b3UgZ2V0Og0KPg0KPiAtIGFuIGFja25vd2xlZGdl bWVudCBmb3Igc2VxdWVuY2UgeCBhbmQgYWR2ZXJ0aXNlZCB3aW5kb3cgeTANCj4gLSBhbiBhY2tu b3dsZWRnZW1lbnQgZm9yIHNlcXVlbmNlIHggYW5kIGFkdmVydGlzZWQgd2luZG93IHkwDQo+DQo+ IC4uLnRoZW4gaXQncyBhIHRyaWdnZXIgZm9yIGZhc3QgcmUtdHJhbnNtaXQuDQo+DQo+IFllcywg d2Ugc2hvdWxkIHJldHJhbnNtaXQgc29tZXRoaW5nIGluIHNvbWUgY2FzZXMgKHdoYXQgeW91IHF1 b3RlZA0KPiBhYm92ZSksIGJ1dCBub3Qgb24gZXZlcnkga2luZCBvZiB3aW5kb3cgdXBkYXRlICh1 c3VhbGx5IHRoZSB3aW5kb3cNCj4gZ3Jvd3MpLg0KWW91IGFyZSByaWdodC4gSSBuZWVkIHRvIGFk ZCBhIGNvbmRpdGlvbiBoZXJlLg0KTm93IEkgYW0gc2xpZ2h0bHkgcHV6emxlZDogV2h5IGRvbsK0 dCBJIHNlZSBtYXNzaXZlIGFtb3VudHMgb2YgDQpyZXRyYW5zbWl0cyBoYXBwZW5pbmcgYWxsIHRo ZSB0aW1lPw0KDQo+DQo+PiArCQkJCSAgICAgICBhY2tfc2VxID09IG1heF9hY2tfc2VxOw0KPj4g ICANCj4+ICAgCQkJCW1heF9hY2tfc2VxX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOw0KPj4gICAJ CQkJbWF4X2Fja19zZXEgPSBhY2tfc2VxOw0KPj4gQEAgLTI0MDAsNyArMjQwNiw4IEBAIHN0YXRp YyBpbnQgdGNwX2RhdGFfZnJvbV90YXAoc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29u biAqY29ubiwNCj4+ICAgCQljb25uLT5zZXFfYWNrX2Zyb21fdGFwID0gbWF4X2Fja19zZXE7DQo+ PiAgIAkJY29ubi0+c2VxX3RvX3RhcCA9IG1heF9hY2tfc2VxOw0KPj4gICAJCXNldF9wZWVrX29m ZnNldChjb25uLCAwKTsNCj4+IC0JCXRjcF9kYXRhX2Zyb21fc29jayhjLCBjb25uKTsNCj4+ICsJ CXduZCA9IGNvbm4tPnNlcV93dXBfZnJvbV90YXAgLSBtYXhfYWNrX3NlcTsNCj4+ICsJCXRjcF9k YXRhX2Zyb21fc29jayhjLCBjb25uLCB3bmQpOw0KPj4gICANCj4+ICAgCQkvKiBFbXB0eSBxdWV1 ZSBiZWZvcmUgYW55IFBPTEwgZXZlbnQgdHJpZXMgdG8gc2VuZCBpdCBhZ2FpbiAqLw0KPj4gICAJ CXRjcF9sMl9kYXRhX2J1Zl9mbHVzaChjKTsNCj4+IEBAIC0yNTAwLDcgKzI1MDcsNyBAQCBzdGF0 aWMgdm9pZCB0Y3BfY29ubl9mcm9tX3NvY2tfZmluaXNoKHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0 Y3BfdGFwX2Nvbm4gKmNvbm4sDQo+PiAgIAkvKiBUaGUgY2xpZW50IG1pZ2h0IGhhdmUgc2VudCBk YXRhIGFscmVhZHksIHdoaWNoIHdlIGRpZG4ndA0KPj4gICAJICogZGVxdWV1ZSB3YWl0aW5nIGZv ciBTWU4sQUNLIGZyb20gdGFwIC0tIGNoZWNrIG5vdy4NCj4+ICAgCSAqLw0KPj4gLQl0Y3BfZGF0 YV9mcm9tX3NvY2soYywgY29ubik7DQo+PiArCXRjcF9kYXRhX2Zyb21fc29jayhjLCBjb25uLCBj b25uLT53bmRfZnJvbV90YXAgPDwgY29ubi0+d3NfZnJvbV90YXApOw0KPj4gICAJdGNwX3NlbmRf ZmxhZyhjLCBjb25uLCBBQ0spOw0KPj4gICB9DQo+PiAgIA0KPj4gQEAgLTI1OTMsNyArMjYwMCw3 IEBAIGludCB0Y3BfdGFwX2hhbmRsZXIoc3RydWN0IGN0eCAqYywgdWludDhfdCBwaWYsIGludCBh ZiwNCj4+ICAgDQo+PiAgIAkJdGNwX3RhcF93aW5kb3dfdXBkYXRlKGNvbm4sIG50b2hzKHRoLT53 aW5kb3cpKTsNCj4+ICAgDQo+PiAtCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubik7DQo+PiAr CQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubiwgY29ubi0+d25kX2Zyb21fdGFwIDw8IGNvbm4t PndzX2Zyb21fdGFwKTsNCj4+ICAgDQo+PiAgIAkJaWYgKHAtPmNvdW50IC0gaWR4ID09IDEpDQo+ PiAgIAkJCXJldHVybiAxOw0KPj4gQEAgLTI3NzYsNiArMjc4Myw3IEBAIHZvaWQgdGNwX3RpbWVy X2hhbmRsZXIoc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZikNCj4+ICAgew0KPj4g ICAJc3RydWN0IGl0aW1lcnNwZWMgY2hlY2tfYXJtZWQgPSB7IHsgMCB9LCB7IDAgfSB9Ow0KPj4g ICAJc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiA9IENPTk4ocmVmLmZsb3cpOw0KPj4gKwl1aW50 MzJfdCB3bmQ7DQo+PiAgIA0KPj4gICAJaWYgKGMtPm5vX3RjcCkNCj4+ICAgCQlyZXR1cm47DQo+ PiBAQCAtMjgwNyw3ICsyODE1LDEwIEBAIHZvaWQgdGNwX3RpbWVyX2hhbmRsZXIoc3RydWN0IGN0 eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZikNCj4+ICAgCQkJY29ubi0+c2VxX3RvX3RhcCA9IGNv bm4tPnNlcV9hY2tfZnJvbV90YXA7DQo+PiAgIAkJCXNldF9wZWVrX29mZnNldChjb25uLCAwKTsN Cj4+ICAgCQkJdGNwX2wyX2RhdGFfYnVmX2ZsdXNoKGMpOw0KPj4gLQkJCXRjcF9kYXRhX2Zyb21f c29jayhjLCBjb25uKTsNCj4+ICsNCj4+ICsJCQkvKiBSRkMgOTI5MywgMy44LjY6IFNlbmQgMSBi eXRlIG9mIG5ldyBkYXRhIGlmIG5lZWRlZCAqLw0KPiAuLi5pZiBhdmFpbGFibGUuIEJ1dCwgaWYg aXQncyBub3QgYXZhaWxhYmxlLCB3ZSBzaG91bGQgc2VuZCBhDQo+IHplcm8td2luZG93IHByb2Jl IHdpdGhvdXQgcGF5bG9hZC4NCkFzIG1lbnRpb25lZCwgSSBhbSBwbGFubmluZyBhIHNlcGFyYXRl IHBhdGNoIGZvciB0aGlzLiBJIHRoaW5rIHRoaXMNCmFsc28gYWZmZWN0cyB0aGUgdGltZXIgdmFs dWUswqAgc28gaXQganVzdGlmaWVzIGFuIGV4dHJhIHBhdGNoLg0KPg0KPiBBbmQgdG8gY2hlY2sg aWYgaXQncyBuZWVkZWQsIHdlIHNob3VsZCBjaGVjayB0aGF0IHRoZSBhZHZlcnRpc2VkDQo+IHJl Y2VpdmUgd2luZG93IGlzIHplcm8sIHJpZ2h0PyBJIHVuZGVyc3RhbmQgdGhhdCB0aGUgb3V0Y29t ZSBvZiB0aGlzOg0KPg0KPiAJaWYgKCFjb25uLT53bmRfZnJvbV90YXApDQo+IAkJLyogUkZDIDky OTMsIDMuOC42LjEsIHplcm8td2luZG93IHByb2JpbmcgKi8NCj4gCQl0Y3BfZGF0YV9mcm9tX3Nv Y2soYywgY29ubiwgMSk7DQo+IAllbHNlDQo+IAkJdGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4s IHduZCk7DQo+DQo+IGlzIHRoZSBzYW1lIGFzOg0KPg0KPiAJCXRjcF9kYXRhX2Zyb21fc29jayhj LCBjb25uLCBNQVgoMSwgd25kKSk7DQpUaGlzIHN0aWxsIHdvbid0IHNlbmQgYW55IGRhdGEgaWYg dGhlcmUgaXMgbm9uZSBhdmFpbGFibGUsIHNvIGFuIGV4dHJhIA0KcGF0Y2ggaXMgbWVyaXRlZCwu DQoNCi8vL2pvbg0KDQo+DQo+IGJ1dCBJIGZpbmQgaXQgYSBiaXQgY29tcGxpY2F0ZWQgdG8gdW5k ZXJzdGFuZCB3aGF0IHRoaXMgZG9lcyBvdGhlcndpc2UuDQo+DQo+PiArCQkJd25kID0gY29ubi0+ c2VxX3d1cF9mcm9tX3RhcCAtIGNvbm4tPnNlcV9hY2tfZnJvbV90YXA7DQo+PiArCQkJdGNwX2Rh dGFfZnJvbV9zb2NrKGMsIGNvbm4sIE1BWCgxLCB3bmQpKTsNCj4+ICAgCQkJdGNwX2wyX2RhdGFf YnVmX2ZsdXNoKGMpOw0KPj4gICAJCQl0Y3BfdGltZXJfY3RsKGMsIGNvbm4pOw0KPj4gICAJCX0N Cj4+IEBAIC0yODYzLDcgKzI4NzQsNyBAQCB2b2lkIHRjcF9zb2NrX2hhbmRsZXIoc3RydWN0IGN0 eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwgdWludDMyX3QgZXZlbnRzKQ0KPj4gICAJCQljb25u X2V2ZW50KGMsIGNvbm4sIFNPQ0tfRklOX1JDVkQpOw0KPj4gICANCj4+ICAgCQlpZiAoZXZlbnRz ICYgRVBPTExJTikNCj4+IC0JCQl0Y3BfZGF0YV9mcm9tX3NvY2soYywgY29ubik7DQo+PiArCQkJ dGNwX2RhdGFfZnJvbV9zb2NrKGMsIGNvbm4sIGNvbm4tPnduZF9mcm9tX3RhcCA8PCBjb25uLT53 c19mcm9tX3RhcCk7DQo+PiAgIA0KPj4gICAJCWlmIChldmVudHMgJiBFUE9MTE9VVCkNCj4+ICAg CQkJdGNwX3VwZGF0ZV9zZXFhY2tfd25kKGMsIGNvbm4sIDAsIE5VTEwpOw0KPj4gZGlmZiAtLWdp dCBhL3RjcF9jb25uLmggYi90Y3BfY29ubi5oDQo+PiBpbmRleCBhNWY1Y2ZlLi5kNmI2MjdhIDEw MDY0NA0KPj4gLS0tIGEvdGNwX2Nvbm4uaA0KPj4gKysrIGIvdGNwX2Nvbm4uaA0KPj4gQEAgLTMw LDYgKzMwLDcgQEANCj4+ICAgICogQHduZF90b190YXA6CQlTZW5kaW5nIHdpbmRvdyBhZHZlcnRp c2VkIHRvIHRhcCwgdW5zY2FsZWQgKGFzIHNlbnQpDQo+PiAgICAqIEBzZXFfdG9fdGFwOgkJTmV4 dCBzZXF1ZW5jZSBmb3IgcGFja2V0cyB0byB0YXANCj4+ICAgICogQHNlcV9hY2tfZnJvbV90YXA6 CUxhc3QgQUNLIG51bWJlciByZWNlaXZlZCBmcm9tIHRhcA0KPj4gKyAqIEBzZXFfd3VwX2Zyb21f dGFwOglSaWdodCBlZGdlICgrMSkgb2YgbGFzdCBub24temVybyB3aW5kb3cgZnJvbSB0YXANCj4g SXQncyBub3QgKzEgYW55bW9yZSwgcmlnaHQ/DQo+DQo+PiAgICAqIEBzZXFfZnJvbV90YXA6CU5l eHQgc2VxdWVuY2UgZm9yIHBhY2tldHMgZnJvbSB0YXAgKG5vdCBhY3R1YWxseSBzZW50KQ0KPj4g ICAgKiBAc2VxX2Fja190b190YXA6CUxhc3QgQUNLIG51bWJlciBzZW50IHRvIHRhcA0KPj4gICAg KiBAc2VxX2luaXRfZnJvbV90YXA6CUluaXRpYWwgc2VxdWVuY2UgbnVtYmVyIGZyb20gdGFwDQo+ PiBAQCAtMTAxLDYgKzEwMiw3IEBAIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gew0KPj4gICANCj4+ICAg CXVpbnQzMl90CXNlcV90b190YXA7DQo+PiAgIAl1aW50MzJfdAlzZXFfYWNrX2Zyb21fdGFwOw0K Pj4gKwl1aW50MzJfdAlzZXFfd3VwX2Zyb21fdGFwOw0KPj4gICAJdWludDMyX3QJc2VxX2Zyb21f dGFwOw0KPj4gICAJdWludDMyX3QJc2VxX2Fja190b190YXA7DQo+PiAgIAl1aW50MzJfdAlzZXFf aW5pdF9mcm9tX3RhcDsNCg0K