Subject: Draft B: NETCONF Montreal Interim Meeting Minutes

From: Andy Bierman <[email-masked]>
Date: Mon, 14 Aug 2006 08:41:03 -0700

Hi,

Trying again with less bugs, as an attachment.
[Thunderbird drops a CR/LF if the previous line is whitespace/CR/LF
instead of just CR/LF.]

Andy

[DRAFT B]

Network Configuration WG (netconf)
Montreal Interim Meeting Minutes
July 14 and 15, 2006
=====================

Chairs:  

Simon Leinen <[email-masked]>
Andy Bierman <[email-masked]>

Notes: Andy Bierman, Juergen Shoenwaelder
Minutes: Andy Bierman

-----------------------------------------------

Agenda:

- Interim Meeting Location
  IETF Headquarter Hotel: Delta Centre-Ville
  777 University Street
  Montreal, Quebec, Canada, H3C 3Z7
  Hotel WEB site:
  http://www.deltahotels.com/hotels/hotels.php?hotelId=35

- Interim Meeting Times
  Friday, July 14, 2006 (1:30 PM - 6:00 PM)
  Saturday, July 15, 2006 (9:00 AM - 6:00 PM)

- Internet Drafts:

  - NETCONF Event Notifications
    draft-ietf-netconf-notification-02.txt

  - A SYSLOG Capability for NETCONF
    draft-shafer-netconf-syslog-00.txt

- Functional Requirements
  - determine WG consensus on need and priority of Juergen's list
    http://www.eecs.iu-bremen.de/wiki/index.php/Netconf_notifications

- Architecture

  - role of notifications within netconf
  - relationship to syslog and snmp notifications
  - scaling issues
  - security issues (session vs. signed msg, etc.)
  - standard RPC methods vs. new RPC methods
  - agent resource vs. NMS resource issues

- Use within Sessions

  - endless RPC
  - mixed-mode (rpc operations and notifications)
  - single vs. multiple subscriptions within a single session

- Transport Specific Support

  - use of channels (ssh, beep, what about soap?)
  - callhome support for agent initiated sessions

- Agent Notification Configuration and Control Mechanism

  - config-data vs. subscription-data
  - RPCs used to configure and control agent notification generation

- Notification Event Classes

  - WG consensus on specific list
  - Guidelines for selecting classifications

- Notification Filtering

  - Configuration mechanism(s)
  - Agent processing model

- Notification Header Content

  - Syntax and semantics of data included in all notifications

- Standard Notification Content

  - WG consensus on 0 or more fully-specified standard notifications
  - Full syntax and semantics of each standard notification

- Read-only (monitoring) data for agent notification activity

- Access Control Issues

- Data Model and XSD Issues

  - Data model design
  - XSD correctness
  - Need for 'min-access' and 'max-access'

- Documentation Issues

  - Terminology
  - Inclusion of non-normative text
  - Document section order
  - Document clarity
  - Choice of examples
  - Example correctness (need to validate against the XSD)

---------------------------------------------------------------

Minutes:

1) Functional Requirements

The interim meeting began with a continuation of the requirements
discussion began in the WG meeting.  The group tried to understand
and prioritize each requirement, as captured by Juergen on the
wiki page set up for this purpose.

The following is a list of requirements (Rn), optional comments (Cn)
on the issues discussed, and the resolutions (Sn) reached by the group.

R1) Scope of work

The solution should focus on notification support for configuration.

C1)

A basic disagreement within the WG is caused by the assumption
of different implied application infrastructures, which would
use a notification system in very different ways.  

The group interpreted this requirement to mean that configuration
specific notification content should be defined for some
configuration related tasks.

S1) Accepted

The solution is required to identify configuration changes on 
a device (i.e., NETCONF agent).

R2) Hierarchical Data

The solution should support structured hierarchical data.

C2) 

This requirement is superseded by the content-independent
requirement.

S2) Rejected

This requirement is not meaningful, since we have XML encoded
data already, and we do not focus on the content of a notification.

R3) Configuration Fragments

The solution should be able to carry configuration fragments.

S3) Rejected

This requirement is not meaningful since we do not focus on the 
content of a notification.

R4) Message Size Limit

The solution should support a reasonable message size limit (syslog 
and SNMP are rather constrained in terms of message sizes).

S4) Rejected (N/A)

The NETCONF protocol does not impose message size constraints.

