Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jul 2013 11:28:31 +0800
From:      Chenchong Qin <qinchenchong@gmail.com>
To:        freebsd-wireless@freebsd.org
Subject:   Chenchong's work on net80211_ratectl
Message-ID:  <CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--089e013d06fa51aaaf04e2114524
Content-Type: text/plain; charset=ISO-8859-1

Hi, there!

Attachment is the diff that contains my work on net80211_ratectl done these
days.

I've done the fllowing things:

1) Add some rc options.
Chip can tell some options (i.e. whether mrr and mrrprot is support,
whether have more than 1 txchain, etc.) to rc code when rc is initializing.
Then rc algo can calc rates with these options in mind and do the right
things.

2) Support multi-rate attempt.
Instead of returning just one rate, let rc return up to 4 rates. I add
ieee80211_rc_series. Basically, it's just a copy of ath_rc_series but drop
max4msframelen filed (it seems that max4msframelen is not used to setup the
rc stuffs). And at each rate lookup, rc can get shortPreamble and frameLen
info from the caller.

3) Support some 11n features.
Add some 11n features (i.e. cw40, short-gi, stbc) to net80211 rc stuffs. To
be frankly, I just let the rc algo decide whether to use the 11n features.
But I do provide rc algo with some abilities to know whether particular
feature can be used. Then, rc algo can do rate decisions based on these cap
info.

Besides, I use iv_htcaps other than ic_htcaps to decide the 11n features
capabilities. I think iv_htcaps is more relevant to per vap rc operations
and I found iv_htcaps is just a copy of ic_htcaps at first (but some caps
may to be disabled by some vaps). But I'm not sure whether this can operate
properly by now.

Once the rc algo decides to use one 11n feature for some rate attemps, it
must set corresponding rate flags. This is not the same as before. For now,
the rc algo get more power and then it comes more responsibility.

4) Complete the rc flags
After the rate lookup, we have an opportunity to make sure that rc code
doesn't mess it up. I blank tries 1, 2, 3 if rts/cts is enabled and it's a
pre-802.11n scenario.

It's also the chance to fill some rate options/flags that the rc algo may
not be interested by now.

Looking forward to your feedbacks!

Thanks!

Chenchong

--089e013d06fa51aaaf04e2114524
Content-Type: application/octet-stream; 
	name="20130722-net80211-ratectl.diff"
Content-Disposition: attachment; filename="20130722-net80211-ratectl.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hjf44d6x0

