linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] libertas: change quality calculation
@ 2008-03-18 14:10 Holger Schurig
  2008-03-19 14:45 ` Dan Williams
  0 siblings, 1 reply; 7+ messages in thread
From: Holger Schurig @ 2008-03-18 14:10 UTC (permalink / raw)
  To: libertas-dev; +Cc: Dan Williams, linux-wireless

I wasn't really satisfied with a graphical program that displayed
the link quality, the display was bit erratically. While changing
this, I noticed some other things which this and the next patch
addresses.

However, for this patch I'm not sure if it goes into the right
direction.


This changes the quality calculation for wireless statistics to
only consider signal & noise, but not number of tx-retries.
Also changes a the rather complicated formular for quality to be
more like http://www.ces.clemson.edu/linux/signal_quality.shtml.

Note that tx_retries are no longer used for the quality number. I
don't know of any other driver that does it, and tx_retries is
only increasing, so the quality would become smaller and 
smaller ...  which wouldn't reflect reality.

Questionable things:

I also found that the average noise floor is -86 dBm, not -96
dBm. So I changed this constant. Maybe this is wrong, what values 
do your cards report?

The wireless stats have SNR and noise floor to calcutate the
quality. However, the scanning logic (for "iwlist XXX scan") only
has a not-really-described dimensionless RSSI value. So the 
quality display for both outputs are a bit different, althought 
not too much. I don't know any good method, not even from above 
website, that would make both calculation results identical. 
However, this was also not the case with the old code.


Index: wireless-testing/drivers/net/wireless/libertas/wext.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/libertas/wext.c	
2008-03-18 13:42:42.000000000 +0100
+++ wireless-testing/drivers/net/wireless/libertas/wext.c	
2008-03-18 13:42:55.000000000 +0100
@@ -805,21 +805,8 @@ out:
 
 static struct iw_statistics *lbs_get_wireless_stats(struct 
net_device *dev)
 {
-	enum {
-		POOR = 30,
-		FAIR = 60,
-		GOOD = 80,
-		VERY_GOOD = 90,
-		EXCELLENT = 95,
-		PERFECT = 100
-	};
 	struct lbs_private *priv = dev->priv;
-	u32 rssi_qual;
-	u32 tx_qual;
-	u32 quality = 0;
 	int stats_valid = 0;
-	u8 rssi;
-	u32 tx_retries;
 	struct cmd_ds_802_11_get_log log;
 	u16 snr, nf;
 
@@ -838,24 +825,6 @@ static struct iw_statistics *lbs_get_wir
 	priv->wstats.qual.level = CAL_RSSI(snr, nf);
 	priv->wstats.qual.noise = CAL_NF(nf);
 
-	lbs_deb_wext("signal level %#x\n", priv->wstats.qual.level);
-	lbs_deb_wext("noise %#x\n", priv->wstats.qual.noise);
-
-	rssi = priv->wstats.qual.level - priv->wstats.qual.noise;
-	if (rssi < 15)
-		rssi_qual = rssi * POOR / 10;
-	else if (rssi < 20)
-		rssi_qual = (rssi - 15) * (FAIR - POOR) / 5 + POOR;
-	else if (rssi < 30)
-		rssi_qual = (rssi - 20) * (GOOD - FAIR) / 5 + FAIR;
-	else if (rssi < 40)
-		rssi_qual = (rssi - 30) * (VERY_GOOD - GOOD) /
-		    10 + GOOD;
-	else
-		rssi_qual = (rssi - 40) * (PERFECT - VERY_GOOD) /
-		    10 + VERY_GOOD;
-	quality = rssi_qual;
-
 	/* Quality by TX errors */
 	priv->wstats.discard.retries = priv->stats.tx_errors;
 
@@ -863,28 +832,19 @@ static struct iw_statistics *lbs_get_wir
 	log.hdr.size = cpu_to_le16(sizeof(log));
 	lbs_cmd_with_response(priv, CMD_802_11_GET_LOG, &log);
 
-	tx_retries = le32_to_cpu(log.retry);
-
-	if (tx_retries > 75)
-		tx_qual = (90 - tx_retries) * POOR / 15;
-	else if (tx_retries > 70)
-		tx_qual = (75 - tx_retries) * (FAIR - POOR) / 5 + POOR;
-	else if (tx_retries > 65)
-		tx_qual = (70 - tx_retries) * (GOOD - FAIR) / 5 + FAIR;
-	else if (tx_retries > 50)
-		tx_qual = (65 - tx_retries) * (VERY_GOOD - GOOD) /
-		    15 + GOOD;
-	else
-		tx_qual = (50 - tx_retries) *
-		    (PERFECT - VERY_GOOD) / 50 + VERY_GOOD;
-	quality = min(quality, tx_qual);
-
 	priv->wstats.discard.code = le32_to_cpu(log.wepundecryptable);
-	priv->wstats.discard.retries = tx_retries;
+	priv->wstats.discard.retries = le32_to_cpu(log.retry);
 	priv->wstats.discard.misc = le32_to_cpu(log.ackfailure);
 
 	/* Calculate quality */
-	priv->wstats.qual.qual = min_t(u8, quality, 100);
+	/* see http://www.ces.clemson.edu/linux/signal_quality.shtml */
+	snr = priv->wstats.qual.level  - priv->wstats.qual.noise;
+	if (snr <= 0)
+		priv->wstats.qual.qual = 0;
+	else if (snr >= 40)
+		priv->wstats.qual.qual = 100;
+	else
+		priv->wstats.qual.qual = 5*snr/2;
 	priv->wstats.qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
 	stats_valid = 1;
 
Index: wireless-testing/drivers/net/wireless/libertas/defs.h
===================================================================
--- wireless-testing.orig/drivers/net/wireless/libertas/defs.h	
2008-03-18 13:42:42.000000000 +0100
+++ wireless-testing/drivers/net/wireless/libertas/defs.h	
2008-03-18 13:42:55.000000000 +0100
@@ -208,12 +208,9 @@ static inline void lbs_deb_hex(unsigned 
 #define RxPD_MESH_FRAME RxPD_CONTROL_WDS_FRAME
 
 /** RSSI-related defines */
-/*	RSSI constants are used to implement 802.11 RSSI threshold
-*	indication. if the Rx packet signal got too weak for 5 
consecutive
-*	times, miniport driver (driver) will report this event to 
wrapper
-*/
 
-#define MRVDRV_NF_DEFAULT_SCAN_VALUE		(-96)
+/* This is the average noise level */
+#define MRVDRV_NF_DEFAULT_SCAN_VALUE		(-86)
 
 /** RTS/FRAG related defines */
 #define MRVDRV_RTS_MIN_VALUE		0

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-18 14:10 [RFC] libertas: change quality calculation Holger Schurig
@ 2008-03-19 14:45 ` Dan Williams
  2008-03-19 15:25   ` Holger Schurig
  0 siblings, 1 reply; 7+ messages in thread
From: Dan Williams @ 2008-03-19 14:45 UTC (permalink / raw)
  To: Holger Schurig; +Cc: libertas-dev, linux-wireless

On Tue, 2008-03-18 at 15:10 +0100, Holger Schurig wrote:
> I wasn't really satisfied with a graphical program that displayed
> the link quality, the display was bit erratically. While changing
> this, I noticed some other things which this and the next patch
> addresses.
> 
> However, for this patch I'm not sure if it goes into the right
> direction.
> 
> 
> This changes the quality calculation for wireless statistics to
> only consider signal & noise, but not number of tx-retries.
> Also changes a the rather complicated formular for quality to be
> more like http://www.ces.clemson.edu/linux/signal_quality.shtml.
> 
> Note that tx_retries are no longer used for the quality number. I
> don't know of any other driver that does it, and tx_retries is
> only increasing, so the quality would become smaller and 
> smaller ...  which wouldn't reflect reality.

I actually tried to emulate the ipw2200 quality calculations, and of
course may have made some mistakes.  The ipw2200 uses a combination of
things to indicate quality, txretries being one of them.  I still think
txretries is a good thing to include, because if you have to keep
retrying then something is definitely wrong.  However, it should
probably be a running average of the retries over the last 20 or 30
seconds or something, which was my mistake.

> Questionable things:
> 
> I also found that the average noise floor is -86 dBm, not -96
> dBm. So I changed this constant. Maybe this is wrong, what values 
> do your cards report?

When possible, we should use a window-ed average of the cards reported
noise from beacons or received frames instead of a constant, that's a
further improvement though.

> The wireless stats have SNR and noise floor to calcutate the
> quality. However, the scanning logic (for "iwlist XXX scan") only
> has a not-really-described dimensionless RSSI value. So the 

Well, when we had the (badly) averaged array values in there, the noise
floor was available to the scan reporting.  There are tables to map RSSI
-> dBm for each part which should be in the firmware spec or seen in the
driver code.  We should definitely be using averaged noise floor and the
RSSI converted to dBm/SNR in the scan function.

> quality display for both outputs are a bit different, althought 
> not too much. I don't know any good method, not even from above 
> website, that would make both calculation results identical. 
> However, this was also not the case with the old code.

We can't really make the identical since we can't use the received
frames quality indicators when doing scan results, but we could as I
said above use the converted RSSI and the averaged noise floor.

Dan

> 
> Index: wireless-testing/drivers/net/wireless/libertas/wext.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/wext.c	
> 2008-03-18 13:42:42.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/wext.c	
> 2008-03-18 13:42:55.000000000 +0100
> @@ -805,21 +805,8 @@ out:
>  
>  static struct iw_statistics *lbs_get_wireless_stats(struct 
> net_device *dev)
>  {
> -	enum {
> -		POOR = 30,
> -		FAIR = 60,
> -		GOOD = 80,
> -		VERY_GOOD = 90,
> -		EXCELLENT = 95,
> -		PERFECT = 100
> -	};
>  	struct lbs_private *priv = dev->priv;
> -	u32 rssi_qual;
> -	u32 tx_qual;
> -	u32 quality = 0;
>  	int stats_valid = 0;
> -	u8 rssi;
> -	u32 tx_retries;
>  	struct cmd_ds_802_11_get_log log;
>  	u16 snr, nf;
>  
> @@ -838,24 +825,6 @@ static struct iw_statistics *lbs_get_wir
>  	priv->wstats.qual.level = CAL_RSSI(snr, nf);
>  	priv->wstats.qual.noise = CAL_NF(nf);
>  
> -	lbs_deb_wext("signal level %#x\n", priv->wstats.qual.level);
> -	lbs_deb_wext("noise %#x\n", priv->wstats.qual.noise);
> -
> -	rssi = priv->wstats.qual.level - priv->wstats.qual.noise;
> -	if (rssi < 15)
> -		rssi_qual = rssi * POOR / 10;
> -	else if (rssi < 20)
> -		rssi_qual = (rssi - 15) * (FAIR - POOR) / 5 + POOR;
> -	else if (rssi < 30)
> -		rssi_qual = (rssi - 20) * (GOOD - FAIR) / 5 + FAIR;
> -	else if (rssi < 40)
> -		rssi_qual = (rssi - 30) * (VERY_GOOD - GOOD) /
> -		    10 + GOOD;
> -	else
> -		rssi_qual = (rssi - 40) * (PERFECT - VERY_GOOD) /
> -		    10 + VERY_GOOD;
> -	quality = rssi_qual;
> -
>  	/* Quality by TX errors */
>  	priv->wstats.discard.retries = priv->stats.tx_errors;
>  
> @@ -863,28 +832,19 @@ static struct iw_statistics *lbs_get_wir
>  	log.hdr.size = cpu_to_le16(sizeof(log));
>  	lbs_cmd_with_response(priv, CMD_802_11_GET_LOG, &log);
>  
> -	tx_retries = le32_to_cpu(log.retry);
> -
> -	if (tx_retries > 75)
> -		tx_qual = (90 - tx_retries) * POOR / 15;
> -	else if (tx_retries > 70)
> -		tx_qual = (75 - tx_retries) * (FAIR - POOR) / 5 + POOR;
> -	else if (tx_retries > 65)
> -		tx_qual = (70 - tx_retries) * (GOOD - FAIR) / 5 + FAIR;
> -	else if (tx_retries > 50)
> -		tx_qual = (65 - tx_retries) * (VERY_GOOD - GOOD) /
> -		    15 + GOOD;
> -	else
> -		tx_qual = (50 - tx_retries) *
> -		    (PERFECT - VERY_GOOD) / 50 + VERY_GOOD;
> -	quality = min(quality, tx_qual);
> -
>  	priv->wstats.discard.code = le32_to_cpu(log.wepundecryptable);
> -	priv->wstats.discard.retries = tx_retries;
> +	priv->wstats.discard.retries = le32_to_cpu(log.retry);
>  	priv->wstats.discard.misc = le32_to_cpu(log.ackfailure);
>  
>  	/* Calculate quality */
> -	priv->wstats.qual.qual = min_t(u8, quality, 100);
> +	/* see http://www.ces.clemson.edu/linux/signal_quality.shtml */
> +	snr = priv->wstats.qual.level  - priv->wstats.qual.noise;
> +	if (snr <= 0)
> +		priv->wstats.qual.qual = 0;
> +	else if (snr >= 40)
> +		priv->wstats.qual.qual = 100;
> +	else
> +		priv->wstats.qual.qual = 5*snr/2;
>  	priv->wstats.qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
>  	stats_valid = 1;
>  
> Index: wireless-testing/drivers/net/wireless/libertas/defs.h
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/defs.h	
> 2008-03-18 13:42:42.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/libertas/defs.h	
> 2008-03-18 13:42:55.000000000 +0100
> @@ -208,12 +208,9 @@ static inline void lbs_deb_hex(unsigned 
>  #define RxPD_MESH_FRAME RxPD_CONTROL_WDS_FRAME
>  
>  /** RSSI-related defines */
> -/*	RSSI constants are used to implement 802.11 RSSI threshold
> -*	indication. if the Rx packet signal got too weak for 5 
> consecutive
> -*	times, miniport driver (driver) will report this event to 
> wrapper
> -*/
>  
> -#define MRVDRV_NF_DEFAULT_SCAN_VALUE		(-96)
> +/* This is the average noise level */
> +#define MRVDRV_NF_DEFAULT_SCAN_VALUE		(-86)
>  
>  /** RTS/FRAG related defines */
>  #define MRVDRV_RTS_MIN_VALUE		0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-19 14:45 ` Dan Williams
@ 2008-03-19 15:25   ` Holger Schurig
  2008-03-19 15:38     ` Dan Williams
  0 siblings, 1 reply; 7+ messages in thread
From: Holger Schurig @ 2008-03-19 15:25 UTC (permalink / raw)
  To: libertas-dev; +Cc: Dan Williams, linux-wireless

> > I also found that the average noise floor is -86 dBm, not
> > -96 dBm. So I changed this constant. Maybe this is wrong,
> > what values do your cards report?
>
> When possible, we should use a window-ed average of the cards
> reported noise from beacons or received frames instead of a
> constant, that's a further improvement though.

The changed value of MRVDRV_NF_DEFAULT_SCAN_VALUE is only used to 
magically conjure the missing noise value for scan results, see 
my other mail about this.

Okay, it's also used in the case of a failed GET_RSSI command :-)

> Well, when we had the (badly) averaged array values in there,
> the noise floor was available to the scan reporting.

Something might have been available for scan reporting, but if 
this "something" made sense is a different question. See my 
other mail :-)

> There are tables to map RSSI -> dBm for each part which should
> be in the firmware spec or seen in the driver code.

I didn't see such a table so far, where is it?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-19 15:25   ` Holger Schurig
@ 2008-03-19 15:38     ` Dan Williams
  2008-03-19 15:41       ` Dan Williams
  2008-03-19 15:50       ` Holger Schurig
  0 siblings, 2 replies; 7+ messages in thread
From: Dan Williams @ 2008-03-19 15:38 UTC (permalink / raw)
  To: Holger Schurig; +Cc: libertas-dev, linux-wireless

On Wed, 2008-03-19 at 16:25 +0100, Holger Schurig wrote:
> > > I also found that the average noise floor is -86 dBm, not
> > > -96 dBm. So I changed this constant. Maybe this is wrong,
> > > what values do your cards report?
> >
> > When possible, we should use a window-ed average of the cards
> > reported noise from beacons or received frames instead of a
> > constant, that's a further improvement though.
>=20
> The changed value of MRVDRV_NF_DEFAULT_SCAN_VALUE is only used to=20
> magically conjure the missing noise value for scan results, see=20
> my other mail about this.
>=20
> Okay, it's also used in the case of a failed GET_RSSI command :-)
>=20
> > Well, when we had the (badly) averaged array values in there,
> > the noise floor was available to the scan reporting.
>=20
> Something might have been available for scan reporting, but if=20
> this "something" made sense is a different question. See my=20
> other mail :-)
>=20
> > There are tables to map RSSI -> dBm for each part which should
> > be in the firmware spec or seen in the driver code.
>=20
> I didn't see such a table so far, where is it?

See section 7.3 of the 5.1 spec:

7.3         RSSI and Noise Floor Support
The firmware supports the reporting of RSSI and Noise Floor values:
=E2=80=A2   RSSI can be derived by adding Noise Floor to SNR value
=E2=80=A2   Noise Floor is returned in each received packet through the=
 NF field
in the Rx Descriptor (dBm).
=E2=80=A2   Signal Quality is determined by RSSI and SNR.

Section 3.1 as well (Receive Packet Descriptor):

"RSSI should be calculated in the driver as a summation of the SNR and
NF"

So Marvell doesn't really provide a table, but we'll have to do some
investigation here.  The RSSI is almost always a random value defined b=
y
the manufacturer [1] or in dBm.  We're not 100% sure what Marvell is
using here, but some investigation will show whether the value is
actually in dBm or in some other units.  A quick check of the RSSI
reported by the current BSS in scan results versus the output of
GET_RSSI might show something interesting.

Dan

--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-19 15:38     ` Dan Williams
@ 2008-03-19 15:41       ` Dan Williams
  2008-03-19 15:50       ` Holger Schurig
  1 sibling, 0 replies; 7+ messages in thread
From: Dan Williams @ 2008-03-19 15:41 UTC (permalink / raw)
  To: Holger Schurig; +Cc: linux-wireless, libertas-dev

On Wed, 2008-03-19 at 11:38 -0400, Dan Williams wrote:
> On Wed, 2008-03-19 at 16:25 +0100, Holger Schurig wrote:
> > > > I also found that the average noise floor is -86 dBm, not
> > > > -96 dBm. So I changed this constant. Maybe this is wrong,
> > > > what values do your cards report?
> > >
> > > When possible, we should use a window-ed average of the cards
> > > reported noise from beacons or received frames instead of a
> > > constant, that's a further improvement though.
> >=20
> > The changed value of MRVDRV_NF_DEFAULT_SCAN_VALUE is only used to=20
> > magically conjure the missing noise value for scan results, see=20
> > my other mail about this.
> >=20
> > Okay, it's also used in the case of a failed GET_RSSI command :-)
> >=20
> > > Well, when we had the (badly) averaged array values in there,
> > > the noise floor was available to the scan reporting.
> >=20
> > Something might have been available for scan reporting, but if=20
> > this "something" made sense is a different question. See my=20
> > other mail :-)
> >=20
> > > There are tables to map RSSI -> dBm for each part which should
> > > be in the firmware spec or seen in the driver code.
> >=20
> > I didn't see such a table so far, where is it?
>=20
> See section 7.3 of the 5.1 spec:
>=20
> 7.3         RSSI and Noise Floor Support
> The firmware supports the reporting of RSSI and Noise Floor values:
> =E2=80=A2   RSSI can be derived by adding Noise Floor to SNR value
> =E2=80=A2   Noise Floor is returned in each received packet through t=
he NF field
> in the Rx Descriptor (dBm).
> =E2=80=A2   Signal Quality is determined by RSSI and SNR.
>=20
> Section 3.1 as well (Receive Packet Descriptor):
>=20
> "RSSI should be calculated in the driver as a summation of the SNR an=
d
> NF"
>=20
> So Marvell doesn't really provide a table, but we'll have to do some
> investigation here.  The RSSI is almost always a random value defined=
 by
> the manufacturer [1] or in dBm.  We're not 100% sure what Marvell is
> using here, but some investigation will show whether the value is
> actually in dBm or in some other units.  A quick check of the RSSI
> reported by the current BSS in scan results versus the output of
> GET_RSSI might show something interesting.

=46or further information, see something like:

http://www.wildpackets.com/elements/whitepapers/Converting_Signal_Stren=
gth.pdf

Dan

--
To unsubscribe from this list: send the line "unsubscribe linux-wireles=
s" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-19 15:38     ` Dan Williams
  2008-03-19 15:41       ` Dan Williams
@ 2008-03-19 15:50       ` Holger Schurig
  2008-03-19 16:13         ` Michail Bletsas
  1 sibling, 1 reply; 7+ messages in thread
From: Holger Schurig @ 2008-03-19 15:50 UTC (permalink / raw)
  To: libertas-dev; +Cc: Dan Williams, linux-wireless

> RSSI can be derived by adding Noise Floor to SNR value

I saw that, and it's actually like this coded. However, I was 
wondering if it is allowed to add "dBm" to "dB". Those are the 
documented units for "noisefloor" and "SNR", respectively.

See my question about this with the subject "Re: [RFC PATCH] 
mac80211: use hardware flags for signal/noise units".



Anyway, the reported quality from scan is similar (not identical) 
to the reported quality for iwconfig, so for my purpose it's 
good enought (BTW: it wasn't identical before my patches).

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC] libertas: change quality calculation
  2008-03-19 15:50       ` Holger Schurig