R5) Reliable Notification Delivery

The solution should provide reliable delivery of notifications.

C5)

The WG discussed this issue at length on the mailing list.
The result of that discussion was that the underlying
transport protocol that NETCONF uses provides this feature.
Application level ACKs for notifications have been rejected
by the WG already.  

S5) Rejected

The WG consensus on this issue has not changed.
Application-level ACKs will not be supported.

R6) Pre-configured Notification Destinations

The solution should support pre-configured notification destinations.

S6) Deferred

The group determined this is a nice to have feature if there is 
a solution (done somewhere else)- ISMS is investigating
whether there is a solution for SSH (seems to be easy over BEEP).
This is just a notification specific instantiation of the call home
feature (see below).

R7) Agent Initiated Connections

The solution should support agent initiated connections.

C7)

This is the Callhome feature.
After much discussion, it was determined this feature
should not be part of this notification work because
it is not notification-specific.

S7) Rejected

This is a transport issue and as such must be handled outside 
the notification work.

R8) Subscription Mechanism

The solution should provide a subscription mechanism.

C8) 

The actual meaning of this requirement was discussed at length.
There was agreement (at the start) that a special RPC call
to initiate notification delivery was reasonable, but
also significant differences on the structure of that
RPC method.

S8) Accepted

The term 'subscription' refers to the delivery of notifications
(if any to send), and is bound to the lifetime of a session, not
a more permanent subscription.

An agent does not send notifications before asked to do so
by the manager, i.e., the manager initiates the flow of 
notifications.

R9) Multiple Subscriptions

The solution should support multiple subscriptions.

C9)

The term was clarified to mean multiple subscriptions
per session, since multiple sessions is already supported.

S9) Rejected

Multiple subscriptions over the same session are not required.

R10) Filtering Mechanism

The solution should provide a filtering mechanism.

C10)

There are many different interpretations of this feature,
and the group determined that notification filtering
means the manager somehow selects one of possibly
several notification content output formats, and 
also somehow selects a subset of all possible
notifications, based on some portion of the
notification data content.

S10) Accepted

There continues to be WG consensus that this feature 
is needed.

R11) Notification Names

The solution should support notification names.

S11) Rejected

Notification names belong into the data content.

S12) Notification Timestamps

The solution should support notification timestamps.

C12)

The group discussed the need for timestamps in the
notification header.  The following diagram shows
the 3 different timestamps that were considered:

   +----------+       +-----------+       +--------------+
   |          |       |           |       |              |
   |  Mgr App | <---- |  Agent Tx | <---- | Agent Detect |
   |          |       |           |       |              |
   +----------+       +-----------+       +--------------+
        TS-3               TS-2                TS-1 

R12) Rejected

Notification timestamps (TS-1) belong into the data content.
A (possibly additional) timestamp (TS-2) to indicate when
the agent transmitted the notification is not needed.

R13) Notification Classes

The solution should support notification classes.

C13)

This has been a contentious topic all along due to
the overlapping classifications and the low probability
of interoperability of complex NE devices, based
solely on the text in the draft.

S13) Rejected

Notification classes belong into the data content.

R14) Notification Info

The solution should support notification info.

C14)

It was never really clear to everybody what this
feature really meant.  It was clear that this is
just part of the data model specification.

S14) Rejected

Notification info belongs in the data content.

R15) Notification Content Specification 

The solution should provide the ability to specify the content 
of notifications to ensure predictability.

S15) Rejected

Notifications should be formally defined, to be addressed by data
modeling language efforts.

R16) Transport and Session Independent Notification Content

The solution should send sufficient information in a notification 
so that it can be analyzed independent of the transport mechanism,
or the session-specific context.

C16) 

This item deals with the identifiers used in the notification
header to identify its classification in various ways.
This feature was obsoleted by other related decisions.

S16) Accepted

Data content fully describes a notification; protocol information
should not be not needed to understand a notification.

R17) Reference to Prior Configuration Change RPC Invocations

The solution should allow notifications to refer to prior 
configuration change RPCs.

S17) Rejected

This feature belongs into the data model content.

R18) Do not bind Subscriptions to Connections

The solution should not bind subscriptions to a connection.

C18) 

It was unclear how this would ever work in NETCONF,
since NETCONF is session-based.

S18) Rejected

Sounds a bit too complex - unclear what the real use case is.

