Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Feb 2012 09:26:11 +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%2BsBSo%2BS-quy2p1O8k9TDZO1Csgg19pgTMv7y0VeXWSgq3=mzQ@mail.gmail.com>
In-Reply-To: <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org>
References:  <CA%2BsBSoJGzabfyt8EXoT-g=GTJD0upX5jbRqfLWKQKzXu2FivaA@mail.gmail.com> <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org>

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

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 FreeB=
SD?
>>
>> 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_qosframe=
);
>> 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_mesh=
cntl);
>> }
>> ...
>> 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 tabl=
e s36 (p140)
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* for the rules. =A0XXX tap fwd'd packets=
 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_add=
r1) &&
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dir =3D=3D IEEE80211_FC1_DIR_FROMDS=
)) ?
> + =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_fragmen=
t()?

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.

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



--=20
Monthadar Al Jaberi

--bcaec529a061d2903404b8fc76ec
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_gyo3jbm30

RnJvbSBjMGZlYjE3ODI1YTg2MGIxMTdiNWU3NzZiYWU5ZGRhYjNmZWRmNWI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNb250aGFkYXIgQWwgSmFiZXJpIDxtb250aGFkYXJAZ21haWwu
Y29tPgpEYXRlOiBUdWUsIDE0IEZlYiAyMDEyIDE2OjQ3OjQzICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gTWFrZSBtZXNoIGRhdGEgZnJhbWVzIHRvIGJlIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKS4K
CiogSW50cm9kdWNlIG5ldyBmbGFnIGZvciBRb1MgY29udHJvbCBmaWVsZDsKKiBDaGFuZ2UgaW4g
bWVzaF9pbnB1dCB0byB2YWxpZGF0ZSB0aGF0IFFvUyBpcyBzZXQgYW5kIE1lc2ggQ29udHJvbCBm
aWVsZAppcyBwcmVzZW50LCBhbHNvIGJvdGggYnl0ZXMgb2YgdGhlIFFvUyBhcmUgcmVhZDsKKiBN
b3ZlZCBkZWZyYWdtZW50YXRpb24gaW4gbWVzaF9pbnB1dCBiZWZvcmUgd2UgdHJ5IHRvIGZvcndh
cmQgcGFja2V0IGFzCmluZmVycmVkIGZyb20gYW1lbmRtZW50IHNwZWMsIGJlY2F1c2UgTWVzaCBD
b250cm9sIGZpZWxkIG9ubHkgcHJlc2VudCBpbiBmaXJzdApmcmFnbWVudDsKKiBDaGFuZ2VkIGlu
IGllZWU4MDIxMV9lbmNhcCB0byBzZXQgUW9TIHN1YnR5cGUgYW5kIE1lc2ggQ29udHJvbCBmaWVs
ZCBwcmVzZW50OwotLS0KIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaCAgICAgICAgfCAgICA3ICsr
Kwogc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMgICB8ICAgODUgKysrKysrKysrKysrKysr
KysrKysrKysrKysrLS0tLS0tLS0tLS0KIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMg
fCAgIDEzICsrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCAyOCBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExLmggYi9zeXMvbmV0
ODAyMTEvaWVlZTgwMjExLmgKaW5kZXggMDI4YWZlYy4uMjliZmEzYyAxMDA2NDQKLS0tIGEvc3lz
L25ldDgwMjExL2llZWU4MDIxMS5oCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaApAQCAt
MTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc2ZyYW1lX2FkZHI0IHsKICNkZWZp
bmUJSUVFRTgwMjExX1FPU19FT1NQCQkJMHgxMAkvKiBFbmRPZlNlcnZpY2UgUGVyaW9kKi8KICNk
ZWZpbmUJSUVFRTgwMjExX1FPU19FT1NQX1MJCQk0CiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfVElE
CQkJMHgwZgorLyogcW9zWzFdIGJ5dGUgdXNlZCBmb3IgYWxsIGZyYW1lcyBzZW50IGJ5IG1lc2gg
U1RBcyBpbiBhIG1lc2ggQlNTICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfTUMJCQkweDEwCS8q
IE1lc2ggY29udHJvbCAqLworLyogTWVzaCBwb3dlciBzYXZlIGxldmVsKi8KKyNkZWZpbmUgSUVF
RTgwMjExX1FPU19NRVNIX1BTTAkJCTB4MjAKKy8qIE1lc2ggUmVjZWl2ZXIgU2VydmljZSBQZXJp
b2QgSW5pdGlhdGVkICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfUlNQSQkJCTB4NDAKKy8qIGJp
dHMgMTEgdG8gMTUgcmVzZXJ2ZWQgKi8KIAogLyogZG9lcyBmcmFtZSBoYXZlIFFvUyBzZXF1ZW5j
ZSBjb250cm9sIGRhdGEgKi8KICNkZWZpbmUJSUVFRTgwMjExX1FPU19IQVNfU0VRKHdoKSBcCmRp
ZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYyBiL3N5cy9uZXQ4MDIxMS9p
ZWVlODAyMTFfbWVzaC5jCmluZGV4IGI5MmY2OTUuLmU0N2Q5MWEgMTAwNjQ0Ci0tLSBhL3N5cy9u
ZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5jCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVz
aC5jCkBAIC0xMDQ3LDkgKzEwNDcsOSBAQCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9k
ZSAqbmksIHN0cnVjdCBtYnVmICptLCBpbnQgcnNzaSwgaW50IG5mKQogCXN0cnVjdCBpZWVlODAy
MTFfZnJhbWUgKndoOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaGNudGwgKm1jOwogCWlu
dCBoZHJzcGFjZSwgbWVzaGRybGVuLCBuZWVkX3RhcDsKLQl1aW50OF90IGRpciwgdHlwZSwgc3Vi
dHlwZSwgcW9zOworCXVpbnQ4X3QgZGlyLCB0eXBlLCBzdWJ0eXBlOwogCXVpbnQzMl90IHNlcTsK
LQl1aW50OF90ICphZGRyOworCXVpbnQ4X3QgKmFkZHIsIHFvc1syXTsKIAlpZWVlODAyMTFfc2Vx
IHJ4c2VxOwogCiAJS0FTU0VSVChuaSAhPSBOVUxMLCAoIm51bGwgbm9kZSIpKTsKQEAgLTExNDYs
OCArMTE0Niw2NCBAQCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVj
dCBtYnVmICptLCBpbnQgcnNzaSwgaW50IG5mKQogCQkJdmFwLT5pdl9zdGF0cy5pc19yeF93cm9u
Z2RpcisrOwogCQkJZ290byBlcnI7CiAJCX0KLQkJLyogcHVsbCB1cCBlbm91Z2ggdG8gZ2V0IHRv
IHRoZSBtZXNoIGNvbnRyb2wgKi8KKworCQkvKiBBbGwgTWVzaCBkYXRhIGZyYW1lcyBhcmUgUW9T
IHN1YnR5cGUgKi8KKwkJaWYgKCFIQVNfU0VRKHR5cGUpKSB7CisJCQlJRUVFODAyMTFfRElTQ0FS
RCh2YXAsIElFRUU4MDIxMV9NU0dfSU5QVVQsCisJCQkgICAgd2gsICJkYXRhIiwgImluY29ycmVj
dCBzdWJ0eXBlIDB4JXgiLCBzdWJ0eXBlKTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfcnhfYmFkc3Vi
dHlwZSsrOworCQkJZ290byBlcnI7CisJCX0KKworCQkvKgorCQkgKiBOZXh0IHVwLCBhbnkgZnJh
Z21lbnRhdGlvbi4KKwkJICogWFhYOiB3ZSBkZWZyYWcgYmVmb3JlIHdlIGV2ZW4gdHJ5IHRvIGZv
cndhcmQsCisJCSAqIE1lc2ggQ29udHJvbCBmaWVsZCBpcyBub3QgcHJlc2VudCBpbiBzdWItc2Vx
dWVudAorCQkgKiBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBEcmFm
IDQuMC4KKwkJICovCiAJCWhkcnNwYWNlID0gaWVlZTgwMjExX2hkcnNwYWNlKGljLCB3aCk7CisJ
CWlmICghSUVFRTgwMjExX0lTX01VTFRJQ0FTVCh3aC0+aV9hZGRyMSkpIHsKKwkJCW0gPSBpZWVl
ODAyMTFfZGVmcmFnKG5pLCBtLCBoZHJzcGFjZSk7CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJ
LyogRnJhZ21lbnQgZHJvcHBlZCBvciBmcmFtZSBub3QgY29tcGxldGUgeWV0ICovCisJCQkJZ290
byBvdXQ7CisJCQl9CisJCX0KKwkJd2ggPSBtdG9kKG0sIHN0cnVjdCBpZWVlODAyMTFfZnJhbWUg
Kik7IC8qIE5COiBhZnRlciBkZWZyYWcgKi8KKworCQkvKgorCQkgKiBOb3cgd2UgaGF2ZSBhIGNv
bXBsZXRlIE1lc2ggRGF0YSBmcmFtZS4KKwkJICovCisKKwkJLyoKKwkJICogT25seSBncm91cCBh
ZGRyZXNzZWQgTWVzaCBkYXRhIGZyYW1lcyBhcmUgMyBhZGRyZXNzCisJCSAqIHFvcyBmcmFtZXMg
YW1vbmcgdGhlIGRpZmZlcmVudCBNZXNoIERhdGEgZnJhbWVzIGFzCisJCSAqIHNwZWNpZmllZCBp
biBhbWVuZG1lbnQuCisJCSAqLworCQlpZiAoSUVFRTgwMjExX0lTX01VTFRJQ0FTVCh3aC0+aV9h
ZGRyMSkgJiYKKwkJICAgIGRpciA9PSBJRUVFODAyMTFfRkMxX0RJUl9GUk9NRFMpCisJCQkqKHVp
bnQxNl90ICopcW9zID0gKih1aW50MTZfdCAqKQorCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9x
b3NmcmFtZSAqKXdoKS0+aV9xb3M7CisJCWVsc2UKKwkJCSoodWludDE2X3QgKilxb3MgPSAqKHVp
bnQxNl90ICopCisJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQgKil3aCkt
PmlfcW9zOworCisJCS8qCisJCSAqIE5COiBUaGUgbWVzaCBTVEEgc2V0cyB0aGUgTWVzaCBDb250
cm9sIFByZXNlbnQKKwkJICogc3ViZmllbGQgdG8gMSBpbiB0aGUgTWVzaCBEYXRhIGZyYW1lIGNv
bnRhaW5pbmcKKwkJICogYW4gdW5mcmFnbWVudGVkIE1TRFUsIGFuIEEtTVNEVSwgb3IgdGhlIGZp
cnN0CisJCSAqIGZyYWdtZW50IG9mIGFuIE1TRFUuCisJCSAqIEFmdGVyIGRlZnJhZyBpdCBzaG91
bGQgYWx3YXlzIGJlIHByZXNlbnQuCisJCSAqLworCQlpZiAoIShxb3NbMV0gJiBJRUVFODAyMTFf
UU9TX01DKSkgeworCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19N
RVNILAorCQkJICAgIG5pLT5uaV9tYWNhZGRyLCBOVUxMLAorCQkJICAgICIlcyIsICJNZXNoIGNv
bnRyb2wgZmllbGQgbm90IHByZXNlbnQiKTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfcnhfZWxlbV9t
aXNzaW5nKys7IC8qIFhYWDoga2luZGEgKi8KKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogcHVs
bCB1cCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBtZXNoIGNvbnRyb2wgKi8KIAkJaWYgKG0tPm1fbGVu
IDwgaGRyc3BhY2UgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNoY250bCkgJiYKIAkJICAg
IChtID0gbV9wdWxsdXAobSwgaGRyc3BhY2UgKwogCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVl
ZTgwMjExX21lc2hjbnRsKSkpID09IE5VTEwpIHsKQEAgLTExOTUsMjcgKzEyNTEsNiBAQCBtZXNo
X2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBtYnVmICptLCBpbnQgcnNz
aSwgaW50IG5mKQogCQkJLyogTkI6IGZhbGwgdGhydSB0byBkZWxpdmVyIG1jYXN0IGZyYW1lcyBs
b2NhbGx5ICovCiAJCX0KIAotCQkvKgotCQkgKiBTYXZlIFFvUyBiaXRzIGZvciB1c2UgYmVsb3ct
LWJlZm9yZSB3ZSBzdHJpcCB0aGUgaGVhZGVyLgotCQkgKi8KLQkJaWYgKHN1YnR5cGUgPT0gSUVF
RTgwMjExX0ZDMF9TVUJUWVBFX1FPUykgewotCQkJcW9zID0gKGRpciA9PSBJRUVFODAyMTFfRkMx
X0RJUl9EU1RPRFMpID8KLQkJCSAgICAoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQg
Kil3aCktPmlfcW9zWzBdIDoKLQkJCSAgICAoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWUgKil3
aCktPmlfcW9zWzBdOwotCQl9IGVsc2UKLQkJCXFvcyA9IDA7Ci0JCS8qCi0JCSAqIE5leHQgdXAs
IGFueSBmcmFnbWVudGF0aW9uLgotCQkgKi8KLQkJaWYgKCFJRUVFODAyMTFfSVNfTVVMVElDQVNU
KHdoLT5pX2FkZHIxKSkgewotCQkJbSA9IGllZWU4MDIxMV9kZWZyYWcobmksIG0sIGhkcnNwYWNl
KTsKLQkJCWlmIChtID09IE5VTEwpIHsKLQkJCQkvKiBGcmFnbWVudCBkcm9wcGVkIG9yIGZyYW1l
IG5vdCBjb21wbGV0ZSB5ZXQgKi8KLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQl3aCA9IE5V
TEw7CQkvKiBubyBsb25nZXIgdmFsaWQsIGNhdGNoIGFueSB1c2VzICovCi0KIAkJaWYgKGllZWU4
MDIxMV9yYWRpb3RhcF9hY3RpdmVfdmFwKHZhcCkpCiAJCQlpZWVlODAyMTFfcmFkaW90YXBfcngo
dmFwLCBtKTsKIAkJbmVlZF90YXAgPSAwOwpAQCAtMTIzNiw3ICsxMjcxLDcgQEAgbWVzaF9pbnB1
dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGlu
dCBuZikKIAkJCUlFRUU4MDIxMV9OT0RFX1NUQVQobmksIHJ4X2RlY2FwKTsKIAkJCWdvdG8gZXJy
OwogCQl9Ci0JCWlmIChxb3MgJiBJRUVFODAyMTFfUU9TX0FNU0RVKSB7CisJCWlmIChxb3NbMF0g
JiBJRUVFODAyMTFfUU9TX0FNU0RVKSB7CiAJCQltID0gaWVlZTgwMjExX2RlY2FwX2Ftc2R1KG5p
LCBtKTsKIAkJCWlmIChtID09IE5VTEwpCiAJCQkJcmV0dXJuIElFRUU4MDIxMV9GQzBfVFlQRV9E
QVRBOwpkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYyBiL3N5cy9u
ZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKaW5kZXggZjYxNzdkOS4uOGIyYjUwMSAxMDA2NDQK
LS0tIGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYworKysgYi9zeXMvbmV0ODAyMTEv
aWVlZTgwMjExX291dHB1dC5jCkBAIC0xMDY5LDkgKzEwNjksMTEgQEAgaWVlZTgwMjExX2VuY2Fw
KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkg
KiBhcCdzIHJlcXVpcmUgYWxsIGRhdGEgZnJhbWVzIHRvIGJlIFFvUy1lbmNhcHN1bGF0ZWQKIAkg
KiBvbmNlIG5lZ290aWF0ZWQgaW4gd2hpY2ggY2FzZSB3ZSdsbCBuZWVkIHRvIG1ha2UgdGhpcwog
CSAqIGNvbmZpZ3VyYWJsZS4KKwkgKiBOQjogbWVzaCBkYXRhIGZyYW1lcyBhcmUgUW9TLgogCSAq
LwotCWFkZHFvcyA9IChuaS0+bmlfZmxhZ3MgJiAoSUVFRTgwMjExX05PREVfUU9TfElFRUU4MDIx
MV9OT0RFX0hUKSkgJiYKLQkJIChtLT5tX2ZsYWdzICYgTV9FQVBPTCkgPT0gMDsKKwlhZGRxb3Mg
PSAoKG5pLT5uaV9mbGFncyAmIChJRUVFODAyMTFfTk9ERV9RT1N8SUVFRTgwMjExX05PREVfSFQp
KSB8fAorCSAgICAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fTUJTUykpICYmCisJICAg
IChtLT5tX2ZsYWdzICYgTV9FQVBPTCkgPT0gMDsKIAlpZiAoYWRkcW9zKQogCQloZHJzaXplID0g
c2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWUpOwogCWVsc2UKQEAgLTEyNzcsNyArMTI3
OSwxMiBAQCBpZWVlODAyMTFfZW5jYXAoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKm5pLAogCQlxb3NbMF0gPSB0aWQgJiBJRUVFODAyMTFfUU9TX1RJRDsK
IAkJaWYgKGljLT5pY193bWUud21lX3dtZUNoYW5QYXJhbXMuY2FwX3dtZVBhcmFtc1thY10ud21l
cF9ub2Fja1BvbGljeSkKIAkJCXFvc1swXSB8PSBJRUVFODAyMTFfUU9TX0FDS1BPTElDWV9OT0FD
SzsKLQkJcW9zWzFdID0gMDsKKyNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9NRVNICisJCWlmICh2
YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNTKSB7CisJCQlxb3NbMV0gfD0gSUVFRTgw
MjExX1FPU19NQzsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCXFvc1sxXSA9IDA7CiAJCXdoLT5pX2Zj
WzBdIHw9IElFRUU4MDIxMV9GQzBfU1VCVFlQRV9RT1M7CiAKIAkJaWYgKChtLT5tX2ZsYWdzICYg
TV9BTVBEVV9NUERVKSA9PSAwKSB7Ci0tIAoxLjcuNC4xCgo=
--bcaec529a061d2903404b8fc76ec--



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