From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Leblond Subject: [PATCH] message parsing functions for nfqueue Date: Thu, 11 Aug 2005 23:01:46 +0200 Message-ID: <1123794106.4980.11.camel@porky> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-Kl+wlPYaluobSvFvusFR" Cc: netfilter-devel@lists.netfilter.org, Vincent Deffontaines Return-path: To: laforge@netfilter.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 --=-Kl+wlPYaluobSvFvusFR Content-Type: multipart/mixed; boundary="=-o+Fe3+PA3TJjpF1d6H1d" --=-o+Fe3+PA3TJjpF1d6H1d Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, 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. The exemple provided in the utils directory now uses these functions. I've also modified NuFW to use the new API to test its usability. The obtained code is clean and the port was easy, thus I consider it improves the situation. Although, it may miss some higher level functions to access to multiple fields at the same time. I've thought about some but they may be too NuFW oriented.=20 Feedbacks welcome. BR, --=20 Eric Leblond NuFW, Now User Filtering Works : http://www.nufw.org --=-o+Fe3+PA3TJjpF1d6H1d Content-Disposition: attachment; filename=libnfnetlink_nfqueue.diff Content-Type: text/x-patch; name=libnfnetlink_nfqueue.diff; charset=ISO-8859-15 Content-Transfer-Encoding: base64 SW5kZXg6IHV0aWxzL25mcW5sX3Rlc3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHV0aWxzL25mcW5sX3Rl c3QuYwkocmV2aXNpb24gNDIzNykNCisrKyB1dGlscy9uZnFubF90ZXN0LmMJKHdvcmtpbmcgY29w eSkNCkBAIC0xMSwzNSArMTEsMzcgQEANCiBzdGF0aWMgdV9pbnQzMl90IHByaW50X3BrdCAoc3Ry dWN0IG5mYXR0ciAqdGJbXSkNCiB7DQogCWludCBpZCA9IDA7DQotDQotCWlmICh0YltORlFBX1BB Q0tFVF9IRFItMV0pIHsNCi0JCXN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2hkciAqcGggPSANCi0J CQkJCU5GQV9EQVRBKHRiW05GUUFfUEFDS0VUX0hEUi0xXSk7DQorCXN0cnVjdCBuZnFubF9tc2df cGFja2V0X2hkciAqcGg7DQorCXVfaW50MzJfdCBtYXJrLGlmaTsgDQorCWludCByZXQ7DQorCXVu c2lnbmVkIGludCBkYXRhbGVuZ3RoOw0KKwljaGFyICogZGF0YTsNCisJDQorCXBoID0gbmZxbmxf Z2V0X21zZ19wYWNrZXRfaGRyKHRiKTsNCisJaWYgKHBoKXsNCiAJCWlkID0gbnRvaGwocGgtPnBh Y2tldF9pZCk7DQogCQlwcmludGYoImh3X3Byb3RvY29sPTB4JTA0eCBob29rPSV1IGlkPSV1ICIs DQogCQkJbnRvaHMocGgtPmh3X3Byb3RvY29sKSwgcGgtPmhvb2ssIGlkKTsNCiAJfQ0KLQ0KLQlp ZiAodGJbTkZRQV9NQVJLLTFdKSB7DQotCQl1X2ludDMyX3QgbWFyayA9IA0KLQkJCW50b2hsKCoo dV9pbnQzMl90ICopTkZBX0RBVEEodGJbTkZRQV9NQVJLLTFdKSk7DQorCQ0KKwltYXJrPW5mcW5s X2dldF9uZm1hcmsodGIpOw0KKwlpZiAobWFyaykgew0KIAkJcHJpbnRmKCJtYXJrPSV1ICIsIG1h cmspOw0KIAl9DQogDQotCWlmICh0YltORlFBX0lGSU5ERVhfSU5ERVYtMV0pIHsNCi0JCXVfaW50 MzJfdCBpZmkgPSANCi0JCQludG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW05GUUFfSUZJ TkRFWF9JTkRFVi0xXSkpOw0KLQkJcHJpbnRmKCJpbmRldj0ldSAiLCBpZmkpOw0KKwlyZXQ9bmZx bmxfZ2V0X2luZGV2KHRiLCZpZmksTlVMTCk7DQorCWlmIChyZXQpIHsNCisJCXByaW50ZigiaW5k ZXY9JXUgIiwgbnRvaGwoaWZpKSk7DQogCX0NCiANCi0JaWYgKHRiW05GUUFfSUZJTkRFWF9PVVRE RVYtMV0pIHsNCi0JCXVfaW50MzJfdCBpZmkgPQ0KLQkJCW50b2hsKCoodV9pbnQzMl90ICopTkZB X0RBVEEodGJbTkZRQV9JRklOREVYX09VVERFVi0xXSkpOw0KLQkJcHJpbnRmKCJvdXRkZXY9JXUg IiwgaWZpKTsNCisJcmV0PW5mcW5sX2dldF9vdXRkZXYodGIsJmlmaSxOVUxMKTsNCisJaWYgKHJl dCkgew0KKwkJcHJpbnRmKCJvdXRkZXY9JXUgIiwgbnRvaGwoaWZpKSk7DQogCX0NCiANCi0JaWYg KHRiW05GUUFfUEFZTE9BRC0xXSkgew0KLQkJcHJpbnRmKCJwYXlsb2FkX2xlbj0lZCAiLCBORkFf UEFZTE9BRCh0YltORlFBX1BBWUxPQUQtMV0pKTsNCisJcmV0PW5mcW5sX2dldF9wYXlsb2FkKHRi LCZkYXRhLCZkYXRhbGVuZ3RoKTsNCisJaWYgKHJldCkgew0KKwkJcHJpbnRmKCJwYXlsb2FkX2xl bj0lZCAiLCBkYXRhbGVuZ3RoKTsNCiAJfQ0KIA0KIAlmcHV0YygnXG4nLCBzdGRvdXQpOw0KSW5k ZXg6IGluY2x1ZGUvbGlibmZuZXRsaW5rX3F1ZXVlL2xpYm5mbmV0bGlua19xdWV1ZS5oDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gaW5jbHVkZS9saWJuZm5ldGxpbmtfcXVldWUvbGlibmZuZXRsaW5rX3F1ZXVl LmgJKHJldmlzaW9uIDQyMzcpDQorKysgaW5jbHVkZS9saWJuZm5ldGxpbmtfcXVldWUvbGlibmZu ZXRsaW5rX3F1ZXVlLmgJKHdvcmtpbmcgY29weSkNCkBAIC0yLDYgKzIsMTAgQEANCiAgKg0KICAq IChDKSAyMDA1IGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+DQogICoNCisg Kg0KKyAqIENoYW5nZWxvZyA6IA0KKyAqIAkoMjAwNS8wOC8xMSkgIGFkZGVkICBwYXJzaW5nIGZ1 bmN0aW9uIChFcmljIExlYmxvbmQgPHJlZ2l0QGlubC5mcj4pDQorICogDQogICogVGhpcyBzb2Z0 d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcw0K ICAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVp biBieSByZWZlcmVuY2UuDQogICovDQpAQCAtMjEsNyArMjUsNyBAQA0KIGV4dGVybiBzdHJ1Y3Qg bmZubF9oYW5kbGUgKm5mcW5sX25mbmxoKHN0cnVjdCBuZnFubF9oYW5kbGUgKmgpOw0KIGV4dGVy biBpbnQgbmZxbmxfZmQoc3RydWN0IG5mcW5sX2hhbmRsZSAqaCk7DQogDQotdHlwZWRlZiBuZnFu bF9jYWxsYmFjayhzdHJ1Y3QgbmZxbmxfcV9oYW5kbGUgKmdoLCBzdHJ1Y3QgbmZnZW5tc2cgKm5m bXNnLA0KK3R5cGVkZWYgaW50ICBuZnFubF9jYWxsYmFjayhzdHJ1Y3QgbmZxbmxfcV9oYW5kbGUg KmdoLCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnLA0KIAkJICAgICAgIHN0cnVjdCBuZmF0dHIgKm5m YVtdLCB2b2lkICpkYXRhKTsNCiANCiANCkBAIC00NywxMCArNTEsMzMgQEANCiAJCQkgICAgIHVf aW50MzJfdCB2ZXJkaWN0LA0KIAkJCSAgICAgdV9pbnQzMl90IGRhdGFfbGVuLA0KIAkJCSAgICAg dW5zaWduZWQgY2hhciAqYnVmKTsNCisNCiBleHRlcm4gaW50IG5mcW5sX3NldF92ZXJkaWN0X21h cmsoc3RydWN0IG5mcW5sX3FfaGFuZGxlICpxaCwgDQogCQkJCSAgdV9pbnQzMl90IGlkLA0KIAkJ CSAgIAkgIHVfaW50MzJfdCB2ZXJkaWN0LCANCiAJCQkJICB1X2ludDMyX3QgbWFyaywNCiAJCQkg ICAJICB1X2ludDMyX3QgZGF0YWxlbiwNCiAJCQkJICB1bnNpZ25lZCBjaGFyICpidWYpOw0KKw0K Ky8qIG1lc3NhZ2UgcGFyc2luZyBmdW5jdGlvbiAqLw0KKw0KK2V4dGVybiBzdHJ1Y3QgbmZxbmxf bXNnX3BhY2tldF9oZHIgKiBuZnFubF9nZXRfbXNnX3BhY2tldF9oZHIoc3RydWN0IG5mYXR0ciAq bmZhW10pOw0KKw0KK2V4dGVybiB1X2ludDMyX3QgbmZxbmxfZ2V0X25mbWFyayhzdHJ1Y3QgbmZh dHRyICpuZmFbXSk7DQorDQorZXh0ZXJuIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFt cCAqIG5mcW5sX2dldF90aW1lc3RhbXAoc3RydWN0IG5mYXR0ciAqbmZhW10pOw0KKw0KKy8qIHJl dHVybiAwIGlmIG5vdCBzZXQgKi8NCitleHRlcm4gaW50IG5mcW5sX2dldF9pbmRldihzdHJ1Y3Qg bmZhdHRyICpuZmFbXSx1X2ludDMyX3QqIGluZGV2LCB1X2ludDMyX3QqIHBoeXNpbmRldik7DQor DQorLyogcmV0dXJuIDAgaWYgbm90IHNldCAqLw0KK2V4dGVybiBpbnQgbmZxbmxfZ2V0X291dGRl dihzdHJ1Y3QgbmZhdHRyICpuZmFbXSx1X2ludDMyX3QqIG91dGRldiwgdV9pbnQzMl90KiBwaHlz b3V0ZGV2KTsNCisNCitleHRlcm4gc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgKiBuZnFubF9n ZXRfcGFja2V0X2h3KHN0cnVjdCBuZmF0dHIgKm5mYVtdKTsNCisNCisvKiByZXR1cm4gMCBpZiBw cm9ibGVtICovDQorZXh0ZXJuIGludCBuZnFubF9nZXRfcGF5bG9hZChzdHJ1Y3QgbmZhdHRyICpu ZmFbXSxjaGFyICoqIGRhdGEsdW5zaWduZWQgaW50KiBkYXRhbGVuKTsNCisNCisNCisNCiAjZW5k aWYJLyogX19MSUJORlFORVRMSU5LX0ggKi8NCkluZGV4OiBzcmMvbGlibmZuZXRsaW5rX3F1ZXVl LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBzcmMvbGlibmZuZXRsaW5rX3F1ZXVlLmMJKHJldmlzaW9uIDQy MzcpDQorKysgc3JjL2xpYm5mbmV0bGlua19xdWV1ZS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtODks OSArODksOSBAQA0KIH0NCiANCiAvKiBidWlsZCBhIE5GUU5MX01TR19DT05GSUcgbWVzc2FnZSAq Lw0KLXN0YXRpYyBpbnQNCisJc3RhdGljIGludA0KIF9fYnVpbGRfc2VuZF9jZmdfbXNnKHN0cnVj dCBuZnFubF9oYW5kbGUgKmgsIHVfaW50OF90IGNvbW1hbmQsDQotCQkgICAgIHVfaW50MTZfdCBx dWV1ZW51bSwgdV9pbnQxNl90IHBmKQ0KKwkJdV9pbnQxNl90IHF1ZXVlbnVtLCB1X2ludDE2X3Qg cGYpDQogew0KIAljaGFyIGJ1ZltORk5MX0hFQURFUl9MRU4NCiAJCStORkFfTEVOR1RIKHNpemVv ZihzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQpKV07DQpAQCAtOTksNyArOTksNyBAQA0KIAlz dHJ1Y3Qgbmxtc2doZHIgKm5taCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOw0KIA0KIAluZm5s X2ZpbGxfaGRyKCZoLT5uZm5saCwgbm1oLCAwLCBBRl9VTlNQRUMsIHF1ZXVlbnVtLA0KLQkJICAg ICAgTkZRTkxfTVNHX0NPTkZJRywgTkxNX0ZfUkVRVUVTVHxOTE1fRl9BQ0spOw0KKwkJCU5GUU5M X01TR19DT05GSUcsIE5MTV9GX1JFUVVFU1R8TkxNX0ZfQUNLKTsNCiANCiAJY21kLmNvbW1hbmQg PSBjb21tYW5kOw0KIAljbWQucGYgPSBodG9ucyhwZik7DQpAQCAtMTA5LDcgKzEwOSw3IEBADQog fQ0KIA0KIHN0YXRpYyBpbnQgX19uZnFubF9yY3ZfcGt0KHN0cnVjdCBubG1zZ2hkciAqbmxoLCBz dHJ1Y3QgbmZhdHRyICpuZmFbXSwNCi0JCQkgICB2b2lkICpkYXRhKQ0KKwkJdm9pZCAqZGF0YSkN CiB7DQogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKG5saCk7DQogCXN0cnVj dCBuZnFubF9oYW5kbGUgKmggPSBkYXRhOw0KQEAgLTE5Niw5ICsxOTYsOSBAQA0KIA0KIC8qIGJp bmQgdGhpcyBzb2NrZXQgdG8gYSBzcGVjaWZpYyBxdWV1ZSBudW1iZXIgKi8NCiBzdHJ1Y3QgbmZx bmxfcV9oYW5kbGUgKm5mcW5sX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgbmZxbmxfaGFuZGxlICpoLCAN Ci0JCQkJCSAgdV9pbnQxNl90IG51bSwNCi0JCQkJCSAgbmZxbmxfY2FsbGJhY2sgKmNiLA0KLQkJ CQkJICB2b2lkICpkYXRhKQ0KKwkJdV9pbnQxNl90IG51bSwNCisJCW5mcW5sX2NhbGxiYWNrICpj YiwNCisJCXZvaWQgKmRhdGEpDQogew0KIAlpbnQgcmV0Ow0KIAlzdHJ1Y3QgbmZxbmxfcV9oYW5k bGUgKnFoOw0KQEAgLTI0Myw3ICsyNDMsNyBAQA0KIH0NCiANCiBpbnQgbmZxbmxfc2V0X21vZGUo c3RydWN0IG5mcW5sX3FfaGFuZGxlICpxaCwNCi0JCSAgIHVfaW50OF90IG1vZGUsIHVfaW50MzJf dCByYW5nZSkNCisJCXVfaW50OF90IG1vZGUsIHVfaW50MzJfdCByYW5nZSkNCiB7DQogCWNoYXIg YnVmW05GTkxfSEVBREVSX0xFTg0KIAkJK05GQV9MRU5HVEgoc2l6ZW9mKHN0cnVjdCBuZnFubF9t c2dfY29uZmlnX3BhcmFtcykpXTsNCkBAIC0yNTEsMTkgKzI1MSwxOSBAQA0KIAlzdHJ1Y3Qgbmxt c2doZHIgKm5taCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOw0KIA0KIAluZm5sX2ZpbGxfaGRy KCZxaC0+aC0+bmZubGgsIG5taCwgMCwgQUZfVU5TUEVDLCBxaC0+aWQsDQotCQkgICAgICBORlFO TF9NU0dfQ09ORklHLCBOTE1fRl9SRVFVRVNUfE5MTV9GX0FDSyk7DQorCQkJTkZRTkxfTVNHX0NP TkZJRywgTkxNX0ZfUkVRVUVTVHxOTE1fRl9BQ0spOw0KIA0KIAlwYXJhbXMuY29weV9yYW5nZSA9 IGh0b25sKHJhbmdlKTsNCiAJcGFyYW1zLmNvcHlfbW9kZSA9IG1vZGU7DQogCW5mbmxfYWRkYXR0 cl9sKG5taCwgc2l6ZW9mKGJ1ZiksIE5GUUFfQ0ZHX1BBUkFNUywgJnBhcmFtcywNCi0JCSAgICAg ICBzaXplb2YocGFyYW1zKSk7DQorCQkJc2l6ZW9mKHBhcmFtcykpOw0KIA0KIAlyZXR1cm4gbmZu bF90YWxrKCZxaC0+aC0+bmZubGgsIG5taCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7DQogfQ0K IA0KIHN0YXRpYyBpbnQgX19zZXRfdmVyZGljdChzdHJ1Y3QgbmZxbmxfcV9oYW5kbGUgKnFoLCB1 X2ludDMyX3QgaWQsDQotCQkJIHVfaW50MzJfdCB2ZXJkaWN0LCB1X2ludDMyX3QgbWFyaywgaW50 IHNldF9tYXJrLA0KLQkJCSB1X2ludDMyX3QgZGF0YV9sZW4sIHVuc2lnbmVkIGNoYXIgKmRhdGEp DQorCQl1X2ludDMyX3QgdmVyZGljdCwgdV9pbnQzMl90IG1hcmssIGludCBzZXRfbWFyaywNCisJ CXVfaW50MzJfdCBkYXRhX2xlbiwgdW5zaWduZWQgY2hhciAqZGF0YSkNCiB7DQogCXN0cnVjdCBu ZnFubF9tc2dfdmVyZGljdF9oZHIgdmg7DQogCWNoYXIgYnVmW05GTkxfSEVBREVSX0xFTg0KQEAg LTI3OCw4ICsyNzgsOCBAQA0KIAl2aC5pZCA9IGh0b25sKGlkKTsNCiANCiAJbmZubF9maWxsX2hk cigmcWgtPmgtPm5mbmxoLCBubWgsIDAsIEFGX1VOU1BFQywgcWgtPmlkLA0KLQkJICAgICAgTkZR TkxfTVNHX1ZFUkRJQ1QsIE5MTV9GX1JFUVVFU1QpOw0KLQkJCQ0KKwkJCU5GUU5MX01TR19WRVJE SUNULCBOTE1fRl9SRVFVRVNUKTsNCisNCiAJLyogYWRkIHZlcmRpY3QgaGVhZGVyICovDQogCW5m bmxfYWRkYXR0cl9sKG5taCwgc2l6ZW9mKGJ1ZiksIE5GUUFfVkVSRElDVF9IRFIsICZ2aCwgc2l6 ZW9mKHZoKSk7DQogDQpAQCAtMjk0LDcgKzI5NCw3IEBADQogCQlzdHJ1Y3QgbmZhdHRyIGRhdGFf YXR0cjsNCiANCiAJCW5mbmxfYnVpbGRfbmZhX2lvdmVjKCZpb3ZbMV0sICZkYXRhX2F0dHIsIE5G UUFfUEFZTE9BRCwNCi0JCQkJICAgICBkYXRhX2xlbiwgZGF0YSk7DQorCQkJCWRhdGFfbGVuLCBk YXRhKTsNCiAJCW52ZWNzICs9IDI7DQogCX0NCiANCkBAIC0zMDIsMTUgKzMwMiw5OCBAQA0KIH0N CiANCiBpbnQgbmZxbmxfc2V0X3ZlcmRpY3Qoc3RydWN0IG5mcW5sX3FfaGFuZGxlICpxaCwgdV9p bnQzMl90IGlkLA0KLQkJICAgICAgdV9pbnQzMl90IHZlcmRpY3QsIHVfaW50MzJfdCBkYXRhX2xl biwgDQotCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYpDQorCQl1X2ludDMyX3QgdmVyZGljdCwg dV9pbnQzMl90IGRhdGFfbGVuLCANCisJCXVuc2lnbmVkIGNoYXIgKmJ1ZikNCiB7DQogCXJldHVy biBfX3NldF92ZXJkaWN0KHFoLCBpZCwgdmVyZGljdCwgMCwgMCwgZGF0YV9sZW4sIGJ1Zik7DQog fQkNCiANCiBpbnQgbmZxbmxfc2V0X3ZlcmRpY3RfbWFyayhzdHJ1Y3QgbmZxbmxfcV9oYW5kbGUg KnFoLCB1X2ludDMyX3QgaWQsDQotCQkJICAgdV9pbnQzMl90IHZlcmRpY3QsIHVfaW50MzJfdCBt YXJrLA0KLQkJCSAgIHVfaW50MzJfdCBkYXRhbGVuLCB1bnNpZ25lZCBjaGFyICpidWYpDQorCQl1 X2ludDMyX3QgdmVyZGljdCwgdV9pbnQzMl90IG1hcmssDQorCQl1X2ludDMyX3QgZGF0YWxlbiwg dW5zaWduZWQgY2hhciAqYnVmKQ0KIHsNCiAJcmV0dXJuIF9fc2V0X3ZlcmRpY3QocWgsIGlkLCB2 ZXJkaWN0LCBtYXJrLCAxLCBkYXRhbGVuLCBidWYpOw0KIH0NCisNCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIE1lc3Nh Z2UgcGFyc2luZyBmdW5jdGlvbnMgDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQorc3RydWN0IG5mcW5sX21zZ19w YWNrZXRfaGRyICogbmZxbmxfZ2V0X21zZ19wYWNrZXRfaGRyKHN0cnVjdCBuZmF0dHIgKm5mYVtd KXsNCisJaWYgKG5mYSl7DQorCQlpZiAobmZhW05GUUFfUEFDS0VUX0hEUi0xXSkgew0KKwkJCXJl dHVybiAoc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyICopTkZBX0RBVEEobmZhW05GUUFfUEFD S0VUX0hEUi0xXSk7DQorCQl9DQorCX0NCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3VpbnQzMl90 IG5mcW5sX2dldF9uZm1hcmsoc3RydWN0IG5mYXR0ciAqbmZhW10pew0KKwlpZiAobmZhKXsNCisJ CWlmIChuZmFbTkZRQV9NQVJLLTFdKSB7DQorCQkJcmV0dXJuIG50b2hsKCoodV9pbnQzMl90ICop TkZBX0RBVEEobmZhW05GUUFfTUFSSy0xXSkpOw0KKwkJfQ0KKwl9DQorCXJldHVybiAwOw0KK30N CisNCitzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKiBuZnFubF9nZXRfdGltZXN0 YW1wKHN0cnVjdCBuZmF0dHIgKm5mYVtdKXsNCisJaWYgKG5mYSl7DQorCQlpZiAobmZhW05GUUFf VElNRVNUQU1QLTFdKSB7DQorCQkJcmV0dXJuIChzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1l c3RhbXAgKilORkFfREFUQShuZmFbTkZRQV9USU1FU1RBTVAtMV0pOw0KKwkJfQ0KKwl9DQorCXJl dHVybiBOVUxMOw0KK30NCisNCisvKiByZXR1cm4gMCBpZiBub3Qgc2V0ICovDQoraW50IG5mcW5s X2dldF9pbmRldihzdHJ1Y3QgbmZhdHRyICpuZmFbXSx1X2ludDMyX3QqIGluZGV2LCB1X2ludDMy X3QqIHBoeXNpbmRldil7DQorCWlmIChuZmEpew0KKwkJaWYgKGluZGV2ICYmIG5mYVtORlFBX0lG SU5ERVhfSU5ERVYtMV0pIHsNCisJCQkqaW5kZXYgPQludG9obCgqKHVfaW50MzJfdCAqKU5GQV9E QVRBKG5mYVtORlFBX0lGSU5ERVhfSU5ERVYtMV0pKTsNCisJCQlpZiAocGh5c2luZGV2ICYmIG5m YVtORlFBX0lGSU5ERVhfUEhZU0lOREVWLTFdICkgew0KKwkJCQkqcGh5c2luZGV2ID0gbnRvaGwo Kih1X2ludDMyX3QgKilORkFfREFUQShuZmFbTkZRQV9JRklOREVYX1BIWVNJTkRFVi0xXSkpOw0K KwkJCX0NCisJCQlyZXR1cm4gMTsNCisJCX0NCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLyog cmV0dXJuIDAgaWYgbm90IHNldCAqLw0KK2ludCBuZnFubF9nZXRfb3V0ZGV2KHN0cnVjdCBuZmF0 dHIgKm5mYVtdLHVfaW50MzJfdCogb3V0ZGV2LCB1X2ludDMyX3QqIHBoeXNvdXRkZXYpew0KKwlp ZiAobmZhKXsNCisJCWlmIChvdXRkZXYgJiYgbmZhW05GUUFfSUZJTkRFWF9PVVRERVYtMV0pIHsN CisJCQkqb3V0ZGV2ID0JbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShuZmFbTkZRQV9JRklO REVYX09VVERFVi0xXSkpOw0KKwkJCWlmIChwaHlzb3V0ZGV2ICYmIG5mYVtORlFBX0lGSU5ERVhf UEhZU09VVERFVi0xXSkgew0KKwkJCQkqcGh5c291dGRldiA9IG50b2hsKCoodV9pbnQzMl90ICop TkZBX0RBVEEobmZhW05GUUFfSUZJTkRFWF9QSFlTT1VUREVWLTFdKSk7DQorCQkJfQ0KKwkJCXJl dHVybiAxOw0KKwkJfQ0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCitzdHJ1Y3QgbmZxbmxfbXNn X3BhY2tldF9odyAqIG5mcW5sX2dldF9wYWNrZXRfaHcoc3RydWN0IG5mYXR0ciAqbmZhW10pew0K KwlpZiAobmZhKXsNCisJCWlmIChuZmFbTkZRQV9IV0FERFItMV0pIHsNCisJCQlyZXR1cm4gKHN0 cnVjdCBuZnFubF9tc2dfcGFja2V0X2h3KilORkFfREFUQShuZmFbTkZRQV9IV0FERFItMV0pOw0K KwkJfQ0KKwl9DQorCXJldHVybiBOVUxMOw0KK30NCisNCitpbnQgbmZxbmxfZ2V0X3BheWxvYWQo c3RydWN0IG5mYXR0ciAqbmZhW10sY2hhciAqKiBkYXRhLHVuc2lnbmVkIGludCogZGF0YWxlbil7 DQorCWlmIChuZmEgJiYgZGF0YWxlbikgew0KKwkJaWYgKG5mYVtORlFBX1BBWUxPQUQtMV0pIHsN CisJCQkqZGF0YT1ORkFfREFUQShuZmFbTkZRQV9QQVlMT0FELTFdKTsNCisJCQkqZGF0YWxlbj1O RkFfUEFZTE9BRChuZmFbTkZRQV9QQVlMT0FELTFdKTsNCisJCQlyZXR1cm4gMTsNCisJCX0NCisJ fQ0KKwlyZXR1cm4gMDsNCit9DQorDQorDQorDQpJbmRleDogc3JjL01ha2VmaWxlLmFtDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gc3JjL01ha2VmaWxlLmFtCShyZXZpc2lvbiA0MjM3KQ0KKysrIHNyYy9NYWtl ZmlsZS5hbQkod29ya2luZyBjb3B5KQ0KQEAgLTIsNyArMiw3IEBADQogDQogI0VYVFJBX0RJU1Qg PSAkKG1hbl9NQU5TKSBhY2luY2x1ZGUubTQNCiANCi1JTkNMVURFUyA9ICQoYWxsX2luY2x1ZGVz KSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSR7S0VSTkVMRElSfSANCitJTkNMVURFUyA9ICQo YWxsX2luY2x1ZGVzKSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSR7S0VSTkVMRElSfQ0KIEFN X0NGTEFHUz0tZlBJQyAtV2FsbA0KIExJQlM9DQogDQo= --=-o+Fe3+PA3TJjpF1d6H1d-- --=-Kl+wlPYaluobSvFvusFR 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) iD8DBQBC+7y6nxA7CdMWjzIRAmFpAJ98K1zYgCuWvztbgs4zWMFW1p/KLQCffaxa GjizWLuoDdFn3g7mDjCn/n4= =EoIA -----END PGP SIGNATURE----- --=-Kl+wlPYaluobSvFvusFR--