From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Leblond Subject: Re: [PATCH] message parsing functions for nfqueue Date: Wed, 14 Sep 2005 21:57:32 +0200 Message-ID: <1126727852.5693.18.camel@porky> References: <1123794106.4980.11.camel@porky> <42FBFBAD.8020807@netfilter.org> <11702.195.25.48.253.1123836176.squirrel@mail.inl.fr> <20050812120422.GE16325@rama.de.gnumonks.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-JKXSQCRzdS4dTPu6UISX" Cc: netfilter-devel@lists.netfilter.org, Vincent Deffontaines , Pablo Neira Return-path: To: Harald Welte In-Reply-To: <20050812120422.GE16325@rama.de.gnumonks.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: netfilter-devel-bounces@lists.netfilter.org Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netfilter-devel.vger.kernel.org --=-JKXSQCRzdS4dTPu6UISX Content-Type: multipart/mixed; boundary="=-ULpEEPO+GJ7fo5Oa3dDs" --=-ULpEEPO+GJ7fo5Oa3dDs Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, On Fri, 2005-08-12 at 14:04 +0200, Harald Welte wrote: > On Fri, Aug 12, 2005 at 10:42:56AM +0200, Eric Leblond wrote: > > > Eric Leblond wrote: > > >> This is a patch against libnfnetlink_queue. > > >> > > >> It adds "high" level functions to access to the data contained in a > > >> nfqueue message. These are mostly encapsulation of NFA macros. > I like the generic macros proposed by Pablo, but making nfnetlink_queue > users directly use them is somewhat of a layering violation. I've finally found some time to rewrite the provided functions with Pablo's macros. I've tested it against provided exemple and NuFW and it seems to work fine. BR, --=20 Eric Leblond INL --=-ULpEEPO+GJ7fo5Oa3dDs Content-Disposition: attachment; filename=nfnetlink_queue.diff Content-Type: text/x-patch; name=nfnetlink_queue.diff; charset=ISO-8859-15 Content-Transfer-Encoding: base64 SW5kZXg6IHV0aWxzL25mcW5sX3Rlc3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHV0aWxzL25mcW5sX3Rl c3QuYwkocsOpdmlzaW9uIDQyNjEpDQorKysgdXRpbHMvbmZxbmxfdGVzdC5jCShjb3BpZSBkZSB0 cmF2YWlsKQ0KQEAgLTExLDM1ICsxMSwzNyBAQA0KIHN0YXRpYyB1X2ludDMyX3QgcHJpbnRfcGt0 IChzdHJ1Y3QgbmZhdHRyICp0YltdKQ0KIHsNCiAJaW50IGlkID0gMDsNCi0NCi0JaWYgKHRiW05G UUFfUEFDS0VUX0hEUi0xXSkgew0KLQkJc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyICpwaCA9 IA0KLQkJCQkJTkZBX0RBVEEodGJbTkZRQV9QQUNLRVRfSERSLTFdKTsNCisJc3RydWN0IG5mcW5s X21zZ19wYWNrZXRfaGRyICpwaDsNCisJdV9pbnQzMl90IG1hcmssaWZpOyANCisJaW50IHJldDsN CisJdW5zaWduZWQgaW50IGRhdGFsZW5ndGg7DQorCWNoYXIgKiBkYXRhOw0KKwkNCisJcGggPSBu ZnFubF9nZXRfbXNnX3BhY2tldF9oZHIodGIpOw0KKwlpZiAocGgpew0KIAkJaWQgPSBudG9obChw aC0+cGFja2V0X2lkKTsNCiAJCXByaW50ZigiaHdfcHJvdG9jb2w9MHglMDR4IGhvb2s9JXUgaWQ9 JXUgIiwNCiAJCQludG9ocyhwaC0+aHdfcHJvdG9jb2wpLCBwaC0+aG9vaywgaWQpOw0KIAl9DQot DQotCWlmICh0YltORlFBX01BUkstMV0pIHsNCi0JCXVfaW50MzJfdCBtYXJrID0gDQotCQkJbnRv aGwoKih1X2ludDMyX3QgKilORkFfREFUQSh0YltORlFBX01BUkstMV0pKTsNCisJDQorCW1hcms9 bmZxbmxfZ2V0X25mbWFyayh0Yik7DQorCWlmIChtYXJrKSB7DQogCQlwcmludGYoIm1hcms9JXUg IiwgbWFyayk7DQogCX0NCiANCi0JaWYgKHRiW05GUUFfSUZJTkRFWF9JTkRFVi0xXSkgew0KLQkJ dV9pbnQzMl90IGlmaSA9IA0KLQkJCW50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEodGJbTkZR QV9JRklOREVYX0lOREVWLTFdKSk7DQotCQlwcmludGYoImluZGV2PSV1ICIsIGlmaSk7DQorCXJl dD1uZnFubF9nZXRfaW5kZXYodGIsJmlmaSxOVUxMKTsNCisJaWYgKHJldCkgew0KKwkJcHJpbnRm KCJpbmRldj0ldSAiLCBudG9obChpZmkpKTsNCiAJfQ0KIA0KLQlpZiAodGJbTkZRQV9JRklOREVY X09VVERFVi0xXSkgew0KLQkJdV9pbnQzMl90IGlmaSA9DQotCQkJbnRvaGwoKih1X2ludDMyX3Qg KilORkFfREFUQSh0YltORlFBX0lGSU5ERVhfT1VUREVWLTFdKSk7DQotCQlwcmludGYoIm91dGRl dj0ldSAiLCBpZmkpOw0KKwlyZXQ9bmZxbmxfZ2V0X291dGRldih0YiwmaWZpLE5VTEwpOw0KKwlp ZiAocmV0KSB7DQorCQlwcmludGYoIm91dGRldj0ldSAiLCBudG9obChpZmkpKTsNCiAJfQ0KIA0K LQlpZiAodGJbTkZRQV9QQVlMT0FELTFdKSB7DQotCQlwcmludGYoInBheWxvYWRfbGVuPSVkICIs IE5GQV9QQVlMT0FEKHRiW05GUUFfUEFZTE9BRC0xXSkpOw0KKwlyZXQ9bmZxbmxfZ2V0X3BheWxv YWQodGIsJmRhdGEsJmRhdGFsZW5ndGgpOw0KKwlpZiAocmV0KSB7DQorCQlwcmludGYoInBheWxv YWRfbGVuPSVkICIsIGRhdGFsZW5ndGgpOw0KIAl9DQogDQogCWZwdXRjKCdcbicsIHN0ZG91dCk7 DQpJbmRleDogaW5jbHVkZS9saWJuZm5ldGxpbmtfcXVldWUvbGlibmZuZXRsaW5rX3F1ZXVlLmgN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBpbmNsdWRlL2xpYm5mbmV0bGlua19xdWV1ZS9saWJuZm5ldGxpbmtf cXVldWUuaAkocsOpdmlzaW9uIDQyNjEpDQorKysgaW5jbHVkZS9saWJuZm5ldGxpbmtfcXVldWUv bGlibmZuZXRsaW5rX3F1ZXVlLmgJKGNvcGllIGRlIHRyYXZhaWwpDQpAQCAtMiw2ICsyLDEwIEBA DQogICoNCiAgKiAoQykgMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3Jn Pg0KICAqDQorICoNCisgKiBDaGFuZ2Vsb2cgOiANCisgKiAJKDIwMDUvMDgvMTEpICBhZGRlZCAg cGFyc2luZyBmdW5jdGlvbiAoRXJpYyBMZWJsb25kIDxyZWdpdEBpbmwuZnI+KQ0KKyAqIA0KICAq IFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0 aGUgdGVybXMNCiAgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9y YXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLg0KICAqLw0KQEAgLTIxLDcgKzI1LDcgQEANCiBleHRl cm4gc3RydWN0IG5mbmxfaGFuZGxlICpuZnFubF9uZm5saChzdHJ1Y3QgbmZxbmxfaGFuZGxlICpo KTsNCiBleHRlcm4gaW50IG5mcW5sX2ZkKHN0cnVjdCBuZnFubF9oYW5kbGUgKmgpOw0KIA0KLXR5 cGVkZWYgbmZxbmxfY2FsbGJhY2soc3RydWN0IG5mcW5sX3FfaGFuZGxlICpnaCwgc3RydWN0IG5m Z2VubXNnICpuZm1zZywNCit0eXBlZGVmIGludCAgbmZxbmxfY2FsbGJhY2soc3RydWN0IG5mcW5s X3FfaGFuZGxlICpnaCwgc3RydWN0IG5mZ2VubXNnICpuZm1zZywNCiAJCSAgICAgICBzdHJ1Y3Qg bmZhdHRyICpuZmFbXSwgdm9pZCAqZGF0YSk7DQogDQogDQpAQCAtNDcsMTAgKzUxLDMzIEBADQog CQkJICAgICB1X2ludDMyX3QgdmVyZGljdCwNCiAJCQkgICAgIHVfaW50MzJfdCBkYXRhX2xlbiwN CiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Zik7DQorDQogZXh0ZXJuIGludCBuZnFubF9zZXRf dmVyZGljdF9tYXJrKHN0cnVjdCBuZnFubF9xX2hhbmRsZSAqcWgsIA0KIAkJCQkgIHVfaW50MzJf dCBpZCwNCiAJCQkgICAJICB1X2ludDMyX3QgdmVyZGljdCwgDQogCQkJCSAgdV9pbnQzMl90IG1h cmssDQogCQkJICAgCSAgdV9pbnQzMl90IGRhdGFsZW4sDQogCQkJCSAgdW5zaWduZWQgY2hhciAq YnVmKTsNCisNCisvKiBtZXNzYWdlIHBhcnNpbmcgZnVuY3Rpb24gKi8NCisNCitleHRlcm4gc3Ry dWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyICogbmZxbmxfZ2V0X21zZ19wYWNrZXRfaGRyKHN0cnVj dCBuZmF0dHIgKm5mYVtdKTsNCisNCitleHRlcm4gdV9pbnQzMl90IG5mcW5sX2dldF9uZm1hcmso c3RydWN0IG5mYXR0ciAqbmZhW10pOw0KKw0KK2V4dGVybiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tl dF90aW1lc3RhbXAgKiBuZnFubF9nZXRfdGltZXN0YW1wKHN0cnVjdCBuZmF0dHIgKm5mYVtdKTsN CisNCisvKiByZXR1cm4gMCBpZiBub3Qgc2V0ICovDQorZXh0ZXJuIGludCBuZnFubF9nZXRfaW5k ZXYoc3RydWN0IG5mYXR0ciAqbmZhW10sdV9pbnQzMl90KiBpbmRldiwgdV9pbnQzMl90KiBwaHlz aW5kZXYpOw0KKw0KKy8qIHJldHVybiAwIGlmIG5vdCBzZXQgKi8NCitleHRlcm4gaW50IG5mcW5s X2dldF9vdXRkZXYoc3RydWN0IG5mYXR0ciAqbmZhW10sdV9pbnQzMl90KiBvdXRkZXYsIHVfaW50 MzJfdCogcGh5c291dGRldik7DQorDQorZXh0ZXJuIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2h3 ICogbmZxbmxfZ2V0X3BhY2tldF9odyhzdHJ1Y3QgbmZhdHRyICpuZmFbXSk7DQorDQorLyogcmV0 dXJuIDAgaWYgcHJvYmxlbSAqLw0KK2V4dGVybiBpbnQgbmZxbmxfZ2V0X3BheWxvYWQoc3RydWN0 IG5mYXR0ciAqbmZhW10sY2hhciAqKiBkYXRhLHVuc2lnbmVkIGludCogZGF0YWxlbik7DQorDQor DQorDQogI2VuZGlmCS8qIF9fTElCTkZRTkVUTElOS19IICovDQpJbmRleDogc3JjL2xpYm5mbmV0 bGlua19xdWV1ZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gc3JjL2xpYm5mbmV0bGlua19xdWV1ZS5jCShy w6l2aXNpb24gNDI2MSkNCisrKyBzcmMvbGlibmZuZXRsaW5rX3F1ZXVlLmMJKGNvcGllIGRlIHRy YXZhaWwpDQpAQCAtODksOSArODksOSBAQA0KIH0NCiANCiAvKiBidWlsZCBhIE5GUU5MX01TR19D T05GSUcgbWVzc2FnZSAqLw0KLXN0YXRpYyBpbnQNCisJc3RhdGljIGludA0KIF9fYnVpbGRfc2Vu ZF9jZmdfbXNnKHN0cnVjdCBuZnFubF9oYW5kbGUgKmgsIHVfaW50OF90IGNvbW1hbmQsDQotCQkg ICAgIHVfaW50MTZfdCBxdWV1ZW51bSwgdV9pbnQxNl90IHBmKQ0KKwkJdV9pbnQxNl90IHF1ZXVl bnVtLCB1X2ludDE2X3QgcGYpDQogew0KIAljaGFyIGJ1ZltORk5MX0hFQURFUl9MRU4NCiAJCStO RkFfTEVOR1RIKHNpemVvZihzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQpKV07DQpAQCAtOTks NyArOTksNyBAQA0KIAlzdHJ1Y3Qgbmxtc2doZHIgKm5taCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikg YnVmOw0KIA0KIAluZm5sX2ZpbGxfaGRyKCZoLT5uZm5saCwgbm1oLCAwLCBBRl9VTlNQRUMsIHF1 ZXVlbnVtLA0KLQkJICAgICAgTkZRTkxfTVNHX0NPTkZJRywgTkxNX0ZfUkVRVUVTVHxOTE1fRl9B Q0spOw0KKwkJCU5GUU5MX01TR19DT05GSUcsIE5MTV9GX1JFUVVFU1R8TkxNX0ZfQUNLKTsNCiAN CiAJY21kLmNvbW1hbmQgPSBjb21tYW5kOw0KIAljbWQucGYgPSBodG9ucyhwZik7DQpAQCAtMTA5 LDcgKzEwOSw3IEBADQogfQ0KIA0KIHN0YXRpYyBpbnQgX19uZnFubF9yY3ZfcGt0KHN0cnVjdCBu bG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmZhdHRyICpuZmFbXSwNCi0JCQkgICB2b2lkICpkYXRhKQ0K KwkJdm9pZCAqZGF0YSkNCiB7DQogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRB KG5saCk7DQogCXN0cnVjdCBuZnFubF9oYW5kbGUgKmggPSBkYXRhOw0KQEAgLTE5Niw5ICsxOTYs OSBAQA0KIA0KIC8qIGJpbmQgdGhpcyBzb2NrZXQgdG8gYSBzcGVjaWZpYyBxdWV1ZSBudW1iZXIg Ki8NCiBzdHJ1Y3QgbmZxbmxfcV9oYW5kbGUgKm5mcW5sX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgbmZx bmxfaGFuZGxlICpoLCANCi0JCQkJCSAgdV9pbnQxNl90IG51bSwNCi0JCQkJCSAgbmZxbmxfY2Fs bGJhY2sgKmNiLA0KLQkJCQkJICB2b2lkICpkYXRhKQ0KKwkJdV9pbnQxNl90IG51bSwNCisJCW5m cW5sX2NhbGxiYWNrICpjYiwNCisJCXZvaWQgKmRhdGEpDQogew0KIAlpbnQgcmV0Ow0KIAlzdHJ1 Y3QgbmZxbmxfcV9oYW5kbGUgKnFoOw0KQEAgLTI0Myw3ICsyNDMsNyBAQA0KIH0NCiANCiBpbnQg bmZxbmxfc2V0X21vZGUoc3RydWN0IG5mcW5sX3FfaGFuZGxlICpxaCwNCi0JCSAgIHVfaW50OF90 IG1vZGUsIHVfaW50MzJfdCByYW5nZSkNCisJCXVfaW50OF90IG1vZGUsIHVfaW50MzJfdCByYW5n ZSkNCiB7DQogCWNoYXIgYnVmW05GTkxfSEVBREVSX0xFTg0KIAkJK05GQV9MRU5HVEgoc2l6ZW9m KHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcykpXTsNCkBAIC0yNTEsMTkgKzI1MSwxOSBA QA0KIAlzdHJ1Y3Qgbmxtc2doZHIgKm5taCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOw0KIA0K IAluZm5sX2ZpbGxfaGRyKCZxaC0+aC0+bmZubGgsIG5taCwgMCwgQUZfVU5TUEVDLCBxaC0+aWQs DQotCQkgICAgICBORlFOTF9NU0dfQ09ORklHLCBOTE1fRl9SRVFVRVNUfE5MTV9GX0FDSyk7DQor CQkJTkZRTkxfTVNHX0NPTkZJRywgTkxNX0ZfUkVRVUVTVHxOTE1fRl9BQ0spOw0KIA0KIAlwYXJh bXMuY29weV9yYW5nZSA9IGh0b25sKHJhbmdlKTsNCiAJcGFyYW1zLmNvcHlfbW9kZSA9IG1vZGU7 DQogCW5mbmxfYWRkYXR0cl9sKG5taCwgc2l6ZW9mKGJ1ZiksIE5GUUFfQ0ZHX1BBUkFNUywgJnBh cmFtcywNCi0JCSAgICAgICBzaXplb2YocGFyYW1zKSk7DQorCQkJc2l6ZW9mKHBhcmFtcykpOw0K IA0KIAlyZXR1cm4gbmZubF90YWxrKCZxaC0+aC0+bmZubGgsIG5taCwgMCwgMCwgTlVMTCwgTlVM TCwgTlVMTCk7DQogfQ0KIA0KIHN0YXRpYyBpbnQgX19zZXRfdmVyZGljdChzdHJ1Y3QgbmZxbmxf cV9oYW5kbGUgKnFoLCB1X2ludDMyX3QgaWQsDQotCQkJIHVfaW50MzJfdCB2ZXJkaWN0LCB1X2lu dDMyX3QgbWFyaywgaW50IHNldF9tYXJrLA0KLQkJCSB1X2ludDMyX3QgZGF0YV9sZW4sIHVuc2ln bmVkIGNoYXIgKmRhdGEpDQorCQl1X2ludDMyX3QgdmVyZGljdCwgdV9pbnQzMl90IG1hcmssIGlu dCBzZXRfbWFyaywNCisJCXVfaW50MzJfdCBkYXRhX2xlbiwgdW5zaWduZWQgY2hhciAqZGF0YSkN CiB7DQogCXN0cnVjdCBuZnFubF9tc2dfdmVyZGljdF9oZHIgdmg7DQogCWNoYXIgYnVmW05GTkxf SEVBREVSX0xFTg0KQEAgLTI3OCw4ICsyNzgsOCBAQA0KIAl2aC5pZCA9IGh0b25sKGlkKTsNCiAN CiAJbmZubF9maWxsX2hkcigmcWgtPmgtPm5mbmxoLCBubWgsIDAsIEFGX1VOU1BFQywgcWgtPmlk LA0KLQkJICAgICAgTkZRTkxfTVNHX1ZFUkRJQ1QsIE5MTV9GX1JFUVVFU1QpOw0KLQkJCQ0KKwkJ CU5GUU5MX01TR19WRVJESUNULCBOTE1fRl9SRVFVRVNUKTsNCisNCiAJLyogYWRkIHZlcmRpY3Qg aGVhZGVyICovDQogCW5mbmxfYWRkYXR0cl9sKG5taCwgc2l6ZW9mKGJ1ZiksIE5GUUFfVkVSRElD VF9IRFIsICZ2aCwgc2l6ZW9mKHZoKSk7DQogDQpAQCAtMjk0LDcgKzI5NCw3IEBADQogCQlzdHJ1 Y3QgbmZhdHRyIGRhdGFfYXR0cjsNCiANCiAJCW5mbmxfYnVpbGRfbmZhX2lvdmVjKCZpb3ZbMV0s ICZkYXRhX2F0dHIsIE5GUUFfUEFZTE9BRCwNCi0JCQkJICAgICBkYXRhX2xlbiwgZGF0YSk7DQor CQkJCWRhdGFfbGVuLCBkYXRhKTsNCiAJCW52ZWNzICs9IDI7DQogCX0NCiANCkBAIC0zMDIsMTUg KzMwMiw4NyBAQA0KIH0NCiANCiBpbnQgbmZxbmxfc2V0X3ZlcmRpY3Qoc3RydWN0IG5mcW5sX3Ff aGFuZGxlICpxaCwgdV9pbnQzMl90IGlkLA0KLQkJICAgICAgdV9pbnQzMl90IHZlcmRpY3QsIHVf aW50MzJfdCBkYXRhX2xlbiwgDQotCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYpDQorCQl1X2lu dDMyX3QgdmVyZGljdCwgdV9pbnQzMl90IGRhdGFfbGVuLCANCisJCXVuc2lnbmVkIGNoYXIgKmJ1 ZikNCiB7DQogCXJldHVybiBfX3NldF92ZXJkaWN0KHFoLCBpZCwgdmVyZGljdCwgMCwgMCwgZGF0 YV9sZW4sIGJ1Zik7DQogfQkNCiANCiBpbnQgbmZxbmxfc2V0X3ZlcmRpY3RfbWFyayhzdHJ1Y3Qg bmZxbmxfcV9oYW5kbGUgKnFoLCB1X2ludDMyX3QgaWQsDQotCQkJICAgdV9pbnQzMl90IHZlcmRp Y3QsIHVfaW50MzJfdCBtYXJrLA0KLQkJCSAgIHVfaW50MzJfdCBkYXRhbGVuLCB1bnNpZ25lZCBj aGFyICpidWYpDQorCQl1X2ludDMyX3QgdmVyZGljdCwgdV9pbnQzMl90IG1hcmssDQorCQl1X2lu dDMyX3QgZGF0YWxlbiwgdW5zaWduZWQgY2hhciAqYnVmKQ0KIHsNCiAJcmV0dXJuIF9fc2V0X3Zl cmRpY3QocWgsIGlkLCB2ZXJkaWN0LCBtYXJrLCAxLCBkYXRhbGVuLCBidWYpOw0KIH0NCisNCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKg0KKyAqIE1lc3NhZ2UgcGFyc2luZyBmdW5jdGlvbnMgDQorICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorI2RlZmlu ZSBuZm5sX2dldF9kYXRhKHRiLCBhdHRyLCB0eXBlKQkJCVwNCisJKHsJdHlwZSBfX3JldCA9IDA7 CQkJCQlcDQorCSBpZiAodGJbYXR0ci0xXSkJCQkJCVwNCisJIF9fcmV0ID0gKih0eXBlICopTkZB X0RBVEEodGJbYXR0ci0xXSk7CVwNCisJIF9fcmV0OwkJCQkJCVwNCisJIH0pDQorDQorI2RlZmlu ZSBuZm5sX2dldF9wb2ludGVyX3RvX2RhdGEodGIsIGF0dHIsIHR5cGUpCVwNCisJKHsJdHlwZSAq X19yZXQgPSBOVUxMOwkJCQlcDQorCSBpZiAodGJbYXR0ci0xXSkJCQkJCVwNCisJIF9fcmV0ID0g TkZBX0RBVEEodGJbYXR0ci0xXSk7CQlcDQorCSBfX3JldDsJCQkJCQlcDQorCSB9KQ0KKw0KK3N0 cnVjdCBuZnFubF9tc2dfcGFja2V0X2hkciAqIG5mcW5sX2dldF9tc2dfcGFja2V0X2hkcihzdHJ1 Y3QgbmZhdHRyICpuZmFbXSl7DQorCXJldHVybiBuZm5sX2dldF9wb2ludGVyX3RvX2RhdGEobmZh LE5GUUFfUEFDS0VUX0hEUixzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9oZHIgKTsNCit9DQorDQor dWludDMyX3QgbmZxbmxfZ2V0X25mbWFyayhzdHJ1Y3QgbmZhdHRyICpuZmFbXSl7DQorCXJldHVy biBuZm5sX2dldF9kYXRhKG5mYSwgTkZRQV9NQVJLLCB1X2ludDMyX3QpOw0KK30NCisNCitzdHJ1 Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKiBuZnFubF9nZXRfdGltZXN0YW1wKHN0cnVj dCBuZmF0dHIgKm5mYVtdKXsNCisJcmV0dXJuIG5mbmxfZ2V0X3BvaW50ZXJfdG9fZGF0YShuZmEs TkZRQV9USU1FU1RBTVAsc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wKTsNCit9DQor DQorLyogcmV0dXJuIDAgaWYgbm90IHNldCAqLw0KK2ludCBuZnFubF9nZXRfaW5kZXYoc3RydWN0 IG5mYXR0ciAqbmZhW10sdV9pbnQzMl90KiBpbmRldiwgdV9pbnQzMl90KiBwaHlzaW5kZXYpew0K KwlpZiAoaW5kZXYpew0KKwkJKmluZGV2PW5mbmxfZ2V0X2RhdGEobmZhLCBORlFBX0lGSU5ERVhf SU5ERVYsIHVfaW50MzJfdCk7DQorCQlpZiAocGh5c2luZGV2KXsNCisJCQkqcGh5c2luZGV2PW5m bmxfZ2V0X2RhdGEobmZhLCBORlFBX0lGSU5ERVhfUEhZU0lOREVWLCB1X2ludDMyX3QpOw0KKwkJ fQ0KKwkJcmV0dXJuIDE7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qIHJldHVybiAwIGlm IG5vdCBzZXQgKi8NCitpbnQgbmZxbmxfZ2V0X291dGRldihzdHJ1Y3QgbmZhdHRyICpuZmFbXSx1 X2ludDMyX3QqIG91dGRldiwgdV9pbnQzMl90KiBwaHlzb3V0ZGV2KXsNCisJaWYgKG91dGRldil7 DQorCQkqb3V0ZGV2PW5mbmxfZ2V0X2RhdGEobmZhLCBORlFBX0lGSU5ERVhfT1VUREVWLCB1X2lu dDMyX3QpOw0KKwkJaWYgKHBoeXNvdXRkZXYpew0KKwkJCSpwaHlzb3V0ZGV2PW5mbmxfZ2V0X2Rh dGEobmZhLCBORlFBX0lGSU5ERVhfUEhZU09VVERFViwgdV9pbnQzMl90KTsNCisJCX0NCisJCXJl dHVybiAxOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCitzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tl dF9odyAqIG5mcW5sX2dldF9wYWNrZXRfaHcoc3RydWN0IG5mYXR0ciAqbmZhW10pew0KKwlyZXR1 cm4gbmZubF9nZXRfcG9pbnRlcl90b19kYXRhKG5mYSxORlFBX0hXQUREUixzdHJ1Y3QgbmZxbmxf bXNnX3BhY2tldF9odyk7DQorfQ0KKw0KK2ludCBuZnFubF9nZXRfcGF5bG9hZChzdHJ1Y3QgbmZh dHRyICpuZmFbXSxjaGFyICoqIGRhdGEsdW5zaWduZWQgaW50KiBkYXRhbGVuKXsNCisJaWYgKGRh dGFsZW4pIHsNCisJCSpkYXRhPW5mbmxfZ2V0X3BvaW50ZXJfdG9fZGF0YShuZmEsIE5GUUFfUEFZ TE9BRCwgY2hhciopOw0KKwkJaWYgKCpkYXRhKXsNCisJCQkqZGF0YWxlbj1ORkFfUEFZTE9BRChu ZmFbTkZRQV9QQVlMT0FELTFdKTsNCisJCQlyZXR1cm4gMTsNCisJCX0NCisJfQ0KKwlyZXR1cm4g MDsNCit9DQorDQorDQorDQpJbmRleDogc3JjL01ha2VmaWxlLmFtDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g c3JjL01ha2VmaWxlLmFtCShyw6l2aXNpb24gNDI2MSkNCisrKyBzcmMvTWFrZWZpbGUuYW0JKGNv cGllIGRlIHRyYXZhaWwpDQpAQCAtMiw3ICsyLDcgQEANCiANCiAjRVhUUkFfRElTVCA9ICQobWFu X01BTlMpIGFjaW5jbHVkZS5tNA0KIA0KLUlOQ0xVREVTID0gJChhbGxfaW5jbHVkZXMpIC1JJCh0 b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJHtLRVJORUxESVJ9IA0KK0lOQ0xVREVTID0gJChhbGxfaW5j bHVkZXMpIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JJHtLRVJORUxESVJ9DQogQU1fQ0ZMQUdT PS1mUElDIC1XYWxsDQogTElCUz0NCiANCg== --=-ULpEEPO+GJ7fo5Oa3dDs-- --=-JKXSQCRzdS4dTPu6UISX Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQBDKICsnxA7CdMWjzIRAjJJAKCQNfetpcwDEAROBCumyTG8vK9FFgCfZBD/ 3PvHqHSP+jlT48c9LP+Loek= =vxeS -----END PGP SIGNATURE----- --=-JKXSQCRzdS4dTPu6UISX--