@ 2008-03-19 16:13         ` Michail Bletsas
  0 siblings, 0 replies; 7+ messages in thread
From: Michail Bletsas @ 2008-03-19 16:13 UTC (permalink / raw)
  To: Holger Schurig
  Cc: Dan Williams, libertas-dev, libertas-dev-bounces, linux-wireless

libertas-dev-bounces@lists.infradead.org wrote on 03/19/2008 11:50:53 AM:

> > RSSI can be derived by adding Noise Floor to SNR value
> 
> I saw that, and it's actually like this coded. However, I was 
> wondering if it is allowed to add "dBm" to "dB". Those are the 
> documented units for "noisefloor" and "SNR", respectively.
> 
Yes, you can add dB to dBm and you will end up with dBm

 0 dBm = 1mW

So the Noise Floor is given as an absolute value (dBm)  and adding the SNR 
to it ( just a ratio in dB) will tell you what the Signal level is (in 
dBm)

If the noise floor is reported as -86dBm, that means that the received 
noise power is about 2.5pW.
An SNR of 36 means that the received signal power is  -86dbm + 36dB = 
-50dbm ( i.e. 2^12 times higher - 10nW)

Wikipedia has a nice article explaining that: 
http://en.wikipedia.org/wiki/DBm

M.



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-03-19 20:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-18 14:10 [RFC] libertas: change quality calculation Holger Schurig
2008-03-19 14:45 ` Dan Williams
2008-03-19 15:25   ` Holger Schurig
2008-03-19 15:38     ` Dan Williams
2008-03-19 15:41       ` Dan Williams
2008-03-19 15:50       ` Holger Schurig
2008-03-19 16:13         ` Michail Bletsas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).