R19) Fate Sharing Notification Channels

The channels for configuration change notifications should share 
fate with a session that includes a configuration channel.

S19) Rejected

NETCONF Sessions are independent of each other.

R20) Notification Replay

The solution should support replay of locally logged notifications.

C20)

A manager needs to be able to distinguish between retrieval of 
logged notifications and replay of 'fresh' notifications.

This feature was explored in more detail later in the meeting,
but the basic decision did not change.

S20) Accepted (as capability)

Could be an optional feature.

R21) Message Chunking

The solution should support message chunking capability in 
cases channels carry mixed RPCs.

S21) Rejected

Netconf does not interleave messages, no chunking/fragmentation 
needed.

R22) Notification Transmitter Scaling

The solution should scale to 30.000-100.000 nodes which may
emit notifications.

C22)

R23 was removed because it is considered a duplicate of R22.

S22) Rejected

The netconf transport has already been decided.
It is a transport and implementation specific matter
how many concurrent sessions a single node can handle.

1.2) Requirements Evaluation Summary

R1) Scope of work is configuration         : Accepted
R2) Hierarchical Data                      : Rejected 
R3) Configuration Fragments                : Rejected
R4) Message Size Limit                     : Rejected 
R5) Reliable Notification Delivery         : Rejected
R6) Preconfigured Notif. Destinations      : Deferred
R7) Agent Initiated Connections            : Rejected
R8) Subscription Mechanism                 : Accepted
R9) Multiple Subscriptions                 : Rejected
R10) Filtering Mechanism                   : Accepted
R11) Notification Names                    : Rejected
S12) Notification Timestamps               : Rejected
R13) Notification Classes                  : Rejected
R14) Notification Info                     : Rejected
R15) Notification Content Specification    : Rejected
R16) Independent Notification Content      : Accepted
R17) Reference to Prior Config RPCs        : Rejected
R18) Do not bind Subscriptions to Conn.    : Rejected
R19) Fate Sharing Notification Channels    : Rejected
R20) Notification Replay                   : Accepted (as capability)
R21) Message Chunking                      : Rejected
R22) Notification Transmitter Scaling      : Rejected

2) Notification Delivery Control

The group agreed that the real 'standards' goal is to provide
for the delivery of standard NETCONF notifications without
the need for any proprietary configuration to be used at all.
There are different ways of approaching this problem,
which required a lot of discussion to resolve.

2.1) Streams vs. Subscriptions

The group discussed the details of the 'streams' design.

The essential difference between the architectures
in two drafts under consideration is that in the 'Streams'
approach, the device has a set of potentially many distinct
notification paths and data model encodings.  In the 'Subscription'
approach, there is one conceptual notification path with
a monolithic data model encompassing all possible data encodings 
and notification content data models.

There are 2 distinct uses for multiple notification streams:

 1) Different data encodings
    The same notification information may be encoded in multiple
    formats to accommodate legacy and new applications, such as
    syslog/RAW, syslog/COOKED, syslog/SD-Params, snmp/XML, etc.

 2) Different event sources and/or event processing SW
    Not all events may be reported in all streams for various
    reasons.  For example, console syslog messages and
    SNMP notifications rarely coincide, event for event.

The application of session-specific parameters to connect to
a stream or subscription are basically the same in both drafts.
There were no real objections to the mechanisms proposed in the 'Streams' 
approach.

After some clarifications, the following model was
agreed upon as the correct approach for the WG:

============================
  (Within 1 NETCONF Agent)

  Part 1:
  
  Stream X:
  +--------+      +--------------+      +---------+
  | Event  |      |    Event     |      |  Data   |
  | Source | ...  | Processor A  | ---> | Model A | ---> X
  +--------+      +--------------+      +---------+

  Stream Y:
  +--------+      +--------------+      +---------+
  | Event  |      |    Event     |      |  Data   |
  | Source | ...  | Processor B  | ---> | Model B | ---> Y
  +--------+      +--------------+      +---------+

  Stream Z:
  +--------+      +--------------+      +---------+
  | Event  |      |    Event     |      |  Data   |
  | Source | ...  | Processor C  | ---> | Model C | ---> Z
  +--------+      +--------------+      +---------+

  Part 2:

   +------------------------------------------------------+
   |  Session N                                           |
   | +---------+      +--------+     +----------+         |
   | | Stream  |      | Filter |     | Notif.   |     To  |
   | | Select  | ---> | Set    | --> | Delivery | --> Mgr |
   | | (X,Y,Z) |      | Config |     | Capabil. |         |
   | +---------+      +--------+     +----------+         |
   |                                                      |
   +------------------------------------------------------+

===============

2.2) Group Consensus Points

a) The solution will support multiple event streams.  The
   exact capabilities and characteristics of a stream are
   determined by the agent, and advertised to the manager.
   The manager can select 1 of N streams, and optionally
   apply notification suppression filters to that stream.

b) There will be a special named stream to carry "netconf"
   notifications, which is mandatory to implement.

c) There might be other special named streams to carry "snmp"
   or "syslog" notifications.

d) Filters are applied before a notification is shipped over a
   session. Filters are established as part of the stream selection
   (and they share fate with the underlying session).

e) An empty filter matches all notifications.

f) The configuration of streams is out of scope for the current work
   in this working group (part 1 above).  

g) The configuration of stream selection and notification
   suppression filters in in scope (part 2 above).

h) Notification suppression filtering is data-model and 
   stream dependent.

i) It was noted that just because the WG can define a read-only
   data model which provides a 'snapshot' of the standard
   Stream or Filter parameters, the actual parameters used to
   configure these mechanisms may be different, and may not
   even map 1:1 to a given standard parameter.  Therefore,
   the configuration of device-specific streams are not in scope.

3) Notification Use Within a Session

3.1) Long-Lived RPC vs. Mixed-Mode RPC

It is assumed that a new RPC method will be created for
the manager to use to cause the agent to start the delivery
of notifications.  All parameters needed to configure
the session-specific delivery of notifications should
be passed as parameters (by reference or by value).
Additional features such as filtering and notification replay
are also supported via this new RPC method.

Once this new RPC method is invoked, there are three potential ways 
to ship notifications:

A) One big (potentially never ending) <rpc-reply> to the initial
   request that sends multiple notifications and then eventually 
   sends the closing <rpc-reply> end-tag to complete the RPC
   invocation.

B) This new RPC method is followed by an <ok> reply, 
   followed by a sequence of notifications, each
   one carrying a single notification message (but no 
   other RPCs interleaved).  It is unclear whether
   <rpc> requests received by the agent would be queued
   until the notification delivery is terminated, 
   simply ignored, or caused an <rpc-error> to be returned.

C) Same as b) but interleaved requests are allowed, and supported
   by the agent.   This has been called 'mixed-mode'.  The agent
   will buffer and properly interleave <notification> and
   <rpc-reply> elements as needed, on each session using
   this operational mode.  This mode could be optional, and
   identified with an additional capability.

[Ed. - XML declarations omitted from examples.]

Example A:
S: <rpc-reply>
S:   <data>
S:     <notification>...
S:     </notification>
S:     <notification>...
S:     </notification>
S:   </data>
S: </rpc-reply>
S: ]]>]]>

Example B:
S: <rpc-reply>
S:   <ok/>
S: </rpc-reply>
S: ]]>]]>
S: <notification>
S:   ...
S: </notification>
S: ]]>]]>

Example C - Mixed Mode:
S: <rpc-reply>
S:  <ok/>
S: </rpc-reply>
S: ]]>]]>
S: <notification>
S:   ...
S: </notification>
S: ]]>]]>
S: <rpc-reply>
S:   ...
S: </rpc-reply>
S: ]]>]]>
S: <notification>
S:   ...
S: </notification>
S: ]]>]]>
S: <notification>
S:   ...
S: </notification>
S: ]]>]]>

3.2) Consensus Points

a) The group decided to use "Approach B". 

b) An agent is not required to process RPC requests until the 
   notification stream is done.

c) A capability may be defined to announce that a server is capable to
   process RPCs while a notification stream is active on a session.

d) Every implementation should be correct  :-)

e) The use cases for modifying the subscription filtering
   parameters frequently were not widely accepted, although
   a great deal of time was spent trying to convince the group
   that the <modify-subscription> feature is important.

f) The WG needs to investigate the use of SSH channels
   for separation of operations and notifications.

   [ed. - does this imply multiple NETCONF sessions over
   a single SSH connection? What exactly does this mean?]

4) Notification Replay

The group discussed a replay feature, which is not the same
as a notification logging MIB.  Instead of using the <get>
operation to retrieve stored notifications, the agent sends
them as <notification> PDUs.