SW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAy
MTEvaWVlZTgwMjExX3JhdGVjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgbmV0ODAyMTEvaWVl
ZTgwMjExX3JhdGVjdGwuYwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qLQogICog
Q29weXJpZ2h0IChjKSAyMDEwIFJ1aSBQYXVsbyA8cnBhdWxvQEZyZWVCU0Qub3JnPgorICogQ29w
eXJpZ2h0IChjKSAyMDEzIENoZW5jaG9uZyBRaW4gPGNjcWluQEZyZWVCU0Qub3JnPgogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY2LDEwICs2NywxMSBAQAog
fQogCiB2b2lkCi1pZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZh
cCkKK2llZWU4MDIxMV9yYXRlY3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50
MzJfdCBvcHRpb25zKQogewogCWlmICh2YXAtPml2X3JhdGUgPT0gcmF0ZWN0bHNbSUVFRTgwMjEx
X1JBVEVDVExfTk9ORV0pCiAJCWllZWU4MDIxMV9yYXRlY3RsX3NldCh2YXAsIElFRUU4MDIxMV9S
QVRFQ1RMX0FNUlIpOworCXZhcC0+aXZfcmF0ZS5vcHRpb25zID0gb3B0aW9uczsKIAl2YXAtPml2
X3JhdGUtPmlyX2luaXQodmFwKTsKIH0KIApJbmRleDogbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj
dGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCShyZXZpc2lv
biAyNTQ4MjYpCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUnVpIFBhdWxvIDxy
cGF1bG9ARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8
Y2NxaW5ARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtMzcsOCArMzgsNDEgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfVFhfU1VD
Q0VTUwkxCiAjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUJMAogCisjZGVmaW5l
CUlFRUU4MDIxMV9SQVRFQ1RMX1RSVUUJCTEKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkFM
U0UJCTAKKworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9OVU0JCTQKKworI2RlZmluZQlJRUVF
ODAyMTFfUkFURUNUTF9EU19GTEFHCQkweDAxCS8qIGR1YWwtc3RyZWFtIHJhdGUgKi8KKyNkZWZp
bmUJSUVFRTgwMjExX1JBVEVDVExfQ1c0MF9GTEFHCQkweDAyCS8qIHVzZSBIVDQwICovCisjZGVm
aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX1NHSV9GTEFHCQkweDA0CS8qIHVzZSBzaG9ydC1HSSAqLwor
I2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9IVF9GTEFHCQkweDA4CS8qIHVzZSBIVCAqLworI2Rl
ZmluZQlJRUVFODAyMTFfUkFURUNUTF9SVFNDVFNfRkxBRwkweDEwCS8qIGVuYWJsZSBSVFMvQ1RT
IHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfU1RCQ19GTEFHCQkweDIw
CS8qIGVuYWJsZSBTVEJDICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX1RTX0ZMQUcJCTB4
NDAJLyogdHJpcGxlLXN0cmVhbSByYXRlICovCisKKy8qIEhhcmR3YXJlIG9wdGlvbnMgY2hpcCBv
ZmZlcmVkIHRvIHJhdGUgY29udHJvbCBjb2RlICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RM
X09QVF9NUlIJCQkweDAxCS8qIHN1cHBvcnQgTVJSICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRF
Q1RMX09QVF9NUlJQUk9UCQkweDAyCS8qIHN1cHBvcnQgTVJSICsgcHJvdGVjdCAqLworI2RlZmlu
ZQlJRUVFODAyMTFfUkFURUNUTF9PUFRfTVVMVFhDSEFJTgkweDA0CS8qIGhhcyBtb3JlIHRoYW4g
MSB0eGNoYWluICovCisKKyNkZWZpbmUgSVNfVkFQX0hUKHZhcCkJKCh2YXApLT5pdl9odGNhcHMg
JiBJRUVFODAyMTFfSFRDX0hUKQorCisjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgKChfcmF0
ZSkgJiAweDgwKQorI2RlZmluZSBIVF9SQ18yX01DUyhfcmMpICAgICgoX3JjKSAmIDB4N2YpCisj
ZGVmaW5lIEhUX1JDXzJfU1RSRUFNUyhfcmMpICAgICgoKChfcmMpICYgMHg3OCkgPj4gMykgKyAx
KQorCitzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyB7CisJdWludDhfdCByaXg7CQkvKiByYXRl
dGFibGUgaW5kZXgsIG5vdCByYXRlIGNvZGUgKi8KKwl1aW50OF90IHJhdGVjb2RlOwkvKiBoYXJk
d2FyZSByYXRlIGNvZGUgKi8KKwl1aW50OF90IHRyaWVzOworCXVpbnQ4X3QgdHhfcG93ZXJfY2Fw
OworCXVpbnQxNl90IGZsYWdzOworfTsKKwogc3RydWN0IGllZWU4MDIxMV9yYXRlY3RsIHsKIAlj
b25zdCBjaGFyICppcl9uYW1lOworCXVpbnQzMl90IG9wdGlvbnM7CQkvKiBJRUVFODAyMTFfUkFU
RUNUTF9PUFRzICovCiAJaW50CSgqaXJfYXR0YWNoKShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFw
ICopOwogCXZvaWQJKCppcl9kZXRhY2gpKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CiAJ
dm9pZAkoKmlyX2luaXQpKHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CkBAIC00Niw2ICs4MCw3IEBA
CiAJdm9pZAkoKmlyX25vZGVfaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCXZvaWQJ
KCppcl9ub2RlX2RlaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCWludAkoKmlyX3Jh
dGUpKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICosIHVpbnQzMl90KTsKKwl2b2lkCSgq
aXJfcmF0ZXMpKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX3Nl
cmllcyAqLCBpbnQsIHNpemVfdCk7CiAJdm9pZAkoKmlyX3R4X2NvbXBsZXRlKShjb25zdCBzdHJ1
Y3QgaWVlZTgwMjExdmFwICosCiAJICAgIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2Rl
ICosIGludCwKIAkgICAgCQkJICB2b2lkICosIHZvaWQgKik7CkBAIC01Nyw3ICs5Miw3IEBACiAK
IHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50LCBjb25zdCBzdHJ1Y3QgaWVlZTgw
MjExX3JhdGVjdGwgKik7CiB2b2lkCWllZWU4MDIxMV9yYXRlY3RsX3VucmVnaXN0ZXIoaW50KTsK
LXZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwordm9p
ZAlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKiwgdWludDMyX3Qp
Owogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF9zZXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQp
OwogCiBNQUxMT0NfREVDTEFSRShNXzgwMjExX1JBVEVDVEwpOwpAQCAtNjksMTEgKzEwNCwxMSBA
QAogfQogCiBzdGF0aWMgdm9pZCBfX2lubGluZQotaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pbml0
KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCitpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2luaXQo
c3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgdWludDMyX3Qgb3B0aW9ucykKIHsKIAljb25zdCBz
dHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCi0JdmFwLT5pdl9yYXRlLT5p
cl9ub2RlX2luaXQobmkpOworCXZhcC0+aXZfcmF0ZS0+aXJfbm9kZV9pbml0KG5pLCBvcHRpb25z
KTsKIH0KIAogc3RhdGljIHZvaWQgX19pbmxpbmUKQEAgLTkzLDYgKzEyOCwxNyBAQAogfQogCiBz
dGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMoc3RydWN0IGllZWU4
MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjLAorCQlpbnQgc2hv
cnRQcmVhbWJsZSwgc2l6ZV90IGZyYW1lTGVuKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCA9IG5pLT5uaV92YXA7CisKKwl2YXAtPml2X3JhdGUtPmlyX3JhdGVzKG5pLCByYywg
c2hvcnRQcmVhbWJsZSwgZnJhbWVMZW4pOworCQorCWllZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRl
X3JjZmxhZ3MobmksIHJjLCBzaG9ydFByZWFtYmxlKTsKK30KKworc3RhdGljIHZvaWQgX19pbmxp
bmUKIGllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCwKICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgc3RhdHVz
LCB2b2lkICphcmcxLCB2b2lkICphcmcyKQogewpAQCAtMTE1LDMgKzE2MSwxMDYgQEAKIAkJcmV0
dXJuOwogCXZhcC0+aXZfcmF0ZS0+aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0
YXRpYyBpbnQgX19pbmxpbmUKK2llZWU4MDIxMV9yYXRlY3RsX2hhc2NhcF9jdzQwKGNvbnN0IHN0
cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpu
aSkKK3sKKwlyZXR1cm4gSVNfVkFQX0hUKHZhcCkgJiYgKG5pLT5uaV9jaHcgPT0gNDApOworfQor
CitzdGF0aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc2hvcnRnaShj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmkpCit7CisJaWYgKCEgSVNfVkFQX0hUKHZhcCkpCisJCXJldHVybiBJRUVFODAyMTFf
UkFURUNUTF9GQUxTRTsKKworCWlmIChuaS0+bmlfY2h3ID09IDQwICYmCisJCQl2YXAtPml2X2h0
Y2FwcyAmIElFRUU4MDIxMV9IVENBUF9TSE9SVEdJNDAgJiYKKwkJCW5pLT5uaV9odGNhcCAmIElF
RUU4MDIxMV9IVENBUF9TSE9SVEdJNDApCisJCXJldHVybiBJRUVFODAyMTFfUkFURUNUTF9UUlVF
OworCisJaWYgKG5pLT5uaV9jaHcgPT0gMjAgJiYKKwkJCXZhcC0+aXZfaHRjYXBzICYgSUVFRTgw
MjExX0hUQ0FQX1NIT1JUR0kyMCAmJgorCQkJbmktPm5pX2h0Y2FwICYgSUVFRTgwMjExX0hUQ0FQ
X1NIT1JUR0kyMCkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7Cit9CisKKworc3Rh
dGljIGludCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMoY29uc3Qgc3Ry
dWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
KQoreworICAgcmV0dXJuIElTX1ZBUF9IVCh2YXApICYmICh2YXAtPml2X2h0Y2FwcyAmIElFRUU4
MDIxMV9IVENBUF9UWFNUQkMpICYmCisJCQkgICAgKG5pLT5uaV9odGNhcCAmIElFRUU4MDIxMV9I
VENBUF9SWFNUQkNfMVNUUkVBTSkgJiYKKwkJCSAgICAodmFwLT5pdl9yYXRlLT5vcHRpb25zICYg
SUVFRTgwMjExX1JBVEVDVExfT1BUX01VTFRYQ0hBSU4pOworfQorCitzdGF0aWMgdm9pZAoraWVl
ZTgwMjExX3JhdGVjdGxfY29tcGxldGVfcmNmbGFncyhzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p
LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX3NlcmllcyAqcmMsIGludCBzaG9ydFByZWFtYmxlKQor
eworCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCWNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfcmF0ZV90YWJsZSAqIHJ0ID0gaWMtPmljX3J0OworCXVpbnQ4X3QgcmF0ZTAsIHJh
dGU7CisJaW50IGk7CisKKwlyYXRlMCA9IHJ0LT5pbmZvW3JjWzBdLnJpeF0ucmF0ZUNvZGU7CisJ
CisJLyogTWFrZSBzdXJlIHRoYXQgcmF0ZSBjb250cm9sIGNvZGUgZG9lc24ndCBtZXNzIGl0IHVw
LgorCSAqIElmIGVuYWJsZSBydHMvY3RzIGFuZCBpcyBwcmUtODAyLjExbiwgYmxhbmsgdHJpZXMg
MSwgMiwgMyAKKwkgKi8KKworCWlmICghIElTX0hUX1JBVEUocmF0ZTApKQorCXsKKwkJaWYgKHJj
WzBdLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfUlRTQ1RTX0ZMQUcpCisJCQlyY1sxXS50cmll
cyA9IHJjWzJdLnRyaWVzID0gcmNbM10udHJpZXMgPSAwOworCQlyY1sxXS5mbGFncyAmPSB+SUVF
RTgwMjExX1JBVEVDVExfUlRTQ1RTX0ZMQUc7IAorCQlyY1syXS5mbGFncyAmPSB+SUVFRTgwMjEx
X1JBVEVDVExfUlRTQ1RTX0ZMQUc7IAorCQlyY1szXS5mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVD
VExfUlRTQ1RTX0ZMQUc7IAorCX0KKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNU
TF9OVU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsK
KworCQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5yYXRlQ29kZTsKKworCQkvKgorCQkgKiBP
bmx5IGVuYWJsZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5IHJhdGVzCisJCSAqLworCQlpZiAo
KCEgSVNfSFRfUkFURShyYXRlKSkgJiYgc2hvcnRQcmVhbWJsZSkKKwkJCXJhdGUgfD0gcnQtPmlu
Zm9bcmNbaV0ucml4XS5zaG9ydFByZWFtYmxlOworCisJCS8qCisJCSAqIFNhdmUgdGhpcywgdXNl
ZCBieSB0aGUgVFggYW5kIGNvbXBsZXRpb24gY29kZQorCQkgKi8KKwkJcmNbaV0ucmF0ZWNvZGUg
PSByYXRlOworCisJCS8qIE9ubHkgZW5hYmxlIHNob3J0Z2ksIDIwNDAsIGR1YWwtc3RyZWFtIGlm
IEhUIGlzIHNldCAqLworCQlpZiAoSVNfSFRfUkFURShyYXRlKSkgeworCQkJcmNbaV0uZmxhZ3Mg
fD0gSUVFRTgwMjExX1JBVEVDVExfSFRfRkxBRzsKKworCQkJLyoKKwkJCSAqIFhYWCBUT0RPOiBM
RFBDCisJCQkgKi8KKworCQkJLyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFtIHJhdGU/CisJ
CQkgKi8KKwkJCWlmIChIVF9SQ18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQlyY1tpXS5mbGFn
cyB8PSBJRUVFODAyMTFfUkFURUNUTF9EU19GTEFHOworCQkJZWxzZSBpZiAoSFRfUkNfMl9TVFJF
QU1TKHJhdGUpID09IDMpCisJCQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfVFNf
RkxBRzsKKwkJfQorCisJCS8qCisJCSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBUWCBwb3dlciBj
YXAgZm9yIHRoZSBjdXJyZW50CisJCSAqIG5vZGUuIAorCQkgKiBSYXRlIGNvbnRyb2wgYWxnbyBj
YW4ndCBjb250cm9sIFRYIHBvd2VyIGJ5IG5vdy4KKwkJICovCisJCXJjW2ldLnR4X3Bvd2VyX2Nh
cCA9IGllZWU4MDIxMV9nZXRfbm9kZV90eHBvd2VyKG5pKTsKKwl9Cit9Cg==
--089e013d06fa51aaaf04e2114524--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw>