From owner-freebsd-questions Mon Jan 1 8:46:36 2001 From owner-freebsd-questions@FreeBSD.ORG Mon Jan 1 08:46:30 2001 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mail.rdc1.ov.nl.home.com (ha1.rdc1.ov.nl.home.com [212.120.66.198]) by hub.freebsd.org (Postfix) with ESMTP id 8F65A37B400 for ; Mon, 1 Jan 2001 08:46:29 -0800 (PST) Received: from ricin.localnet ([212.120.85.64]) by mail.rdc1.ov.nl.home.com (InterMail vM.4.01.03.00 201-229-121) with SMTP id <20010101164627.NHOM13684.mail.rdc1.ov.nl.home.com@ricin.localnet>; Mon, 1 Jan 2001 17:46:27 +0100 From: Danny Pansters To: Brent Kearney Subject: Re: hope for H323/natd Date: Mon, 1 Jan 2001 17:47:19 +0100 X-Mailer: KMail [version 1.1.99] Content-Type: Multipart/Mixed; charset="us-ascii"; boundary="------------Boundary-00=_VATHH5GYMPSJFX1R8FW7" References: <20001230211532.A49774@kearneys.ca> In-Reply-To: <20001230211532.A49774@kearneys.ca> Cc: freebsd-questions@freebsd.org MIME-Version: 1.0 Message-Id: <01010117471902.25486@ricin.localnet> Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG --------------Boundary-00=_VATHH5GYMPSJFX1R8FW7 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8bit On Sunday 31 December 2000 06:15, you wrote: > http://www.coritel.it/projects/sofia/nat.html > > Anyone up for porting this to *BSD? Trouble is, its a linux kernel module and therefore probably not that easily "ported" to BSD. The sad thing is that I've used it (with linux) in the past and it worked great (albeit very noisy as it threw any output to the console). It's limited to one video (h245) connection at a time. You could try gatekeeper instead but I didn't get it to properly work yet :-( AFAIK it's really a crazy protocol (from an IP angle) as it wants to connect to random ports > 1024. Not easy with firewalls either. Would be great though if someone more knowledgeable than me would write a module for it, maybe as an extension to natd or ipf, because - please don't flame me - gatekeeper didn't get me anything further to correctly NAT this type of traffic and I've given up on it for the time being. I know that my partner would like to be able to do netmeeting and currently this is still somewhat of an Achilles' heel in my defending switching my boxes from linux to fBSD... I am not a programmer, but I assume that the hard part would be to think up some notion of statefulness for h323 connections including the other protocols encapsulated by h323 so that its possible to, once identified as a valid h323 two way connection, have it bypass any filtering. Maybe the linux module source can be modified to use BSD kernel calls instead because the algorithm itself seems to work, but really I don't know sh*t about how to do that. For those readers who like to give it a try, the source is rather small, has lots of commented-out code, is GPL'ed and attached below. I'll be more than happy to test it. Danny --------------Boundary-00=_VATHH5GYMPSJFX1R8FW7 Content-Type: text/x-c; name="ip_masq_h323.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ip_masq_h323.c" LyoKICogICAgICAgICAgICAgIElQX01BU1FfSDMyMywgSC4zMjMgbWFzcXVlcmFkaW5nIG1vZHVs ZSAKICoKICoKICogVmVyc2lvbjogICAgIDEuMCBiZXRhLCBGZWIgMjUgMjAwMCAKICoKICogQXV0 aG9yOiAgICAgIFJhamt1bWFyLiBTCiAqICAgICAgICAgICAgICBBcmNoYW5hIFYuIFMuCiAqICAg ICAgICAgICAgICBTaGVlbmFyYW5pIEkuCiAqCiAqICAgICAgICAgICAgICBfX19fTW9kaWZpZWQg b24gIDI4IE1hciAyMDAwIGJ5IENvUmlUZUwgKHd3dy5jb3JpdGVsLml0KV9fXwoKICogICAgICAg ICAgICAgIEx1Y2EgVmVsdHJpICh2ZWx0cmlAY29yaXRlbC5pdCkKICogICAgICAgICAgICAgIFN0 ZWZhbm8gR2lhY29tZXR0aQogKgogKiAgICAgICAgICAgICAgdG8gd29yayBvbiBrZXJuZWwgMi4y LjEyIGFuZCBOZXRNZWV0aW5nIDMuMDEKICoKICogICAgICAgICAgICAgIG9mZmljaWFsIHNpdGU6 IGh0dHA6Ly93d3cuY29yaXRlbC5pdC9wcm9qZWN0cy9zb2ZpYS9uYXQuaHRtbAogKgogKiAgICAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQogKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqCiAqLwojaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYu aD4KI2luY2x1ZGUgPGxpbnV4L2luLmg+CiNpbmNsdWRlIDxsaW51eC9pcC5oPgojaW5jbHVkZSA8 bmV0L3Byb3RvY29sLmg+CiNpbmNsdWRlIDxuZXQvdGNwLmg+CiNpbmNsdWRlIDxuZXQvaXBfbWFz cS5oPgoKI2lmbmRlZiBERUJVR19DT05GSUdfSVBfTUFTUV9IMzIzCiNkZWZpbmUgREVCVUdfQ09O RklHX0lQX01BU1FfSDMyMyAxCiNlbmRpZgoKLyogCiAqICBwb3J0X2gzMjMgaXMgc2V0IHRvIHRo ZSBkZWZhdWx0IGguMzIzIHBvcnQgKDE3MjApCiAqLwppbnQgcG9ydF9oMzIzID0gMTcyMDsgCnN0 cnVjdCBpcF9tYXNxX2FwcCAqbWFzcV9pbmNhcm5hdGlvbjsKCgovKkBAQEBAIHByaXZhdGUgY29t bWVudHMgKENvUmlUZUwpLi4uCnNvbWUgbm90ZXM6IAogIDEpIGV2ZXJ5IGguMzIzIHNlc3Npb24g cmVnaXN0cyBhIG5ldyAnaDI0NSBhcHBsaWNhdGlvbicgdG8gaGFuZGxlIHdpdGggYSBuZXcgaC4y NDUgc2Vzc2lvbiwgdGhpcyAnaDI0NSBhcHBsLicgaXMgYWx3YXlzIHJlZ2lzdGVyZWQgd2l0aCB0 aGUgc2FtZSBpcF9tYXNxX2gyNDUgc3RydWN0dXJlIChzZWUgcG9pbnQgKDEpKTsgZm9yIHRoaXMg cmVhc29uIG9ubHkgb25lIGgyNDUgc2Vzc2lvbiBjYW4gYmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB0 aW1lOwogIDIpIGZvciB0aGlzIHJlYXNvbiwgd2hlbiBhIG5ldyBoMjQ1IHNlc3Npb24gaXMgbmVl ZGVkLCB0aGUgb2xkIG9uZSBpcyBkZXJlZ2lzdHJhdGVkIGFuZCB0aGUgJ2F0dGFjaCcgdmFsdWUg aXMgc2V0IHRvIHplcm87IAoqLwoKCmludCBoMjQ1cmVnaXN0ZXJlZD0wOwoKCi8qKioqKioqKioq ICBTdGFydCBvZiBILjI0NSBtYXNxIGFwcCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqLwoK c3RhdGljIGludAptYXNxX2gyNDVfaW5pdF8xIChzdHJ1Y3QgaXBfbWFzcV9hcHAgKm1hcHAsIHN0 cnVjdCBpcF9tYXNxICptcykKewogIE1PRF9JTkNfVVNFX0NPVU5UOwogIHByaW50aygibWFzcV9o MjQ1X2luaXRfMTogSVAgbWFzcSBhcHAgMjQ1IGluaXRcbiIpOwogIHJldHVybiAwOwp9CgpzdGF0 aWMgaW50Cm1hc3FfaDI0NV9kb25lXzEgKHN0cnVjdCBpcF9tYXNxX2FwcCAqbWFwcCwgc3RydWN0 IGlwX21hc3EgKm1zKQp7CiAgTU9EX0RFQ19VU0VfQ09VTlQ7CiAgcHJpbnRrKCJtYXNxX2gyNDVf ZG9uZV8xOiBJUCBtYXNxIGFwcCAyNDUgZG9uZVxuIik7CiAgcmV0dXJuIDA7Cn0KCgppbnQKbWFz cV9oMjQ1X2luIChzdHJ1Y3QgaXBfbWFzcV9hcHAgKm1hcHAsIHN0cnVjdCBpcF9tYXNxICptcywg c3RydWN0IHNrX2J1ZmYgKipza2JfcCwgX191MzIgbWFkZHIpCnsKLy8JcHJpbnRrKCJtYXNxX2gy NDVfaW5cbiIpOwoJcmV0dXJuIDA7Cn0KCgppbnQKbWFzcV9oMjQ1X291dCAoc3RydWN0IGlwX21h c3FfYXBwICptYXBwLCBzdHJ1Y3QgaXBfbWFzcSAqbXMsIHN0cnVjdCBza19idWZmICoqc2tiX3As IF9fdTMyIG1hZGRyKQp7CgovL0BAQEBAIChDb1JpVGVMKTogcHJpdmF0ZSBjb21tZW50cwovLyAg J21hcHAnIHB1bnRhIGFsbCdpbmZvIHN1bCBwcm90b2NvbGxvIGRhIG1hc2NoZXJhcmUgKGluIHBy YXRpY2EgaDI0NSkKLy8gICdtcycgcHVudGEgbGEgdGFiZWxsYSBkaSBtYXNoZXJhbWVudG8KLy8g ICdza19idWZmJyBwdW50YSB1bmEgc3RydXR0dXJhIGNoZSBjb250aWVuZSBhbmNoZSBpbCBwYWNj aGV0dG8gSVAgY29tcGxldG8KLy8gICdtYWRkcicgZScgdW5hIGNvcGlhIGRlbCBtYXNxIElQIGFk ZHJlc3MgKG1pIHNlbWJyYSBuZWxsZSBwcm92ZSBpZGVudGljbyBhICdtcy0+bWFkZHInKQoKICBz dHJ1Y3Qgc2tfYnVmZiAqc2tiOyAKICBzdHJ1Y3QgaXBoZHIgKmlwaDsgCiAgc3RydWN0IHRjcGhk ciAqdGg7IAogIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpkYXRhX2xpbWl0OwogIHVuc2lnbmVkIGNo YXIgKnNrYnVmZl9wOwogIF9fdTE2IHBvcnQsICpydHBfcG9ydDsgCiAgX191MzIgaXAsdGVtcF9p cCwgKnJ0cF9pcDsKICBzdHJ1Y3QgaXBfbWFzcSAqIG5fbXNfcnRwOwogIHVuc2lnbmVkIGNoYXIg cDEscDI7CgoKICBza2IgPSAqc2tiX3A7IAogIGlwaCA9IHNrYi0+aC5pcGlwaDsgIC8vJ3NrYnVm Zl9wJyBwb2ludHMgdGhlIElQIGhlYWRlciBvZiB0aGUgcGFja2V0IHRvIGJlIHByb2Nlc3NlZAog IHRoID0gKHN0cnVjdCB0Y3BoZHIgKikmKCgoY2hhciAqKWlwaClbaXBoLT5paGwqNF0pOyAKICBk YXRhID0gc2tiLT5kYXRhOyAKICBkYXRhX2xpbWl0ID0gc2tiLT50YWlsOyAKICBza2J1ZmZfcCA9 IGRhdGErMTI7CgogIHByaW50aygibWFzcV9oMjQ1X291dDogdGNwL2lwX3BhY2tldDogaDI0NV9k YXRhOiAiKTsKICAgICAgIGRhdGErPWlwaC0+aWhsKjQrdGgtPmRvZmYqNDsgCiAgd2hpbGUoZGF0 YTxkYXRhX2xpbWl0KXsgCiAgICAgIHByaW50aygiJTAyeCAiLCpkYXRhKTsgCiAgICAgIGRhdGEr KzsgCiAgfQogIHByaW50aygiXG4iKTsKCiAgLy9AQEBAQCBDb1JpVGVMOiBhbmFsaXN5cyBvZiBo MjQ1IG1zZwogIGRhdGE9c2tiLT5kYXRhOyAvL0BAQEBAIENvUmlUZUw6IHN0YXJ0IG9mIElQIHBr dAogIGRhdGErPWlwaC0+aWhsKjQrdGgtPmRvZmYqNDsgLy9AQEBAQCBDb1JpVGVMOiBqdW1wcyBo ZWFkcmVzCiAgaXA9bnRvaGwobXMtPnNhZGRyKTsgLy9AQEBAQCBDb1JpVGVMOiB0byBmaW5kPXNv dXJjZSBJUCBhZGRyZXNzCiAgd2hpbGUoKGRhdGErNSk8ZGF0YV9saW1pdCkKICB7IHRlbXBfaXA9 ICgoKCpkYXRhKSA8PCAyNCkgKyAoKihkYXRhKzEpPDwgMTYpICsgKCooZGF0YSsyKSA8PCA4KSAr ICgqKGRhdGErMykpKTsKICAgIGlmICh0ZW1wX2lwPT1pcCkKCXsgcDE9KihkYXRhKzQpOyAKICAg ICAgcDI9KihkYXRhKzUpOyAKICAgICAgcG9ydD0ocDE8PDgpK3AyOyAKCiAgICAgIHByaW50aygi bWFzcV9oMjQ1X291dDogPC0tIFJUQ1AvUlRQX2Rlc3RfYWRkcjogJTA4eFxuIixpcCk7CiAgICAg IHByaW50aygibWFzcV9oMjQ1X291dDogPC0tIFJUQ1AvUlRQX2Rlc3RfcG9ydDogJTA0eFxuIixw b3J0KTsKCiAgICAgIC8vcHJpbnRrKCJtYXNxX2gyNDVfb3V0OiBtYXBwLT5uX2F0dGFjaCAoYmVm b3JlICdpcF9tYXNxX25ldycpID0gJWRcbiIsbWFwcC0+bl9hdHRhY2gpOwogICAgICBuX21zX3J0 cCA9IGlwX21hc3FfbmV3KCAKICAgICAgSVBQUk9UT19VRFAsIG1hZGRyLDAsICAgICAgICAgICAg Ly9AQEBAQCBDb1JpVGVMOiAgbWFzcSBhZGRyCiAgICAgIGh0b25sKGlwKSwgaHRvbnMocG9ydCks ICAgICAgICAgIC8vQEBAQEAgQ29SaVRlTDogIHBjayBzb3VyY2UKICAgICAgaXBoLT5kYWRkciwg MCwgICAgICAgICAgICAgICAgICAgLy9AQEBAQCBDb1JpVGVMOiAgcGNrIGRlc3QKICAgICAgSVBf TUFTUV9GX05PX0RQT1JUKTsgCiAgICAgIGlmKG5fbXNfcnRwPT1OVUxMKQogICAgICAgIHByaW50 aygibWFzcV9oMjQ1X291dDogUlRDUC9SVFAgbWFzcSBlbnRyeSBub3QgbWFkZVxuIik7IAogICAg ICBlbHNlIHsgCgoKICAgICAgICAgICAgIHJ0cF9pcD1kYXRhOyAKICAgICAgICAgICAgIHJ0cF9w b3J0PWRhdGErNDsgCiAgICAgICAgICAgICAqcnRwX2lwPW5fbXNfcnRwLT5tYWRkcjsgICAgIC8v QEBAQEAgQ29SaVRlTDogIGNoYW5nZSBJUAogICAgICAgICAgICAgKnJ0cF9wb3J0PW5fbXNfcnRw LT5tcG9ydDsgICAvL0BAQEBAIENvUmlUZUw6ICBjaGFuZ2UgcG9ydAogICAgICAgICAgICAgcHJp bnRrKCJtYXNxX2gyNDVfb3V0OiBSVENQL1JUUCBtYXNxdWVyYXRlZDogbWFkZHI9JTA4eCAsIG1w b3J0PSV1XG4iLCBuX21zX3J0cC0+bWFkZHIsbl9tc19ydHAtPm1wb3J0KTsKICAgICAgICAgICAg IC8vcHJpbnRrKCJtYXNxX2gyNDVfb3V0OiBtYXBwLT5uX2F0dGFjaCAoYWZ0ZXIgJ2lwX21hc3Ff bmV3JykgPSAlZFxuIixtYXBwLT5uX2F0dGFjaCk7CiAgICAgICAgICAgfQoKICAgIH0KICAgIAog ICAgZGF0YSsrOyAKICB9CgogIHJldHVybiAwOwkKfQoKCi8qKioqKioqKioqKkVuZCBvZiBILjI0 NSBhcHAgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKiovCgoKc3RydWN0IGlwX21hc3FfYXBw ICBpcF9tYXNxX2gyNDVfdGVtcGxhdGUgPSB7CiAgICAgICAgTlVMTCwJCQkvKiBuZXh0ICovCiAg ICAgICAgImgyNDUiLAkJCS8qIG5hbWUgKi8KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAvKiB0eXBlICovCiAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogbl9hdHRhY2gg Ki8KICAgICAgICBtYXNxX2gyNDVfaW5pdF8xLCAgICAgICAgLyogaXBfbWFzcV9pbml0XzEgKi8K ICAgICAgICBtYXNxX2gyNDVfZG9uZV8xLCAgICAgICAgLyogaXBfbWFzcV9kb25lXzEgKi8KICAg ICAgICBtYXNxX2gyNDVfb3V0LCAgICAgICAgICAgLyogcGt0X291dCAqLwogICAgICAgIG1hc3Ff aDI0NV9pbiwgICAgICAgICAgICAvKiBwa3RfaW4gKi8KfTsKCgoKc3RydWN0IGlwX21hc3FfYXBw ICogaXBfbWFzcV9oMjQ1OwoKc3RhdGljIGludAptYXNxX2gzMjNfaW5pdF8xIChzdHJ1Y3QgaXBf bWFzcV9hcHAgKm1hcHAsIHN0cnVjdCBpcF9tYXNxICptcykKeyBwcmludGsoIm1hc3FfaDMyM19p bml0XzFcbiIpOwogICAgICAgIE1PRF9JTkNfVVNFX0NPVU5UOwogIGlmIChoMjQ1cmVnaXN0ZXJl ZCkgeyAKICAJICAvL3ByaW50aygibWFzcV9oMzIzX2luaXRfMTogZm91bmQgYW4gb2xkIGlwX21h c3FfYXBwIGVudHJ5IGZvciBoMjQ1LCBJJ20gdHJ5aW5nIHRvIGRlbGV0ZSBpdC4uLi5cbiIpOwog ICAgICAKICAgICAgLy9AQEBAQCBDb1JpVGVMOiBzZXQgbl9hdHRhY2ggdG8gemVybyB0byB1bnJl Z2lzdGVyIHRoZSBvbGQgaDI0NSBhcHAKICAgICAgaXBfbWFzcV9oMjQ1LT5uX2F0dGFjaD0wOwog ICAgICBwcmludGsoIm1hc3FfaDMyM19pbml0XzE6IGZvdW5kIGFuIG9sZCAgaDI0NSBhcHA7IG5f YXR0YWNoIGZvcmNlZCB0byAwXG4iKTsKCiAgCSAgaWYodW5yZWdpc3Rlcl9pcF9tYXNxX2FwcChp cF9tYXNxX2gyNDUpKSAKICAJICAgIHsgLy9rZnJlZShpcF9tYXNxX2gyNDUpOyAvL0BAQEBAIENv UmlUZUw6IG90aGVyd2lzZSBpdCBmcmVlcyBtZW0gbm90IHRvIGJlIG1hbGxvY2VkIGJlZm9yZSBi ZWluZyByZXVzZWQKICAgICAgICAgIHByaW50aygibWFzcV9oMzIzX2luaXRfMTogZXJyb3IgdW5y ZWdpc3RlcmluZyB0aGUgb2xkIGgyNDUgYXBwIVxuIik7CiAgICAgICAgfSBlbHNlIHByaW50aygi bWFzcV9oMzIzX2luaXRfMTogdGhlIG9sZCBoMjQ1IGFwcCBpcyBzdWNjZXNzZnVsbHkgdW5yZWdp c3RlcmVkLlxuIik7CgkgIGgyNDVyZWdpc3RlcmVkPTA7CiAgCX0gCiByZXR1cm4gMDsKfQoKc3Rh dGljIGludAptYXNxX2gzMjNfZG9uZV8xIChzdHJ1Y3QgaXBfbWFzcV9hcHAgKm1hcHAsIHN0cnVj dCBpcF9tYXNxICptcykKewogIHByaW50aygibWFzcV9oMzIzX2RvbmVfMVxuIik7CiAgcHJpbnRr KCJtYXNxX2gzMjM6IGgyNDUgc3RhdHVzICgwPXVucmVnaXN0ZXJlZCwgMT1yZWdpc3RlcmVkKSA9 ICVkXG4iLGgyNDVyZWdpc3RlcmVkKTsgLy9AQEBAQCBDb1JpVGVMOiBkZWJ1ZwogIE1PRF9ERUNf VVNFX0NPVU5UOwogIHJldHVybiAwOwp9CgppbnQKbWFzcV9oMzIzX291dCAoc3RydWN0IGlwX21h c3FfYXBwICptYXBwLCBzdHJ1Y3QgaXBfbWFzcSAqbXMsIHN0cnVjdCBza19idWZmICoqc2tiX3As IF9fdTMyIG1hZGRyKQp7Ci8vICBwcmludGsoIm1hc3FfaDMyM19vdXQ6IGRvZXMgZG8gbm90aGlu ZyEhIVxuIik7CiAgcmV0dXJuIDA7Cn0KCgppbnQKbWFzcV9oMzIzX2luIChzdHJ1Y3QgaXBfbWFz cV9hcHAgKm1hcHAsIHN0cnVjdCBpcF9tYXNxICptcywgc3RydWN0IHNrX2J1ZmYgKipza2JfcCwg X191MzIgbWFkZHIpCnsKICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogIHN0cnVjdCBpcGhkciAqaXBo OwogIHN0cnVjdCB0Y3BoZHIgKnRoOwogIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpkYXRhX2xpbWl0 OwogIF9fdTMyIGlwOwogIF9fdTE2IHBvcnQ7CiAgX191MzIgdGVtcF9pcDsKICB1bnNpZ25lZCBj aGFyICogc2tidWZmX3A7CiAgdW5zaWduZWQgY2hhciBwMSxwMjsKICBpbnQgajsKCgogICAgc2ti ID0gKnNrYl9wOwoJaXBoID0gc2tiLT5oLmlwaXBoOwogICAgICAgIHRoID0gKHN0cnVjdCB0Y3Bo ZHIgKikmKCgoY2hhciAqKWlwaClbaXBoLT5paGwqNF0pOwoJZGF0YSA9IHNrYi0+ZGF0YTsKICAg ICAgICBkYXRhX2xpbWl0ID0gc2tiLT50YWlsOwoJc2tidWZmX3AgPSBkYXRhKzEyOwoJaXA9ICgo KCpza2J1ZmZfcCkgPDwgMjQpICsgKCooc2tidWZmX3ArMSk8PCAxNikgKyAoKihza2J1ZmZfcCsy KSA8PCA4KSArICgqKHNrYnVmZl9wKzMpKSk7IAoJc2tidWZmX3A9c2tidWZmX3ArNDsKCXRlbXBf aXA9ICgoKCpza2J1ZmZfcCkgPDwgMjQpICsgKCooc2tidWZmX3ArMSk8PCAxNikgKyAoKihza2J1 ZmZfcCsyKSA8PCA4KSArICgqKHNrYnVmZl9wKzMpKSk7IAoJd2hpbGUoKChza2J1ZmZfcCs2KTwg ZGF0YV9saW1pdCkgJiYgKHRlbXBfaXAgIT1pcCkpewoJICBza2J1ZmZfcCsrOwoJICB0ZW1wX2lw PSAoKCgqc2tidWZmX3ApIDw8IDI0KSArICgqKHNrYnVmZl9wKzEpPDwgMTYpICsgKCooc2tidWZm X3ArMikgPDwgOCkgKyAoKihza2J1ZmZfcCszKSkpOyAKCX0KCWlmKHRlbXBfaXA9PWlwKXsKCXAx PSooc2tidWZmX3ArNCk7CglwMj0qKHNrYnVmZl9wKzUpOwoJcG9ydD0ocDE8PDgpK3AyOwoJaWYg KGgyNDVyZWdpc3RlcmVkPT0xKSAKCXsgcHJpbnRrKCJtYXNxX2gzMjNfaW46IEFUVEVOVElPTiEh ISBmb3VuZCBhIHByZXZpb3VzIGlwX21hc3FfYXBwIGVudHJ5LCBkZWxldGluZy4uLi5cbiIpOwog ICAgICB1bnJlZ2lzdGVyX2lwX21hc3FfYXBwKGlwX21hc3FfaDI0NSk7CgkgIGgyNDVyZWdpc3Rl cmVkPTA7Cgl9CiAgICBwcmludGsoIm1hc3FfaDMyM19pbjogSC4yNDUgUG9ydCBpcyBhdDogJXVc biIscG9ydCk7CglpZiAoIShqID0gcmVnaXN0ZXJfaXBfbWFzcV9hcHAoaXBfbWFzcV9oMjQ1LCBJ UFBST1RPX1RDUCwgcG9ydCkpKSAKICAgIHsgaDI0NXJlZ2lzdGVyZWQgPSAxOwoJfSBlbHNlIHBy aW50aygibWFzcV9oMzIzX2luOiBBVFRFTlRJT046IEgyNDUgbWVzc2FnZXMgd2lsbCBub3QgYmUg Y2FwdHVyZWQhISFcbiIpOwoJCgkKCX0KcmV0dXJuIDA7CQp9CnN0cnVjdCBpcF9tYXNxX2FwcCBp cF9tYXNxX2gzMjMgPSB7CiAgICAgICAgTlVMTCwJCQkvKiBuZXh0ICovCgkiaDMyMyIsCQkJLyog bmFtZSAqLwogICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgKi8KICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBuX2F0dGFjaCAqLyAvLwogICAgICAgIG1hc3Ff aDMyM19pbml0XzEsICAgICAgICAvKiBpcF9tYXNxX2luaXRfMSAqLwogICAgICAgIG1hc3FfaDMy M19kb25lXzEsICAgICAgICAvKiBpcF9tYXNxX2RvbmVfMSAqLwogICAgICAgIG1hc3FfaDMyM19v dXQsICAgICAgICAgICAvKiBwa3Rfb3V0ICovCiAgICAgICAgbWFzcV9oMzIzX2luLCAgICAgICAg ICAgIC8qIHBrdF9pbiAqLwp9OwoKLyoKICogCWlwX21hc3FfaDMyMyBpbml0aWFsaXphdGlvbgog Ki8KCmludCBpcF9tYXNxX2gzMjNfaW5pdCh2b2lkKQp7CglpbnQgajsKCi8vCXByaW50aygiaXBf bWFzcV9oMzIzX2luaXRcbiIpOyAKCWlwX21hc3FfaDI0NSA9IE5VTEw7CgkJCglpZiAoKG1hc3Ff aW5jYXJuYXRpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfbWFzcV9hcHApLCBHRlBfS0VS TkVMKSkgPT0gTlVMTCkKCSAgcmV0dXJuIC1FTk9NRU07CgltZW1jcHkobWFzcV9pbmNhcm5hdGlv biwgJmlwX21hc3FfaDMyMywgc2l6ZW9mKHN0cnVjdCBpcF9tYXNxX2FwcCkpOwoJICAgICAgICAK ICAgIGlmICgoaXBfbWFzcV9oMjQ1ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX21hc3FfYXBw KSxHRlBfS0VSTkVMKSkgPT0gTlVMTCkKCSAgcmV0dXJuIC1FTk9NRU07CSAgCiAgICBtZW1jcHko aXBfbWFzcV9oMjQ1LCAmaXBfbWFzcV9oMjQ1X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGlwX21h c3FfYXBwKSk7CgkJCQogICAgaWYgKChqID0gcmVnaXN0ZXJfaXBfbWFzcV9hcHAobWFzcV9pbmNh cm5hdGlvbiwgSVBQUk9UT19UQ1AsIHBvcnRfaDMyMykpKQoJICByZXR1cm4gajsKICAgICAgICAK CiNpZiBERUJVR19DT05GX0lHX0lQX01BU1FfSDMyMwoJCQlwcmludGsoImlwX21hc3FfaDMyM19p bml0OiBIMzIzOiBsb2FkZWQgc3VwcG9ydCBvbiBwb3J0ID0gJWRcbiIsIHBvcnRfaDMyMyk7CiNl bmRpZgogICAgcmV0dXJuIDA7Cn0KCi8qCiAqIAlpcF9tYXNxX2gzMjMgZmluLgogKi8KCmludCBp cF9tYXNxX2gzMjNfZG9uZSh2b2lkKQp7CglpbnQgazsKCglrPTA7CgoJcHJpbnRrKCJpcF9tYXNx X2gzMjNfZG9uZVxuIik7IAoKCWlmIChtYXNxX2luY2FybmF0aW9uKSB7CgkgICAgaWYgKChrID0g dW5yZWdpc3Rlcl9pcF9tYXNxX2FwcChtYXNxX2luY2FybmF0aW9uKSkpIHsKCSAgICB9IGVsc2Ug ewoJICAgICAga2ZyZWUobWFzcV9pbmNhcm5hdGlvbik7CgkgICAgICBtYXNxX2luY2FybmF0aW9u ID0gTlVMTDsKI2lmIERFQlVHX0NPTkZJR19JUF9NQVNRX0gzMjMKCSAgICAgIHByaW50aygiaXBf bWFzcV9oMzIzX2RvbmU6IEgzMjM6IHVubG9hZGVkIHN1cHBvcnQgb24gcG9ydCA9ICVkXG4iLCBw b3J0X2gzMjMpOwojZW5kaWYKCSAgICB9CgkgIH0KCglpZiAoaDI0NXJlZ2lzdGVyZWQpIHsgCiAg CSAgcHJpbnRrKCJpcF9tYXNxX2gzMjNfZG9uZTogcmVtb3ZpbmcgdGhlIG1hc3EgYXBwIGVudHJ5 XG4iKTsgCiAgCSAgaWYodW5yZWdpc3Rlcl9pcF9tYXNxX2FwcChpcF9tYXNxX2gyNDUpKSAKICAJ ICAgIGtmcmVlKGlwX21hc3FfaDI0NSk7IAoJICBoMjQ1cmVnaXN0ZXJlZD0wOwogIAl9IAoJcmV0 dXJuIGs7Cn0KCiNpZmRlZiBNT0RVTEUKCmludCBpbml0X21vZHVsZSh2b2lkKQp7CiAgcHJpbnRr KCJJbml0IG1vZHVsZVxuIik7ICAKICBpZiAoaXBfbWFzcV9oMzIzX2luaXQoKSAhPSAwKQogICAg cmV0dXJuIC1FSU87CiAgcmV0dXJuIDA7Cn0KCnZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKewog ICAgICAgIGlmIChpcF9tYXNxX2gzMjNfZG9uZSgpICE9IDApCiAgICAgICAgICAgICAgICBwcmlu dGsoImlwX21hc3FfaDMyMzogY2FuJ3QgcmVtb3ZlIG1vZHVsZVxuIik7Cn0KCiNlbmRpZiAvKiBN T0RVTEUgKi8K --------------Boundary-00=_VATHH5GYMPSJFX1R8FW7-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message