From owner-freebsd-net Sun Jan 31 05:54:07 1999 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id FAB00947 for freebsd-net-outgoing; Sun, 31 Jan 1999 05:54:07 -0800 (PST) (envelope-from owner-freebsd-net@FreeBSD.ORG) Received: from alpo.whistle.com (alpo.whistle.com [207.76.204.38]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id FAA00941 for ; Sun, 31 Jan 1999 05:54:04 -0800 (PST) (envelope-from julian@whistle.com) Received: (from daemon@localhost) by alpo.whistle.com (8.8.5/8.8.5) id FAA07858; Sun, 31 Jan 1999 05:51:48 -0800 (PST) Received: from current1.whistle.com(207.76.205.22) via SMTP by alpo.whistle.com, id smtpdIP7854; Sun Jan 31 13:51:41 1999 Date: Sun, 31 Jan 1999 05:51:36 -0800 (PST) From: Julian Elischer To: net@FreeBSD.ORG cc: Archie Cobbs Subject: Patch to add Netgraph to all ethernet interfaces. Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-512676918-917790696=:22411" Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-512676918-917790696=:22411 Content-Type: TEXT/PLAIN; charset=US-ASCII Here is a patch that adds a netgraph node capability to any ethernet driver. (compiles cleanly but I can't test it till tomrrow) you may attach a hook on either "orphan" or "divert" (but not both) An example of how one might attach a netgraph 'face' to an existing kernel facility. If there is a hook attached to "orphan" then any packets of any unrecognised protocol will be forwarded to the hook. If attached to "divert" then ALL packets will be forwarded (and not processed normally). I added the "divert" option for fun (it was 3 lines or so) but you probably don't want it in the final product as it probably adds about 6 instructions to the path of normal IP packets Any packets sent to the hook from another netgraph node are transmitted verbatim (i.e. they are assumed to have the ethernet header on them) now if I wrote a node to filter ethernet packets dynamically using DPF I could add protocols on the fly. I've been wondering about the following node types.. DPF (dynamic Packet Filter.. super high speed packet sorter) ipfw clone link-level packet filter link-level bridging julian --0-512676918-917790696=:22411 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ether.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: SW5kZXg6IGlmX2FycC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2N2cy9mcmVlYnNkL3NyYy9zeXMvbmV0L2lmX2FycC5oLHYNCnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xMA0KZGlmZiAtYyAtcjEuMTAgaWZfYXJw LmgNCioqKiBpZl9hcnAuaAkxOTk4LzAxLzEwIDA3OjI5OjEwCTEuMTANCi0t LSBpZl9hcnAuaAkxOTk5LzAxLzMxIDEzOjI2OjU4DQoqKioqKioqKioqKioq KioNCioqKiAxMDEsMTA2ICoqKioNCi0tLSAxMDEsMTA5IC0tLS0NCiAgCXN0 cnVjdCAJaWZuZXQgYWNfaWY7CQkvKiBuZXR3b3JrLXZpc2libGUgaW50ZXJm YWNlICovDQogIAl1X2NoYXIJYWNfZW5hZGRyWzZdOwkJLyogZXRoZXJuZXQg aGFyZHdhcmUgYWRkcmVzcyAqLw0KICAJaW50CWFjX211bHRpY250OwkJLyog bGVuZ3RoIG9mIGFjX211bHRpYWRkcnMgbGlzdCAqLw0KKyAjaWZkZWYJTkVU R1JBUEgNCisgCXZvaWQgKmFjX25nOwkJCS8qIGhvb2sgdG8gaGFuZyBuZXRn cmFwaCBzdHVmZiBvZmYgKi8NCisgI2VuZGlmDQogIH07DQogIA0KICBleHRl cm4gdV9jaGFyCWV0aGVyYnJvYWRjYXN0YWRkcls2XTsNCkluZGV4OiBpZl9l dGhlcnN1YnIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC9jdnMvZnJlZWJzZC9zcmMvc3lzL25ldC9pZl9ldGhlcnN1YnIuYyx2DQpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNTUNCmRpZmYgLWMgLXIxLjU1IGlmX2V0 aGVyc3Vici5jDQoqKiogaWZfZXRoZXJzdWJyLmMJMTk5OS8wMS8zMSAwODox NzoxNgkxLjU1DQotLS0gaWZfZXRoZXJzdWJyLmMJMTk5OS8wMS8zMSAxMzoy Njo1OA0KKioqKioqKioqKioqKioqDQoqKiogMzgsNDMgKioqKg0KLS0tIDM4 LDQ0IC0tLS0NCiAgI2luY2x1ZGUgIm9wdF9pbmV0LmgiDQogICNpbmNsdWRl ICJvcHRfaXB4LmgiDQogICNpbmNsdWRlICJvcHRfYmRnLmgiDQorICNpbmNs dWRlICJvcHRfbmV0Z3JhcGguaCINCiAgDQogICNpbmNsdWRlIDxzeXMvcGFy YW0uaD4NCiAgI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KKioqKioqKioqKioq KioqDQoqKiogMTE0LDEyMiAqKioqDQogIHN0YXRpYwlpbnQgZXRoZXJfcmVz b2x2ZW11bHRpIF9fUCgoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBzb2NrYWRk ciAqKiwgDQogIAkJCQkgICAgc3RydWN0IHNvY2thZGRyICopKTsNCiAgdV9j aGFyCWV0aGVyYnJvYWRjYXN0YWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZiB9Ow0KISAjZGVmaW5lIHNlbmRlcnIoZSkg ZG8geyBlcnJvciA9IChlKTsgZ290byBiYWQ7fSB3aGlsZSAoMCkNCiAgI2Rl ZmluZSBJRlAyQUMoSUZQKSAoKHN0cnVjdCBhcnBjb20gKilJRlApDQogIA0K ICAvKg0KICAgKiBFdGhlcm5ldCBvdXRwdXQgcm91dGluZS4NCiAgICogRW5j YXBzdWxhdGUgYSBwYWNrZXQgb2YgdHlwZSBmYW1pbHkgZm9yIHRoZSBsb2Nh bCBuZXQuDQotLS0gMTE1LDE2MCAtLS0tDQogIHN0YXRpYwlpbnQgZXRoZXJf cmVzb2x2ZW11bHRpIF9fUCgoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBzb2Nr YWRkciAqKiwgDQogIAkJCQkgICAgc3RydWN0IHNvY2thZGRyICopKTsNCiAg dV9jaGFyCWV0aGVyYnJvYWRjYXN0YWRkcls2XSA9IHsgMHhmZiwgMHhmZiwg MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9Ow0KISAjZGVmaW5lIHNlbmRlcnIo ZSkgZG8geyBlcnJvciA9IChlKTsgZ290byBiYWQ7IH0gd2hpbGUgKDApDQog ICNkZWZpbmUgSUZQMkFDKElGUCkgKChzdHJ1Y3QgYXJwY29tICopSUZQKQ0K ICANCisgI2lmZGVmIE5FVEdSQVBIDQorICNpbmNsdWRlIDxuZXRncmFwaC9u Z19ldGhlci5oPg0KKyAjaW5jbHVkZSA8bmV0Z3JhcGgvbmdfbWVzc2FnZS5o Pg0KKyAjaW5jbHVkZSA8bmV0Z3JhcGgvbmV0Z3JhcGguaD4NCisgDQorIHN0 YXRpYwl2b2lkCW5nZXRoZXJfaW5pdCh2b2lkKiBpZ25vcmVkKTsNCisgc3Rh dGljIHZvaWQJbmdldGhlcl9zZW5kKHN0cnVjdCBhcnBjb20gKmFjLA0KKyAJ CQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaCwgc3RydWN0IG1idWYgKm0pOw0K KyBzdGF0aWMJaW50CW5nZXRoZXJfY29uc3RydWN0b3Iobm9kZV9wICpub2Rl cCk7DQorIHN0YXRpYwlpbnQJbmdldGhlcl9yY3Ztc2cobm9kZV9wIG5vZGUs IHN0cnVjdCBuZ19tZXNnICptc2csDQorIAkJCWNvbnN0IGNoYXIgKnJldGFk ZHIsIHN0cnVjdCBuZ19tZXNnICoqcmVzcCk7DQorIHN0YXRpYwlpbnQJbmdl dGhlcl9ybW5vZGUobm9kZV9wIG5vZGUpOw0KKyBzdGF0aWMJaW50CW5nZXRo ZXJfbmV3aG9vayhub2RlX3Agbm9kZSwgaG9va19wIGhvb2ssIGNvbnN0IGNo YXIgKm5hbWUpOw0KKyAvKnN0YXRpYwlob29rX3AJbmdldGhlcl9maW5kaG9v ayhub2RlX3Agbm9kZSwgY2hhciAqbmFtZSk7Ki8NCisgc3RhdGljCWludAlu Z2V0aGVyX2Nvbm5lY3QoaG9va19wIGhvb2spOwkvKiBhbHJlYWR5IFBBUlRM WSBsaW5rZWQgKi8NCisgc3RhdGljCWludAluZ2V0aGVyX3JjdmRhdGEoaG9v a19wIGhvb2ssIHN0cnVjdCBtYnVmICptLCBtZXRhX3AgbWV0YSk7DQorIHN0 YXRpYwlpbnQJbmdldGhlcl9kaXNjb25uZWN0KGhvb2tfcCBob29rKTsJLyog bm90aWZ5IG9uIGRpc2Nvbm5lY3QgKi8NCisgDQorIHN0YXRpYyBzdHJ1Y3Qg bmdfdHlwZSB0eXBlc3RydWN0ID0gew0KKyAJTkdfVkVSU0lPTiwNCisgCU5H X0VUSEVSX05PREVfVFlQRSwNCisgCU5VTEwsDQorIAluZ2V0aGVyX2NvbnN0 cnVjdG9yLA0KKyAJbmdldGhlcl9yY3Ztc2csDQorIAluZ2V0aGVyX3Jtbm9k ZSwNCisgCW5nZXRoZXJfbmV3aG9vaywNCisgCU5VTEwsDQorIAluZ2V0aGVy X2Nvbm5lY3QsDQorIAluZ2V0aGVyX3JjdmRhdGEsDQorIAluZ2V0aGVyX3Jj dmRhdGEsDQorIAluZ2V0aGVyX2Rpc2Nvbm5lY3QgDQorIH07DQorIA0KKyAj ZGVmaW5lIEFDMk5HKEFDKSAoKG5vZGVfcCkoKEFDKS0+YWNfbmcpKQ0KKyAj ZGVmaW5lIE5HRUZfRElWRVJUIE5HRl9UWVBFMQkvKiBhbGwgcGFja2V0cyBz ZW50IHRvIG5ldGdyYXBoICovDQorICNlbmRpZiAvKiBORVRHUkFQSCAqLw0K KyANCiAgLyoNCiAgICogRXRoZXJuZXQgb3V0cHV0IHJvdXRpbmUuDQogICAq IEVuY2Fwc3VsYXRlIGEgcGFja2V0IG9mIHR5cGUgZmFtaWx5IGZvciB0aGUg bG9jYWwgbmV0Lg0KKioqKioqKioqKioqKioqDQoqKiogNDQ2LDQ1MSAqKioq DQotLS0gNDg0LDQ5OCAtLS0tDQogIA0KICAJZXRoZXJfdHlwZSA9IG50b2hz KGVoLT5ldGhlcl90eXBlKTsNCiAgDQorICNpZmRlZglORVRHUkFQSA0KKyAJ ew0KKyAJCXN0cnVjdCBhcnBjb20gKmFjID0gSUZQMkFDKGlmcCk7DQorIAkJ aWYgKEFDMk5HKGFjKSAmJiAoQUMyTkcoYWMpLT5mbGFncyAmIE5HRUZfRElW RVJUKSkNCisgCQkJbmdldGhlcl9zZW5kKGFjLCBlaCwgbSk7DQorIAkJCXJl dHVybjsNCisgCX0NCisgI2VuZGlmCS8qIE5FVEdSQVBIICovDQorIAkJDQog ICNpZiBOVkxBTiA+IDANCiAgCWlmIChldGhlcl90eXBlID09IHZsYW5fcHJv dG8pIHsNCiAgCQlpZiAodmxhbl9pbnB1dChlaCwgbSkgPCAwKQ0KKioqKioq KioqKioqKioqDQoqKiogNjMwLDYzNiAqKioqDQotLS0gNjc3LDY4NyAtLS0t DQogICNlbmRpZiAvKiBMTEMgKi8NCiAgCQlkcm9wYW55d2F5Og0KICAJCWRl ZmF1bHQ6DQorICNpZmRlZglORVRHUkFQSA0KKyAJCQluZ2V0aGVyX3NlbmQo YWMsIGVoLCBtKTsNCisgI2Vsc2UJLyogTkVUR1JBUEggKi8NCiAgCQkJbV9m cmVlbShtKTsNCisgI2VuZGlmCS8qIE5FVEdSQVBIICovDQogIAkJCXJldHVy bjsNCiAgCQl9DQogICNlbHNlIC8qIElTTyB8fCBMTEMgfHwgTkVUQVRBTEsg Ki8NCioqKioqKioqKioqKioqKg0KKioqIDgzMyw4MzUgKioqKg0KLS0tIDg4 NCwxMTc5IC0tLS0NCiAgCQlyZXR1cm4gRUFGTk9TVVBQT1JUOw0KICAJfQ0K ICB9DQorIA0KKyAjaWZkZWYJTkVUR1JBUEgNCisgDQorIC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KKyAgKiBUaGlzIHNlY3Rpb24gY29udGFpbnMg dGhlIG1ldGhvZHMgZm9yIHRoZSBOZXRncmFwaCBpbnRlcmZhY2UNCisgICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KKyAvKiBJdCdzIEFzY2lpLWFy dCB0aW1lIQ0KKyAgKiBUaGUgaWZuZXQgaXMgdGhlIGZpcnN0IHBhcnQgb2Yg dGhlIGFycGNvbSB3aGljaCBtdXN0IGJlDQorICAqIHRoZSBmaXJzdCBwYXJ0 IG9mIHRoZSBkZXZpY2UncyBzb2Z0Yy4uIHl1ay4NCisgICoNCisgICogICAg ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0t Kw0KKyAgKiAgICAgIHwgICBzdHJ1Y3QgaWZuZXQgKCppZnApICAgIHwgICAg IHwgICAgICAgICB8DQorICAqICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgfCAgICAgICAgIHwNCisgICogICAgICArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rICAgICB8ICAgICAgICAgfA0KKyAgKiAgICst LXxbYWNfbmddICAgICBzdHJ1Y3QgYXJwY29tICgqYWMpIHwgICAgICAgICB8 DQorICAqICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KyAgICAgICAgIHwNCisgICogICB8ICB8ICAgc3RydWN0IHNvZnRjICgqaWZw LT5pZl9zb2Z0YykgKGRldmljZSkgfA0KKyAgKiAgIHwgICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorICAqICAgfCAg ICAgICAgICAgICAgIF4NCisgICogQUMyTkcoKSAgICAgICAgICAgfA0KKyAg KiAgIHwgICAgICAgICAgICAgICB8DQorICAqICAgfCAgICAgICArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsNCisgICogICB8ICAgICAgIHwgICBbcHJpdmF0 ZV0gW2ZsYWdzXSAgfA0KKyAgKiAgICstLS0tLS0+fCBzdHJ1Y3Qgbmdfbm9k ZSAgICAgICB8DQorICAqICAgICAgICAgICB8W2hvb2tzXSAgICAgICAgICAg ICAgIHwgKiogd2Ugb25seSBhbGxvdyBvbmUgaG9vaw0KKyAgKiAgICAgICAg ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQorICAqICAgICAgICAgICAg ICAgfCAgIF4NCisgICogICAgICAgICAgICAgICB8ICAgfA0KKyAgKiAgICAg ICAgICAgICAgIHYgICB8DQorICAqICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tKw0KKyAgKiAgICAgICAgICAgICB8ICAgIFtub2RlXSAgIHwNCisgICog ICAgICAgICAgICAgfCAgICBob29rICAgICB8DQorICAqICAgICAgICAgICAg IHwgICAgW3ByaXZhdGVdfC0tICp1bnVzZWQqDQorICAqICAgICAgICAgICAg ICstLS0tLS0tLS0tLS0tKw0KKyAgKi8NCisgDQorIC8qDQorICAqIGNhbGxl ZCBkdXJpbmcgaW50ZXJmYWNlIGF0dGFjaGluZw0KKyAgKi8NCisgc3RhdGlj IHZvaWQNCisgbmdldGhlcl9pbml0KHZvaWQgKmlmcHZvaWQpDQorIHsNCisg CXN0cnVjdAlpZm5ldCAqaWZwID0gaWZwdm9pZDsNCisgCXN0cnVjdCBhcnBj b20gKmFjID0gSUZQMkFDKGlmcCk7DQorIAlzdGF0aWMgaW50CW5nZXRoZXJf ZG9uZV9pbml0Ow0KKyAJY2hhcgluYW1lYnVmWzMyXTsNCisgCW5vZGVfcCBu b2RlOw0KKyANCisgCS8qDQorIAkgKiB3ZSBoYXZlIGZvdW5kIGEgbm9kZSwg bWFrZSBzdXJlIG91ciAndHlwZScgaXMgYXZhaWxhYmUuDQorIAkgKi8NCisg CWlmIChuZ2V0aGVyX2RvbmVfaW5pdCA9PSAwKSB7DQorIAkJaWYgKG5nX25l d3R5cGUoJnR5cGVzdHJ1Y3QpKSB7DQorIAkJCXByaW50ZigibmdldGhlciBp bnN0YWxsIGZhaWxlZFxuIik7DQorIAkJCXJldHVybjsNCisgCQl9DQorIAkJ bmdldGhlcl9kb25lX2luaXQgPSAxOw0KKyAJfQ0KKyAJaWYgKG5nX21ha2Vf bm9kZV9jb21tb24oJnR5cGVzdHJ1Y3QsICZub2RlKSAhPSAwKQ0KKyAJCXJl dHVybjsNCisgCWFjLT5hY19uZyA9IG5vZGU7DQorIAlub2RlLT5wcml2YXRl ID0gaWZwOw0KKyAJc3ByaW50ZihuYW1lYnVmLCAiJXMlZCIsIGlmcC0+aWZf bmFtZSwgaWZwLT5pZl91bml0KTsNCisgCW5nX25hbWVfbm9kZShBQzJORyhh YyksIG5hbWVidWYpOw0KKyB9DQorIA0KKyAvKg0KKyAgKiBJdCBpcyBub3Qg cG9zc2libGUgb3IgYWxsb3dhYmxlIHRvIGNyZWF0ZSBhIG5vZGUgb2YgdGhp cyB0eXBlLg0KKyAgKiBJZiB0aGUgaGFyZHdhcmUgZXhpc3RzLCBpdCB3aWxs IGFscmVhZHkgaGF2ZSBjcmVhdGVkIGl0Lg0KKyAgKi8NCisgc3RhdGljCWlu dA0KKyBuZ2V0aGVyX2NvbnN0cnVjdG9yKG5vZGVfcCAqbm9kZXApDQorIHsN CisgCXJldHVybiAoRUlOVkFMKTsNCisgfQ0KKyANCisgLyoNCisgICogR2l2 ZSBvdXIgb2sgZm9yIGEgaG9vayB0byBiZSBhZGRlZC4uLg0KKyAgKiANCisg ICogQWxsb3cgb25lIGhvb2sgYXQgYSB0aW1lIChyYXdkYXRhKS4gDQorICAq IEl0IGNhbiBlaXRlaCByZGl2ZXJ0IGV2ZXJ5dGhpbmcgb3Igb25seSB1bmNs YWltZWQgcGFja2V0cy4NCisgICovDQorIHN0YXRpYwlpbnQNCisgbmdldGhl cl9uZXdob29rKG5vZGVfcCBub2RlLCBob29rX3AgaG9vaywgY29uc3QgY2hh ciAqbmFtZSkNCisgew0KKyANCisgCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGFs cmVhZHkgYSBob29rICovDQorIAlpZiAoTElTVF9GSVJTVCgmKG5vZGUtPmhv b2tzKSkpDQorIAkJcmV0dXJuKEVJU0NPTk4pOw0KKyAJLyoNCisgCSAqIENo ZWNrIGZvciB3aGljaCBtb2RlIGhvb2sgd2Ugd2FudC4NCisgCSAqLw0KKyAJ aWYgKHN0cmNtcChuYW1lLCBOR19FVEhFUl9IT09LX09SUEhBTikgIT0gMCkg ew0KKyAJCWlmIChzdHJjbXAobmFtZSwgTkdfRVRIRVJfSE9PS19ESVZFUlQp ICE9IDApIHsNCisgCQkJcmV0dXJuIChFSU5WQUwpOw0KKyAJCX0NCisgCQlu b2RlLT5mbGFncyB8PSBOR0VGX0RJVkVSVDsNCisgCX0gZWxzZSB7DQorIAkJ bm9kZS0+ZmxhZ3MgJj0gfk5HRUZfRElWRVJUOw0KKyAJfQ0KKyAJcmV0dXJu ICgwKTsNCisgfQ0KKyANCisgLyoNCisgICogaW5jb21pbmcgbWVzc2FnZXMu DQorICAqIEp1c3QgcmVzcG9uZCB0byB0aGUgZ2VuZXJpYyBURVhUX1NUQVRV UyBtZXNzYWdlDQorICAqLw0KKyBzdGF0aWMJaW50DQorIG5nZXRoZXJfcmN2 bXNnKG5vZGVfcCBub2RlLA0KKyAJc3RydWN0IG5nX21lc2cgKm1zZywgY29u c3QgY2hhciAqcmV0YWRkciwgc3RydWN0IG5nX21lc2cgKipyZXNwKQ0KKyB7 DQorIAlzdHJ1Y3QgaWZuZXQJKmlmcDsNCisgCWludCBlcnJvciA9IDA7DQor IA0KKyAJaWZwID0gbm9kZS0+cHJpdmF0ZTsNCisgCXN3aXRjaCAobXNnLT5o ZWFkZXIudHlwZWNvb2tpZSkgew0KKyAJICAgIGNhc2UJTkdNX0VUSEVSX0NP T0tJRTogDQorIAkJZXJyb3IgPSBFSU5WQUw7DQorIAkJYnJlYWs7DQorIAkg ICAgY2FzZQlOR01fR0VORVJJQ19DT09LSUU6IA0KKyAJCXN3aXRjaChtc2ct PmhlYWRlci5jbWQpIHsNCisgCQkgICAgY2FzZSBOR01fVEVYVF9TVEFUVVM6 IHsNCisgCQkJICAgIGNoYXIJKmFyZzsNCisgCQkJICAgIGludCBwb3MgPSAw Ow0KKyAJCQkgICAgaW50IHJlc3BsZW4gPSBzaXplb2Yoc3RydWN0IG5nX21l c2cpICsgNTEyOw0KKyAJCQkgICAgTUFMTE9DKCpyZXNwLCBzdHJ1Y3Qgbmdf bWVzZyAqLCByZXNwbGVuLA0KKyAJCQkJCU1fTkVUR1JBUEgsIE1fTk9XQUlU KTsNCisgCQkJICAgIGlmICgqcmVzcCA9PSBOVUxMKSB7IA0KKyAJCQkJZXJy b3IgPSBFTk9NRU07DQorIAkJCQlicmVhazsNCisgCQkJICAgIH0gICAgICAg DQorIAkJCSAgICBiemVybygqcmVzcCwgcmVzcGxlbik7DQorIAkJCSAgICBh cmcgPSAoKnJlc3ApLT5kYXRhOw0KKyANCisgCQkJICAgIC8qDQorIAkJCSAg ICAgKiBQdXQgaW4gdGhlIHRocm91Z2hwdXQgaW5mb3JtYXRpb24uDQorIAkJ CSAgICAgKi8NCisgCQkJICAgIHBvcyA9IHNwcmludGYoYXJnLCAiJWxkIGJ5 dGVzIGluLCAlbGQgYnl0ZXMgb3V0XG4iLA0KKyAJCQkgICAgaWZwLT5pZl9p Ynl0ZXMsIGlmcC0+aWZfb2J5dGVzKTsNCisgCQkJICAgIHBvcyArPSBzcHJp bnRmKGFyZyArIHBvcywNCisgCQkJCSIlbGQgb3V0cHV0IGVycm9yc1xuIiwN CisgCQkJICAgIAlpZnAtPmlmX29lcnJvcnMpOw0KKyAJCQkgICAgcG9zICs9 IHNwcmludGYoYXJnICsgcG9zLA0KKyAJCQkJImllcnJvcnMgPSAlbGRcbiIs DQorIAkJCSAgICAJaWZwLT5pZl9pZXJyb3JzKTsNCisgDQorIAkJCSAgICAo KnJlc3ApLT5oZWFkZXIudmVyc2lvbiA9IE5HX1ZFUlNJT047DQorIAkJCSAg ICAoKnJlc3ApLT5oZWFkZXIuYXJnbGVuID0gc3RybGVuKGFyZykgKyAxOw0K KyAJCQkgICAgKCpyZXNwKS0+aGVhZGVyLnRva2VuID0gbXNnLT5oZWFkZXIu dG9rZW47DQorIAkJCSAgICAoKnJlc3ApLT5oZWFkZXIudHlwZWNvb2tpZSA9 IE5HTV9FVEhFUl9DT09LSUU7DQorIAkJCSAgICAoKnJlc3ApLT5oZWFkZXIu Y21kID0gbXNnLT5oZWFkZXIuY21kOw0KKyAJCQkgICAgc3RybmNweSgoKnJl c3ApLT5oZWFkZXIuY21kc3RyLCAic3RhdHVzIiwNCisgCQkJCQlOR19DTURT VFJMRU4pOw0KKyAJCQl9DQorIAkJCWJyZWFrOw0KKyAJICAgIAkgICAgZGVm YXVsdDoNCisgCQkgCWVycm9yID0gRUlOVkFMOw0KKyAJCSAJYnJlYWs7DQor IAkJICAgIH0NCisgCQlicmVhazsNCisgCSAgICBkZWZhdWx0Og0KKyAJCWVy cm9yID0gRUlOVkFMOw0KKyAJCWJyZWFrOw0KKyAJfQ0KKyAJZnJlZShtc2cs IE1fTkVUR1JBUEgpOw0KKyAJcmV0dXJuIChlcnJvcik7DQorIH0NCisgDQor IC8qDQorICAqIFJlY2VpdmUgYSBjb21wbGV0ZWQgZXRoZXJuZXQgcGFja2V0 Lg0KKyAgKiBRdWV1ZSBpdCBmb3Igb3V0cHV0Lg0KKyAgKi8NCisgc3RhdGlj CWludA0KKyBuZ2V0aGVyX3JjdmRhdGEoaG9va19wIGhvb2ssIHN0cnVjdCBt YnVmICptLCBtZXRhX3AgbWV0YSkNCisgew0KKyAJc3RydWN0IGlmbmV0ICpp ZnA7DQorIAlpbnQJZXJyb3IgPSAwOw0KKyAJaW50CXM7DQorIAlzdHJ1Y3Qg ZXRoZXJfaGVhZGVyICplaDsNCisgCQ0KKyAJaWZwID0gaG9vay0+bm9kZS0+ cHJpdmF0ZTsNCisgDQorIAlpZiAoKGlmcC0+aWZfZmxhZ3MgJiAoSUZGX1VQ fElGRl9SVU5OSU5HKSkgIT0gKElGRl9VUHxJRkZfUlVOTklORykpDQorIAkJ c2VuZGVycihFTkVURE9XTik7DQorIAkvKg0KKyAJICogSWYgYSBzaW1wbGV4 IGludGVyZmFjZSwgYW5kIHRoZSBwYWNrZXQgaXMgYmVpbmcgc2VudCB0byBv dXINCisgCSAqIEV0aGVybmV0IGFkZHJlc3Mgb3IgYSBicm9hZGNhc3QgYWRk cmVzcywgbG9vcGJhY2sgYSBjb3B5Lg0KKyAJICogWFhYIFRvIG1ha2UgYSBz aW1wbGV4IGRldmljZSBiZWhhdmUgZXhhY3RseSBsaWtlIGEgZHVwbGV4DQor IAkgKiBkZXZpY2UsIHdlIHNob3VsZCBjb3B5IGluIHRoZSBjYXNlIG9mIHNl bmRpbmcgdG8gb3VyIG93bg0KKyAJICogZXRoZXJuZXQgYWRkcmVzcyAodGh1 cyBsZXR0aW5nIHRoZSBvcmlnaW5hbCBhY3R1YWxseSBhcHBlYXINCisgCSAq IG9uIHRoZSB3aXJlKS4gSG93ZXZlciwgd2UgZG9uJ3QgZG8gdGhhdCBoZXJl IGZvciBzZWN1cml0eQ0KKyAJICogcmVhc29ucyBhbmQgY29tcGF0aWJpbGl0 eSB3aXRoIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4NCisgCSAqLw0KKyAJaWYg KGlmcC0+aWZfZmxhZ3MgJiBJRkZfU0lNUExFWCkgew0KKyAJCWVoID0gbXRv ZChtLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOw0KKyAJCWlmIChtLT5tX2Zs YWdzICYgTV9CQ0FTVCkgew0KKyAJCQlzdHJ1Y3QgbWJ1ZiAqbiA9IG1fY29w eShtLCAwLCAoaW50KU1fQ09QWUFMTCk7DQorIA0KKyAJCQluZ19xdWV1ZV9k YXRhKGhvb2ssIG4sIG1ldGEpOw0KKyAJCX0gZWxzZSBpZiAoYmNtcChlaC0+ ZXRoZXJfZGhvc3QsDQorIAkJICAgIGVoLT5ldGhlcl9zaG9zdCwgRVRIRVJf QUREUl9MRU4pID09IDApIHsNCisgCQkJbmdfcXVldWVfZGF0YShob29rLCBt LCBtZXRhKTsNCisgCQkJcmV0dXJuICgwKTsJLyogWFhYICovDQorIAkJfQ0K KyAJfQ0KKyAJcyA9IHNwbGltcCgpOw0KKyAJLyoNCisgCSAqIFF1ZXVlIG1l c3NhZ2Ugb24gaW50ZXJmYWNlLCBhbmQgc3RhcnQgb3V0cHV0IGlmIGludGVy ZmFjZQ0KKyAJICogbm90IHlldCBhY3RpdmUuDQorIAkgKiBYWFggaWYgd2Ug bG9va2VhZCBhdCB0aGUgcHJpb3JpdHkgaW4gdGhlIG1ldGEgZGF0YSB3ZSBj b3VsZA0KKyAJICogcXVldWUgaGlnaCBwcmlvcml0eSBpdGVtcyBhdCB0aGUg aGVhZC4NCisgCSAqLw0KKyAJaWYgKElGX1FGVUxMKCZpZnAtPmlmX3NuZCkp IHsNCisgCQlJRl9EUk9QKCZpZnAtPmlmX3NuZCk7DQorIAkJc3BseChzKTsN CisgCQlzZW5kZXJyKEVOT0JVRlMpOw0KKyAJfQ0KKyAJSUZfRU5RVUVVRSgm aWZwLT5pZl9zbmQsIG0pOw0KKyAJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZG X09BQ1RJVkUpID09IDApDQorIAkJKCppZnAtPmlmX3N0YXJ0KShpZnApOw0K KyAJc3BseChzKTsNCisgCWlmcC0+aWZfb2J5dGVzICs9IG0tPm1fcGt0aGRy LmxlbjsNCisgCWlmIChtLT5tX2ZsYWdzICYgTV9NQ0FTVCkNCisgCQlpZnAt PmlmX29tY2FzdHMrKzsNCisgCXJldHVybiAoZXJyb3IpOw0KKyANCisgYmFk Og0KKyAJTkdfRlJFRV9EQVRBKG0sIG1ldGEpOw0KKyAJcmV0dXJuIChlcnJv cik7DQorIH0NCisgDQorIC8qDQorICAqIHBhc3MgYW4gbWJ1ZiBvdXQgdG8g dGhlIGNvbm5lY3RlZCBob29rDQorICAqLw0KKyBzdGF0aWMgdm9pZA0KKyBu Z2V0aGVyX3NlbmQoc3RydWN0IGFycGNvbSAqYWMsIHN0cnVjdCBldGhlcl9o ZWFkZXIgKmVoLCBzdHJ1Y3QgbWJ1ZiAqbSkNCisgew0KKyAJbm9kZV9wIG5v ZGUgPSBBQzJORyhhYyk7DQorIAlzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaDI7 DQorIA0KKyAJaWYgKG5vZGUgJiYgTElTVF9GSVJTVCgmKG5vZGUtPmhvb2tz KSkpIHsNCisgCQlNX1BSRVBFTkQobSwgc2l6ZW9mKCplaCksIE1fRE9OVFdB SVQpOw0KKyAJCWlmIChtID09IDApDQorIAkJCXJldHVybjsNCisgCQllaDIg PSBtdG9kKG0sIHN0cnVjdCBldGhlcl9oZWFkZXIgKik7DQorIAkJLyoNCisg CQkgKiBQb3NzaWJseSAnZWgnIGFscmVhZHkgcG9pbnRzDQorIAkJICogdG8g dGhlIHJpZ2h0IHBsYWNlLg0KKyAJCSAqLw0KKyAJCWlmIChlaDIgIT0gZWgp DQorIAkgCQliY29weShlaCwgZWgyLCBzaXplb2YoKmVoKSk7DQorIAkJbmdf cXVldWVfZGF0YShMSVNUX0ZJUlNUKCYobm9kZS0+aG9va3MpKSwgbSwgTlVM TCk7DQorIAl9IGVsc2Ugew0KKyAJCW1fZnJlZW0obSk7DQorIAl9DQorIH0N CisgLyoNCisgICogZG8gbG9jYWwgc2h1dGRvd24gcHJvY2Vzc2luZy4uDQor ICAqIFRoaXMgbm9kZSB3aWxsIHJlZnVzZSB0byBnbyBhd2F5LCB1bmxlc3Mg dGhlIGhhcmR3YXJlIHNheXMgdG8uLg0KKyAgKiBkb24ndCB1bnJlZiB0aGUg bm9kZSwgb3IgcmVtb3ZlIG91ciBuYW1lLiBqdXN0IGNsZWFyIG91ciBsaW5r cyB1cC4NCisgICovDQorIHN0YXRpYwlpbnQNCisgbmdldGhlcl9ybW5vZGUo bm9kZV9wIG5vZGUpDQorIHsNCisgCW5nX2N1dGxpbmtzKG5vZGUpOw0KKyAJ bm9kZS0+ZmxhZ3MgJj0gfk5HX0lOVkFMSUQ7IC8qIGJvdW5jZSBiYWNrIHRv IGxpZmUgKi8NCisgCXJldHVybiAoMCk7DQorIH0NCisgDQorIC8qIGFscmVh ZHkgbGlua2VkICovDQorIHN0YXRpYwlpbnQNCisgbmdldGhlcl9jb25uZWN0 KGhvb2tfcCBob29rKQ0KKyB7DQorIAkvKiBiZSByZWFsbHkgYW1pYWJsZSBh bmQganVzdCBzYXkgIllVUCB0aGF0J3MgT0sgYnkgbWUhICIgKi8NCisgCXJl dHVybiAoMCk7DQorIH0NCisgDQorIC8qDQorICAqIG5vdGlmeSBvbiBob29r IGRpc2Nvbm5lY3Rpb24gKGRlc3RydWN0aW9uKQ0KKyAgKg0KKyAgKiBGb3Ig dGhpcyB0eXBlLCByZW1vdmFsIG9mIHRoZSBsYXN0IGxpbnMgbm8gZWZmZWN0 LiBUaGUgaW50ZXJmYWNlIGNhbiBydW4gDQorICAqIGluZGVwZW5kZW50bHku DQorICAqIFNpbmNlIHdlIGhhdmUgbm8gcGVyLWhvb2sgaW5mb3JtYXRpb24s IHRoaXMgaXMgcmF0aGVyIHNpbXBsZS4NCisgICovDQorIHN0YXRpYwlpbnQN CisgbmdldGhlcl9kaXNjb25uZWN0KGhvb2tfcCBob29rKQ0KKyB7DQorIAlo b29rLT5ub2RlLT5mbGFncyAmPSB+TkdFRl9ESVZFUlQ7DQorIAlyZXR1cm4g KDApOw0KKyB9DQorICNlbmRpZiAvKiBORVRHUkFQSCAqLw0KKyANCisgLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRU5EICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQo= --0-512676918-917790696=:22411-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message