Subject: [SIP] [sip mib] work on SIP UA config timers and retries - action item #10

From: Jean-Francois Mule <[email-masked]>
Date: Tue, 23 Jan 2001 23:14:07 -0800

In the process of working on timers for stateful sip proxy, find below a
review and update proposal for the sipUACfg config timers and retry.  If we
agree on these changes, those timers will be replicated for the server mib
(case of stateful sip proxy servers).

please, check this and confirm it's ok so that we can make progress on the
proxy side.
Thank you,
Jean-Francois Mule.
-------------------------------------------------------
There are 2 related tables in SIP-UA mib:  sipUACfgTimer and sipUACfgRetry.
Based on the description of the variables, I'd like to propose the following
additions and changes:
	a/ Addition of timers + retry for OPTIONS method in SIP UA only (this is
not in draft-01, but I see no particular reason for not adding it)
	b/ Addition of timers + retry for INFO method (since stats do include INFO
and INFO is an rfc...)
	c/ Naming changes
We should try to keep the same NAMING CONVENTIONS among the objects in those
2 tables. The timer naming rule is:
	timer and retry counters should be named after the associated SIP method
used (invite, ack, bye, ... - see below for example of this).  This renaming
goes along well with the current description fields.
	d/ Addition of default values according to RFC2543 using DEFVAL clause:  I
took 500 ms by default and a total of 6 retries for the SIP INVITE as
specified in section 10.5 of 2543.
	e/ rework the description to mention T1/T2 timers...
As for T1/T2 timers, I think the timers we can specify in the Timer table
are the initial T1 timers (kind of a T1 timer for each method).  There is
*no* specified T2 timer in the current table so I added one object under the
name of sipUACfgTimerT2;  feel free to comment on the name/description.
Took 4s as default T2 timer as per 2543.

Applying all these comments, this is what changes:
0/
	add sipUACfgTimerOptions
	add sipUACfgRetryOptions
	add sipUACfgTimerInfo
	add sipUACfgRetryInfo
	add DEFVAL values
	add sipUACfgTimerT2
	misc: fixed end of description field in sipUACfgTimerRegister
      misc: sipUACfgTimerReRegister had been already renamed into
sipUACfgTimerRegister by Kevin Lingle
1/
	rename sipUACfgTimerTrying into sipUACfgTimerInvite
	keep sipUACfgRetryInvite
2/
	rename sipUACfgTimerDisconnect into sipUACfgTimerBye
	keep  sipUACfgRetryBye
3/
      for sipUACfgRetryResponse, it seems that the description should