There are several agent implementation requirements needed
to support this feature:

4.1) Notification Storage

The actual number of stored notifications available for retrieval
at any given time is an agent implementation specific matter.
Control parameters for this aspect of the feature are outside
the scope of the current work.

4.2) Retrieval Mechanisms

There was strong agreement that the CLI operation "tail -f logfile"
is an important use case for the behavior of this feature.

Translation: Retrieval of all matching notifications since an 
absolute or relative point in time, optionally followed by
any new notifications since the request was started.
In addition, a manager may request that all future notifications
that match the selection criteria are delivered, so the
request for stored and 'live' notifications can be mixed.

There were no objections to any of the retrieval mechanisms 
defined in the draft. 

4.3) Live Notification Buffering

If an agent supports notification replay, then it must (should?) 
also support the ability to defer delivery of new notifications
while replayed notifications are currently being delivered
on a particular session, thereby maintaining temporal order
of the notification stream.

4.4) Issues

a) How does a manager tell the difference between these 2 
   'empty response' conditions?
    1) no notifications buffered for the requested time period
    2) no notifications occurred during the requested time period

b) Should there be a mode where stored and live notifications
   are mixed together, and temporal order is not preserved?
   Should this be the only mode? Or should preserved order be
   the only mode?

c) How can this feature be realized with the fewest number
   of options and permutations, while still maintaining
   enough implementation flexibility?

5) Notification Data Models

5.1) State and Statistics

A standard data model will be developed to provide some
important information to managers:

a) Available Streams

The streams supported by the agent are stored by the agent
for retrieval.

b) State Data

It is possible some notification management state data will
be standardized to help applications debug and interact
properly with the agent and other applications.

5.2) <special-get> vs. <get>

The group discussed the use of the standard <get> operation vs. 
collections of specific (standard and proprietary) <get-xxx> 
operations.  The biggest concern is that an ad-hoc collection
of RPC calls is not as interoperable as one RPC method
used with a common data framework.  The issue is whether
an agent must support the <get> or <get-config> operations
for each data set returned in a 'special get' operation.

One point raised was that a specialized operation might have the 
feature that it can pull things together from different subtrees 
and namespaces, e.g. <get-vlan-info> with parameter
42 might retrieve all information related to vlan 42.  Another use
for a 'special get' RPC is to simplify access (e.g., iteration
over data-model-specific 'chunks' such as rows in a table) to
data which would otherwise be difficult to access efficiently
using the standard <get> RPC.

The group agreed that the data expected for notifications did
not warrant the use of special get RPCs, and a standard data
model (for use with <get>) will be defined instead.

5.3) XML Data Hierarchy

There was some discussion of the need for a standard data
framework to give standard data a 'root', or more precisely,
a unique absolute Xpath expression that describes the
path from a conceptual XML root to any given element
in any namespace.

There are many different ways to organize XML data,
but the target namespace and the nested element names
are the two 'independent variables' that can be used
to place XML data somewhere in a conceptual tree.

The <config> or <data> element (used in many NETCONF
operations) is a placeholder for the conceptual root
of the XML data.  All Xpath expressions and other filters
that operate on NETCONF data use this point in the PDU
as the root of the filter expression.

It was noted that the NETCONF WG does not have to define
a data organization framework for the entire data modeling 
universe, but rather just a small 'bootstrap' model
that focused on the NETCONF protocol itself.

The manner in which this small set of NETCONF standard data
should be organized is still an open issue.  There were some
on-the-fly proposals made, but they provided more questions
than answers:

  Q1: What is the granularity of a namespace?

  Q2: How does the granularity affect filter expressions?

  Q3: How should the element hierarchy be defined?

   a) /ietf/netconf/notifications (in 1 netconf-data namespace)
   b) /ietf:netconf/nc-data:notifications (in 2 namespaces)
   c) ???

  Q4: Object Naming
      - How should the canonical Object Instance Identifier
        for each data node be defined?
      - Is there a way to avoid the use of namespace prefixes when 
        mixing vendor and IETF nodes?
      - How should multiple unnamed, position-dependent instances
        of a particular node be identified?

   e.g.: interface 'eth0'

   /ietf/interfaces/interface[name="eth0"]

   e.g.: 4th (unnamed) MAC address for interface 'eth0'
   (unnamed position-dependent instances start at position 0)

   /ietf/interfaces/interface[name="eth0"]/addresses/address[pos="3"]

