Re: [tsvwg] [on-list again] [offlist] L4S DSCP (was: L4S drafts: Next Steps)

Sebastian Moeller <moeller0@gmx.de> Wed, 31 March 2021 07:58 UTC

Return-Path: <moeller0@gmx.de>
X-Original-To: tsvwg@ietfa.amsl.com
Delivered-To: tsvwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6CA083A1EF7; Wed, 31 Mar 2021 00:58:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.648
X-Spam-Level:
X-Spam-Status: No, score=-1.648 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=gmx.net
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j8neY9DvfInn; Wed, 31 Mar 2021 00:58:15 -0700 (PDT)
Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D0EDC3A1EF4; Wed, 31 Mar 2021 00:58:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1617177449; bh=+TTFCLYUW7wfv3h5pdkHR5UTWc7Qu6yNVt4qE9DsxA4=; h=X-UI-Sender-Class:From:Subject:Date:References:To:In-Reply-To; b=URKZ3brC9Sb3APvKAqWv8pGtY3yPftKLPJQqo6Rh3pxY30ZowWYzKumKkZPeqeXo4 XSCxnuDgM59KEsvNMY+FFs8GxQDEB9pvRfoCCNF7QNfscLm+fM6lzGcQ4U1twX376G 95Ggok1AutqDK5ZQGtuI8+g2Qzi/2xYJjsDJ+oKk=
X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c
Received: from [192.168.250.106] ([134.76.241.253]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MNKhs-1lH8WA3cSI-00Ooni; Wed, 31 Mar 2021 09:57:28 +0200
From: Sebastian Moeller <moeller0@gmx.de>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.17\))
Date: Wed, 31 Mar 2021 09:57:26 +0200
References: <MN2PR19MB404527384A1B1DD9CFC2A3D983659@MN2PR19MB4045.namprd19.prod.outlook.com> <6f0ac4bf-bd1a-65cd-1d40-a97d4aa71aab@bobbriscoe.net> <7B4426F9-E1C5-4F88-A264-0D54C809D523@gmail.com> <AM8PR07MB74761AFC8F5BE0F9573DFF32B9629@AM8PR07MB7476.eurprd07.prod.outlook.com> <6481E606-2458-49D7-B580-8DF7B93494FD@gmx.de> <AM8PR07MB747675E421F0B7A6246C67BEB9619@AM8PR07MB7476.eurprd07.prod.outlook.com> <9A9D4AC3-43F0-4778-839B-E1E247A3C5FA@gmx.de> <AM8PR07MB7476026EA3AA7AD49622B296B9619@AM8PR07MB7476.eurprd07.prod.outlook.com> <7C0C3D20-250E-471F-89EC-9FF828B0BA10@gmx.de> <AM8PR07MB747613F8333DE25A81C68692B9619@AM8PR07MB7476.eurprd07.prod.outlook.com> <F5B88AF1-B3B4-4A77-8AD8-D7B5943B40F2@gmx.de> <CACL_3VGqnkv_GXvD2O8hWKy1U4jYYegO+gpbRJY0b5Wj3xW=iA@mail.gmail.com> <80f5696a-e423-cf31-6aed-dba9c52c8000@bobbriscoe.net> <4C122B37-CC29-4B38-A175-450863F69D0E@gmx.de> <352bf0e9-aa72-127f-a3ff-8c4d3eea821d@bobbriscoe.net> <16894FC9-1AF3-4F54-8F3E-0E165E306FF7@gmx.de> <94bf5227-5d3e-344e-43ca-dd0fc017922d@bobbriscoe.net>
To: Bob Briscoe <in@bobbriscoe.net>, tsvwg IETF list <tsvwg@ietf.org>, tsvwg-chairs@ietf.org
In-Reply-To: <94bf5227-5d3e-344e-43ca-dd0fc017922d@bobbriscoe.net>
Message-Id: <E5A6F37C-0D19-4094-B350-05A484BE79BA@gmx.de>
X-Mailer: Apple Mail (2.3445.104.17)
X-Provags-ID: V03:K1:tiZIEWqooBn7aozQBBEreBn0cW8DhFnEw+Djyo0Obeez2P8cDNV hQlelvLVTNfq+QUjHNimFh56u9f1A0F9QA2pBkPLAcEUXSkdwitmpTDKM8UbGAXjEhYOnWM x9dt90P6M4ugvW1o6o1J9HzS45EumElLQQVQenSWlQUUHrVsmI1AxqfghZN2wTJvRQie6P7 Y+/GDH/53XBhEFRzxUBcg==
X-UI-Out-Filterresults: notjunk:1;V03:K0:C41myBuPd6M=:H9ZBCUzedydXVy8ToDi9La HNWO2UYvGCH2miIZpmPCPsbfny32MQUaapc79QWkobxbKJ0aMVJSJBeJnn7Y8PaYpIr1zOCYo ZvQGrkZM80sLB8QGAQKewNv7vaAydeFuqxnmLr0QnKG9gVJxb6if6VCIqvy3hOdBJmVVLScLv CXFlz8f3ko9ndZYjD80lNyFl9PRJKijMbklqEU/pQrpdmB2FHwmmvJ0wfFjs0l1on2qWYIQI0 I/DDIQSIU4h7OiJMugi9cvOqIKTYg773zQAjf7tVE5k0udMJ6or2+ELXKFrbUY/7+PQoKT7NI 0S3xCMjUkHIsGFb+aLi1wcB5fnoMKYqkK21SsM9NC8tb+ACi7MCnne8MgX12awnMkSRIfqcU6 +1OevtuJ7X4H9cehurbt9SG3sXwlqASlWgECFJfS8t1upQGzFFswMb90WO2ned49Z4fThaq3U Vd/bPFXcEEF0dd5Meu4JyhH1fs370pSStaZzuNz4JtKTmPhi8RPL3Bbewftx1W7w7OOK3F25S xdyWLtoj6azrTI9D4rUY4+a83Es+doFO6MIHxIUgHM1nOed5fUarQnYNTB30Xw6/tbJef1IHs FeDbLlwU5/hFLdAZB2GB+AkaDjdP3MjChResCTCyBT1Uf/zqqbFVWKqnE02DCroXP32BmA1Kp rlJg3jnRx2Y+kL+VAgKQsHhueHwVz1VOC3ZL3vZ2joWtdlJUcirg/sMhIZ0LNF5mRhRDyrdoT xt6sCktPOuZ9PxYoaIwZ7rrXiS6rikF9fP0+y240EMcEuxQNgM9itS2TWZ+EUY1XzRnqpIlMx uRS040iCOgBG2SMGITcExzBKyPJlKo3rstb299bBoEqcB0UQJoaTCzksmAe/j5l2OfNlzvC98 KhhAVTkeTfFICipmqo33jdV3RbNhx0msxgsprHqTM42E8lTKbN0D0qCgO/scNc75GGI5z1oVU 17GYQ1P68ExUUdzd23Ve6ZgmDQgKfYzjmriIADA6UPFkFUuTF+fKFhu7ahVuBzV24vlSjxsGF qRn4uGUXSlbHLRku/cLfdZizqdxPr6sYpN+lkN3+70vv01alxqJPjkb0u4KSS4toiffSnadV0 5thRLaRZTpD2xZSTtxWvGSuA/H7DWks8J1ivT3X+EHbvCjb8qL/wy/g3P1nawrjXuMdyAnK+j m5luq6G399gYMSFqASANBAdphVuj4aU8/bjaXrOpGX3iF0L8GX/1V0BgImJxZqkI2p91Q=
Archived-At: <https://mailarchive.ietf.org/arch/msg/tsvwg/8P7lc_WuqZv3ad1EZsq660FADiM>
Subject: Re: [tsvwg] [on-list again] [offlist] L4S DSCP (was: L4S drafts: Next Steps)
X-BeenThere: tsvwg@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Transport Area Working Group <tsvwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tsvwg/>
List-Post: <mailto:tsvwg@ietf.org>
List-Help: <mailto:tsvwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 31 Mar 2021 07:58:20 -0000

Dear Bob,


see more below, prefixed [SM]. Since your post did not contain anything of sensitive nature, I opted for moving this back on list.


> On Mar 31, 2021, at 00:24, Bob Briscoe <in@bobbriscoe.net> wrote:
> 
> Sebastian,
> 
> I understand differences of opinion are valid. But all your three points were off-topic (and incorrect, as it turns out).

[SM] I understand your mail, as a tacit acknowledgment that you accept my arguments as you did NOT respond to my arguments or cited facts in any substantial fashion.

	You are certainly free to argue that my points are incorrect, but then it is incumbent on you to actually show, preferably by citing facts, how you came to that assessment.
Otherwise it just reduces your argument to an unsubstantiated statement of opinion. Which I add, says a lot about you, but little about the question at hand.
	Now, I understand what and why you are doing this, you are trying to shift the discussion away from points where your argument don't hold water. This is a time-honored debating strategy, used when the goal is to "score points" rather than as a discussion strategy that aims at actually solving problems by findig compromises (where they are possible).
	So let me get back to the question, what in the guard DSCP proposal is unfeasible, EXCEPT for not fulfilling your desire to force-recruit all internet users at the leisure of the L4S experiments participants? So, please tell me, why you consider requiring an explicit opt-in by those that will have to deal with the consequences (both positive and negative) as being out of the question? I can not help but repeating, that if you yourself consider L4S benefits so weak, that they will not survive such a common sense requirement, it might be time to drop the IDs. 

