Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Feb 2012 10:26:51 +0100
From:      Monthadar Al Jaberi <monthadar@gmail.com>
To:        Rui Paulo <rpaulo@freebsd.org>
Cc:        freebsd-wireless@freebsd.org, Bernhard Schmidt <bschmidt@freebsd.org>
Subject:   Re: Fragment and 11s inconsistency
Message-ID:  <CA%2BsBSoJOjgxBvQa_kN0oDyS4AUeu7kKGUB37Yz3T=JfzMqGG8Q@mail.gmail.com>
In-Reply-To: <CA%2BsBSo%2BS-quy2p1O8k9TDZO1Csgg19pgTMv7y0VeXWSgq3=mzQ@mail.gmail.com>
References:  <CA%2BsBSoJGzabfyt8EXoT-g=GTJD0upX5jbRqfLWKQKzXu2FivaA@mail.gmail.com> <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org> <CA%2BsBSo%2BS-quy2p1O8k9TDZO1Csgg19pgTMv7y0VeXWSgq3=mzQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--14dae9340dd3c0a7c304b8fd4ffa
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On Wed, Feb 15, 2012 at 9:26 AM, Monthadar Al Jaberi
<monthadar@gmail.com> wrote:
> On Wed, Feb 15, 2012 at 5:50 AM, Rui Paulo <rpaulo@freebsd.org> wrote:
>> On 2012/02/14, at 14:14, Monthadar Al Jaberi wrote:
>>
>>> Hi,
>>>
>>> I cant verify this yet, but isn't there something wrong in current Free=
BSD?
>>>
>>> lets say an 11s data frame need to be fragmented in ieee80211_encap:
>>> if (addqos)
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize =3D sizeof(struct ieee80211_qosfram=
e);
>>> else
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize =3D sizeof(struct ieee80211_frame);
>>> ...
>>> if (vap->iv_opmode =3D=3D IEEE80211_M_MBSS) {
>>> ...
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (!IEEE80211_IS_MULTICAST(eh.ether_dhost)=
)
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize +=3D IEEE80211_ADDR=
_LEN; =A0/* unicast are 4-addr */
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 meshhdrsize =3D sizeof(struct ieee80211_mes=
hcntl);
>>> }
>>> ...
>>> if (__predict_true((m->m_flags & M_FF) =3D=3D 0)) {
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 /*
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* Normal frame.
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 m =3D ieee80211_mbuf_adjust(vap, hdrspace +=
 meshhdrsize, key, m);
>>> }
>>> M_PREPEND(m, hdrspace + meshhdrsize, M_DONTWAIT);
>>> if (txfrag && !ieee80211_fragment(vap, m, hdrsize,
>>> =A0 =A0 =A0 =A0 =A0 key !=3D NULL ? key->wk_cipher->ic_header : 0, vap-=
>iv_fragthreshold))
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto bad;
>>>
>>> This means we send meshcontrol only in first segment, because we never
>>> add meshhdrsize to hdrsize...
>>
>> Yes, this is a bug. Thanks for finding it.
>>
>>> but in mesh_input
>>> switch (type) {
>>> =A0 =A0 =A0 case IEEE80211_FC0_TYPE_DATA:
>>> ...
>>> meshdrlen =3D sizeof(struct ieee80211_meshcntl) +
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (mc->mc_flags & 3) * IEEE80211_ADDR=
_LEN;
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrspace +=3D meshdrlen;
>>> ...
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 /*
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* Potentially forward packet. =A0See tab=
le s36 (p140)
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* for the rules. =A0XXX tap fwd'd packet=
s not for us?
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (dir =3D=3D IEEE80211_FC1_DIR_FROMDS ||
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 !mesh_isucastforme(vap, wh, mc)) {
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mesh_forward(vap, m, mc);
>>> ...
>>> if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 m =3D ieee80211_defrag(ni, =
m, hdrspace);
>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (m =3D=3D NULL) {
>>>
>>> This seems wrong to me, how can we potentially forward before defragin
>>> the frame? this will fail cause sub-frag have no mesh control as code
>>> shows above.
>>>
>>> shouldnt the defrag code be moved above?
>>
>> Yes, another bug.
>>
>>> I am attaching a patch that both moves the defrag, validates that mesh
>>> control is present and makes 11s data frames QoS and set Mesh control
>>> bit present to 1 as the amendment specifies.
>>
>> There are some typos in your patch ("This is in constrast to Draf 4.0.")=
.
>>
>> Can you please rewrite this code:
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 *(uint16_t *)qos =3D *(uint16_t *)
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (((IEEE80211_IS_MULTICAST(wh->i_ad=
dr1) &&
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dir =3D=3D IEEE80211_FC1_DIR_FROMD=
S)) ?
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ((struct ieee80211_qosframe *)wh)-=
>i_qos :
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ((struct ieee80211_qosframe_addr4 =
*)wh)->i_qos);
>>
>> In ieee80211_encap(), why didn't you add meshhdrsize to ieee80211_fragme=
nt()?
>
> Because the mesh control is not part of the header, it is in the frame
> body and should only be present in the first fragment of a frame. So I
> think this is correct.
>

Attaching patch again; this time Mesh Control field is set to not
present for frags 1+.

>>
>> Would be nice to test this =A0before committing.
>
> Yes, Adrian and Bernhard are looking into the fragment code between
> net80211 and ath. It seems the code is broken.
>
> I am reattaching the patch thanks for your comments.
>
>>
>> Thanks,
>> --
>> Rui Paulo
>>
>
>
>
> --
> Monthadar Al Jaberi

br

--=20
Monthadar Al Jaberi

--14dae9340dd3c0a7c304b8fd4ffa
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0001-Make-mesh-data-frames-to-be-quality-of-service-QoS.patch"
Content-Disposition: attachment; 
	filename="0001-Make-mesh-data-frames-to-be-quality-of-service-QoS.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gyo5qggy1

RnJvbSA3YWM0YTFmZjA5MzRlOTI3MTM3MmE2NjlkOGU4MzJlNzk0ZDgxMDdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNb250aGFkYXIgQWwgSmFiZXJpIDxtb250aGFkYXJAZ21haWwu
Y29tPgpEYXRlOiBUdWUsIDE0IEZlYiAyMDEyIDE2OjQ3OjQzICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gTWFrZSBtZXNoIGRhdGEgZnJhbWVzIHRvIGJlIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKS4K
CiogSW50cm9kdWNlIG5ldyBmbGFnIGZvciBRb1MgY29udHJvbCBmaWVsZDsKKiBDaGFuZ2UgaW4g
bWVzaF9pbnB1dCB0byB2YWxpZGF0ZSB0aGF0IFFvUyBpcyBzZXQgYW5kIE1lc2ggQ29udHJvbCBm
aWVsZAppcyBwcmVzZW50LCBhbHNvIGJvdGggYnl0ZXMgb2YgdGhlIFFvUyBhcmUgcmVhZDsKKiBN
b3ZlZCBkZWZyYWdtZW50YXRpb24gaW4gbWVzaF9pbnB1dCBiZWZvcmUgd2UgdHJ5IHRvIGZvcndh
cmQgcGFja2V0IGFzCmluZmVycmVkIGZyb20gYW1lbmRtZW50IHNwZWMsIGJlY2F1c2UgTWVzaCBD
b250cm9sIGZpZWxkIG9ubHkgcHJlc2VudCBpbiBmaXJzdApmcmFnbWVudDsKKiBDaGFuZ2VkIGlu
IGllZWU4MDIxMV9lbmNhcCB0byBzZXQgUW9TIHN1YnR5cGUgYW5kIE1lc2ggQ29udHJvbCBmaWVs
ZCBwcmVzZW50LApvbmx5IGZpcnN0IGZyYWdtZW50IGhhdmUgTWVzaCBDb250cm9sIGZpZWxkIHBy
ZXNlbnQgYml0IGVxdWFsIHRvIDE7Ci0tLQogc3lzL25ldDgwMjExL2llZWU4MDIxMS5oICAgICAg
ICB8ICAgIDcgKysrCiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYyAgIHwgICA4NSArKysr
KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3lzL25ldDgwMjExL2llZWU4MDIx
MV9vdXRwdXQuYyB8ICAgMjQgKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgODggaW5zZXJ0
aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4
MDIxMS5oIGIvc3lzL25ldDgwMjExL2llZWU4MDIxMS5oCmluZGV4IDAyOGFmZWMuLjI5YmZhM2Mg
MTAwNjQ0Ci0tLSBhL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaAorKysgYi9zeXMvbmV0ODAyMTEv
aWVlZTgwMjExLmgKQEAgLTE5OSw2ICsxOTksMTMgQEAgc3RydWN0IGllZWU4MDIxMV9xb3NmcmFt
ZV9hZGRyNCB7CiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfRU9TUAkJCTB4MTAJLyogRW5kT2ZTZXJ2
aWNlIFBlcmlvZCovCiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfRU9TUF9TCQkJNAogI2RlZmluZQlJ
RUVFODAyMTFfUU9TX1RJRAkJCTB4MGYKKy8qIHFvc1sxXSBieXRlIHVzZWQgZm9yIGFsbCBmcmFt
ZXMgc2VudCBieSBtZXNoIFNUQXMgaW4gYSBtZXNoIEJTUyAqLworI2RlZmluZSBJRUVFODAyMTFf
UU9TX01DCQkJMHgxMAkvKiBNZXNoIGNvbnRyb2wgKi8KKy8qIE1lc2ggcG93ZXIgc2F2ZSBsZXZl
bCovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfTUVTSF9QU0wJCQkweDIwCisvKiBNZXNoIFJlY2Vp
dmVyIFNlcnZpY2UgUGVyaW9kIEluaXRpYXRlZCAqLworI2RlZmluZSBJRUVFODAyMTFfUU9TX1JT
UEkJCQkweDQwCisvKiBiaXRzIDExIHRvIDE1IHJlc2VydmVkICovCiAKIC8qIGRvZXMgZnJhbWUg
aGF2ZSBRb1Mgc2VxdWVuY2UgY29udHJvbCBkYXRhICovCiAjZGVmaW5lCUlFRUU4MDIxMV9RT1Nf
SEFTX1NFUSh3aCkgXApkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMg
Yi9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYwppbmRleCBiOTJmNjk1Li5kNzFiMDhlIDEw
MDY0NAotLS0gYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYworKysgYi9zeXMvbmV0ODAy
MTEvaWVlZTgwMjExX21lc2guYwpAQCAtMTA0Nyw5ICsxMDQ3LDkgQEAgbWVzaF9pbnB1dChzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikK
IAlzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21l
c2hjbnRsICptYzsKIAlpbnQgaGRyc3BhY2UsIG1lc2hkcmxlbiwgbmVlZF90YXA7Ci0JdWludDhf
dCBkaXIsIHR5cGUsIHN1YnR5cGUsIHFvczsKKwl1aW50OF90IGRpciwgdHlwZSwgc3VidHlwZTsK
IAl1aW50MzJfdCBzZXE7Ci0JdWludDhfdCAqYWRkcjsKKwl1aW50OF90ICphZGRyLCBxb3NbMl07
CiAJaWVlZTgwMjExX3NlcSByeHNlcTsKIAogCUtBU1NFUlQobmkgIT0gTlVMTCwgKCJudWxsIG5v
ZGUiKSk7CkBAIC0xMTQ2LDggKzExNDYsNjQgQEAgbWVzaF9pbnB1dChzdHJ1Y3QgaWVlZTgwMjEx
X25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIAkJCXZhcC0+aXZf
c3RhdHMuaXNfcnhfd3JvbmdkaXIrKzsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCS8qIHB1bGwgdXAg
ZW5vdWdoIHRvIGdldCB0byB0aGUgbWVzaCBjb250cm9sICovCisKKwkJLyogQWxsIE1lc2ggZGF0
YSBmcmFtZXMgYXJlIFFvUyBzdWJ0eXBlICovCisJCWlmICghSEFTX1NFUSh0eXBlKSkgeworCQkJ
SUVFRTgwMjExX0RJU0NBUkQodmFwLCBJRUVFODAyMTFfTVNHX0lOUFVULAorCQkJICAgIHdoLCAi
ZGF0YSIsICJpbmNvcnJlY3Qgc3VidHlwZSAweCV4Iiwgc3VidHlwZSk7CisJCQl2YXAtPml2X3N0
YXRzLmlzX3J4X2JhZHN1YnR5cGUrKzsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyoKKwkJICog
TmV4dCB1cCwgYW55IGZyYWdtZW50YXRpb24uCisJCSAqIFhYWDogd2UgZGVmcmFnIGJlZm9yZSB3
ZSBldmVuIHRyeSB0byBmb3J3YXJkLAorCQkgKiBNZXNoIENvbnRyb2wgZmllbGQgaXMgbm90IHBy
ZXNlbnQgaW4gc3ViLXNlcXVlbnQKKwkJICogZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgaXMgaW4g
Y29udHJhc3QgdG8gRHJhZnQgNC4wLgorCQkgKi8KIAkJaGRyc3BhY2UgPSBpZWVlODAyMTFfaGRy
c3BhY2UoaWMsIHdoKTsKKwkJaWYgKCFJRUVFODAyMTFfSVNfTVVMVElDQVNUKHdoLT5pX2FkZHIx
KSkgeworCQkJbSA9IGllZWU4MDIxMV9kZWZyYWcobmksIG0sIGhkcnNwYWNlKTsKKwkJCWlmICht
ID09IE5VTEwpIHsKKwkJCQkvKiBGcmFnbWVudCBkcm9wcGVkIG9yIGZyYW1lIG5vdCBjb21wbGV0
ZSB5ZXQgKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQl3aCA9IG10b2QobSwgc3RydWN0
IGllZWU4MDIxMV9mcmFtZSAqKTsgLyogTkI6IGFmdGVyIGRlZnJhZyAqLworCisJCS8qCisJCSAq
IE5vdyB3ZSBoYXZlIGEgY29tcGxldGUgTWVzaCBEYXRhIGZyYW1lLgorCQkgKi8KKworCQkvKgor
CQkgKiBPbmx5IGdyb3VwIGFkZHJlc3NlZCBNZXNoIGRhdGEgZnJhbWVzIGFyZSAzIGFkZHJlc3MK
KwkJICogcW9zIGZyYW1lcyBhbW9uZyB0aGUgZGlmZmVyZW50IE1lc2ggRGF0YSBmcmFtZXMgYXMK
KwkJICogc3BlY2lmaWVkIGluIGFtZW5kbWVudC4KKwkJICovCisJCWlmIChJRUVFODAyMTFfSVNf
TVVMVElDQVNUKHdoLT5pX2FkZHIxKSAmJgorCQkgICAgZGlyID09IElFRUU4MDIxMV9GQzFfRElS
X0ZST01EUykKKwkJCSoodWludDE2X3QgKilxb3MgPSAqKHVpbnQxNl90ICopCisJCQkgICAgKChz
dHJ1Y3QgaWVlZTgwMjExX3Fvc2ZyYW1lICopd2gpLT5pX3FvczsKKwkJZWxzZQorCQkJKih1aW50
MTZfdCAqKXFvcyA9ICoodWludDE2X3QgKikKKwkJCSAgICAoKHN0cnVjdCBpZWVlODAyMTFfcW9z
ZnJhbWVfYWRkcjQgKil3aCktPmlfcW9zOworCisJCS8qCisJCSAqIE5COiBUaGUgbWVzaCBTVEEg
c2V0cyB0aGUgTWVzaCBDb250cm9sIFByZXNlbnQKKwkJICogc3ViZmllbGQgdG8gMSBpbiB0aGUg
TWVzaCBEYXRhIGZyYW1lIGNvbnRhaW5pbmcKKwkJICogYW4gdW5mcmFnbWVudGVkIE1TRFUsIGFu
IEEtTVNEVSwgb3IgdGhlIGZpcnN0CisJCSAqIGZyYWdtZW50IG9mIGFuIE1TRFUuCisJCSAqIEFm
dGVyIGRlZnJhZyBpdCBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQuCisJCSAqLworCQlpZiAoIShx
b3NbMV0gJiBJRUVFODAyMTFfUU9TX01DKSkgeworCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZh
cCwgSUVFRTgwMjExX01TR19NRVNILAorCQkJICAgIG5pLT5uaV9tYWNhZGRyLCBOVUxMLAorCQkJ
ICAgICIlcyIsICJNZXNoIGNvbnRyb2wgZmllbGQgbm90IHByZXNlbnQiKTsKKwkJCXZhcC0+aXZf
c3RhdHMuaXNfcnhfZWxlbV9taXNzaW5nKys7IC8qIFhYWDoga2luZGEgKi8KKwkJCWdvdG8gZXJy
OworCQl9CisKKwkJLyogcHVsbCB1cCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBtZXNoIGNvbnRyb2wg
Ki8KIAkJaWYgKG0tPm1fbGVuIDwgaGRyc3BhY2UgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9t
ZXNoY250bCkgJiYKIAkJICAgIChtID0gbV9wdWxsdXAobSwgaGRyc3BhY2UgKwogCQkgICAgICAg
IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjbnRsKSkpID09IE5VTEwpIHsKQEAgLTExOTUs
MjcgKzEyNTEsNiBAQCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVj
dCBtYnVmICptLCBpbnQgcnNzaSwgaW50IG5mKQogCQkJLyogTkI6IGZhbGwgdGhydSB0byBkZWxp
dmVyIG1jYXN0IGZyYW1lcyBsb2NhbGx5ICovCiAJCX0KIAotCQkvKgotCQkgKiBTYXZlIFFvUyBi
aXRzIGZvciB1c2UgYmVsb3ctLWJlZm9yZSB3ZSBzdHJpcCB0aGUgaGVhZGVyLgotCQkgKi8KLQkJ
aWYgKHN1YnR5cGUgPT0gSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1FPUykgewotCQkJcW9zID0gKGRp
ciA9PSBJRUVFODAyMTFfRkMxX0RJUl9EU1RPRFMpID8KLQkJCSAgICAoKHN0cnVjdCBpZWVlODAy
MTFfcW9zZnJhbWVfYWRkcjQgKil3aCktPmlfcW9zWzBdIDoKLQkJCSAgICAoKHN0cnVjdCBpZWVl
ODAyMTFfcW9zZnJhbWUgKil3aCktPmlfcW9zWzBdOwotCQl9IGVsc2UKLQkJCXFvcyA9IDA7Ci0J
CS8qCi0JCSAqIE5leHQgdXAsIGFueSBmcmFnbWVudGF0aW9uLgotCQkgKi8KLQkJaWYgKCFJRUVF
ODAyMTFfSVNfTVVMVElDQVNUKHdoLT5pX2FkZHIxKSkgewotCQkJbSA9IGllZWU4MDIxMV9kZWZy
YWcobmksIG0sIGhkcnNwYWNlKTsKLQkJCWlmIChtID09IE5VTEwpIHsKLQkJCQkvKiBGcmFnbWVu
dCBkcm9wcGVkIG9yIGZyYW1lIG5vdCBjb21wbGV0ZSB5ZXQgKi8KLQkJCQlnb3RvIG91dDsKLQkJ
CX0KLQkJfQotCQl3aCA9IE5VTEw7CQkvKiBubyBsb25nZXIgdmFsaWQsIGNhdGNoIGFueSB1c2Vz
ICovCi0KIAkJaWYgKGllZWU4MDIxMV9yYWRpb3RhcF9hY3RpdmVfdmFwKHZhcCkpCiAJCQlpZWVl
ODAyMTFfcmFkaW90YXBfcngodmFwLCBtKTsKIAkJbmVlZF90YXAgPSAwOwpAQCAtMTIzNiw3ICsx
MjcxLDcgQEAgbWVzaF9pbnB1dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIAkJCUlFRUU4MDIxMV9OT0RFX1NUQVQobmksIHJ4X2Rl
Y2FwKTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWlmIChxb3MgJiBJRUVFODAyMTFfUU9TX0FNU0RV
KSB7CisJCWlmIChxb3NbMF0gJiBJRUVFODAyMTFfUU9TX0FNU0RVKSB7CiAJCQltID0gaWVlZTgw
MjExX2RlY2FwX2Ftc2R1KG5pLCBtKTsKIAkJCWlmIChtID09IE5VTEwpCiAJCQkJcmV0dXJuIElF
RUU4MDIxMV9GQzBfVFlQRV9EQVRBOwpkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4MDIx
MV9vdXRwdXQuYyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKaW5kZXggZjYxNzdk
OS4uMWJkOTQ1MiAxMDA2NDQKLS0tIGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYwor
KysgYi9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX291dHB1dC5jCkBAIC0xMDY5LDkgKzEwNjksMTEg
QEAgaWVlZTgwMjExX2VuY2FwKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4
MDIxMV9ub2RlICpuaSwKIAkgKiBhcCdzIHJlcXVpcmUgYWxsIGRhdGEgZnJhbWVzIHRvIGJlIFFv
Uy1lbmNhcHN1bGF0ZWQKIAkgKiBvbmNlIG5lZ290aWF0ZWQgaW4gd2hpY2ggY2FzZSB3ZSdsbCBu
ZWVkIHRvIG1ha2UgdGhpcwogCSAqIGNvbmZpZ3VyYWJsZS4KKwkgKiBOQjogbWVzaCBkYXRhIGZy
YW1lcyBhcmUgUW9TLgogCSAqLwotCWFkZHFvcyA9IChuaS0+bmlfZmxhZ3MgJiAoSUVFRTgwMjEx
X05PREVfUU9TfElFRUU4MDIxMV9OT0RFX0hUKSkgJiYKLQkJIChtLT5tX2ZsYWdzICYgTV9FQVBP
TCkgPT0gMDsKKwlhZGRxb3MgPSAoKG5pLT5uaV9mbGFncyAmIChJRUVFODAyMTFfTk9ERV9RT1N8
SUVFRTgwMjExX05PREVfSFQpKSB8fAorCSAgICAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjEx
X01fTUJTUykpICYmCisJICAgIChtLT5tX2ZsYWdzICYgTV9FQVBPTCkgPT0gMDsKIAlpZiAoYWRk
cW9zKQogCQloZHJzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWUpOwogCWVs
c2UKQEAgLTEyNzcsNyArMTI3OSwxMiBAQCBpZWVlODAyMTFfZW5jYXAoc3RydWN0IGllZWU4MDIx
MXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCQlxb3NbMF0gPSB0aWQgJiBJ
RUVFODAyMTFfUU9TX1RJRDsKIAkJaWYgKGljLT5pY193bWUud21lX3dtZUNoYW5QYXJhbXMuY2Fw
X3dtZVBhcmFtc1thY10ud21lcF9ub2Fja1BvbGljeSkKIAkJCXFvc1swXSB8PSBJRUVFODAyMTFf
UU9TX0FDS1BPTElDWV9OT0FDSzsKLQkJcW9zWzFdID0gMDsKKyNpZmRlZiBJRUVFODAyMTFfU1VQ
UE9SVF9NRVNICisJCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNTKSB7CisJ
CQlxb3NbMV0gfD0gSUVFRTgwMjExX1FPU19NQzsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCXFvc1sx
XSA9IDA7CiAJCXdoLT5pX2ZjWzBdIHw9IElFRUU4MDIxMV9GQzBfU1VCVFlQRV9RT1M7CiAKIAkJ
aWYgKChtLT5tX2ZsYWdzICYgTV9BTVBEVV9NUERVKSA9PSAwKSB7CkBAIC0xNDAyLDkgKzE0MDks
MjAgQEAgaWVlZTgwMjExX2ZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0
IG1idWYgKm0wLAogCQkgKiB3ZSBtYXJrIHRoZSBmaXJzdCBmcmFnbWVudCB3aXRoIHRoZSBNT1JF
X0ZSQUcgYml0CiAJCSAqIGl0IGF1dG9tYXRpY2FsbHkgaXMgcHJvcGFnYXRlZCB0byBlYWNoIGZy
YWdtZW50OyB3ZQogCQkgKiBuZWVkIG9ubHkgY2xlYXIgaXQgb24gdGhlIGxhc3QgZnJhZ21lbnQg
KGRvbmUgYmVsb3cpLgorCQkgKiBOQjogZnJhZyAxKyBkb250IGhhdmUgTWVzaCBDb250cm9sIGZp
ZWxkIHByZXNlbnQuCiAJCSAqLwogCQl3aGYgPSBtdG9kKG0sIHN0cnVjdCBpZWVlODAyMTFfZnJh
bWUgKik7CiAJCW1lbWNweSh3aGYsIHdoLCBoZHJzaXplKTsKKyNpZmRlZiBJRUVFODAyMTFfU1VQ
UE9SVF9NRVNICisJCWlmICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNTKSB7CisJ
CQlpZiAoSUVFRTgwMjExX0lTX0RTVE9EUyh3aCkpCisJCQkJKChzdHJ1Y3QgaWVlZTgwMjExX3Fv
c2ZyYW1lX2FkZHI0ICopCisJCQkJICAgIHdoZiktPmlfcW9zWzFdICY9IH5JRUVFODAyMTFfUU9T
X01DOworCQkJZWxzZQorCQkJCSgoc3RydWN0IGllZWU4MDIxMV9xb3NmcmFtZSAqKQorCQkJCSAg
ICB3aGYpLT5pX3Fvc1sxXSAmPSB+SUVFRTgwMjExX1FPU19NQzsKKwkJfQorI2VuZGlmCiAJCSoo
dWludDE2X3QgKikmd2hmLT5pX3NlcVswXSB8PSBodG9sZTE2KAogCQkJKGZyYWdubyAmIElFRUU4
MDIxMV9TRVFfRlJBR19NQVNLKSA8PAogCQkJCUlFRUU4MDIxMV9TRVFfRlJBR19TSElGVCk7Ci0t
IAoxLjcuNC4xCgo=
--14dae9340dd3c0a7c304b8fd4ffa--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BsBSoJOjgxBvQa_kN0oDyS4AUeu7kKGUB37Yz3T=JfzMqGG8Q>