Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route and tranaction state model.

"Christer Holmberg" <christer.holmberg@ericsson.com> Wed, 19 August 2009 12:22 UTC

Return-Path: <christer.holmberg@ericsson.com>
X-Original-To: sipcore@core3.amsl.com
Delivered-To: sipcore@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id A6FED3A6E62 for <sipcore@core3.amsl.com>; Wed, 19 Aug 2009 05:22:20 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -5.615
X-Spam-Level:
X-Spam-Status: No, score=-5.615 tagged_above=-999 required=5 tests=[AWL=0.634, BAYES_00=-2.599, HELO_EQ_SE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zwI++JyLtBDI for <sipcore@core3.amsl.com>; Wed, 19 Aug 2009 05:22:19 -0700 (PDT)
Received: from mailgw3.ericsson.se (mailgw3.ericsson.se [193.180.251.60]) by core3.amsl.com (Postfix) with ESMTP id 2C4A53A6D66 for <sipcore@ietf.org>; Wed, 19 Aug 2009 05:22:17 -0700 (PDT)
X-AuditID: c1b4fb3c-b7c01ae000002aae-61-4a8bee7c4519
Received: from esealmw128.eemea.ericsson.se (Unknown_Domain [153.88.253.125]) by mailgw3.ericsson.se (Symantec Mail Security) with SMTP id 0D.05.10926.C7EEB8A4; Wed, 19 Aug 2009 14:22:20 +0200 (CEST)
Received: from esealmw113.eemea.ericsson.se ([153.88.200.4]) by esealmw128.eemea.ericsson.se with Microsoft SMTPSVC(6.0.3790.3959); Wed, 19 Aug 2009 14:20:10 +0200
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: quoted-printable
Date: Wed, 19 Aug 2009 14:20:09 +0200
Message-ID: <CA9998CD4A020D418654FCDEF4E707DF0E45AB17@esealmw113.eemea.ericsson.se>
In-Reply-To: <4A8B37B6.20509@cisco.com>
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Thread-Topic: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route and tranaction state model.
Thread-Index: AcogWshrlmfGeq51Q42jGBDXZN3PGgAaiFqw
References: <C0E80510684FE94DBDE3A4AF6B968D2D06311DBD@esealmw118.eemea.ericsson.se> <4A85C195.4060903@nostrum.com><C0E80510684FE94DBDE3A4AF6B968D2D06312609@esealmw118.eemea.ericsson.se><4A89DF9E.9010807@cisco.com><C0E80510684FE94DBDE3A4AF6B968D2D0634799C@esealmw118.eemea.ericsson.se><4A8B1D01.7090403@cisco.com><C0E80510684FE94DBDE3A4AF6B968D2D0634799F@esealmw118.eemea.ericsson.se> <4A8B37B6.20509@cisco.com>
From: Christer Holmberg <christer.holmberg@ericsson.com>
To: Paul Kyzivat <pkyzivat@cisco.com>, Ian Elz <ian.elz@ericsson.com>
X-OriginalArrivalTime: 19 Aug 2009 12:20:10.0475 (UTC) FILETIME=[655E73B0:01CA20C7]
X-Brightmail-Tracker: AAAAAA==
Cc: sipcore@ietf.org
Subject: Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route and tranaction state model.
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/sipcore>
List-Post: <mailto:sipcore@ietf.org>
List-Help: <mailto:sipcore-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 19 Aug 2009 12:22:20 -0000

Hi, 
 
>>REFER is an odd case. It is always described as creating an implicit 
>>subscription. I think this means that it is not a SUBSCRIBE. My view 
>>is that REFER creates an explicit subscription to a specific event 
>>package, "dialog progress". If REFER is not creating a subscription 
>>the 'norefersub' should be included.
>> 
>>3625bis does create an interesting case for REFER, REFER dialogs are 
>>created when the 202 Accepted is received. Is  this going to be the 
>>case or should the NOTIFY be used?
> 
>It makes at least as much sense in the REFER case as the 
>SUBSCRIBE case.
>I worked on an impl of SUBSCRIBE and REFER, and definitely 
>shared code between them.
> 
>It will be bad enough to migrate an implementation from 3265 
>to 3265bis. 
>It will be much worse if REFER creates a dialog but SUBSCRIBE 
>does not.
> 
>>Do we also need to rewrite RFC3515?
> 
>I don't suppose it could be part of 3265bis? :-(

Would we then also deprecate dialog re-use for REFER?

Regards,

Christer




> > -----Original Message-----
> > From: Paul Kyzivat [mailto:pkyzivat@cisco.com]
> > Sent: 18 August 2009 22:29
> > To: Ian Elz
> > Cc: Adam Roach; sipcore@ietf.org
> > Subject: Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - 
> > Record-Route and tranaction state model.
> > 
> > 
> > 
> > Ian Elz wrote:
> >> Paul,
> >>
> >> Agreed.
> >>
> >> Where the establishment of a SUBSCRIBE dialog is different 
> from other 
> >> dialog types I think that the draft should be explicit. E.g. It 
> >> should
> > 
> >> indicate that all the UAS actions for the 200 Ok should be 
> taken but 
> >> the UAC will ignore this for establishing the dialog. That 
> the NOTIFY 
> >> headers will be used for establishing the dialog, record-route, 
> >> contact etc.
> > 
> > That is the one thing I don't like about this approach - 
> that it makes 
> > entirely new rules for dialog establishment for SUBSCRIBE. But 
> > interestingly, this makes it more consistent with REFER. And it was 
> > already a special case because of the NOTIFY forking.
> > 
> > 	Thanks,
> > 	Paul
> > 
> >> Ian
> >>
> >> -----Original Message-----
> >> From: Paul Kyzivat [mailto:pkyzivat@cisco.com]
> >> Sent: 17 August 2009 23:54
> >> To: Ian Elz
> >> Cc: Adam Roach; sipcore@ietf.org
> >> Subject: Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - 
> >> Record-Route and tranaction state model.
> >>
> >> Ian,
> >>
> >> 3265 wasn't very explicit about some of this, and the end 
> result was 
> >> that for several things there were two different mechanisms for 
> >> obtaining information, and no clear rules about which took 
> precedence.
> >> This typically isn't a problem *as long as both mechanisms 
> yield the 
> >> same result*. But whenever you "replicate" something there 
> is always 
> >> the possibility that the results aren't really replicas, and then 
> >> questions about which is the *true* one.
> >>
> >> For instance,
> >>
> >> 1) suppose the first NOTIFY arrives before the 200 
> (SUBSCRIBE) does.
> >>     and suppose the two contain different Contact URIs. After both
> >>     have been received, which value is the remote target for the
> > dialog?
> >> 2) Similar to (1), but for Record-Route.
> >>
> >> By eliminating one source of information for the dialog (the 200), 
> >> there are a number of questions than then need not be 
> either asked or 
> >> answered.
> >>
> >> 	Thanks,
> >> 	Paul
> >>
> >> Ian Elz wrote:
> >>> Adam.
> >>>
> >>> I understand that most of what I commented on was included in
> > RFC3265.
> >>> The problem with RFC3265 was that a lot of the detail was 
> missing. 
> >>> The
> >>> concept of the new draft is to correct those omissions and to 
> >>> simplify and clarify what was included in RFC3265.
> >>>
> >>> RFC3265 does not include anything about how the 
> subscriber (I will 
> >>> use subscriber and notifier as UAC/UAS reverse for the 
> SUBSCRIBE and
> >>> NOTIFY.) obtains his route set. If the new RFC does not 
> explicitly 
> >>> state that the subscriber route set is obtained from the 
> >>> Record-Route
> > 
> >>> header contained in the NOTIFY then RFC3261 applies the 
> subscriber 
> >>> route set is obtained form the 2xx to the SUBSCRIBE. This 
> will make 
> >>> for an interesting dialog if the 2xx to the SUSCRIBE is never
> >> received.
> >>> Specific responses in-line [ige].
> >>>
> >>> Ian
> >>>
> >>> -----Original Message-----
> >>> From: Adam Roach [mailto:adam@nostrum.com]
> >>> Sent: 14 August 2009 20:57
> >>> To: Ian Elz
> >>> Cc: sipcore@ietf.org; Christer Holmberg
> >>> Subject: Re: draft-roach-sipcore-rfc3265bis-00
> >>>
> >>> Ian Elz wrote:
> >>>
> >>>> Now a more complex issue:
> >>>>
> >>>> You are proposing that the first NOTIFY establishes the 
> SUBSCRIBE 
> >>>> dialog. What impact does this have on the establishment of the 
> >>>> route
> > 
> >>>> set at the UAC as defined in RFC3261?
> >>>>
> >>>  From a practical perspective, it's the same as what we 
> have in 3265
> >>> -- except that it's a little easier to implement at the 
> subscriber.
> >>>
> >>> Keep in mind that 3265 describes dialogs being 
> established by NOTIFY 
> >>> requests -- this is not new in the 3265bis draft. The only 
> >>> difference
> > 
> >>> in dialog establishment is that we're removing the ability for a 
> >>> SUBSCRIBE 200 response to create a dialog.
> >>>
> >>> This is an extremely important point, so I'll repeat it: 
> this change 
> >>> is not *ADDING* new behavior. It is *REMOVING* 
> unnecessary behavior 
> >>> that has been shown to cause problems.
> >>>
> >>> [ige] I understand that you are not adding any 
> functionality which 
> >>> is
> > 
> >>> different from RFC3265. The problem is that what was in RFC3265 
> >>> changed the actions specified in RFC3261 but did not 
> state how they 
> >>> hade been changed. This is part of what caused the problems in 
> >>> RFC3265. The updated RFC MUST include this detail or we 
> will end up 
> >>> with inconsistent implementations.
> >>>
> >>>> Normal RFC3261 has the UAS route set taken from 
> Record-Route in the 
> >>>> initial request. The UAS then copies the Record-Route 
> back into the 
> >>>> 2xx response (or reliable provisional response) which is 
> then used 
> >>>> by the UAC to set its the route set. This ensures that the route 
> >>>> sets in the UAC and UAS align.
> >>>>
> >>>> Section 4.3 of the draft proposes that the initial SUBSCRIBE has 
> >>>> the
> > 
> >>>> normal Record-Route which establishes the UAS route set but that 
> >>>> the
> > 
> >>>> NOTIFY also has Record-Route performed by proxies. This 
> leaves the 
> >>>> possibility that the route set at the UAC and UAS may not align.
> >>>>
> >>> Actually, it doesn't. As long as proxies follow the 
> guidance in 4.3, 
> >>> then the route set in the SUBSCRIBE will be precisely 
> identical to 
> >>> the route set established by the NOTIFY. Because of the 
> Record-Route 
> >>> in the SUBSCRIBE, the NOTIFY will contain Route header 
> fields that 
> >>> guarantee that the NOTIFY traverses the proxies that Record-Route 
> >>> the
> >> SUBSCRIBE.
> >>> These proxies, by the normative requirement in 4.3, will then 
> >>> Record-Route the NOTIFY, which guarantees that the route 
> set in the 
> >>> subscriber matches that of the notifier.
> >>>
> >>> If you think I'm confused about this in some way, please 
> describe a 
> >>> concrete set of compliant proxy behaviors that can result in an 
> >>> asymmetrical route set, preferably using a sequence diagram.
> >>>
> >>> [ige] The problem we have is backward compatibility. If the 
> >>> subscriber and notifier support the proposed new 
> functionality but 
> >>> an intermediate proxies does not then this may result in an 
> >>> asymmetric route sets. The SUBSCRIBE will be seen by the 
> proxy as a 
> >>> dialog initiating request and will add itself to the 
> Record-Route in 
> >>> the SUBSCRIBE. When the NOTIFY is handled however there is no 
> >>> requirement
> > 
> >>> in RFC3261 to include itself in the Record-route as RFC3261 is 
> >>> explicit in the fact that any Record-route added to the 
> NOTIFY will 
> >>> NOT update the route set. Thus asymmetric route sets will result.
> >>> This
> >>> will result in SUSCRIBE messages being passed via 
> different proxies 
> >>> than the NOTIFY with the result that some proxies will see a 
> >>> subscription termination resulting from a SUBSCRIBE but 
> not from a 
> >>> NOTIFY or as the result of a rejection of a NOTIFY.
> >>>
> >>>
> >>>> I also have a concern as to what will happen with the 
> route set if 
> >>>> the SUBSCRIBE Record-Route is returned in the 2xx and the NOTIFY 
> >>>> also includes a Record-Route. Which one is used to establish the 
> >>>> route set at the subscriber. Do we take the one which arrives 
> >>>> first? Do we take the one which arrives second? There is 
> no issue 
> >>>> if they are the same
> > 
> >>>> but what if they differ?
> >>>>
> >>> As I mention above: In a compliant system, they can't differ. 
> >>> However,
> >>> as we all know, systems don't always do the right thing. SBCs can 
> >>> tinker with Route/Record-Route in ways that create 
> asymmetric route 
> >>> sets, even for normal INVITE/200/ACK transactions.
> >>>
> >>> With 3265, if there *were* a difference, your question is highly
> >>> relevant: the answer to "but what if they differ?" was a 
> resounding 
> >>> "I have no clue!"
> >>>
> >>> Which is one of the key reasons why we made this change.
> >>>
> >>> In 3265bis, the answer is straightforward: since the NOTIFY 
> >>> establishes the dialog, the NOTIFY is where the route set 
> comes from.
> >>>
> >>> Really, the 200 response is kind of a throw-away message anyway. 
> >>> Even
> > 
> >>> with legacy 3265 behavior, if I have a SUBSCRIBE fork, and it 
> >>> establishes two dialogs, I'm going to have to take the 
> route set for 
> >>> at least one of the dialogs from the NOTIFY -- so I may as well 
> >>> always take it from the NOTIFY.
> >>>
> >>> [ige] Agree that with forking only a single 200 OK will mean that 
> >>> NOTIFY will be used to establish other SUBSCRIBE dialogs. This 
> >>> appears to be an issue with forking and RFC3261 where 
> only a single 
> >>> 2xx response is returned. If I subscribe and multiple 
> nodes accept 
> >>> the
> >> subscription e.g.
> >>> I subscribe to the dialog-event mechanism for all dialogs for a 
> >>> user,
> > 
> >>> why shouldn't multiple 2xx responses to the SUBSCRIBE be 
> returned to 
> >>> establish multiple dialogs and to set up the route sets 
> for each of 
> >>> those dialogs.
> >>>
> >>>> Should there be a requirement that proxies MUST include 
> themselves 
> >>>> in the NOTIFY Record-Route if they included themselves in the 
> >>>> SUBSCRIBE
> > 
> >>>> Record-Route and to exclude themselves in the NOTUFY if 
> they were 
> >>>> not in the SUBSCRIBE Record-Route.
> >>>>
> >>> That's certainly the intention of 4.3. It's a bit tortured to 
> >>> imagine
> > 
> >>> that a proxy might be on the path of the NOTIFY without having 
> >>> Record-Routing the SUBSCRIBE. Nonetheless, I'm okay with 
> prohibiting 
> >>> Record-Routing a NOTIFY unless you've also Record-Routed the 
> >>> associated SUBSCRIBE; I'll add:
> >>>
> >>>   Proxies that did not add a Record-Route header field to the
> >>>   initial SUBSCRIBE request MUST NOT add a Record-Route header
> >>>   field to any of the associated NOTIFY requests.
> >>>
> >>> [ige] But there is nothing to indicate that proxies which did add 
> >>> themselves to the Record-Route in the SUBSCRIBE MUST add 
> themselves 
> >>> to the Record-Route in subsequent NOTIFY requests for the same 
> >>> dialog
> >> (?).
> >>> This does not remove the compatibility issue where the proxy does 
> >>> not
> > 
> >>> support the updates included in the draft.
> >>>
> >>>
> >>>> If we are to use the Record-Route in the NOTIFY then the draft 
> >>>> should explicitly state what should happen at the 
> subscriber end. 
> >>>> Should the 2xx response to the NOTIFY include a copy of the 
> >>>> Record-Route taken from the NOTIFY?
> >>>>
> >>> It doesn't matter.
> >>>
> >>> [ige] If you don't include normative text which specifies 
> that the 
> >>> route set is established from the Record-Route in the NOTIFY then
> >>> RFC3261 applies and the route set at the subscriber is 
> obtained from 
> >>> the 2xx to the SUBSCRIBE.
> >>>
> >>>> What does the notifier end do if it then receives this 
> Record-Route?
> >>>>
> >>> It ignores it. There is no way to change a dialog route 
> set (other 
> >>> than the remote target) mid-dialog.
> >>>
> >>> [ige] Is what you are saying is that for one dialog you 
> may take the 
> >>> route set from the 2xx to the SUBSCRIBE, depending upon 
> whether the 
> >>> NOTIFY or 2xx arrives first, and for other dialogs it is 
> taken from 
> >>> the NOTIFY. In the forked case you may then end up with one 
> >>> symmetric
> > 
> >>> route set and multiple asymmetric route sets; i.e. all 
> the proxies 
> >>> may see subsequent SUBSCRIBE requests for one dialog but 
> not for the 
> >>> others. I am not sure what this will do to the proxies 
> handling of 
> >>> the dialogs if anything but we need to consider it to be sure.
> >>>
> >>>
> >>>> There is one more related issue:
> >>>>
> >>>> What happens if the 2xx to the SUBSCRIBE transaction is never 
> >>>> received by the subscriber. Based upon the non-INVITE client 
> >>>> transaction in
> >>>> RFC3261 the termination of the transaction upon expiry 
> of Timer F 
> >>>> will inform the TU. In normal cases the TU would terminate the 
> >>>> transaction and drop the dialog In this case if the 
> NOTIFY has been 
> >>>> received before the 2xx then this should be treated as 
> the 2xx from 
> >>>> the transaction perspective. This almost goes as far as 
> defining a 
> >>>> separate client SUBSCRIBE transaction.
> >>>>
> >>> Again, this behavior was present in 3265, and quite 
> deliberately so.
> >>> Keep in mind: for any network that has even a single proxy that 
> >>> doesn't Record-Route, the vast majority of SUBSCRIBE 
> dialogs will be 
> >>> established by the NOTIFY, not the 200 (since the NOTIFY 
> will follow 
> >>> a shorter path than the 200). And, with forking, all but 
> one of the 
> >>> 200
> > 
> >>> responses will be discarded by the proxy anyway. You 
> *really* don't 
> >>> want the system behavior to vary based on which 200 response wins 
> >>> the
> >> race to the proxy.
> >>> [ige] No we don't want the behaviour based upon whether 
> the 2xx of 
> >>> the NOTIFY wins the race. This is why the draft needs to 
> be explicit 
> >>> upon
> > 
> >>> how the route set is determined at the subscriber end.
> >>>
> >>> /a
> >>>
> >>>
> >>> _______________________________________________
> >>> sipcore mailing list
> >>> sipcore@ietf.org
> >>> https://www.ietf.org/mailman/listinfo/sipcore
> >>>
> > 
> _______________________________________________
> sipcore mailing list
> sipcore@ietf.org
> https://www.ietf.org/mailman/listinfo/sipcore
>