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>