summaryrefslogtreecommitdiff
path: root/TAO/docs/rtcorba
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:21 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:21 +0000
commit3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c (patch)
tree197c810e5f5bce17b1233a7cb8d7b50c0bcd25e2 /TAO/docs/rtcorba
parent6b846cf03c0bcbd8c276cb0af61a181e5f98eaae (diff)
downloadATCD-3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c.tar.gz
Repo restructuring
Diffstat (limited to 'TAO/docs/rtcorba')
-rw-r--r--TAO/docs/rtcorba/architecture.html117
-rw-r--r--TAO/docs/rtcorba/content.html44
-rw-r--r--TAO/docs/rtcorba/faq.html40
-rw-r--r--TAO/docs/rtcorba/features.html843
-rw-r--r--TAO/docs/rtcorba/index.html23
-rw-r--r--TAO/docs/rtcorba/issues.html231
-rw-r--r--TAO/docs/rtcorba/omg_issues.html103
-rw-r--r--TAO/docs/rtcorba/queue-per-lane.gifbin0 -> 44463 bytes
-rw-r--r--TAO/docs/rtcorba/reactor-per-lane.gifbin0 -> 47879 bytes
-rw-r--r--TAO/docs/rtcorba/status.html131
10 files changed, 1532 insertions, 0 deletions
diff --git a/TAO/docs/rtcorba/architecture.html b/TAO/docs/rtcorba/architecture.html
new file mode 100644
index 00000000000..b06460a079d
--- /dev/null
+++ b/TAO/docs/rtcorba/architecture.html
@@ -0,0 +1,117 @@
+<html>
+
+<!-- $Id$ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>TAO Real-Time Architecture</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body>
+
+<h3 align="center">TAO Real-Time Architecture&nbsp;</h3>
+<p>This page describes and compares the two main ORB designs we considered for
+supporting Real-Time CORBA 1.0 in TAO.&nbsp; The first design, codenamed <i>reactor-per-lane</i>
+and shown in Figure 1, was chosen for our initial implementation.&nbsp; The
+second design, <i>queue-per-lane</i>, might also get implemented in the future,
+as a part of a project evaluating alternative ORB architectures for Real-Time
+CORBA. </p>
+<h3 align="center">Design I: Reactor-per-Lane</h3>
+In this design, each Threadpool Lane has its own reactor, acceptor, connector
+and connection cache.&nbsp; Both I/O and application-level processing for a
+request happen in the same threadpool thread: there are no context switches, and
+the ORB does not create any internal threads.&nbsp; Objects registered with any
+Real-Time POA that does not have the <i>ThreadpoolPolicy</i> are serviced by <i>default
+threadpool</i>, which is a set of of all the application threads that invoked
+<CODE>orb-&gt;run ()</CODE>.
+<p align="center"><img border="0" src="reactor-per-lane.gif" width="407" height="333"></p>
+<p align="center">Figure 1: Reactor-per-lane</p>
+<p>When a Real-Time POA is creating an IOR, it includes one or more of its
+threadpool's acceptor endpoints into that IOR according to the following
+rules.&nbsp; If the POA's priority model is <i>server declared</i>, we use the
+acceptor from the lane whose priority is equal to the priority of the target
+object.&nbsp; If the
+priority model is <i> client propagated,</i> all endpoints from the POA's
+threadpool are included into the IOR.&nbsp; Finally, if the <i>PriorityBandedConnectionPolicy</i>
+is set, then endpoints from the threadpool lanes with priorities falling into one of the specified
+priority bands are selected.&nbsp; The endpoints, selected according to the
+rules above, and their corresponding priorities are stored in IORs using a special
+<i>TaggedComponent </i><CODE>TAO_TAG_ENDPOINTS</CODE>.&nbsp; During each
+invocation, to obtain a connection to the server, the client-side ORB selects
+one of these endpoints based on the effective policies.&nbsp; For example, if the object has
+<i> client propagated</i> priority
+model, the ORB selects the endpoint whose priority is equal to the priority of the client thread making the
+invocation.&nbsp; If on the client-side, during invocation, or on the
+server-side, during IOR creation, an endpoint of the right priority is not available, it
+means the system has not been configured properly, and the ORB throws an exception.&nbsp;
+The design and rules described above ensure that when a threadpool with lanes is
+used, client requests are processed by the thread of desired priority from very
+beginning, and priority inversions are minimized.</p>
+<p>Some applications need less rigid, more dynamic environment.&nbsp; They do
+not have the advanced knowledge or&nbsp; cannot afford the cost of configuring all of the
+resources ahead of time, and have a greater tolerance for priority
+inversions.&nbsp; For such applications, threadpools <i> without</i> lanes are a way to go.&nbsp;
+In TAO, threadpools without lanes have different semantics that their <i>with-lanes</i>
+counterparts.&nbsp; Pools without lanes have a single acceptor endpoint used in
+all IORs, and their threads change priorities on the fly, as necessary, to
+service all types of requests.</p>
+<h3 align="center">Design II: Queue-per-Lane</h3>
+In this design, each threadpool lane has its own request queue.&nbsp; There is a separate
+I/O layer, which is shared by all lanes in all threadpools.&nbsp;&nbsp;The I/O layer has one
+set of resources - reactor, connector, connection cache, and I/O thread(s) - for each priority
+level used in the threadpools.&nbsp; I/O layer threads perform I/O processing
+and demultiplexing,&nbsp; and threadpool threads are used for application-level request
+processing.&nbsp;&nbsp;&nbsp;
+<p align="center"><img border="0" src="queue-per-lane.gif" width="387" height="384"></p>
+<p align="center">Figure 2: Queue-per-lane</p>
+<p>Global acceptor is listening for connections from clients.&nbsp; Once a
+connection is established, it is moved to the appropriate reactor during the
+first request, once its priority is known.&nbsp; Threads in each lane are blocked on
+condition variable, waiting for requests to show up in their queue.&nbsp; I/O
+threads read incoming requests, determine their target POA and its threadpool,
+and deposit the requests into the right queue for processing.&nbsp;&nbsp;</p>
+<h3 align="center">Design Comparison</h3>
+<i>Reactor-per-lane</i> advantages:
+<ul>
+ <li><b>Better performance</b><br>
+ Unlike in <i>queue-per-lane</i>, since each request is serviced in one
+ thread, there are no context switches, and there are opportunities for&nbsp;stack and TSS optimizations.</li>
+ <li><b>No priority inversions during connection establishment</b><i><br>
+ </i>In <i>reactor-per-lane</i>, threads accepting connections are the same
+ threads that will be servicing the requests coming in on those connections, <i>i.e.</i>,
+ priority of the accepting thread is equal to the priority of requests on the
+ connection.&nbsp; In <i>queue-per-lane</i>,
+ however, because of a global acceptor, there is no differentiation between
+ high priority and low priority clients until the first request.</li>
+ <li><b>Control over all threads with standard threadpool API<br>
+ </b>In <i>reactor-per-lane,</i> the ORB does not create any threads of its
+ own, so application programmer has full control over the number and
+ properties of all the threads with the Real-Time CORBA Threadpool
+ APIs.&nbsp; <i>Queue-per-lane</i>, on the other hand, has I/O layer threads,
+ so either a proprietary API has to be added or application programmer will
+ not have full control over all the thread resources..</li>
+</ul>
+<p>
+<i>Queue-per-lane</i> advantages:</p>
+<ul>
+ <li><b>Better feature support and adaptability</b><br>
+ <i>Queue-per-lane</i>&nbsp;supports ORB-level request buffering, while <i>reactor-per-lane</i>
+ can only provide buffering in the transport.&nbsp; With its two-layer
+ structure, <i>queue-per-lane</i> is a more decoupled design than <i>reactor-per-lane</i>,
+ making it easier to add new features or introduce changes&nbsp;</li>
+ <li><b>Better scalability</b>&nbsp;<br>
+ Reactor, connector and connection cache are <i>per-priority</i> resources in
+ <i>queue-per-lane</i>, and <i>per-lane</i> in <i>reactor-per-lane</i>.&nbsp;
+ If a server is configured with many threadpools that have similar lane
+ priorities, <i>queue-per-lane</i> might require significantly fewer of the
+ above-mentioned resources.&nbsp; It also uses fewer acceptors, and its IORs
+ are a bit smaller.</li>
+ <li><b>Easier piece-by-piece integration into the ORB<br>
+ </b>Ease of implementation and integration are important practical
+ considerations in any project.&nbsp; Because of its two-layer structure, <i>queue-per-lane</i>
+ is an easier design to implement, integrate and test piece-by-piece.</li>
+</ul>
+<hr>
+<p><i>Last modified: $Date$</i></p>
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/content.html b/TAO/docs/rtcorba/content.html
new file mode 100644
index 00000000000..0e0f6b68f89
--- /dev/null
+++ b/TAO/docs/rtcorba/content.html
@@ -0,0 +1,44 @@
+<html>
+
+<!-- $Id$ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>TAO Real-Time CORBA Documentation Table of Content</title>
+<base target="main">
+</head>
+
+<body>
+
+<h3 align="center">TAO Real-Time CORBA Documentation </h3>
+
+<ol>
+ <li><a href="status.html#intro">Intro</a></li>
+ <ul>
+ <li><a href="status.html#supported">Supported Features</a></li>
+ <li><a href="status.html#unsupported">Unsupported Features</a></li>
+ <li><a href="status.html#future">Future Work</a></li>
+ </ul>
+ </li>
+ <li><a href="omg_issues.html">Issues with the Real-Time CORBA 1.0 Specification</a></li>
+ <li><a href="architecture.html">TAO Real-Time Architecture</a></li>
+ <li><a href="features.html">Real-Time Features Documentation</a><ul>
+ <li><a href="features.html#enabling">Enabling Real-Time features</a></li>
+ <li><a href="features.html#deprecated">Migrating from
+ TAO::Client_Priority_Policy</a> &nbsp;</li>
+ <li><a href="features.html#mappings">Priority Mappings</a></li>
+ <li><a href="features.html#defaults">ORB Default Policies</a></li>
+ <li><a href="features.html#threadpools"> Threadpools</a></li>
+ <li><a href="features.html#valid_configurations">Priority Policies</a> </li>
+ <li><a href="features.html#explicit_bind">Explicit Binding</a></li>
+ <li><a href="features.html#protocols">Protocol Policies</a></li>
+ <li><a href="features.html#diffserv">Diffserv Support</a></li>
+ </ul>
+ </li>
+ <li><a href="issues.html">Known Bugs and Issues</a></li>
+ <li><A
+ HREF="http://www.cs.wustl.edu/~schmidt/corba-research-realtime.html">Performance and Papers</A></li>
+ <li><a href="faq.html">FAQ</a>&nbsp;&nbsp;&nbsp; </li>
+</ol>
+
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/faq.html b/TAO/docs/rtcorba/faq.html
new file mode 100644
index 00000000000..ab446b2620b
--- /dev/null
+++ b/TAO/docs/rtcorba/faq.html
@@ -0,0 +1,40 @@
+<html>
+
+<!-- $Id$ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>TAO Real-Time CORBA Frequently Asked Questions</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body>
+
+<h3><a name="top">Frequently Asked Questions</a></h3>
+
+<p><strong><a href="#Q1">1. Question</a><br>
+<a href="#Q2">2. Question</a></strong></p>
+
+<hr>
+
+<p><a name="Q1">Q1</a>.</p>
+
+<p>A1.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+
+<p><a name="Q2">Q2</a>.</p>
+
+<p>A2.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<i>
+
+<p>Last modified: $Date$ </i></p>
+
+<p>&nbsp;</p>
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/features.html b/TAO/docs/rtcorba/features.html
new file mode 100644
index 00000000000..d360ee31c2d
--- /dev/null
+++ b/TAO/docs/rtcorba/features.html
@@ -0,0 +1,843 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="GENERATOR" content="Mozilla/4.77 [en] (Windows NT 5.0; U) [Netscape]">
+ <title>TAO Real-Time CORBA Features Documentation</title>
+<!-- $Id$ -->
+</head>
+<body>
+
+<center>
+<h3>
+Features Documentation</h3></center>
+This page is not a tutorial on Real-Time CORBA, but is rather a supplement
+to the specification, covering all implementation-specific details. Sample
+code exercising RTCORBA features can be found in
+<tt>$TAO/tests/RTCORBA/</tt>.
+We hope to have tutorial-style examples available in the near future.
+<h3>
+<a NAME="enabling"></a>Enabling Real-Time CORBA features</h3>
+In order to use features from the Real-Time CORBA 1.0 specification in
+TAO, a RT-CORBA client application must link with the RTCORBA library;
+a RT-CORBA server application must link with the RTCORBA library and the
+RTPortableServer libraries. Since some features in RT-CORBA depend on the
+messaging specification, all code must be compiled with <tt>TAO_HAS_CORBA_MESSAGING</tt>
+set to
+<tt>1</tt>. This macros are defined in
+<tt>$TAO/tao/orbconf.h</tt>
+<p>By default, both Real-Time CORBA and Messaging are enabled in TAO unless
+Minimum CORBA support is turned on, <i>i.e.</i>,
+<tt>TAO_HAS_MINIMUM_CORBA</tt>
+is set to <tt>1</tt>.
+<h3>
+<a NAME="mappings"></a>Priority Mappings</h3>
+TAO provides three Priority Mappings: Direct, Linear, and Continuous. If
+no mapping is specified, Direct Priority Mappings will be used. Note that
+Continuous was previously referred to as Direct.
+<dl>
+<dt>
+<b>Direct</b></dt>
+
+<dd>
+Maps CORBA priorities directly to native priorities.</dd>
+
+<dt>
+<b>Linear</b></dt>
+
+<dd>
+Maps each individual native priority to a contiguous range of CORBA priorities,
+so that the complete CORBA priority range is used up for the mapping. See
+<tt>$TAO_ROOT/tao/RTCORBA/Linear_Priority_Mapping.cpp
+</tt>for
+more details.</dd>
+
+<dt>
+<b>Continuous</b></dt>
+
+<dd>
+Maps the first <i>n</i> CORBA priorities to the range of native priorities,
+where <i>n</i> is the number of native priorities. The lowest native priority
+is mapped to CORBA priority 0, next higher native priority is mapped to
+CORBA priority 1, and so on. Since in all the operating systems where TAO
+is supported the native priority set contains less than 32767 priorities,
+part of the CORBA priority range is left unused. Consider NT Direct priority
+mapping as an example. NT native priorities -15 -2 -1 0 1 2 15 are mapped
+to CORBA priorities 0 1 2 3 4 5 6, respectively, and the rest of the CORBA
+priority range is not used.</dd>
+</dl>
+Priority mappings implement the rules for mapping CORBA priority range
+(from 0 to 32767) into the native OS priority range and vice versa. However,
+in some operating systems, the the native OS priority range depends on
+the scheduling policy being used. That's why when specifying a priority
+mapping, scheduling policy must be specified as well. Below, we describe
+how to configure TAO to use a particular priority mapping and scheduling
+policy. Note, in some operating systems super user privileges are required
+for use of some of the scheduling policies.
+<p>By default TAO uses Direct priority mapping and
+<tt>SCHED_OTHER</tt>
+scheduling policy. There are two ways for an application to override these
+settings:
+<ol>
+<li>
+<tt>svc.conf</tt> file can be used to select a mapping and a scheduling
+policy the ORB will use. (This method does not allow the specification
+of user-defined mappings.) Config file should contain the following options:</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p><tt>static RT_ORB_Loader "-ORBPriorityMapping
+<i>mapping_type</i> -ORBSchedPolicy
+<i>sched_policy</i>"</tt>
+<p>where valid values for <i>mapping_type</i> are <tt>continuous</tt>, <tt>linear</tt> and <tt>direct,</tt>
+and<i> </i>valid values for <i>sched_policy</i> are <tt>SCHED_OTHER</tt>,
+<tt>SCHED_FIFO</tt>
+and <tt>SCHED_RR</tt>.
+<li>
+<i>TAO::PriorityMappingManager</i> can be used to 1) override the default
+priority mapping and scheduling policy with another ORB-defined mapping/scheduling
+policy combination, 2) install a user-defined priority mapping, 3) obtain
+a reference to the priority mapping object used by the ORB. Code excerpts
+below demonstrate how to perform each of these tasks.</li>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<p>Obtaining Priority Mapping Manager:
+<br><tt>object = orb->resolve_initial_references ("PriorityMappingManager");</tt>
+<br><tt>TAO::PriorityMappingManager_var mapping_manager =</tt>
+<br><tt>TAO::PriorityMappingManager::_narrow (object.in ());</tt>
+<p>Overriding priority mapping/policy in effect with another ORB-defined
+mapping/policy combination:
+<br><tt>#include "tao/RTCORBA/Continuous_Priority_Mapping.h"</tt>
+<br><tt>#include "tao/RTCORBA/Linear_Priority_Mapping.h"</tt>
+<br><tt>#include "tao/RTCORBA/Direct_Priority_Mapping.h"</tt>
+<br><tt>...</tt>
+<p><tt>RTCORBA::PriorityMapping *pm =</tt>
+<br><tt>new TAO_Continuous_Priority_Mapping (policy);</tt>
+<br>or
+<br><tt>new TAO_Linear_Priority_Mapping (policy);</tt>
+<br>or
+<br><tt>new TAO_Direct_Priority_Mapping (policy);</tt>
+<br><tt>mapping_manager->mapping (pm);</tt>
+<br><tt>...</tt>
+<br>where policy is <tt>SCHED_OTHER, SCHED_FIFO</tt> or
+<tt>SCHED_RR.</tt>
+Priority Mapping Manager takes the ownership of the priority mapping object.
+<p>Overriding the default with user-defined priority mapping:
+<br><tt>My_Mapping *foo = new My_Mapping;</tt>
+<br><tt>mapping_manager->mapping (foo);</tt>
+<br>where <i>My_Mapping</i> must inherit from <i>RTCORBA::PriorityMapping</i>
+(a typedef for <i>TAO_Priority_Mapping</i> class) located in
+<tt>$TAO/tao/Priority_Mapping.h</tt>
+<p>Obtaining a pointer to the priority mapping object being used by the
+ORB:
+<br><tt>RTCORBA::PriorityMapping *pm =</tt>
+<br><tt>mapping_manager->mapping ();</tt>
+<br>Mapping manager retains the ownership of the priority mapping object.</ol>
+
+<h3>
+<a NAME="defaults"></a>ORB Default Policies</h3>
+Real-Time CORBA 1.0 does not specify ORB defaults for the policies it defines,
+leaving it up to implementations. Below is a summary TAO defaults.
+<br>&nbsp;
+<table BORDER CELLPADDING=7 WIDTH="100%" >
+<tr>
+<td ALIGN=CENTER WIDTH="31%"><b>Policy</b></td>
+
+<td ALIGN=CENTER WIDTH="69%"><b>Default</b></td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>ServerProtocolPolicy</i></td>
+
+<td WIDTH="69%">All protocols that are loaded by the ORB by default (e.g.,
+IIOP) and any explicitly specified by the user (e.g., SHMIOP), in the order
+they were loaded, with their default properties. See <a href="#protocols">Protocol
+Policies</a> section for more details.</td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>ClientProtocolPolicy</i></td>
+
+<td WIDTH="69%">None</td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>ThreadpoolPolicy</i></td>
+
+<td WIDTH="69%">None. If no ThreadpoolPolicy policy is specified during
+POA creation, the default thread-pool will be used for that POA.</td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>PriorityModelPolicy</i></td>
+
+<td WIDTH="69%">None</td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="69%">None</td>
+</tr>
+
+<tr>
+<td WIDTH="31%"><i>PrivateConnectionPolicy</i></td>
+
+<td WIDTH="69%">None</td>
+</tr>
+
+<tr>
+<td WIDTH="31%">Priority Mapping</td>
+
+<td WIDTH="69%">Direct mapping with <tt>SCHED_OTHER</tt> scheduling policy.
+See <a href="#mappings">Priority Mappings</a> section for more details.</td>
+</tr>
+</table>
+
+<h3>
+<a NAME="threadpools"></a>Threadpools</h3>
+
+<ul>
+<li>
+ThreadPools are now fully supported. Endpoint priorities are no longer
+supported.</li>
+<li>
+By default dynamic RTCorba threads live forever after they are created.
+When using the <code>RTORBDynamicThreadIdleTimeout</code> from the
+<code>RT_ORB_Loader</code> it
+can be specified that the dynamic threads should end after a given
+idle time. Timeout must be specified in microseconds, 0 means the threads
+will stay alive forever.
+</ul>
+
+<h3>
+<a NAME="valid_configurations"></a>Priority Policies</h3>
+The table below lists all possible configurations of policies involving
+priorities, and summarizes the semantics of each configuration.
+<br>&nbsp;
+<table BORDER CELLPADDING=4 WIDTH="100%" >
+<tr>
+<td ALIGN=CENTER WIDTH="33%"><b>Configuration</b></td>
+
+<td ALIGN=CENTER WIDTH="33%"><b>Valid values</b></td>
+
+<td ALIGN=CENTER WIDTH="34%"><b>Semantics</b></td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes,
+<br>no <i>PriorityModelPolicy</i>,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">Invalid.</td>
+
+<td WIDTH="34%">None.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes +
+<br><tt>SERVER_DECLARED</tt> model,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%"><i>Server_priority</i> attribute of the <i>PriorityModelPolicy</i>
+must be equal to the priority of one of the threadpool lanes. (Same goes
+for priorities of all the objects registered with the target POA).</td>
+
+<td WIDTH="34%">All processing is done at the servant's priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes +
+<br><tt>CLIENT_PROPAGATED</tt> model,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">Priority of the invoking client thread must be equal to
+the priority of one of the threadpool lanes.</td>
+
+<td WIDTH="34%">All processing is done at the client-propagated priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes +
+<br><i>PriorityBandedConnectionPolicy</i>,
+<br>no <i>PriorityModelPolicy</i></td>
+
+<td WIDTH="33%">Invalid.</td>
+
+<td WIDTH="34%">None.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes +
+<br><tt>SERVER_DECLARED</tt> model +
+<br><i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%"><i>Server_priority</i> attribute of the <i>PriorityModelPolicy</i>
+must be equal to the priority of one of the threadpool lanes. (Same goes
+for priorities of all the objects registered with the target POA). In addition,
+each of the priority bands must cover at least one of the threadpool lane
+priorities.</td>
+
+<td WIDTH="34%">All processing is done at the servant's priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool with lanes +
+<br><tt>CLIENT_PROPAGATED</tt> model +
+<br><i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">Priority of the invoking client thread must fall into one
+of the priority bands. In addition, each of the priority bands must cover
+at least one of the threadpool lane priorities.</td>
+
+<td WIDTH="34%">All processing is done at the threadpool lane priority
+which matches the priority band used by the client.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes,
+<br>no <i>PriorityModelPolicy</i>,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">All valid CORBA priorities.</td>
+
+<td WIDTH="34%">All processing is done at the threadpool's default priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes +
+<br><tt>SERVER_DECLARED</tt> model,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">All valid CORBA priorities.</td>
+
+<td WIDTH="34%">Request I/O and demultiplexing processing is done at the
+threadpool's default priority. Application level processing is done at
+the servant's priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes + <tt>CLIENT_PROPAGATED</tt> model,
+<br>no <i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">All valid CORBA priorities.</td>
+
+<td WIDTH="34%">Request I/O and demultiplexing processing is done at the
+threadpool's default priority. Application level processing is done at
+the client-propagated priority.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes +
+<br><i>PriorityBandedConnectionPolicy</i>,
+<br>no <i>PriorityModelPolicy</i></td>
+
+<td WIDTH="33%">Invalid.</td>
+
+<td WIDTH="34%">None.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes +
+<br><tt>SERVER_DECLARED</tt> model +
+<br><i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%"><i>Server_priority</i> attribute of the <i>PriorityModelPolicy</i>
+must fall into one of the priority bands. (Same goes for priorities of
+all the objects registered with the target POA).</td>
+
+<td WIDTH="34%">Request I/O and demultiplexing processing is done at the
+threadpool's default priority. Application level processing is done at
+the servant's priority. In this case, <i>PriorityBandedConnectionPolicy</i>
+is used to restrict the allowed priority values for the servant.</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">Threadpool without lanes +
+<br><tt>CLIENT_PROPAGATED</tt> model +
+<br><i>PriorityBandedConnectionPolicy</i></td>
+
+<td WIDTH="33%">Priority of the invoking client thread must fall into one
+of the priority bands.</td>
+
+<td WIDTH="34%">Request I/O and demultiplexing processing is done at the
+threadpool's default priority. Application level processing is done at
+the client-propagated priority. In this case, <i>PriorityBandedConnectionPolicy</i>
+is used to restrict the allowed priority values for the client.</td>
+</tr>
+</table>
+
+<h3>
+<a NAME="explicit_bind"></a>Explicit Binding</h3>
+<tt>Object::_validate_connection ()</tt> method establishes a connection,
+if one doesn't already exist, and verifies policy overrides for the <i>invoking
+thread/ its priority/ target object</i> combination. To establish all connections
+ahead of time, application must call <tt>_validate_connection ()</tt> for
+<b>all</b><i>thread/
+priority/ object</i> combinations that will be used.
+<h3>
+<a NAME="protocols"></a>Protocol Policies</h3>
+In addition to <i>TCPProtocolProperties</i> defined by the Real-Time CORBA
+specification, TAO provides configurable properties for each protocol it
+supports. Below is a summary of all protocol properties available in TAO.
+<ul>
+<li>
+<b>IIOP</b></li>
+
+<br>Protocol <i>ProfileId</i>: 0
+<br>Transport properties interface name: <i>RTCORBA::TCPProtocolProperties</i>
+(standard)
+<br>Implementation class name: <i>TAO_TCP_Properties</i>
+<table BORDER CELLPADDING=4 HEIGHT="150" >
+<tr>
+<td ALIGN=CENTER HEIGHT="19"><b>Protocol Properties Attribute</b></td>
+
+<td ALIGN=CENTER HEIGHT="19"><b>Default Value</b></td>
+</tr>
+
+<tr>
+<td HEIGHT="19">long <i>send_buffer_size</i></td>
+
+<td ALIGN=LEFT HEIGHT="19"><tt>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</tt></td>
+</tr>
+
+<tr>
+<td HEIGHT="19">long <i>recv_buffer_size</i></td>
+
+<td ALIGN=LEFT HEIGHT="19"><tt>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</tt></td>
+</tr>
+
+<tr>
+<td HEIGHT="19">boolean <i>keep_alive</i> (not yet supported)</td>
+
+<td ALIGN=LEFT HEIGHT="19"><tt>1</tt></td>
+</tr>
+
+<tr>
+<td HEIGHT="19">boolean <i>dont_route</i> (not yet supported)</td>
+
+<td ALIGN=LEFT HEIGHT="19"><tt>0</tt></td>
+</tr>
+
+<tr>
+<td HEIGHT="19">boolean <i>no_delay</i></td>
+
+<td ALIGN=LEFT HEIGHT="19"><tt>1</tt></td>
+</tr>
+</table>
+
+<li>
+<b>UIOP</b></li>
+
+<br>Protocol <i>ProfileId</i>: 0x54414f00U
+<br>Transport properties interface name: <i>RTCORBA::UnixDomainProtocolProperties</i>
+(TAO-specific)
+<br>Implementation class name: <i>TAO_Unix_Domain_Properties</i>
+<table BORDER CELLPADDING=4 >
+<tr>
+<td ALIGN=CENTER><b>Protocol Properties Attribute</b></td>
+
+<td ALIGN=CENTER><b>Default Value</b></td>
+</tr>
+
+<tr>
+<td>long <i>send_buffer_size</i></td>
+
+<td><tt>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</tt></td>
+</tr>
+
+<tr>
+<td>long <i>recv_buffer_size</i></td>
+
+<td><tt>ACE_DEFAULT_MAX_SOCKET_BUFSIZ</tt></td>
+</tr>
+</table>
+
+<li>
+<b>SHMIOP</b></li>
+
+<br>Protocol <i>ProfileId</i>: 0x54414f02U
+<br>Transport properties interface name: <i>RTCORBA::SharedMemoryProtocolProperties</i>
+(TAO-specific)
+<br>Implementation class name: <i>TAO_SMEM_Properties</i>
+<table BORDER CELLPADDING=4 >
+<tr>
+<td ALIGN=CENTER><b>Protocol Properties Attribute</b></td>
+
+<td ALIGN=CENTER><b>Default Value</b></td>
+</tr>
+
+<tr>
+<td>long <i>preallocate_buffer_size</i></td>
+
+<td>not yet supported</td>
+</tr>
+
+<tr>
+<td>string <i>mmap_filename</i></td>
+
+<td>not yet supported</td>
+</tr>
+
+<tr>
+<td>string <i>mmap_lockname</i></td>
+
+<td>not yet supported</td>
+</tr>
+</table>
+</ul>
+Real-Time CORBA 1.0 does not define how protocol properties are created.
+<i>TAO_Protocol_Factory</i>
+class can be used to create default <i>ProtocolProperties</i> for a particular
+protocol given its <i>ProfileId</i>:
+<p><tt>class TAO_Protocol_Properties_Factory</tt>
+<br><tt>{</tt>
+<br><tt>public:</tt>
+<p><tt>static RTCORBA::ProtocolProperties*</tt>
+<br><tt>create_transport_protocol_property (IOP::ProfileId id);</tt>
+<p><tt>static RTCORBA::ProtocolProperties*</tt>
+<br><tt>create_orb_protocol_property (IOP::ProfileId id);</tt>
+<br><tt>};</tt>
+<p>Alternatively, concrete <i>ProtocolProperties</i> implementation classes
+can be instantiated directly as needed.
+<p>The table below summarizes how protocol policies overrides affect protocol
+selection and configuration in TAO.
+<br>&nbsp;
+<table BORDER CELLPADDING=4 >
+<tr>
+<td ALIGN=CENTER><b>Policy</b></td>
+
+<td ALIGN=CENTER><b>ORB default</b></td>
+
+<td ALIGN=CENTER><b>Override levels that have impact on protocol selection</b></td>
+
+<td ALIGN=CENTER><b>Override levels that have impact on protocol configuration</b></td>
+</tr>
+
+<tr>
+<td><i>ServerProtocolPolicy</i></td>
+
+<td>All protocols loaded into the ORB, in the order they were loaded.</td>
+
+<td>ORB
+<br>POA</td>
+
+<td>ORB
+<br>(If no protocol properties are specified at the ORB level, default
+protocol configurations are used.)</td>
+</tr>
+
+<tr>
+<td><i>ClientProtocolPolicy</i></td>
+
+<td>None</td>
+
+<td>ORB
+<br>Current
+<br>Object</td>
+
+<td>ORB
+<br>(If no protocol properties are specified at the ORB level, default
+protocol configurations are used.)</td>
+</tr>
+</table>
+
+<p>NOTE: <tt>-ORBSndSock</tt> and <tt>-ORBRcvSock</tt> ORB options have
+no effect when RTCORBA is enabled.
+<p>Protocol policies do not depend on any other Real-Time CORBA features
+and can be used alone. In fact, we plan to make protocol policies available
+outside RTCORBA, and better integrate them with the Pluggable Protocols
+framework in the near future.
+<br>
+<hr>
+<h3>
+<a NAME="diffserv"></a>Diffserv Support</h3>
+
+<p>Though the RT-CORBA specification details the real-time ORB, thread
+priorities, and application scheduling requirements, it is less
+explicit about the communication transport and the underlying
+network priorities. Our research involved using Differentiated Services
+technology to prioritize the RT-CORBA traffic in the network. This
+effort required two essential enhancements to the TAO ORB. First, we
+provided an efficient and flexible way of setting the DSCP codepoints
+in the data packets, which is done by extending the ORB protocol
+properties. DSCP codepoints can dynamically change, based on many
+factors like QoS feedback received from external QoS monitoring
+resources or even a change in the application policy. Second, we
+provide a mechanism to map the RT-CORBA priorities to the Diff-Serv
+network priorities. The detials of the implementation follows.
+<dl>
+<dt>
+<b>Modifications to RTCORBA.pidl</b></dt>
+
+<br>&nbsp;
+<ul>
+<li>
+<b>TCP Protocol Properties extension</b></li>
+
+<br>&nbsp;
+<dd>
+The TCP protocol properties interface was extended to add a flag, enable_network_priority.
+When this flag is set to 1 the RTCORBA priority is mapped to network priority
+(diffserv codepoint - DSCP) and this priority is set on the GIOP requests
+and replies. When the flag is not set no network priorities are set on
+the GIOP requests and replies and are hence best effort.</dd>
+&nbsp;
+<p><tt>local interface TCPProtocolProperties : ProtocolProperties</tt>
+<br><tt>{</tt>
+<br><tt>attribute long send_buffer_size;</tt>
+<br><tt>attribute long recv_buffer_size;</tt>
+<br><tt>attribute boolean keep_alive;</tt>
+<br><tt>attribute boolean dont_route;</tt>
+<br><tt>attribute boolean no_delay;</tt>
+<br><tt>attribute boolean enable_network_priority;</tt>
+<br><tt>};</tt>
+<br>&nbsp;
+<li>
+<b>Network Priority Mapping Interfaces</b></li>
+
+<dd>
+<p>Support was added for mapping RTCORBA priority to Network Priority. It
+is similar to the RTCORBA to native thread priority mapping.</dd>
+
+<p><tt>typedef long NetworkPriority;</tt>
+<br><tt>native NetworkPriorityMapping;</tt></ul><br>
+
+<dt>
+<b>Usage</b></dt>
+
+<br>&nbsp;
+<ul>
+<li>
+<b>Client - Setting DSCP on the GIOP Requests</b></li>
+
+<br><br>
+<dd>
+1. <i>Create TCP protocol properties</i> - The enable_network_priority
+flag implies the setting/unsetting of the network priority.</dd>
+
+<p><tt>RTCORBA::TCPProtocolProperties_var tcp_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; rt_orb->create_tcp_protocol_properties (send_buffer_size,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+recv_buffer_size,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+1, //keep alive</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+0, //don't route</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+1, //no delay</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+enable_network_priority);</tt>
+<p>2. <i>Create TCP Protocol Properties Policy</i>
+<p><tt>RTCORBA::ProtocolList protocols;</tt>
+<br><tt>protocols.length (1);</tt>
+<br><tt>protocols[0].protocol_type = 0; //IIOP</tt>
+<br><tt>protocols[0].transport_protocol_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; RTCORBA::ProtocolProperties::_duplicate (tcp_properties.in
+());</tt>
+<br><tt>protocols[0].orb_protocol_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; RTCORBA::ProtocolProperties::_nil ();</tt>
+<p><tt>CORBA::PolicyList policy_list;</tt>
+<br><tt>policy_list.length (1);</tt>
+<br><tt>policy_list[0] =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; rt_orb->create_client_protocol_policy (protocols);</tt>
+<p>3.<i> Set TCP Protocol Properties Policy</i>
+<p><b>ORB Level</b> - This implies that the tcp protocol properties set
+will apply to every invocation made with this ORB.
+<p><tt>CORBA::Object_var object =</tt>
+<br><tt>orb->resolve_initial_references ("ORBPolicyManager");</tt>
+<br><tt>CORBA::PolicyManager_var policy_manager =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; CORBA::PolicyManager::_narrow (object.in ());</tt>
+<br><tt>policy_manager->set_policy_overrides (policy_list,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+CORBA::SET_OVERRIDE);</tt>
+<p><b>THREAD Level</b> - This implies that the tcp protocol properties
+set will apply to all the invocations made in the corresponding thread
+only. All other invocations will have the TCP protocol properties set at
+the ORB level.
+<p>orb->orb_core ()->policy_current ().set_policy_overrides (policy_list,
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+CORBA::SET_OVERRIDE);
+<p><b>OBJECT Level</b> - This implies that the tcp protocol properties
+set will apply to the invocations made on the corresponding object only.
+<p><tt>CORBA::Object_var object = server->_set_policy_overrides (policy_list,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+CORBA::SET_OVERRIDE);</tt>
+<p><tt>server = Test::_narrow (object.in ()); //server is the CORBA Object</tt>
+<p>The above steps can be applied repeatedly to create and set TCP protocol
+properties on the client to enable/disable network priority on the GIOP
+requests. Since the TCP protocol properties are updated per invocation
+the most recently set policy will apply.
+<br>&nbsp;
+<li>
+<b>Server - Setting DSCP on the GIOP Replies</b></li>
+
+<br>&nbsp;
+<dd>
+1. <i>Create the TCP protocol properties</i> - The enable_network_priority
+flag implies the setting/unsetting of the network priority.</dd>
+
+<p><tt>RTCORBA::TCPProtocolProperties_var tcp_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; rt_orb->create_tcp_protocol_properties (send_buffer_size,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+recv_buffer_size,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+1, //keep alive</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+0, //don't route</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+1, //no delay</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+enable_network_priority);</tt>
+<p>2. <i>Create TCP Protocol Properties Policy</i>
+<p><tt>RTCORBA::ProtocolList protocols;</tt>
+<br><tt>protocols.length (1);</tt>
+<br><tt>protocols[0].protocol_type = 0; //IIOP</tt>
+<br><tt>protocols[0].transport_protocol_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; RTCORBA::ProtocolProperties::_duplicate (tcp_properties.in
+());</tt>
+<br><tt>protocols[0].orb_protocol_properties =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; RTCORBA::ProtocolProperties::_nil ();</tt>
+<br>&nbsp;
+<p><tt>CORBA::PolicyList policy_list;</tt>
+<br><tt>policy_list.length (1);</tt>
+<br><tt>policy_list[0] =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; rt_orb->create_server_protocol_policy (protocols);</tt>
+<p>3. <i>Create POA with Diffserv enabled</i>
+<p><tt>CORBA::PolicyList poa_policy_list;</tt>
+<br><tt>poa_policy_list.length (1);</tt>
+<br><tt>poa_policy_list [0] =</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; rt_orb->create_server_protocol_policy (protocols);</tt>
+<p><tt>PortableServer::POA_var poa_with_ds =</tt>
+<br><tt>root_poa->create_POA ("POA_WITH_DS",</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+poa_manager.in (),</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+poa_policy_list );</tt>
+<p>All the servants that want network priority set on their replies should
+register with this POA.
+<p>NOTE - The POA policy can be set only once. This implies that all replies
+sent from the POA that has the network priority set will have the DSCP
+set on them. In order to unset the network priority one has to use a different
+POA without the network priority set on it.
+<br>&nbsp;</ul>
+
+<dt>
+<b>Network Priority Mapping</b></dt>
+
+<br>&nbsp;
+<ul>
+<li>
+<b>NetworkPriorityMapping interface</b></li>
+
+<br>&nbsp;
+<dd>
+The RTCORBA to network priority mapping framework is similar to the RTCORBA
+to native thread priority mapping framework. As mentioned in section 2.1.2
+this is implemented by providing the native interface NetworkPriorityMapping.
+The native interface is implemented in the RTCORBAC.h as:
+
+<p><tt>typedef TAO_Network_Priority_Mapping
+NetworkPriorityMapping;</tt></dd>
+
+<p><tt>Where TAO_Network_Priority_Mapping is defined as:</tt>
+<p><tt>class TAO_Network_Priority_Mapping</tt>
+<br><tt>{</tt>
+<br><tt>public:</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; virtual CORBA::Boolean to_network (RTCORBA::Priority
+corba_priority,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+RTCORBA::NetworkPriority &amp;network_priority) = 0;</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; virtual CORBA::Boolean to_CORBA (RTCORBA::NetworkPriority
+network_priority,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+RTCORBA::Priority &amp;corba_priority) = 0;</tt>
+<br><tt>};</tt>
+<p>The methods to_network (…) and to_corba (…) can be implemented differently
+for different mapping algorithms that can be defined by the application.
+<br>&nbsp;
+<li>
+<b>Default Network Priority Mappings</b></li>
+
+<br>&nbsp;
+<dd>
+TAO implements the default Linear Mapping from RTCORBA to Diffserv Codepoint
+mapping. Further mappings may be added to TAO. The application can choose
+these TAO supported mappings through the Service Configurator (svc.conf)
+files with the following entry:</dd>
+
+<p>static RT_ORB_Loader "-ORBSchedPolicy SCHED_FIFO -ORBScopePolicy PROCESS
+-ORBPriorityMapping direct <i>-ORBNetworkPriorityMapping Linear</i>"
+<br>&nbsp;
+<li>
+<b>Network Priority Mapping Manager</b></li>
+
+<br>&nbsp;
+<dd>
+A NetworkPriorityMappingManager is defined in TAO to manage the Network
+Priority Mapping.</dd>
+
+<p><tt>typedef TAO_Network_Priority_Mapping_Manager NetworkPriorityMappingManager;</tt>
+<p><tt>Where TAO_Network_Priority_Mapping_Manager is:</tt>
+<p><tt>class TAO_RTCORBA_Export TAO_Network_Priority_Mapping_Manager :</tt>
+<br><tt>{</tt>
+<br><tt>public:</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; TAO_Network_Priority_Mapping_Manager (RTCORBA::NetworkPriorityMapping
+* mapping);</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; void mapping (RTCORBA::NetworkPriorityMapping
+* mapping);</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; RTCORBA::NetworkPriority_Mapping *mapping (void);</tt><tt></tt>
+<p><tt>private:</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; TAO_Network_Priority_Mapping *mapping_;</tt>
+<br><tt>};</tt>
+<p>The application developer can add his custom network priority mappings
+as described in section 2.3.3 using the NetworkPriorityMappingManager.
+<br>&nbsp;
+<li>
+<b>Custom Network Priority Mapping</b></li>
+
+<br>&nbsp;
+<dd>
+In order to implement a custom network priority mapping the application
+developer should implement the methods of the TAO_Network_Priority_Mapping
+class. E.g:</dd>
+
+<p><tt>class TAO_Custom_Network_Priority_Mapping :</tt>
+<br><tt>public TAO_Network_Priority_Mapping</tt>
+<br><tt>{</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; virtual CORBA::Boolean to_network (RTCORBA::Priority
+corba_priority,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+RTCORBA::NetworkPriority &amp;network_priority);</tt>
+<br><tt>&nbsp;&nbsp;&nbsp; virtual CORBA::Boolean to_CORBA (RTCORBA::NetworkPriority
+network_priority,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+RTCORBA::Priority &amp;corba_priority);</tt>
+<br><tt>};</tt>
+<p>This custom Network Priority Mapping can then be loaded into the Network
+Priority Mapping Manager as follows:
+<p><tt># Resolve the Network priority Mapping Manager</tt>
+<br><tt>CORBA::Object_var object = orb->resolve_initial_references ("NetworkPriorityMappingManager");</tt>
+<br><tt>RTCORBA::NetworkPriorityMappingManager_var mapping_manager = RTCORBA::NetworkPriorityMappingManager::_narrow
+(object.in ());</tt>
+<p><tt># Initialize the custom priority mapping</tt>
+<br><tt>TAO_Custom_Network_Priority_Mapping *cnpm = 0;</tt>
+<br><tt>ACE_NEW (cnpm,</tt>
+<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TAO_Custom_Network_Priority_Mapping);</tt>
+<p><tt>#Load the custom network priority mapping object in the network
+priority</tt>
+<br><tt>#mapping manager. The user can thus add his own priority mapping.</tt>
+<br><tt>mapping_manager->mapping (cnpm);</tt>
+<p>This ensures that the Custom Network Priority Mapping will be used to
+map the RTCORBA priority to the network priority.
+</ul>
+<br>
+<i>Last Modified: $Date$</i></dl>
+
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/index.html b/TAO/docs/rtcorba/index.html
new file mode 100644
index 00000000000..994b5dd6398
--- /dev/null
+++ b/TAO/docs/rtcorba/index.html
@@ -0,0 +1,23 @@
+<html>
+<!-- $Id$ -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>TAO Real-Time CORBA Documentation</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+</head>
+
+<frameset cols="300,*">
+ <frame name="contents" target="main" src="content.html" scrolling="auto">
+ <frame name="main" src="status.html">
+ <noframes>
+ <body>
+
+ <p>This page uses frames, but your browser doesn't support them.</p>
+
+ </body>
+ </noframes>
+</frameset>
+
+</html>
diff --git a/TAO/docs/rtcorba/issues.html b/TAO/docs/rtcorba/issues.html
new file mode 100644
index 00000000000..43c3e1979b0
--- /dev/null
+++ b/TAO/docs/rtcorba/issues.html
@@ -0,0 +1,231 @@
+<html>
+
+<!-- $Id$ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Implementation Issues and Known Bugs</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body>
+
+<h3><a name="top">Known Issues and TO-DO Items</a></h3>
+<p>This page contains a list of known RTCORBA-related issues and to-do
+items. The list does not include any of the reports from the bug tracking
+system, so be sureto <a href="http://deuce.doc.wustl.edu/bugzilla/index.cgi">query
+Bugzilla</a> for RTCORBA entries. </p>
+<ol>
+ <li><a href="#7">Integrating protocol policies with the Pluggable Protocols framework</a></li>
+ <li><a href="#10">Integrating Implementation Repository with RTCORBA and PP</a></li>
+ <li><a href="#12">Priority Banded Connections interoperability issues</a></li>
+ <li><a href="#2">Removing dependencies on ORB debug output from RTCORBA tests</a></li>
+ <li><a href="#14">Adding RTCORBA examples</a></li>
+ <li><a href="#5">Improving management of Private Connections</a></li>
+ <li><a href="#6">Redesigning profile management to satisfy new requirements
+ and to provide full
+ support for location forwarding</a></li>
+ <li><a href="#11">Location forwarding with client-exposed policies</a></li>
+ <li><a href="#8">Moving FT endpoint selection into the endpoint selectors framework</a></li>
+ <li><a href="#3">Introducing guidelines for debug output in TAO</a><br>
+ </li>
+</ol>
+<hr>
+<h4><a name="7">Integrating protocol policies with the Pluggable Protocols
+framework</a></h4>
+<p><i>RTCORBA::ServerProtocolPolicy</i> and <i>RTCORBA::ClientProtocolPolicy</i>
+allow
+application developers to select and configure ORB communication protocols, and
+to specify preferred order of their use. This functionality has been implemented
+in TAO, but is only available with RTCORBA. Since protocol management
+is of interest to a large chunk of TAO users (many of whom do not need RTCORBA
+otherwise),
+we should make protocol policies available even when RTCORBA is not used, better
+integrate them with the Pluggable Protocols framework, and provide a number of
+other enhancements.</p>
+<ol>
+ <li>Integrate protocol policies with PP framework. Make concrete <i> Protocol_Factories</i>
+responsible for creating corresponding <i>ProtocolProperties</i> with default and user-specified
+values (rather than having the knowledge about concrete <i>ProtocolProperties </i>embedded in the ORB).
+ This will enable the protocol policies to be used to
+configure any pluggable protocols without having to modify the ORB code for
+each protocol.<br>
+ </li>
+ <li>Make protocol policies available even when RTCORBA is not used. Once
+this is done, remove (or deprecate) <i>-ORBSndSock</i>, <i>-ORBRcvSock</i>,
+and <i>-ORBNodelay</i> ORB options.<br>
+ </li>
+ <li>Add support for <i>TCPProtocolProperties::dont_route</i>
+ in IIOP.<br> </li>
+ <li>Add support for protocol properties configuration in SHMIOP. (SHMIOP
+ properties are defined in <i>RTCORBA::SharedMemoryProtocolProperties</i>, but
+ are currently not supported in the protocol implementation.)</li>
+</ol>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="10">Integrating Implementation Repository with RTCORBA and PP</a></h4>
+<p>Current version of Implementation Repository does not work properly with
+RTCORBA or Pluggable Protocols because it does not handle multiple endpoints for
+one server. Once RTCORBA implementation is complete, we should look into
+redesign of Implementation Repository.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="12">Priority Banded Connections interoperability issues</a></h4>
+<p>
+
+Section 4.12.2 (Binding of Priority Banded Connection) of the RT-CORBA
+spec talks about the <CODE>_bind_priority_band</CODE> implicit
+operation. Clearly, this operation is not completely defined and
+neither is the reply to this implicit operation. Therefore, it is
+almost impossible to get interoperability between RT-ORBs with respect
+to this operation. <p>
+
+Even if we make assumptions about the <CODE>_bind_priority_band</CODE>
+implicit operation and its reply, it leads to an architecture where
+there is unnecessary jitter and unpredictability because the
+connection needs to be moved from the Reactor associated with the
+Acceptor to the Reactor associated with correct priority. This is
+either done with the <CODE>_bind_priority_band</CODE> method or with
+the first request. <p>
+
+Because of the above mentioned issues, TAO does not use
+<CODE>_bind_priority_band</CODE> operation and <CODE>
+RTCorbaPriorityRange</CODE> service context during band
+establishment. Instead, the server embeds a proprietary <CODE>
+TAO_TAG_ENDPOINTS</CODE> tagged component into an object's IOR to let
+the clients know about available priorities and corresponding
+endpoints. To establish a banded connection, the client simply uses
+the endpoint corresponding to the priority of interest. (See <a
+href="architecture.html">TAO Real-Time Architecture</a> section for
+more details.)<p>
+
+Once the semantics of the <CODE>_bind_priority_band</CODE> operation
+have been fully described by the specification or if the application
+can deal with the unpredictability of the first request, and TAO can
+be redesigned to handle the additional complexity of connection
+movement between the Reactors, we can change the behavior of Priority
+Banded Connections by:
+
+<ol>
+
+ <li>modifying client to use <CODE>bind_priority_band</CODE>
+ operation and <CODE> RTCorbaPriorityRange </CODE> service context
+ during <CODE>Object::_validate_connection()</CODE> </li>
+
+ <li>modifying server to move a connection to the appropriate reactor
+ once it receives <CODE> bind_priority_band </CODE>request and/or
+ <CODE> RTCorbaPriorityRange </CODE> service context</li>
+
+ <li>modifying client to store and look up connections based on
+ address + priority range rather than just based on address
+ alone</li> </ol>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+
+<h4><a name="2">Removing dependencies on ORB
+debug output from RTCORBA tests</a></h4>
+<p>Some of the RTCORBA tests rely on ORB debugging output for checking whether
+something works. This is <i> very</i> <i> brittle</i> since ORB developers frequently
+add/remove/modify debugging messages, causing tests to 'break', and increasing
+amount of maintenance effort required. Yet, we somehow need to verify that <i>internally</i> the ORB behaves as we expect, <i>e.g.</i>, a particular transport protocol
+is used to carry out an invocation. It may be possible to achieve this without
+depending on ORB debug messages by using Portable Interceptors or some other
+similar mechanism. For example, we could write several interceptors, which would
+obtain and print information of interest for the test. We
+should look into this.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="14">Adding RTCORBA examples</a></h4>
+<p>We do have tests for RTCORBA features, but what we also need are some
+examples. Use case-driven examples illustrating how certain features help
+satisfy various requirements. Examples that would help users understand
+when to use various features.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="5">Improving management of Private Connections</a></h4>
+<p>Currently, when the object that has private connections is destroyed, its
+connections remain in the cache. We need to implement cleanup of private
+connections on object destruction. If such cleanup is expensive, we may
+want to have it controlled by an option.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="6">Redesigning profile management to satisfy new requirements and
+to provide full
+support for location forwarding</a></h4>
+<p>Current client profile management code needs to change for the
+following reasons:</p>
+<ol>
+ <li>Original design assumed that all threads using the same object reference
+ would want to use the same profile for making an invocation. Hence, certain
+ state, <i>i.e.</i>, <CODE>profile_in_use, profile_sucess and forward_profiles,
+ </CODE>
+ is stored per <i>Stub</i>. This assumption no longer holds true, <i>e.g.</i>,
+ different threads may have different policies set, and would want to use
+ different profiles based on those policies. This is at least the case with
+ RTCORBA, where different threads may, for example, want to use different
+ protocols. It may also be the case in other scenarios. So, we should not keep
+ the state per <i>Stub</i>.</li>
+ <li>Current design does not properly support location forwarding more than one
+ level deep. And with certain policy configurations, location
+ forwarding is not supported at all.</li>
+ <li>Current interfaces are very polluted: many tiny functions with similar
+ names calling into each other, comments in <i> .h</i> files outdated, comments in
+ <i> .cpp</i> files mostly absent.</li>
+ <li>Lack of thorough test suite.</li>
+</ol>
+<p>Also, redesign of profile management is a good time to add support for
+<CODE>TAG_ALTERNATE_IIOP</CODE> (multiple endpoints per profile).</p>
+<p>Bala is familiar with profile management code, and has agreed to act as a
+consultant/guide when somebody tackles this item.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="11">Location forwarding with client-exposed policies</a></h4>
+<p>When an object is forwarded, a new set of profiles is received, and they can
+potentially include different client-exposed policies. Currently, we don't handle this case,
+<i>i.e.</i>, the set of client-exposed policies from the object's original IOR is
+used for its complete lifetime. This item is related to the <a href="#6">profile
+management</a> issue.</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="8">Moving FT endpoint selection into the endpoint selector
+framework</a></h4>
+<p>Selection of endpoints for invocations in TAO is strategized, with strategies for
+different policy combinations located in <i>Invocation_Endpoint_Selectors.*</i>
+Bala
+may want to make FT-based endpoint selection one of the available strategies.
+(Currently it's not part of the endpoint selectors framework.)</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+<h4><a name="3">Introducing guidelines for debug output in TAO</a></h4>
+<p>Speaking of ORB debug output, there is not much consistency about it in TAO:
+not in the use of ORB debug levels, not in the style and detail of debug messages. It is probably a good idea to come up with a short list of
+guidelines for debugging messages - this would make the output more useful (if
+the guidelines are followed, of course ;-) )</p>
+
+<p><a href="#top">[back]</a></p>
+
+<hr>
+
+<i>
+
+<p>Last modified: $Date$ </i></p>
+<p></p>
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/omg_issues.html b/TAO/docs/rtcorba/omg_issues.html
new file mode 100644
index 00000000000..bb49722b205
--- /dev/null
+++ b/TAO/docs/rtcorba/omg_issues.html
@@ -0,0 +1,103 @@
+<html>
+
+<!-- $Id$ -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Issues with OMG Real-Time CORBA 1.0 Specification</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body>
+
+<h3>Issues with Real-Time CORBA 1.0 Specification</h3>
+
+This document lists what we believe to be the shortcomings of the
+Real-Time CORBA 1.0 specification, which we uncovered while implementing it in TAO.&nbsp;
+All items on this page refer to <a href="http://cgi.omg.org/cgi-bin/doc?ptc/99-05-03">ptc/99-05-03</a>, which was
+the basis for our implementation.&nbsp; This material will be submitted to the
+OMG.
+<h3>
+
+Unnecessary <i>ClientProtocolPolicy</i> complexity</h3>
+<p>
+
+<i>ClientProtocolPolicy</i> can be set on either client or server.&nbsp; Section 4.8.5
+in CORBA 2.4 cautions against defining policies that can be set
+in both places:&nbsp;
+<blockquote><br>
+ If the <b><font FACE="Arial" SIZE="2">Policy </font></b> can be
+used with <b><font FACE="Arial" SIZE="2">POA </font></b>creation
+to tune <b><font FACE="Arial" SIZE="2">IOR </font></b>contents
+and can also be specified (overridden) in the client, specify how to reconcile the policy's
+presence from both the client and server. It is strongly recommended to avoid this
+case! As an exercise in completeness, most <b><font FACE="Arial" SIZE="2">POA </font></b>policies
+can probably be extended to have
+some meaning in the client and vice versa, but this does not help make usable
+systems, it just makes them more complicated without adding really useful
+features.
+There are very few cases where a policy is really appropriate to specify in
+both places, and for these policies the interaction between the two must be
+described. </blockquote>
+<p>While the specification does describe what happens if <i>ClientProtocolPolicy</i>
+is set on both client and server, it is not clear that being able to set the
+policy on the server-side adds any useful functionality.&nbsp; With <i>ServerProtocolPolicy,
+</i>the server already has the ability to specify which protocols and in what
+order can be used by clients for invocations.&nbsp; So, <i>ClientProtocolPolicy</i>
+should be made a pure client policy, to reduce the complexity of the
+system.&nbsp; A related issue, which becomes moot if the policy is made pure
+client, is whether <CODE>nil</CODE> <i>ProtocolProperties</i> are allowed in <i>ClientProtocolPolicy</i>,
+and, if so, how are they encoded into a <i>TaggedComponent</i> if the policy is
+set on the server-side.</p>
+<h3>Lack of standard APIs for managing Priority Mappings and Priority Transforms</h3>
+<p>The specification does not define APIs for setting and getting Priority Mappings and Priority Transforms,
+leaving it up to ORB implementations.&nbsp; These APIs should be standardized in
+order for application code to be portable.&nbsp;&nbsp;
+</p>
+<h3>
+Policy configurations ambiguities</h3>
+<p>The specification defines a number of policies involving priorities, and
+describes some of their interaction.&nbsp; However, it does not completely
+specify the validity and semantics of <i>all</i> possible combinations of those
+policies.&nbsp; For example, does the combination of Server Declared Priority
+Model with server-set Priority Banded Connections make sense?&nbsp; For all values?&nbsp;
+If the purpose of Priority Banded Connections is to avoid priority inversions,
+then why would we ever want to use <i>PriorityModelPolicy</i> without <i>PriorityBandedConnectionPolicy</i>?&nbsp;
+And, if we would <i>always</i> want to use Priority Banded Connections, why does
+there need to be a policy, why can't banded connections be a mechanism the ORB
+uses internally as needed, transparent to the user?&nbsp;&nbsp;</p>
+<p>What is clear from the spec is the availability of certain policies, what is
+not clear is what exactly using each one of those policies achieves - in other
+words, when and why different combinations of them are appropriate.&nbsp;</p>
+<h3>Lack of thread resources model</h3>
+<p> Section 4.12.2 of the specification says the following about server ORB and
+priority band establishment: <cite>&quot;if the priority band
+is inconsistent with the ORB's priority configuration then the ORB shall raise a
+INV_POLICY system exception&quot;.&nbsp;&nbsp; </cite>However, the specification
+never defines what is meant by <i>the ORB's priority configuration,</i> leaving
+it up to implementations.&nbsp; One implementation, for example, might use
+Threadpool threads for servicing banded connections, and <i>consistency with the
+ORB's configuration</i> would mean availability of a threadpool lane with
+priority matching band's priority range.&nbsp; Another implementation might be
+spawning separate threads for servicing banded connections, and <i>consistency
+with the ORB's configuration</i> would be automatic.&nbsp; With these two
+implementations, a band that will cause exception in the first implementation
+will work just fine in the second.&nbsp; The specification does not provide a
+model of ORB thread resources: it provides APIs for creating Threadpools, but
+does not describe how the threadpool threads are used.&nbsp; I/O threads are
+never even mentioned.&nbsp; On one hand, this lack of a resource model is
+beneficial: it allows greater freedom and variety of implementations.&nbsp; But,
+on the other hand, it hurts portability, since a configuration might work with
+one real-time ORB implementation but not another.&nbsp; Also, bounding priority inversions
+is a quality of implementation: there is no explicit requirement for I/O threads to run at the same priority as request processing threads.</p>
+
+<p>In summary, we believe that Real-Time CORBA 1.0 specification is a good
+start, but needs some work, especially in regards to resolving
+ambiguities.&nbsp; Currently, applications must depend on many implementation details.&nbsp;
+For example, a policy combination providing certain semantics in one ORB can
+provide different semantics or be invalid when used in another ORB, with both
+ORBs being compliant with the specification.&nbsp;&nbsp;&nbsp; </p>
+
+<hr>
+<p><i>Last Modified: $Date$</i></p>
+</body>
+</html>
diff --git a/TAO/docs/rtcorba/queue-per-lane.gif b/TAO/docs/rtcorba/queue-per-lane.gif
new file mode 100644
index 00000000000..cff639fc568
--- /dev/null
+++ b/TAO/docs/rtcorba/queue-per-lane.gif
Binary files differ
diff --git a/TAO/docs/rtcorba/reactor-per-lane.gif b/TAO/docs/rtcorba/reactor-per-lane.gif
new file mode 100644
index 00000000000..37f2195acdb
--- /dev/null
+++ b/TAO/docs/rtcorba/reactor-per-lane.gif
Binary files differ
diff --git a/TAO/docs/rtcorba/status.html b/TAO/docs/rtcorba/status.html
new file mode 100644
index 00000000000..781617616b7
--- /dev/null
+++ b/TAO/docs/rtcorba/status.html
@@ -0,0 +1,131 @@
+<html>
+<!-- $Id$ -->
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Status of Real-Time CORBA Support in TAO</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body>
+
+<h3><a name="intro">Real-Time CORBA Support in TAO</a> </h3>
+<a name="status">
+
+<p>Support for <a href="http://www.omg.org">OMG</a> <a
+href="http://cgi.omg.org/cgi-bin/doc?ptc/99-05-03">Real-Time CORBA 1.0
+specification</a> has been added to TAO. For an overview of Real-time
+CORBA features, please see the <A
+HREF="http://www.cs.wustl.edu/~schmidt/report-doc.html#rt">C/C++ Users
+Journal columns</A> written by <A
+HREF="http://www.cs.wustl.edu/~schmidt/">Douglas Schmidt</A> and <A
+HREF="http://www.iona.com/hyplan/vinoski/">Steve Vinoski</a>. For a
+detailed design discussions and results of empirical performance
+analyzes of TAO's Real-time CORBA implementation, please see the <A
+HREF="http://www.cs.wustl.edu/~schmidt/doc-group.html">DOC group's</a>
+<A
+HREF="http://www.cs.wustl.edu/~schmidt/corba-research-realtime.html">Real-time
+CORBA research page</A>.
+
+<p>As usual, questions, comments, and contributions should be posted
+to the <a href="news:comp.soft-sys.ace">comp.soft-sys.ace</a>
+newsgroup, and bug reports can be submitted either through our
+web-based <a
+href="http://ace.cs.wustl.edu/bugzilla/index.cgi">bug-tracking
+system</a> (best) or by filling out the <A
+HREF="../../PROBLEM-REPORT-FORM">TAO_ROOT/PROBLEM-REPORT-FORM</A>
+and posting it to the newsgroup. Please indicate &quot;RTCORBA&quot;
+in the component field when submitting a bug report. </p>
+
+<p>Points of contact for the project are:
+
+<ul>
+ <li><a href="mailto:corsaro@cs.wustl.edu">Angelo Corsaro</a> - collocation and policy
+ encoding into ior</li>
+ <li><a href="mailto:irfan@cs.wustl.edu">Irfan Pyarali</a> - POA threadpools and RT POA</li>
+ <li><a href="mailto:marina@cs.wustl.edu">Marina Spivak</a> - all other features and online
+ documentation </li>
+ <li><a href="mailto:yamuna@oomworks.com">Yamuna Krishnamurthy</a> - Diffserv support in RTCORBA </li>
+</ul>
+
+<h3><a name="supported">Supported Features</a></h3>
+
+<p>Following is the complete list of features from the Real-Time CORBA 1.0 specification
+that are currently supported in TAO. (These do not include <a href="#in progress">work
+in progress</a>).
+
+<ul>
+ <li>Real-Time ORB</li>
+ <li>Real-Time POA</li>
+ <li>Real-Time Current</li>
+ <li>Priority Mappings</li>
+ <li>Client_Propagated Priority Model</li>
+ <li>Server_Declared Priority Model</li>
+ <li>Server Protocol Policy</li>
+ <li>Client Protocol Policy</li>
+ <li>Priority Banded Connections</li>
+ <li>Explicit Binding</li>
+ <li>Private Connections</li>
+ <li>Invocation Timeout</li>
+ <li>RT Mutex</li>
+ <li>POA Threadpools</li>
+</ul>
+
+<h3><a name="unsupported">Unsupported Features</a></h3>
+
+<p>The following features are not currently supported, and there are no immediate plans
+for their implementation:
+
+<ul>
+ <li>POA Threadpool request buffering</li>
+ <li>POA Threadpool thread borrowing </li>
+ <li>Priority Transforms</li>
+ <li>ORBinit command-line option</li>
+</ul>
+
+<h3><a name="future">Future Work</a></h3>
+
+<ol>
+
+ <li>Currently, persistent objects are not supported for RT POAs. We
+ need to add this feature.</li>
+
+ <li>Currently, purging of connection only happens for the lane of
+ the thread that runs out of connection. We need to change this
+ such that we allow system wide purging.</li>
+
+ <li>Currently, all user-created threads are part of the default
+ thread pool. There is nothing done to separate out these threads
+ into different (implicit) lanes based on their priorities. We may
+ need to add this separation to get better/predictable behavior
+ with respect to sharing of resources across threads of different
+ priorities.</li>
+
+ <li>Currently, some CDR memory pools are global. We should
+ reevaluate them to see which of them can be made a per-lane
+ resource.</li>
+
+ <li>Improve current RT CORBA implementation through benchmarking and
+ optimizations, resolving known bugs and issues, adding examples,
+ and other enhancements.</li>
+
+ <li>Implement an alternative real-time orb architecture using a
+ <em>queue-per-lane</em> approach, as described in the <a
+ href="architecture.html">TAO Real-Time Architecture</a>
+ section. In this approach, each threadpool lane owns a queue,
+ while I/O resources are being shared among all the threadpool
+ lanes of the same priority within a server. Strategize TAO to use
+ either <em>queue-per-lane</em> or <em>reactor-per-lane</em>
+ implementation, and compare the two.</li>
+
+ <li>As both real-time and fault tolerance implementations mature
+ separately, explore issues in combining them, and, ultimately,
+ enable TAO to provide applications with both real-time and fault
+ tolerance support at the same time. </li> </ol>
+
+<hr>
+<i>
+
+<p>Last modified: $Date$</i></p>
+</body>
+</html>