Date: Sat, 16 Oct 2010 16:07:59 -0700 From: Garrett Cooper <gcooper@FreeBSD.org> To: =?ISO-8859-1?Q?Dag=2DErling_Sm=F8rgrav?= <des@des.no> Cc: freebsd-hackers@freebsd.org, Ivan Voras <ivoras@freebsd.org> Subject: Re: Why is TUNABLE_INT discouraged? Message-ID: <AANLkTim1E94qWq1TF1111-sYo2dj35Y-XnPq3DT4kpoL@mail.gmail.com> In-Reply-To: <8662zg586z.fsf@ds4.des.no> References: <AANLkTinKaiGFhKRgqQ%2BFjm=02VfWCxULe0a68y-PkJx6@mail.gmail.com> <86fwyq8rsc.fsf@ds4.des.no> <i3kbis$73l$1@dough.gmane.org> <86d3tujh72.fsf@ds4.des.no> <AANLkTi=puD%2B-WeZ%2BFGdtZtw1v%2BNnGD_htwNa%2BEn9fcML@mail.gmail.com> <864of680wv.fsf@ds4.des.no> <AANLkTinraF50O%2Bcp_h1m6TODnoz_7R3WXfjTanh-86mn@mail.gmail.com> <AANLkTikU6fLzWL-n6fCtvaTsXWGis7ydKM1qJaV=WRJ%2B@mail.gmail.com> <8662zkurx9.fsf@ds4.des.no> <AANLkTimbkTQiNgYCYFnTXMpRe9koJGrq1%2BYoq5-fVmFD@mail.gmail.com> <8662zg586z.fsf@ds4.des.no>
next in thread | previous in thread | raw e-mail | index | archive | help
--00221532c7aca694360492c40306 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2010/8/12 Dag-Erling Sm=F8rgrav <des@des.no>: > Garrett Cooper <gcooper@FreeBSD.org> writes: >> Dag-Erling Sm=F8rgrav <des@des.no> writes: >> > It might be a good idea to introduce TUNABLE_POINTER and TUNABLE_SIZE. >> I would actually argue against doing that because it would only create >> divergence between sysctl and tunable KPIs... > > Not if we also introduce corresponding SYSCTLs. =A0Note that my idea is t= o > have these as aliases for the correct primitive types. > >> (BTW, when you say TUNABLE_SIZE, I assume it would be a size_t quantity?= ) > > Yes. > >> Something might need to be done to the values returned by the tunables >> though, because they don't respect boundaries, and can overflow right >> now (which exacerbates the issue with values crammed into smaller >> datatypes)... > > Yes. =A0How about this: > > =A0- rename getenv_quad() to getenv_signed() and getenv_unsigned() > =A0- add min / max arguments > =A0- implement getenv_quad() (and all the others) in terms of > =A0 getenv_number() > > e.g. > > int > getenv_uint(const char *name, unsigned int *data) > { > =A0 =A0 =A0 =A0unsigned long long tmp; > =A0 =A0 =A0 =A0int rval; > > =A0 =A0 =A0 =A0if ((rval =3D getenv_unsigned(name, &tmp, 0, UINT_MAX)) = =3D=3D 0) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*data =3D (unsigned int)tmp; > =A0 =A0 =A0 =A0return (rval); > } > > (note that due to the min / max arguments, the complexity of handling > both signed and unsigned values in the same function probably exceeds > the complexity of having two very similar functions) Here's a draft of this work des@ challenged me to a while back. It works well as demonstrated with my tests. The only catch with detecting bounds is that if it's the minimum in the case of signed or maximum representable value in the case of unsigned, then strtoq, etc will clamp the value to the maximum representable value. Other than that it works well, and now tunables represented by unsigned values should work better. Please let me know what you all think. Thanks! -Garrett PS I added uquad_t for consistency in the APIs, even though quad_t was deprecated, but I didn't bump __FreeBSD_version__ -- wasn't sure if I should have done that). --00221532c7aca694360492c40306 Content-Type: application/octet-stream; name="test-tunables-draft1.log" Content-Disposition: attachment; filename="test-tunables-draft1.log" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gfd3iz6p1 IyBDb25zb2xlIG91dHB1dAojIGZvciBpIGluICovOyBkbyAoY2QgJGkgJiYgc2ggdGVzdCouc2gg Mj4vZGV2L251bGwpOyBkb25lCnRlc3RfaW50X3R1bmFibGUudHVuYWJsZT0iLTEiCnRlc3RfaW50 X3R1bmFibGUudHVuYWJsZT0iMCIKdGVzdF9pbnRfdHVuYWJsZS50dW5hYmxlPSI0MiIKdGVzdF9p bnRfdHVuYWJsZS50dW5hYmxlPSJhc2RmMTIzNCIKdGVzdF9pbnRfdHVuYWJsZS50dW5hYmxlPSIt MjE0NzQ4MzY0NyIKdGVzdF9pbnRfdHVuYWJsZS50dW5hYmxlPSItMjE0NzQ4MzY0OSIKdGVzdF9p bnRfdHVuYWJsZS50dW5hYmxlPSIyMTQ3NDgzNjQ2Igp0ZXN0X2ludF90dW5hYmxlLnR1bmFibGU9 IjIxNDc0ODM2NDgiCnRlc3RfbG9uZ190dW5hYmxlLnR1bmFibGU9IjAiCnRlc3RfbG9uZ190dW5h YmxlLnR1bmFibGU9IjQyIgp0ZXN0X2xvbmdfdHVuYWJsZS50dW5hYmxlPSJhc2RmMTIzNCIKdGVz dF9sb25nX3R1bmFibGUudHVuYWJsZT0iLTkyMjMzNzIwMzY4NTQ3NzU4MDkiCnRlc3RfbG9uZ190 dW5hYmxlLnR1bmFibGU9Ii05MjIzMzcyMDM2ODU0Nzc1ODA3Igp0ZXN0X2xvbmdfdHVuYWJsZS50 dW5hYmxlPSI5MjIzMzcyMDM2ODU0Nzc1ODA2Igp0ZXN0X2xvbmdfdHVuYWJsZS50dW5hYmxlPSI5 MjIzMzcyMDM2ODU0Nzc1ODA4Igp0ZXN0X3BvaW50ZXJfdHVuYWJsZS50dW5hYmxlPSItMSIKdGVz dF9wb2ludGVyX3R1bmFibGUudHVuYWJsZT0iMCIKdGVzdF9wb2ludGVyX3R1bmFibGUudHVuYWJs ZT0iNDIiCnRlc3RfcG9pbnRlcl90dW5hYmxlLnR1bmFibGU9IjM3MzU5Mjg1NTkiCnRlc3RfcG9p bnRlcl90dW5hYmxlLnR1bmFibGU9ImFzZGYxMjM0Igp0ZXN0X3BvaW50ZXJfdHVuYWJsZS50dW5h YmxlPSI4NTgwNDgxMDIzIgp0ZXN0X3BvaW50ZXJfdHVuYWJsZS50dW5hYmxlPSI4NTgwNDgxMDI1 Igp0ZXN0X3F1YWRfdHVuYWJsZS50dW5hYmxlPSIwIgp0ZXN0X3F1YWRfdHVuYWJsZS50dW5hYmxl PSI0MiIKdGVzdF9xdWFkX3R1bmFibGUudHVuYWJsZT0iYXNkZjEyMzQiCnRlc3RfcXVhZF90dW5h YmxlLnR1bmFibGU9Ii05MjIzMzcyMDM2ODU0Nzc1ODA5Igp0ZXN0X3F1YWRfdHVuYWJsZS50dW5h YmxlPSItOTIyMzM3MjAzNjg1NDc3NTgwNyIKdGVzdF9xdWFkX3R1bmFibGUudHVuYWJsZT0iOTIy MzM3MjAzNjg1NDc3NTgwNiIKdGVzdF9xdWFkX3R1bmFibGUudHVuYWJsZT0iOTIyMzM3MjAzNjg1 NDc3NTgwOCIKdGVzdF9zaXplX3R1bmFibGUudHVuYWJsZT0iLTEiCnRlc3Rfc2l6ZV90dW5hYmxl LnR1bmFibGU9IjAiCnRlc3Rfc2l6ZV90dW5hYmxlLnR1bmFibGU9IjQyIgp0ZXN0X3NpemVfdHVu YWJsZS50dW5hYmxlPSJhc2RmMTIzNCIKdGVzdF9zaXplX3R1bmFibGUudHVuYWJsZT0iOTIyMzM3 MjAzNjg1NDc3NTgwOCIKdGVzdF9zaXplX3R1bmFibGUudHVuYWJsZT0iMTg0NDY3NDQwNzM3MDk1 NTE2MTQiCnRlc3Rfc2l6ZV90dW5hYmxlLnR1bmFibGU9IjE4NDQ2NzQ0MDczNzA5NTUxNjE2Igp0 ZXN0X3N0cmluZ190dW5hYmxlLnR1bmFibGU9IiIKdGVzdF9zdHJpbmdfdHVuYWJsZS50dW5hYmxl PSJhc2RmMTIzNCIKdGVzdF9zdHJpbmdfdHVuYWJsZS50dW5hYmxlPSJjaGFyYWN0ZXIiCnRlc3Rf c3RyaW5nX3R1bmFibGUudHVuYWJsZT0iYXNvcnRvZmxvbmdpc2hzdHJpbmciCnRlc3RfdHVuYWJs ZV9zdWZmaXhlcy50dW5hYmxlPSItMSIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0x ZyIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xRyIKdGVzdF90dW5hYmxlX3N1ZmZp eGVzLnR1bmFibGU9Ii0xayIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xSyIKdGVz dF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xbSIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1 bmFibGU9Ii0xTSIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xdCIKdGVzdF90dW5h YmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xVCIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9 Ii0xeiIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9Ii0xWiIKdGVzdF90dW5hYmxlX3N1 ZmZpeGVzLnR1bmFibGU9IjAiCnRlc3RfdHVuYWJsZV9zdWZmaXhlcy50dW5hYmxlPSIwZyIKdGVz dF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9IjBHIgp0ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVu YWJsZT0iMGsiCnRlc3RfdHVuYWJsZV9zdWZmaXhlcy50dW5hYmxlPSIwSyIKdGVzdF90dW5hYmxl X3N1ZmZpeGVzLnR1bmFibGU9IjBtIgp0ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVuYWJsZT0iME0i CnRlc3RfdHVuYWJsZV9zdWZmaXhlcy50dW5hYmxlPSIwdCIKdGVzdF90dW5hYmxlX3N1ZmZpeGVz LnR1bmFibGU9IjBUIgp0ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVuYWJsZT0iMHoiCnRlc3RfdHVu YWJsZV9zdWZmaXhlcy50dW5hYmxlPSIwWiIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9 IjEiCnRlc3RfdHVuYWJsZV9zdWZmaXhlcy50dW5hYmxlPSIxZyIKdGVzdF90dW5hYmxlX3N1ZmZp eGVzLnR1bmFibGU9IjFHIgp0ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVuYWJsZT0iMWsiCnRlc3Rf dHVuYWJsZV9zdWZmaXhlcy50dW5hYmxlPSIxSyIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFi bGU9IjFtIgp0ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVuYWJsZT0iMU0iCnRlc3RfdHVuYWJsZV9z dWZmaXhlcy50dW5hYmxlPSIxdCIKdGVzdF90dW5hYmxlX3N1ZmZpeGVzLnR1bmFibGU9IjFUIgp0 ZXN0X3R1bmFibGVfc3VmZml4ZXMudHVuYWJsZT0iMXoiCnRlc3RfdHVuYWJsZV9zdWZmaXhlcy50 dW5hYmxlPSIxWiIKdGVzdF91aW50X3R1bmFibGUudHVuYWJsZT0iLTEiCnRlc3RfdWludF90dW5h YmxlLnR1bmFibGU9IjAiCnRlc3RfdWludF90dW5hYmxlLnR1bmFibGU9IjQyIgp0ZXN0X3VpbnRf dHVuYWJsZS50dW5hYmxlPSJhc2RmMTIzNCIKdGVzdF91aW50X3R1bmFibGUudHVuYWJsZT0iMjE0 NzQ4MzY0OCIKdGVzdF91aW50X3R1bmFibGUudHVuYWJsZT0iNDI5NDk2NzI5NCIKdGVzdF91aW50 X3R1bmFibGUudHVuYWJsZT0iNDI5NDk2NzI5NiIKdGVzdF91bG9uZ190dW5hYmxlLnR1bmFibGU9 Ii0xIgp0ZXN0X3Vsb25nX3R1bmFibGUudHVuYWJsZT0iMCIKdGVzdF91bG9uZ190dW5hYmxlLnR1 bmFibGU9IjQyIgp0ZXN0X3Vsb25nX3R1bmFibGUudHVuYWJsZT0iYXNkZjEyMzQiCnRlc3RfdWxv bmdfdHVuYWJsZS50dW5hYmxlPSI5MjIzMzcyMDM2ODU0Nzc1ODA4Igp0ZXN0X3Vsb25nX3R1bmFi bGUudHVuYWJsZT0iMTg0NDY3NDQwNzM3MDk1NTE2MTQiCnRlc3RfdWxvbmdfdHVuYWJsZS50dW5h YmxlPSIxODQ0Njc0NDA3MzcwOTU1MTYxNiIKdGVzdF91cXVhZF90dW5hYmxlLnR1bmFibGU9Ii0x Igp0ZXN0X3VxdWFkX3R1bmFibGUudHVuYWJsZT0iMCIKdGVzdF91cXVhZF90dW5hYmxlLnR1bmFi bGU9IjQyIgp0ZXN0X3VxdWFkX3R1bmFibGUudHVuYWJsZT0iYXNkZjEyMzQiCnRlc3RfdXF1YWRf dHVuYWJsZS50dW5hYmxlPSI5MjIzMzcyMDM2ODU0Nzc1ODA4Igp0ZXN0X3VxdWFkX3R1bmFibGUu dHVuYWJsZT0iMTg0NDY3NDQwNzM3MDk1NTE2MTQiCnRlc3RfdXF1YWRfdHVuYWJsZS50dW5hYmxl PSIxODQ0Njc0NDA3MzcwOTU1MTYxNiIKIyBEbWVzZyBvdXRwdXQKdGVzdF9pbnRfdHVuYWJsZTog MAp0ZXN0X2ludF90dW5hYmxlOiAtMQp0ZXN0X2ludF90dW5hYmxlOiAwCnRlc3RfaW50X3R1bmFi bGU6IDQyCnRlc3RfaW50X3R1bmFibGU6IDAKdGVzdF9pbnRfdHVuYWJsZTogLTIxNDc0ODM2NDcK dGVzdF9pbnRfdHVuYWJsZTogMAp0ZXN0X2ludF90dW5hYmxlOiAyMTQ3NDgzNjQ2CnRlc3RfaW50 X3R1bmFibGU6IDAKdGVzdF9sb25nX3R1bmFibGU6IDAKdGVzdF9sb25nX3R1bmFibGU6IDAKdGVz dF9sb25nX3R1bmFibGU6IDQyCnRlc3RfbG9uZ190dW5hYmxlOiAwCnRlc3RfbG9uZ190dW5hYmxl OiAtOTIyMzM3MjAzNjg1NDc3NTgwOAp0ZXN0X2xvbmdfdHVuYWJsZTogLTkyMjMzNzIwMzY4NTQ3 NzU4MDcKdGVzdF9sb25nX3R1bmFibGU6IDkyMjMzNzIwMzY4NTQ3NzU4MDYKdGVzdF9sb25nX3R1 bmFibGU6IDkyMjMzNzIwMzY4NTQ3NzU4MDcKdGVzdF9wb2ludGVyX3R1bmFibGU6IGZmZmZmZmZm ZmZmZmZmZmYKdGVzdF9wb2ludGVyX3R1bmFibGU6IDAKdGVzdF9wb2ludGVyX3R1bmFibGU6IDJh CnRlc3RfcG9pbnRlcl90dW5hYmxlOiBkZWFkYmVlZgp0ZXN0X3BvaW50ZXJfdHVuYWJsZTogMAp0 ZXN0X3BvaW50ZXJfdHVuYWJsZTogMWZmNmZiZmZmCnRlc3RfcG9pbnRlcl90dW5hYmxlOiAxZmY2 ZmMwMDEKdGVzdF9xdWFkX3R1bmFibGU6IDAKdGVzdF9xdWFkX3R1bmFibGU6IDAKdGVzdF9xdWFk X3R1bmFibGU6IDQyCnRlc3RfcXVhZF90dW5hYmxlOiAwCnRlc3RfcXVhZF90dW5hYmxlOiAtOTIy MzM3MjAzNjg1NDc3NTgwOAp0ZXN0X3F1YWRfdHVuYWJsZTogLTkyMjMzNzIwMzY4NTQ3NzU4MDcK dGVzdF9xdWFkX3R1bmFibGU6IDkyMjMzNzIwMzY4NTQ3NzU4MDYKdGVzdF9xdWFkX3R1bmFibGU6 IDkyMjMzNzIwMzY4NTQ3NzU4MDcKdGVzdF9zaXplX3R1bmFibGU6IDAKdGVzdF9zaXplX3R1bmFi bGU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CnRlc3Rfc2l6ZV90dW5hYmxlOiAwCnRlc3Rfc2l6ZV90 dW5hYmxlOiA0Mgp0ZXN0X3NpemVfdHVuYWJsZTogMAp0ZXN0X3NpemVfdHVuYWJsZTogOTIyMzM3 MjAzNjg1NDc3NTgwOAp0ZXN0X3NpemVfdHVuYWJsZTogMTg0NDY3NDQwNzM3MDk1NTE2MTQKdGVz dF9zaXplX3R1bmFibGU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CnRlc3Rfc3RyaW5nX3R1bmFibGU6 IAp0ZXN0X3N0cmluZ190dW5hYmxlOiAKdGVzdF9zdHJpbmdfdHVuYWJsZTogYXNkZjEyMzQKdGVz dF9zdHJpbmdfdHVuYWJsZTogY2hhcmFjdGVyCnRlc3Rfc3RyaW5nX3R1bmFibGU6IGFzb3J0b2Zs bwp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDAKdGVzdF90dW5hYmxlX3N1ZmZpeGVzOiAtMQp0ZXN0 X3R1bmFibGVfc3VmZml4ZXM6IC0xMDczNzQxODI0CnRlc3RfdHVuYWJsZV9zdWZmaXhlczogLTEw NzM3NDE4MjQKdGVzdF90dW5hYmxlX3N1ZmZpeGVzOiAtMTAyNAp0ZXN0X3R1bmFibGVfc3VmZml4 ZXM6IC0xMDI0CnRlc3RfdHVuYWJsZV9zdWZmaXhlczogLTEwNDg1NzYKdGVzdF90dW5hYmxlX3N1 ZmZpeGVzOiAtMTA0ODU3Ngp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IC0xMDk5NTExNjI3Nzc2CnRl c3RfdHVuYWJsZV9zdWZmaXhlczogLTEwOTk1MTE2Mjc3NzYKdGVzdF90dW5hYmxlX3N1ZmZpeGVz OiAwCnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMAp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDAKdGVz dF90dW5hYmxlX3N1ZmZpeGVzOiAwCnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMAp0ZXN0X3R1bmFi bGVfc3VmZml4ZXM6IDAKdGVzdF90dW5hYmxlX3N1ZmZpeGVzOiAwCnRlc3RfdHVuYWJsZV9zdWZm aXhlczogMAp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDAKdGVzdF90dW5hYmxlX3N1ZmZpeGVzOiAw CnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMAp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDAKdGVzdF90 dW5hYmxlX3N1ZmZpeGVzOiAwCnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMQp0ZXN0X3R1bmFibGVf c3VmZml4ZXM6IDEwNzM3NDE4MjQKdGVzdF90dW5hYmxlX3N1ZmZpeGVzOiAxMDczNzQxODI0CnRl c3RfdHVuYWJsZV9zdWZmaXhlczogMTAyNAp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDEwMjQKdGVz dF90dW5hYmxlX3N1ZmZpeGVzOiAxMDQ4NTc2CnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMTA0ODU3 Ngp0ZXN0X3R1bmFibGVfc3VmZml4ZXM6IDEwOTk1MTE2Mjc3NzYKdGVzdF90dW5hYmxlX3N1ZmZp eGVzOiAxMDk5NTExNjI3Nzc2CnRlc3RfdHVuYWJsZV9zdWZmaXhlczogMAp0ZXN0X3R1bmFibGVf c3VmZml4ZXM6IDAKdGVzdF91aW50X3R1bmFibGU6IDAKdGVzdF91aW50X3R1bmFibGU6IDAKdGVz dF91aW50X3R1bmFibGU6IDAKdGVzdF91aW50X3R1bmFibGU6IDQyCnRlc3RfdWludF90dW5hYmxl OiAwCnRlc3RfdWludF90dW5hYmxlOiAyMTQ3NDgzNjQ4CnRlc3RfdWludF90dW5hYmxlOiA0Mjk0 OTY3Mjk0CnRlc3RfdWludF90dW5hYmxlOiAwCnRlc3RfdWxvbmdfdHVuYWJsZTogMAp0ZXN0X3Vs b25nX3R1bmFibGU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CnRlc3RfdWxvbmdfdHVuYWJsZTogMAp0 ZXN0X3Vsb25nX3R1bmFibGU6IDQyCnRlc3RfdWxvbmdfdHVuYWJsZTogMAp0ZXN0X3Vsb25nX3R1 bmFibGU6IDkyMjMzNzIwMzY4NTQ3NzU4MDgKdGVzdF91bG9uZ190dW5hYmxlOiAxODQ0Njc0NDA3 MzcwOTU1MTYxNAp0ZXN0X3Vsb25nX3R1bmFibGU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CnRlc3Rf dXF1YWRfdHVuYWJsZTogMAp0ZXN0X3VxdWFkX3R1bmFibGU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1 CnRlc3RfdXF1YWRfdHVuYWJsZTogMAp0ZXN0X3VxdWFkX3R1bmFibGU6IDQyCnRlc3RfdXF1YWRf dHVuYWJsZTogMAp0ZXN0X3VxdWFkX3R1bmFibGU6IDkyMjMzNzIwMzY4NTQ3NzU4MDgKdGVzdF91 cXVhZF90dW5hYmxlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNAp0ZXN0X3VxdWFkX3R1bmFibGU6IDE4 NDQ2NzQ0MDczNzA5NTUxNjE1Cg== --00221532c7aca694360492c40306--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTim1E94qWq1TF1111-sYo2dj35Y-XnPq3DT4kpoL>