Network Working Group Kutscher
Internet-Draft TZI, Universitaet Bremen
Expires: August 15, 2001 February 14, 2001
The Message Bus: Guidelines for Application Profile Writers
draft-ietf-mmusic-mbus-guidelines-00.txt
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as
Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
To view the entire list of Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on August 15, 2001.
Copyright Notice
Copyright (C) The Internet Society (2001). All Rights Reserved.
Abstract
This memo defines a list of conventions for terminology, algorithms
and procedures for interaction models that are useful for
applications using the Message Bus (Mbus) [1]. These conventions are
intended as guidelines for designers of Mbus application profiles
and Mbus implementations/applications.
Version Info
$Revision: 2.17 $
$Date: 2001/02/14 14:55:07 $
Kutscher Expires August 15, 2001 [Page 1]
Internet-Draft Mbus Guidelines February 2001
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . 5
2. Terminology . . . . . . . . . . . . . . . . . . . . . 6
3. General Mbus Command Definition Conventions . . . . . 7
3.1 Conventions for parameter encoding . . . . . . . . . . 7
3.2 Parameter Specification for Mbus Commands . . . . . . 7
3.2.1 Optional parameters . . . . . . . . . . . . . . . . . 8
3.2.1.1 Example of a Definition of an Optional Parameter List 9
3.2.1.2 Example for an Mbus Command with an Optional Parameter 9
4. Usage of Mbus Addresses . . . . . . . . . . . . . . . 10
4.1 Example of a Specification of an Addressing Scheme . . 11
5. Mbus Command Classes . . . . . . . . . . . . . . . . . 12
5.1 Remote Commands . . . . . . . . . . . . . . . . . . . 13
5.1.1 Example for a Command Definition . . . . . . . . . . . 13
5.1.2 Example for an Mbus Interaction . . . . . . . . . . . 14
5.2 RPC-style Commands . . . . . . . . . . . . . . . . . . 14
5.2.1 Invoking Remote Procedures . . . . . . . . . . . . . . 14
5.2.2 Returning Results from Remote Procedure Calls . . . . 15
5.2.3 Example for a Command Definition . . . . . . . . . . . 16
5.2.4 Example for an Mbus Interaction . . . . . . . . . . . 17
5.2.5 RPC Communication with Multiple Entities . . . . . . . 17
5.2.5.1 Anycast . . . . . . . . . . . . . . . . . . . . . . . 17
5.2.5.1.1 Example for an Mbus Interaction . . . . . . . . . . . 18
5.2.5.2 One RPC, more than one Result Command . . . . . . . . 19
5.2.5.2.1 Example for an Mbus Interaction . . . . . . . . . . . 20
5.2.5.3 one RPC, coordinated result . . . . . . . . . . . . . 20
5.2.5.3.1 Example for an Mbus Interaction . . . . . . . . . . . 21
5.3 Transactions . . . . . . . . . . . . . . . . . . . . . 21
5.3.1 Example for a Command Definition . . . . . . . . . . . 23
5.3.2 Example for an Mbus Interaction I . . . . . . . . . . 24
5.3.3 Example for an Mbus Interaction II . . . . . . . . . . 25
5.4 Inspection/Modification of Properties . . . . . . . . 25
5.4.1 Example for a Command Definition . . . . . . . . . . . 27
5.4.2 Example for an Mbus Interaction I . . . . . . . . . . 28
5.4.3 Example for an Mbus Interaction II . . . . . . . . . . 28
5.4.4 Example for an Mbus Interaction III . . . . . . . . . 28
5.5 Event Notifications . . . . . . . . . . . . . . . . . 30
5.5.1 Example for a Command Definition . . . . . . . . . . . 30
5.5.2 Example for an Mbus Interaction . . . . . . . . . . . 30
5.6 Contexts . . . . . . . . . . . . . . . . . . . . . . . 31
5.6.1 Example for a Command Definition . . . . . . . . . . . 31
5.6.2 Example for an Mbus Interaction . . . . . . . . . . . 33
5.7 Status Signaling . . . . . . . . . . . . . . . . . . . 33
5.7.1 Example of a Definition of Status Symbols . . . . . . 34
6. Mbus service models . . . . . . . . . . . . . . . . . 35
6.1 No Control . . . . . . . . . . . . . . . . . . . . . . 36
6.1.1 mbus.register . . . . . . . . . . . . . . . . . . . . 37
6.1.2 mbus.deregister . . . . . . . . . . . . . . . . . . . 37
Kutscher Expires August 15, 2001 [Page 2]
Internet-Draft Mbus Guidelines February 2001
6.1.3 mbus.registered . . . . . . . . . . . . . . . . . . . 38
6.1.4 mbus.get-registered . . . . . . . . . . . . . . . . . 39
6.2 Tight Control . . . . . . . . . . . . . . . . . . . . 39
6.3 Exclusive Tight Control . . . . . . . . . . . . . . . 39
7. Algorithms . . . . . . . . . . . . . . . . . . . . . . 41
7.1 Aggregation of Mbus Addresses . . . . . . . . . . . . 41
7.2 Expansion of Mbus Group Addresses . . . . . . . . . . 41
8. Definition of Constants . . . . . . . . . . . . . . . 42
References . . . . . . . . . . . . . . . . . . . . . . 43
Author's Address . . . . . . . . . . . . . . . . . . . 43
A. Examples for Application Profiles . . . . . . . . . . 44
A.1 Mbus Profile for RTP applications . . . . . . . . . . 44
A.1.1 Configuring a RTP engine . . . . . . . . . . . . . . . 44
A.1.1.1 rtp.set-attributes . . . . . . . . . . . . . . . . . . 44
A.1.1.2 Controlling a RTP engine . . . . . . . . . . . . . . . 45
A.1.1.2.1 rtp.source.mute . . . . . . . . . . . . . . . . . . . 45
A.1.1.3 Events generated by a RTP engine . . . . . . . . . . . 45
A.1.1.3.1 rtp.source.exists . . . . . . . . . . . . . . . . . . 45
A.1.1.3.2 rtp.source.left . . . . . . . . . . . . . . . . . . . 46
A.1.1.3.3 rtp.source.attributes . . . . . . . . . . . . . . . . 46
A.1.1.3.4 rtp.source.reception . . . . . . . . . . . . . . . . . 47
A.1.1.3.5 rtp.source.packet.loss . . . . . . . . . . . . . . . . 47
A.1.1.3.6 rtp.source.active . . . . . . . . . . . . . . . . . . 48
A.1.1.3.7 rtp.source.inactive . . . . . . . . . . . . . . . . . 48
A.1.1.3.8 rtp.source.packet.duration . . . . . . . . . . . . . . 48
A.1.1.3.9 rtp.source.codec . . . . . . . . . . . . . . . . . . . 49
A.1.1.3.10 rtp.source.playout . . . . . . . . . . . . . . . . . . 49
Full Copyright Statement . . . . . . . . . . . . . . . 50
Kutscher Expires August 15, 2001 [Page 3]
Internet-Draft Mbus Guidelines February 2001
1. Introduction
[1] specifies the Mbus transport protocol. This includes the basic
protocol behaviour, representation of PDUs and PDU elements and
operational aspects, such as Mbus configuration. This base
specification can be used to implement the Mbus protocol. Specific
Mbus command sets are not defined in this specification -- they are
expected to be defined in application specific documents.
This document builds on the basic transport specification and tries
to give useful recommendations for writers of Mbus application
profiles in the following areas:
Terminology: We propose common Mbus related terms in order to unify
the terminology used in Mbus application profiles.
Algorithms: A set of algorithms are given that are useful for Mbus
implementors.
Notation Conventions: We propose a set of conventions that can be
used for writing Mbus application profiles, such as
recommendations how to specify the characteristics of an Mbus
command etc.
Representation Conventions: Building upon the representation of
values given in the Mbus transport specification we define
additional representations for more complex data types.
Interaction Models: The transport specification essentially defines
one interaction model for the Mbus: Message passing (with support
for group communication). In this document we propose conventions
for additional interaction models that can be implemented with
the basic Mbus message passing mechanisms.
Kutscher Expires August 15, 2001 [Page 4]
Internet-Draft Mbus Guidelines February 2001
2. Terminology
This section defines some Mbus related terms.
Application profile: A specification of Mbus commands, their
semantics and characteristics for a specific application context.
Fully qualified Mbus address: A unique, fully qualified Mbus address
that denominates exactly one concrete existing Mbus entity at a
given time and can thus not be expanded further.
Addressing scheme: A set of Mbus address key and possible address
values. An Mbus application profile defintion SHOULD contain a
specification of a corresponding addressing scheme.
Kutscher Expires August 15, 2001 [Page 5]
Internet-Draft Mbus Guidelines February 2001
3. General Mbus Command Definition Conventions
This section gives some general recommendations how to specify Mbus
commands and their parameter lists and how to represent certain data
types using Mbus parameter types.
3.1 Conventions for parameter encoding
This section list some useful conventions for encoding values of
commonly used parameter types.
pair: A pair is a list that has exactly two elements, not
necessarily of the same type.
map: A map is a list of pairs where the first element of all pairs
(the keys) is of type T1 and the second element of all pairs
(values) is of type T2. A key value may occur only once. T1 and
T2 may be equal. The map is specified as "map of (T1,T2)".
MbusAddressElement: A Mbus address element is represented as a pair
of strings: The first element represent the address element key
and the second element represents the address element value.
MbusAddress: A Mbus address is represented as a list of
MbusAddressElements, a map of (string,string).
3.2 Parameter Specification for Mbus Commands
This section lists some guidelines how parameters of Mbus commands
should be specified in Mbus application profiles.
1. Each parameter SHOULD be associated with a well-defined Mbus
parameter type, i.e., one of the types specified in [1].
2. Homogeneous lists (i.e. lists that contain elements that are all
of the same type) SHOULD be declared by specifying the element
type, for example "list of string".
3. For heterogeneous lists the type of each element SHOULD be
specified.
4. In the case an optional parameter list is allowed, it SHOULD be
the last parameter and a list of the potential parameters and
their name tags SHOULD be given.
See Section 3.2.1 for recommendations how to specify and use
optional parameters.
Kutscher Expires August 15, 2001 [Page 6]
Internet-Draft Mbus Guidelines February 2001
3.2.1 Optional parameters
Some Mbus command argument lists may be of variable length, i.e.,
some parameters may be optional. The following conventions are
proposed for optional parameters:
o An argument list can have elements that are "optional argument
lists". The elements of those lists are pairs: Each first element
is of type String and represents a name for an optional
parameter. Each second element is the value and can be of
arbitrary type. This allows applications to process optional
parameters independent of their order even when some parameters
are missing.
o A command specification may have a set of predefined optional
parameters. In a command definition, these SHOULD be declared by
listing the names and type definitions. If applicable, naming
conventions for further parameters SHOULD be specified, for
example to distinguish different classes of optional parameters.
o If a command definition requires optional parameters it SHOULD
provide exactly one optional parameters list. It is RECOMMENDED
that the optional parameter list be the last element of the
command's parameter list, as shown in Section 3.2.1.2.
Kutscher Expires August 15, 2001 [Page 7]
Internet-Draft Mbus Guidelines February 2001
3.2.1.1 Example of a Definition of an Optional Parameter List
tools.foo.bar
Remote command (reliable/unreliable)
Parameters:
p1: string
p1 is the value for...
p2: int
p2 is the number of...
p3: list of string
a list of names for...
Optional Parameters:
p4: string
the optional name of...
p5: string
the optional number of...
3.2.1.2 Example for an Mbus Command with an Optional Parameter
Entity A: ---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine) ()
tools.foo.bar ("gg" 17 ("a" "b") ("p5" 42))
Kutscher Expires August 15, 2001 [Page 8]
Internet-Draft Mbus Guidelines February 2001
4. Usage of Mbus Addresses
Mbus addresses are lists of arbitrary key/value pairs and every Mbus
entity can choose its own Mbus address. Target Mbus addresses can be
partly qualified to allow for group addressing or selecting
receivers by certain application specific key elements that
represent a certain application or service type. Except for the
mandatory id-element the Mbus transport specification [1] does not
define any other elements and it is suggested that Mbus application
profile definitions specify a set of useful address element names
and values for a specific application context.
Example of a fully qualified Mbus address and three partly qualified
Mbus addresses:
(conf:test media:audio module:engine app:rat id:4711-1@192.168.1.1)
(media:audio module:engine)
(module:engine)
()
These address elements might be used to offer a particular service
to other entities and to disambiguate entities sufficiently. Address
elements might also be used to express membership of a certain Mbus
address group. When it is known that an entity will always send
certain messages to a specific address group, an entity will have to
provide the corresponding address elements (with proper keys and
values) to become a member of that group. This depicts the following
uses of Mbus address elements:
1. to signal affiliation to an application context
2. to offer a certain service
3. to receive messages for a certain subgroup (to "tune" to a
specific sub-channel on the Mbus)
It is possible that for a given application context not every
address element is to be used by every involved Mbus entity. Instead
some elements (or values) might be reserved for use by "service
providing entities" while others might be required in order to
receive messages that are addressed to a certain subgroup.
Moreover it should be noted that it may make sense for entities to
adopt more than one command profile and thus make use of more than
one addressing scheme. An entity could provide all address elements
that are required by command profile A and additionally provide all
the required element for profile B.
In the following a list of guidelines is presented how to specify an
Kutscher Expires August 15, 2001 [Page 9]
Internet-Draft Mbus Guidelines February 2001
Mbus addressing scheme for an Mbus profile definition.
A Mbus profile definition SHOULD be a sufficiently self-contained
specification of Mbus commands for a particular application area
together with a specification of an addressing model for Mbus
entities that are supposed to implement or use the commands. It
SHOULD be clear which commands belong to an application profile
definition and what addressing conventions are to be considered.
The following specifies how addressing conventions SHOULD be
defined:
1. List the address element keys that are used.
2. List (or describe) the set of legal values for each element key
and explain the semantics (if applicable).
3. Name the services (or mandatory commands) that an entity
providing certain address element keys/values must
provide/understand.
4. Give examples for complete Mbus addresses using the defined
address elements.
5. For each command that is specified in the profile definition
explain the relation to the address elements. ("This command is
sent to the group xy." or "This command must be understood by
every entity that provides the address element xy:z.")
4.1 Example of a Specification of an Addressing Scheme
TBD
Kutscher Expires August 15, 2001 [Page 10]
Internet-Draft Mbus Guidelines February 2001
5. Mbus Command Classes
The general semantic model for Mbus commands is that commands are
sent as payload of messages from one peer to another receiving
(group of) peer(s) in order to trigger some kind of operation on the
receiving side. On a low level of abstraction every Mbus command can
be modeled like this. However on a higher level of abstraction some
classes of commands can be identified that are used to implement
specific Mbus communication scenarios. The following list decribes
these command classes briefly:
Remote commands: Remote commands are used to trigger an asynchronous
operation on the target system. The command has a name that is
associated with a certain operation on the receiving side and can
be sent together with a list of arguments (that can be empty)
that are interpreted by the receiver. The name and the type
definition of the command are specified in application semantics
definition document. See Section 5.1 for a detailed discussion of
generic remote commands.
RPC-style commands: RPC-commands allow to associate an operation at
an remote entity with an Mbus command and SHOULD be used when a
caller expects a result message from the callee that can return
result parameters of the remote procedure/function call.
Different types of RPC-commands are defined in this
specification. See Section 5.2 for a detailed discussion of
RPC-style commands.
Transactions: Transaction-style commands are similar to remote
commands because they are also used to trigger a remote
operation. Additionally transactions are used in scenarios where
the caller is interested in how/whether the remote operation has
been performed. In general, characteristics of transactions are
atomicity (recoverability), consistency, isolation
(serializability) and durability. This specification defines
procedures for atomic transactions. Consistency, isolation and
durability are to be provided by the Mbus application themselves.
See Section 5.3 for a detailed discussion of transactions.
Properties: Obtaining the value of a named property of another Mbus
entity is a variant of an RPC-style command: One command is sent
that represent a query and one command is returned to the caller
that contains the value. Setting the value of a named variable is
a simple remote command with a parameter for the new value. See
Section 5.4 for a detailed discussion of commands related to
property inspection and manipulation.
Event notification: An entity that frequently sends messages to
inform other entities of certain events sends a command for each
Kutscher Expires August 15, 2001 [Page 11]
Internet-Draft Mbus Guidelines February 2001
state change (or after a certain interval) to a (group of)
receiver(s). These commands are similar to the simple remote
commands because they are also sent asynchronously. See Section
5.5 for a detailed discussion of event notification.
Contexts: Instead of short time interactions between entities that
can be accomplished by RPCs and other command classes contexts
allow for more persistent relationships between entities.
Contexts are scopes for coherent commands that are to be
exchanged within a long-term interaction. Contexts provide the
service of assigning a name to an interaction context that allows
to disambiguate Mbus interactions that use the same commands but
refer to different contexts at the same time. See Section 5.6 for
a detailed discussion of contexts.
The following sections specify useful procedures that SHOULD be
considered when defining Mbus command sets that contain commands of
the aforementioned classes:
5.1 Remote Commands
Simple remote commands (that do not belong to any of the other
classes) require no special procedures or conventions besides the
general recommendations for Mbus command definitions: They SHOULD be
defined in a self-contained profile definition, their applicability,
the command name and the command arguments SHOULD be documented like
proposed in Section 3.2.
5.1.1 Example for a Command Definition
tools.foo.bar
Remote command (reliable/unreliable)
Parameters:
p1: string
p1 is the value for...
p2: int
p2 is the number of...
p3: list of string
a list of names for...
Optional parameters: none
Kutscher Expires August 15, 2001 [Page 12]
Internet-Draft Mbus Guidelines February 2001
5.1.2 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine) ()
tools.foo.bar ("gg" 17 ("a" "b"))
Entity B:
---------
"mbus/1.0" 42 65454365 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.ok ()
5.2 RPC-style Commands
RPC-style commands are implemented by a command-pair: One command
(with arguments) for triggering the remote procedure call and one
command for the result. There are RPCs for Mbus "point-to-point"
communication and RPC for Mbus group communications. The following
conventions are proposed:
5.2.1 Invoking Remote Procedures
o No restriction is imposed on the command name. The class of the
command ("RPC") SHOULD be mentioned in the command definition.
o The first argument of a RPC command SHOULD be a map of
(string,string) (see Section 3.1) and contain meta information.
The map SHOULD contain an element with the key "ID". The
corresponding value is an arbitrary RPC ID that SHOULD be unique
for the calling entity. For point-to-point RPCs (see Section
5.2.5 for RPCs to groups of entities) the meta information map
SHOULD also contain an element with key "RPC-TYPE" and value
"UNICAST". It is RECOMMENDED that unicast RPCs be sent using
reliable Mbus messages. Multicast RPCs are defined in Section
5.2.5.
o The second argument of a RPC command is of type list and contains
an arbitrary number of RPC parameters. The syntax and the
semantics of this list SHOULD be defined in the definition of the
RPC command.
Kutscher Expires August 15, 2001 [Page 13]
Internet-Draft Mbus Guidelines February 2001
5.2.2 Returning Results from Remote Procedure Calls
o The names of commands for returning RPC result are constructed
using the name of the trigger command and appending the string
".return".
o The first argument of a RPC return command is a map of
(string,string) for meta information that contains the following
information:
The original RPC ID that has been generated by the calling
entity;
Another element with the key of "RPC-STATUS" SHOULD have one
of the following values:
OK: The procedure has been called.
UNKNOWN: No operation is associated with the RPC command. The
command is unknown to the callee.
The RPC-STATUS parameter is used to signal the generic RPC
status and can be used to acknowledge the call of the
specified RPC.
o The second argument of a RPC return command is of type list and
contains a list of return parameters. It is RECOMMENDED that the
first element of this list be of type list, containing
application specific status information.
o The second element SHOULD be of type list and contain further
application specific return parameters. The syntax and the
semantics of this list SHOULD be defined in the definition of the
RPC command.
o The application specific status information list SHOULD contain:
An identifier (type symbol) that signals the general result
(successful or unsuccessful operation) of the RPC. The
possible values are "OK" and "FAILED".
An identifier (type symbol) that represents the application
specific result status of the procedure call. The set of
symbols SHOULD be specified in the definition of the RPC.
A textual description of the status (type string).
If the general result of the RPC is "FAILED" the further
parameters may be omitted although they have been specified in
Kutscher Expires August 15, 2001 [Page 14]
Internet-Draft Mbus Guidelines February 2001
the RPC definition.
5.2.3 Example for a Command Definition
The meta information list (for ID and RPC-TYPE) and the application
status list does not have to be provided in RPC command definitions.
tools.foo.bar
RPC
p1: string
p1 is the value for...
p2: int
p2 is the number of...
p3: list of string
a list of names for...
optional parameters: none
The following application specific result states are defined:
BAR_COMPLETED The bar operation has been called successfully.
NO_SUCH_P1 The p1 parameter is invalid.
FOO_CRASH The foo module crashed during the execution of bar.
return parameters:
r1: int
the value of...
Kutscher Expires August 15, 2001 [Page 15]
Internet-Draft Mbus Guidelines February 2001
5.2.4 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar ((("ID" "123") ("RPC-TYPE" "UNICAST")) \
("gg" 17 ("a" "b")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK BAR_COMPLETED "Success!") (1)))
5.2.5 RPC Communication with Multiple Entities
Different scenarios for RPCs that are addressed to groups of
entities are defined:
anycast
A sender sends an RPC message to a group of entities and wants
exactly one of the entities to perform the operation and return
results.
one RPC, more than one result command
A sender sends an RPC message to a group of entities and wants
each entity to perform the operation and to return a result.
one RPC, coordinated result
A sender sends a RPC message to a group of entities and expects
each entity to perform the operation but only one result messages
that represents all results of the addressed group.
5.2.5.1 Anycast
The following conventions are proposed for anycast RPCs:
The sender uses a group address as the Mbus target address of the
RPC message using unreliable Mbus message transport.
The command meta-information list SHOULD provide an entry with
key "RPC-TYPE" and value "ANYCAST".
Those of the receiving entities that want to respond to the RPC
Kutscher Expires August 15, 2001 [Page 16]
Internet-Draft Mbus Guidelines February 2001
and are able to perform the requested operation return a
"standby" command in order to signal their disposition to provide
the service. The name of the command is the RPC command name
concatenated with ".standby". The first argument is again a
meta-information list that contains the original RPC-ID. The
target address of this command is an aggregate of the sender
address and the target addres of the RPC und MUST therefore be
sent unreliably. See Section 7.1 for a description of an address
aggregation algorithm.
After a timeout T_anycast (Section 8) the entity that originally
sent the RPC message selects one of the entities that answered
with a "standby" command and sends it the RPC again (in a new
message). This message MUST be sent using reliable Mbus message
transport. The meta-information list of the command contains an
additional entry with a key "REFERENCE". The value is the
sequence number of the received standby message.
The entity that receives the second RPC message now operates as
specified for the regular unicast RPC case.
5.2.5.1.1 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(module:engine) ()
tools.foo.bar ((("ID" "123") ("RPC-TYPE" "ANYCAST")) ("gg" 17 ("a" "b")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
() ()
tools.foo.bar.standby ((("ID" "123")))
Entity C:
---------
"mbus/1.0" 83 65454366 U (app:xy module:engine id:4713-1@192.168.1.1) \
() ()
tools.foo.bar.standby ((("ID" "123")))
Entity A:
---------
Kutscher Expires August 15, 2001 [Page 17]
Internet-Draft Mbus Guidelines February 2001
"mbus/1.0" 43 65454367 U (app:foo module:gui id:4711-1@192.168.1.1) \
(app:xy module:engine id:4713-1@192.168.1.1) ()
tools.foo.bar ((("ID" "123") ("RPC-TYPE" "ANYCAST") ("REFERENCE" 83)) \
("gg" 17 ("a" "b")))
Entity C:
---------
"mbus/1.0" 84 65454368 U (app:xy module:engine id:4713-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK BAR_COMPLETED "Success!") (1)))
5.2.5.2 One RPC, more than one Result Command
The following conventions are proposed for RPCs that are sent to a
group of entities where each entity responds independently:
The sender uses a group address as the Mbus target address of the
RPC message.
The command meta-information list SHOULD provide an entry with
key "RPC-TYPE" and value "MULTICAST".
The sending entity sends the RPC in a message addressed to an
Mbus address group using unreliable Mbus message transport and
calculates the set of real Mbus addresses (see Section 2) of the
entities that are enclosed in the destination address group. See
Section 7.2 for an algorithm for expanding Mbus group addresses
to real Mbus addresses.
The receiving entities operate as specified for the regular
unicast RPC case, i.e. they try perform the operation and report
the results to the sender of the RPC. The destination address of
the result message MUST be the address of the RPC's sender. The
message MUST be sent reliably.
After an application dependent timeout the entity that originally
sent the RPC evaluates the received results: If all entities
return a RPC-STATUS of "OK" the RPC can be considered successful.
The procedure of how return parameters are gathered, collapsed
and presented to the user is application/implementation specific.
Kutscher Expires August 15, 2001 [Page 18]
Internet-Draft Mbus Guidelines February 2001
5.2.5.2.1 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(module:engine) ()
tools.foo.bar ((("ID" "123") ("RPC-TYPE" "MULTICAST")) ("gg" 17 ("a" "b")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK BAR_COMPLETED "Success!") (1)))
Entity C:
---------
"mbus/1.0" 83 65454366 U (app:xy module:engine id:4713-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK BAR_COMPLETED "Success!") (2)))
5.2.5.3 one RPC, coordinated result
The following conventions are proposed for RPCs that are sent to a
group of entities where each entity performs the operation but only
one result messages that represents all results of the addressed
group is sent to the original sender of the RPC:
The sender uses a group address as the Mbus target address of the
RPC message.
The command meta-information list SHOULD provide an entry with
key "RPC-TYPE" and value "COORDINATED".
The sending entity sends the RPC in a message addressed to an
Mbus address group using unreliable Mbus message transport.
The receiving entities try to perform the operation and then send
intermediate result commands to the RPC destination group. After
a timeout T_Coordination one entity aggregates all intermediate
results and sends an aggregated RPC-result message to the
original sender. The coordination process and the procedure how
to decide which entity reports the gathered results is yet TBD.
Kutscher Expires August 15, 2001 [Page 19]
Internet-Draft Mbus Guidelines February 2001
:-(
5.2.5.3.1 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(module:engine) ()
tools.foo.bar ((("ID" "123") ("RPC-TYPE" "COORDINATED")) ("gg" 17 ("a" "b")))
TBD...
5.3 Transactions
Transactions are implemented by defining a command that triggers an
operation and an additional acknowledgement command that is sent
after the operation has completed (or failed). Acknowledgement
commands MUST refer to the initial trigger command and this relation
is expressed by a special reference parameter that is generated by
the caller. Note that the acknowledgement command is different from
acknowledgments on the Mbus transport level: Those only ensure that
messages are really received by the addressees, whereas transaction
acknowledgments inform the original caller about the result of a
certain operation that the callee should have performed upon
reception of the transaction command.
Transaction commands are only allowed for unicast messages, they may
not be sent to address groups. They MUST be sent using reliable Mbus
messages. Senders of transaction commands are called clients,
receivers of transaction commands are called servers.
After a sender (a client) has initiated a transaction with the
respective transaction command (see below) it may abort (rollback)
the transaction with a dedicated command (see below) or finally
commit the transaction using another dedicated command.
It should be noted that means for concurrency control, e.g., to
achieve consistency in the presence of parallel transactions, have
to be provided by the application itself and is not part of these
conventions.
The following conventions for transaction commands are proposed:
o There are no restrictions on naming transaction commands. Any
command in an Mbus command hierarchy can be used for triggering
transactions. The class of the command ("TRANSACTION") SHOULD be
mentioned in the command definition.
Kutscher Expires August 15, 2001 [Page 20]
Internet-Draft Mbus Guidelines February 2001
o The first argument of a transaction command SHOULD be a map of
(string,string) (see Section 3.1) and contain meta information.
The map SHOULD contain an element with the key "ID". The
corresponding value is an arbitrary transaction ID that SHOULD be
unique for the calling entity.
o The second argument of a transaction command is of type list and
contains an arbitrary number of transaction parameters. The
syntax and the semantics of this list SHOULD be defined in the
definition of the transaction command.
o After a transaction command has been sent the sender can either
cancel or commit the transaction: A transaction cancel command
has the original transaction command name plus an appended
".cancel" as a command name and the original transaction id as a
meta information parameter. A receiver SHOULD cancel or rollback
any actions initiated by the original transaction message after
receiving a transaction cancellation and delete any state related
to the transaction. A transaction commit command has the original
transaction command name plus an appended ".commit" as a command
name and the original transaction id as a meta information
parameter. A receicing entity SHOULD finish outstanding action
initiated by the original transaction command after receiving a
transaction commit command and delete any state related to the
transaction. After a commit has been received cancel commands for
the corresponding transaction MUST NOT be honoured anymore.
o After receiving a transaction command an entity responds with an
acknowledgement. Acknowledgment command names are constructed
using the name of the trigger command and appending the string
".ack". The first argument of a transaction acknowledgement
command is of type "String" and contains the original transaction
ID that has been generated by the calling entity. Any action that
is performed MUST be reversible and SHOULD only be executed in
non-reversible way after a commit command has been received for
the corresponding transaction. If a cancel command for the
corresponding transaction has been received before a commit
command the entity SHOULD rollback any performed actions.
o The second argument of a transaction acknowledgement command is
of type "Symbol" and can have one of the following values:
OK: The transaction was successful.
UNKNOWN: No operation is associated with the transaction command.
The command is unknown to the callee.
FAILED: The transaction could not be performed successfully.
Kutscher Expires August 15, 2001 [Page 21]
Internet-Draft Mbus Guidelines February 2001
CANCELLED: The transaction has been cancelled.
o Further information about the transaction status can be supplied
optionally and can be passed in a common optional command list
(see Section 3.2.1).
o After a server has received a commit command for a transaction it
SHOULD respond with an additional acknowledgement command. For
clarity the command name for this command is composed of the name
of the original command and an appended ".completed". The
parameters are the same as for the first acknowledgement.
5.3.1 Example for a Command Definition
The meta information list (for the transaction ID) does not have to
be provided in transaction command definitions.
tools.foo.bar
TRANSACTION
Parameters:
p1: string
p1 is the value for...
p2: int
p2 is the number of...
p3: list of string
a list of names for...
Optional parameters: none
Kutscher Expires August 15, 2001 [Page 22]
Internet-Draft Mbus Guidelines February 2001
5.3.2 Example for an Mbus Interaction I
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar ((("ID" "123")) ("gg" 17 ("a" "b")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.ack ("123" OK)
Entity A:
---------
"mbus/1.0" 43 65454367 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.commit ((("ID" "123")))
Entity B:
---------
"mbus/1.0" 58 65454368 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.completed ("123" OK)
Kutscher Expires August 15, 2001 [Page 23]
Internet-Draft Mbus Guidelines February 2001
5.3.3 Example for an Mbus Interaction II
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar ((("ID" "123")) ("gg" 17 ("a" "b")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.ack ("123" OK)
Entity A:
---------
"mbus/1.0" 43 65454367 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.cancel ((("ID" "123")))
Entity B:
---------
"mbus/1.0" 58 65454368 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.completed ("123" CANCELLED)
5.4 Inspection/Modification of Properties
Obtaining the value of a named property of another entity is
achieved by using a set of RPC-style commands (see Section 5.2):
RPCs are defined for setting, obtaining and "watching" values of
properties. The following conventions are proposed:
o No restriction is imposed on the property's name. Entities can
use any command to transmit a new value for a certain property.
The Mbus command name is the property name. In a profile
definition a property SHOULD be classified as ("PROPERTY") which
means that it is possible for other entities to set/retrieve its
value (see below). Additionally the type of the property SHOULD
be specified using the syntax specified in Section 3.2.
o In order to obtain the value of a certain property that is
Kutscher Expires August 15, 2001 [Page 24]
Internet-Draft Mbus Guidelines February 2001
managed by another Mbus entity a module sends a "get-request" RPC
to the respective entity. The command name of this RPC is
composed of the property name and ".get". The RPC argument list
is empty. Upon receiving a get-request an entity hosting the
property returns a RPC result command to the requesting entity.
The (only) RPC argument is the current value. Application
specific status values (Section 5.2) for the return command of a
get-RPC are:
OK: Property exists.
NO_SUCH_PROPERTY: The requested property does not exist.
o In order to change the value of a certain property that is
managed by another Mbus entity a module sends a "set-request" RPC
to the respective entity. The command name of this RPC is
composed of the property name and ".set". The (only) RPC argument
is the new value. Upon receiving a set-request an entity hosting
the property changes the value and returns a RPC result command
to the requesting entity. The (only) RPC argument is the new
value. Application specific status values (Section 5.2) for the
return command of a set-RPC are:
OK: Property exists and has been updated.
NO_SUCH_PROPERTY: The requested property does not exist.
o Besides get-requests clients can also use "watch-requests" to
obtain the value of properties. watch-requests can be sent if an
entity wants to be informed about any updates to the property
value. The RPC command name of this request is composed of the
variable name and ".watch". The RPC argument list is empty. Upon
receiving a watch-request an entity that hosts the property adds
the originating entity to a list of subscribers for the property
variable and will further on send an update to all list members
when the value of the property changes. The current value of the
property is sent to the originator of the watch-request in a RPC
return command. The updates are event notificatons as specified
in Section 5.5, i.e., simple Mbus commands with the property name
as the command name and the current value as the only parameter.
Application specific status values (Section 5.2) for the return
command of a watch-RPC are:
OK: Property exists and the requesting entity has been added to
the list of subscribers.
NO_SUCH_PROPERTY: The requested property does not exist.
o A subscriber of a property can also send an "unwatch-request" RPC
Kutscher Expires August 15, 2001 [Page 25]
Internet-Draft Mbus Guidelines February 2001
to unsubscribe. The command name of this request is composed of
the property name and ".unwatch". The argument list is empty. The
RPC return command also requires no further RPC parameter.
Application specific status values (Section 5.2) for the return
command of a uwatch-RPC are:
OK: Property exists and the requesting entity has been removed
from the list of subscribers.
NO_SUCH_PROPERTY: The requested property does not exist.
NOT_SUBSCRIBED The requesting entity is not on the list of
subcribers for this property.
Entities that have been declared to provide a property, e.g., in a
profile definition, SHOULD support all aforementioned requests.
All requests related to properties MUST be send as unicast RPCs.
Notes:
Requests for non-existing properties result in a RPC-UNKNOWN error
(see Section 5.2).
5.4.1 Example for a Command Definition
The RPC commands for the different property request do not have to
be specified.
tools.foo.bar
PROPERTY
type: string
Kutscher Expires August 15, 2001 [Page 26]
Internet-Draft Mbus Guidelines February 2001
5.4.2 Example for an Mbus Interaction I
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.get ((("ID" "123") ("RPC-TYPE" "UNICAST")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.get.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK OK "") ("the value")))
5.4.3 Example for an Mbus Interaction II
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.set ((("ID" "123") ("RPC-TYPE" "UNICAST")) \
((OK OK "") ("the value")))
Entity B:
---------
"mbus/1.0" 57 65454366 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.set.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK OK "") ("new value")))
5.4.4 Example for an Mbus Interaction III
Entity A:
---------
"mbus/1.0" 42 65454365 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.watch ((("ID" "123") ("RPC-TYPE" "UNICAST")))
Entity B:
---------
Kutscher Expires August 15, 2001 [Page 27]
Internet-Draft Mbus Guidelines February 2001
"mbus/1.0" 57 65454366 R (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.watch.return ((("ID" "123") ("RPC-STATUS" "OK")) \
((OK OK "") ("the value")))
Entity C:
---------
"mbus/1.0" 82 65454367 R (app:bar module:engine id:4713-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.set ((("ID" "345") ("RPC-TYPE" "UNICAST")) \
((OK OK "") ("new value")))
Entity B:
---------
"mbus/1.0" 58 65454368 R (app:foo module:engine id:4712-1@192.168.1.1) \
(app:bar module:engine id:4713-1@192.168.1.1) ()
tools.foo.bar.set.return ((("ID" "345") ("RPC-STATUS" "OK")) \
((OK OK "") ("new value")))
Entity B:
---------
"mbus/1.0" 59 65454369 U (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar ("new value")
Entity A:
---------
"mbus/1.0" 43 65454370 R (app:foo module:gui id:4711-1@192.168.1.1) \
(app:foo module:engine id:4712-1@192.168.1.1) ()
tools.foo.bar.unwatch ((("ID" "124") ("RPC-TYPE" "UNICAST")))
Entity B:
---------
"mbus/1.0" 60 65454371 R (app:foo module:engine id:4712-1@192.168.1.1) \
(app:foo module:gui id:4711-1@192.168.1.1) ()
tools.foo.bar.unwatch.return ((("ID" "123") ("RPC-STATUS" "OK")))
Kutscher Expires August 15, 2001 [Page 28]
Internet-Draft Mbus Guidelines February 2001
5.5 Event Notifications
There are different usage scenarios for events that origin at a
certain entity and need to be signaled to other entities. An event
notification is an Mbus command with an arbitrary argument list that
is sent (eventually, maybe periodically) to a group of entities. The
following conventions are proposed:
o No restriction is imposed on the name of the notification
command. In a profile definition a command SHOULD be classified
as ("EVENT NOTIFICATION").
o A command that is classified as an event notification SHOULD also
be associated with a default target address that is used when the
notification command is sent.
See Section 6 for conventions of how to subscribe to and how to
redirect event notifications.
5.5.1 Example for a Command Definition
tools.foo.bar
EVENT NOTIFICATION
default target address: (app:xy module:gui)
Parameters:
p1: string
p1 is the value for...
p2: int
p2 is the number of...
p3: list of string
a list of names for...
5.5.2 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:foo module:gui id:4711-1@192.168.1.1) \
(app:xy module:gui) ()
tools.foo.bar ("gg" 17 ("a" "b"))
Kutscher Expires August 15, 2001 [Page 29]
Internet-Draft Mbus Guidelines February 2001
5.6 Contexts
RPCs can be used to trigger a remote operation with the possibility
to obtain results from a single operation thus representing a short
time interaction between two or more Mbus entities. Sometimes there
is the need for more persistent interaction relations between
entities, for example, when a series of commands all refer to the
same context. The command category "contexts" allows for expressing
a long-term relationship between commands that are exchanged by Mbus
entities.
The model that is used here is the concept of a specific context in
which a sequence of Mbus commands are exchanged that relate to each
other and are originated by entities of a group of Mbus entities.
The context that provides a scope for Mbus commands is identified by
a unique id that is used in all commands belonging to the context.
Contexts can start to exist (they can be created) and cease to exist
(destructed). Mbus commands for context creation and destruction
will be defined below.
Only certain specified commands are valid within a context. An Mbus
context definition specifies these commands and their semantics.
Context commands are either RPC commands (see Section 5.2) or event
notifications that provide the context-id in the meta information
parameter (key="CONTEXT-ID"). The subsequent argument of a context
command is of type list and contains an arbitrary number of
parameters. The syntax and the semantics of this list SHOULD be
specified in the definition of the command.
The name of a context is an Mbus command prefix. Command names for
construction and destruction commands as well as other context
commands are derived from the context name by appending a dot and
the name of the method. The name of the construction command is
CONTEXT_NAME.create and the name of the destruction command is
CONTEXT_NAME.delete. Both are "simple" Mbus commands (remote
commands) with one parameter: the context-id as a parameter of type
string.
CONTEXT_NAME.create and CONTEXT_NAME.delete can be sent to single
Mbus entities as well as to group of entities using a Mbus group
address. It is RECOMMENDED that context-creation/deletion messages
to single entities be sent reliable. Only the creator of a context
(the entity that has sent the CONTEXT_NAME.create message) SHOULD
delete the corresponding context.
5.6.1 Example for a Command Definition
The meta information list (for the context ID and eventual RPC or
Kutscher Expires August 15, 2001 [Page 30]
Internet-Draft Mbus Guidelines February 2001
transaction IDs) does not have to be provided in each command
definition in the context definition.
Context "conf.call-ctrl.call"
------------------------
About: This context definition comprehends commands that can be used
for a "call context". The following commands may refer
to different contexts that represent different calls.
The following commands are defined in this context:
conf.call-ctrl.call.setup
RPC
Parameters:
caller: string
identifies the caller
callee: string
identifies the callee
Optional Parameters: none
conf.call-ctrl.call.disconnected
EVENT NOTIFICATION
default target address: (app:controller)
Parameters:
reason: string
the reason for the disconnection
Optional Parameters: none
Kutscher Expires August 15, 2001 [Page 31]
Internet-Draft Mbus Guidelines February 2001
5.6.2 Example for an Mbus Interaction
Entity A:
---------
"mbus/1.0" 42 65454365 U (app:controller module:engine id:4711-1@192.168.1.1) \
(app:call-ctrl module:engine id:4712-1@192.168.1.1) ()
conf.call-ctrl.call.create ("345")
Entity A:
---------
"mbus/1.0" 43 65454366 R (app:controller module:gui id:4711-1@192.168.1.1) \
(app:call-ctrl module:engine id:4712-1@192.168.1.1) ()
conf.call-ctrl.call.setup ((("ID" "123") ("CONTEXT-ID" "345")) \
("joe@foo.bar" "bob@foo.bar"))
Entity B:
---------
"mbus/1.0" 57 65454380 U (app:call-ctrl module:engine id:4712-1@192.168.1.1) \
(app:controller) ()
conf.call-ctrl.call.disconnected ((("CONTEXT-ID" "345")) ("hangup"))
Entity A:
---------
"mbus/1.0" 44 65454385 U (app:controller module:engine id:4711-1@192.168.1.1) \
(app:call-ctrl module:engine id:4712-1@192.168.1.1) ()
conf.call-ctrl.call.delete ("345")
5.7 Status Signaling
In order to notify other entities of status events asynchronously,
each Mbus entity SHOULD send such events using the "mbus.status"
command. This command is an event notification as specified in
Section 5.5 and can thus also be given a default target address.
As specified in Section 5.5 the default target address of this
message can be redirected using the "mbus.register" command defined
in Section 6.1.1.
Kutscher Expires August 15, 2001 [Page 32]
Internet-Draft Mbus Guidelines February 2001
mbus.status
EVENT NOTIFICATION
Parameters:
class: symbol
An identifier for the class of the status message.
Predefined identifiers are:
INFO: for informational messages
WARNING: for warnings
ERROR: for error reports
Application profiles can also define new status
message classes.
sym: symbol
An identifier for the status message. Application
profile definitions SHOULD enumerate the possible
status symbols (and their textual description, see
below).
descr: string
A textual description for the status message.
Optional Parameters: none
To be discussed (FIXME): Should mbus.status only be used top-level
or with arbitrary prefixes?
5.7.1 Example of a Definition of Status Symbols
TBD
Kutscher Expires August 15, 2001 [Page 33]
Internet-Draft Mbus Guidelines February 2001
6. Mbus service models
In general, the Mbus is a communication channel for message passing
within a group of modules. Mbus implementations provide mechanisms
to enable applications modules to pass messages to other modules.
From an application point of view the goal of using the Mbus is
using certain services of other entities (or providing these
services).
Each Mbus entity can provide a number of different services: It may
perform certain operations for other entities that are triggered by
the reception of Mbus commands or it may notify one or more entities
of events.
In the simplest case, an entity will simply receive Mbus messages
and perform the operations that are denominated by the commands that
are contained in the messages. Sometimes, however, entities will
only process certain commands if they are are received from an
entity that has registered as a client, e.g. a controller, before.
Entities that are remote-controlled via their Mbus interface could
restrict the number of controlling entities to one (at a time) in
order to ensure consistency. Also, there could be event
notifications that are sent to a certain dedicated controller only,
as well as there can be notifications that can be sent to a group of
receivers, each of which having subscribed to this event source
before. Again, in simple scenarios, entities may just broadcast all
event notifications to the whole Mbus.
It is proposed that all commands, variables, event notifications
that an entity may send or receive in a specific application context
be subsumed in a common Mbus command set definition. Service models
that apply to such a set of Mbus commands SHOULD be specified as
well.
In the following the different service models (control relation
classes) are described in detail and a list of conventions and
recommendations is presented that SHOULD be considered when writing
Mbus command definitions.
Different classes of control relations are defined:
o no control
o tight control
o exclusive tight control
These different classes of control relations are usually applied to
a command set that is implemented by some Mbus entities. It is
Kutscher Expires August 15, 2001 [Page 34]
Internet-Draft Mbus Guidelines February 2001
suggested that a control relation type is assigned to command sets
in the command set definition.
The motivation for defining different service models is to
accommodate different applications with different requirements
concerning flexibility and the level of control for their Mbus
communication.
The next sections specify the semantics and implications of the
individual control classes:
6.1 No Control
"no control" means that entities do not require a special control
relation with another entity to be established in order to accept
commands from it. All Mbus commands, variables etc. of the
respective command set can be used directly and there is no
regulation of the number of entities that may interact using the
respective commands at a time.
A command set that is classified as "no control" may contain
commands for unsolicited event notification or even RPC-style
commands that can be sent by an entity conforming to a specific Mbus
command set definition. These Mbus commands that are originated by a
conforming entity may be addressed to a default target address.
There may be a default target address for all commands of a command
definition set but each command may be associated to a specific
default target address. It is RECOMMENDED that commands of the "no
control" class that may be sent without prior solicitation, such as
event notifications, are assigned a default target address.
The default target address that an entity sends unsolicited commands
to may be changed by other entities. Entities may add themselves to
a list of clients/controllers that is maintained by another service
providing entity. The effect of having the service providing entity
add another entity to a list of clients is that the default target
address is no longer used but the respective messages are directed
to the client entity. If more than one entity tries to add itself to
the target address list it is up to the application to allow or deny
this. Generally, entities of the "no control" class are expected to
accept multiple clients. When multiple clients are present each
message that would otherwise just be sent to the default target
address is sent either to a Mbus group address that uniquely
represents the registered clients or is sent independently to all
clients. Clients may also deregister. When all clients have
deregistered the entity SHOULD use the default target address for
the respective command again.
The changing of the default target address is called redirection.
Kutscher Expires August 15, 2001 [Page 35]
Internet-Draft Mbus Guidelines February 2001
Redirection may take place on single commands or a complete command
set. If a command or a command set use a default target address that
can be redirected by clients it SHOULD be marked as "REDIRECTABLE"
and the default target address SHOULD be given.
Redirection commands belong to the class of RPC-commands. The
following commands are defined (see Section 3.1 for parameter type
definitions):
6.1.1 mbus.register
RPC
Parameters:
command: string
Name of the Mbus command (or command set prefix, MUST be
specified absolutely)
addr: MbusAddress
Mbus address that should be registered.
Optional Parameters: none
Description: This command is sent by an interested client entity to
a service providing entity in order to change its default target
address for the given command (prefix).
Application specific return values
OK: The client has been added to the address list.
NO_SUCH_COMMAND: The command (prefix) that has been given in the
request is unknown.
DENIED: The requesting entity is denied to register the given
command (prefix).
Return parameters:
addr-list: list of MbusAddress
the new list of registered clients.
6.1.2 mbus.deregister
RPC
Parameters:
Kutscher Expires August 15, 2001 [Page 36]
Internet-Draft Mbus Guidelines February 2001
command: string
Name of the Mbus command (or command set prefix, MUST be
specified absolutely)
addr: MbusAddress
Mbus address that should be deregistered.
Optional Parameters: none
Description: This command is sent by a registered client entity to a
service providing entity in order to deregister from a command or
service subscription.
Application specific return values
OK: The client has been removed from the address list.
NO_SUCH_COMMAND: The command (prefix) that has been given in the
request is unknown.
NOT_REGISTERED: The given address has not been registered before
for the command (prefix).
Return parameters:
add-list: list of MbusAddress
the new list of registered clients.
6.1.3 mbus.registered
EVENT NOTIFICATION
Parameters:
string command: Name of the Mbus command (or command set prefix)
list of MbusAddress add-list: Current list of registered clients
Description: This notification is sent by a service providing entity
after a new client has registered for a command (prefix). The
second parameter contains the new list of registered clients for
the given command. The notfication SHOULD be sent to the old list
of clients (or to the default target address if no other clients
have registered before).
Kutscher Expires August 15, 2001 [Page 37]
Internet-Draft Mbus Guidelines February 2001
6.1.4 mbus.get-registered
RPC
Parameters:
command: string
Name of the Mbus command (or command set prefix)
Optional Parameters: none
Description: This command can be used in order to obtain the current
list of registered clients for the specified command (prefix).
Application specific return values
OK: The list of registered clients is provided.
NO_SUCH_COMMAND: The command (prefix) that has been given in the
request is unknown.
Return parameters:
addr-list: list of MbusAddress
the list of registered clients.
6.2 Tight Control
An entity that requires "tight control" for some or all of its Mbus
controllable resources will only accept commands from an entity that
has established a control relationship before. This means that Mbus
commands, variables etc. can only be used by another entity after it
has registered itself as a "controller" at the entity that provides
the resources. Upon this registration the controlled entity adds the
new controller's Mbus address to a controller-address-list that is
used for authorization and for sending event notifications etc.
Another complementary de-registration command enables entitites to
end the control relationship. Again, there is no regulation of the
number of entities that may register themselves as a controller at a
time.
Entities that conform to a command set definition marked as "tight
control" SHOULD not send commands or event notifications to a
default target address for resources of that set.
6.3 Exclusive Tight Control
"Exclusive tight control" has the same semantics as "tight control",
except for the number of controllers at a time: An entity that
Kutscher Expires August 15, 2001 [Page 38]
Internet-Draft Mbus Guidelines February 2001
provides an Mbus command set that has been marked as requiring
exclusive tight control will only accept one controller at a timer
and reject register requests once a control relation with another
entity has been established.
When a register request is received while another entity is
currently registered as a controller the receicing entity SHOULD
return the value "DENIED" (see Section 6.1.1.
Kutscher Expires August 15, 2001 [Page 39]
Internet-Draft Mbus Guidelines February 2001
7. Algorithms
7.1 Aggregation of Mbus Addresses
The following algorithm can be used to aggregate an arbitrary number
of Mbus addresses: (FIX this example code)
template <class Input>
inline MAddress aggregate(Input start, Input end)
{
typedef map<MAddressElement,int> elements;
elements ae;
int count=0;
MAddress res;
// get all address elements:
for(;start!=end;start++) {
count++;
for(MAddress::Const_Iterator ai(*start); ai; ++ai) {
ae[*ai]++; // count occurence of AddressElements
}
}
// keep all Elements that occured in every Address:
elements::const_iterator ei;
for(ei=ae.begin();ei!=ae.end();ei++) {
if(ei->second==count) {
res.setElement(ei->first.key(),ei->first.val());
}
}
return res;
}
7.2 Expansion of Mbus Group Addresses
The following algorithm can be used to expand an Mbus group address
to the set of real Mbus addresses enclosed within the group address.
TBD
Kutscher Expires August 15, 2001 [Page 40]
Internet-Draft Mbus Guidelines February 2001
8. Definition of Constants
The following constants are defined:
T_anycast: N_r * T_r (see [1])
T_Coordindation: 2 * N_r * T_r (see [1])
Kutscher Expires August 15, 2001 [Page 41]
Internet-Draft Mbus Guidelines February 2001
References
[1] Ott, J., Perkins, C. and D. Kutscher, "A Message Bus for Local
Coordination", Internet Draft
draft-ietf-mmusic-mbus-transport-04.txt, February 2001.
[2] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobsen,
"RTP: A Transport Protocol for Real-Time Applications", RFC
1889, January 1996.
Author's Address
Dirk Kutscher
TZI, Universitaet Bremen
Bibliothekstr. 1
Bremen 28359
Germany
Phone: +49.421.218-7595
Fax: +49.421.218-7000
EMail: dku@tzi.org
Kutscher Expires August 15, 2001 [Page 42]
Internet-Draft Mbus Guidelines February 2001
Appendix A. Examples for Application Profiles
A.1 Mbus Profile for RTP applications
This needs to be updated.
The following commands are used to provide information about an RTP
[2] media source. Each source in media sessions is identified by its
SSRC (not by the CNAME, since this would not be unique). Correlation
to CNAMEs for cross-media references (eg: for lip- synchronization)
has to be done by receiving entities.
The purpose of this Mbus profile is to provide a mechanism that
allows for controlling RTP engine. RTP engines are entities that use
an RTP protocol stack to send and receive RTP/RTCP data. This Mbus
profile provide control commands to configure RTP engine and
notification commands to notify interested engine of RTP events.
All commands of this set conform to the control class "exclusive
tight control". The default destination address for event
notifications is ().
It is suggested that RTP engines that support these commands, i.e.
that can be controlled by the RPCs listed below and that can
generate the event notifications, provide the following address
element in their Mbus addresses:
(module:engine)
For all commands, event notifications that carry a SSRC value, the
value is represented as a string in hexadecimal notation.
A.1.1 Configuring a RTP engine
The following commands are used to configure a RTP engine.
A.1.1.1 rtp.set-attributes
rtp.set-attributes (attribute-list)
RPC
This command is used to configure the SSRC and SDES parameters of a
RTP engine.
Parameters:
attribute-list: map of (String,String)
A map containing configuration information. The first element of
each pair is the name of the attribute and the second element of
each pair is the value of the attribute. The following attribute
Kutscher Expires August 15, 2001 [Page 43]
Internet-Draft Mbus Guidelines February 2001
names are defined:
SSRC: The SSRC value to be used by the RTP engine.
NAME: The name of the participant.
PHONE: The phone number of the participant.
LOC: The geographic location of the participant.
TOOL: The application/tool name of the participant.
NOTE: The notice/status item.
CNAME: The canonical end-point identifier for the participant.
If other attribute names than those listed are used they are to
be interpreted as PRIV SDES items (see [2]).
A.1.1.2 Controlling a RTP engine
The following commands are used to control a RTP engine during a RTP
session.
A.1.1.2.1 rtp.source.mute
rtp.source.mute (ssrc muteState)
RPC
The command indicates that a source is to be muted/ unmuted.
Parameters:
ssrc: string
The SSRC value of the participant to be muted/unmuted.
muteState: Integer
The value of the muteState parameter is 0 to indicate unmuted,
and 1 to indicate muted.
A.1.1.3 Events generated by a RTP engine
The following commands are used by a RTP engine to signal source
specific events during a RTP session.
A.1.1.3.1 rtp.source.exists
rtp.source.exists (ssrc validityTime)
EVENT NOTIFICATION
Kutscher Expires August 15, 2001 [Page 44]
Internet-Draft Mbus Guidelines February 2001
The rtp.source.exists command is sent by a media engine to assert
that a particular source is present in a session.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
validityTime: Integer
The validityTime parameter is the time for which that source
should be considered valid, in seconds. If another
rtp.source.exists command has not been received for that source
within this time period, the source is implicitly timed out. The
validityTime SHOULD be three times the RTCP reporting interval
for that session.
A.1.1.3.2 rtp.source.left
rtp.source.left (ssrc)
EVENT NOTIFICATION
The rtp.source.left command is used to indicate that a source has
left the session.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
A.1.1.3.3 rtp.source.attributes
rtp.source.attributes (ssrc attribute-list)
EVENT NOTIFICATION
This event notification is used to pass RTCP SDES information of
other sources from a media engine to a user interface.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
attribute-list: map of (String,String)
A map containing the SDES information. The first element of each
pair is the name of the attribute and the second element of each
pair is the value of the attribute. The same attributes as for
rtp.set-attributes (Appendix A.1.1.1) are defined (except for
SSRC).
Kutscher Expires August 15, 2001 [Page 45]
Internet-Draft Mbus Guidelines February 2001
A.1.1.3.4 rtp.source.reception
rtp.source.reception (ssrc packetsRecv packetsLost packetsMisordered
jitter validityTime)
EVENT NOTIFICATION
This command is used to pass RTCP RR information from a media engine
to a user interface. The total number of packets received, lost and
misordered are sent, together with the network timing jitter in
milliseconds and a validity time for this report in seconds.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
packetsRecv: Integer
Total number of received packets.
packetsLost: Integer
Total number of lost packets.
packetsMisordered: Integer
Total number of misordered packets.
jitter: Integer
Observed jitter in milliseconds.
validityTime: Integer
Validity time in seconds for this report.
A.1.1.3.5 rtp.source.packet.loss
rtp.source.packet.loss (dest_ssrc src_ssrc% validityTime)
EVENT NOTIFICATION
Sent by a media engine to indicate the instantaneous packet loss
observed between two sources. The validityTime for this report is in
milliseconds.
Parameters:
dest_ssrc: string
The ssrc of the receiving participant.
src_ssrc: string
The ssrc of the sending participant.
validityTime: Integer
Kutscher Expires August 15, 2001 [Page 46]
Internet-Draft Mbus Guidelines February 2001
The validityTime for this report is in milliseconds.
A.1.1.3.6 rtp.source.active
rtp.source.active (ssrc validityTime)
EVENT NOTIFICATION
The rtp.source.active notification indicates that a source is
transmitting data into the session. The validityTime field indicates
the period for which this source should be considered active, in
milliseconds.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
validityTime: Integer
The validityTime field indicates the period for which this source
should be considered active, in milliseconds.
A.1.1.3.7 rtp.source.inactive
rtp.source.inactive (ssrc)
EVENT NOTIFICATION
The rtp.source.active notifications indicates that a source has
stopped transmitting data into the session.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
A.1.1.3.8 rtp.source.packet.duration
rtp.source.packet.duration (ssrc packetDuration)
EVENT NOTIFICATION
Sent by a media engine to indicate the duration, in milliseconds, of
packets received from a source. This may be used to control the
duration of packets sent by a media engine, if sent to that engine
with the cname of the engine.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
Kutscher Expires August 15, 2001 [Page 47]
Internet-Draft Mbus Guidelines February 2001
packetDuration: Integer
The duration, in milliseconds, of packets received from a source.
A.1.1.3.9 rtp.source.codec
rtp.source.codec (ssrc codec)
EVENT NOTIFICATION
Sent by a media engine to indicate the codec in use by a source.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
codec: String
The codec name.
A.1.1.3.10 rtp.source.playout
rtp.source.playout (ssrc playoutDelay)
EVENT NOTIFICATION
Sent by a media engine to indicate the playout delay, in
milliseconds, for a source (that is, end-to-end time from capture to
playout). This allows for lip-synchronization between audio and
video streams.
Parameters:
ssrc: string
The ssrc of the source this event notification refers to.
playoutDelay: Integer
playout delay, in milliseconds.
Kutscher Expires August 15, 2001 [Page 48]
Internet-Draft Mbus Guidelines February 2001
Full Copyright Statement
Copyright (C) The Internet Society (2001). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implmentation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph
are included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC editor function is currently provided by the
Internet Society.
Kutscher Expires August 15, 2001 [Page 49]