Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Feb 2012 10:46:35 +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%2BsBSoL8WPB5pGMBrQDM46kn=BRkqW1HrzeVuoBQ6S=NfjGz=Q@mail.gmail.com>
In-Reply-To: <CA%2BsBSoJOjgxBvQa_kN0oDyS4AUeu7kKGUB37Yz3T=JfzMqGG8Q@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> <CA%2BsBSoJOjgxBvQa_kN0oDyS4AUeu7kKGUB37Yz3T=JfzMqGG8Q@mail.gmail.com>

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

sorry for the noise, I found out that I had an error when reading out
the QoS control field, it is corrected now and I updated the comment.

I tested the code without fragmentation and it should work fine now.

On Wed, Feb 15, 2012 at 10:26 AM, Monthadar Al Jaberi
<monthadar@gmail.com> wrote:
> 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 Fre=
eBSD?
>>>>
>>>> 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_qosfra=
me);
>>>> 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_ADD=
R_LEN; =A0/* unicast are 4-addr */
>>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 meshhdrsize =3D sizeof(struct ieee80211_me=
shcntl);
>>>> }
>>>> ...
>>>> 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_ADD=
R_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 ta=
ble s36 (p140)
>>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* for the rules. =A0XXX tap fwd'd packe=
ts 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_a=
ddr1) &&
>>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dir =3D=3D IEEE80211_FC1_DIR_FROM=
DS)) ?
>>> + =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_fragm=
ent()?
>>
>> 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
>
> --
> Monthadar Al Jaberi



--=20
Monthadar Al Jaberi

--e89a8f3ba7075f750604b8fd96af
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_gyo6fv821

