| < draft-ietf-sipcore-event-rate-control-04.txt | draft-ietf-sipcore-event-rate-control-05.txt > | |||
|---|---|---|---|---|
| Network Working Group A. Niemi | Network Working Group A. Niemi | |||
| Internet-Draft K. Kiss | Internet-Draft K. Kiss | |||
| Intended status: Standards Track Nokia | Updates: 3265 (if approved) Nokia | |||
| Expires: January 10, 2011 S. Loreto | Intended status: Standards Track S. Loreto | |||
| Ericsson | Expires: April 21, 2011 Ericsson | |||
| July 09, 2010 | October 18, 2010 | |||
| Session Initiation Protocol (SIP) Event Notification Extension for | Session Initiation Protocol (SIP) Event Notification Extension for | |||
| Notification Rate Control | Notification Rate Control | |||
| draft-ietf-sipcore-event-rate-control-04 | draft-ietf-sipcore-event-rate-control-05 | |||
| Abstract | Abstract | |||
| This document specifies mechanisms for adjusting the rate of Session | This document specifies mechanisms for adjusting the rate of Session | |||
| Initiation Protocol (SIP) event notifications. These mechanisms can | Initiation Protocol (SIP) event notifications. These mechanisms can | |||
| be applied in subscriptions to all SIP event packages. | be applied in subscriptions to all SIP event packages. | |||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 1, line 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 10, 2011. | This Internet-Draft will expire on April 21, 2011. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2010 IETF Trust and the persons identified as the | Copyright (c) 2010 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 10 ¶ | skipping to change at page 3, line 10 ¶ | |||
| outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
| not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
| it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
| than English. | than English. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Definitions and Document Conventions . . . . . . . . . . . . . 5 | 2. Definitions and Document Conventions . . . . . . . . . . . . . 5 | |||
| 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Use Case for limiting the maximum rate of notifications . 5 | 3.1. Use Case for Limiting the Maximum Rate of Notifications . 5 | |||
| 3.2. Use Case for setting a minimum rate for notifications . . 6 | 3.2. Use Case for Setting a Minimum Rate for Notifications . . 6 | |||
| 3.3. Use Case for specifying the average rate of | 3.3. Use Case for Specifying an Adaptive Minimum Rate of | |||
| notifications . . . . . . . . . . . . . . . . . . . . . . 7 | Notifications . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.4. Requirements . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.4. Requirements . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.5. The maximum rate mechanism for Resource List Server . . . 8 | 4. Basic Operations . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.6. Basic Operation . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. Operation of the maximum rate mechanism . . . . . . . . . . . 11 | 4.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 11 | 5. Operation of the Maximum Rate Mechanism . . . . . . . . . . . 9 | |||
| 4.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Selecting the maximum rate . . . . . . . . . . . . . . . . 12 | 5.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.4. Buffer Policy Description . . . . . . . . . . . . . . . . 13 | 5.3. Selecting the Maximum Rate . . . . . . . . . . . . . . . . 11 | |||
| 4.4.1. Partial State Notifications . . . . . . . . . . . . . 13 | 5.4. The Maximum Rate Mechanism for Resource List Server . . . 11 | |||
| 4.4.2. Full State Notifications . . . . . . . . . . . . . . . 14 | 5.5. Buffer Policy Description . . . . . . . . . . . . . . . . 13 | |||
| 4.5. Estimated Bandwidth Savings . . . . . . . . . . . . . . . 14 | 5.5.1. Partial State Notifications . . . . . . . . . . . . . 13 | |||
| 5. Operation of the minimum rate mechanism . . . . . . . . . . . 14 | 5.5.2. Full State Notifications . . . . . . . . . . . . . . . 13 | |||
| 5.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 15 | 5.6. Estimated Bandwidth Savings . . . . . . . . . . . . . . . 14 | |||
| 5.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 15 | 6. Operation of the Minimum Rate Mechanism . . . . . . . . . . . 14 | |||
| 6. Operation of the average rate mechanism . . . . . . . . . . . 16 | 6.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 14 | |||
| 6.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 16 | 6.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 17 | 7. Operation of the Adaptive Minimum Rate Mechanism . . . . . . . 16 | |||
| 6.3. Calculating the timeout . . . . . . . . . . . . . . . . . 18 | 7.1. Subscriber Behavior . . . . . . . . . . . . . . . . . . . 16 | |||
| 7. Usage of "min-interval", "max-interval" and | 7.2. Notifier Behavior . . . . . . . . . . . . . . . . . . . . 16 | |||
| "average-interval" in a combination . . . . . . . . . . . . . 19 | 7.3. Calculating the Timeout . . . . . . . . . . . . . . . . . 17 | |||
| 8. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 8. Usage of the Maximum Rate, Minimum Rate and Adaptive | |||
| 8.1. "min-interval", "max-interval" and "average-interval" | Minimum Rate Mechanisms in a combination . . . . . . . . . . . 18 | |||
| Header Field Parameters . . . . . . . . . . . . . . . . . 20 | 9. Protocol Element Definitions . . . . . . . . . . . . . . . . . 19 | |||
| 8.2. Augmented BNF Definitions . . . . . . . . . . . . . . . . 20 | 9.1. "min-interval", "max-interval" and "average-interval" | |||
| 8.3. Event header field usage in responses to the NOTIFY | Header Field Parameters . . . . . . . . . . . . . . . . . 19 | |||
| request . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 9.2. Grammar . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 9.3. Event Header Field Usage in Responses to the NOTIFY | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | request . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . . 23 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 24 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 22 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . . 23 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 1. Introduction | 1. Introduction | |||
| The SIP events framework [RFC3265] defines a generic framework for | The SIP events framework [RFC3265] defines a generic framework for | |||
| subscriptions to and notifications of events related to SIP systems. | subscriptions to and notifications of events related to SIP systems. | |||
| This framework defines the methods SUBSCRIBE and NOTIFY, and | This framework defines the methods SUBSCRIBE and NOTIFY, and | |||
| introduces the concept of an event package, which is a concrete | introduces the concept of an event package, which is a concrete | |||
| application of the SIP events framework to a particular class of | application of the SIP events framework to a particular class of | |||
| events. | events. | |||
| skipping to change at page 4, line 43 ¶ | skipping to change at page 4, line 43 ¶ | |||
| subscription for each resource separately. The event list | subscription for each resource separately. The event list | |||
| subscription also allows rate limiting, or throttling of | subscription also allows rate limiting, or throttling of | |||
| notifications, by means of the Resource List Server (RLS) buffering | notifications, by means of the Resource List Server (RLS) buffering | |||
| notifications of resource state changes, and sending them in batches. | notifications of resource state changes, and sending them in batches. | |||
| However, the event list mechanism provides no means for the | However, the event list mechanism provides no means for the | |||
| subscriber to set the interval for the throttling; it is strictly an | subscriber to set the interval for the throttling; it is strictly an | |||
| implementation decision whether batching of notifications is | implementation decision whether batching of notifications is | |||
| supported, and by what means. | supported, and by what means. | |||
| This document defines an extension to the SIP events framework | This document defines an extension to the SIP events framework | |||
| defining the following three "Event" header field parameters that | defining the following three Event header field parameters that allow | |||
| allow a subscriber to set a Minimum, a Maximum and an Average rate of | a subscriber to set a maximum, a minimum and an adaptive minimum rate | |||
| event notifications generated by the notifier: | of event notifications generated by the notifier: | |||
| min-interval: specifies a minimum notification time period between | min-interval: specifies a minimum notification time period (maximum | |||
| two notifications, in seconds. | rate) between two notifications, in seconds. | |||
| max-interval: specifies a maximum notification time period between | max-interval: specifies a maximum notification time period (minimum | |||
| two notifications, in seconds. | rate) between two notifications, in seconds. | |||
| average-interval: specifies an average cadence at which | average-interval: specifies an average maximum notification time | |||
| notifications are desired, in seconds. | period (adaptive minimum rate) between two notifications, in | |||
| seconds. | ||||
| The requirements and model are further discussed in Section 3. All | The requirements and model are further discussed in Section 3. All | |||
| these mechanisms are simply timer values that indicate the minimum, | these mechanisms are simply timer values that indicate the minimum, | |||
| maximum and average time period allowed between two notifications. | maximum and average maximum time period allowed between two | |||
| As a result of these mechanisms, a compliant notifier will adjust the | notifications. As a result of these mechanisms, a compliant notifier | |||
| rate at which it generates notifications. | will adjust the rate at which it generates notifications. | |||
| These mechanisms are applicable to any event subscription, both | These mechanisms are applicable to any event subscription, both | |||
| single event subscription and event list subscription. | single event subscription and event list subscription. | |||
| 2. Definitions and Document Conventions | 2. Definitions and Document Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119] and | document are to be interpreted as described in RFC 2119 [RFC2119] and | |||
| indicate requirement levels for compliant implementations. | indicate requirement levels for compliant implementations. | |||
| Indented passages such as this one are used in this document to | Indented passages such as this one are used in this document to | |||
| provide additional information and clarifying text. They do not | provide additional information and clarifying text. They do not | |||
| contain normative protocol behavior. | contain normative protocol behavior. | |||
| 3. Overview | 3. Overview | |||
| 3.1. Use Case for limiting the maximum rate of notifications | 3.1. Use Case for Limiting the Maximum Rate of Notifications | |||
| A presence client in a mobile device contains a list of 100 buddies | A presence client in a mobile device contains a list of 100 buddies | |||
| or presentities. In order to decrease the processing and network | or presentities. In order to decrease the processing and network | |||
| load of watching 100 presentities, the presence client has employed a | load of watching 100 presentities, the presence client has employed a | |||
| Resource List Server (RLS) with the list of buddies, and therefore | Resource List Server (RLS) with the list of buddies, and therefore | |||
| only needs a single subscription to the RLS in order to receive | only needs a single subscription to the RLS in order to receive | |||
| notification of the presence state of the resource list. | notification of the presence state of the resource list. | |||
| In order to control the buffer policy of the RLS, the presence client | In order to control the buffer policy of the RLS, the presence client | |||
| sets a maximum rate ("min-interval" parameter), i.e. a minimum time | sets a maximum rate ("min-interval" parameter), i.e. a minimum time | |||
| interval between two notifications. Alternatively, the presence | interval between two notifications. The RLS will buffer | |||
| client could set the maximum rate for the resource list via a list | notifications that do not comply with the maximum rate and batch all | |||
| manipulation interface, e.g., using the XML Configuration Access | of the buffered state changes together in a single notification only | |||
| Protocol (XCAP) [RFC4825]. | when allowed by the maximum rate. The maximum rate applies to the | |||
| overall resource list, which means that there is a hard cap imposed | ||||
| The RLS will buffer notifications that do not comply with the maximum | by the maximum rate to the number of notifications the presence | |||
| rate and batch all of the buffered state changes together in a single | client can expect to receive. For example, with a "min-interval" of | |||
| notification only when allowed by the maximum rate. The maximum rate | 20 seconds, the presence application can expect to receive a | |||
| applies to the overall resource list, which means that there is a | notification no more frequently than every 20 seconds. | |||
| hard cap imposed by the maximum rate to the number of notifications | ||||
| the presence client can expect to receive. | ||||
| For example, with a "min-interval" of 20 seconds, the presence | ||||
| application can expect to receive a notification at a minimum of | ||||
| every 20 seconds. | ||||
| The presence client can also modify the "min-interval" parameter | The presence client can also modify the "min-interval" parameter | |||
| during the lifetime of the subscription. For example, if the User | during the lifetime of the subscription. For example, if the User | |||
| Interface (UI) of the application shows inactivity for a period of | Interface (UI) of the application shows inactivity for a period of | |||
| time, it can simply pause the notifications by setting the "min- | time, it can simply pause the notifications by setting the "min- | |||
| interval" parameter to the subscription expiration time, while still | interval" parameter to the subscription expiration time, while still | |||
| keeping the subscription alive. When the user becomes active again, | keeping the subscription alive. When the user becomes active again, | |||
| the presence client can resume the stream of notifications by re- | the presence client can resume the stream of notifications by re- | |||
| subscribing with a "min-interval" parameter set to the earlier used | subscribing with a "min-interval" parameter set to the earlier used | |||
| value. Application of the mechanism defined by RFC 5839 [RFC5839] | value. Application of the mechanism defined by RFC 5839 [RFC5839] | |||
| can also eliminate for the presence client to receive a (full-state) | can also eliminate the transmission of a (full-state) notification | |||
| notification carrying the latest resource state after the | carrying the latest resource state to the presence client after a | |||
| subscription refresh. | subscription refresh. | |||
| 3.2. Use Case for setting a minimum rate for notifications | 3.2. Use Case for Setting a Minimum Rate for Notifications | |||
| A location application is monitoring the movement of a target. | ||||
| In order to decrease the processing and network load, the location | A location application is monitoring the movement of a target. In | |||
| order to decrease the processing and network load, the location | ||||
| application has made a subscription with a set of location filters | application has made a subscription with a set of location filters | |||
| [I-D.ietf-geopriv-loc-filters] that specify trigger criterias, for | [I-D.ietf-geopriv-loc-filters] that specify trigger criteria, e.g. to | |||
| example, to send an update only when the target has moved at least n | send an update only when the target has moved at least n meters. | |||
| meters. However, the application is also interested in receiving the | However, the application is also interested in receiving the current | |||
| current state periodically even if the state of the target has not | state periodically even if the state of the target has not changed | |||
| changed enough to satisfy any of the trigger criteria, i.e. has not | enough to satisfy any of the trigger criteria, e.g. has not moved at | |||
| moved at least n meters within the period. | least n meters within the period. | |||
| In order to control the actual state, the location application sets a | In order to control the actual state, the location application sets a | |||
| minimum rate ("max-interval" parameter), i.e. a maximum time interval | minimum rate ("max-interval" parameter), i.e. a maximum time interval | |||
| between two notifications. | between two notifications. | |||
| The location application can also modify the "max-interval" parameter | The location application can also modify the "max-interval" parameter | |||
| during the lifetime of the subscription. When the subscription to | during the lifetime of the subscription. When the subscription to | |||
| the movement of a target is made, the notifier may not have the | the movement of a target is made, the notifier may not have the | |||
| location information available. Thus, the first notification might | location information available. Thus, the first notification might | |||
| be empty, or certain values might be absent. An important use case | be empty, or certain values might be absent. An important use case | |||
| is placing constraints on when complete state should be provided | is placing constraints on when complete state should be provided | |||
| after creating the subscription. The "max-interval" parameter | after creating the subscription. The "max-interval" parameter | |||
| indicates the time to the notifier when a complete state information | indicates to the notifier the maximum amount of time that should be | |||
| should be notified. Once state is acquired and the second | allowed to elapse between NOTIFY requests containing complete state | |||
| notification is sent, the subscriber updates or changes the "max- | information. Once state is acquired and the second notification is | |||
| interval" parameter to a more sensible value. This update can be | sent, the subscriber updates or changes the "max-interval" parameter | |||
| performed in the 200 OK response to the NOTIFY request that contains | to a more sensible value. This update can be performed in the 200 OK | |||
| the complete state information. | response to the NOTIFY request that contains the complete state | |||
| information. | ||||
| 3.3. Use Case for specifying the average rate of notifications | ||||
| The previous mechanisms introduce a static and instantaneous rate | ||||
| control. However there are some applications that would work better | ||||
| with an adaptive rate control. This section illustrates the tracking | ||||
| scenario. | ||||
| A tracking application is monitoring a target. | 3.3. Use Case for Specifying an Adaptive Minimum Rate of Notifications | |||
| In order to decrease the processing and network load, the tracking | The minimum rate mechanism introduces a static and instantaneous rate | |||
| application wants to make a subscription that dynamically increases | control without the functionality to increase or decrease the | |||
| the interval between notifications if the target has sent out several | notification frequency adaptively. However, there are some | |||
| notifications recently. | applications that would work better with an adaptive minimum rate | |||
| control. This section illustrates the tracking scenario. | ||||
| In order to set an adaptive rate control, the application defines a | A tracking application is monitoring the movement of a target. In | |||
| average cadence ("average-interval" parameter) at which notifications | order to decrease the processing in the application, the tracking | |||
| are desired. The "average-interval" parameter value is used by the | application wants to make a subscription that dynamically decreases | |||
| notifier to dynamically calculate the maximum time allowed between | the minimum rate of notifications if the target has sent out several | |||
| two notifications. In order to dynamically calculate the maximum, | notifications recently. However, if there have have been only few | |||
| the Notifier takes into consideration the frequency at which | recent notifications by the target, the tracking application wants | |||
| notifications have been sent recently. | the minimum rate of notifications to increase. | |||
| This type of rate control allows the notifier to dynamically increase | The application sets an adaptive minimum rate ("average-interval" | |||
| or decrease the Notification frequency. | parameter), i.e. an average maximum time interval between two | |||
| notifications. The "average-interval" parameter value is used by the | ||||
| notifier to dynamically calculate the actual maximum time ("timeout" | ||||
| parameter) between two notifications. In order to dynamically | ||||
| calculate the maximum time, the notifier takes into consideration the | ||||
| frequency at which notifications have been sent recently. In the | ||||
| adaptive minimum rate mechanism the notifier can increase or decrease | ||||
| the notification frequency compared to minimum rate mechanism based | ||||
| on the recent number of notifications sent out in the last period. | ||||
| The tracking application can also modify the "average-interval" | The tracking application can also modify the "average-interval" | |||
| parameter during the lifetime of the subscription. | parameter during the lifetime of the subscription. | |||
| 3.4. Requirements | 3.4. Requirements | |||
| REQ1: The subscriber must be able to set the minimum time period | REQ1: The subscriber must be able to set a maximum rate ("min- | |||
| ("min-interval" parameter) between two notifications in a | interval" parameter) of notifications in a specific | |||
| specific subscription. | subscription. | |||
| REQ2: The subscriber must be able to set the maximum time period | REQ2: The subscriber must be able to set a minimum rate ("max- | |||
| ("max-interval" parameter) between two notifications in a | interval" parameter) of notifications in a specific | |||
| specific subscription. | subscription. | |||
| REQ3: The subscriber must be able to set an average cadence | REQ3: The subscriber must be able to set an adaptive minimum rate | |||
| ("average-interval" parameter) at which notifications are | ("average-interval" parameter), which adjusts the minimum | |||
| desired in a specific subscription. | rate of notifications based on a moving average. | |||
| REQ4: It must be possible to apply all together, or in any | REQ4: It must be possible to apply the maximum rate, the minimum | |||
| combination, the "min-interval", "max-interval" and "average- | rate and the adaptive minimum rate mechanisms all together, | |||
| interval" mechanisms in a specific subscription. | or in any combination, in a specific subscription. | |||
| REQ5: It must be possible to use of the different rate control | REQ5: It must be possible to use any of the different rate control | |||
| mechanisms in subscriptions to any events. | mechanisms in subscriptions to any events. | |||
| REQ6: It must be possible to use the different rate control | REQ6: It must be possible to use any of the different rate control | |||
| mechanisms together with any other event filtering | mechanisms together with any other event filtering | |||
| mechanisms. | mechanisms. | |||
| REQ7: The notifier must be allowed to use a policy in which the | REQ7: The notifier must be allowed to use a policy in which the | |||
| minimum time period between two notifications is adjusted | "min-interval", "max-interval" and "average-interval" | |||
| from the value given by the subscriber. | paremeters are adjusted from the value given by the | |||
| subscriber. | ||||
| For example, due to congestion reasons, local policy at | For example, due to congestion reasons, local policy at | |||
| the notifier could temporarily dictate a policy that in | the notifier could temporarily dictate a policy that in | |||
| effect increases the subscriber-configured minimum time | effect increases the subscriber-configured minimum time | |||
| period between two notifications. In another example, the | period between two notifications. In another example, the | |||
| notifier can decrease the proposed minimum time by the | notifier can decrease the proposed minimum time by the | |||
| subscriber to match it with the remaining expiry time left | subscriber to match it with the remaining expiry time left | |||
| for the subscription. | for the subscription. | |||
| REQ8: The different rate control mechanisms must discuss corner | REQ8: The different rate control mechanisms must address corner | |||
| cases for setting the time periods between two notifications. | cases for setting the time periods between two notifications. | |||
| At a minimum, the mechanisms must include discussion of the | At a minimum, the mechanisms must address the situation when | |||
| situation resulting from a minimum, maximum or average time | the time between two notifications would exceed the | |||
| period which exceeds the subscription duration, and should | subscription duration and should provide mechanisms for | |||
| provide mechanisms for avoiding this situation. | avoiding this situation. | |||
| REQ9: The different rate control mechanisms must be possible to be | REQ9: The different rate control mechanisms must be possible to be | |||
| installed, modified, or removed in the course of an active | invoked, modified, or removed in the course of an active | |||
| subscription. | subscription. | |||
| REQ10: The different rate control mechanisms must allow for the | REQ10: The different rate control mechanisms must allow for the | |||
| application of authentication and integrity protection | application of authentication and integrity protection | |||
| mechanisms to subscriptions invoking that mechanism. | mechanisms to subscriptions invoking that mechanism. | |||
| 3.5. The maximum rate mechanism for Resource List Server | 4. Basic Operations | |||
| When applied to a list subscription [RFC4662], the maximum rate | ||||
| mechanism has some additional considerations. Specifically, the | ||||
| maximum rate applies to the aggregate notification stream resulting | ||||
| from the list subscription, rather than explicitly controlling the | ||||
| notification of each of the implied constituent events. Moreover, | ||||
| the RLS can use the maximum rate mechanism on its own to control the | ||||
| rate of the back-end subscriptions to avoid overflowing its buffer. | ||||
| The notifier is responsible for sending out event notifications upon | ||||
| state changes of the subscribed resource. We can model the notifier | ||||
| as consisting of three components: the event state resource(s), the | ||||
| Resource List Server (RLS) (or any other notifier), a notification | ||||
| buffer, and finally the subscriber, or watcher of the event state, as | ||||
| shown in Figure 1. | ||||
| +--------+ | ||||
| | Event | | ||||
| +--------+ |Resource| +--------+ | ||||
| | Event | +--------+ | Event | | ||||
| |Resource| | |Resource| | ||||
| +---.=---+ | +---=----+ | ||||
| `-.. | _.--' | ||||
| ``-._ | _.--' | ||||
| +'--'--'-+ | ||||
| |Resource| | ||||
| | List | | ||||
| | Server | | ||||
| +---.----+ | ||||
| | | ||||
| | | ||||
| )--+---( | ||||
| | | .------------. | ||||
| |Buffer|<======'min-interval| | ||||
| | | `------------' | ||||
| )--.---( | ||||
| | | ||||
| | | ||||
| .---+---. | ||||
| | Event | | ||||
| |Watcher| | ||||
| `-------' | ||||
| Figure 1: Model for the Resource List Server (RLS) Supporting | ||||
| Throttling | ||||
| In short, the RLS reads event state changes from the event state | ||||
| resource, either by creating a back end subscription, or by other | ||||
| means; it packages them into event notifications, and submits them | ||||
| into the output buffer. The rate at which this output buffer drains | ||||
| is controlled by the subscriber via the maximum rate mechanism. When | ||||
| a set of notifications are batched together, the way in which | ||||
| overlapping resource state is handled depends on the type of the | ||||
| resource state: | ||||
| In theory, there are many buffer policies that the notifier could | ||||
| implement. However, we only concentrate on two practical buffer | ||||
| policies in this specification, leaving additional ones for | ||||
| further study and out of the scope of this work. These two buffer | ||||
| policies depend on the mode in which the notifier is operating. | ||||
| Full-state: Last (most recent) full state notification of each | ||||
| resource is sent out, and all others in the buffer are discarded. | ||||
| This policy applies to those event packages that carry full-state | ||||
| notifications. | ||||
| Partial-state: The state deltas of each buffered partial | ||||
| notification per resource are merged, and the resulting | ||||
| notification is sent out. This policy applies to those event | ||||
| packages that carry partial-state notifications. | ||||
| 3.6. Basic Operation | ||||
| A subscriber that wants to limit the rate of event notification in a | ||||
| specific event subscription does so by including a "min-interval" | ||||
| Event header parameter as part of the SUBSCRIBE request. The "min- | ||||
| interval" value indicates the minimum time allowed between | ||||
| transmission of two consecutive notifications in a subscription. | ||||
| Note that the witnessed time between two consecutive received | 4.1. Subscriber Behavior | |||
| notifications may not conform to the "min-interval" value for a | ||||
| number of reasons. For example, network jitter and | ||||
| retransmissions may result in the subscriber receiving the | ||||
| notifications with smaller intervals than the "min-interval" value | ||||
| recommends. | ||||
| A subscriber that wants to have a maximum notification time period in | In general, the way in which a subscriber generates SUBSCRIBE | |||
| a specific event subscription does so by including a "max-interval" | requests and processes NOTIFY requests is according to RFC 3265 | |||
| Event header parameter as part of the SUBSCRIBE request. The "max- | [RFC3265]. | |||
| interval" value indicates the maximum time allowed between | ||||
| transmission of two consecutive notifications in a subscription. | ||||
| A subscriber that wants to have an average cadence for the | A subscriber that wants to have a maximum, minimum or adaptive | |||
| notifications in a specific event subscription does so by including a | minimum rate of event notifications in a specific event subscription | |||
| "average-interval" Event header parameter as part of the SUBSCRIBE | does so by including a "min-interval", "max-interval" or "average- | |||
| interval" Event header field parameter(s) as part of the SUBSCRIBE | ||||
| request. | request. | |||
| A subscriber that wants to update a previously agreed event rate | A subscriber that wants to update a previously agreed event rate | |||
| control parameter does so by including the updated "min-interval", | control parameter does so by including the updated "min-interval", | |||
| "max-interval" or "average-interval" Event header parameter as part | "max-interval" or "average-interval" Event header field parameter(s) | |||
| of a subsequent SUBSCRIBE request or a 200-class response to the | as part of a subsequent SUBSCRIBE request or a 2xx response to the | |||
| NOTIFY request. | NOTIFY request. If the subscriber did not include at least one of | |||
| the "min-interval, "max-interval", or "average-interval" header field | ||||
| parameters in the most recent SUBSCRIBE request in a given dialog, it | ||||
| MUST NOT include an Event header field with any of those parameters | ||||
| in a 2xx response to a NOTIFY request in that dialog. | ||||
| 4.2. Notifier Behavior | ||||
| In general, the way in which a notifier processes SUBSCRIBE requests | ||||
| and generates NOTIFY requests is according to RFC 3265 [RFC3265]. | ||||
| A notifier that supports the different rate control mechanisms will | A notifier that supports the different rate control mechanisms will | |||
| comply with the value given in "min-interval", "max-interval" and | comply with the value given in "min-interval", "max-interval" and | |||
| "average-interval" parameters and adjust its rate of notification | "average-interval" parameters and adjust its rate of notification | |||
| accordingly. However, if the notifier needs to lower the | accordingly. However, if the notifier needs to lower the | |||
| subscription expiration value or a local policy or other | subscription expiration value or if a local policy or other | |||
| implementation-determined constraint at the notifier can not satisfy | implementation-determined constraint at the notifier can not satisfy | |||
| the rate control request, then the notifier can adjust (i.e. increase | the rate control request, then the notifier can adjust (i.e. increase | |||
| or decrease) opportunely the subscriber requested rate control. | or decrease) appropriately the subscriber requested rate control. | |||
| 4. Operation of the maximum rate mechanism | ||||
| 4.1. Subscriber Behavior | 5. Operation of the Maximum Rate Mechanism | |||
| In general, the way in which a subscriber generates SUBSCRIBE | 5.1. Subscriber Behavior | |||
| requests and processes NOTIFY requests is according to RFC 3265 | ||||
| [RFC3265]. | ||||
| A subscriber that wishes to apply a maximum rate to notifications in | A subscriber that wishes to apply a maximum rate to notifications in | |||
| a subscription MUST construct a SUBSCRIBE request that includes a | a subscription MUST construct a SUBSCRIBE request that includes a | |||
| minimum time interval between two consecutive notifications included | minimum time interval between two consecutive notifications included | |||
| in the "min-interval" Event header field parameter. The value of | in the "min-interval" Event header field parameter. The value of | |||
| this parameter is an integral number of seconds in decimal. | this parameter is an integral number of seconds in decimal. | |||
| Note that the witnessed time between two consecutive received | ||||
| notifications may not conform to the "min-interval" value for a | ||||
| number of reasons. For example, network jitter and | ||||
| retransmissions may result in the subscriber receiving the | ||||
| notifications with smaller intervals than the "min-interval" value | ||||
| recommends. | ||||
| A subscriber that wishes to update the previously agreed maximum rate | A subscriber that wishes to update the previously agreed maximum rate | |||
| of notifications MUST include the updated "min-interval" Event header | of notifications MUST include the updated "min-interval" Event header | |||
| field parameter in a subsequent SUBSCRIBE request or a 200-class | field parameter in a subsequent SUBSCRIBE request or a 2xx response | |||
| response to the NOTIFY request. If the Event header field of the | to the NOTIFY request. | |||
| SUBSCRIBE request did not include the "min-interval" parameter, the | ||||
| subscriber MUST NOT include an initial value of the "min-interval" | ||||
| Event header field parameter in a 200-class response to the NOTIFY | ||||
| request. | ||||
| A subscriber that wishes to remove the maximum rate control from | A subscriber that wishes to remove the maximum rate control from | |||
| notifications MUST indicate so by not including a "min-interval" | notifications MUST indicate so by not including a "min-interval" | |||
| Event header field parameter in a subsequent SUBSCRIBE request or a | Event header field parameter in a subsequent SUBSCRIBE request or a | |||
| 200-class response to the NOTIFY request. | 2xx response to the NOTIFY request. | |||
| There are two main consequences for the subscriber when applying the | There are two main consequences for the subscriber when applying the | |||
| maximum rate mechanism: state transitions may be lost, and event | maximum rate mechanism: state transitions may be lost, and event | |||
| notifications may be delayed. If either of these side effects | notifications may be delayed. If either of these side effects | |||
| constitute a problem to the application that is to utilize event | constitute a problem to the application that utilizes the event | |||
| notifications, developers are instructed not to use the mechanism. | notifications, developers are instructed not to use the mechanism. | |||
| 4.2. Notifier Behavior | 5.2. Notifier Behavior | |||
| In general, the way in which a notifier processes SUBSCRIBE requests | ||||
| and generates NOTIFY requests is according to RFC 3265 [RFC3265]. | ||||
| A notifier that supports the maximum rate mechanism MUST extract the | A notifier that supports the maximum rate mechanism MUST extract the | |||
| value of the "min-interval" Event header parameter from a SUBSCRIBE | value of the "min-interval" Event header parameter from a SUBSCRIBE | |||
| request or a 200-class response to the NOTIFY request and use it as | request or a 2xx response to the NOTIFY request and use it as the | |||
| the suggested time allowed between two notifications. This value can | suggested minimum time allowed between two notifications. This value | |||
| be adjusted by the notifier, as defined in Section 4.3. If the Event | can be adjusted by the notifier, as defined in Section 5.3. | |||
| header field of the SUBSCRIBE request did not include the "min- | ||||
| interval" parameter, the notifier MUST ignore an initial value of the | ||||
| "min-interval" Event header field parameter in a 200-class response | ||||
| to the NOTIFY request, if present. | ||||
| A compliant notifier MUST reflect back the possibly adjusted minimum | A compliant notifier MUST reflect back the possibly adjusted minimum | |||
| time interval in a "min-interval" Subscription-State header field | time interval in a "min-interval" Subscription-State header field | |||
| parameter of the subsequent NOTIFY requests. The indicated "min- | parameter of the subsequent NOTIFY requests. The indicated "min- | |||
| interval" value is adopted by the notifier, and the notification rate | interval" value is adopted by the notifier, and the notification rate | |||
| is adjusted accordingly. | is adjusted accordingly. | |||
| A notifier that does not understand this extension will not reflect | A notifier that does not understand this extension will not reflect | |||
| the "min-interval" Subscription-State header field parameter in the | the "min-interval" Subscription-State header field parameter in the | |||
| NOTIFY requests; the absence of this parameter indicates to the | NOTIFY requests; the absence of this parameter indicates to the | |||
| subscriber that no rate control is supported by the notifier. | subscriber that no rate control is supported by the notifier. | |||
| A compliant notifier MUST NOT generate notifications more frequently | A compliant notifier MUST NOT generate notifications more frequently | |||
| than the maximum rate allows for, except when generating the | than the maximum rate allows for, except when generating the | |||
| notification either upon receipt of a SUBSCRIBE request (the first | notification either upon receipt of a SUBSCRIBE request (the first | |||
| notification), when the subscription state is changing from "pending" | notification), when the subscription state is changing from "pending" | |||
| to "active" state or upon termination of the subscription (the last | to "active" state or upon termination of the subscription (the last | |||
| notification). Such notifications reset the timer for the next | notification). Such notifications reset the timer for the next | |||
| notification, even though they do not need to abide by it. | notification. | |||
| When a local policy dictates a maximum rate for notifications, a | When a local policy dictates a maximum rate for notifications, a | |||
| notifier will not generate notifications more frequently than the | notifier will not generate notifications more frequently than the | |||
| local policy maximum rate, even if the subscriber is not asking for | local policy maximum rate, even if the subscriber is not asking for | |||
| maximum rate control. The notifier MAY inform the subscriber about | maximum rate control. The notifier MAY inform the subscriber about | |||
| such local policy maximum rate using the "min-interval" Subscription- | such local policy maximum rate using the "min-interval" Subscription- | |||
| State header field parameter included in the subsequent NOTIFY | State header field parameter included in the subsequent NOTIFY | |||
| requests. | requests. | |||
| Retransmissions of NOTIFY requests are not affected by the maximum | Retransmissions of NOTIFY requests are not affected by the maximum | |||
| rate mechanism, i.e., the maximum rate mechanism only applies to the | rate mechanism, i.e., the maximum rate mechanism only applies to the | |||
| generation of new transactions. In other words, the maximum rate | generation of new transactions. In other words, the maximum rate | |||
| mechanism does not in any way break or modify the normal | mechanism does not in any way break or modify the normal | |||
| retransmission mechanism specified in RFC 3261 [RFC3261]. | retransmission mechanism specified in RFC 3261 [RFC3261]. | |||
| 4.3. Selecting the maximum rate | 5.3. Selecting the Maximum Rate | |||
| Special care needs to be taken when selecting the "min-interval" | Special care needs to be taken when selecting the "min-interval" | |||
| value. Using the "min-interval" syntax it is possible to insist both | value. For example, the maximum rate could potentially set a minimum | |||
| very short and very long intervals between notifications. | time value between notifications that exceeds the subscription | |||
| expiration value. Such a configuration would effectively quench the | ||||
| For example, the maximum rate could potentially set a minimum time | notifier, resulting in exactly two notifications to be generated. If | |||
| value between notifications that exceeds the subscription expiration | the subscriber requests a "min-interval" value greater than the | |||
| value. Such a configuration would effectively quench the notifier, | ||||
| resulting in exactly two notifications to be generated. If the | ||||
| subscriber requests a "min-interval" value greater than the | ||||
| subscription expiration, the notifier MUST lower the "min-interval" | subscription expiration, the notifier MUST lower the "min-interval" | |||
| value and set it to the expiration time left. According to RFC 3265 | value and set it to the expiration time left. According to RFC 3265 | |||
| [RFC3265] the notifier may also shorten the subscription expiry | [RFC3265] the notifier may also shorten the subscription expiry | |||
| anytime during an active subscription. If the subscription expiry is | anytime during an active subscription. If the subscription expiry is | |||
| shortened during an active subscription, the notifier MUST also lower | shortened during an active subscription, the notifier MUST also lower | |||
| the "min-interval" value and set it to the reduced expiration time. | the "min-interval" value and set it to the reduced expiration time. | |||
| In some cases it makes sense to pause the notification stream on an | In some cases it makes sense to pause the notification stream on an | |||
| existing subscription dialog on a temporary basis without terminating | existing subscription dialog on a temporary basis without terminating | |||
| the subscription, e.g. due to inactivity on the application UI. | the subscription, e.g. due to inactivity on the application user | |||
| Whenever a subscriber discovers the need to perform the notification | interface. Whenever a subscriber discovers the need to perform the | |||
| pause operation, it SHOULD set the "min-interval" value to the | notification pause operation, it SHOULD set the "min-interval" value | |||
| remaining subscription expiration value. This results in receiving | to the remaining subscription expiration value. This results in | |||
| no further notifications until the subscription expires or the | receiving no further notifications until the subscription expires or | |||
| subscriber sends a SUBSCRIBE request resuming notifications. | the subscriber sends a SUBSCRIBE request resuming notifications. | |||
| The notifier MAY decide to increase or decrease the proposed maximum | The notifier MAY decide to increase or decrease the proposed maximum | |||
| rate value by the subscriber based on its local policy, static | rate value by the subscriber based on its local policy, static | |||
| configuration or other implementation-determined constraints. The | configuration or other implementation-determined constraints. The | |||
| notifier MUST include the adjusted "min-interval" value in the | notifier MUST include the adjusted "min-interval" value in the | |||
| Subscription-State header field's "min-interval" parameter in each of | Subscription-State header field's "min-interval" parameter in each of | |||
| the NOTIFY requests. In addition, different event packages MAY | the NOTIFY requests. In addition, different event packages MAY | |||
| define additional constraints to the allowed "min-interval" | define additional constraints to the allowed "min-interval" | |||
| intervals. Such constraints are out of the scope of this | intervals. Such constraints are out of the scope of this | |||
| specification. | specification. | |||
| 4.4. Buffer Policy Description | 5.4. The Maximum Rate Mechanism for Resource List Server | |||
| 4.4.1. Partial State Notifications | When applied to a list subscription [RFC4662], the maximum rate | |||
| mechanism has some additional considerations. Specifically, the | ||||
| maximum rate applies to the aggregate notification stream resulting | ||||
| from the list subscription, rather than explicitly controlling the | ||||
| notification of each of the implied constituent events. Moreover, | ||||
| the RLS can use the maximum rate mechanism on its own to control the | ||||
| rate of the back-end subscriptions to avoid overflowing its buffer. | ||||
| With partial notifications, the notifier will always need to keep | The notifier is responsible for sending out event notifications upon | |||
| both a copy of the current full state of the resource F, as well as | state changes of the subscribed resource. We can model the notifier | |||
| the last successfully communicated full state view F' of the resource | as consisting of four components: the event state resource(s), the | |||
| in a specific subscription. The construction of a partial | Resource List Server (RLS) (or any other notifier), a notification | |||
| notification then involves creating a difference of the two states, | buffer, and finally the subscriber, or watcher of the event state, as | |||
| and generating a notification that contains that difference. | shown in Figure 1. | |||
| +--------+ | ||||
| | Event | | ||||
| +--------+ |Resource| +--------+ | ||||
| | Event | +--------+ | Event | | ||||
| |Resource| | |Resource| | ||||
| +---.=---+ | +---=----+ | ||||
| `-.. | _.--' | ||||
| ``-._ | _.--' | ||||
| +'--'--'-+ | ||||
| |Resource| | ||||
| | List | | ||||
| | Server | | ||||
| +---.----+ | ||||
| | | ||||
| | | ||||
| )--+---( | ||||
| | | .------------. | ||||
| |Buffer|<======'min-interval| | ||||
| | | `------------' | ||||
| )--.---( | ||||
| | | ||||
| | | ||||
| .---+---. | ||||
| | Event | | ||||
| |Watcher| | ||||
| `-------' | ||||
| Figure 1: Model for the Resource List Server (RLS) Supporting | ||||
| Throttling | ||||
| In short, the RLS reads event state changes from the event state | ||||
| resource, either by creating a back end subscription, or by other | ||||
| means; it packages them into event notifications and submits them | ||||
| into the output buffer. The rate at which this output buffer drains | ||||
| is controlled by the subscriber via the maximum rate mechanism. When | ||||
| a set of notifications are batched together, the way in which | ||||
| overlapping resource state is handled depends on the type of the | ||||
| resource state: | ||||
| In theory, there are many buffer policies that the notifier could | ||||
| implement. However, we only concentrate on two practical buffer | ||||
| policies in this specification, leaving additional ones for | ||||
| further study and out of the scope of this specification. These | ||||
| two buffer policies depend on the mode in which the notifier is | ||||
| operating. | ||||
| Full-state: Last (most recent) full state notification of each | ||||
| resource is sent out, and all others in the buffer are discarded. | ||||
| This policy applies to those event packages that carry full-state | ||||
| notifications. | ||||
| Partial-state: The state deltas of each buffered partial | ||||
| notification per resource are merged, and the resulting | ||||
| notification is sent out. This policy applies to those event | ||||
| packages that carry partial-state notifications. | ||||
| 5.5. Buffer Policy Description | ||||
| 5.5.1. Partial State Notifications | ||||
| With partial notifications, the notifier needs to maintain a separate | ||||
| buffer for each subscriber since each subscriber may have a different | ||||
| value for the maximum rate of notifications. The notifier will | ||||
| always need to keep both a copy of the current full state of the | ||||
| resource F, as well as the last successfully communicated full state | ||||
| view F' of the resource in a specific subscription. The construction | ||||
| of a partial notification then involves creating a difference of the | ||||
| two states, and generating a notification that contains that | ||||
| difference. | ||||
| When the maximum rate mechanism is applied to the subscription, it is | When the maximum rate mechanism is applied to the subscription, it is | |||
| important that F' is replaced with F only when the difference of F | important that F' is replaced with F only when the difference of F | |||
| and F' was already included in a partial state notification to the | and F' was already included in a partial state notification to the | |||
| subscriber allowed by the maximum rate mechanism. Additionally, the | subscriber allowed by the maximum rate mechanism. Additionally, the | |||
| notifier implementation SHOULD check to see that the size of an | notifier implementation SHOULD check to see that the size of an | |||
| accumulated partial state notification is smaller than the full | accumulated partial state notification is smaller than the full | |||
| state, and if not, the notifier SHOULD send the full state | state, and if not, the notifier SHOULD send the full state | |||
| notification instead. | notification instead. | |||
| 4.4.2. Full State Notifications | 5.5.2. Full State Notifications | |||
| With full state notifications, the notifier only needs to keep the | With full state notifications, the notifier only needs to keep the | |||
| full state of the resource, and when that changes, send the resulting | full state of the resource, and when that changes, send the resulting | |||
| notification over to the subscriber. | notification over to the subscriber. | |||
| When the maximum rate mechanism is applied to the subscription, the | When the maximum rate mechanism is applied to the subscription, the | |||
| notifier receives the state changes of the resource, and generates a | notifier receives the state changes of the resource, and generates a | |||
| notification. If there is a pending notification, the notifier | notification. If there is a pending notification, the notifier | |||
| simply replaces that notification with the new notification, | simply replaces that notification with the new notification, | |||
| discarding the older state. | discarding the older state. | |||
| 4.5. Estimated Bandwidth Savings | 5.6. Estimated Bandwidth Savings | |||
| It is difficult to estimate the total bandwidth savings accrued by | It is difficult to estimate the total bandwidth savings accrued by | |||
| using the maximum rate mechanism over a subscription, since such | using the maximum rate mechanism over a subscription, since such | |||
| estimates will vary depending on the usage scenarios. However, it is | estimates will vary depending on the usage scenarios. However, it is | |||
| easy to see that given a subscription where several full state | easy to see that given a subscription where several full state | |||
| notifications would have normally been sent in any given interval set | notifications would have normally been sent in any given interval set | |||
| by the "min-interval" parameter, only a single notification is sent | by the "min-interval" parameter, only a single notification is sent | |||
| during the same interval when using the maximum rate mechanism, | during the same interval when using the maximum rate mechanism | |||
| yielding bandwidth savings of several times the notification size. | yielding bandwidth savings of several times the notification size. | |||
| With partial-state notifications, drawing estimates is further | With partial-state notifications, drawing estimates is further | |||
| complicated by the fact that the states of consecutive updates may or | complicated by the fact that the states of consecutive updates may or | |||
| may not overlap. However, even in the worst case scenario, where | may not overlap. However, even in the worst case scenario, where | |||
| each partial update is to a different part of the full state, a rate | each partial update is to a different part of the full state, a rate | |||
| controlled notification merging all of these n partial states | controlled notification merging all of these n partial states | |||
| together should at a maximum be the size of a full-state update. In | together should at a maximum be the size of a full-state update. In | |||
| this case, the bandwidth savings are approximately n times the size | this case, the bandwidth savings are approximately n times the size | |||
| of the header fields of the NOTIFY request. | of the header fields of the NOTIFY request. | |||
| It is also true that there are several compression schemes available | It is also true that there are several compression schemes available | |||
| that have been designed to save bandwidth in SIP, e.g., SigComp | that have been designed to save bandwidth in SIP, e.g., SigComp | |||
| [RFC3320] and TLS compression [RFC3943]. However, such compression | [RFC3320] and TLS compression [RFC3943]. However, such compression | |||
| schemes are complementary rather than competing mechanisms to the | schemes are complementary rather than competing mechanisms to the | |||
| maximum rate mechanism. After all, they can both be applied | maximum rate mechanism. After all, they can both be applied | |||
| simultaneously, and in such a way that the compound savings are as | simultaneously. | |||
| good as the sum of applying each one alone. | ||||
| 5. Operation of the minimum rate mechanism | 6. Operation of the Minimum Rate Mechanism | |||
| 5.1. Subscriber Behavior | ||||
| In general, the way in which a subscriber generates SUBSCRIBE | 6.1. Subscriber Behavior | |||
| requests and processes NOTIFY requests is according to RFC 3265 | ||||
| [RFC3265]. | ||||
| A subscriber that wishes to apply a minimum rate to notifications in | A subscriber that wishes to apply a minimum rate to notifications in | |||
| a subscription MUST construct a SUBSCRIBE request that includes a | a subscription MUST construct a SUBSCRIBE request that includes a | |||
| maximum time interval between two consecutive notifications included | maximum time interval between two consecutive notifications included | |||
| in the "max-interval" Event header field parameter. The value of | in the "max-interval" Event header field parameter. The value of | |||
| this parameter is an integral number of seconds in decimal. | this parameter is an integral number of seconds in decimal. | |||
| A subscriber that wishes to update the previously agreed minimum rate | A subscriber that wishes to update the previously agreed minimum rate | |||
| of notifications MUST include the updated "max-interval" Event header | of notifications MUST include the updated "max-interval" Event header | |||
| field parameter in a subsequent SUBSCRIBE request or a 200-class | field parameter in a subsequent SUBSCRIBE request or a 2xx response | |||
| response to the NOTIFY request. If the Event header field of the | to the NOTIFY request. | |||
| SUBSCRIBE request did not include the "max-interval" parameter, the | ||||
| subscriber MUST NOT include an initial value of the "max-interval" | ||||
| Event header field parameter in a 200-class response to the NOTIFY | ||||
| request. | ||||
| A subscriber that wishes to remove the minimum rate control from | A subscriber that wishes to remove the minimum rate control from | |||
| notifications MUST indicate so by not including a "max-interval" | notifications MUST indicate so by not including a "max-interval" | |||
| Event header field parameter in a subsequent SUBSCRIBE request or a | Event header field parameter in a subsequent SUBSCRIBE request or a | |||
| 200-class response to the NOTIFY request. | 2xx response to the NOTIFY request. | |||
| The main consequence for the subscriber when applying the minimum | The main consequence for the subscriber when applying the minimum | |||
| rate mechanism is that it can receive a notification even if nothing | rate mechanism is that it can receive a notification even if nothing | |||
| has changed in the current state of the notifier. However, RFC 5839 | has changed in the current state of the notifier. However, RFC 5839 | |||
| [RFC5839] defines a mechanism that allows sending only an etag | [RFC5839] defines a mechanism that allows sending only an etag | |||
| instead of the full resource state in a notification if the state has | instead of the full resource state in a notification if the state has | |||
| not changed. | not changed. | |||
| 5.2. Notifier Behavior | 6.2. Notifier Behavior | |||
| In general, the way in which a notifier processes SUBSCRIBE requests | ||||
| and generates NOTIFY requests is according to RFC 3265 [RFC3265]. | ||||
| A notifier that supports the minimum rate mechanism MUST extract the | A notifier that supports the minimum rate mechanism MUST extract the | |||
| value of the "max-interval" Event header parameter from a SUBSCRIBE | value of the "max-interval" Event header field parameter from a | |||
| request or a 200-class response to the NOTIFY request and use it as | SUBSCRIBE request or a 2xx response to the NOTIFY request and use it | |||
| the suggested maximum time allowed between two notifications. If the | as the suggested maximum time allowed between two notifications. | |||
| Event header field of the SUBSCRIBE request did not include the "max- | ||||
| interval" parameter, the notifier MUST ignore an initial value of the | ||||
| "max-interval" Event header field parameter in a 200-class response | ||||
| to the NOTIFY request, if present. | ||||
| The notifier MAY decide to increase or decrease the proposed minimum | The notifier MAY decide to increase or decrease the proposed minimum | |||
| rate value based on its local policy, static configuration or other | rate value based on its local policy, static configuration or other | |||
| implementation-determined constraints. A compliant notifier MUST | implementation-determined constraints. A compliant notifier MUST | |||
| reflect back the possibly adjusted maximum time interval in a "max- | reflect back the possibly adjusted maximum time interval in a "max- | |||
| interval" Subscription-State header field parameter of the subsequent | interval" Subscription-State header field parameter of the subsequent | |||
| NOTIFY requests. The indicated "max-interval" value is adopted by | NOTIFY requests. The indicated "max-interval" value is adopted by | |||
| the notifier, and the notification rate is adjusted accordingly. | the notifier, and the notification rate is adjusted accordingly. | |||
| A notifier that does not understand this extension, will not reflect | A notifier that does not understand this extension, will not reflect | |||
| the "max-interval" Subscription-State header field parameter in the | the "max-interval" Subscription-State header field parameter in the | |||
| NOTIFY requests; the absence of this parameter indicates to the | NOTIFY requests; the absence of this parameter indicates to the | |||
| subscriber that no rate control is supported by the notifier. | subscriber that no rate control is supported by the notifier. | |||
| A compliant notifier MUST generate notifications whenever the time | A compliant notifier MUST generate notifications when state changes | |||
| since the most recent notification exceeds the value in the "max- | occur or when the time since the most recent notification exceeds the | |||
| interval" parameter. Depending on the event package and subscriber | value in the "max-interval" parameter. Depending on the event | |||
| preferences indicated in the SUBSCRIBE request, the NOTIFY request | package and subscriber preferences indicated in the SUBSCRIBE | |||
| sent as a result of a max-interval expiration MUST contain either the | request, the NOTIFY request sent as a result of a max-interval | |||
| current full state or the partial state showing the difference | expiration MUST contain either the current full state or the partial | |||
| between the current state and the last successfully communicated | state showing the difference between the current state and the last | |||
| state. | successfully communicated state. | |||
| Retransmissions of NOTIFY requests are not affected by the minimum | Retransmissions of NOTIFY requests are not affected by the minimum | |||
| rate mechanism, i.e., the minimum rate mechanism only applies to the | rate mechanism, i.e., the minimum rate mechanism only applies to the | |||
| generation of new transactions. In other words, the minimum rate | generation of new transactions. In other words, the minimum rate | |||
| mechanism does not in any way break or modify the normal | mechanism does not in any way break or modify the normal | |||
| retransmission mechanism. | retransmission mechanism. | |||
| 6. Operation of the average rate mechanism | 7. Operation of the Adaptive Minimum Rate Mechanism | |||
| 6.1. Subscriber Behavior | ||||
| In general, the way in which a subscriber generates SUBSCRIBE | ||||
| requests and processes NOTIFY requests is according to RFC 3265 | ||||
| [RFC3265]. | ||||
| A subscriber that wishes to apply an average rate to notifications in | 7.1. Subscriber Behavior | |||
| a subscription MUST construct a SUBSCRIBE request that includes a | ||||
| proposed average time interval between two consecutive notifications | ||||
| included in a "average-interval" Event header field parameter. The | ||||
| value of this parameter is an integral number of seconds in decimal. | ||||
| A subscriber that wishes to update the previously agreed average rate | A subscriber that wishes to apply an adaptive minimum rate to | |||
| of notifications MUST include the updated "average-interval" Event | notifications in a subscription MUST construct a SUBSCRIBE request | |||
| header field parameter in a subsequent SUBSCRIBE request or a 200- | that includes an average maximum time interval between two | |||
| class response to the NOTIFY request. If the Event header field of | consecutive notifications included in a "average-interval" Event | |||
| the SUBSCRIBE request did not include the "average-interval" | header field parameter. The value of this parameter is an integral | |||
| parameter, the subscriber MUST NOT include an initial value of the | number of seconds in decimal. | |||
| "average-interval" Event header field parameter in a 200-class | ||||
| response to the NOTIFY request. | ||||
| A subscriber that wishes to remove the average rate control from | A subscriber that wishes to update the previously agreed adaptive | |||
| notifications MUST indicate so by not including a "average-interval" | minimum rate of notifications MUST include the updated "average- | |||
| Event header field parameter in a subsequent SUBSCRIBE request or a | interval" Event header field parameter in a subsequent SUBSCRIBE | |||
| 200-class response to the NOTIFY request. | request or a 2xx response to the NOTIFY request. | |||
| The main consequence for the subscriber when applying the average | A subscriber that wishes to remove the adaptive minimum rate control | |||
| rate mechanism is that it can receive a notification even if nothing | from notifications MUST indicate so by not including a "average- | |||
| has changed in the current state of the notifier. However, RFC 5839 | interval" Event header field parameter in a subsequent SUBSCRIBE | |||
| [RFC5839] defines a mechanism that allows sending only an etag | request or a 2xx response to the NOTIFY request. | |||
| instead of the full resource state in a notification if the state has | ||||
| not changed. | ||||
| 6.2. Notifier Behavior | The main consequence for the subscriber when applying the adative | |||
| minimum rate mechanism is that it can receive a notification even if | ||||
| nothing has changed in the current state of the notifier. However, | ||||
| RFC 5839 [RFC5839] defines a mechanism that allows sending only an | ||||
| etag instead of the full resource state in a notification if the | ||||
| state has not changed. | ||||
| In general, the way in which a notifier processes SUBSCRIBE requests | 7.2. Notifier Behavior | |||
| and generates NOTIFY requests is according to RFC 3265 [RFC3265]. | ||||
| A notifier that supports the average rate mechanism MUST extract the | A notifier that supports the adaptive minimum rate mechanism MUST | |||
| value of the "average-interval" Event header parameter from a | extract the value of the "average-interval" Event header parameter | |||
| SUBSCRIBE request or a 200-class response to the NOTIFY request and | from a SUBSCRIBE request or a 2xx response to the NOTIFY request and | |||
| use it to calculate the maximum time allowed between two transactions | use it to calculate the actual maximum time between two notifications | |||
| as defined in Section 6.3. If the Event header field of the | as defined in Section 7.3. | |||
| SUBSCRIBE request did not include the "average-interval" parameter, | ||||
| the notifier MUST ignore an initial value of the "average-interval" | ||||
| Event header field parameter in a 200-class response to the NOTIFY | ||||
| request, if present. | ||||
| The notifier MAY decide to increase or decrease the proposed average | The notifier MAY decide to increase or decrease the proposed | |||
| time interval based on its local policy, static configuration or | "average-interval" based on its local policy, static configuration or | |||
| other implementation-determined constraints. A compliant notifier | other implementation-determined constraints. A compliant notifier | |||
| MUST reflect back the possibly adjusted average time interval in an | MUST reflect back the possibly adjusted time interval in an "average- | |||
| "average-interval" Subscription-State header field parameter of the | interval" Subscription-State header field parameter of the subsequent | |||
| subsequent NOTIFY requests. The indicated "average-interval" value | NOTIFY requests. The indicated "average-interval" value is adopted | |||
| is adopted by the notifier, and the notification rate is adjusted | by the notifier, and the notification rate is adjusted accordingly. | |||
| accordingly. | ||||
| A notifier that does not understand this extension will not reflect | A notifier that does not understand this extension will not reflect | |||
| the "average-interval" Subscription-State header parameter in the | the "average-interval" Subscription-State header parameter in the | |||
| NOTIFY requests; the absence of this parameter indicates to the | NOTIFY requests; the absence of this parameter indicates to the | |||
| subscriber that no rate control is supported by the notifier. | subscriber that no rate control is supported by the notifier. | |||
| A compliant notifier SHOULD generate notifications whenever the time | A compliant notifier SHOULD generate notifications when state changes | |||
| since the most recent notification exceeds the value calculated using | occur or when the time since the most recent notification exceeds the | |||
| the formula defined in Section 6.3. | value calculated using the formula defined in Section 7.3. | |||
| The average rate mechanism is implemented as follows: | The adaptive minimum rate mechanism is implemented as follows: | |||
| 1) When a subscription is first created, the notifier creates a | 1) When a subscription is first created, the notifier creates a | |||
| record that keeps track of the number of notifications that have | record that keeps track of the number of notifications that have | |||
| been sent in the "period". This record is initialized to contain | been sent in the "period". This record is initialized to contain | |||
| a history of having sent one message every "average-interval" | a history of having sent one message every "average-interval" | |||
| seconds for the "period". | seconds for the "period". | |||
| 2) The "timeout" value is calculated according to the equation given | 2) The "timeout" value is calculated according to the equation given | |||
| in Section 6.3. | in Section 7.3. | |||
| 3) If the timeout period passes without a NOTIFY request being sent | 3) If the timeout period passes without a NOTIFY request being sent | |||
| in the subscription, then the current resource state is sent | in the subscription, then the current resource state is sent | |||
| (subject to any filtering associated with the subscription). | (subject to any filtering associated with the subscription). | |||
| 4) Whenever a NOTIFY request is sent (regardless of whether due to a | 4) Whenever a NOTIFY request is sent (regardless of whether due to a | |||
| timeout or a state change), the notifier updates the notification | timeout or a state change), the notifier updates the notification | |||
| history record, recalculates the value of "timeout," and returns | history record, recalculates the value of "timeout," and returns | |||
| to step 3. | to step 3. | |||
| Retransmissions of NOTIFY requests are not affected by the timeout, | Retransmissions of NOTIFY requests are not affected by the timeout, | |||
| i.e., the timeout only applies to the generation of new transactions. | i.e., the timeout only applies to the generation of new transactions. | |||
| In other words, the timeout does not in any way break or modify the | In other words, the timeout does not in any way break or modify the | |||
| normal retransmission mechanism specified in RFC 3261 [RFC3261]. | normal retransmission mechanism specified in RFC 3261 [RFC3261]. | |||
| 6.3. Calculating the timeout | 7.3. Calculating the Timeout | |||
| The formula used to vary the absolute pacing in a way that will meet | The formula used to vary the absolute pacing in a way that will meet | |||
| the average rate requested over the period is given in equation (1): | the adaptive minimum rate requested over the period is given in | |||
| equation (1): | ||||
| timeout = (average-interval ^ 2) * count / period (1) | timeout = (average-interval ^ 2) * count / period (1) | |||
| The output of the formula, "timeout", is the time to the next | The output of the formula, "timeout", is the time to the next | |||
| notification, expressed in seconds. The formula has three inputs: | notification, expressed in seconds. The formula has three inputs: | |||
| average-interval: The value of the "average-interval" parameter | average-interval: The value of the "average-interval" parameter | |||
| conveyed in the Subscription-State header field, in seconds. | conveyed in the Subscription-State header field, in seconds. | |||
| period: The rolling average period, in seconds. The value of the | period: The rolling average period, in seconds. The value of the | |||
| "period" parameter MUST be greater than the value of the "average- | "period" parameter is chosen by the notifier, however the notifier | |||
| interval" parameter. | MUST choose a value greater than the value of the "average- | |||
| interval" parameter. The granularity of the values for the | ||||
| "period" parameter is set by local policy at the notifier. It is | ||||
| an implementation decision whether the notifier uses the same | ||||
| value of the "period" parameter for all subscriptions or | ||||
| individual values for each subscription. | ||||
| count: The number of notifications that have been sent during the | count: The number of notifications that have been sent during the | |||
| last "period" of seconds not including any retransmissions of | last "period" of seconds not including any retransmissions of | |||
| requests. | requests. | |||
| In case both the maximum rate and the average rate mechanisms are | In case both the maximum rate and the adaptive minimum rate | |||
| used in the same subscription the formula used to dynamically | mechanisms are used in the same subscription the formula used to | |||
| calculate the timeout is given in equation (2): | dynamically calculate the timeout is given in equation (2): | |||
| timeout = MAX[min-interval, (average-interval ^ 2) * count / period] (2) | timeout = MAX[min-interval, (average-interval ^ 2) * count / period] (2) | |||
| min-interval: The value of the "min-interval" parameter conveyed in | min-interval: The value of the "min-interval" parameter conveyed in | |||
| the Event header field, in seconds. | the Subscription-State header field, in seconds. | |||
| The formula in (2) makes sure that for all the possible values of the | The formula in (2) makes sure that for all the possible values of the | |||
| "min-interval" and "average-interval" parameters, with "average- | "min-interval" and "average-interval" parameters, with "average- | |||
| interval" > "min-interval", the timeout never results in a lower | interval" > "min-interval", the timeout never results in a lower | |||
| value than the value of the "min-interval" parameter. | value than the value of the "min-interval" parameter. | |||
| In some situation it may be beneficial for the Notifier to achieve an | In some situation it may be beneficial for the notifier to achieve an | |||
| average rate in a different way than the algorithm detailed in this | adaptive minimum rate in a different way than the algorithm detailed | |||
| document allows. However, the Notifier MUST comply with any "min- | in this document allows. However, the notifier MUST comply with any | |||
| interval" or "max-interval" parameters that have been negotiated. | "min-interval" or "max-interval" parameters that have been | |||
| negotiated. | ||||
| 7. Usage of "min-interval", "max-interval" and "average-interval" in a | 8. Usage of the Maximum Rate, Minimum Rate and Adaptive Minimum Rate | |||
| combination | Mechanisms in a combination | |||
| Applications can subscribe to an event package using all the rate | Applications can subscribe to an event package using all the rate | |||
| control mechanisms individually, or in combination; in fact there is | control mechanisms individually, or in combination; in fact there is | |||
| no technical incompatibility among them. However there are some | no technical incompatibility among them. However there are some | |||
| combinations of the different rate control mechanisms that make | combinations of the different rate control mechanisms that make | |||
| little sense to be used together. This section lists all the | little sense to be used together. This section lists all the | |||
| combinations that are possible to insert in a subscription; the | combinations that are possible to insert in a subscription; the | |||
| utility to use each combination in a subscription is also analyzed. | utility to use each combination in a subscription is also analyzed. | |||
| min-interval and max-interval: this combination allows to reduce the | maximum rate and minimum rate: This combination allows to reduce the | |||
| notification frequency rate, but at the same time assures the | notification frequency rate, but at the same time assures the | |||
| reception of a notification every time the most recent | reception of a notification every time the most recent | |||
| notification exceeds a specified interval. | notification exceeds a specified interval. | |||
| A subscriber SHOULD choose a "max-interval" value higher than the | A subscriber SHOULD choose a "max-interval" value higher than the | |||
| "min-interval" value, otherwise the notifier MUST adjust the | "min-interval" value, otherwise the notifier MUST adjust the | |||
| subscriber provided "max-interval" value to a value equivalent or | subscriber provided "max-interval" value to a value equal to or | |||
| higher than the "min-interval" value. | higher than the "min-interval" value. | |||
| min-interval and average-interval: it works in a similar way as the | maximum rate and adaptive minimum rate: It works in a similar way as | |||
| combination above, but with the difference that the interval at | the combination above, but with the difference that the interval | |||
| which notifications are assured changes dynamically. | at which notifications are assured changes dynamically. | |||
| A subscriber SHOULD choose a "average-interval" value higher than | A subscriber SHOULD choose a "average-interval" value higher than | |||
| the "min-interval" value, otherwise the notifier MUST adjust the | the "min-interval" value, otherwise the notifier MUST adjust the | |||
| subscriber provided "average-interval" value to a value equivalent | subscriber provided "average-interval" value to a value equal to | |||
| or higher than the "min-interval" value. | or higher than the "min-interval" value. | |||
| max-interval and average-interval: as both the parameters are | minimum rate and adaptive minimum rate: When using the adaptive | |||
| designed as minimum rate mechanisms, this combination makes sense | minimum rate mechanism, frequent state changes in a short period | |||
| only in some corner cases. | can result in no notifications for a longer period following the | |||
| short period. The addition of the minimum rate mechanism ensures | ||||
| the subscriber always receives notifications after a specified | ||||
| interval. | ||||
| A subscriber SHOULD choose a "max-interval" value higher than the | A subscriber SHOULD choose a "max-interval" value higher than the | |||
| "average-interval" value, otherwise the notifier MUST NOT consider | "average-interval" value, otherwise the notifier MUST NOT consider | |||
| the "max-interval" value. | the "max-interval" value. | |||
| min-interval, max-interval and average-interval: this combination | maximum rate, minimum rate and adaptive minimum rate: This | |||
| makes little sense to be used although not forbidden. | combination makes little sense to be used although not forbidden. | |||
| A subscriber SHOULD choose a "max-interval" and "average-interval" | A subscriber SHOULD choose a "max-interval" and "average-interval" | |||
| values higher than the "min-interval" value, otherwise the | values higher than the "min-interval" value, otherwise the | |||
| notifier MUST adjust the subscriber provided "max-interval" and | notifier MUST adjust the subscriber provided "max-interval" and | |||
| "average-interval" values to a value equivalent or higher than the | "average-interval" values to a value equal to or higher than the | |||
| "min-interval" value. | "min-interval" value. | |||
| A subscriber SHOULD choose a "max-interval" value higher than the | A subscriber SHOULD choose a "max-interval" value higher than the | |||
| "average-interval" value, otherwise the notifier MUST NOT consider | "average-interval" value, otherwise the notifier MUST NOT consider | |||
| the "max-interval" value. | the "max-interval" value. | |||
| 8. Syntax | 9. Protocol Element Definitions | |||
| This section describes the syntax extensions required for the | This section describes the protocol extensions required for the | |||
| different rate control mechanisms. | different rate control mechanisms. | |||
| 8.1. "min-interval", "max-interval" and "average-interval" Header Field | 9.1. "min-interval", "max-interval" and "average-interval" Header Field | |||
| Parameters | Parameters | |||
| The "min-interval", "max-interval" and "average-interval" parameters | The "min-interval", "max-interval" and "average-interval" parameters | |||
| are added to the rule definitions of the Event header field and the | are added to the rule definitions of the Event header field and the | |||
| Subscription-State header field in RFC 3265 [RFC3265] grammar. Usage | Subscription-State header field in RFC 3265 [RFC3265] grammar. Usage | |||
| of this parameter is described in Section 4, Section 5 and Section 6. | of this parameter is described in Section 5, Section 6 and Section 7. | |||
| 8.2. Augmented BNF Definitions | 9.2. Grammar | |||
| This section describes the Augmented BNF [RFC5234] definitions for | This section describes the Augmented BNF [RFC5234] definitions for | |||
| the new syntax elements. Note that we derive here from the ruleset | the new header field parameters. Note that we derive here from the | |||
| present in RFC 3265 [RFC3265], adding additional alternatives to the | ruleset present in RFC 3265 [RFC3265], adding additional alternatives | |||
| alternative sets of "event-param" and "subexp-params" defined | to the alternative sets of "event-param" and "subexp-params" defined | |||
| therein. | therein. | |||
| event-param =/ min-interval-param | event-param =/ min-interval-param | |||
| subexp-params =/ min-interval-param | subexp-params =/ min-interval-param | |||
| min-interval-param = "min-interval" EQUAL delta-seconds | min-interval-param = "min-interval" EQUAL delta-seconds | |||
| event-param =/ max-interval-param | event-param =/ max-interval-param | |||
| subexp-params =/ max-interval-param | subexp-params =/ max-interval-param | |||
| max-interval-param = "max-interval" EQUAL delta-seconds | max-interval-param = "max-interval" EQUAL delta-seconds | |||
| event-param =/ average-interval-param | event-param =/ average-interval-param | |||
| subexp-params =/ average-interval-param | subexp-params =/ average-interval-param | |||
| average-interval-param = "average-interval" EQUAL delta-seconds | average-interval-param = "average-interval" EQUAL delta-seconds | |||
| 8.3. Event header field usage in responses to the NOTIFY request | 9.3. Event Header Field Usage in Responses to the NOTIFY request | |||
| This table expands the table described in Section 7.2 of RFC 3265 | This table expands the table described in Section 7.2 of RFC 3265 | |||
| [RFC3265] allowing the Event header field to appear in a 200-class | [RFC3265] allowing the Event header field to appear in a 2xx response | |||
| response to a NOTIFY request. A UA that wishes to update the value | to a NOTIFY request. The use of the Event header field in responses | |||
| for minimum, maximum or average rate of notifications can do so by | other than 2xx to NOTIFY requests is undefined and out of scope of | |||
| including all desired values for the rate control parameters in an | this specification. | |||
| Event header field of the 200-class response to a NOTIFY request. | ||||
| Header field where proxy ACK BYE CAN INV OPT REG PRA SUB NOT | Header field where proxy ACK BYE CAN INV OPT REG PRA SUB NOT | |||
| ----------------------------------------------------------------- | ----------------------------------------------------------------- | |||
| Event 2xx - - - - - - - - o | Event 2xx - - - - - - - - o | |||
| 9. IANA Considerations | A subscriber that wishes to update the value for maximum, minimum or | |||
| adaptive minimum rate of notifications can do so by including all | ||||
| desired values for the "min-interval", "max-interval" and "average- | ||||
| interval" parameters in an Event header field of the 2xx response to | ||||
| a NOTIFY request. Any of the other header field parameters currently | ||||
| defined for the Event header field by other specifications do not | ||||
| have a meaning if the Event header field is included in the 2xx | ||||
| response to the NOTIFY request. These header field parameters MUST | ||||
| be ignored by the notifier, if present. | ||||
| The event type listed in the Event header field of the 2xx response | ||||
| to the NOTIFY request MUST match the event type of the Event header | ||||
| field in the corresponding NOTIFY request. | ||||
| 10. IANA Considerations | ||||
| This specification registers three new SIP header field parameters, | This specification registers three new SIP header field parameters, | |||
| defined by the following information which is to be added to the | defined by the following information which is to be added to the | |||
| Header Field Parameters and Parameter Values sub-registry under | Header Field Parameters and Parameter Values sub-registry under | |||
| http://www.iana.org/assignments/sip-parameters. | http://www.iana.org/assignments/sip-parameters. | |||
| Predefined | Predefined | |||
| Header Field Parameter Name Values Reference | Header Field Parameter Name Values Reference | |||
| -------------------- --------------- ---------- --------- | -------------------- --------------- ---------- --------- | |||
| Event min-interval No [RFCxxxx] | Event min-interval No [RFCxxxx] | |||
| Subscription-State min-interval No [RFCxxxx] | Subscription-State min-interval No [RFCxxxx] | |||
| Event max-interval No [RFCxxxx] | Event max-interval No [RFCxxxx] | |||
| Subscription-State max-interval No [RFCxxxx] | Subscription-State max-interval No [RFCxxxx] | |||
| Event average-interval No [RFCxxxx] | Event average-interval No [RFCxxxx] | |||
| Subscription-State average-interval No [RFCxxxx] | Subscription-State average-interval No [RFCxxxx] | |||
| (Note to the RFC Editor: please replace "xxxx" with the RFC number of | (Note to the RFC Editor: please replace "xxxx" with the RFC number of | |||
| this specification, when assigned.) | this specification, when assigned.) | |||
| 10. Security Considerations | This specification also updates the reference defining the Event | |||
| header field in the Header Fields sub-registry under | ||||
| http://www.iana.org/assignments/sip-parameters. | ||||
| Header Name compact Reference | ||||
| ----------- ------- --------- | ||||
| Event o [RFC3265][RFCxxxx] | ||||
| (Note to the RFC Editor: please replace "xxxx" with the RFC number of | ||||
| this specification, when assigned.) | ||||
| 11. Security Considerations | ||||
| Naturally, the security considerations listed in RFC 3265 [RFC3265], | Naturally, the security considerations listed in RFC 3265 [RFC3265], | |||
| which the rate control mechanisms described in this document extends, | which the rate control mechanisms described in this document extends, | |||
| apply in entirety. In particular, authentication and message | apply in entirety. In particular, authentication and message | |||
| integrity SHOULD be applied to subscriptions with this extension. | integrity SHOULD be applied to subscriptions with this extension. | |||
| RFC 3265 [RFC3265] recommends the integrity protection of the Event | RFC 3265 [RFC3265] recommends the integrity protection of the Event | |||
| header field of SUBSCRIBE requests. Implementations of this | header field of SUBSCRIBE requests. Implementations of this | |||
| extension SHOULD also provide integrity protection for the Event | extension SHOULD also provide integrity protection for the Event | |||
| header field included in the 200-class response to the NOTIFY | header field included in the 2xx response to the NOTIFY request. | |||
| request. | ||||
| Without integrity protection an eavesdropper could see and modify the | ||||
| Event header field; or it could also manipulate the transmission of a | ||||
| 200 (OK) response to the NOTIFY request in order to suppress or flood | ||||
| notifications without the subscriber seeing what caused the problem. | ||||
| When the maximum rate mechanism involves partial state notifications, | When the maximum rate mechanism involves partial state notifications, | |||
| the security considerations listed in RFC 5263 [RFC5263] apply in | the security considerations listed in RFC 5263 [RFC5263] apply in | |||
| entirety. | entirety. | |||
| 11. Acknowledgments | 12. Acknowledgments | |||
| Thanks to Pekka Pessi, Dean Willis, Eric Burger, Alex Audu, Alexander | Thanks to Pekka Pessi, Dean Willis, Eric Burger, Alex Audu, Alexander | |||
| Milinski, Jonathan Rosenberg, Cullen Jennings, Adam Roach, Hisham | Milinski, Jonathan Rosenberg, Cullen Jennings, Adam Roach, Hisham | |||
| Khartabil, Dale Worley, Martin Thomson, Byron Campen, Alan Johnston, | Khartabil, Dale Worley, Martin Thomson, Byron Campen, Alan Johnston, | |||
| Michael Procter and Janet Gunn for support and/or review of this | Michael Procter and Janet Gunn for support and/or review of this | |||
| work. | work. | |||
| Thanks to Brian Rosen for the idea of the minimum and average rate | Thanks to Brian Rosen for the idea of the minimum and adaptive | |||
| mechanisms, and Adam Roach for the work on the averaging algorithm | minimum rate mechanisms, and Adam Roach for the work on the algorithm | |||
| and other feedback. | for the adaptive minimum rate mechanism and other feedback. | |||
| 12. References | 13. References | |||
| 12.1. Normative References | 13.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
| A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
| Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
| June 2002. | June 2002. | |||
| [RFC3265] Roach, A., "Session Initiation Protocol (SIP)-Specific | [RFC3265] Roach, A., "Session Initiation Protocol (SIP)-Specific | |||
| skipping to change at page 23, line 14 ¶ | skipping to change at page 23, line 6 ¶ | |||
| Resource Lists", RFC 4662, August 2006. | Resource Lists", RFC 4662, August 2006. | |||
| [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| [RFC5263] Lonnfors, M., Costa-Requena, J., Leppanen, E., and H. | [RFC5263] Lonnfors, M., Costa-Requena, J., Leppanen, E., and H. | |||
| Khartabil, "Session Initiation Protocol (SIP) Extension | Khartabil, "Session Initiation Protocol (SIP) Extension | |||
| for Partial Notification of Presence Information", | for Partial Notification of Presence Information", | |||
| RFC 5263, September 2008. | RFC 5263, September 2008. | |||
| 12.2. Informative References | 13.2. Informative References | |||
| [I-D.ietf-geopriv-loc-filters] | [I-D.ietf-geopriv-loc-filters] | |||
| Mahy, R., Rosen, B., and H. Tschofenig, "Filtering | Mahy, R., Rosen, B., and H. Tschofenig, "Filtering | |||
| Location Notifications in the Session Initiation Protocol | Location Notifications in the Session Initiation Protocol | |||
| (SIP)", draft-ietf-geopriv-loc-filters-11 (work in | (SIP)", draft-ietf-geopriv-loc-filters-11 (work in | |||
| progress), March 2010. | progress), March 2010. | |||
| [RFC3320] Price, R., Bormann, C., Christoffersson, J., Hannu, H., | [RFC3320] Price, R., Bormann, C., Christoffersson, J., Hannu, H., | |||
| Liu, Z., and J. Rosenberg, "Signaling Compression | Liu, Z., and J. Rosenberg, "Signaling Compression | |||
| (SigComp)", RFC 3320, January 2003. | (SigComp)", RFC 3320, January 2003. | |||
| skipping to change at page 23, line 44 ¶ | skipping to change at page 23, line 36 ¶ | |||
| Initiation Protocol (SIP)", RFC 3856, August 2004. | Initiation Protocol (SIP)", RFC 3856, August 2004. | |||
| [RFC3857] Rosenberg, J., "A Watcher Information Event Template- | [RFC3857] Rosenberg, J., "A Watcher Information Event Template- | |||
| Package for the Session Initiation Protocol (SIP)", | Package for the Session Initiation Protocol (SIP)", | |||
| RFC 3857, August 2004. | RFC 3857, August 2004. | |||
| [RFC3943] Friend, R., "Transport Layer Security (TLS) Protocol | [RFC3943] Friend, R., "Transport Layer Security (TLS) Protocol | |||
| Compression Using Lempel-Ziv-Stac (LZS)", RFC 3943, | Compression Using Lempel-Ziv-Stac (LZS)", RFC 3943, | |||
| November 2004. | November 2004. | |||
| [RFC4825] Rosenberg, J., "The Extensible Markup Language (XML) | ||||
| Configuration Access Protocol (XCAP)", RFC 4825, May 2007. | ||||
| [RFC5839] Niemi, A. and D. Willis, "An Extension to Session | [RFC5839] Niemi, A. and D. Willis, "An Extension to Session | |||
| Initiation Protocol (SIP) Events for Conditional Event | Initiation Protocol (SIP) Events for Conditional Event | |||
| Notification", RFC 5839, May 2010. | Notification", RFC 5839, May 2010. | |||
| Authors' Addresses | Authors' Addresses | |||
| Aki Niemi | Aki Niemi | |||
| Nokia | Nokia | |||
| P.O. Box 407 | P.O. Box 407 | |||
| NOKIA GROUP, FIN 00045 | NOKIA GROUP, FIN 00045 | |||
| End of changes. 108 change blocks. | ||||
| 422 lines changed or deleted | 417 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||