specify "final" response (UA does not expect an ACK after a non-final
response).  Added the term "final"  accordingly.
-------------------------------------------------------
-- Here is the ASN.1 with all the changes:
-- syntax to be checked via mib compiler
-------------------------------------------------------
   --
   -- SIP Timer Configuration
   --
   sipUACfgTimerTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF SipUACfgTimerEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
            "This table contains timer configuration objects applicable
             to each SIP user agent in this system.  The instances of
             SIP entities are uniquely identified by applIndex."
       ::= { sipUACfgTimer 1 }

   sipUACfgTimerEntry OBJECT-TYPE
       SYNTAX     SipUACfgTimerEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
            "A row of timer configuration."
       INDEX { applIndex }
       ::= { sipUACfgTimerTable 1 }

   SipUACfgTimerEntry ::=
       SEQUENCE {
                sipUACfgTimerInvite        Integer32,
                sipUACfgTimerProv          Integer32,
                sipUACfgTimerAck           Integer32,
                sipUACfgTimerBye           Integer32,
                sipUACfgTimerRegister      Integer32,
                sipUACfgTimerOptions       Integer32,
                sipUACfgTimerInfo          Integer32,
                sipUACfgTimerT2            Integer32
       }

   sipUACfgTimerInvite OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait to
             receive a provisional response to an INVITE before
             resending the INVITE."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 1 }

   sipUACfgTimerProv OBJECT-TYPE
       SYNTAX      Integer32 (60000..300000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait to
             receive a final response to an INVITE before canceling the
             transaction."
       DEFVAL { 500 }
   ::= { sipUACfgTimerEntry 2 }

   sipUACfgTimerAck OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait to
             receive an ACK confirmation indicating that a session is
             established."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 3 }

   sipUACfgTimerBye OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait to
             receive a BYE confirmation indicating that a session is
             terminated."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 4 }

   sipUACfgTimerRegister OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait
             for a response to its REGISTER request before resending."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 5 }

   sipUACfgTimerOptions  OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait
             for a response to its OPTIONS request before resending."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 6 }

   sipUACfgTimerInfo  OBJECT-TYPE
       SYNTAX      Integer32 (100..1000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the time a user agent will wait
             for a response to its INFO request before resending."
       DEFVAL { 500 }
       ::= { sipUACfgTimerEntry 7 }

   sipUACfgTimerT2  OBJECT-TYPE
       SYNTAX      Integer32 (200..10000)
       UNITS       "milliseconds"
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object specifies the T2 timer for a user agent."
       REFERENCE "Section 10.4 and 10.5 RFC2543"
       DEFVAL { 4000 }
       ::= { sipUACfgTimerEntry 8 }

   --
   -- SIP Retry Configuration
   --
   sipUACfgRetryTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF SipUACfgRetryEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
            "This table contains retry configuration objects applicable
             to each SIP user agent in this system.  The instances of
             SIP entities are uniquely identified by applIndex."
       ::= { sipUACfgRetry 1 }

   sipUACfgRetryEntry OBJECT-TYPE
       SYNTAX     SipUACfgRetryEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
            "A row of retry configuration."
       INDEX { applIndex }
       ::= { sipUACfgRetryTable 1 }

   SipUACfgRetryEntry ::=
       SEQUENCE {
                sipUACfgRetryInvite       Integer32,
                sipUACfgRetryBye          Integer32,
                sipUACfgRetryCancel       Integer32,
                sipUACfgRetryRegister     Integer32,
                sipUACfgRetryResponse     Integer32,
                sipUACfgRetryOptions      Integer32,
                sipUACfgRetryInfo         Integer32
       }

   sipUACfgRetryInvite OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending an INVITE request."
       REFERENCE "Section 10.5 RFC 2543"
	   DEFVAL { 6 }
       ::= { sipUACfgRetryEntry 1 }

   sipUACfgRetryBye OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending a BYE request."
       REFERENCE "Section 10.4 RFC 2543"
       ::= { sipUACfgRetryEntry 2 }

   sipUACfgRetryCancel OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending a CANCEL request."
       REFERENCE "Section 10.4 RFC 2543"
       ::= { sipUACfgRetryEntry 3 }

   sipUACfgRetryRegister OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending a REGISTER request."
       REFERENCE "Section 10.4 RFC 2543"
       ::= { sipUACfgRetryEntry 4 }

   sipUACfgRetryResponse OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending a final response and expecting an ACK."
       ::= { sipUACfgRetryEntry 5 }

   sipUACfgRetryOptions OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending an OPTIONS request."
       REFERENCE "Section 10.4 RFC2543"
       ::= { sipUACfgRetryEntry 6 }

   sipUACfgRetryInfo OBJECT-TYPE
       SYNTAX      Integer32 (1..10)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
            "This object will specify the number of times a user agent
             will retry sending an INFO request."
       REFERENCE "Section 2.4 RFC 2976"
       ::= { sipUACfgRetryEntry 7 }

---

From: Kevin Lingle <[email-masked]>
Date: Tue, 30 Jan 2001 18:37:45 -0500

jean-francios,

do we even need per method timer and retry config or should we just have
objects for T1 and T2 that are applicable to the entire system?  same
could be the case for the retry config - one retry count for the system.

the previous set of timer/retry config objects where an artifact of
a particular sip gateway implementation and did not correctly reflect
the concept of t1/t2 at all.  we expected them to be called into question.
(actually, they really haven't so far, but i expect they ultimate correctness 
 is not likely the reason for that ;)

i wanted to see the timers reworked in terms of t1/t2 to match up with 
the rfc, but i'm not sure we need to keep the per method approach.
we've had several new methods and your proposal is to add representation
for them.  i'm afraid that, while i wouldn't expect lots of new methods,
down the road there may still be more methods defined.  are we going to 
continue to update the MIB??  i hope not.  if we do things on a per method 
basis, we should try and minimize updates down the road.  in rev01 of 
sip-common-mib, we tried to address this issue where we had per method
statistics in sipMethodStatsTable.  we like the idea of the the method
being explicit in the object descriptor - at least for the known set of
core methods.  to handle future methods, we devised an additional table
(sipStatsExtMethodTable).  this table allowed for future expansion with
stats objects with the same semantics as those found in sipStatsMethodTable.
i can't say i relish the approach, but it's better than having to actually
publish an updated version of the mib down the road.

if we are to continue with per method timer/retry config, i think a similar 
mechanism for "extensions" (ie, new methods) would need to be added
as well.  since i don't really like the "extensions table" model all
that much, i'm asking whether we should even continue to consider per method
timer/retry configuration objects.

kevin

Jean-Francois Mule wrote:

>   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>                            Name: SIP-UA-MIB timers.my
>    SIP-UA-MIB timers.my    Type: unspecified type (application/octet-stream)
>                        Encoding: 7bit

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Kevin R. Lingle       919.392.2029
 checkout: http://wwwin-eng.cisco.com/Eng/IOS/SNMP_WWW/mib-police.html
 Sometimes I think I understand everything, then I regain consciousness.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

_______________________________________________
This list is for continuing development of the SIP protocol.
The sip-implementer's list is the place to discuss implementation,
and to receive advice on understanding existing sip.
To subscribe to it, send mail to [email-masked] with
"subscribe sip-implementors" in the body.