doc/plugin-architecture/plugin-architecture.tex
changeset 0 2b3e5ec03512
equal deleted inserted replaced
-1:000000000000 0:2b3e5ec03512
       
     1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
     2 \documentclass[11pt]{article}
       
     3 \usepackage{graphicx,times,lscape,fancyheadings,color}
       
     4 
       
     5 \textwidth 6.5in
       
     6 \textheight 9.0in
       
     7 \oddsidemargin -0.1in
       
     8 \topmargin -0.5in
       
     9 \parindent 0.0in
       
    10 \parskip 5pt
       
    11 
       
    12 \setcounter{secnumdepth}{4}
       
    13 
       
    14 \chead{}
       
    15 \input{local-macros}
       
    16 
       
    17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    18 \begin{document} 
       
    19 
       
    20 \title{DTN Plugin Architecture \\
       
    21 {\large Approved for Public Release, Distribution Unlimited.  [2/27/2007]}
       
    22 } 
       
    23 
       
    24 \author{Rajesh Krishnan, Christopher Small, Ram Ramanathan, Joanne Mikkelson, 
       
    25 and Prithwish Basu\thanks{Contact: pbasu@bbn.com, 617.873.7742}\\ 
       
    26 BBN Technologies, 10 Moulton St, Cambridge MA 02138} 
       
    27 \date{\today}
       
    28 \maketitle
       
    29 
       
    30 \tableofcontents
       
    31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    32 \newpage
       
    33 \section{Introduction} \label{sec:intro}
       
    34 
       
    35 In this document, we describe a DTN reference system architecture.  The purpose
       
    36 of this document is to identify the components of the DTN reference system, 
       
    37 and to define and specify the semantics of the interfaces between the 
       
    38 components.  
       
    39 %We seek feedback from the DTN community on the architecture and
       
    40 %the interfaces described here, for possible inclusion in future versions of
       
    41 %this document.
       
    42 
       
    43 The reader is assumed to be familiar with the Bundle Protocol
       
    44 specification~\cite{BP-ID}, the Bundle Security Protocol
       
    45 specification~\cite{BSP-ID}, and the DTNRG reference
       
    46 implementation~\cite{DTN2}.  
       
    47 
       
    48 A particular goal of this architecture is to enable the community to experiment
       
    49 with multiple solutions for persistent storage, routing, naming and late
       
    50 binding, policy, and DTN convergence layers, while continuing to build upon a
       
    51 common core of open DTNRG standards and software. This is accomplished by
       
    52 defining interfaces that allow the experimental features to plug into the
       
    53 common core.  In this document, the term {\em system} will refer to the
       
    54 SPINDLE-II DTN system (the core of which is based on the DTN2 system), unless
       
    55 specified otherwise.  
       
    56 
       
    57 \subsection{Glossary of Abbreviations and Technical Terms} \label{sec:glossary}
       
    58 
       
    59 Some commonly used acronyms and terms used throughout this document are listed
       
    60 and described below.
       
    61 
       
    62 \begin{description}
       
    63 \item[A/M] Application / Middleware
       
    64 \item[BPA] Bundle Protocol Agent
       
    65 \item[BP] Bundle Protocol
       
    66 \item[BSP] Bundle Security Protocol
       
    67 \item[CLA] Convergence Layer Adapter
       
    68 \item[DBMS] Database Management System
       
    69 \item[DP] Decision Plane
       
    70 \item[DS] Data Store
       
    71 \item[DTNRG-public] A design specification that will undergo the DTNRG consensus process during DTN Program Phase 2.
       
    72 \item[EID] Endpoint IDentifier for denoting a DTN endpoint (see~\cite{BP-ID})
       
    73 \item[GBOF-ID] Global Bundle Or Fragment ID
       
    74 \item[KB] Knowledge Base
       
    75 \item[Link] An association between two DTN endpoints (detailed description in Section \ref{sec:linktypes})
       
    76 \item[MANET] Mobile Ad hoc NETwork
       
    77 \end{description}
       
    78 
       
    79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
    80 \newpage
       
    81 \section{Overview} \label{sec:complist}
       
    82 
       
    83 The high-level components and interfaces of the system are illustrated in 
       
    84 Figure \ref{fig:componly}.
       
    85 
       
    86 %%%%%%%%%%%%
       
    87 \begin{figure}[htbp]
       
    88 \centering
       
    89 \includegraphics[height=3in]{figs/components-toplevel.pdf}
       
    90 \caption{\label{fig:componly} Architectural Components and Interfaces}
       
    91 \end{figure}
       
    92 %%%%%%%%%%%%
       
    93 %
       
    94 
       
    95 The system SHOULD contain the following components (described in
       
    96 Section \ref{sec:compdesc}):
       
    97 
       
    98 \vspace{-4pt}
       
    99 \begin{enumerate}
       
   100 \setlength{\parskip}{-3pt}
       
   101 \item Bundle Protocol Agent (BPA), a DTNRG-public component
       
   102 \item Data Store (DS)
       
   103 \item Decision Plane (DP)
       
   104 \item Convergence Layer Adapter (CLA)
       
   105 \item Application/Middleware (A/M)
       
   106 \end{enumerate}
       
   107 
       
   108 Table \ref{tab:comp-functions} summarizes the key functionality provided by
       
   109 each of the five components. The above components MAY be implemented in
       
   110 separate processes to enable language and tool-chain independence across
       
   111 components. 
       
   112 
       
   113 Instances of the BPA will be also referred to as the {\it core} and instances
       
   114 of the other four components shall be referred to as {\it plugins}.  The DS
       
   115 SHOULD provide a service that is accessible from all other components of the
       
   116 system.\footnote{As a result, the system can support both daemon-centric and
       
   117 database-centric concepts of operation.}
       
   118 
       
   119 The system MUST implement the relevant DTNRG-public interfaces as name below
       
   120 and described in Section \ref{sec:interfaces}:
       
   121 \vspace{-4pt}
       
   122 \begin{enumerate}
       
   123 \setlength{\parskip}{-3pt}
       
   124 \item Data Store Interface (used by BPA, CLA, DP, and A/M)
       
   125 \item Decision Plane Interface (used by BPA)
       
   126 \item Convergence Layer Adapter Interface (used by BPA)
       
   127 \item Bundle Protocol Agent Interface (used by A/M)
       
   128 \end{enumerate}
       
   129 
       
   130 All interfaces SHOULD be provided using the Inter-Component Communication 
       
   131 protocol (discussed in Section \ref{sec:iccp}, defined in a separate document)
       
   132 for uniformity.
       
   133 
       
   134 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   135 \begin{landscape}
       
   136 \begin{table}[htbp]
       
   137 \centering
       
   138 {\small
       
   139 \begin{tabular}{|p{1.5in}|p{1.5in}|p{1.5in}|p{1.5in}|p{1.5in}|}
       
   140 \hline
       
   141 {\bf BPA} & {\bf DS} & {\bf CLA} & {\bf DP} & {\bf A/M}\\
       
   142 \hline
       
   143 Implement the Bundle Protocol specification
       
   144 &
       
   145 Store, retrieve, and delete key-data pairs
       
   146 &
       
   147 Provide a bundle transport mechanism
       
   148 &
       
   149 Receive link and bundle event notifications from the BPA and 
       
   150 generate actions (requests).
       
   151 &
       
   152 Generate, submit, and receive application bundle payloads
       
   153 \\
       
   154 \hline
       
   155 
       
   156 Implement the Bundle Security Protocol specification
       
   157 &
       
   158 Database management for metadata, including schema management,
       
   159 and query processing
       
   160 &
       
   161 Neighbor discovery (via scanning or staring)
       
   162 &
       
   163 Provide an adaptive dissemination service that can be used 
       
   164 by various routing and naming protocols
       
   165 &
       
   166 Create/remove registration with BPA
       
   167 \\
       
   168 \hline
       
   169 
       
   170 Implement the Bundle Protocol Agent Interface (accessed by A/M)
       
   171 &
       
   172 Knowledge base management for metadata, including ontology management,
       
   173 query processing, and rule-based inference
       
   174 &
       
   175 Link formation, tear-down, and characterization (e.g., delay, capacity, 
       
   176 loss) 
       
   177 &
       
   178 Perform a long-term characterization of available communication 
       
   179 opportunities (e.g., computes a cost metric)
       
   180 &
       
   181 Register procedure(s) for handling delivery failure
       
   182 \\
       
   183 \hline
       
   184 
       
   185 Use and implement support for DP interface, CLA interface, and DS interface
       
   186 &
       
   187 Manage storage of bundles, bundle metadata, registration information, BPA state
       
   188 if any, connectivity (historic, current, and scheduled) information, naming
       
   189 ontology, and cached content 
       
   190 &
       
   191 Link status reporting (e.g., in response to queries)
       
   192 &
       
   193 Process policy inputs and respond to queries regarding decision choices
       
   194 that conform to policy
       
   195 &
       
   196 \\
       
   197 \hline
       
   198 
       
   199 &
       
   200 Database triggers
       
   201 &
       
   202 Implement CLA interface
       
   203 &
       
   204 Perform forwarding and scheduling decisions for bundles
       
   205 &
       
   206 \\
       
   207 \hline
       
   208 
       
   209 &
       
   210 Implement DS interface
       
   211 &
       
   212 &
       
   213 Perform route computation and/or route discovery
       
   214 &
       
   215 \\
       
   216 \hline
       
   217 
       
   218 &
       
   219 &
       
   220 &
       
   221 Perform name resolution and distributed name KB management
       
   222 &
       
   223 \\
       
   224 \hline
       
   225 
       
   226 &
       
   227 &
       
   228 &
       
   229 Implement DP interface
       
   230 &
       
   231 \\
       
   232 \hline
       
   233 
       
   234 \end{tabular}
       
   235 }
       
   236 \caption{Summary of functionality of system components \label{tab:comp-functions}}
       
   237 \end{table}
       
   238 \end{landscape}
       
   239 
       
   240 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   241 \newpage
       
   242 \section{Architectural Components} \label{sec:compdesc}
       
   243 
       
   244 In this section we describe each of the system components mentioned in Section
       
   245 \ref{sec:complist} (DS, CLA, DP, A/M). These will be implemented as plug-ins in
       
   246 the SPINDLE-II system; in other words, a newly developed module (implemented as
       
   247 a process) can be started on the node and its services will be automatically
       
   248 available to the other already running DTN processes.
       
   249 
       
   250 
       
   251 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   252 \subsection{Bundle Protocol Agent}
       
   253 \label{sec:bpa}
       
   254 
       
   255 The bundle protocol agent (BPA) of a DTN node offers bundle protocol (BP)
       
   256 services.  The BPA executes procedures of the BP and the Bundle Security
       
   257 Protocol (BSP) with help from other components in the system.  The BPA MUST
       
   258 comply with the DTNRG specifications for the BP~\cite{BP-ID} and the BSP
       
   259 ~\cite{BSP-ID}.  
       
   260 
       
   261 The BPA is responsible for implementing the mechanisms of the bundle protocol,
       
   262 but any key decisions (for example, those based on particular policies or
       
   263 optimization strategies) that need to be taken during the execution of such
       
   264 mechanisms MAY be exported to the {\em Decision Plane (DP)} module.  Typically
       
   265 these decisions are indicated within the BP and BSP specifications as local
       
   266 policy or implementation issues.
       
   267 
       
   268 The BPA is responsible for taking actions on every bundle that passes through 
       
   269 the DTN node.   For example, the BPA is responsible for reading, creating, 
       
   270 and updating fields in the bundle header.
       
   271 
       
   272 A comprehensive list of functional requirements for the BPA in terms of
       
   273 conformance to the BP and BSP can be found in a companion document \cite{MJ}.
       
   274 Some key functions are:
       
   275 
       
   276 \begin{enumerate}
       
   277 
       
   278 \item Forwarding a bundle to a ``next-hop'' node via a specified convergence
       
   279 layer adapter.  The BP specification talks about forwarding to the ``minimum
       
   280 reception group'' for each bundle in each of the unicast, multicast, and
       
   281 anycast scenarios. The DP must compute these lists and returns them to the BPA
       
   282 along with scheduling instructions to handle ``Class of Service'' requirements.
       
   283 
       
   284 \item Fragmentation and reassembly of bundle payload (both reactive and 
       
   285 pro-active).
       
   286 
       
   287 \item Implementation of the Custody-transfer mechanism in the bundle header,
       
   288 sending Custody Acknowledgments, etc.: The decision of whether to accept,
       
   289 refuse, or relinquish custody is taken by the DP. Once a decision has been
       
   290 made, a list of DP-specified actions such as re-forwarding the bundle may have
       
   291 to be taken (depends on policy).
       
   292 
       
   293 \item Delivery to application: Deliver incoming bundle to application if it is
       
   294 {\it registered} on this node; otherwise abandon delivery based on policy.
       
   295 
       
   296 \item Discarding and Deleting a bundle: If the set of ``retention
       
   297 constraints'' on a bundle is empty, then discard the bundle and all references
       
   298 to it. Deleting a bundle involves removing all retention constraints and then
       
   299 discarding it.  This may happen upon bundle expiration. These mechanisms can
       
   300 richly interact with the policy module within the DP.
       
   301 
       
   302 \item Sending administrative bundles such as status reports.
       
   303 
       
   304 \item Security functions such as authentication, confidentiality, 
       
   305 and data integrity.
       
   306 %prevention of DOS over resource strapped networks.
       
   307 \end{enumerate}
       
   308 
       
   309 In addition, the BPA SHOULD {\it implement} the Bundle Protocol Agent Interface that
       
   310 can be accessed by applications, and {\it use} the other interfaces listed in
       
   311 Section \ref{sec:complist}.
       
   312 
       
   313 %The interactions between the BPA and other components are described in 
       
   314 %Section \ref{sec:XXX}.
       
   315 
       
   316 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   317 \subsection{Data Store}
       
   318 \label{sec:ds}
       
   319 
       
   320 The Data Store (DS) module offers a persistent storage service and is
       
   321 responsible for storing bundles, knowledge about bundle metadata, network state
       
   322 information (routing tables, name ontology data, content metadata, policy
       
   323 rules), and application state information (registrations and other metadata).
       
   324 We note that the SPINDLE system may eventually need to cater to a wide spectrum
       
   325 of solutions for the data storage layer. These may range from a dumb file
       
   326 system residing on Flash memory attached to a low power sensor node to a very
       
   327 powerful logic engine running on a powerful DTN node.  Hence a DS in the
       
   328 SPINDLE system could exist in one of the following incarnations of increasing
       
   329 capability: 
       
   330 
       
   331 \begin{enumerate}
       
   332 \item A simple key-value store (that can be based on a file system) that allows 
       
   333 other modules to add, retrieve and delete key-value pairs. Bundles, bundle metadata 
       
   334 and network state information can exist in such a store. This may be 
       
   335 applicable for resource-strapped devices such as battery-powered sensor 
       
   336 nodes.
       
   337 
       
   338 \item A DBMS that allows other modules to add, delete, and get
       
   339 elements with multiple fields information (by its key). An DBMS might 
       
   340 expose only {\it canned queries} to other modules, or it might allow other 
       
   341 modules to submit queries, e.g. written in SQL.
       
   342 
       
   343 \item A full fledged knowledge base (KB) that supports deduction or inference
       
   344 by means of execution of rules (e.g., Prolog style) on stored facts. In
       
   345 addition to add/delete(key)/get(key) features, a KB will support advanced
       
   346 deductive database style querying features. Advanced KBs like Flora-2 even
       
   347 allow setting up ``triggers'' that fire when a certain rule executes
       
   348 successfully, and this typically results in the execution of a specified
       
   349 callback function.  A KB will include support for data storage, either
       
   350 internally, or via a back-end storage system such as MySQL or Berkeley DB.
       
   351 
       
   352 \end{enumerate}
       
   353 
       
   354 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   355 \subsection{Decision Plane} \label{sec:dp}
       
   356 
       
   357 The Decision Plane component includes the following subcomponents which may
       
   358 interact with each other:
       
   359 
       
   360 \begin{enumerate}
       
   361 
       
   362 \item {\it Router module:} Functions of a Router module include unicast and
       
   363 multicast route computation, generation of next hop(s) for bundles, replication
       
   364 and forwarding, bundle scheduling, decision to take custody of a bundle,
       
   365 decision to discard a bundle, etc. 
       
   366 
       
   367 Note that while the BPA performs the forwarding mechanism to a particular CLA,
       
   368 it is the Router module that performs the consulting role for the BPA.  Similarly,
       
   369 for custody transfer, the BPA performs the mechanism of assuming and
       
   370 relinquishing custody and sending a custody-ACK to the previous node, but it
       
   371 consults the external router module to decide whether to take custody or not.
       
   372 
       
   373 \item {\it Adaptive Dissemination module:} This is responsible for determining
       
   374 {\it what} network state to distribute, and {\it to whom}, and {\it when}. It
       
   375 is also responsible for gathering network state encoded in incoming
       
   376 dissemination bundles and populating the KB appropriately, if one exists. For
       
   377 example, decisions such as whether to alter the content of a flooded
       
   378 network-state bundle before re-dissemination will be taken by this module. This
       
   379 module is also responsible for interacting with CLA (via the BPA) to track
       
   380 changes in the status of incoming/outgoing links and then capture these changes
       
   381 in the ``to-be-disseminated'' network state.  Even though the network state is
       
   382 stored in the KB, the dissemination logic may be implemented outside the KB for
       
   383 performance reasons, if necessary.
       
   384 
       
   385 \item {\it Policy module:} This will let users add and delete policies that may
       
   386 be stored in the KB, if one exists. Basic functions include interpretation of
       
   387 policy, enforcement of policy, and dispatching an event afterward. Performance
       
   388 reasons aside, ideally every bundle or network event in the SPINDLE system
       
   389 should be subjected to policy enforcement. This advocates a
       
   390 ``trap-and-dispatch'' (or ``event-condition-action'') style design.  An 
       
   391 alternative style is that of ``consultation.'' The policy module listens on 
       
   392 a well known port for policy-enforcement requests
       
   393 and reacts only when asked.
       
   394 
       
   395 \item {\it Naming and Late binding module:} This module maintains and
       
   396 opportunistically shares name ontologies (or {\it schemes}, as referred to
       
   397 in~\cite{BP-ID}) between DTN nodes. This module is called upon to resolve rich
       
   398 intentional names to canonical endpoint identifiers of care-of nodes that are
       
   399 subsequently used by the Router module. This is also responsible for
       
   400 registration and dissemination or synchronization of Name KBs (in particular,
       
   401 intentional name to canonical name bindings stored within).
       
   402 
       
   403 \item {\it Content-based access module:} responsible for performing content
       
   404 caching/replication, distributed indexing, and content-addressable search.
       
   405 This may use several services from other DP modules, e.g., dissemination, late
       
   406 binding, external router.
       
   407 
       
   408 %{\it does this fall under Decision or App? Or maybe there should be no
       
   409 %distinction?}
       
   410 
       
   411 \end{enumerate}
       
   412 
       
   413 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   414 \subsection{Convergence Layer Adapter}
       
   415 \label{sec:cla}
       
   416 
       
   417 A Convergence layer adapter's function (as described in \cite{BP-ID}) is to
       
   418 send and receive bundles on behalf of the BPA. It achieves this by utilizing
       
   419 the services of the native protocol which is supported in one of the {\it
       
   420 underlying} networks that the node is homed on. A CLA thus {\it adapts} the
       
   421 packet/frame/signal transmission service provided in the underlying network to
       
   422 an abstract bundle transmission service that presents itself to the BPA.  
       
   423 
       
   424 A CLA is responsible for maintaining information about DTN {\it links} (status,
       
   425 schedule, and possibly other QoS parameters) and discover them if possible.
       
   426 After discovering a DTN peer or monitoring the status of a link, the CLA is
       
   427 responsible for generating and posting events to the BPA about such facts.
       
   428 These facts then get relayed to the DP and may also be stored in the DS. 
       
   429 
       
   430 %The CLA may also interact directly (IPC poke?) with some decision modules
       
   431 %(adaptive dissemination) for triggered dissemination under certain
       
   432 %circumstances. 
       
   433 
       
   434 %{\it What is the service contract of send/receive with the BP? and how are the
       
   435 %CLA params presented to BP?}
       
   436 
       
   437 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   438 \subsection{Application/Middleware}
       
   439 \label{sec:am}
       
   440 
       
   441 The application agent (also referred to as the A/M module) uses the BP services
       
   442 to transmit and receive bundle payloads. This can act as a multiplexed DTN
       
   443 communication service to other non-DTN applications running on the node.
       
   444 
       
   445 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   446 \newpage
       
   447 \section{Interfaces}
       
   448 \label{sec:interfaces}
       
   449 
       
   450 In this section we describe the primitives for each of the four interfaces 
       
   451 identified in Figure \ref{fig:componly}.  
       
   452 
       
   453 The BPA implements the BPA interface that can be used by A/M and DP to send and
       
   454 receive bundles.  
       
   455 
       
   456 The DP implements the DP interface that is accessed by the BPA to serve various
       
   457 decision points identified in the BP (such as routing, scheduling, name
       
   458 resolution, custody acceptance, and storage management).
       
   459 
       
   460 The DS implements the DS interface for storing bundles, bundle metadata,
       
   461 application registrations, connectivity information, and other system state.
       
   462 The DS interface can be accessed system-wide.  The CLA, for example, may access
       
   463 the DS interface for storing and retrieving connectivity information that is
       
   464 discovered or scheduled/specified.  The DP, for example, may access the DS
       
   465 interface for storing and retrieving information related to routing, naming,
       
   466 policy, and content caching/indexing.
       
   467 
       
   468 The CLA implements the CLA interface which is accessed by the BPA for 
       
   469 bundle transport and link management.
       
   470 
       
   471 We briefly discuss at the end of this section the Inter-Component 
       
   472 Communication Protocol (ICCP), the details of which will be described 
       
   473 in a separate document.
       
   474 
       
   475 \subsection{Interface Conventions}
       
   476 
       
   477 We note that this is a ``semantic'' interface, that is, we expect it to be
       
   478 specifying the kinds of things that go across the interface and their meanings,
       
   479 not necessarily at a level necessary for implementation. We expect, though,
       
   480 that an implementation-level specification can be generated from this easily.
       
   481 
       
   482 All messages are assumed to be transparently reliably delivered.  This
       
   483 functionality may be provided by the inter-component communication protocol
       
   484 mentioned in Section \ref{sec:iccp}.
       
   485 
       
   486 All parameters are assumed to be ``required'' unless specifically
       
   487 noted to be ``optional'' (Opt).
       
   488 
       
   489 The interface messages are named in a top-down hierarchical
       
   490 fashion. For example, in the DP and CLA interfaces, at the highest
       
   491 level, there are four kinds of messages: Event, Request, Query,
       
   492 Report. At the next level, there are Link-specific and Bundle-specific
       
   493 messages, for each message type. At a further level, there is
       
   494 Created/Deleted, Transmitted/Received etc. which are 
       
   495 the next level down.  This naming convention is intended for readability 
       
   496 of the specification only. The implementation should adopt/retain the style
       
   497 most convenient to it.
       
   498 
       
   499 Query/Report messages consist of a set of ``paired'' messages---a Query
       
   500 message from a plugin to the BPA requesting certain information from the BPA
       
   501 and a report message (for that query) from the BPA to the plugin delivering the
       
   502 requested information, if possible.\footnote{Note that Query/Report messages are
       
   503 possible in the reverse direction as well, e.g., the BPA can send a Query
       
   504 message to the CLA or the DS and can expect a Report back.} Unlike the
       
   505 Request-Event messages which are only loosely tied, there is a tighter coupling
       
   506 between query and report; in particular, a report identifies which query is
       
   507 being responded to.
       
   508 
       
   509 \subsubsection{Links and Link Types} \label{sec:linktypes}
       
   510 
       
   511 A link in DTN2 is an association between two DTN endpoints. In other words it
       
   512 can be represented as a relation between two EIDs which is established over a
       
   513 certain convergence layer. A link possesses physical attributes such as
       
   514 datarate, (estimated) delay, error rate, loss rate etc. as well as other
       
   515 attributes including {\it type}, {\it state}, and other {\it flags}.  A 
       
   516 measurement process (in the convergence layer adapter) can track and 
       
   517 update the values of these attributes.
       
   518 
       
   519 \begin{table}
       
   520 \centering
       
   521 \begin{tabular}{|l|c|c|c||c|c|}
       
   522 \multicolumn{1}{c}{ } & \multicolumn{3}{c}{States} & \multicolumn{2}{c}{Flags} \\
       
   523 \hline
       
   524 Link Type & OPEN, BUSY & UNAVAILABLE & AVAILABLE & UNUSABLE & REACHABLE\footnotemark \\
       
   525 \hline
       
   526 Persistent (AlwaysOn)             & x & x &   & x &  \\
       
   527 \hline
       
   528 On-demand            & x & x & x & x &  \\
       
   529 \hline
       
   530 Opportunistic (Discovered)           & x & x &   & x & x\\
       
   531 \hline
       
   532 Scheduled            & x & x & x & x & x\\
       
   533 \hline
       
   534 Predicted            & x & x &   & x & x\\
       
   535 \hline
       
   536 \end{tabular}
       
   537 \caption{\label{table:link-tsf} Link types and possible states/flags.}
       
   538 \end{table}
       
   539 \footnotetext{Anticipated changes in the way bundle queuing is done for 
       
   540 closed links might make the REACHABLE flag unnecessary. Thus this column 
       
   541 is likely to disappear in future versions.}
       
   542 
       
   543 There are three link types implemented in DTN2: Persistent (AlwaysOn),
       
   544 On-demand, and Opportunistic (Discovered).\footnote{DTN2 uses AlwaysOn
       
   545 to denote what the DTN Architecture refers to as Persistent;
       
   546 ``Discovered'' is influenced by the term   
       
   547 ``neighbor discovery'' commonly used in mobile ad hoc networking literature.}
       
   548 We extend the semantics of the Opportunistic link to support a wider range 
       
   549 of neighbor discovery procedures.  We add the
       
   550 remaining two types discussed in the DTN Architecture: Scheduled, and
       
   551 Predicted.\footnote{
       
   552 There is a Scheduled link type in DTN2 but it is not fully implemented.}
       
   553 Not all link states and flags apply to all link types.\footnote{In
       
   554 particular, note that there is no discovery for on-demand links, and
       
   555 reachability is assumed.} Table \ref{table:link-tsf} depicts the various {\it
       
   556 types} of links and their corresponding range of {\it states} and {\it flags}
       
   557 that SHOULD be allowed in a DTN system. A detailed description of the various
       
   558 link states and flags can be found in Section \ref{sec:linkstates}.
       
   559 
       
   560 A Persistent (AlwaysOn) link is simply a static link, and it should always 
       
   561 be open. The
       
   562 link is opened as soon as it is created. If the link closes for any reason the
       
   563 link becomes UNAVAILABLE and the BPA will attempt to reopen the link.
       
   564 An example of an AlwaysOn link would be a wired connection to a peer such as a
       
   565 T1. 
       
   566 
       
   567 An On-demand link is assumed to be usable at any time as required, but is not
       
   568 opened until there are bundles to be sent over the link. When in this state,
       
   569 the link is AVAILABLE. Once the link is OPEN, if no bundle traffic is sent over
       
   570 an on-demand link for a while, the BPA will consider the link idle and
       
   571 automatically close the link, returning it to AVAILABLE. If the link closes for
       
   572 any reason other than being idle or being explicitly closed by an operator, the
       
   573 link becomes UNAVAILABLE and the BPA will periodically attempt to reopen the
       
   574 link. If the link is successfully reopened, the link state returns to OPEN. A
       
   575 dial-up connection over a modem would be represented by an
       
   576 on-demand link.
       
   577 
       
   578 An Opportunistic (Discovered) link is used with CLAs when there is no need 
       
   579 to form a {\em point-to-point} connection for a link to be open.   
       
   580 Discovered links are intended to capture characteristics of communications in 
       
   581 multihop broadcast wireless networks (MANETs). Note that
       
   582 in a broadcast channel context there really is no ``link'' {\it per se,} but peers
       
   583 discover ability to communicate, which we declare as links. 
       
   584 %We shall assume, as
       
   585 %is consistent with current state of art, that the CLA only discovers and
       
   586 %uses two-way communication possibilities. 
       
   587 % XXX:  I think above sentence is too strong, I can imagine CLAs that 
       
   588 % discover one-way communication possibilities through an out-of-band 
       
   589 % mechanism; --krash
       
   590 One
       
   591 popular way of peer discovery is using a Hello protocol~\cite{OLSR}, where each
       
   592 node puts the set of nodes it can hear in the Hello, to help determine
       
   593 existence of bidirectional communications. Thus, receiving a hello is {\em not}
       
   594 an indication of bidirectional communications, although it is a necessary
       
   595 condition.
       
   596 
       
   597 Discovered links may be constrained, for example, in a ``only k links out 
       
   598 of n'' situation.  
       
   599 %As long as the CLA can transmit on any k---it need not transmit 
       
   600 %simultaneously, but may transmit in round robin. 
       
   601 If the situation calls for choosing a particular set of k links and
       
   602 locking out the other (for example, if a CLA knows which satellites it
       
   603 can associate with but can do so only k at a time), then these would
       
   604 not be Discovered links by definition (they are not for point to point
       
   605 links).\footnote{In a one-of-many link situation A $\rightarrow$
       
   606 one-of(B,C,D), the ``choosing'' is either ``hard'' (i.e., you cannot
       
   607 send on the other links for more than a threshold period of time), or
       
   608 ``soft'' (you can do round robin).  With hard links the DP has to
       
   609 first choose the link to use (this may be part of topology control),
       
   610 say A $\rightarrow$ C. In this case, both A $\rightarrow$ D and A
       
   611 $\rightarrow$ B are both closed and unreachable. With soft links you
       
   612 can keep the links open and send on each within milliseconds of each
       
   613 other.  In the current semantics, Discovered links only cover the
       
   614 ``soft type'', that is, when all can be kept open and reachable.}
       
   615 
       
   616 Thus, with discovered links, any time a peer is
       
   617 reachable, bundles can be transmitted or received without any additional
       
   618 action, so the link is always OPEN if it is REACHABLE. The link will remain
       
   619 open if the peer becomes
       
   620 unreachable temporarily, but if the peer remains unreachable for a long time,
       
   621 then the link can be considered closed, and the state will be changed to
       
   622 UNAVAILABLE (the closed state).
       
   623 
       
   624 Note that a special case of the Opportunistic link is implemented in DTN2
       
   625 which is subsumed by the more general semantics discussed above.  In the 
       
   626 current implementation, links are created and opened when a previously 
       
   627 unknown peer somehow connects to the node to open a link.  If it can be 
       
   628 inferred from this connection that traffic can be sent from the node to this 
       
   629 peer, an opportunistic link is created and opened so that bundles may be sent 
       
   630 to the new peer. Once an opportunistic link is closed for any reason, it 
       
   631 becomes UNAVAILABLE and will only be reopened if the peer opens the
       
   632 link again. An example of an opportunistic link is one created when a peer
       
   633 opens a TCP or dial-up connection to the node; the node now knows it can
       
   634 communicate with and send bundles to the peer that initiated the first
       
   635 connection, and represents this fact with an opportunistic link. 
       
   636 
       
   637 Scheduled links can be thought of as an extension to on-demand links. When a
       
   638 scheduled link is created, it is set to AVAILABLE. This means the link is
       
   639 available to be opened.
       
   640 %Unlike on-demand though, the opening is not under any user's control but under
       
   641 %the control of the ``clock''. When the scheduled time comes, it moves
       
   642 %automatically into state OPENING. There it waits for a contactUpEvent just
       
   643 %like the on-demand link. When this event happens, it moves into OPEN.
       
   644 When the scheduled time comes, the BPA will open the link. (This adds a 
       
   645 new requirement to the functionality of the BPA.)
       
   646 \typeout{XXX If this new requirement is hard, DP can track schedule and open
       
   647 at the right instant.} A
       
   648 scheduled link is expected to be reachable during the scheduled interval.  If
       
   649 the link is still scheduled to be open when it closes, it becomes UNAVAILABLE,
       
   650 and otherwise it becomes AVAILABLE until the next time the link is scheduled to
       
   651 be opened. If the link is UNAVAILABLE and the link is scheduled to be open,
       
   652 the BPA will try to reopen the link,
       
   653 like it does for UNAVAILABLE on-demand links, until the end of the scheduled
       
   654 opportunity. During the time the link is scheduled to be open, if the CLA can
       
   655 ascertain reachability, the REACHABLE flag can be used to provide extra
       
   656 information to the DP. A scheduled link would represent, for example,
       
   657 communications with a satellite which is overhead at regular intervals.
       
   658 
       
   659 A predicted link is similar to a discovered link. When created, it is
       
   660 UNAVAILABLE. A separate process (perhaps in the DP) computes the next time it
       
   661 expects the link to be REACHABLE. However,
       
   662 that is used for DP purposes only to make routing decisions, and the link is
       
   663 not opened automatically when the predicted time arrives. Instead, the
       
   664 discovery process
       
   665 %(hellos)
       
   666 is initiated shortly before the predicted time by the CLA.
       
   667 %When you hear back from the contact, a contactUpEvent forces the state into
       
   668 %OPEN. Then the OPEN to BUSY transition and the transitions to UNAVAILABLE are
       
   669 %as in discovered links.
       
   670 When the neighbor becomes reachable, the link becomes OPEN and then behaves
       
   671 like a discovered link: it is OPEN until the peer is unreachable for too long,
       
   672 at which point the link is closed and set to UNAVAILABLE. At the end of the
       
   673 predicted opportunity, discovery for the peer is discontinued. The difference
       
   674 between discovered and predicted links is that for predicted links we don't
       
   675 initiate discovery until the predicted time (or shortly before). For CLAs where
       
   676 the discovery process is continuous (e.g.\ MANETs), there is no functional
       
   677 difference in the CLA between predicted links and discovered links, but even in
       
   678 this case, the DP can make decisions based on whether a link has a predicted
       
   679 opportunity or not. A regularly observed UAV flyover would be described
       
   680 by a predicted link.
       
   681 
       
   682 \subsubsection{Link States and Flags} \label{sec:linkstates}
       
   683 
       
   684 The DP and CLA interfaces make use of four link states present in DTN2:
       
   685 UNAVAILABLE, AVAILABLE, OPEN, and BUSY.\footnote{DTN2 also has an OPENING state
       
   686 used for determining whether ContactDownEvent should be sent, but this state
       
   687 need not be used in the interface. The CLA posts EventLinkClosed and the BPA
       
   688 may need to keep track of on-demand links for which the RequestOpenLink message
       
   689 has been sent and EventLinkOpen has not been received yet, but in the external
       
   690 interface the link is simply not OPEN until the EventLinkOpen message has
       
   691 arrived.} The link can be in only one of these four states at a given time. Two
       
   692 additional states are added: UNUSABLE and REACHABLE. These two states are
       
   693 independent of the other four, so the link state should be considered a set of
       
   694 flags.
       
   695 
       
   696 The OPEN and BUSY \typeout{XXX We may want to revisit the idea of changing
       
   697 BUSY into a flag distinct from OPEN.} states signify that the
       
   698 link is open.  For links whose CLA requires a specific action to be done before
       
   699 communication can happen (e.g.\ dialout, set up a TCP connection, initiate a
       
   700 route discovery on a MANET to a remote node, etc.), these states mean that
       
   701 whatever needs to be done has been done and bundles can be sent on the link.
       
   702 For Discovered links, these states indicate that the peer is or very recently
       
   703 was reachable.  If the link is BUSY, the CLA is applying back-pressure to the
       
   704 BPA by requesting that the BPA not try to send any more bundles over the
       
   705 link.\footnote{In DTN2 this is set when the per-CLA bundle queue gets too long
       
   706 or as part of LinkAttributeChange Event. The DP would then have to perform a
       
   707 query to determine whether this has been set.}
       
   708 
       
   709 Closed links are either UNAVAILABLE or AVAILABLE. The difference between these
       
   710 two states generally pertains to whether or not the BPA must automatically try
       
   711 to reopen the link. The state is AVAILABLE is when the link is {\it closed},
       
   712 but {\it openable}.  UNAVAILABLE is when the link cannot be opened for some
       
   713 reason. The BPA will periodically attempt to reopen UNAVAILABLE links of the
       
   714 following types: AlwaysOn, On-demand, and Scheduled. For other link types,
       
   715 there is only one kind of closed state, so those links are always UNAVAILABLE
       
   716 when closed.
       
   717 
       
   718 The availability concept has more to do with the {\it ability} to open a link
       
   719 rather than policy directives such as ``I think this link is dangerous
       
   720 (eavesdroppers in there), so you SHOULD not open it even if it can be''. The
       
   721 latter concept is captured by {\it usability}. A link can be marked with the
       
   722 UNUSABLE flag based on policy. This flag can be set by the DP. If a link is
       
   723 marked UNUSABLE, the BPA and DP should not attempt to open it. 
       
   724 Usability is different from availability in that it is not an
       
   725 ``inability'' but a ``forbidding''. Note that the peer endpoint of an
       
   726 UNUSABLE link can still open a link and send bundles to the node; those
       
   727 bundles should be accepted and processed by the node because the UNUSABLE
       
   728 flag only disallows the local node from opening the link and sending bundles
       
   729 over it.
       
   730 
       
   731 The reachability of a link pertains to the ability to actually communicate over
       
   732 the link and talk to the peer. The DTN neighbor discovery process, if enabled,
       
   733 will use the underlay network to determine whether other DTN nodes are
       
   734 reachable. Nodes should provide their canonical EIDs as part of the discovery
       
   735 process so that links may be created and used in future decisions.  When the
       
   736 CLA ascertains bidirectional communications with some adequate quality (and
       
   737 keeps ascertaining it), the link will be marked REACHABLE. If discovery notices
       
   738 that a neighbor has become unreachable, the REACHABLE flag will be cleared.
       
   739 The REACHABLE flag is meant to express the communication ability currently
       
   740 present in the underlay network and is used to inform decisions made by the DP.
       
   741 
       
   742 
       
   743 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   744 % The four interface sections
       
   745 \input{ds-interface}
       
   746 \input{decision-interface}
       
   747 \input{cla-interface}
       
   748 \input{bpa-interface}
       
   749 %
       
   750 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   751 \subsection{Inter-Component Communication Protocol} \label{sec:iccp}
       
   752 
       
   753 Communications between the BPA and other components will use messages
       
   754 formatted using XML.  We currently plan to build upon and extend the 
       
   755 external router interface protocol developed by MITRE for this purpose.  
       
   756 Some extensions to the support the Data Store interface were described in 
       
   757 Section~\ref{sec:ds-iccp-impl}.  For example, the MITRE solution 
       
   758 uses UDP multicast, but we believe that it will be beneficial to 
       
   759 support TCP as well.
       
   760 
       
   761 Details of this protocol will be described in a separate document.
       
   762 
       
   763 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   764 \newpage
       
   765 \begin{thebibliography}{99}
       
   766 
       
   767 %\bibitem{MaxProp} J. Burgess, B. Gallagher, D. Jensen, and B. L. Levine,
       
   768 %``MaxProp: Routing for Vehicle-Based Disruption Tolerant Networks,'' {\em Proc.
       
   769 %IEEE Infocom 2006.}
       
   770 
       
   771 \bibitem{MITRE-IF} J. Bush and R. Durst, ``DTN External Router Interface,''
       
   772 {\em Presentation at DARPA DTN Phase 2 Kickoff}, August 2006.
       
   773 
       
   774 \bibitem{DTN2} M. Demmer, ``DTN2: DTNRG Reference Implementation''. Available
       
   775 from {\tt http://www.dtnrg.org}
       
   776 
       
   777 \bibitem{Flora2} FLORA-2: An Object-Oriented Knowledge Base Language.
       
   778 {\tt http://flora.sourceforge.net}
       
   779 
       
   780 \bibitem{MJ} J. Mikkelson and C. E. Jones, ``Bundle Protocol Agent Functional
       
   781 Requirements,'' October 2006 (available upon request).
       
   782 
       
   783 \bibitem{OLSR} T. Clausen, Ed. and P. Jacquet Ed., ``Optimized Link State 
       
   784 Routing Protocol (OLSR),'' {\tt http://ietf.org/rfc/rfc3626.txt}
       
   785 
       
   786 \bibitem{BP-ID} K. Scott and S. Burleigh, ``Bundle Protocol Specification,''
       
   787 IRTF DTNRG Internet Draft revision 06, August 2006.
       
   788 
       
   789 \bibitem{BSP-ID} S. Symington, S. Farrell, and H. Weiss, ``Bundle Security
       
   790 Protocol Specification,'' IRTF DTNRG Internet Draft revision 01, March 2006.
       
   791 
       
   792 \bibitem{XSB} XSB: A Logic Programming and Deductive Database system.
       
   793 {\tt http://xsb.sourceforge.net}
       
   794 
       
   795 \end{thebibliography}
       
   796 
       
   797 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       
   798 \end{document}
       
   799 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%