RnJvbSAzYzI0OGM5NjE1MDk3NTBkMTU0YWM0NGUwM2Y2ODA4Yzc4YzdhOGNkIE1vbiBTZXAgMTcg
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
Yi9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYwppbmRleCBiOTJmNjk1Li44YjFhNmRiIDEw
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
CQkgKiBPbmx5IGZyb21EU3RvRFMgZGF0YSBmcmFtZXMgdXNlIDQgYWRkcmVzcyBxb3MgZnJhbWVz
CisJCSAqIGFzIHNwZWNpZmllZCBpbiBhbWVuZG1lbnQuIE90aGVyd2lzZSBhZGRyNCBpcyBsb2Nh
dGVkCisJCSAqIGluIHRoZSBNZXNoIENvbnRyb2wgZmllbGQgYW5kIGEgMyBhZGRyZXNzIHFvcyBm
cmFtZQorCQkgKiBpcyB1c2VkLgorCQkgKi8KKwkJaWYgKElFRUU4MDIxMV9JU19EU1RPRFMod2gp
KQorCQkJKih1aW50MTZfdCAqKXFvcyA9ICoodWludDE2X3QgKikKKwkJCSAgICAoKHN0cnVjdCBp
ZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQgKil3aCktPmlfcW9zOworCQllbHNlCisJCQkqKHVpbnQx
Nl90ICopcW9zID0gKih1aW50MTZfdCAqKQorCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9xb3Nm
cmFtZSAqKXdoKS0+aV9xb3M7CisKKwkJLyoKKwkJICogTkI6IFRoZSBtZXNoIFNUQSBzZXRzIHRo
ZSBNZXNoIENvbnRyb2wgUHJlc2VudAorCQkgKiBzdWJmaWVsZCB0byAxIGluIHRoZSBNZXNoIERh
dGEgZnJhbWUgY29udGFpbmluZworCQkgKiBhbiB1bmZyYWdtZW50ZWQgTVNEVSwgYW4gQS1NU0RV
LCBvciB0aGUgZmlyc3QKKwkJICogZnJhZ21lbnQgb2YgYW4gTVNEVS4KKwkJICogQWZ0ZXIgZGVm
cmFnIGl0IHNob3VsZCBhbHdheXMgYmUgcHJlc2VudC4KKwkJICovCisJCWlmICghKHFvc1sxXSAm
IElFRUU4MDIxMV9RT1NfTUMpKSB7CisJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVF
ODAyMTFfTVNHX01FU0gsCisJCQkgICAgbmktPm5pX21hY2FkZHIsIE5VTEwsCisJCQkgICAgIiVz
IiwgIk1lc2ggY29udHJvbCBmaWVsZCBub3QgcHJlc2VudCIpOworCQkJdmFwLT5pdl9zdGF0cy5p
c19yeF9lbGVtX21pc3NpbmcrKzsgLyogWFhYOiBraW5kYSAqLworCQkJZ290byBlcnI7CisJCX0K
KworCQkvKiBwdWxsIHVwIGVub3VnaCB0byBnZXQgdG8gdGhlIG1lc2ggY29udHJvbCAqLwogCQlp
ZiAobS0+bV9sZW4gPCBoZHJzcGFjZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjbnRs
KSAmJgogCQkgICAgKG0gPSBtX3B1bGx1cChtLCBoZHJzcGFjZSArCiAJCSAgICAgICAgc2l6ZW9m
KHN0cnVjdCBpZWVlODAyMTFfbWVzaGNudGwpKSkgPT0gTlVMTCkgewpAQCAtMTE5NSwyNyArMTI1
MSw2IEBAIG1lc2hfaW5wdXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYg
Km0sIGludCByc3NpLCBpbnQgbmYpCiAJCQkvKiBOQjogZmFsbCB0aHJ1IHRvIGRlbGl2ZXIgbWNh
c3QgZnJhbWVzIGxvY2FsbHkgKi8KIAkJfQogCi0JCS8qCi0JCSAqIFNhdmUgUW9TIGJpdHMgZm9y
IHVzZSBiZWxvdy0tYmVmb3JlIHdlIHN0cmlwIHRoZSBoZWFkZXIuCi0JCSAqLwotCQlpZiAoc3Vi
dHlwZSA9PSBJRUVFODAyMTFfRkMwX1NVQlRZUEVfUU9TKSB7Ci0JCQlxb3MgPSAoZGlyID09IElF
RUU4MDIxMV9GQzFfRElSX0RTVE9EUykgPwotCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9xb3Nm
cmFtZV9hZGRyNCAqKXdoKS0+aV9xb3NbMF0gOgotCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9x
b3NmcmFtZSAqKXdoKS0+aV9xb3NbMF07Ci0JCX0gZWxzZQotCQkJcW9zID0gMDsKLQkJLyoKLQkJ
ICogTmV4dCB1cCwgYW55IGZyYWdtZW50YXRpb24uCi0JCSAqLwotCQlpZiAoIUlFRUU4MDIxMV9J
U19NVUxUSUNBU1Qod2gtPmlfYWRkcjEpKSB7Ci0JCQltID0gaWVlZTgwMjExX2RlZnJhZyhuaSwg
bSwgaGRyc3BhY2UpOwotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCS8qIEZyYWdtZW50IGRyb3Bw
ZWQgb3IgZnJhbWUgbm90IGNvbXBsZXRlIHlldCAqLwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9
Ci0JCXdoID0gTlVMTDsJCS8qIG5vIGxvbmdlciB2YWxpZCwgY2F0Y2ggYW55IHVzZXMgKi8KLQog
CQlpZiAoaWVlZTgwMjExX3JhZGlvdGFwX2FjdGl2ZV92YXAodmFwKSkKIAkJCWllZWU4MDIxMV9y
YWRpb3RhcF9yeCh2YXAsIG0pOwogCQluZWVkX3RhcCA9IDA7CkBAIC0xMjM2LDcgKzEyNzEsNyBA
QCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBtYnVmICptLCBp
bnQgcnNzaSwgaW50IG5mKQogCQkJSUVFRTgwMjExX05PREVfU1RBVChuaSwgcnhfZGVjYXApOwog
CQkJZ290byBlcnI7CiAJCX0KLQkJaWYgKHFvcyAmIElFRUU4MDIxMV9RT1NfQU1TRFUpIHsKKwkJ
aWYgKHFvc1swXSAmIElFRUU4MDIxMV9RT1NfQU1TRFUpIHsKIAkJCW0gPSBpZWVlODAyMTFfZGVj
YXBfYW1zZHUobmksIG0pOwogCQkJaWYgKG0gPT0gTlVMTCkKIAkJCQlyZXR1cm4gSUVFRTgwMjEx
X0ZDMF9UWVBFX0RBVEE7CmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX291dHB1
dC5jIGIvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYwppbmRleCBmNjE3N2Q5Li4xYmQ5
NDUyIDEwMDY0NAotLS0gYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX291dHB1dC5jCisrKyBiL3N5
cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKQEAgLTEwNjksOSArMTA2OSwxMSBAQCBpZWVl
ODAyMTFfZW5jYXAoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25v
ZGUgKm5pLAogCSAqIGFwJ3MgcmVxdWlyZSBhbGwgZGF0YSBmcmFtZXMgdG8gYmUgUW9TLWVuY2Fw
c3VsYXRlZAogCSAqIG9uY2UgbmVnb3RpYXRlZCBpbiB3aGljaCBjYXNlIHdlJ2xsIG5lZWQgdG8g
bWFrZSB0aGlzCiAJICogY29uZmlndXJhYmxlLgorCSAqIE5COiBtZXNoIGRhdGEgZnJhbWVzIGFy
ZSBRb1MuCiAJICovCi0JYWRkcW9zID0gKG5pLT5uaV9mbGFncyAmIChJRUVFODAyMTFfTk9ERV9R
T1N8SUVFRTgwMjExX05PREVfSFQpKSAmJgotCQkgKG0tPm1fZmxhZ3MgJiBNX0VBUE9MKSA9PSAw
OworCWFkZHFvcyA9ICgobmktPm5pX2ZsYWdzICYgKElFRUU4MDIxMV9OT0RFX1FPU3xJRUVFODAy
MTFfTk9ERV9IVCkpIHx8CisJICAgICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNT
KSkgJiYKKwkgICAgKG0tPm1fZmxhZ3MgJiBNX0VBUE9MKSA9PSAwOwogCWlmIChhZGRxb3MpCiAJ
CWhkcnNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NmcmFtZSk7CiAJZWxzZQpAQCAt
MTI3Nyw3ICsxMjc5LDEyIEBAIGllZWU4MDIxMV9lbmNhcChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2
YXAsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJCXFvc1swXSA9IHRpZCAmIElFRUU4MDIx
MV9RT1NfVElEOwogCQlpZiAoaWMtPmljX3dtZS53bWVfd21lQ2hhblBhcmFtcy5jYXBfd21lUGFy
YW1zW2FjXS53bWVwX25vYWNrUG9saWN5KQogCQkJcW9zWzBdIHw9IElFRUU4MDIxMV9RT1NfQUNL
UE9MSUNZX05PQUNLOwotCQlxb3NbMV0gPSAwOworI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX01F
U0gKKwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX01CU1MpIHsKKwkJCXFvc1sx
XSB8PSBJRUVFODAyMTFfUU9TX01DOworCQl9IGVsc2UKKyNlbmRpZgorCQkJcW9zWzFdID0gMDsK
IAkJd2gtPmlfZmNbMF0gfD0gSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1FPUzsKIAogCQlpZiAoKG0t
Pm1fZmxhZ3MgJiBNX0FNUERVX01QRFUpID09IDApIHsKQEAgLTE0MDIsOSArMTQwOSwyMCBAQCBp
ZWVlODAyMTFfZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgbWJ1ZiAq
bTAsCiAJCSAqIHdlIG1hcmsgdGhlIGZpcnN0IGZyYWdtZW50IHdpdGggdGhlIE1PUkVfRlJBRyBi
aXQKIAkJICogaXQgYXV0b21hdGljYWxseSBpcyBwcm9wYWdhdGVkIHRvIGVhY2ggZnJhZ21lbnQ7
IHdlCiAJCSAqIG5lZWQgb25seSBjbGVhciBpdCBvbiB0aGUgbGFzdCBmcmFnbWVudCAoZG9uZSBi
ZWxvdykuCisJCSAqIE5COiBmcmFnIDErIGRvbnQgaGF2ZSBNZXNoIENvbnRyb2wgZmllbGQgcHJl
c2VudC4KIAkJICovCiAJCXdoZiA9IG10b2QobSwgc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqKTsK
IAkJbWVtY3B5KHdoZiwgd2gsIGhkcnNpemUpOworI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX01F
U0gKKwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX01CU1MpIHsKKwkJCWlmIChJ
RUVFODAyMTFfSVNfRFNUT0RTKHdoKSkKKwkJCQkoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVf
YWRkcjQgKikKKwkJCQkgICAgd2hmKS0+aV9xb3NbMV0gJj0gfklFRUU4MDIxMV9RT1NfTUM7CisJ
CQllbHNlCisJCQkJKChzdHJ1Y3QgaWVlZTgwMjExX3Fvc2ZyYW1lICopCisJCQkJICAgIHdoZikt
PmlfcW9zWzFdICY9IH5JRUVFODAyMTFfUU9TX01DOworCQl9CisjZW5kaWYKIAkJKih1aW50MTZf
dCAqKSZ3aGYtPmlfc2VxWzBdIHw9IGh0b2xlMTYoCiAJCQkoZnJhZ25vICYgSUVFRTgwMjExX1NF
UV9GUkFHX01BU0spIDw8CiAJCQkJSUVFRTgwMjExX1NFUV9GUkFHX1NISUZUKTsKLS0gCjEuNy40
LjEKCg==
--e89a8f3ba7075f750604b8fd96af--



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