The WG considers the data organization problem to be a high
priority work item.  An initial solution is required.
It is possible that this initial data model will later be
discarded in favor of a more comprehensive and widely
deployed data model framework (if and when that happens).
This is similar to how MIB-1 was later replaced by MIB-2
in the SNMP protocol.  It is critical to define even a
small set of standard data in order to begin interoperability
testing and deployment of the NETCONF protocol.

5.4) Filtering

The use of POSIX regular expressions is planned for this
feature.  There are still a lot of details that need to
be written down before an interoperable filtering
mechanism (i.e., same NETCONF behavior across agents)
is fully defined.

It was noted that the function library of XPATH 2.0 supports 
regular expressions in the function library. XPATH 1.0 does 
not have something like that.

The authors will propose some text in the next revision of 
the Notifications I-D.

6) Document Integration

The authors of both documents under consideration will rewrite 
the WG notification document, which will continue to be
the deliverable for this work item.

a) All the non-normative appendices will be removed.
   Data model specific issues need to be addressed with
   a separate WG effort.

b) The 'Streams' approach and other recent design decisions will
   be implemented in the next revision of the WG draft, and the 
   appropriate text will be moved or adapted from the 'Syslog
   Capability for Netconf' draft.  New text will be written as 
   needed.

c) A new version will be ready soon, hopefully in September.

7) Summary

The two drafts under consideration will be merged, and possibly
design approaches (as decided by the WG) will be attempted by 
all the authors, in the next version of the 'Netconf Event 
Notifications' draft.

Some specific feature mechanisms are data-dependent, and
a minimal set of data modeling issues must be resolved
by the WG in order for this notification work to be satisfactorily
completed.

---------------------------------------------------------------

Appendix A)  Attendee List  (Email addresses removed to reduce spam)

Andy Bierman
Simon Leinen
Juergen Schoenwaelder
David Harrington
Dan Romascanu
Opiuier Festor
Sharon Chisholm
Rodu State
Hector Travino
David Perkins
Bert Wijnen
William Chow
Yoshifumi Atarashi
Hideki Okita
Vincent Cridlig
Martin Bjorklund
Balazs Lengyel
James Balestriere
Phil Shafer
Rob Enns
Brian Trammell

---

From: Juergen Schoenwaelder <[email-masked]>
Date: Wed, 16 Aug 2006 01:53:02 +0200

> Trying again with less bugs, as an attachment.

Attached are some cosmetic fixes. There is one hidden question I like

>    a single SSH connection? What exactly does this mean?]

SSH has the nice feature that it provides independent channels running
over the same underlying TCP session and sharing the same SSH session
keys etc. which makes them pretty lightweight mechanisms to separate
different NETCONF notification channels or to seperate NETCONF
notification channels from the "normal" NETCONF RPC channel.

There was some discussion during the meeting whether the SSH mapping
document actually allows us to make use of SSH channels or not. Item
f) quoted above was recorded as an action item to carefully re-read
draft-ietf-netconf-ssh-<latest> and to figure out what the document
actually says and to compare that to what the intention was the
document should be saying.

/js

-- 
Juergen Schoenwaelder		    International University Bremen
<http://www.eecs.iu-bremen.de/>	    P.O. Box 750 561, 28725 Bremen, Germany
--- interim_minutes_B.txt	2006-08-16 01:40:37.000000000 +0200
+++ interim_minutes_C.txt	2006-08-16 01:32:36.000000000 +0200
@@ -11,7 +11,7 @@
 Simon Leinen <[email-masked]>
 Andy Bierman <[email-masked]>
 
-Notes: Andy Bierman, Juergen Shoenwaelder
+Notes: Andy Bierman, Juergen Schoenwaelder
 Minutes: Andy Bierman
 
@@ -555,7 +555,7 @@
 
 g) The configuration of stream selection and notification
-   suppression filters in in scope (part 2 above).
+   suppression filters are in scope (part 2 above).
 
@@ -573,7 +573,7 @@
 
 It is assumed that a new RPC method will be created for
-the manager to use to cause the agent to start the delivery
+the manager to cause the agent to start the delivery
 of notifications.  All parameters needed to configure
 the session-specific delivery of notifications should
 be passed as parameters (by reference or by value).