Best Regards
	Sebastian



> 
> 
> Bob
> 
> On 30/03/2021 11:46, Sebastian Moeller wrote:
>> Bob,
>> 
>> 
>> 
>>> On Mar 30, 2021, at 10:21, Bob Briscoe <in@bobbriscoe.net> wrote:
>>> 
>>> Sebastian,
>>> 
>>> If you are not adding to a thread, please consider remaining silent.
>> 	[SM] This is a tad impolite; in a discussion every opinion voiced (with sufficient civility) has the same right to be expressed. Just as I a not the arbiter on whether your posts "add" to a thread you are not the arbiter for mine. The fact that I have to explicitly write such self-evident and obvious facts is a sad fact in itself.
>> 
>> 
>>> I've corrected all your misunderstandings inline (I ignored the one that is just a restatement of an opinion), tagged [BB].
>> 	[SM] Bob, when I come to different conclusions from evaluation the same data as you, that does not automatically mean that I am misunderstanding something. there could be different reasonable interpretations of the data, or, god forbid, you might be wrong...
>> 
>> 
>>> 
>>> On 29/03/2021 13:58, Sebastian Moeller wrote:
>>>> Hi Bob,
>>>> 
>>>> 
>>>>> On Mar 29, 2021, at 02:35, Bob Briscoe <in@bobbriscoe.net> wrote:
>>>>> 
>>>>> Mike,
>>>>> 
>>>>> Many of the arguments for why a DSCP is not useful e2e also apply when it is used as a guard DSCP in a single network. For instance, when an IP header with a DSCP is tunnelled in pipe mode, it is not propagated to the outer. So it won't be visible, won't be bleached, etc.
>>>> 	[SM] Excellent point, sothe  L4S-ops draft should probably a recommendation to also propagate DSCPs in and out while tunneling, if tunneling is something the diffserv domain wants to support for L4S, otherwise the recommendation might simply be to bleach on tunnel ingress (which is a also a naturally safe default, if the tunnel might terminate in another potentially unknown diffserve domain).
>>> [BB] L4S does not involve a DSCP, so there is no need to discuss DSCPs in l4sops.
>> 	[SM] Yet, if you read my proposal you would understand that a such modified L4S would very much contain a guard DSCP and hence L4S-OPs should be amended in that way. We can argue about the merits of my proposal and in the end reject it, but from my position and perspective adding the whole DSCP part to the OPs ID makes inherent sense. Also, an operator might want to use DSCPs for better isolation between network nodes with and without rfc3168, even if such a DSCP is not in the other L4S drafts\. And in fact most of the remedies/work-arounds in L4S-ops are not in the other drafts either.
>> 	I can't shake the feeling, your are not actually trying to engage with my arguments, but rather try to swat them down with as little effort as possible...
>> 
>> 	But I understand you as saying that you categorically reject adding any DSCP requirement to the L4S drafts whether transiently for the duration of the experiment or permanently as part of the signaling, and based on that position you see no use for adding this to the OPs draft? If that is the case you might have started out with actually clearing up that assumption first, and then as a consequence rejecting discussing DSCPs as part of the OPs draft...
>> 
>>> 
>>>>> There's far too much vagueness in this thread.
>>>> 	[SM] Not that much more than in the L4S drafts, where problems magically seem to dissolved when they are punted to the protocols that night want to use L4S signaling, really.
>>>> 
>>>>> In the email I just sent to Jonathan, I asked him to address each of the critiques of a DSCP in Appx B.4, not just dismiss them all as invalid, which is untenable.
>>>>> Certainly, some of the critiques are not relevant to the way the DSCP is used in Jonathan's scheme, but many are like the tunnel issue above.
>>>> 	[SM] Odd that tunneling always moves into the spot-light if it helps your argument, but gets more or less ignored when it causes unsolved challenges for L4S, like a tunnel with mixed traffic running over one of the relative common (common as far as AQMs go) FQ rfc3168 compliant AQM. Is it really to much to ask for consistent application of the same yard stick to all proposals?
>>> [BB] The tunnel issue with L4S in VPNs over FQ is addressed in l4sops.
>>> https://datatracker.ietf.org/doc/html/draft-white-tsvwg-l4sops-02#section-3
>>> A solution is mentioned that at least isolates L4S from Classic traffic within the same VPN. A later revision will give more details of this solution, which we have been working out off list.
>> 	[SM] The thing is, there is no generic robust and reliable solution, neither off-list, nor on-list.... as I said, tunnels are only show-stoppers when L4S has no issues with them, and where it does it becomes magically manageable (somewhen in the future*).
>> 
>>> The tunnel issue was central to the choice of the L4S identifier - you will find it mentioned all over the ecn-l4s-id draft.
>> 	[SM] IMHO at the expected main deployment points, at the DOCSIS-ISP<-> end-user edge tunneling will simply be a minor issue that could for the first iteration of L4S be ignored, and for deeper bottlenecks like transit-links L4S simply is not suited (due to the ungodly increase in RTT-bias and bias against non-L4S traffic).
>> 
>>>>> So far, we've only just started on the basics like whether the feedback approach is even practical.
>>>> 	[SM] Using DSCPs for feed-back is exactly what the "A Non-Queue-Building Per-Hop Behavior (NQB PHB) for Differentiated Services" ID is all about. I have heard very little comment from your side about its practicability issues (I probably have missed those though). Interesting to cite from that draft:
>>>> 
>>>> "7.  Relationship to L4S
>>>>    Traffic flows marked with the NQB DSCP as described in this draft are
>>>>    intended to be compatible with [I-D.ietf-tsvwg-l4s-arch, with the
>>>>    result being that NQB traffic and L4S traffic can share the low-
>>>>    latency queue in an L4S dual-queue node
>>>>    [I-D.ietf-tsvwg-aqm-dualq-coupled].  Compliance with the DualQ
>>>>    coupled AQM requirements is considered sufficient to enable fair
>>>>    allocation of bandwidth between the QB and NQB queues."
>>>> 
>>>> 
>>>> and
>>>> 
>>>> 
>>>> "4.1.  End-to-end usage and DSCP Re-marking
>>>>    In contrast to the existing standard DSCPs, many of which are
>>>>    typically only meaningful within a DiffServ Domain (e.g. an AS or an
>>>>    enterprise network), this DSCP is expected to be used end-to-end
>>>>    across the Internet.  Some network operators typically bleach (zero
>>>>    out) the DiffServ field on ingress into their network
>>>>    [Custura][Barik], and in some cases apply their own DSCP for internal
>>>>    usage.  Networks that support the NQB PHB SHOULD preserve the NQB
>>>>    DSCP when forwarding via an interconnect from or to another network.
>>>>    Bleaching the NQB DSCP is not expected to cause harm to default
>>>>    traffic, but it will severely limit the ability to provide NQB
>>>>    treatment end-to-end."
>>>> 
>>>> 
>>>> And from Greg White directly on the topic of SLAs (https://mailarchive.ietf.org/arch/msg/tsvwg/NrWh_sfCBRcASHirmScjeIAHlFA/):
>>>> 
>>>> "When we discussed this concern before, it seemed to me that an SLA might be a good approach (at least in the near term).  So, perhaps we aren’t communicating well.  It is possible that a peering network is already using the value 42 (0b101010) - or for that matter any DSCP that IANA might assign for NQB - in a manner that is inconsistent with NQB, so default bleaching is probably the best near term situation.  For an ISP that wishes to support the NQB PHB, they can validate (and set up SLAs) that identify the NQB traffic from a peer, and treat it per the PHB, whichever DSCP is chosen.  Alternatively, if the ISP does not wish to support the NQB PHB at all, then they can choose to bleach it to Default, or pass it though with Default treatment, whichever they choose."
>>>> 
>>>> This is pretty much what you seem to argue for as being impractical, no?
>>> [BB] None of these 3 quotes about NQB are anything to do with DSCP feedback, nor reading the DSCP at the receiver.
>> 	[SM] Well, these are about enabling NQB end to end, which would be e necessary condition for using DSCPs in the context I proposed, these quotes indicate that the sponsors of the NQB draft see this as feasible enough.
>> 	DSCP feedback is really a question about setting DSCPs and reading the DSCP at the reciever should be no issue, given that most protocols either live inside the kernel (where you just need to ask nicely) or in userspace, where raw_sockets seem to offer all the acces you might ever need.
>> 	Honestly, Bob, these to questions indicate that you have not even started to look into how feasible a guard DSCP would be, but just trying to muddy the waters with under-researched objections, mostly based on lack of knowledge, no?
>> 
>>> Perhaps the ambiguity of the word end-to-end is the misunderstanding here.
>>> * When the term end-to-end is used by transport layer people, it means from one end-system process to another (and even then it does not imply anything about feedback unless feedback is being talked about).
>>> * But, when the word end-to-end is used by network layer people, it means that a DSCP survives (possibly remapped) as it traverses the path across networks /at the network layer/.
>> 	[SM] I thougth that it was clear that I was talking about the NECESSARY condition of DSCPs traversing fully between the end-nodes. Reading them there and constructing a feed-back loop out of that signal, is something I propose, well within the spirit of how L4S tackles issues, to formulate as a requirement for L4S-compatible protocols.
>> 
>> 
>>> Also NQB is not L4S, which is the subject of this thread.
>> 	[SM] Reading the relevant CableLabs DOCSIS standards and the Low Latency DOCSIS White paper (where you were one of the co-authors) clearly indicates, that NQB is very much intended as the canonical DSCP in DOCSIS networks to request scheduling in the L4S-LL (or on DOCSISese immediate AQM). For all means and purposes, NQB seems to be the "missing" DSCP, even though it is not explicitly acknowledged as such in the L4S IDs yet. But again, ID text can (and in this case should) be changed, arguing that NQB is not L4S is technically true, but irrelevant. I understand you know this, and frankly am getting a bit tired of any discussion with you turning into a debate.
>> 
>> Again, here is the text from the NQB draft:
>> "9.  Relationship to L4S
>>    Traffic flows marked with the NQB DSCP as described in this draft are
>>    intended to be compatible with [I-D.ietf-tsvwg-l4s-arch], with the
>>    result being that NQB traffic and L4S traffic can share the low-
>>    latency queue in an L4S dual-queue node
>>    [I-D.ietf-tsvwg-aqm-dualq-coupled]. "
>> 
>> If you do not think that text will make NQB the missing L4S DSCP, then I would expect you object to that paragraph immediately. Just because the L4S DSCP is not explicitly introduced and mentioned in the core L4S IDs does not change the fact, that if the NQB draft succeeds with its goal, NQB will be the de facto DSCP for L4S, no?
>> I often wonder about the level of language lawyering happening in drafts and discussions, I would assume what matters more is what happens/is going to happen in reality than any amount of word smithing put into one draft, but what do I know.
>> 
>> 
>> 
>> Sebastian
>> 
>> 
>> *) Or rather not, as the failed attempts at fixing up dualQ's RTT-bias inflation and L4S' general incompatibility with rfc3168 AQMs in TCP Prague demonstrated. All things promised in draft and on list and things that petered out falling way short of the promises and what should be required.
>> 
>> 
>> 
>>> 
>>> Bob
>>> 
>>>> 
>>>> Best Regards
>>>> 	Sebastian
>>>> 
>>>>  
>>>>> Bob
>>>>> 
>>>>> On 27/03/2021 03:00, C. M. Heard wrote:
>>>>>> On Fri, Mar 26, 2021Sebastian Moeller wrote:
>>>>>> On Mar 26, 2021, at 18:34, De Schepper, Koen wrote:
>>>>>>> My first point is that requiring to set a DiffServ codepoint alone would already support that.
>>>>>>  [SM] Well, sure, but you came to the ECT(1) decision for a reason (a reason I do not agree with, but that is a different topic, I am trying to build you a bridge here how to run your experiments without taking the rest of the internet down), so I am not going to argue about that. My proposal adds an GUARD DSCP for the duration of the EXPERIMENT to allow your measurements in live production networks without negative side-effects for non-participants. This layer of safety can be removed if the experiment has run ist course and measurements in consenting networks has provided data that L4S is safe without the DSCP. At which point the DSCP could be dropped, try doing that if you only use a DSCP as L4S classifier.
>>>>>> 
>>>>>> This point sure seems to have been lost in much of the discussion. Note again: GUARD DSCP for the duration of the EXPERIMENT. NOT DSCP instead of ECT(1).
>>>>>> 
>>>>>> I've read several comments objecting that using DSCP to distinguish L4S traffic is undeployable end-to-end on the general Internet. Well, according to the intended status of the drafts, L4S is starting life as an EXPERIMENT, and as such is not expected (or at least should not be expected) to be deployed on the general Internet. If the WG's desire is to have L4S deployed on the general Internet as soon as the specs are approved, then the WG should take Steven Blake's advice and deprecrate/obsolete RFC 3168 and change the intended status of the drafts, or else use a mechanism that is backward compatible with RFC 3168, such Jake Holland's proposal to use ECT(1) -> ECT(0) as the L4S congestion signal, leaving the semantics of CE unchanged.
>>>>>> 
>>>>>> Mike Heard
>>>>> -- 
>>>>> ________________________________________________________________
>>>>> Bob Briscoe
>>>>> http://bobbriscoe.net/
>>> -- 
>>> ________________________________________________________________
>>> Bob Briscoe                               http://bobbriscoe.net/
>>> 
> 
> -- 
> ________________________________________________________________
> Bob Briscoe                               http://bobbriscoe.net/
>