From owner-freebsd-net@FreeBSD.ORG Mon Aug 23 23:55:24 2010 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6A913106566C for ; Mon, 23 Aug 2010 23:55:24 +0000 (UTC) (envelope-from if@xip.at) Received: from chile.gbit.at (ns1.xip.at [193.239.188.99]) by mx1.freebsd.org (Postfix) with ESMTP id 840BE8FC15 for ; Mon, 23 Aug 2010 23:55:22 +0000 (UTC) Received: (qmail 18426 invoked from network); 24 Aug 2010 01:55:20 +0200 Received: from unknown (HELO filebunker.xip.at) (86.59.10.180) by chile.gbit.at with (DHE-RSA-AES256-SHA encrypted) SMTP; 24 Aug 2010 01:55:20 +0200 Date: Tue, 24 Aug 2010 01:55:19 +0200 (CEST) From: Ingo Flaschberger To: net@freebsd.org In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="168430090-1063431390-1282607720=:12708" Cc: Subject: Re: funny ECMP X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Aug 2010 23:55:24 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --168430090-1063431390-1282607720=:12708 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Hi, I have changed the route selection code of ecmp to balance only between routes of the same weight. (see attached file) As Qing Li mentioned months ago, there are problems with static routes and interfaces. Example 1: ifconfig em1 alias 10.13.13.90/24 ping 10.13.13.95 ok route add 10.13.13.0/24 10.11.11.1 -weight 2 ping 10.13.13.95 broken (arpresolve: can't allocate llinfo for 10.13.13.95) Eaxmple 2: route add 10.13.13.0/24 10.11.11.1 -weight 2 ping 10.13.13.95 ok route add 10.13.13.0/24 10.11.11.2 -weight 3 ping 10.13.13.95 ok ifconfig em1 alias 10.13.13.90/24 ping 10.13.13.95 broken (arpresolve: can't allocate llinfo for 10.13.13.95) route delete 10.13.13.0/24 10.11.11.2 ping 10.13.13.95 broken route delete 10.13.13.0/24 10.11.11.1 ping -> system crash deleting the last static multipath routes seems to affect?, destroy? the interface route. system crashes in: /usr/src/sys/net/route.c:370 rn = rnh->rnh_matchaddr(dst, rnh); if (rn && ((rn->rn_flags & RNF_ROOT) == 0)) { newrt = rt = RNTORT(rn); here -> RT_LOCK(newrt); RT_ADDREF(newrt); if (needlock) Kind regards, Ingo Flaschberger --168430090-1063431390-1282607720=:12708 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=radix_mpath.c Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=radix_mpath.c LyoNCiAqIENvcHlyaWdodCAoQykgMjAwMSBXSURFIFByb2plY3QuDQogKiBB bGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0K ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4NCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u Lg0KICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3Ig dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCiAqICAgIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQ0KICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQNCiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCiAqIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQogKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQog KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBTVUNIIERBTUFHRS4N CiAqIFRIRSBBVVRIT1JTIERPIE5PVCBHVUFSQU5URUUgVEhBVCBUSElTIFNP RlRXQVJFIERPRVMgTk9UIElORlJJTkdFDQogKiBBTlkgT1RIRVJTJyBJTlRF TExFQ1RVQUwgUFJPUEVSVElFUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUlMNCiAqIEJFIExJQUJMRSBGT1IgQU5ZIElORlJJTkdFTUVOVCBPRiBB TlkgT1RIRVJTJyBJTlRFTExFQ1RVQUwNCiAqIFBST1BFUlRJRVMuDQogKi8N Cg0KI2luY2x1ZGUgPHN5cy9jZGVmcy5oPg0KX19GQlNESUQoIiRGcmVlQlNE OiBzcmMvc3lzL25ldC9yYWRpeF9tcGF0aC5jLHYgMS4xMC4yLjIgMjAxMC8w NC8wMiAwNTowMjo1MCBxaW5nbGkgRXhwICQiKTsNCg0KI2luY2x1ZGUgIm9w dF9pbmV0LmgiDQojaW5jbHVkZSAib3B0X2luZXQ2LmgiDQoNCiNpbmNsdWRl IDxzeXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4NCiNpbmNs dWRlIDxzeXMvbWFsbG9jLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0K I2luY2x1ZGUgPHN5cy9kb21haW4uaD4NCiNpbmNsdWRlIDxzeXMvc3lzbG9n Lmg+DQojaW5jbHVkZSA8bmV0L3JhZGl4Lmg+DQojaW5jbHVkZSA8bmV0L3Jh ZGl4X21wYXRoLmg+DQojaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQojaW5jbHVk ZSA8bmV0L2lmLmg+DQojaW5jbHVkZSA8bmV0L2lmX3Zhci5oPg0KDQovKg0K ICogZ2l2ZSBzb21lIGppdHRlciB0byBoYXNoLCB0byBhdm9pZCBzeW5jaHJv bml6YXRpb24gYmV0d2VlbiByb3V0ZXJzDQogKi8NCnN0YXRpYyB1aW50MzJf dCBoYXNoaml0dGVyOw0KDQppbnQNCnJuX21wYXRoX2NhcGFibGUoc3RydWN0 IHJhZGl4X25vZGVfaGVhZCAqcm5oKQ0Kew0KDQoJcmV0dXJuIHJuaC0+cm5o X211bHRpcGF0aDsNCn0NCg0Kc3RydWN0IHJhZGl4X25vZGUgKg0Kcm5fbXBh dGhfbmV4dChzdHJ1Y3QgcmFkaXhfbm9kZSAqcm4pDQp7DQoJc3RydWN0IHJh ZGl4X25vZGUgKm5leHQ7DQoNCglpZiAoIXJuLT5ybl9kdXBlZGtleSkNCgkJ cmV0dXJuIE5VTEw7DQoJbmV4dCA9IHJuLT5ybl9kdXBlZGtleTsNCglpZiAo cm4tPnJuX21hc2sgPT0gbmV4dC0+cm5fbWFzaykNCgkJcmV0dXJuIG5leHQ7 DQoJZWxzZQ0KCQlyZXR1cm4gTlVMTDsNCn0NCg0KdWludDMyX3QNCnJuX21w YXRoX2NvdW50KHN0cnVjdCByYWRpeF9ub2RlICpybikNCnsNCgl1aW50MzJf dCBpID0gMDsNCglzdHJ1Y3QgcnRlbnRyeSAqcnQ7DQoJDQoJd2hpbGUgKHJu ICE9IE5VTEwpIHsNCgkJcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybjsNCgkJ aSArPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7DQoJCXJuID0gcm5fbXBhdGhf bmV4dChybik7DQoJfQ0KCXJldHVybiAoaSk7DQp9DQoNCnN0cnVjdCBydGVu dHJ5ICoNCnJ0X21wYXRoX21hdGNoZ2F0ZShzdHJ1Y3QgcnRlbnRyeSAqcnQs IHN0cnVjdCBzb2NrYWRkciAqZ2F0ZSkNCnsNCglzdHJ1Y3QgcmFkaXhfbm9k ZSAqcm47DQoNCglpZiAoIXJuX21wYXRoX25leHQoKHN0cnVjdCByYWRpeF9u b2RlICopcnQpKSB7DQoJCXByaW50ZigicnRfbXBhdGhfbWF0Y2hnYXRlOiBu byBuZXh0XG4iKTsNCgkJcmV0dXJuIHJ0Ow0KCX0NCg0KCWlmICghZ2F0ZSkg ew0KCQlwcmludGYoInJ0X21wYXRoX21hdGNoZ2F0ZTogbnVsbFxuIik7DQoJ CXJldHVybiBOVUxMOw0KCX0NCg0KCS8qIGJleW9uZCBoZXJlLCB3ZSB1c2Ug cm4gYXMgdGhlIG1hc3RlciBjb3B5ICovDQoJcm4gPSAoc3RydWN0IHJhZGl4 X25vZGUgKilydDsNCglkbyB7DQoJCXJ0ID0gKHN0cnVjdCBydGVudHJ5ICop cm47DQoJCS8qDQoJCSAqIHdlIGFyZSByZW1vdmluZyBhbiBhZGRyZXNzIGFs aWFzIHRoYXQgaGFzIA0KCQkgKiB0aGUgc2FtZSBwcmVmaXggYXMgYW5vdGhl ciBhZGRyZXNzDQoJCSAqIHdlIG5lZWQgdG8gY29tcGFyZSB0aGUgaW50ZXJm YWNlIGFkZHJlc3MgYmVjYXVzZQ0KCQkgKiBydF9nYXRld2F5IGlzIGEgc3Bl Y2lhbCBzb2NrYWRkX2RsIHN0cnVjdHVyZQ0KCQkgKi8NCgkJaWYgKHJ0LT5y dF9nYXRld2F5LT5zYV9mYW1pbHkgPT0gQUZfTElOSykgew0KCQkJcHJpbnRm KCJydF9tcGF0aF9tYXRjaGdhdGU6IGRvMVxuIik7DQoJCQlpZiAoIW1lbWNt cChydC0+cnRfaWZhLT5pZmFfYWRkciwgZ2F0ZSwgZ2F0ZS0+c2FfbGVuKSkg ew0KCQkJCXByaW50ZigicnRfbXBhdGhfbWF0Y2hnYXRlOiBkbzJcbiIpOw0K CQkJCWJyZWFrOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJcHJpbnRmKCJydF9t cGF0aF9tYXRjaGdhdGU6IGRvM1xuIik7DQoJCQlpZiAocnQtPnJ0X2dhdGV3 YXktPnNhX2xlbiA9PSBnYXRlLT5zYV9sZW4gJiYNCgkJCSAgICAhbWVtY21w KHJ0LT5ydF9nYXRld2F5LCBnYXRlLCBnYXRlLT5zYV9sZW4pKSB7DQoJCQkg ICAgCXByaW50ZigicnRfbXBhdGhfbWF0Y2hnYXRlOiBkbzRcbiIpOw0KCQkJ CWJyZWFrOw0KCQkJfQ0KCQl9DQoJfSB3aGlsZSAoKHJuID0gcm5fbXBhdGhf bmV4dChybikpICE9IE5VTEwpOw0KDQoJcHJpbnRmKCJydF9tcGF0aF9tYXRj aGdhdGU6IHJldHVyblxuIik7DQoJcmV0dXJuIChzdHJ1Y3QgcnRlbnRyeSAq KXJuOw0KfQ0KDQovKiANCiAqIGdvIHRocm91Z2ggdGhlIGNoYWluIGFuZCB1 bmxpbmsgInJ0IiBmcm9tIHRoZSBsaXN0DQogKiB0aGUgY2FsbGVyIHdpbGwg ZnJlZSAicnQiDQogKi8NCmludA0KcnRfbXBhdGhfZGVsZHVwKHN0cnVjdCBy dGVudHJ5ICpoZWFkcnQsIHN0cnVjdCBydGVudHJ5ICpydCkNCnsNCiAgICAg ICAgc3RydWN0IHJhZGl4X25vZGUgKnQsICp0dDsNCg0KICAgICAgICBpZiAo IWhlYWRydCB8fCAhcnQpDQogICAgICAgICAgICByZXR1cm4gKDApOw0KICAg ICAgICB0ID0gKHN0cnVjdCByYWRpeF9ub2RlICopaGVhZHJ0Ow0KICAgICAg ICB0dCA9IHJuX21wYXRoX25leHQodCk7DQogICAgICAgIHdoaWxlICh0dCkg ew0KICAgICAgICAgICAgaWYgKHR0ID09IChzdHJ1Y3QgcmFkaXhfbm9kZSAq KXJ0KSB7DQogICAgICAgICAgICAgICAgdC0+cm5fZHVwZWRrZXkgPSB0dC0+ cm5fZHVwZWRrZXk7DQogICAgICAgICAgICAgICAgdHQtPnJuX2R1cGVka2V5 ID0gTlVMTDsNCiAgICAJICAgICAgICB0dC0+cm5fZmxhZ3MgJj0gflJORl9B Q1RJVkU7DQoJICAgICAgICB0dFsxXS5ybl9mbGFncyAmPSB+Uk5GX0FDVElW RTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKDEpOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgdCA9IHR0Ow0KICAgICAgICAgICAgdHQgPSBybl9t cGF0aF9uZXh0KChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXQpOw0KICAgICAgICB9 DQogICAgICAgIHJldHVybiAoMCk7DQp9DQoNCi8qDQogKiBjaGVjayBpZiB3 ZSBoYXZlIHRoZSBzYW1lIGtleS9tYXNrL2dhdGV3YXkgb24gdGhlIHRhYmxl IGFscmVhZHkuDQogKi8NCmludA0KcnRfbXBhdGhfY29uZmxpY3Qoc3RydWN0 IHJhZGl4X25vZGVfaGVhZCAqcm5oLCBzdHJ1Y3QgcnRlbnRyeSAqcnQsDQog ICAgc3RydWN0IHNvY2thZGRyICpuZXRtYXNrKQ0Kew0KCXN0cnVjdCByYWRp eF9ub2RlICpybiwgKnJuMTsNCglzdHJ1Y3QgcnRlbnRyeSAqcnQxOw0KCWNo YXIgKnAsICpxLCAqZXE7DQoJaW50IHNhbWUsIGwsIHNraXA7DQoNCglybiA9 IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0Ow0KCXJuMSA9IHJuaC0+cm5oX2xv b2t1cChydF9rZXkocnQpLCBuZXRtYXNrLCBybmgpOw0KCWlmICghcm4xIHx8 IHJuMS0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkNCgkJcmV0dXJuIDA7DQoNCgkv Kg0KCSAqIHVubGlrZSBvdGhlciBmdW5jdGlvbnMgd2UgaGF2ZSBpbiB0aGlz IGZpbGUsIHdlIGhhdmUgdG8gY2hlY2sNCgkgKiBhbGwga2V5L21hc2svZ2F0 ZXdheSBhcyBybmhfbG9va3VwIGNhbiBtYXRjaCBsZXNzIHNwZWNpZmljIGVu dHJ5Lg0KCSAqLw0KCXJ0MSA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuMTsNCg0K CS8qIGNvbXBhcmUga2V5LiAqLw0KCWlmIChydF9rZXkocnQxKS0+c2FfbGVu ICE9IHJ0X2tleShydCktPnNhX2xlbiB8fA0KCSAgICBiY21wKHJ0X2tleShy dDEpLCBydF9rZXkocnQpLCBydF9rZXkocnQxKS0+c2FfbGVuKSkNCgkJZ290 byBkaWZmZXJlbnQ7DQoNCgkvKiBrZXkgd2FzIHRoZSBzYW1lLiAgY29tcGFy ZSBuZXRtYXNrLiAgaGFpcnkuLi4gKi8NCglpZiAocnRfbWFzayhydDEpICYm IG5ldG1hc2spIHsNCgkJc2tpcCA9IHJuaC0+cm5oX3RyZWV0b3AtPnJuX29m ZnNldDsNCgkJaWYgKHJ0X21hc2socnQxKS0+c2FfbGVuID4gbmV0bWFzay0+ c2FfbGVuKSB7DQoJCQkvKg0KCQkJICogYXMgcnRfbWFzayhydDEpIGlzIG1h ZGUgb3B0aW1hbCBieSByYWRpeC5jLA0KCQkJICogdGhlcmUgbXVzdCBiZSBz b21lIDEtYml0cyBvbiBydF9tYXNrKHJ0MSkNCgkJCSAqIGFmdGVyIG5ldG1h c2stPnNhX2xlbi4gIHRoZXJlZm9yZSwgaW4NCgkJCSAqIHRoaXMgY2FzZSwg dGhlIGVudHJpZXMgYXJlIGRpZmZlcmVudC4NCgkJCSAqLw0KCQkJaWYgKHJ0 X21hc2socnQxKS0+c2FfbGVuID4gc2tpcCkNCgkJCQlnb3RvIGRpZmZlcmVu dDsNCgkJCWVsc2Ugew0KCQkJCS8qIG5vIGJpdHMgdG8gY29tcGFyZSwgaS5l LiBzYW1lKi8NCgkJCQlnb3RvIG1hc2ttYXRjaGVkOw0KCQkJfQ0KCQl9DQoN CgkJbCA9IHJ0X21hc2socnQxKS0+c2FfbGVuOw0KCQlpZiAoc2tpcCA+IGwp IHsNCgkJCS8qIG5vIGJpdHMgdG8gY29tcGFyZSwgaS5lLiBzYW1lICovDQoJ CQlnb3RvIG1hc2ttYXRjaGVkOw0KCQl9DQoJCXAgPSAoY2hhciAqKXJ0X21h c2socnQxKTsNCgkJcSA9IChjaGFyICopbmV0bWFzazsNCgkJaWYgKGJjbXAo cCArIHNraXAsIHEgKyBza2lwLCBsIC0gc2tpcCkpDQoJCQlnb3RvIGRpZmZl cmVudDsNCgkJLyoNCgkJICogbmVlZCB0byBnbyB0aHJvdWdoIGFsbCB0aGUg Yml0LCBhcyBuZXRtYXNrIGlzIG5vdA0KCQkgKiBvcHRpbWFsIGFuZCBjYW4g Y29udGFpbiB0cmFpbGluZyAwcw0KCQkgKi8NCgkJZXEgPSAoY2hhciAqKW5l dG1hc2sgKyBuZXRtYXNrLT5zYV9sZW47DQoJCXEgKz0gbDsNCgkJc2FtZSA9 IDE7DQoJCXdoaWxlIChlcSA+IHEpDQoJCQlpZiAoKnErKykgew0KCQkJCXNh bWUgPSAwOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQlpZiAoIXNhbWUpDQoJCQln b3RvIGRpZmZlcmVudDsNCgl9IGVsc2UgaWYgKCFydF9tYXNrKHJ0MSkgJiYg IW5ldG1hc2spDQoJCTsgLyogbm8gbWFzayB0byBjb21wYXJlLCBpLmUuIHNh bWUgKi8NCgllbHNlIHsNCgkJLyogb25lIGhhcyBtYXNrIGFuZCB0aGUgb3Ro ZXIgZG9lcyBub3QsIGRpZmZlcmVudCAqLw0KCQlnb3RvIGRpZmZlcmVudDsN Cgl9DQoNCm1hc2ttYXRjaGVkOg0KDQoJLyoga2V5L21hc2sgd2VyZSB0aGUg c2FtZS4gIGNvbXBhcmUgZ2F0ZXdheSBmb3IgYWxsIG11bHRpcGF0aHMgKi8N CglkbyB7DQoJCXJ0MSA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuMTsNCg0KCQkv KiBzYW5pdHk6IG5vIHVzZSBpbiBjb21wYXJpbmcgdGhlIHNhbWUgdGhpbmcg Ki8NCgkJaWYgKHJuMSA9PSBybikNCgkJCWNvbnRpbnVlOw0KICAgICAgICAN CgkJaWYgKHJ0MS0+cnRfZ2F0ZXdheS0+c2FfZmFtaWx5ID09IEFGX0xJTksp IHsNCgkJCWlmIChydDEtPnJ0X2lmYS0+aWZhX2FkZHItPnNhX2xlbiAhPSBy dC0+cnRfaWZhLT5pZmFfYWRkci0+c2FfbGVuIHx8DQoJCQkgICAgYmNtcChy dDEtPnJ0X2lmYS0+aWZhX2FkZHIsIHJ0LT5ydF9pZmEtPmlmYV9hZGRyLCAN CgkJCSAgICBydDEtPnJ0X2lmYS0+aWZhX2FkZHItPnNhX2xlbikpDQoJCQkJ Y29udGludWU7DQoJCX0gZWxzZSB7DQoJCQlpZiAocnQxLT5ydF9nYXRld2F5 LT5zYV9sZW4gIT0gcnQtPnJ0X2dhdGV3YXktPnNhX2xlbiB8fA0KCQkJICAg IGJjbXAocnQxLT5ydF9nYXRld2F5LCBydC0+cnRfZ2F0ZXdheSwNCgkJCSAg ICBydDEtPnJ0X2dhdGV3YXktPnNhX2xlbikpDQoJCQkJY29udGludWU7DQoJ CX0NCg0KCQkvKiBhbGwga2V5L21hc2svZ2F0ZXdheSBhcmUgdGhlIHNhbWUu ICBjb25mbGljdGluZyBlbnRyeS4gKi8NCgkJcmV0dXJuIEVFWElTVDsNCgl9 IHdoaWxlICgocm4xID0gcm5fbXBhdGhfbmV4dChybjEpKSAhPSBOVUxMKTsN Cg0KZGlmZmVyZW50Og0KCXJldHVybiAwOw0KfQ0KDQp2b2lkDQpydGFsbG9j X21wYXRoX2ZpYihzdHJ1Y3Qgcm91dGUgKnJvLCB1aW50MzJfdCBoYXNoLCB1 X2ludCBmaWJudW0pDQp7DQoJc3RydWN0IHJhZGl4X25vZGUgKnJuMCwgKnJu Ow0KCS8vdV9pbnQzMl90IG47DQoJc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KCWlu dDY0X3Qgd2VpZ2h0Ow0KCWludDY0X3QgbG93ZXN0X3dlaWdodDsNCgl1X2lu dDMyX3QgY291bnQ7DQoNCgkvKg0KCSAqIFhYWCB3ZSBkb24ndCBhdHRlbXB0 IHRvIGxvb2t1cCBjYWNoZWQgcm91dGUgYWdhaW47IHdoYXQgc2hvdWxkDQoJ ICogYmUgZG9uZSBmb3Igc2VuZHRvKDMpIGNhc2U/DQoJICovDQoJaWYgKHJv LT5yb19ydCAmJiByby0+cm9fcnQtPnJ0X2lmcCAmJiAocm8tPnJvX3J0LT5y dF9mbGFncyAmIFJURl9VUCkNCgkgICAgJiYgUlRfTElOS19JU19VUChyby0+ cm9fcnQtPnJ0X2lmcCkpIHsNCgkgICAgCXByaW50ZigiY2FjaGVkIHJvdXRl XG4iKTsNCgkJcmV0dXJuOw0KCX0JIA0KCXJvLT5yb19ydCA9IHJ0YWxsb2Mx X2ZpYigmcm8tPnJvX2RzdCwgMSwgMCwgZmlibnVtKTsNCg0KCS8qIGlmIHRo ZSByb3V0ZSBkb2VzIG5vdCBleGlzdCBvciBpdCBpcyBub3QgbXVsdGlwYXRo LCBkb24ndCBjYXJlICovDQoJaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7DQoJ CXByaW50ZigiZG9lcyBub3QgZXhpc3RcbiIpOw0KCQlyZXR1cm47DQoJfQ0K CWlmIChybl9tcGF0aF9uZXh0KChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJvLT5y b19ydCkgPT0gTlVMTCkgew0KCQlSVF9VTkxPQ0socm8tPnJvX3J0KTsNCgkJ Ly9wcmludGYoIm5vIG11bHRpcGF0aFxuIik7DQoJCXJldHVybjsNCgl9DQoJ DQoJLy8gY2hlY2sgaWYgdGhpcyBhIGRpcmVjdCBjb25uZWN0ZWQgaW50ZXJm YWNlIG9yIGhvc3Qgcm91dGUgLyBubyBnYXRld2F5IHJvdXRlDQoJLyoNCglp ZiAoIChyby0+cm9fcnQtPnJ0X2ZsYWdzICYgUlRGX0dBVEVXQVkpID09IDAp IHsNCgkJcmV0dXJuOw0KCX0qLw0KDQoJLyogYmV5b25kIGhlcmUsIHdlIHVz ZSBybiBhcyB0aGUgbWFzdGVyIGNvcHkgKi8NCglybjAgPSBybiA9IChzdHJ1 Y3QgcmFkaXhfbm9kZSAqKXJvLT5yb19ydDsNCgkvL24gPSBybl9tcGF0aF9j b3VudChybjApOw0KCQ0KCS8qIGZpbmQgbG93ZXN0IHdlaWdodCByb3V0ZSAq Lw0KCWNvdW50ID0gMDsNCglmb3IgKCBydCA9IChzdHJ1Y3QgcnRlbnRyeSAq KXJuLCB3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7IHJuICE9IE5V TEw7IHJuID0gcm5fbXBhdGhfbmV4dCggcm4pKSB7DQoJCS8qIFhYWCBjaGVj ayBpZiByb3V0ZSBpcyB1cD8gKi8NCgkJcnQgPSAoc3RydWN0IHJ0ZW50cnkg KilybjsNCgkJcHJpbnRmKCJ3ZWlnaHQ6ICVsZFxuIiwgd2VpZ2h0KTsNCgkJ aWYgKHdlaWdodCA+IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgew0KCQkJd2Vp Z2h0ID0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0Ow0KCQkJY291bnQgPSAxOw0K CQkJcHJpbnRmKCJ3ZWlnaHQ6IG5ld1xuIik7DQoJCX0gZWxzZSBpZiAod2Vp Z2h0ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgew0KCQkJY291bnQrKzsN CgkJCXByaW50Zigid2VpZ2h0OiBjb3VudCAlZFxuIiwgY291bnQpOw0KCQl9 DQoJfQ0KCWxvd2VzdF93ZWlnaHQgPSB3ZWlnaHQ7DQoJDQoJcHJpbnRmKCJs b3dlc3Qgd2VpZ2h0OiAlbGRcbiIsIHdlaWdodCk7DQoJDQoJLy8gc2VsZWN0 IG5vdyBvbmUgb2YgdGhlIGxvd2VzdCB3ZWlnaHQgcm91dGVzDQoJaGFzaCAr PSBoYXNoaml0dGVyOw0KCWhhc2ggJT0gY291bnQ7DQoJcm4gPSBybjA7DQoJ cHJpbnRmKCJjb3VudDogJWRcbiIsIGNvdW50KTsNCglwcmludGYoImhhc2g6 ICVkXG4iLCBoYXNoKTsNCglmb3IgKCBjb3VudCA9IDA7IHJuICE9IE5VTEw7 IHJuID0gcm5fbXBhdGhfbmV4dCggcm4pKSB7DQoJCXJ0ID0gKHN0cnVjdCBy dGVudHJ5ICopcm47DQoJCWlmICggcnQtPnJ0X3JteC5ybXhfd2VpZ2h0ID09 IGxvd2VzdF93ZWlnaHQpIHsNCgkJCWlmIChjb3VudCA9PSBoYXNoKSB7DQoJ CQkJcHJpbnRmKCJ3ZWlnaHQ6IGNvdW50ID09IGhhc2hcbiIpOw0KCQkJCWJy ZWFrOw0KCQkJfQ0KCQkJY291bnQrKzsNCgkJfQ0KCX0NCglwcmludGYoInNl bGN0ZWQgd2VpZ2h0OiAlbGRcbiIsIHJ0LT5ydF9ybXgucm14X3dlaWdodCk7 DQoNCgkNCgkvKiBndyBzZWxlY3Rpb24gaGFzIGZhaWxlZCAtIHRoZXJlIG11 c3QgYmUgb25seSB6ZXJvIHdlaWdodCByb3V0ZXMgKi8NCglpZiAoIXJuKSB7 DQoJCVJUX1VOTE9DSyhyby0+cm9fcnQpOw0KCQlyby0+cm9fcnQgPSBOVUxM Ow0KCQlwcmludGYoImdhdGV3YXkgc2VsZWN0aW9uIGZhaWxlZFxuIik7DQoJ CXJldHVybjsNCgl9DQoJaWYgKHJvLT5yb19ydCAhPSBydCkgew0KCQlSVEZS RUVfTE9DS0VEKHJvLT5yb19ydCk7DQoJCXJvLT5yb19ydCA9IChzdHJ1Y3Qg cnRlbnRyeSAqKXJuOw0KCQlSVF9MT0NLKHJvLT5yb19ydCk7DQoJCVJUX0FE RFJFRihyby0+cm9fcnQpOw0KDQoJfSANCglSVF9VTkxPQ0socm8tPnJvX3J0 KTsNCn0NCg0KZXh0ZXJuIGludAlpbjZfaW5pdGhlYWQodm9pZCAqKmhlYWQs IGludCBvZmYpOw0KZXh0ZXJuIGludAlpbl9pbml0aGVhZCh2b2lkICoqaGVh ZCwgaW50IG9mZik7DQoNCiNpZmRlZiBJTkVUDQppbnQNCnJuNF9tcGF0aF9p bml0aGVhZCh2b2lkICoqaGVhZCwgaW50IG9mZikNCnsNCglzdHJ1Y3QgcmFk aXhfbm9kZV9oZWFkICpybmg7DQoNCgloYXNoaml0dGVyID0gYXJjNHJhbmRv bSgpOw0KCWlmIChpbl9pbml0aGVhZChoZWFkLCBvZmYpID09IDEpIHsNCgkJ cm5oID0gKHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKikqaGVhZDsNCgkJcm5o LT5ybmhfbXVsdGlwYXRoID0gMTsNCgkJcmV0dXJuIDE7DQoJfSBlbHNlDQoJ CXJldHVybiAwOw0KfQ0KI2VuZGlmDQoNCiNpZmRlZiBJTkVUNg0KaW50DQpy bjZfbXBhdGhfaW5pdGhlYWQodm9pZCAqKmhlYWQsIGludCBvZmYpDQp7DQoJ c3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KDQoJaGFzaGppdHRlciA9 IGFyYzRyYW5kb20oKTsNCglpZiAoaW42X2luaXRoZWFkKGhlYWQsIG9mZikg PT0gMSkgew0KCQlybmggPSAoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKSpo ZWFkOw0KCQlybmgtPnJuaF9tdWx0aXBhdGggPSAxOw0KCQlyZXR1cm4gMTsN Cgl9IGVsc2UNCgkJcmV0dXJuIDA7DQp9DQoNCiNlbmRpZg0K --168430090-1063431390-1282607720=:12708--