INTERNET-DRAFT Bhargav Bellur
Richard G. Ogier
Fred L. Templin
SRI International
2 March 2001
Topology Broadcast Based on Reverse-Path Forwarding (TBRPF)
<draft-ietf-manet-tbrpf-01.txt>
Status of This Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC 2026 except that the right to
produce derivative works is not granted.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
Topology Broadcast based on Reverse-Path Forwarding (TBRPF) is a
proactive, link-state routing protocol designed for use in mobile
ad-hoc networks. TBRPF has two modes: full topology (FT) and partial
topology (PT). TBRPF-FT uses the concept of reverse-path forwarding
to reliably and efficiently broadcast each topology update in the
reverse direction along the dynamically changing broadcast tree
formed by the min-hop paths from all nodes to the source of the
update. TBRPF-PT achieves a further reduction in control traffic,
especially in large, dense networks, by providing each node with the
state of only a relatively small subset of the network links,
sufficient to compute minimum-hop paths to all other nodes. In both
the FT and PT modes, a node forwards an update only if the node is
not a leaf of the broadcast tree rooted at the source of the update.
In addition, in the PT mode, a node forwards an update only if it
results in a change to the node's source tree. As a result, each
node reports only changes to a relatively small portion of its source
tree.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page i]
INTERNET-DRAFT TBRPF 2 March 2001
Contents
Status of This Memo ............................................... i
Abstract .......................................................... i
1. Introduction ................................................... 1
2. Changes ........................................................ 2
3. TBRPF Terminology .............................................. 3
4. Applicability Section .......................................... 4
4.1. Networking Context ........................................ 4
4.2. Protocol Characteristics and Mechanisms ................... 4
5. Neighbor Discovery ............................................. 6
5.1. Overview .................................................. 7
5.2. Neighbor Table ............................................ 8
5.3. Sending HELLO Messages .................................... 9
5.4. Processing a Received HELLO Message ....................... 9
5.5. Processing a Received UPDATE REQUEST Message .............. 10
5.6. Processing a received UPDATE REPLY message ................ 10
5.7. Sending an UPDATE REQUEST message ......................... 11
5.8. Expiration of the Timer nbr_life .......................... 11
5.9. Events Causing a Link to be Declared Down ................. 11
6. Reliable Delivery to Neighbors ................................. 12
6.1. Reliable, Sequenced Delivery Using NACKs .................. 12
6.2. Reliable Delivery Using ACKs .............................. 13
7. TBRPF-PT ....................................................... 14
7.1. Conceptual Data Structures and Messages ................... 15
7.2. Operation of TBRPF-PT ..................................... 16
7.2.1. Computing the Source Tree ............................ 17
7.2.2. Generating Tree Updates .............................. 17
7.2.3. Updating Parents ..................................... 18
7.2.4. Sending NEW PARENT Messages .......................... 18
7.2.5. Processing TREE UPDATE Messages ...................... 18
7.2.6. Processing NEW PARENT Messages ....................... 19
7.2.7. Processing a New Neighbor ............................ 19
7.2.8. Processing a Lost Neighbor ........................... 20
7.2.9. Packet Forwarding .................................... 20
7.3. Pseudocode for TBRPF-PT ................................... 20
7.4. Configurable Parameters ................................... 23
Bellur, Ogier, and Templin Expires 2 September 2001 [Page ii]
INTERNET-DRAFT TBRPF 2 March 2001
8. TBRPF-FT ....................................................... 23
8.1. Conceptual Data Structures and Messages ................... 24
8.2. Operation of TBRPF-FT ..................................... 26
8.3. Pseudocode for TBRPF-FT ................................... 30
8.4. Configurable Parameters ................................... 34
9. Application of TBRPF In Mobile Ad-hoc Networks (MANETs) ........ 34
9.1. Data Link Layer Assumptions ............................... 35
9.2. Internetworking Assumptions ............................... 36
9.3. Address Resolution Extensions for TBRPF Neighbor Discovery. 36
10. TBRPF Packets and TBRPF Protocol Messages ..................... 37
10.1. TBRPF Packet Header ...................................... 39
10.2. TBRPF Packet Body ........................................ 42
11. IANA Considerations ........................................... 69
12. Security Considerations ....................................... 70
13. Implementation Status ......................................... 70
Acknowledgments ................................................... 70
References ........................................................ 70
Bellur, Ogier, and Templin Expires 2 September 2001 [Page iii]
INTERNET-DRAFT TBRPF 2 March 2001
1. Introduction
TBRPF is a proactive, link-state routing protocol designed for mobile
ad hoc networks. It maintains optimal paths to all destinations at
all times, unlike on-demand routing protocols. It does not require
the periodic broadcast of topology information, unlike OLSR [18].
Instead, only differential changes in topology are reported in order
to minimize overhead. TBRPF has two modes: full topology (FT) and
partial topology (PT).
TBRPF-FT uses the concept of reverse-path forwarding to reliably
broadcast each topology update in the reverse direction along the
dynamically changing broadcast tree formed by the min-hop paths from
all nodes to the source of the update. Each node is thus provided
with the state of each link in the network. Since the leaves of the
broadcast tree rooted at a particular source do not forward updates
originating from that source, a dramatic reduction in control traffic
is achieved compared to link-state flooding (e.g., OSPF), as shown in
simulations [7]. TBRPF-FT is recommended for sparse networks and
when full topology information is needed (e.g., if multiple paths
need to be computed to each destination). A previous version of
TBRPF-FT (called just TBRPF) was presented in [1].
TBRPF-PT achieves a further reduction in control traffic, especially
in large, dense networks, by providing each node with the state of
only a relatively small subset of the network links, sufficient to
compute minimum-hop paths to all other nodes. As in the FT mode, a
node forwards an update only if the node is not a leaf of the broad-
cast tree rooted at the source of the update. In addition, a node
forwards an update only if it results in a change to the node's
source tree (which provides min-hop paths to all other nodes). As a
result, each node reports only changes to a relatively small portion
of its source tree, in contrast to FTSP [7] and STAR [4], in which
each node reports changes to its entire source tree.
TBRPF-PT also allows the computation of *approximately* optimal paths
(with the degree of approximation determined by a configurable param-
eter), in order to achieve a further reduction in control traffic and
scalability to networks having a large diameter.
TBRPF-PT has some features in common with PTSP (Partial Tree Sharing
Protocol) [7], which also has the property that each node reports
changes to a small portion of its source tree. However, in PTSP, a
node sends each update only to a subset of neighbors (the children
with respect to the broadcast tree), whereas TBRPF-PT takes advantage
of the broadcast nature of wireless networks by sending each update
to *all* neighbors. Also PTSP does not allow path optimality to be
traded off to reduce control traffic. (We note that PTSP allows the
computation of shortest paths with respect to any metric, but control
traffic is reduced significantly if min-hop paths are computed.)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 1]
INTERNET-DRAFT TBRPF 2 March 2001
The FT and PT modes of TBRPF use the same neighbor discovery protocol
(TND). TND is a new protocol whose HELLO messages are much smaller
than existing neighbor discovery protocols such as the one use by
OSPF [17]. A HELLO message in TND contains only the IDs of nodes
that have recently been heard but with which a 2-way link has not yet
been established. In contrast, a HELLO message in OSPF contains the
IDs of *all* neighbors, resulting in a much larger message, espe-
cially in dense networks. The use of TND thus contributes to the
efficiency of TBRPF. In addition, since HELLO messages are smaller,
they can be sent more frequently, resulting in a faster response to
topology changes.
TBRPF can easily be extended to hierarchical routing, in which the
network is divided into areas or clusters. However, in this paper we
focus on flat (non-hierarchical) networks. Because TBRPF reduces
update traffic dramatically compared to flooding, it can be used
instead of hierarchical routing or in combination with hierarchical
routing, to reduce update traffic more than is possible by using
hierarchical routing alone.
2. Changes
Major changes from version 00 to version 01:
- A partial-topology mode (TBRPF-PT) has been introduced to achieve
a further reduction in control traffic in large, dense networks.
- The neighbor discovery protocol has been improved significantly.
- The unicast mode for transmitting TBRPF messages has been elim-
inated: each TBRPF packet is now broadcast to all neighbors. If
a message is to be processed by only a few neighbor nodes, their
identities are included in the message.
- All topology updates are now sent reliably to all neighbors using
NACKs.
- Two new configurable parameters, MIN_UPDATE_INTERVAL and
MIN_FORW_UPDATE_INTERVAL, have been introduced to minimize fre-
quent generation and forwarding of topology updates.
- TBRPF-FT includes a new message type NEW PARENT REPLY, which is
sent in response to one or more NEW PARENT messages. A single mes-
sage is sent in response to multiple NEW PARENT messages that are
received at about the same time.
- A new packet formatting scheme is used that provides optimal pack-
ing of TBRPF protocol elements with minimal insertion of header
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 2]
INTERNET-DRAFT TBRPF 2 March 2001
and null padding octets. A packet compression mechanism is
included that eliminates all null padding octets when enabled.
- Formats have been added for new TBRPF-FT and TBRPF-PT message
types. Formats have been revised for some existing TBRPF-FT mes-
sage types.
- An implicit NARP mechanism has been provided for binding one or
more IP addresses to a Router ID.
- Optional checksum facilities have been provided for data
integrity.
3. TBRPF Terminology
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC2119 [2]. The fol-
lowing terms are also used to describe TBRPF:
node
A router that implements TBRPF, identified by a unique router ID
(RID), also called a node ID.
link
A logical connection from one node to another, identified by a
pair (u,v), where u and v represent nodes. Nodes u and v are
called the "head" and "tail" of the link, respectively. A link is
said to be bidirectional or 2-way if each node can receive
messages from the other. A bidirectional link need not use the
same interfaces or media in both directions.
neighbor
A node v is said to be a neighbor of node u if there is a
bidirectional link (u,v) between them.
topology
The topology of the network is described by a graph G = (V, E),
where V is the set of nodes u and E is the set of links (u,v) in
the network.
directed tree
A subset of (directed) links (u,v) that does not contain any
loops. The root of a directed tree is the only node u such that
the tree contains no link whose tail is u.
topology update or link-state update (LSU)
A message or part of a message that reports a state change for one
or more links.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 3]
INTERNET-DRAFT TBRPF 2 March 2001
update source
The node that originated a given topology update.
broadcast tree
A directed tree rooted at an update source that is used to
broadcast topology updates in TBRPF-FT.
parent
The parent of a node i for an update source u is the next node on
the computed minimum-hop path to node u. It is also the node
preceding node i in the broadcast tree rooted at u.
child
The inverse of the parent relationship. A node j is a child of
node i for source u if and only if node i is the parent of node j
for source u.
leaf
A node is a leaf of the broadcast tree rooted at source u if it
has no children for source u.
source tree
The directed tree computed by each node that provides shortest
paths to all other nodes. Not the same as a broadcast tree.
4. Applicability Section
This section describes the networking context and protocol charac-
teristics of the TBRPF protocol as specified in the MANET Routing
Protocol Applicability Statement [16].
4.1. Networking Context
TBRPF-PT is appropriate for large, dense networks, including networks
with a large diameter, in which only min-hop routing is needed and
bandwidth or power is limited. Simulation experiments are needed to
determine the range of network parameters, such as degree of mobility
and number of communicating pairs, for which TBRPF-PT performs better
than on-demand protocols.
TBRPF-FT is appropriate for sparse networks, and when full topology
information is useful, such as for computing multiple disjoint paths
or paths subject to quality-of-service objectives and constraints.
4.2. Protocol Characteristics and Mechanisms
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 4]
INTERNET-DRAFT TBRPF 2 March 2001
* Does the protocol provide shortest path routes?
Yes.
* Does the protocol provide support for unidirectional links? (if
so, how?)
No. It uses only bidirectional links (as in 802.11).
* Does the protocol require the use of tunneling? (if so, how?)
No.
* Does the protocol require using some form of source routing? (if
so, how?)
No. The protocol uses hop-by-hop routing. However, since the
entire path is known, source routing can be used as an option.
* Does the protocol require the use of periodic messaging? (if so,
how?)
Each node transmits a HELLO message periodically. Topology
updates and other messages are transmitted only when the topology
changes.
* Does the protocol require the use of reliable or sequenced packet
delivery? (if so, how?)
The protocol provides reliable, sequenced delivery of topology
updates using NACKs. It also provides reliable delivery of other
messages using ACKs.
* Does the protocol provide support for routing through a multi-
technology routing fabric? (if so, how?)
Yes. Each network interface is assigned a unique IP address.
* Does the protocol provide support for multiple hosts per router?
(if so, how?)
Yes. The concept of a Router ID (RID) [3,14,17] can be used to
associate multiple hosts with a single RID.
* Does the protocol support the IP addressing architecture? (if so,
how?)
Yes.
* Does the protocol require link or neighbor status sensing (if so,
how?)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 5]
INTERNET-DRAFT TBRPF 2 March 2001
Yes. A new, efficient neighbor discovery protocol is presented,
in which each HELLO message contains only the IDs of nodes that
have recently been heard but with which a 2-way link has not yet
been established.
* Does the protocol depend on a central entity? (if so, how?)
No.
* Does the protocol function reactively? (if so, how?)
The protocol reacts to topology changes, but not to traffic
demand.
* Does the protocol function proactively? (if so, how?)
Yes. It maintains optimal paths to all reachable destinations at
all times.
* Does the protocol provide loop-free routing? (if so, how?)
Yes. Since routing is based on link states, it provides loop-free
routing when the topology is stable.
* Does the protocol provide for sleep period operation? (if so,
how?)
TBRPF (FT and PT) operates correctly even if nodes can go into and
out of sleep mode at arbitrary times. Other features can be
added, such as assigning awake routers to store packets for sleep-
ing nodes, and determining when a node can go into sleep mode
without partitioning the network.
* Does the protocol provide some form of security? (if so, how?)
No. Other other protocols (such as IMEP [14]) can be used to pro-
vide security.
* Does the protocol provide support for utilizing multi-channel,
link-layer technologies? (if so, how?)
Yes. A network using multiple radio channels can be represented
by a single logical topology in which any link can use any channel
or combination of channels.
5. Neighbor Discovery
This section describes the TBRPF Neighbor Discovery (TND) protocol,
designed for mobile ad-hoc networks. The purpose of the protocol is
to allow each node in the network to quickly detect the neighboring
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 6]
INTERNET-DRAFT TBRPF 2 March 2001
nodes with which the node has a direct and symmetric link, i.e., a
link such that the node at each end of the link can hear the other
node. The protocol also detects when a symmetric link to some neigh-
bor no longer exists.
TBRPF neighbor discovery operates correctly even under the following
harsh conditions: (1) an asymmetric (unidirectional) link can exist
between any two nodes at any time, (2) link states can change fre-
quently due to mobility and interference, and (3) the channel is
noisy so that not all transmitted packets are successfully received
by all neighbors.
The main advantage of TND over existing neighbor discovery protocols,
such as the one used by OSPF [OSPF], is that the average size of a
HELLO message is much smaller, resulting in reduced message overhead.
In addition, since HELLO messages are smaller, they can be sent more
frequently, resulting in a faster response to topology changes.
5.1. Overview
Each node transmits a HELLO message periodically, every
HELLO_INTERVAL seconds. Each HELLO message contains a list of node
IDs, called the neighbor request list, which includes neighbors from
which HELLO messages have recently been heard but for which a 2-way
link has not yet been established. (Message formats are given in
Section 10.2.) Upon receiving a HELLO message from a neighbor that
has not been heard from recently, a node includes the neighbor's ID
in each transmitted HELLO message until a 2-way indication (defined
below) is received from the neighbor, but for at most NBR_HOLD_TIME
seconds (typically equivalent to 3 HELLO messages).
A 2-way indication can be either a received HELLO that includes the
node's own ID, or an UPDATE REQUEST message. Upon receiving a 2-way
indication, the node sends an UPDATE REQUEST message to the new
neighbor and waits for the neighbor to respond with an UPDATE REPLY
message. The UPDATE REPLY message serves two purposes: (1) to confirm
that the other node agrees that the link is 2-way, and (2) for the
exchange of topology information.
Depending on the routing protocol, an update for the new link may be
generated upon receiving a 2-way indication, or (similarly to OSPF)
after topology information is exchanged (i.e., the UPDATE REPLY is
received). In this section, an "update" refers to a TREE UPDATE in
TBRPF-PT or an LSU in TBRPF-FT.
Upon receiving a 2-way indication from a new neighbor, the node
copies the current NACK sequence number (NSEQ) of the neighbor from
the packet, and thus becomes capable of sending a NACK when a missed
sequence number is detected. (The use of NSEQ is described in Sec-
tion 6.)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 7]
INTERNET-DRAFT TBRPF 2 March 2001
If an UPDATE REQUEST message is retransmitted MAX_NUM_RXMT times to a
given neighbor, and no UPDATE REPLY is received from the neighbor,
the link is declared down and an update reporting the link failure is
sent reliably to all neighbors (using NACKs). If the neighbor that
was sent the UPDATE REQUEST message has already received a 2-way
indication, then it is capable of sending NACKs and will thus either
receive the update, or will declare the link down after sending a
NACK MAX_NUM_RXMT times, or will stop hearing HELLO messages and thus
declare the link down after NBR_HOLD_TIME seconds. In this manner,
both nodes will agree that the link is up if it is 2-way, and will
otherwise agree that the link is down.
If a link (i,j) has been up (2-way) for some time and then becomes
unidirectional from node i to node j, then node i will stop hearing
HELLO messages from node j, will declare the link down after
NBR_HOLD_TIME seconds, and will send an update reporting the link
failure. The neighbor will either receive the update or will declare
the link down after sending a NACK MAX_NUM_RXMT times. In this
manner, both nodes will agree that the link is down. The different
events that result in a link being declared down are listed in Sec-
tion 5.9.
The contents and formats of the UPDATE REQUEST and UPDATE REPLY mes-
sages depend on the routing protocol, and are different for the FT
and PT modes of TBRPF. These formats, and the specific procedures
for sending and processing these messages, are given in the sections
describing each mode of TBRPF. For the FT mode, the UPDATE REQUEST
and UPDATE REPLY messages are the same as the NEW PARENT and NEW
PARENT REPLY messages, respectively. This section describes the gen-
eral neighbor discovery procedure that is common to both the FT and
PT modes of TBRPF.
5.2. Neighbor Table
Each node maintains a neighbor table, which stores state information
for each known neighbor. The entry for neighbor j contains the fol-
lowing variables:
nbr_level(j) - The current level of the link to node j, which can
be LOST, 1-WAY, 2-WAY, or SYNC.
nbr_life(j) - The amount of time (in seconds) remaining before
nbr_level(j) must be changed to LOST if no further HELLO message
from node j is received. Set to NBR_HOLD_TIME whenever a HELLO is
received from node j.
nbr_request_time(j) - The amount of remaining time (in seconds)
during which the ID of node j is included in each transmitted
HELLO message. Set to NBR_HOLD_TIME if a HELLO is received from
node j when nbr_level(j) = LOST.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 8]
INTERNET-DRAFT TBRPF 2 March 2001
The table entry for a neighbor j may be deleted at any time after
nbr_level(j) becomes LOST. The absence of an entry for a given node
j is equivalent to an entry with nbr_level(j) = LOST.
The four possible values of nbr_level(j) at node i have the following
meaning:
LOST
No HELLO message has been received from node j within the last
NBR_HOLD_TIME seconds.
1-WAY
The link is 1-way. A HELLO message was received recently from node
j, but the link is not 2-way.
2-WAY
The link is 2-way. Node i recently received from node j either a
HELLO message that contains the ID of node i, or an UPDATE REQUEST
message.
SYNC
An UPDATE REPLY message has been received from node j. The
topology information at the two nodes is consistent for routes
that pass through node j.
Depending on the routing protocol, an update reporting that the link
(i,j) is UP can be generated either when nbr_level(j) changes to 2-
WAY or when it changes to SYNC.
5.3. Sending HELLO Messages
Each node sends a HELLO message periodically every HELLO_INTERVAL
seconds, possibly with a small jitter. Each HELLO message includes a
(possibly empty) list (called the neighbor request list) including
the identities of all neighbors j such that nbr_level(j) = 1-WAY and
nbr_request_time(j) has not expired. In this manner, upon receiving
a HELLO message from a neighbor that has not been heard from
recently, the neighbor's ID is included in each HELLO message for at
most NBR_HOLD_TIME seconds (sooner if a 2-way indication is received
from the neighbor).
5.4. Processing a Received HELLO Message
Upon receiving a HELLO message from node j, node i performs the fol-
lowing steps:
1. If a neighbor table entry does not exist for node j, create one
with nbr_level(j) = LOST (temporarily).
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 9]
INTERNET-DRAFT TBRPF 2 March 2001
2. If nbr_level(j) = LOST, then set nbr_level(j) = 1-WAY and
nbr_request_time(j) = NBR_HOLD_TIME.
3. Set nbr_life(j) = NBR_HOLD_TIME.
4. If the ID of node i appears in the HELLO message, and nbr_level(j)
is not 2-WAY, then:
a. Set nbr_level(j) = 2-WAY
b. Send an UPDATE REQUEST message to node j (see the section below
on sending an UPDATE REQUEST message)
c. Copy the current NACK sequence number (NSEQ) of node j from the
TBRPF packet header.
d. An update reporting that link (i,j) is UP MAY be generated at
this time.
5.5. Processing a Received UPDATE REQUEST Message
Upon receiving an UPDATE REQUEST message from node j, node i performs
the following steps:
1. If nbr_level(j) is LOST or 1-WAY, then (the UPDATE REQUEST is a
2-WAY indication):
a. Set nbr_level(j) = 2-WAY
b. Send an UPDATE REQUEST message to node j
c. Copy the current NACK sequence number (NSEQ) of node j from the
TBRPF packet header.
d. An update reporting that link (i,j) is UP MAY be generated at
this time.
2. Send an UPDATE REPLY message to node j (same as NEW PARENT REPLY
message for the FT mode, details are given in the sections for
TBRPF-FT and TBRPF-PT).
5.6. Processing a Received UPDATE REPLY Message
Upon receiving an UPDATE REPLY message (or a NEW PARENT REPLY message
for the FT mode) from node j, node i performs the following steps:
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 10]
INTERNET-DRAFT TBRPF 2 March 2001
1. Set nbr_level(j) to SYNC.
2. An update reporting that link (i,j) is UP is generated if not
already generated when the link became 2-WAY.
3. Process the message as described in the sections for TBRPF-FT and
TBRPF-PT.
5.7. Sending an UPDATE REQUEST message
The contents of the UPDATE REQUEST message depends on the routing
protocol used. For TBRPF-FT, it is the same as a NEW PARENT message.
An UPDATE REQUEST message can be delayed, typically until the next
HELLO message is scheduled, in order to allow message aggregation.
An UPDATE REQUEST for a given neighbor j is retransmitted after
RXMT_INTERVAL if an UPDATE REPLY has not yet been received.
Node i performs the following steps if an UPDATE REQUEST has been
transmitted MAX_NUM_RXMT times to node j with no reply:
1. Generate an update reporting that link (i,j) is DOWN.
2. Set nbr_level(j) = LOST and nbr_life(j) = 0.
In Step 1, if node j has received a 2-WAY indication, then it is
capable of sending NACKs and will therefore receive the update
correctly, or will declare the link DOWN after sending MAX_NUM_RXMT
NACKs for this update. If node j receives the update, it will
declare link (j,i) DOWN.
5.8. Expiration of the Timer nbr_life
The timer nbr_life(j) is set to NBR_HOLD_TIME whenever a HELLO is
received from node j. If nbr_life(j) expires (becomes zero), node i
performs the following steps:
1. If nbr_level(j) is 2-WAY or SYNC, generate an update reporting
that link (i,j) is DOWN.
2. Set nbr_level(j) = LOST.
5.9. Events Causing a Link to be Declared Down
The following events at node i result in link (i,j) being declared
DOWN, if it is currently UP.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 11]
INTERNET-DRAFT TBRPF 2 March 2001
1. No HELLO message is received from node j for NBR_HOLD_TIME
seconds.
2. An update is received from node j reporting that link (j,i) is
DOWN.
3. An UPDATE REQUEST or NEW PARENT message is transmitted
MAX_NUM_RXMT times to node j, and no reply is received within
RXMT_INTERVAL of the last transmission.
4. A NACK is sent to node j for the same message MAX_NUM_RXMT times,
and the message is not received within RXMT_INTERVAL of the last
NACK.
5. A failure notification is received from the link layer (e.g.,
based on the maximum number of retransmissions being reached for a
data packet).
In each of these cases, an update is generated reporting the link
failure. In most cases, this update can be delayed (typically until
the next HELLO message) to allow message aggregation. However, since
a failure notification from the link layer implies that the link is
currently being used for data traffic, in this case the update is
sent immediately, subject to the minimum time between updates
(MIN_UPDATE_INTERVAL).
6. Reliable Delivery to Neighbors
A TBRPF packet can contain multiple messages, some of which must be
delivered reliably to some or to all neighbors. TBRPF uses NACKs to
deliver topology updates reliably and in the correct order to all
neighbors. Using NACKs results in less ACK/NACK overhead than using
ACKs if links are mostly reliable. A message that is sent reliably
using NACKs is called NACKable.
Some messages, such as NEW PARENT messages, are sent reliably to one
or more neighbors by requiring each intended recipient to send an ACK
or another message in response. Such a message will be called ACK-
able. The same TBRPF packet can contain NACKable and ACKable mes-
sages, together with messages that do not require reliable delivery
(e.g., HELLO, ACK). This section describes the procedures used by
TBRPF to provide reliable delivery using NACKs and ACKs.
6.1. Reliable, Sequenced Delivery Using NACKs
Each node maintains an 8-bit sequence number NSEQ, which is incre-
mented whenever a packet is sent that contains one or more new NACK-
able messages. Each NACKable message in a packet contains a sequence
number which is the value of NSEQ when the message was first
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 12]
INTERNET-DRAFT TBRPF 2 March 2001
transmitted. Each TBRPF packet also contains the current value of
NSEQ in its header, whether or not the packet contains any NACKable
messages. This allows each neighbor to determine the sequence
numbers of transmitted NACKable messages that it did not receive.
For example, if a node i receives a TBRPF packet from node j that
contains no NACKable messages and whose header contains NSEQ = 32,
and if the node i has not yet received any NACKable message from node
j with sequence number 32, then node i knows that it should have
received a packet from node j containing one or more NACKable mes-
sages with sequence number 32. Node i will then send a NACK message
to node j requesting the retransmission of these NACKable messages.
(Only the NACKable messages are retransmitted, not the entire
packet.)
NACKs and ACKs can be delayed (typically until the next HELLO is
scheduled) to allow message aggregation, in order to minimize the
number of packets transmitted. Thus, a single packet can contain
NACKs for several neighbors and for several sequence numbers per
neighbor. A NACK is retransmitted after RXMT_INTERVAL if no response
is received. If a NACK for a given neighbor and sequence number is
retransmitted MAX_NUM_RXMT times with no response, the link to the
neighbor is declared down.
Since since each TBRPF packet contains the latest value of NSEQ, each
node will learn this value for each neighbor whenever it receives a
HELLO message from the neighbor. Therefore, if node i sends a NACK-
able message that is not received by neighbor node j, then node j
will either detect the missed sequence number within NBR_HOLD_TIME
seconds, or will declare the link to node i down. If node j detects
the missed sequence number, it will send a NACK up to MAX_NUM_RXMT
times every RXMT_INTERVAL seconds. Therefore, a node that has sent a
NACKable message must store the message for NBR_HOLD_TIME +
MAX_NUM_RXMT * RXMT_INTERVAL seconds for possible retransmission.
6.2. Reliable Delivery Using ACKs
Each node maintains an 8-bit sequence number ASEQ, which is incre-
mented whenever a packet is sent that contains one or more new ACK-
able messages. Each ACKable message in a packet contains a sequence
number which is the value of ASEQ when the message was first
transmitted.
The intended recipients of an ACKable message is determined from the
contents of the message. For example, in TBRPF-PT a NEW PARENT mes-
sage must be ACKed by the new parent (whose ID is included in the
message) and the old parent (if it exists and is still a neighbor).
The ACK message includes the neighbor's ID and the value of ASEQ in
the received packet. A packet may contain multiple new ACKable mes-
sages having the same sequence number, along with retransmitted ACK-
able messages having older sequence numbers. A single ACK is used to
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 13]
INTERNET-DRAFT TBRPF 2 March 2001
acknowledge all ACKable messages having a given sequence number.
An ACKable message is retransmitted after RXMT_INTERVAL seconds if an
ACK for the message has not been received from each intended reci-
pient that is still a neighbor. If the message contains a list of
intended recipients, then the neighbors from which an ACK has been
received may be removed from this list in the retransmitted message.
If an ACK from an intended recipient is not received after the mes-
sage is retransmitted MAX_NUM_RXMT times, the link to that neighbor
is declared down. The message is discarded after an ACK has been
received from each intended recipient that is still a neighbor.
Since not all neighbors are required to receive each ACKable message,
the above mechanism does not ensure sequenced delivery, which may or
may not be required, depending on the protocol. Sequenced delivery
can be achieved by including additional sequence information in each
message, or by other means. A mechanism for ensuring that NEW PARENT
messages are processed in the correct order is described in Section
7.2.4.
7. TBRPF-PT
TBRPF-PT is a proactive, link-state routing protocol that provides
hop-by-hop routing along minimum-hop paths to each destination. Each
node running TBRPF-PT computes a source tree (providing minimum-hop
paths to all reachable nodes) based on partial topology information
stored in its topology table, using a modification of Dijkstra's
algorithm called Restricted Approximate Dijkstra (RAD). RAD allows
path optimality to be traded off in order to reduce the amount of
control traffic in networks with a large diameter, where the degree
of approximation is determined by the configurable parameter
NONTREE_PENALTY.
Each node computes the next node p(u) on the computed path to each
destination (or update source) u, called the *parent* of the node for
source u, and informs its parent of this selection by sending a NEW
PARENT message, so that each parent becomes aware of its *children*
for each source u.
A link (u,v) in a node's source tree is defined to be *reportable* if
the node has at least one child for source u. A node reports changes
(additions and deletions) to the reportable portion of its source
tree in TREE UPDATE messages, which are sent reliably to all neigh-
bors using NACKs. In dense networks, most nodes will have no children
for a given source; thus, on average, a node will report only a small
portion of its source tree.
When a node discovers one or more new neighbors (using TND), an
UPDATE REPLY message is sent to inform the new neighbors of the
reportable portion of the node's source tree. To minimize the number
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 14]
INTERNET-DRAFT TBRPF 2 March 2001
of packets transmitted, multiple control messages are aggregated into
a single packet whenever possible. TBRPF-PT does not use per-source
sequence numbers for updates (unlike TBRPF-FT), and does not require
the periodic broadcast of topology updates (unlike OLSR).
7.1. Conceptual Data Structures and Messages
In addition to the information required by the neighbor discovery
protocol (Section 5) and for reliable, sequenced delivery (Section
6), each node running TBRPF-PT contains a topology table (TT) that
stores information for each known link and node in the network. The
following information is stored at node i for each known link (u,v)
and node u:
T(u,v) - Equal to 1 if (u,v) is in node i's source tree, and 0
otherwise. The set of links in the source tree is denoted T.
r(u,v) - The list of neighbors that are currently reporting link
(u,v) in their source tree. The set of links reported by a given
neighbor j is denoted T(j). (Each node reports only part of its
source tree.)
r(u) - The list of neighbors that are reporting for source u,
i.e., that have at least one child for source u.
p(u) - The current parent for source u, equal to the next node on
the min-hop path to u.
prev_p(u) - The last parent for source u that was confirmed. A
new parent p(u) is confirmed when the list r(u) contains p(u). If
the current parent is confirmed, then prev_p(u) = p(u).
children(u) - The list of children for source u.
pred(u) - The node preceding node u in node i's source tree.
Equal to NULL if node u is not reachable.
next(u) - The next node on the min-hop path to desination u, used
for forwarding data packets. In the current version, next(u) is
always equal to p(u).
dist(u) - The number of hops on the shortest path to u.
Each node also maintains the following information:
N_i - the set of neighbors to which 2-way communication has been
established via the neighbor discovery protocol.
next_update_time - timer that specifies the earliest time the
source tree may next be updated.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 15]
INTERNET-DRAFT TBRPF 2 March 2001
update_flag - indicates whether the topology information has been
modified since the source tree was last updated.
TBRPF-PT uses the following message types, in addition to the HELLO,
ACK, and NACK messages described in other sections. All messages are
broadcast to all neighbors. Message formats are specified in Section
10.2.
TREE UPDATE
A message containing one or more updates of the form (u, v, ADD)
(u, v, DEL), (u, ADD), and/or (u, DEL), reporting that a link
(u,v) or a node u has been added to or deleted from the reportable
part of the router's source tree. This is the only NACKable
message type used by TBRPF-PT.
NEW PARENT
A message informing a neighbor that it has been selected as a
parent for one or more sources. Contains the ID of the neighbor
and a list of source nodes.
UPDATE REQUEST
A message requesting an UPDATE REPLY from one or more new
neighbors. Contains a list of neighbor IDs.
UPDATE REPLY
A message describing the reportable part of the router's source
tree to one or more new neighbors. Contains a list of neighbor IDs
and updates of the form (u, v, ADD) and (u, ADD).
7.2. Operation of TBRPF-PT
This section describes the operation of TBRPF-PT, with the aid of the
pseudocode given in the next section. The main computation of
TBRPF-PT occurs in the procedure Update_Source_Tree, which is called
after a TREE UPDATE message is received, either immediately or
delayed (typically until the next HELLO is scheduled) to allow mes-
sage aggregation. The variables update_flag and next_update_time are
used to determine whether an update has been received (update_flag =
1) and the next time that Update_Source_Tree should be executed if
update_flag = 1. The parameter MIN_UPDATE_INTERVAL determines the
minimum time between executions of Update_Source_Tree. However,
Update_Source_Tree SHOULD be executed immediately if a failure notif-
ication is received from the link layer.
Update_Source_Tree first calls Restricted_Approx_Dijkstra (RAD),
which computes the new source tree and new parents based on informa-
tion stored in the topology table. Generate_Tree_Updates is then
called to generate ADD and DELETE updates by comparing the new source
tree to the old one. (As described below, some delete updates are
implied.) Update_Parents is then called to generate NEW PARENT
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 16]
INTERNET-DRAFT TBRPF 2 March 2001
messages for parents that have changed. Finally, the generated TREE
UPDATE and NEW PARENT messages are sent. Whenever possible, these
messages are aggregated with a HELLO message into a single packet, in
order to minimize the number of transmitted packets.
Each TBRPF packet is broadcast to all neighbors. TREE UPDATE mes-
sages are delivered reliably to all neighbors using NACKs, as
described in Section 6. NEW PARENT messages are delivered reliably
to the new parent and old parent (if it exists) using ACKs.
7.2.1. Computing the Source Tree
RAD is a modification of Dijkstra's algorithm that computes min-hop
paths subject to the following "reporting neighbor restriction": a
link can belong to a path only if the second node of the path is a
reporting neighbor for the link. This restriction ensures correctness
and avoids routing loops.
To allow immediate rerouting without having to wait for the new
parent to report links on the new path to u, the reporting neighbor
restriction is relaxed temporarily for links (u,v) leaving node u,
when the parent p(u) changes to a neighbor that does not yet belong
to r(u), i.e., that does not yet have any children for u. When a new
parent belongs to r(u), it is said to be "confirmed", which implies
that the new parent is a reporting neighbor for links (u,v) leaving
node u. When a new parent p(u) is confirmed, prev_p(u) is set to
p(u), as specified in the procedure Confirm_Parent.
When NONTREE_PENALTY > 0, RAD computes paths that are approximately
minimum hop, in exchange for reducing the number of tree updates gen-
erated. This is accomplished by penalizing the addition of new links
to the source tree. Using a positive value for NONTREE_PENALTY
(e.g., 0.25) provides improved scalability for networks of large
diameter.
For each node u, RAD sets next(u) equal to the next node on the min-
hop (or approximately min-hop) path to desination u.
7.2.2. Generating Tree Updates
The procedure Generate_Tree_Updates compares the new source tree to
the old source tree and generates ADD and DELETE updates. Updates
are generated only for links (u,v) such that children(u) is not NULL.
(In dense networks, children(u) will be NULL in most cases.) If such
a link belongs to the new tree but not the old tree, then an ADD
update (u, v, ADD) is generated. If such a link belongs to the old
tree but not the new tree, then a DELETE update (u, v, DEL) is gen-
erated only if node u is reachable (pred(u) is not NULL) and node v
is not reachable via reportable links (pred(v) is NULL or
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 17]
INTERNET-DRAFT TBRPF 2 March 2001
children(pred(v)) is NULL). Otherwise, the DELETE update is implied
by an ADD update.
7.2.3. Updating Parents
The procedure Updating_Parents generates, for each neighbor j, a
source list that, if nonempty, will be sent in a NEW PARENT message
to that neighbor. The source list for neighbor j includes all
sources u such that the new parent for source u is j and the old
parent was not j. In addition, if the new parent belongs to r(u),
then it is already confirmed, and Confirm_Parent is called. Other-
wise, the parent p(u) will be confirmed when a TREE UPDATE is
received from p(u) that contains either (u, ADD) or (u, v, ADD) for
some v.
7.2.4. Sending NEW PARENT Messages
NEW PARENT messages are sent reliably using ACKs. A NEW PARENT mes-
sage that is transmitted for the first time contains the current
value of the sequence number ASEQ (see Section 6). A NEW PARENT mes-
sage is retransmitted (with the same sequence number) after
RXMT_INTERVAL seconds if an ACK is not received from both the new
parent and the old parent (if it exists and is still a neighbor). If
the source list is too large to include in a single packet (due to
message size limitations), multiple NEW PARENT messages are sent,
each having a different ASEQ value and a different source list.
To ensure that NEW PARENT messages containing the same source are
processed in the correct order, if the parent p(u) for some source u
changes while a previously generated NEW PARENT message containing
source u is still being retransmitted, then u is removed from the
previously generated NEW PARENT message, and is included in a new NEW
PARENT message having a larger sequence number.
7.2.5. Processing TREE UPDATE Messages
All TREE UPDATE messages are processed by all neighbors. When a TREE
UPDATE is received from a neighbor j, update_flag is set. For each
add update (u, v, ADD) in the message, node j is added to r(u,v), and
if node j is not already reporting for source u, node j is added to
r(u) and Confirm_Parent(i,u) is called if j = p(u). In addition,
since a source tree cannot contain two links entering the same node,
the add update (u, v, ADD) implies a delete update (w, v, DEL) for
any other link entering node v that is reported by node j.
For each (explicit) delete update (u, v, DEL) in the message, node j
is removed from r(u,v) and r(v), and from r(w) for all nodes w down-
stream of v on the neighbor tree T(j). If the delete update is for
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 18]
INTERNET-DRAFT TBRPF 2 March 2001
the link (j,i) from the neighbor j sending the update, then link
(i,j) is declared down.
For each add source update (u, ADD) in the message, node j is added
to r(u), and Confirm_Parent(i,u) is called if j = p(u). Finally, for
each delete source update (u, DEL) in the message, node j is removed
from r(u) and from r(w) for all nodes w downstream of u on the neigh-
bor tree T(j).
7.2.6. Processing NEW PARENT Messages
A NEW PARENT message is processed and ACKed by the new parent (whose
ID is included in the message), and by the existing parent for any
source u listed in the message. The new parent sends a TREE UPDATE
in response to the message only if children(u) = NULL for some source
u listed in the NEW PARENT message. In that case, the new parent
sends a TREE UPDATE (to all neighbors) containing the add update (u,
v, ADD) for each such node u and for each node v such that (u,v) is
on its source tree. The new parent also adds the sender of the NEW
PARENT message to children(u) for each source u listed in the mes-
sage.
A node i that receives a NEW PARENT message from node j, but is not
the new parent, processes the message as follows. For each source u
listed in the message such that node j belongs to children(u) (i.e.,
node i is the existing parent of j for source u), node j is removed
from children(u), and if this causes children(u) to be NULL, a delete
source update (u, DEL) is sent, indicating that node i is no longer
reporting for source u.
7.2.7. Processing a New Neighbor
When a node i receives a 2-way indication (see Section 5) from a node
j that does not belong to N_i, i.e., when node i sees its own ID in
the neighbor request list of a HELLO message or in an UPDATE REQUEST
message sent by node j, it adds node j to N_i, sets update_flag = 1,
and sends an UPDATE REQUEST message to node j.
The UPDATE REQUEST message can be delayed, typically until the next
HELLO message is scheduled, to allow message aggregation. The UPDATE
REQUEST is retransmitted every RMXT_INTERVAL seconds, up to
MAX_NUM_RXMT times, until an UPDATE REPLY message is received. (As
described in the neighbor discovery section, the link is declared
down if no response is received.)
The UPDATE REPLY message contains the IDs of neighbors that are being
replied to, and describes the reportable part of the router's current
source tree. I.e., for each source u such that children(u) is
nonempty, it contains the set of links (u,v) in the source tree whose
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 19]
INTERNET-DRAFT TBRPF 2 March 2001
head node is u, or only the ID of node u if the source tree contains
no links with head u.
An UPDATE REPLY can be partial (due to message size limitations), in
which case the P (partial) bit (defined in Section 10.2) is set and
the information is sent in multiple packets having different sequence
numbers. Each partial UPDATE REPLY must be ACKed by the neighbors
listed in the message, and is retransmitted (removing the IDs of
neighbors for which an ACK was received) after RXMT_INTERVAL seconds
if an ACK has not been received by all listed neighbors. If the P
bit is not set, then the UPDATE REPLY message need not be ACKed,
since the listed neighbors that do not receive it will retransmit the
UPDATE REQUEST.
7.2.8. Processing a Lost Neighbor
If any event occurs that results in a neighbor j being declared down
(see Section 5.9), node i removes node j from N_i, removes j from
children(u), and sets update_flag = 1. A TREE UPDATE reporting the
deletion of link (i,j) from node i's source tree will be generated
the next time Update_Source_Tree is executed. As stated above,
Update_Source_Tree SHOULD be executed immediately if a failure notif-
ication is received from the link layer.
7.2.9. Packet Forwarding
TBRPF-PT forwards data packets on a hop-by-hop basis. At any node
that is not the destination, an IP packet whose destination address
is that of node u is forwarded to the node given by next(u).
7.3. Pseudocode for TBRPF-PT
Update_Source_Tree(i){
Restricted_Approx_Dijkstra(i).
Generate_Tree_Updates(i, tree_update).
Update_Parents(i, src_list[]).
If (tree_update is not empty) {
Send tree_update to all neighbors. }
For each neighbor k in N_i {
Send New_Parent(src_list[k]) to node k.
Set update_flag = 0.
Set next_update_time = current_time + MIN_UPDATE_INTERVAL.}}
Restricted_Approx_Dijkstra(i){
For each link (u,v) in T, set c(u,v) = 1.
For each link (u,v) not in T, set c(u,v) = 1 + NONTREE_PENALTY.
For each node v in TT {
Set d(v) = infinity.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 20]
INTERNET-DRAFT TBRPF 2 March 2001
Set pred(v) = NULL.
Set new_p(v) = NULL.}
Set d(i) = 0.
Set S = {i} (labeled nodes).
For each node j in N_i {
Set d(j) = c(i,j).
Set new_p(j) = j. }
While there exists a node v in TT - S s.t. d(v) < infinity {
Let u be a node in TT - S with minimum d(u).
Add u to S.
For each node v s.t. (u,v) is in TT {
If ([d(u) + c(u,v) < d(v) AND
(new_p(u) or prev_p(u) is in r(u,v))]
OR [d(u) + c(u,v) = d(v) AND
(new_p(u) is in both r(u,v) and r(v))])
Set d(v) = d(u) + c(u,v).
Set pred(v) = u.
Set new_p(v) = new_p(u).}}
Set old_T = T and T = empty set.
For each node u in TT {
dist(u) = d(u).
next(u) = new_p(u).
Add (pred(u), u) to T. }}
Generate_Tree_Updates(i, tree_update) {
Set tree_update = empty.
For each link (u,v) in TT s.t. children(u) != NULL {
If (u,v) is in T but not in old_T {
Add the update (u, v, ADD) to tree_update. }
Else if ([(u,v) is in old_T but not in T] AND [pred(u) != NULL]
AND [pred(v) = NULL OR children(pred(v)) = NULL]) {
(Node v is not reachable using only reportable links.)
Add the update (u, v, DEL) to tree_update. }
If new_p(u) = NULL, remove (u,v) from TT.
If r(u,v) is empty, remove (u,v) from TT. }}
Update_Parents(i, src_list[]) {
For each node j in N_i, set src_list[j] = empty.
For each node u != i in TT {
If (new_p(u) != p(u) AND new_p(u) != NULL) {
Add u to src_list[new_p(u)].}
Set p(u) = new_p(u).
If (p(u) belongs to r(u) AND prev_p(u) != p(u)) {
Confirm_Parent(i, u).}}
Confirm_Parent(i, u){
Set prev_p(u) = p(u).
For each neighbor j in N_i {
For each node v s.t. (u,v) is in TT {
If j is in r(u,v) - r(u), remove j from r(u,v).}}}
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 21]
INTERNET-DRAFT TBRPF 2 March 2001
Process_Tree_Update(i, j, tree_update) {
(TREE UPDATE received from neighbor j.)
Set update_flag = 1.
For each add update (u, v, ADD) in tree_update {
Add node j to r(u,v).
If r(u) does not contain node j {
Add node j to r(u).
If (p(u) = j AND prev_p(u) != p(u)) {
Confirm_Parent(i, u).}}
For each w other than u such that r(w,v) contains j {
Remove j from r(w,v). (Implicit delete update.) }}
For each delete update (u, v, DEL) in tree_update {
Remove node j from r(u,v) and r(v).
Remove node j from r(w) for all nodes w downstream of v
on the neighbor tree T(j).
If (u = j and v = i) {
(Link (j,i) from neighbor failed.)
Link_Down(i,j).}}
For each add source update (u, ADD) in tree_update {
Add node j to r(u).
If (p(u) = j AND prev_p(u) != p(u)) {
Confirm_Parent(i, u).}}
For each delete source update (u, DEL) in tree_update {
Remove node j from r(u) and from r(w) for all nodes w
downstream of u on the neighbor tree T(j). }}
Process_New_Parent(i, j, parent, src_list) {
(NEW PARENT message received from neighbor j.)
Set tree_update = empty.
If (parent = i) {
For each node u in src_list {
If (children(u) = NULL) {
If node u is a leaf of T {
Add the update (u, ADD) to tree_update.}
Else {
For each v s.t. (u,v) is in T {
Add the update (u, v, ADD) to tree_update.}}}
Add j to children(u).}}
If (parent != i) {
For each node u in src_list {
If (j is in children(u)) {
Remove j from children(u).
If (children(u) = NULL) {
Add the update (u, DEL) to tree_update.}}}}
If (tree_update is not empty) {
Send tree_update to all neighbors. }}
Process_Update_Requests(i, update_request_list) {
Set update_reply = empty.
For each neighbor j in update_request_list {
Add the ID of node j to update_reply. }
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 22]
INTERNET-DRAFT TBRPF 2 March 2001
For each node u s.t. children(u) != NULL {
If node u is a leaf of T {
Add the update (u, ADD) to update_reply.}
Else {
For each v s.t. (u,v) is in T {
Add the update (u, v, ADD) to tree_update.}}}
Send update_reply.}
Process_Update_Reply(i, j, update_reply) {
If update_reply includes node i in the neighbor list {
Set update_flag = 1.
For each update (u, v, ADD) in tree_update {
Add node j to r(u,v).
Add node j to r(u). }
For each update (u, ADD) in tree_update {
Add node j to r(u). }}}
7.4. Configurable Parameters
This section lists the values of the parameters used in the descrip-
tion of the protocol, and their proposed default values.
HELLO_INTERVAL (2 seconds)
NBR_HOLD_TIME (6 seconds)
RXMT_INTERVAL (2 seconds)
MAX_NUM_RXMT (3)
MIN_UPDATE_INTERVAL (2 seconds)
NONTREE_PENALTY (0.25)
8. TBRPF-FT
Unlike TBRPF-PT, the full topology (FT) mode of TBRPF provides each
node with the state of every link in the network. TBRPF-FT uses the
concept of reverse-path forwarding to broadcast each link-state
update in the reverse direction along the spanning tree formed by the
minimum-hop paths from all nodes to the source of the update. That
is, each link-state update is broadcast along the minimum-hop-path
tree rooted at the source of the update, there being one tree per
source.
The broadcast trees are updated dynamically using the topology infor-
mation that is received along the trees themselves, thus requiring
very little additional overhead for maintaining the trees. Minimum-
hop-path trees are used because they change less frequently than
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 23]
INTERNET-DRAFT TBRPF 2 March 2001
shortest-path trees based on a metric such as delay. Based on the
information received along the broadcast trees, each node computes
its parent and children for the broadcast tree rooted at each source
u. Each node forwards updates originating from source u to its chil-
dren on the tree rooted at source u. TBRPF-FT achieves reliability
despite topology changes, using sequence numbers. The correctness of
TBRPF-FT has been proven [1]. A node having no children for source u
is a leaf and need not forward updates generated by u. In dense net-
works, most nodes are leaves. In simulation experiments [7], TBRPF-
FT generated up to 85% less update/control traffic than an efficient
version of link-state flooding.
Full-topology link-state protocols have the following advantages over
partial-topology protocols: (1) alternate paths and disjoint paths
are immediately available, allowing faster recovery from failures and
topology changes; and (2) paths can be computed subject to any combi-
nation of quality-of-service (QoS) constraints and objectives. Exam-
ples of partial-topology link-state protocols include STAR and OLSR.
These protocols provide each node with sufficient topology informa-
tion to compute at least one path to each destination.
TBRPF-FT computes optimal routes based on the advertised link states;
however, the advertised link states themselves may be approximate in
order to reduce the frequency at which each link is updated.
8.1. Conceptual Data Structures and Messages
A link-state update reporting the state of the link (u,v) is a tuple
(u,v,c,sn), where c and sn are the cost and the sequence number asso-
ciated with the update. A cost of infinity represents a failed link.
We say that node u is the head node of link (u,v). It is the only
node that can report changes to parameters of link (u,v). Therefore,
any link-state update (u,v,c,sn) originates from node u.
Each node i maintains a counter SN_i, which is incremented by at
least one each time the cost of one or more outgoing links (i,v)
changes value. For example, SN_i can be a time stamp that represents
the number of seconds (or other units of time) elapsed from some
fixed time. When node i generates a link-state update (i,v,c,sn),
the sequence number sn is set to the current value of SN_i. We note
that, unlike most link-state protocols, TBRPF does not require link-
state updates to contain an age field.
In addition to the information required by the neighbor discovery
protocol (Section 5) and for reliable, sequenced delivery (Section
6), each node i running TBRPF-FT stores the following information:
1. A topology table, denoted TT_i, consisting of all link-states
stored at node i. The entry for link (u,v) in this table is
denoted TT_i(u,v) and consists of the most recent update
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 24]
INTERNET-DRAFT TBRPF 2 March 2001
(u,v,c,sn) received for this link. The components c and sn of the
entry for link (u,v) will be denoted TT_i(u,v).c and TT_i(u,v).sn.
TBRPF-FT can optionally support the dissemination of multiple link
metrics, in which case the single cost c would be replaced by a
vector of multiple metrics.
2. The list of neighbor nodes, denoted N_i.
3. The following is maintained for each node u not equal to i:
a. The parent, denoted p_i(u), which is the neighbor of i that is
the next node on the minimum-hop path from node i to node u, as
obtained from TT_i.
b. The state of the neighboring node nbr as a parent of node i
with respect to node u, denoted pstate_i(u, nbr). pstate_i(u,
nbr) can take on the values Null_Parent, Inactive_Parent,
Pending_Parent, or Active_Parent.
c. A list of children, denoted children_i(u).
d. The sequence number of the most recent link-state update ori-
ginating from node u received by node i, denoted sn_i(u).
e. The routing table entry for node u, consisting of the next node
on the preferred path to u.
4. The list of NEW PARENT and CANCEL PARENT messages, denoted ACK_i,
sent to neighboring nodes for which a acknowledgment has not yet
been received.
We note that the routing table entry for node u can be equal to the
parent p_i(u) if minimum-hop routing is used for data packets. How-
ever, in general, the routing table entry for node u is not p_i(u),
since the selection of routes for data traffic can be based on any
objective.
TBRPF-FT uses the following message types. Message formats are
specified in Section 10.2.
Link-State Update (LSU)
A NACKable message containing one or more link-state updates
(u,v,c,sn).
NEW PARENT
A message informing a neighbor that it has been selected as a
parent with respect to one or more sources.
NEW PARENT REPLY
A message sent in response to a NEW PARENT message.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 25]
INTERNET-DRAFT TBRPF 2 March 2001
CANCEL PARENT
An ACKable message informing a neighbor that it is no longer a
parent with respect to one or more sources.
8.2. Operation of TBRPF-FT
This section describes the network-level operation of TBRPF-FT, with
the aid of the pseudocode given at the end of the section. Examples
illustrating the operation of TBRPF-FT and the the proof of correct-
ness for TBRPF-FT can be found in [1].
For a given node u, the parents p_i(u) for all i not equal to u
define a minimum-hop spanning tree rooted at u (assuming the protocol
has converged). The basic idea of TBRPF-FT is to broadcast link-
state updates generated by u along this spanning tree, while at the
same time modifying this tree based on the link-state information
received along the tree.
To simplify the presentation, we assume that the sequence number
space is large enough so that wraparound does not occur. However, if
a smaller space is used, wraparound can be handled by employing
infrequent periodic updates with a period that is less than half the
minimum wraparound period, and by using a cyclic comparison of
sequence numbers: i.e., sn is considered less than sn' if either sn
< sn' and their difference is less than half the largest possible
sequence number, or sn' < sn and their difference is greater than
half the largest possible sequence number.
A node i selects a neighboring node nbr as the parent for source src
by broadcasting a NEW PARENT(nbr, src, sn) message containing the
identity of node src and the sequence number sn = sn_i(src). A node
cancels an existing parent nbr' by broadcasting a CANCEL PARENT(nbr',
src) message containing the identity of the source. Consequently,
the set of children, children_i(src), at node i with respect to node
src is the set of neighbors from which it has received a NEW
PARENT(i, src, -) message. In general, a node will simultaneously
select a neighboring node nbr as the parent for multiple sources,
when it broadcasts a NEW PARENT(nbr, src_list, sn_list) message,
where src_list is the list of sources and sn_list is the correspond-
ing list of sequence numbers. Like the NEW PARENT message, a CANCEL
PARENT message may contain a list of sources.
The broadcast of link-state information is achieved in the following
manner. Any link-state update originating from node src is accepted
by node i if (1) it is received from the parent node p_i(src), and
(2) it has a larger sequence number than the corresponding link-state
entry in the topology table at node i. The processing of the link
state updates received from node p_i(src), denoted nbr, is delayed
until pstate_i(src, nbr) is equal to Active_Parent. When processed,
the link-state update is entered into the topology table of node i,
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 26]
INTERNET-DRAFT TBRPF 2 March 2001
and then broadcast to neighbors of node i if children_i(src) is
nonempty. (see the procedures Update_Topology_Table and
Process_Update).
Whenever its topology table changes, a node recomputes its parent
with respect to every source node (see the procedure Update_Parents).
This happens when the node receives a topology update, establishes a
link to a new neighbor, or detects the failure of a link to an exist-
ing neighbor. A node computes its parents by (1) computing minimum-
hop paths to all other nodes using Dijkstra's algorithm, and then (2)
selecting the parent for each source src to be the next node on the
min-hop path to src (see the procedure Compute_New_Parents).
Then, if the parent p_i(src) has changed, node i performs the follow-
ing actions. It broadcasts the message CANCEL PARENT(nbr', src) if
the old parent nbr' exists. In addition, node i broadcasts the mes-
sage NEW PARENT(nbr, src, sn) if the newly computed parent exists,
where nbr denotes the new parent and sn = sn_i(src) is the sequence
number of the most recent link-state update originating from node src
received by node i. This number indicates the "position" up to which
node i has received updates (originating from node src) from the old
parent, and after which the new parent should commence. However, if
node i has no information regarding link-state updates originating
from node src in its topology database, the "sn" field of the NEW
PARENT(nbr, src, sn) message is set to NULL.
Upon receiving the CANCEL PARENT(k, src) message from node i, the old
parent k removes node i from the list children_k(src). Upon receiv-
ing the NEW PARENT(j, src, sn) message from node i, the new parent j
= p_i(src) adds node i to the list children_j(src). In addition, node
j sends (to node i) a NEW PARENT REPLY(i, update_list) message, where
update_list consists of all the link states originating from node src
in its topology table which have sequence number greater than sn (see
the procedure Process_New_Parent). However, if the "sn" field of the
NEW PARENT(j, src, sn) message is equal to NULL, the new parent
should respond by transmitting a NEW PARENT REPLY(i, update_list)
message, where update_list now consists of all link-state updates in
its topology database that originate from node src. Thus, only
updates not yet known to node i are sent to node i.
NEW PARENT and CANCEL PARENT messages are transmitted reliably using
positive acknowledgments (see Section 6). Therefore, each message
contains a sequence number, denoted ack_sn, which is the value of the
ACK sequence number (ASEQ) when the message was first transmitted.
The NEW PARENT REPLY message serves as an acknowledgment for the NEW
PARENT message, and the ACK message is used to acknowledge the CANCEL
PARENT message. Both the NEW PARENT REPLY and ACK messages contain
the sequence number of the corresponding NEW PARENT or CANCEL PARENT
message. To achieve reliable transmission, both the NEW PARENT and
CANCEL PARENT messages are retransmitted (for upto MAX_NUM_RXMT
times) if no acknowledgment is received within a given timeout period
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 27]
INTERNET-DRAFT TBRPF 2 March 2001
(RXMT_INTERVAL).
To ensure that NEW PARENT messages containing the same source are
processed in the correct order, if the parent p_i(u) for some source
u changes while a previously generated NEW PARENT message containing
source u is still being retransmitted, then source u is removed from
the previously generated NEW PARENT message, and is included in a new
NEW PARENT message having a larger sequence number.
After transmitting a NEW PARENT(nbr, src, sn) message, node i changes
the state of the newly computed parent node nbr to Pending_Parent
i.e., pstate_i(src, nbr) = Pending_Parent. As mentioned above, the
sequence number of the NEW PARENT message, denoted ack_sn, is used by
the parent node in the NEW PARENT REPLY message. In addition, node i
stores the tuple (ack_sn, nbr, src) in the list, ACK_i, which
includes the list of NEW PARENT messages sent to neighboring nodes
for which a response has not yet been received. Upon receiving a NEW
PARENT REPLY(i, update_list) message with the appropriate sequence
number ack_sn, node i retrieves and deletes the appropriate tuple
(ack_sn, nbr, src) from ACK_i. At this time, if the NEW PARENT REPLY
message is received from the parent node p_i(src), node i changes
pstate_i(src, nbr) (i.e, the state of the neighboring node nbr as a
parent of node i with respect to source node src) from Pending_Parent
to Active_Parent (see the procedure Proc_New_Parent_Reply). From this
point on, node i can accept and process link-state updates originat-
ing from node src from the parent node p_i(src) beginning with the
link-states in the NEW PARENT REPLY message.
If a node receives several NEW PARENT messages from different neigh-
bors at around the same time, it is possible to efficiently combine
the different responses into one NEW PARENT REPLY message transmis-
sion. In this case, the NEW PARENT REPLY message should contain for
each NEW PARENT message that is being acknowledged (i) the identity
of the neighboring node from which the NEW PARENT message was
received, followed by (ii) the sequence number, ack_sn, of the NEW
PARENT message. Finally, the NEW PARENT REPLY message contains a set
of link-state updates, which can be computed as follows.
Suppose each of the NEW PARENT messages was being acknowledged indi-
vidually in a separate NEW PARENT REPLY message, each of which con-
tains a set of link-state updates. The union of the link-state
updates in each of these NEW PARENT REPLY messages is present in the
single NEW PARENT REPLY message transmission.
When a node i detects the existence of a new neighbor nbr, it exe-
cutes Link_Up(i, nbr) to process this newly established link. The
link cost and sequence number fields for this link in the topology
table at node i are updated. Then, the corresponding link-state
message is broadcast to all neighbors if children_i(i) is not empty.
As noted above, node i also recomputes its parent node p_i(src) for
every node src, in response to this topological change. In a similar
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 28]
INTERNET-DRAFT TBRPF 2 March 2001
manner, when node i detects the loss of connectivity to an existing
neighbor nbr, it executes Link_Down(i, nbr). Link_Change(i, nbr) is
likewise executed at node i in response to a change in the cost to an
existing neighbor node nbr. However, this procedure does not recom-
pute parents.
The method for assigning costs to links is beyond the scope of this
specification. As an example, the cost of a link could simply be one
(for min-hop routing), or the link delay plus a constant bias.
We assume that, initially, a node has no links to neighbors, and that
its topology table is empty. Also initially, at each node i,
p_i(src) = NULL (i.e., not defined), children_i(src) is the empty
set, and sn_i(src) = NULL for every node src. Every node then exe-
cutes Link_Up to process each link established with a neighbor, which
will result in a NEW PARENT message being sent to each neighbor.
Since each neighbor j of node i is (trivially) the next node on the
min-hop path from i to j, p_i(j) = j whenever j is a neighbor of i.
Therefore, the NEW PARENT message sent to a new neighbor j contains j
(and possibly other sources) in its source list.
It is helpful to understand how TBRPF-FT works when initially all
nodes of an ad-hoc network have no topology information. Each node i
will first select each of its neighbor j as a new parent p_i(j) for
source j. Then each neighbor j will inform node i of its outgoing
links, which will allow node i to compute min-hop paths, and thus new
parents p_i(u), for all sources u that are two hops away. Then each
parent p_i(u) for each such u will inform node i of node u's outgoing
links, which will allow node i to compute new parents for all sources
that are three hops away. This process continues until node i has
computed parents for all sources u.
To minimize the amount of link-state update traffic that is transmit-
ted within the network, TBRPF-FT makes use of the following two
parameters. The parameter MIN_FORW_UPDATE_INTERVAL specifies the
minimum time between forwarding link-state updates at a given node.
In addition, the parameter MIN_UPDATE_INTERVAL specifies the minimum
time between link-state updates generated at a given node regarding
its outgoing links.
TBRPF-FT does not require an age field in link-state updates. How-
ever, failed links (represented by an infinite cost) and links that
are unreachable (i.e., links (u,v) such that p_i(u) = NULL) are
deleted from the topology table after a certain time in order to con-
serve memory. When an update is received reporting a link failure,
the link remains in the topology table for DOWN_LINK_HOLD_TIME
(default 120 sec) and is then deleted. When node i detects that
source node u becomes unreachable for UNREACHABLE_HOLD_TIME (default
60 sec), all links outgoing from that source are deleted from the
topology table. In addition, sn_i(u) is set to NULL which indicates
that node i has no information regarding link-state updates
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 29]
INTERNET-DRAFT TBRPF 2 March 2001
originating from source node u. For correct operation of TBRPF-FT,
it is required that UNREACHABLE_HOLD_TIME is less than
DOWN_LINK_HOLD_TIME.
The reason these updates are not deleted immediately is as follows.
Failed links (u,v) must be maintained for some time in the topology
table to ensure that a node i that changes its parent p_i(u) near the
time of failure (or had no parent p_i(u) during the failure) is
informed of the failure by the new parent. Unreachable links, i.e.,
links (u,v) such that i and u are on different sides of a network
partition, are maintained for a period of time to avoid having to
rebroadcast the old link state for (u,v) throughout i's side of the
partition, if the network partition recovers soon (which is likely to
happen if the network partition is caused by a marginal link that
oscillates between the up and down states). This property is impor-
tant to ensure the efficiency of TBRPF-FT when network partitions are
common.
A node that is turned off (or goes to sleep) operates as if the links
to all neighbors have gone down. Thus, the node remembers the link-
state information it had when it was turned off. Since all such
links are either down or unreachable, these link states are deleted
from the topology table if the node awakens after being in sleep mode
for more than DOWN_LINK_HOLD_TIME seconds.
Periodic updates are not strictly required for the correctness of
TBRPF-FT. However, infrequent periodic updates can be used to
correct rare errors that may occur. As discussed above, periodic
updates are also required if the sequence number space is not large
enough to avoid wraparound. Periodic updates are generated as
described in the procedure Send_Periodic_Updates.
TBRPF-FT provides each node with complete link-state information.
Each node can then apply a path selection algorithm to compute pre-
ferred paths to all possible destinations, and to update these paths
when link states are updated. The default path selection algorithm
for TBRPF-FT is to apply Dijkstra's algorithm to compute shortest
paths (with respect to c) to all destinations. However, TBRPF-FT can
employ any path selection algorithm. Once preferred paths are com-
puted, the routing table entry for node u is set to the next node on
the preferred path to u. If min-hop routing is desired, then the
routing table entry for u can be set to the parent p_i(u). In the
current implementation of TBRPF-FT, data packets are forwarded based
on the routing table as in IP routing. However, source routing can
also be used.
8.3. Pseudocode for TBRPF-FT
The following pseudocode describes the network-level procedures per-
formed at node i by TBRPF-FT. The notation LSU(update_list)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 30]
INTERNET-DRAFT TBRPF 2 March 2001
represents a link-state-update message that includes the updates
(u,v,c,sn) in update_list.
Process_Update(i, nbr, in_message){
(Called when an update message in_message is received from nbr.)
Update_Topology_Table(i, nbr, in_message, update_list).
Update_Parents(i).
Set send_list to empty
For each (node src in TT_i) {
Let update_list(src) consist of all tuples (k,l,c,sn)
in update_list such that k = src.
If (children_i(src) is nonempty) Add update_list(src) to send_list }
If (send_list is nonempty)
Broadcast the message LSU(send_list) to all neighbors.}
Update_Topology_Table(i, nbr, in_message, update_list){
Set update_list to empty list.
For each ((u,v,c,sn) in in_message) {
If (p_i(u) == nbr) {
If(pstate_i(u, nbr) == Pending_Parent)
Withhold processing of link state updates in
update_list until pstate_i(u, nbr) is
equal to Active_Parent.
If ((u,v) is in TT_i and sn > TT_i(u,v).sn) {
Add (u,v,c,sn) to update_list.
Set TT_i(u,v).sn = sn.
Set TT_i(u,v).c = c.
If (sn > sn_i(u)) Set sn_i(u) = sn.
If((v == i) and (u belongs to N_i) and (c == infinity))
Link_Down(i, u) }
If ((u,v) is not in TT_i) {
Add (u,v,c,sn) to TT_i.
Add (u,v,c,sn) to update_list.
If (sn > sn_i(u)) Set sn_i(u) = sn.
If((v == i) and (u belongs to N_i) and (c == infinity))
Link_Down(i, u) }}}}
Link_Change(i,j){
(Called when the cost of link (i,j) changes.)
If (|TT_i(i,j).c - cost(i,j)|/TT_i(i,j).c > epsilon) {
Set TT_i(i,j).c = cost(i,j).
Set TT_i(i,j).sn = current time stamp SN_i.
Set update_list = {(i, j, TT_i(i, j).c, TT_i(i, j).sn)}.
If (children_i(i) is nonempty)
Broadcast the message LSU(update_list) to all neighbors.}}
Link_Down(i,j){
(Called when link (i,j) goes down.)
Remove j from N_i.
Set TT_i(i,j).c = infinity.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 31]
INTERNET-DRAFT TBRPF 2 March 2001
Set TT_i(i,j).sn = current time stamp SN_i.
Update_Parents(i).
For each (node src in TT_i) remove j from children_i(src).
Set update_list = {(i,j, infinity, TT_i(i,j).sn)}.
If (children_i(i) is nonempty)
Broadcast the message LSU(update_list) to all neighbors.}
Link_Up(i,j){
(Called when link (i,j) comes up.)
Add j to N_i.
Set TT_i(i,j).c = cost(i,j).
Set TT_i(i,j).sn = current time stamp SN_i.
Update_Parents(i).
Set update_list = {(i, j, TT_i(i,j).c, TT_i(i,j).sn)}.
If (children_i(i) is nonempty)
Broadcast message LSU(update_list) to all neighbors.}
Update_Parents(i){
Compute_New_Parents(i).
Set cancel_parent_msgs and new_parent_msgs to empty.
For each (node k in N_i) {
Set cancel_src_list(k), src_list(k), and sn_list(k) to empty.}
For each (node src in TT_i such that src != i){
If (new_p_i(src) != p_i(src)){
If (p_i(src) != NULL){
Set k = p_i(src)
Add src to cancel_src_list(k)
pstate_i(src, k) = Inactive_Parent. }
Set p_i(src) = new_p_i(src).
If (new_p_i(src) != NULL){
Set k = new_p_i(src).
Add src to src_list(k).
Add sn_i(src) to sn_list(k).
pstate_i(src, k) = Pending_Parent. }}}
For each (node k in N_i){
If (src_list(k) is nonempty){
Add (ack_sn_i, k, src_list(k), sn_list(k)) to new_parent_msgs.
Add (ack_sn_i, k, src_list(k)) to ACK_i.
Set ack_sn_i = ack_sn_i + 1}
If (cancel_src_list(k) is nonempty){
Add (ack_sn_i, k, cancel_src_list(k)) to cancel_parent_msgs.
Add (ack_sn_i, k, cancel_src_list(k)) to ACK_i.
Set ack_sn_i = ack_sn_i + 1 }}
If(new_parent_msgs is nonempty)
Broadcast message NEW PARENT(new_parent_msgs) to all neighbors.
If(cancel_parent_msgs is nonempty)
Broadcast message CANCEL PARENT(cancel_parent_msgs) to all neighbors.}
Increment_nontree_edge_cost(i){
Compute min-hop paths using Dijkstra.
For each (node src in TT_i such that src != i) {
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 32]
INTERNET-DRAFT TBRPF 2 March 2001
Set q_i(src) equal to the neighbor of node src along the
minimum hop path from i to src. }
For each ((u, v, c, sn) in TT_i) {
if(u != q_i(v)){ /* nontree edge */
TT_i(u, v).c = TT_i(u, v).c + 0.001
TT_i(u, v).nontree_edge = YES }}}
Decrement_nontree_edge_cost(i){
For each ((u, v, c, sn) in TT_i)
if(TT_i(u, v).nontree_edge == YES){
TT_i(u, v).c = TT_i(u, v).c - 0.001
TT_i(u, v).nontree_edge = NO }}
Compute_New_Parents(i){
For each (node src in TT_i such that src != i)
Set new_p_i(src) = NULL.
Increment_nontree_edge_cost(i)
Compute min-hop paths using Dijkstra.
For each (node src in TT_i such that src != i) {
Set new_p_i(src) equal to the neighbor of node i along the
minimum hop path from i to src. }
Decrement_nontree_edge_cost(i) }
Process_New_Parent(i, nbr, new_parent_msgs){
(Called when node i receives a NEW PARENT(new_parent_msgs)
message from nbr.)
For each ((newpsn, k, src_list, sn_list) in new_parent_msgs) {
if (k == i){ /* This part of the NEW PARENT message is for node i. */
Set update_list to empty list.
For each (node src in src_list) {
Let sn_list.src denote the sequence number
corresponding to src in sn_list.
Add nbr to children_i(src).
Set new_updates = {(x,y,c,sn) in TT_i such that x = src
and sn > sn_list.src}.
Add new_updates to update_list.}
Broadcast the message NEW PARENT REPLY(nbr, newpsn, update_list)
to all neighbors. }}}
Process_Cancel_Parent(i, nbr, cancel_parent_msgs) {
(Called when node i receives a CANCEL PARENT(cancel_parent_msgs) message
from node nbr.)
For each ((cnclpsn, k, src_list) in cancel_parent_msgs) {
if(k == i){
For each (node src in src_list) remove nbr from children_i(src).
Send the message ACK (nbr, cnclpsn) }}}
Proc_New_Parent_Reply(i, nbr, nbr', newpsn, update_list){
(Called when node i receives a NEW PARENT REPLY(nbr', newpsn, update_list)
message from nbr.)
if(nbr' == i){ /* The NEW PARENT REPLY is for node i */
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 33]
INTERNET-DRAFT TBRPF 2 March 2001
Retrieve (and delete) the tuple (newpsn, nbr, src_list') from
the list ACK_i.
For each (node src in src_list')
if((pstate_i(src, nbr) == Pending_Parent) and (p_i(src) == nbr))
Set pstate_i(src, nbr) = Active_Parent.
Process_Update(i, nbr, update_list) }}
Proc_Cancel_Parent_Ack(i, nbr, nbr', cnclpsn){
(Called when node i receives an ACK (nbr', cnclpsn)
message from nbr.)
if(nbr' == i){
Retrieve (and delete) the tuple (cnclpsn, nbr, src_list') from
the list ACK_i.
For each (node src in src_list') pstate_i(src, nbr) = Null_Parent }}
Send_Periodic_Updates(i){
Set update_list to empty.
For each (j in N_i such that TT_i(i,j). c != infinity){
Set TT_i(i,j).sn = current time stamp SN_i.
Add (i, j, TT_i(i,j).c, TT_i(i,j).sn) to update_list. }
If (children_i(i) is nonempty)
Broadcast message LSU(update_list) to all neighbors.}
8.4. Configurable Parameters
This section lists the values of the parameters used in the descrip-
tion of the protocol, and their proposed default values.
HELLO_INTERVAL (2 seconds)
NBR_HOLD_TIME (6 seconds)
RXMT_INTERVAL (2 seconds)
MAX_NUM_RXMT (3)
DOWN_LINK_HOLD_TIME (120 seconds)
UNREACHABLE_HOLD_TIME (60 seconds)
MIN_UPDATE_INTERVAL (2 seconds)
MIN_FORW_UPDATE_INTERVAL (1 second)
9. Application of TBRPF In Mobile Ad-hoc Networks (MANETs)
The TBRPF routing protocols provide proactive, automatic topology
discovery with dynamic adaptation to link state changes in both fixed
and mobile environments whether the topology is relatively static or
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 34]
INTERNET-DRAFT TBRPF 2 March 2001
highly dynamic in nature. TBRPF is particularly well suited to MANETs
consisting of mobile nodes with wireless network interfaces operating
in peer-to-peer fashion over a multiple access communications chan-
nel. (An example is the IEEE 802.11 Distributed Coordination Function
(DCF) [13], in which the mobile nodes collectively arbitrate channel
access via a Carrier Sense, Multiple Access with Collision Avoidance
(CSMA/CA) strategy for unicast, multicast and broadcast packet
transmissions.) Although applicable across a much broader field of
use, TBRPF is particularly well suited for carrying routing informa-
tion that supports the standard DARPA Internet protocols (IPv4) [10]
as per current practices, as advocated by the IETF MANET working
group [RFC2501]. We therefore target this document toward the appli-
cation of TBRPF over MANETs that observe these current practices.
In the following sections, we discuss assumptions for the data link
layer, Internetworking assumptions, and address resolution extensions
for TBRPF neighbor discovery in a MANET environment.
9.1. Data Link Layer Assumptions
We assume a data link layer broadcast channel with multiple access
capabilities, such that nodes wishing to transmit unicast, broadcast
and/or multicast packets must arbitrate with other nodes for channel
access before doing so. We further assume that packets transmitted
over the data link layer broadcast channel will be received by only a
proper subset of the collection of nodes on the multiple access data
link, due to wireless interface range limitations, terrain features,
and other hidden terminal conditions incurred in a mobile environ-
ment. We consider a pair of nodes (A and B) to have a bidirectional
link (or simply "link") if and only if both node A can receive pack-
ets sent from node B and node B can receive packets sent from node A
at a given instant in time.
While TBRPF can be readily applied to a fixed network (in which no
link state changes due to node mobility occur) such a static network
configuration merely represents a simplified case of the general
mobile ad-hoc network model. We therefore assume a highly dynamic
mobile environment at the data link layer, in which link state
changes occur frequently and rapidly. We further assume a data link
layer addressing scheme that supports broadcast, multicast and uni-
cast addressing with best-effort (not guaranteed) delivery services
between nodes with bidirectional links. Finally, we assume that each
node in the MANET is assigned a unique data link layer unicast
address. While uniqueness for data link layer address assignments is
difficult to guarantee, the assumption of uniqueness is consistent
with current practices for the deployment of IPv4 on specific link
layers, such as Ethernet [5]. Methods for duplicate data link layer
address detection and deconfliction are beyond the scope of this
document.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 35]
INTERNET-DRAFT TBRPF 2 March 2001
9.2. Internetworking Assumptions
We assume that each MANET router [14] is assigned at least one unique
IPv4 address, but may have multiple interfaces; each identified by
one or more IPv4 address. For the purpose of TBRPF protocol message
exchanges, each MANET router is identified by a unique Router ID
(RID). While not a requirement, the RID is typically selected from
one of the IPv4 addresses assigned to one of the MANET router's
interface(s). As with data link level addressing assumptions
described in the previous section, we require each node to provide a
means for duplicate IPv4 address detection. The next section provides
a method for duplicate IPv4 address detection, but methods for dupli-
cate IPv4 address deconfliction are beyond the scope of this docu-
ment.
Since each MANET router participates in the TBRPF neighbor discovery
process, TBRPF provides a means for automatic (rather than on-demand)
address resolution. Thus, the requirement for on-demand discovery
through the Address Resolution Protocol (ARP) [9] is obviated. More-
over, we suggest that ARP need not be used on TBRPF interfaces, since
the ARP discovery process adds unnecessary broadcast traffic overhead
and the on-demand table management policies in most ARP implementa-
tions (e.g. flushing entries which have not been used for data
traffic within a certain timeout period) conflict with the automatic
nature of TBRPF neighbor discovery. We further assume that each MANET
router supports the multi-hop relay paradigm; in other words, each
MANET router must be prepared to provide a third-party relay service
as dictated by the instantaneous MANET topology. Finally, we note
that the multi-hop relay paradigm occurs at a lower network sub-layer
than standard Internet routing. The multi-hop relay paradigm provides
intra-MANET forwarding services which may result in multiple hops
within a single logical IPv4 subnet. Conversely, standard Internet
routing provides forwarding between distinct IPv4 networks only.
9.3. Address Resolution Extensions for TBRPF Neighbor Discovery
TBRPF employs a neighbor discovery protocol that dynamically estab-
lishes bidirectional links and detects bidirectional link failures
through the periodic transmission of HELLO messages. To enable an
automatic address resolution capability, a TBRPF router MUST ensure
the following information is encoded in each packet that contains a
HELLO message:
- the unicast data link address of the sending interface
- the primary unicast IPv4 address of the sending interface
The choice of whether TBRPF neighbor discovery messages are sent as
transport level, network level or data link-level entities is an
implementation and/or configuration dependent decision that must be
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 36]
INTERNET-DRAFT TBRPF 2 March 2001
consistent among all MANET routers in the network. In the case that
HELLOs are sent as UDP/IPv4 packets, the above information is
automatically encoded in the headers of the UDP/IPv4 packets that
carry the HELLO messages. In other cases, mechanisms are provided to
encode this information within the HELLO message body as described in
Section 10.2.2. Given the above information in HELLO messages, a
MANET router that forms a bidirectional link to a neighbor can use
TBRPF address resolution to simply bind the neighbor's IPv4 address
to the neighbor's data link level address UNLESS duplicate address
detection determines that the IPv4 address is already in use. A
duplicate address is detected when:
1. Two or more nodes in the MANET that are actively sending HELLOs
are using the same IPv4 address.
2. An existing node in the MANET has changed its data link layer
address.
3. A new node is now using the IPv4 address of a former node that has
ceased sending HELLOs - perhaps indicating that the former node
MAY have recently left the MANET.
In all cases, the receiver MUST NOT form a link with the MANET router
that is sending the duplicate address. In case 1, the receiver SHOULD
print some form of "duplicate IPv4 address detected" warning to the
console and/or system log file. In case 2, the MANET router will
cease sending HELLO messages with its *old* data link address and
begin sending HELLO messages with its *new* data link address. Neigh-
bors of this MANET router will perceive messages containing the new
data link address as originating from a *different* node that uses a
duplicate IPv4 addresses UNTIL the existing state information con-
taining the *old* data link address expires. But, since the MANET
router no longer sends HELLO messages using its *old* data link
address, state expiration is guaranteed. At this point, neighbors
will re-negotiate their bidirectional links to the MANET router and
cache its *new* data link address to IPv4 address resolution. Case 3
is handled in an identical manner to case 2.
10. TBRPF Packets and TBRPF Protocol Messages
TBRPF protocol messages (or simply, TBRPF *messages*) encode the
individual TBRPF protocol primitives described in earlier sections.
TBRPF messages are embedded within the bodies of TBRPF *packets*,
which may contain one or more TBRPF message(s) as described in the
following section. All TBRPF packets are sent to the
"All_TBRPF_Neighbors" multicast address. Each packet sent to the
"All_TBRPF_Neighbors" multicast address is accepted by all TBRPF
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 37]
INTERNET-DRAFT TBRPF 2 March 2001
routers that physically receive the packet, whether or not they have
established a link to the sender via TBRPF neighbor discovery. Pack-
ets sent to the "All_TBRPF_Neighbors" multicast address MUST NOT be
multi-hopped to MANET routers that are not single-hop neighbors of
the sender. See: "IANA Considerations" for more information.
Since packets sent to the "All_TBRPF_Neighbors" multicast address are
delivered only to single-hop neighbors, Path MTU Discovery is not
required. Instead, MANET routers can derive the maximum TBRPF packet
length(s) directly from the maximum transmission unit(s) (MTUs) of
their attached interface(s). Since packet loss due to link failure,
interference, etc can occur, implementations MUST choose a maximum
TBRPF packet length that is less than the interface MTU to avoid IPv4
fragmentation and reassembly (*). IN ALL CASES, the absolute maximum
TBRPF packet length for packets sent on a particular interface is
calculated as MIN(interface MTU, 64KB).
(*) Although it may seem reasonable to allow implementations to
send larger-than-MTU sized TBRPF packets (up to the maximum of
64KB) with the understanding that such packets will incur IPv4
fragmentation, it should be noted that the loss of ANY fragment
will result in the loss of the ENTIRE TBRPF packet, which must
then be retransmitted. Thus, to avoid the unnecessary retransmis-
sion of data, we mandate IPv4 fragmentation avoidance as described
above.
For the application of TBRPF in IPv4 MANETs, implementations MUST
send and receive TBRPF packets via the User Datagram Protocol (UDP)
[11] as the default. This approach requires an official UDP service
port number registration (see: IANA Considerations). The use of
UDP/IPv4 provides:
- A UDP message length field
- UDP checksum facilities
- Simple application level access for routing daemons
- IPv4 multicast addressing
- Internet security mechanisms with policy-based address filtering
Implementations MAY OPTIONALLY employ an alternate data delivery ser-
vice other than UDP/IPv4 for the transmission of some or all TBRPF
packets. The choice of an alternate data delivery service MUST be
presented as a configurable option beyond the default of using
UDP/IPv4. Any such configuration choice MUST be consistent among all
MANET routers in the network.
All TBRPF packets consist of two components: (1) a packet header
(with optional header extension fields) immediately followed by (2) a
packet body that includes header options, message options, one or
more TBRPF message(s) and padding options as needed. As noted above,
the total length of all packet components must be less than the max-
imum TBRPF packet length as calculated by MIN(interface MTU, 64KB).
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 38]
INTERNET-DRAFT TBRPF 2 March 2001
In the following sections, we describe the elements of a TBRPF packet
in detail.
10.1. TBRPF Packet Header
TBRPF packet headers are variable-length (minimum of two octets) with
length determined by the sense of "flag" bits found in the first
octet. Implementations MUST ensure that the first octet of the TBRPF
packet header is aligned on an even 8-octet boundary. (The 8-octet
alignment requirement provides a natural boundary for the alignment
of n-octet data elements up to 8-octets in length for anticipated
future use in 64-bit architectures.) IT SHOULD BE NOTED THAT ALL
FURTHER ALIGNMENT REQUIREMENTS DISCUSSED THROUGHOUT THIS SECTION ARE
RELATIVE TO THE FIRST OCTET OF THE TBRPF PACKET HEADER. Therefore,
bit ordering beginning at bit 0 is shown ONLY in the TBRPF packet
header diagram; other diagrams in this section omit the bit ordering
notation.
The format for the TBRPF packet header and a detailed description of
the individual fields are given below:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - - - - - -+
|C|L|R|Z| Vers | Current NSEQ | Extension Fields (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - - - - - -+
Flags (4 bits):
Three flag bits (C, L, R) that specify which header extension
fields (if any) are present. Any header extension fields enabled
by these bits MUST appear in canonical order (i.e. first C, then
L, then R). A fourth flag bit (Z) specifies alignment/compression
considerations for the TBRPF message. The flag bits and their
usage are described in detail below:
C - Checksum Field Included:
When the underlying delivery service provides a checksum facil-
ity (e.g. UDP/IPv4), a sender normally sets C = '0' to indicate
that NO checksum field is included in the TBRPF packet header.
If C = '0', the sender MUST enable the checksum facility pro-
vided by the underlying delivery service.
If the underlying delivery service DOES NOT provide a checksum
facility (or, if the sender chooses to avoid the underlying
delivery service checksum facility) the sender MUST set C = '1'
to indicate that a 16-bit TBRPF checksum field follows immedi-
ately after the "Current LSEQ" field. When C = '1', the sender
MUST calculate the checksum of the TBRPF packet in the manner
described in [11] and write the resulting sum into the 16-bit
message checksum field. The checksum is calculated across ALL
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 39]
INTERNET-DRAFT TBRPF 2 March 2001
data bytes in the packet header, header extension fields, and
packet body, but DOES NOT include a pseudo-header of the under-
lying delivery service.
A receiver MUST examine the C bit to determine whether a check-
sum field is present. If C = '1', the receiver MUST verify the
checksum encoded in the 16-bit TBRPF checksum field as
described in [11] to ensure TBRPF packet data integrity. When C
= '1', checksum verification is required WHETHER OR NOT the
underlying delivery service also provides a checksum facility.
The receiver MUST discard any TBRPF packet that contains an
incorrect checksum. Additionally, the receiver MUST discard any
TBRPF packet that is not protected by either a checksum facil-
ity provided by the underlying delivery service or a checksum
field encoded by the sender in the TBRPF packet header.
L - Length Field Included:
When the underlying delivery service provides a length field
(e.g. UDP/IPv4), a sender SHOULD set L = '0' to indicate that
NO TBRPF packet length field is included. If the underlying
delivery service DOES NOT provide a length field, the sender
MUST set L = '1' to indicate that a 16-bit unsigned integer
TBRPF packet length field follows immediately after any previ-
ous header fields. When L = '1', the sender MUST calculate the
length of the TBRPF packet (including all header and data
bytes) and write the resulting length into the 16-bit unsigned
integer packet length field in network byte order. (If a check-
sum field is also provided, the sender MUST write the length
field BEFORE the checksum is calculated.)
A receiver MUST examine the L bit to determine whether a length
field is included. If a length field is included, the receiver
must convert the length field to host byte order and treat the
result as the length of the TBRPF packet, including the TBRPF
packet header. If the underlying delivery service ALSO provides
a length field, the receiver MUST verify that the length pro-
vided by the underlying delivery service matches the length
provided by the length field in the TBRPF packet header. (The
receiver MUST discard any TBRPF packet in which the two lengths
do not match.) Similarly, the receiver MUST discard any TBRPF
packet if neither the underlying delivery service nor the TBRPF
packet header provide packet length.
Since the TBRPF packet header is guaranteed to begin on an even
8-octet boundary, and since all preceding header fields are
guaranteed to end on an even 2-octet boundary, the length field
is guaranteed to begin on an even 2-octet boundary. Thus,
software MAY access the 2-octet length field as a single 16-bit
unsigned integer rather than two independent 8-bit integers.
(See the following sections for more information regarding
"natural" N-bit word alignment.)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 40]
INTERNET-DRAFT TBRPF 2 March 2001
R - Reserved:
The R bit is RESERVED for future use. The R bit may be used in
the future to indicate that an additional header extension
field follows immediately after any previous header fields.
Z - Message Alignment/Compression:
If the Z bit is '0', the sender MUST align 64-bit, 32-bit and
16-bit words within the TBRPF packet body on on "natural" boun-
daries. (i.e. 64-bit words MUST begin on integral modulo-8 byte
addresses, 32-bit words MUST begin on integral modulo-4 byte
addresses and 16-bit words MUST begin on integral module-2 byte
addresses.) If the Z bit is '0', the sender MUST use Pad1
and/or PadN padding options (see the description of these
options in the next section) where necessary to ensure natural
word alignment.
If the Z bit is '1', the sender MAY OPTIONALLY omit padding in
the interest of providing compression. Since the omission of
padding options may result in 64-bit, 32-bit and 16-bit words
aligned non-integral byte boundaries, a receiver MUST NOT pro-
cess such multi-octet words as atomic data units if Z is '1'.
Instead, the receiver must process multi-octet words "byte-by-
byte" as 8-octet, 4-octet and 2-octet arrays, respectively.
Due to the considerable additional overhead for processing
non-aligned words, it is RECOMMENDED that senders set the Z bit
to '0' and insert Pad1 and PadN options where necessary. How-
ever, it may be preferable in some contexts to set the Z bit to
'1' in order to save transmission overhead at the cost of extra
processing. Receivers MUST be able to process both aligned and
compressed packets.
Version (4 bits):
The TBRPF protocol version field provides a transition mechanism
for future versions of the TBRPF protocol. Also provides a sanity
check for host software to identify bogus messages purporting to
be TBRPF protocol messages. The following version field values are
defined:
TBRPFVERSION_2 2
TBRPFVERSION_1 1
The packet formats defined in this draft represent TBRPF version 2
and MUST be transmitted with the value TBRPFVERSION_2 in the ver-
sion field. Implementations which transmit packets as defined in
the previous draft version set the value TBRPFVERSION_1 in the
version field. TBRPF version 2 implementations MAY OPTIONALLY
provide backwards compatibility for TBRPFVERSION_1 packets.
Current NSEQ (8 bits):
The current NACK sequence number. Allows each neighbor to
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 41]
INTERNET-DRAFT TBRPF 2 March 2001
determine the sequence numbers of transmitted NACKable messages
that it did not receive. For further information, see Section 6.1:
"Reliable, Sequenced Delivery Using NACKs".
10.2. TBRPF Packet Body
The TBRPF packet body consists of the concatenation of a number of
elements including: header options, message options, one or more
TBRPF message(s), and padding options where necessary. These ele-
ments are encoded using a method derived directly from the type-
length-value (TLV) encoding method described in pp. 9-10 of Internet
RFC 2460 [15]. We will refer to our adaptation of this method as
TBRPF TLV (or, T_TLV) to distinguish it from the original TLV method
described in [15], but otherwise adopt the same terminology whenever
possible. This method encodes elements within the TBRPF packet body
(heretofore referred to as "T_TLV Elements") using the following for-
mat:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -+- - - -
| TYPE |P|L| LEN(0) | LEN(1) | VALUE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -+- - - -
TYPE (6 bits):
A 6-bit identifier that gives the type of the T_TLV Element.
NOTE: Although the TYPE field is in the first octet of the T_TLV
Element, the TYPE field itself may NOT always begin on an n-octet
natural word boundary. Following sections will describe TYPE-
dependent alignment considerations for T_TLV Elements.
P - Partial message bit (1 bit):
A 1-bit flag; if P = '0', this T_TLV Element contains either a
complete TBRPF message in its entirety, or the final segment of a
TBRPF message that spans multiple T_TLV Elements. If P = '1', this
T_TLV Element contains a partial segment of a TBRPF message that
spans multiple T_TLV Elements.
L - Length extension bit (1 bit):
A 1-bit flag; if L = '0', the T_TLV Element is said to be in SHORT
format, and the LEN field is a single octet. If L = '1', the T_TLV
Element is said to be in LONG format, and the LEN field comprises
2 octets.
LEN (8/16 bits):
The length of the VALUE field, in octets. Note that this length
excludes the lengths of the TYPE and LEN fields themselves.
If L = '0', the T_TLV Element is in SHORT format, and the LEN
field is a single octet that encodes an 8-bit unsigned integer
which MUST contain a value within the range from 0 - 253. (Thus,
the maximum length of the T_TLV Element *including* the TYPE and
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 42]
INTERNET-DRAFT TBRPF 2 March 2001
LEN fields in SHORT format is 255 octets.)
If L = '1', the T_TLV Element is in LONG format, and the LEN field
comprises TWO octets; each encoding an 8-bit unsigned integer. The
FIRST 8-bit unsigned integer encodes the least significant byte
and the SECOND 8-bit unsigned integer encodes the most significant
byte of the length of the VALUE field, in octets. If L = '1', the
length of the value field is calculated as a 16-bit unsigned
integer as follows:
length = (LEN(1) * 256) + LEN(0)
If L = '1', the length calculated by the above equation MUST be
within the range from 0 - 65532. (Thus, the maximum length of the
T_TLV Element *including* the TYPE and LEN fields in LONG format
is 65535 octets.) When LONG format is used, implementations MUST
NOT access the two-octet LEN field as a 16-bit unsigned integer,
since the first octet of the LEN field is NOT guaranteed to fall
on a natural 16-bit word alignment.
VALUE
Variable-length field. Format and length depends on TYPE, as
described in the following sections.
As described in [15], the sequence of T_TLV Elements MUST be pro-
cessed strictly in the order they appear within the TBRPF packet
body; a receiver must not, for example, scan through the TBRPF packet
body looking for a particular type of T_TLV Element and process that
element prior to processing all preceding elements.
Also as described in [15], individual T_TLV Elements may have
specific alignment requirements to ensure that multi-octet values
fall on natural boundaries. The alignment requirement of a T_TLV Ele-
ment is specified using the notation xn+y, meaning the element type
must appear at an integer multiple of x octets from the start of the
TBRPF packet header, plus y octets. For example:
2n means any 2-octet offset from the start of the TBRPF
packet header.
8n+2 means any 8-octet offset from the start of the TBRPF
packet header, plus 2 octets.
When the Z bit in the TBRPF packet header is '0', the insertion of
padding options to satisfy the alignment requirements of T_TLV Ele-
ments is MANDATORY. When Z = '1', padding options MAY be omitted and
natural word alignment is NOT guaranteed.
T_TLV Elements are grouped into four categories: padding options,
header options, message options, and TBRPF messages. The following
subsections describe these four categories in detail.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 43]
INTERNET-DRAFT TBRPF 2 March 2001
10.2.1. T_TLV Padding Options (TYPE = 0 thru 1)
As described in [15], there are two padding options which senders
insert where necessary to satisfy the alignment requirements of other
T_TLV Elements. Padding options may occur anywhere within the TBRPF
packet body. When the Z bit in the TBRPF packet header is '0', pad-
ding options MUST be inserted to ensure that the alignment require-
ments for other T_TLV Elements are met. When Z = '1', padding options
MAY be omitted and alignment is NOT guaranteed. The following two
padding options are defined:
Pad1 option (TYPE = 0)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+
| 0 |0|0|
+-+-+-+-+-+-+-+-+
Pad1 is indicated by TYPE = 0. The P, L bits MUST be '0', and the LEN
and VALUE fields are omitted. The Pad1 option is used to insert one octet
of padding into the TBRPF packet body. If more than one octet of padding
is required, the PadN option, described next, should be used, rather
than multiple Pad1 options.
PadN option (TYPE = 1)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - -
| 1 |0|L| LEN(0) | LEN(1) | VALUE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - - - - -
PadN is indicated by TYPE = 1. PadN is used to insert two or
more octets of padding into the TBRPF packet body. The P bit MUST
be '0'. If L = '0', the LEN field is one octet in length and contains
the value N-2. The VALUE field consists of N-2 zero-valued octets up
to a maximum of 253 octets, for a maximum of N = 255 padding bytes,
including the TYPE and LEN fields themselves.
If L = '1', the LEN field is TWO octets in length and contains the
value N-3. The VALUE field consists of N-3 zero-valued octets up to a
maximum of 65,532 octets, for a maximum of N = 65,535 padding bytes,
including the TYPE and LEN fields themselves.
10.2.2. T_TLV Header Options (TYPE = 2 thru 7)
T_TLV header options provide packet parameters in addition to the
information encoded in the TBRPF packet header. T_TLV header options
MUST appear immediately after the TBRPF packet header and BEFORE any
T_TLV Elements with TYPE > 7 within the message body. (Note that pad-
ding options may be intermixed with T_TLV header options.) If a
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 44]
INTERNET-DRAFT TBRPF 2 March 2001
receiver detects a T_TLV header option AFTER processing any T_TLV
Element(s) with TYPE > 7, the receiver MUST skip past the VALUE field
(ignoring its contents) and resume processing at the next T_TLV Ele-
ment, if any.
The following T_TLV header options are defined:
Router ID (RID) option (TYPE = 2)
- Alignment requirement: 4n+3
+-+-+-+-+-+-+-+-+
| 2 |0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The RID header option is indicated by TYPE = 2. The P, L bits MUST be
'0', and the LEN field is omitted. The VALUE field contains the 4-
octet IPv4 address corresponding to the Router ID (RID) of the
sender, encoded in network byte order (least significant byte first).
Senders MUST encode the RID option when the RID cannot be derived
from header information transmitted by the underlying data delivery
service. (For example, when the IPv4 header contains an IPv4 source
address that is *different* than the RID.) If a sender's RID and the
sender's source address as it appears in the IPv4 header are one and
the same, NO RID option is required and senders SHOULD avoid encoding
an RID option to eliminate unnecessary data octets.
The RID option provides a mechanism for implicit Network-level
Address Resolution (NARP) as described in [14]. A receiver that
detects an RID option MUST create a NARP binding between the RID and
an network level address(es) that appear either in the network-level
header or in any Alias Address header options (see the following sec-
tion) that appear within the same TBRPF packet. A sender SHOULD
encode at most one RID option within each TBRPF packet. If multiple
RID options occur, a receiver MUST accept the RID that appears in the
first such option and skip past any subsequent RID options.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 45]
INTERNET-DRAFT TBRPF 2 March 2001
Alias Address (ALIASADDR) option (TYPE = 3)
- Alignment requirement: 4n+3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 3 |AF | NUMADDR |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Alias Address (1) (N octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Alias Address (2) (N octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Alias Address (NUMADDR) (N octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The ALIASADDR header option is indicated by TYPE = 3. The P, L bits
are used to encode a 2-bit Address Family (AF) field. The LEN field
is used to contain a value (NUMADDR) which gives the number of Alias
Addresses of the specific Address Family given in the AF field
encoded back-to-back. (The length of each encoded Alias Address (N)
is inferred from the value in the AF field as specified below.) The
VALUE field contains NUMADDR many N-octet Alias Address encoded
back-to-back; each in network byte order (least significant byte
first). The following AF field bit values are defined, where the bits
shown are ordered as MOST significant bit followed by LEAST signifi-
cant bit:
(Note that for AF values '00' and '01', each ALIASADDR is guaranteed
to begin on a natural 4-octet boundary if the 'Z' bit in the TBRPF
packet header is '0'.)
Senders MAY OPTIONALLY encode the ALIASADDR option when they wish to
publish one or more Alias Addresses that differ from their Router ID
(RID). Receivers MUST accept each alias address thus encoded and
create a NARP binding between the sender's RID and each alias
address.
MAC Address (MACADDR) option (TYPE = 4)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
| 4 |FMT| NUMADDR | MAC(1) (N octets)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
~ ... ~
- - - - - - - - +-+-+-+-+-+-+-+-+
MAC(NUMADDR) (N octets) | (May end on an arbitrary boundary)
- - - - - - - - +-+-+-+-+-+-+-+-+
The MACADDR header option is indicated by TYPE = 4. The P, L bits are
used to encode a 2-bit "Format" (FMT) field. The LEN field is used to
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 46]
INTERNET-DRAFT TBRPF 2 March 2001
contain a value (NUMADDR) which gives the number of MAC addresses of
the specific Format given in the FMT field encoded back-to-back. (The
length of each encoded MAC Address (N) is inferred from the value in
the Format field as specified below.) The VALUE field contains
NUMADDR-many N-octet MAC addresses encoded back-to-back in network
byte order (least significant byte first). The following FMT field
bit values are defined where the bits shown are ordered as MOST sig-
nificant bit followed by LEAST significant bit:
commonly referred to as "EUI-48 Format"
commonly referred to as "EUI-64 Format"
Senders MUST encode a MACADDR option when the MAC address cannot be
derived directly from header information transmitted by the underly-
ing data delivery service. (The MAC address is ALWAYS available in
the MAC header when IEEE 802-compliant data link interfaces are used.
Thus the transmission of MACADDR is OPTIONAL when such interfaces are
used.) Senders MAY encode multiple MACADDR options within each TBRPF
packet, but the purpose of encoding multiple MACADDR options in this
manner is current UNDEFINED. A receiver MUST accept the first such
MAC address encoded in a MACADDR option and MAY OPTIONALLY cache the
values encoded in any subsequent MACADDRs encoded within the same
packet.
TYPE = 5 thru 7 are RESERVED for future use.
10.2.3. T_TLV Message Options (TYPE = 8 thru 15)
T_TLV message options provide parameters that apply to subsequent
T_TLV messages within the packet body. T_TLV message options MAY
appear anywhere within the TBRPF packet body after the TBRPF packet
header and T_TLV header options if any are present. Senders MAY
encode MULTIPLE instances of the same T_TLV message option type
within each TBRPF packet. If a receiver detects multiple occurrences
of the same T_TLV message option type within the same packet body,
the VALUE of the MOST RECENT such option overrides the VALUE from any
previous occurrence.
The following T_TLV message options are defined:
NONACKable Block (NONACKBLK) option (TYPE = 8)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+
| 8 |0|0|
+-+-+-+-+-+-+-+-+
The NONACKBLK message option is indicated by TYPE = 8. The P, L bits
MUST be '0', and both the LEN and VALUE fields are omitted. The
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 47]
INTERNET-DRAFT TBRPF 2 March 2001
presence of a NONACKBLK message option delineates the beginning of a
"NONACK Block" that consists of one or more T_TLV messages for which
neither NACK nor ACK messages occur. We refer to this class of T_TLV
messages as "NONACKable".
The initial segment of the TBRPF packet is considered a NONACK Block
by default, and the encoding of a NONACKBLK message option in the
initial segment is NOT REQUIRED. The NONACK Block ends when:
- an ACKBLK message option occurs (see below)
- a NACKBLK message option occurs (see below)
- the end of the TBRPF packet is reached
A sender MAY encode multiple NONACK Blocks within a single TBRPF
packet. Under ordinary circumstances, NONACKable T_TLV messages are
encoded within the initial segment of the TBRPF packet body. Thus,
the NONACKBLK message option is rarely used.
ACK Block (ACKBLK) option (TYPE = 9)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 9 |0|0| ASEQ |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The ACKBLK message option is indicated by TYPE = 9. The P, L bits
MUST be '0', and the LEN field is omitted. The VALUE field contains a
single octet with an ACK Sequence Number. The presence of an ACKBLK
message option delineates the beginning of an "ACK Block" consisting
of one or more "ACKable" T_TLV messages belonging to the ACK sequence
number in the VALUE field. As described in Section 6.2: "Reliable
Delivery Using ACKs", each T_TLV message within an ACK Block MUST be
ACK'd via a positive acknowledgment. The ACK Block ends when:
- a NONACKBLK message option occurs
- another ACKBLK message option occurs
- a NACKBLK message option occurs (see below)
- the end of the TBRPF packet is reached
A sender MAY encode multiple ACK Blocks within a single TBRPF packet.
The T_TLV messages encoded in each ACK Block represent either new
transmissions or retransmissions of messages for which the sender has
not yet received a positive acknowledgment. As a receiver processes
each ACK Block within the TBRPF packet, it MUST prepare a positive
acknowledgment message for each ACKable message for which it is the
specified receiver. (NOTE: the receiver SHOULD process the entire
TBRPF packet before sending a positive acknowledgment, since the
TBRPF packet may contain MULTIPLE ACKable messages for that
receiver.)
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 48]
INTERNET-DRAFT TBRPF 2 March 2001
NACK Block (NACKBLK) option (TYPE = 10)
- Alignment requirement: none
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 10 |0|0| NSEQ |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The NACKBLK message option is indicated by TYPE = 10. The P, L bits
MUST be '0', and the LEN field is omitted. The VALUE field contains a
single octet with a NACK sequence number. The presence of a NACKBLK
message option delineates the beginning of a "NACK Block" consisting
of one or more "NACKable" T_TLV messages belonging to the NACK
sequence number in the VALUE field. As described in Section 6.1:
"Reliable, Sequenced Delivery Using NACKs", each receiver must note
the most recent NACK sequence numbers it processes from a particular
sender to detect whether any have been missed. The NACK Block ends
when:
- another NACKBLK message option occurs
- an ACKBLK message option occurs
- a NONACKBLK message option occurs
- the end of the TBRPF packet is reached
A sender MAY encode multiple NACK Blocks within a single TBRPF
packet. The T_TLV messages encoded in each NACK Block represent
either new transmissions or retransmissions of messages for which the
sender has received one or more NACK(s). After a receiver has pro-
cessed ALL NACK Blocks in the TBRPF packet, it MUST send a NACK mes-
sage to the sender if it detects missing NACK sequence numbers.
TYPE = 11 thru 15 are reserved for future use.
10.2.4. T_TLV Messages (TYPE = 16 thru 63)
T_TLV messages encode the TBRPF protocol messages described in Sec-
tions 5-8. Some protocol messages apply to both the TBRPF-FT and
TBRPF-PT protocol variants, while other messages are specific to one
of the two variants. As described in previous sections, T_TLV mes-
sages are said to be NONACKable, ACKable, or NACKable. NONACKable
message are encoded as TYPE = 16 thru 31 and contain T_TLV messages
for which neither ACK nor NACK messages occur. ACKable messages are
encoded as TYPE = 32 thru 47 and contain T_TLV messages for which the
sender requires an ACK message or some other form of positive ack-
nowledgment. Finally, NACKable messages are encoded as TYPE = 48 thru
63 and contain T_TLV messages for which NACK messages MAY occur.
T_TLV messages that require a LEN field may be encoded in either
SHORT or LONG format, as described in previous sections. If the T_TLV
message also has an alignment requirement, alignment is based on the
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 49]
INTERNET-DRAFT TBRPF 2 March 2001
decision of whether SHORT or LONG format is used. In the following
subsections, we provide formats for T_TLV messages belonging to each
of the three categories using SHORT format when a LEN field is
required. (LONG format encoding can be inferred from the alignment
requirement and text in the earlier sections.) For each T_TLV mes-
sage, we note the message alignment requirements for both SHORT and
LONG format, the protocol variant(s) for which the message applies
(TBRPF-FT and/or TBRPF-PT) and message format.
10.2.4.1. NONACKable Messages (TYPE = 16 thru 31)
As described above, NONACKable T_TLV messages are those for which
neither ACK nor NACK messages occur. NONACKable T_TLV messages may
occur ONLY within a NONACK Block delineated by either the beginning
of the TBRPF message body or the presence of a NONACKBLK message
option. The following NONACKable messages are defined:
HELLO (TYPE = 16)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: both TBRPF-FT and TBRPF-PT
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 16 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The body of the HELLO message consists of N 4-octet Neighbor Router
IDs (RIDs), where N is derived from the T_TLV LEN field as follows:
N = LEN / 4
NOTE that LEN modulo 4 MUST be ZERO. If LEN modulo 4 != 0, a FORMAT
ERROR is said to occur and a receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 50]
INTERNET-DRAFT TBRPF 2 March 2001
ACK (TYPE = 17)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: both TBRPF-FT and TBRPF-PT
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 17 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ASEQ(1) | ASEQ(2) | ASEQ(3) | ASEQ(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
- - - - - - - - +-+-+-+-+-+-+-+-+ - - - - - - - - - - - - - - - -
| ASEQ(N) | (Ends on an arbitrary boundary)
- - - - - - - - +-+-+-+-+-+-+-+-+ - - - - - - - - - - - - - - - -
The body of the ACK message consists of N 4-octet Neighbor Router IDs
(RIDs) followed by N 1-octet ACK Sequence Numbers, where Neighbor
RID(i) corresponds to ASEQ(i) for 1 <= i <= N. N is derived from the
T_TLV LEN field as follows:
N = LEN / 5
NOTE that LEN modulo 5 MUST be ZERO. If LEN modulo 5 != 0, a FORMAT
ERROR is said to occur and a receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 51]
INTERNET-DRAFT TBRPF 2 March 2001
NACK (TYPE = 18)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: both TBRPF-FT and TBRPF-PT
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 18 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NSEQ(1) | NSEQ(2) | NSEQ(3) | NSEQ(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
- - - - - - - - +-+-+-+-+-+-+-+-+ - - - - - - - - - - - - - - - -
| NSEQ(N) | (Ends on an arbitrary bondary)
- - - - - - - - +-+-+-+-+-+-+-+-+ - - - - - - - - - - - - - - - -
The body of the NACK message consists of N 4-octet Neighbor Router
IDs (RIDs) followed by N 1-octet NACK Sequence Numbers, where Neigh-
bor RID(i) corresponds to NSEQ(i) for 1 <= i <= N. N is derived from
the T_TLV LEN field as follows:
N = LEN / 5
NOTE that LEN modulo 5 MUST be ZERO. If LEN modulo 5 != 0, a FORMAT
ERROR is said to occur and a receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 52]
INTERNET-DRAFT TBRPF 2 March 2001
NEW_PARENT_REPLY (TYPE = 19)
- SHORT format alignment requirement: 4n+1
- LONG format alignment requirement: 4n
- Applies to: TBRPF-FT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 19 |P|L| LEN | N (= # NBRs) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ASEQ(1) | ASEQ(2) | ASEQ(3) | ASEQ(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+- - - - - +-+-+-+-+-+-+-+-+- - - - - - - - - - - - - - - - - - +
| ... | ASEQ(N) | ZERO-PADDING TO 4-OCTET BOUNDARY |
+- - - - - +-+-+-+-+-+-+-+-+- - - - - - - - - - - - -- - - - - -+
********************* LSU_B for SRC(1) **************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(1) |
+---------------------------------------------------------------+
| NNBR (==k[1]) | ZERO PADDING |
+---------------------------------------------------------------+
| RID for NBR(1) of SRC(1) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(1) | LSUSEQ for SRC(1),NBR(1) |
+-------------------------------+-------------------------------+
| RID for NBR(2) of SRC(1) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(2) | LSUSEQ for SRC(1),NBR(2) |
+-------------------------------+-------------------------------+
~ ... ~
+-------------------------------+-------------------------------+
| RID for NBR(k[1]) of SRC(1) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(k[1]) | LSUSEQ for SRC(1),NBR(k[1]) |
+-------------------------------+-------------------------------+
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 53]
INTERNET-DRAFT TBRPF 2 March 2001
********************** LSU_B for SRC(2) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(2) |
+---------------------------------------------------------------+
| NNBR (==k[2]) | ZERO PADDING |
+---------------------------------------------------------------+
| RID for NBR(1) of SRC(2) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(1) | LSUSEQ for SRC(2),NBR(1) |
+-------------------------------+-------------------------------+
| RID for NBR(2) of SRC(2) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(2) | LSUSEQ for SRC(2),NBR(2) |
+-------------------------------+-------------------------------+
~ ... ~
+-------------------------------+-------------------------------+
| RID for NBR(k[2]) of SRC(2) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(k[2]) | LSUSEQ for SRC(2),NBR(k[2]) |
+-------------------------------+-------------------------------+
~ ... ~
~ ... ~
~ ... ~
********************** LSU_B for SRC(m) *************************
+-------------------------------+-------------------------------+
| RID for SRC(m) |
+---------------------------------------------------------------+
| NNBR (==k[m]) | ZERO PADDING |
+---------------------------------------------------------------+
| RID for NBR(1) of SRC(m) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(1) | LSUSEQ for SRC(m),NBR(1) |
+-------------------------------+-------------------------------+
~ ... ~
+-------------------------------+-------------------------------+
| RID for NBR(k[m]) of SRC(m) |
+-------------------------------+-------------------------------+
| Link Metrics for NBR(k[m]) | LSUSEQ for SRC(m),NBR(k[m]) |
+-------------------------------+-------------------------------+
The NEW_PARENT_REPLY message provides positive acknowledgment to one
or more NEW_PARENT messages (described in the following section).
The body of the NEW_PARENT_REPLY message contains the concatenation
of an ACK Block with a number of Link State Update (LSU_B) Blocks.
The LEN field provides the total length (in octets) of the ACK Block
and all LSU_B Blocks thus concatenated.
The ACK Block is preceded by a single octet (included in the LEN cal-
culation) that encodes an 8-bit unsigned integer containing N = the
number of neighbors being acknowledged. As described in the ACK mes-
sage format, the body of the ACK Block consists of N 4-octet Neighbor
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 54]
INTERNET-DRAFT TBRPF 2 March 2001
Router IDs (RIDs) followed by N 1-octet ACK Sequence Numbers, where
Neighbor RID(i) corresponds to ASEQ(i) for 1 <= i <= N. If the ACK
block ends on a non-integral 4-octet boundary, and if the Z bit in
the TBRPF packet header is '0', ZERO PADDING bytes are inserted to
the nearest 4-octet boundary. If Z = '1', however the ZERO PADDING
octets are OMITTED, and the first octet of the first LSU_B Block
immediately follows. Thus, the total length of the ACK Block is cal-
culated as:
length = 1 + (N * 5) + # padding octets
This length is deducted from LEN BEFORE the ACK Block is processed.
If LEN is decremented below 0, an UNDERFLOW ERROR is said to occur,
and the receiver MUST stop processing the current TBRPF packet; dis-
carding the remainder of its contents.
The ACK Block is immediately followed by a number of concatenated
LSU_B Blocks. Each LSU_B Block begins with the 4-octet Router ID
(RID) for the Source (SRC) for which he LSU_B Block applies. The next
2-octet field contains an unsigned 16-bit integer with the number of
neighbors (NNBR) for this SRC. If Z = '0', the NNBR field is followed
by a 2-octet ZERO PADDING field; otherwise, the ZERO PADDING field is
OMITTED. Following the (optional) ZERO PADDING field are NNBR-many
8-octet chunks which contain:
- the 4-octet RID for a NBR of SRC
- the 2-octet Link Metrics for this NBR
- the 2-octet Link State Update sequence number (LSUSEQ)
for the NBR
Thus, if Z = '0', the total length of each LSU_B Block is calculated
as:
length = 4 + 2 + 2 + (NNBR * 8)
else, (if Z = '1') the length is calculated as:
length = 4 + 2 + (NNBR * 8)
LSU_B Blocks are processed consecutively, with the total length of
each LSU_B Block deducted from LEN BEFORE the LSU_B Block is pro-
cessed. If LEN is decremented below 0, and UNDERFLOW ERROR is said
to occur, and the receiver MUST stop processing the current TBRPF
packet; discarding the remainder of its contents. The final LSU_B
Block is detected when LEN is decremented to ZERO.
TYPE = 20 thru 31 are RESERVED for future use.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 55]
INTERNET-DRAFT TBRPF 2 March 2001
10.2.4.2. ACKable Messages (TYPE = 32 thru 47)
As described above, ACKable T_TLV messages are those for which a
receiver must send an ACK message or some other positive acknowledg-
ment. ACKable T_TLV messages may occur ONLY within an ACK Block del-
ineated by the presence of an ACKBLK message option. The following
ACKable messages are defined:
NEW_PARENT (TYPE = 32)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: TBRPF-FT and TBRPF_PT
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The body of the NEW_PARENT message consists of 1 4-octet Neighbor RID
and N 4-octet Source RIDs. The Neighbor RID is the neighbor to which
this NEW_PARENT message is directed. The next N RIDs are the RIDs of
the Sources for which the Neighbor must become the NEW_PARENT. N is
derived from the T_TLV LEN field as follows:
N = (LEN / 4) - 1
NOTE that LEN modulo 4 MUST be ZERO. If LEN modulo 4 != 0, a FORMAT
ERROR is said to occur and the receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents. If N
<= 0, the NEW_PARENT message contains a NULL list of Source RIDs, and
the receiver MUST skip the current VALUE field and begin processing
the next T_TLV message in the TBRPF packet body.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 56]
INTERNET-DRAFT TBRPF 2 March 2001
NEW_PARENT_SEQ (TYPE = 33)
- SHORT format alignment requirement: 4n+1
- LONG format alignment requirement: 4n
- Applies to: TBRPF-FT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 33 |P|L| LEN | N (= # NSRC) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
**************** N Source RIDs WITHOUT LSUSEQs ******************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NSRC RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NSRC RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NSRC RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
****************** M Source RIDs WITH LSUSEQs *******************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSUSEQ for SSRC(1) | LSUSEQ for SSRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(3) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSUSEQ for SSRC(3) | LSUSEQ for SSRC(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(5) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSUSEQ for SSRC(5) | LSUSEQ for SSRC(6) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC ID(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The body of the NEW_PARENT_SEQ message consists of a 1-octet field
that encodes an 8-bit unsigned integer N, a 1-octet Neighbor RID, N
4-octet Source RIDs (NSRCs) that do NOT include Link State Update
sequence numbers (LSUSEQs) and M 6-octet (Source RID (SSRC), LSUSEQ)
tuples. The Neighbor RID is the neighbor to which the NEW_PARENT_SEQ
message is directed. The next N RIDs are the RIDs of the Sources for
which the Neighbor must become the NEW_PARENT. (As mentioned, these
N Source RIDs DO NOT include LSUSEQs.) If LEN < ((N+1) * 4) + 1, an
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 57]
INTERNET-DRAFT TBRPF 2 March 2001
UNDERFLOW ERROR is said to occur, and the receiver MUST stop process-
ing the current TBRPF packet; discarding the remainder of its con-
tents.
M is derived from the T_TLV LEN field as follows:
REMAINDER = LEN - ((N+1) * 4) -1 M = REMAINDER / 6
NOTE that REMAINDER modulo 6 MUST be ZERO. If REMAINDER modulo 6 !=
0, a FORMAT ERROR is said to occur and the receiver MUST stop pro-
cessing the current TBRPF packet; discarding the remainder of its
contents. If M > 0 the next M 6-octet tuples contain the 4-octet RID
and 2-octet LSUSEQ for which the Neighbor must become the NEW_PARENT.
The RIDs and LSUSEQs are "tiled" in the manner shown in the diagram
to avoid "holes" in the packet body.
NB: The above diagram shows the message format for 'M' being an even
number. For 'M' being an odd number, the message ends as follows:
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC RID(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSUSEQ for SSRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
CANCEL_PARENT (TYPE = 34)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: TBRPF-FT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 34 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID (1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The body of the CANCEL_PARENT message consists of 1 4-octet Neighbor
RID and N 4-octet Source RIDs. The Neighbor RID is the neighbor to
which this CANCEL_PARENT message is directed. The next N RIDs are the
RIDs of the Sources for which the sender is requesting CANCEL_PARENT.
N is derived from the T_TLV LEN field as follows:
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 58]
INTERNET-DRAFT TBRPF 2 March 2001
N = (LEN / 4) - 1
NOTE that LEN modulo 4 MUST be ZERO. If LEN modulo 4 != 0, a FORMAT
ERROR is said to occur and the receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents. If N
<= 0, the CANCEL_PARENT message contains a NULL list of Source RIDs,
and the receiver MUST skip the current VALUE field and begin process-
ing the next T_TLV message in the TBRPF packet body.
UPDATE_REQUEST (TYPE = 35)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: TBRPF-PT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 35 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor ID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The body of the UPDATE_REQUEST message consists of N 4-octet Neighbor
RIDs. N is derived from the T_TLV LEN field as follows:
N = (LEN / 4)
NOTE that LEN modulo 4 MUST be ZERO. If LEN modulo 4 != 0, a FORMAT
ERROR is said to occur and the receiver MUST stop processing the
current TBRPF packet; discarding the remainder of its contents. If N
<= 0, the UPDATE_REQUEST message contains a NULL list of Neighbor
RIDs, and the receiver MUST skip the current VALUE field and begin
processing the next T_TLV message in the TBRPF packet body, if any.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 59]
INTERNET-DRAFT TBRPF 2 March 2001
UPDATE_REPLY (TYPE = 36)
(SHORT format alignment requirement: 4n+2)
(LONG format alignment requirement: 4n+1)
(Applies to: TBRPF-PT ONLY)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 36 |P|L| LEN | N (= # NBRs) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor RID(N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*********************** LSU_C for SRC(1) ************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[1]) | ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 60]
INTERNET-DRAFT TBRPF 2 March 2001
********************** LSU_C for SRC(2) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[2]) | ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
~ ... ~
~ ... ~
********************** LSU_C for SRC(M) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[M]) | ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The UPDATE_REPLY message provides positive acknowledgment to one or
more UPDATE_REQUEST messages (described in the following section).
The body of the UPDATE_REPLY message contains the concatenation of an
ACK Block with a number of Link State Update (LSU_C) Blocks. The LEN
field provides the total length (in octets) of the ACK Block and all
LSU_C Blocks thus concatenated.
The ACK Block is preceded by a single octet (included in the LEN cal-
culation) that encodes an 8-bit unsigned integer containing N = the
number of neighbors being acknowledged. As described in the ACK mes-
sage format, the body of the ACK Block consists of N 4-octet Neighbor
Router IDs (RIDs), however ACK Sequence Numbers (ASEQs) are not
necessary and thus not encoded. Thus, the total length of the ACK
Block is calculated as:
length = 1 + (N * 4)
This length is deducted from LEN BEFORE the ACK Block is processed.
If LEN is decremented below 0, an UNDERFLOW ERROR is said to occur,
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 61]
INTERNET-DRAFT TBRPF 2 March 2001
and the receiver MUST stop processing the current TBRPF packet; dis-
carding the remainder of its contents.
The ACK Block is immediately followed by a number of LSU_C Blocks
concatenated together. Each LSU_C Block begins with the 4-octet
Router ID (RID) for the Source (SRC) for which the LSU_C Block
applies. The next 2-octet field contains an unsigned 16-bit integer
with the number of neighbors (NNBR) for this SRC. UNLIKE the
TREE_UPDATE message (see the following section), ALL LSU_C Blocks in
an UPDATE reply encode an ADD update for their SRC.
If Z = '0', the 2-octet NNBR field is immediately followed by a 2-
octet ZERO PADDING field as shown above. Otherwise, the ZERO PADDING
field is OMITTED, and the first NBR RID begins immediately after the
NNBR field. Following the ZERO PADDING field (if any), are NNBR-many
4-octet RIDs for NBRs of the SRC. If Z = '0', the ZERO PADDING field
is present and the length for the LSU_C Block is calculated as:
length = 4 + 4 + (NNBR * 4)
Otherwise, the ZERO PADDING field is omitted and the length of the
LSU_C Block is calculated as:
length = 4 + 2 + (NNBR * 4)
LSU_C Blocks are processed consecutively, with the total length of
each LSU_C Block deducted from LEN BEFORE the LSU_C Block is pro-
cessed. If LEN is decremented below 0, and UNDERFLOW ERROR is said
to occur, and the receiver MUST stop processing the current TBRPF
packet; discarding the remainder of its contents. The final LSU_C
Block is detected when LEN is decremented to ZERO.
TYPE = 37 thru 47 are RESERVED for future use.
10.2.4.3. NACKable Messages (TYPE = 48 thru 63)
As described above, NACKable T_TLV messages are those for which the
sender may receive a NACK message from one or more receivers that
detect a gap in the NACK sequence number space. NACKable T_TLV mes-
sages may occur ONLY within a NACK Block delineated by the presence
of a NACKBLK message option. The following NACKable messages are
defined:
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 62]
INTERNET-DRAFT TBRPF 2 March 2001
LINK_STATE_UPDATE (TYPE = 48)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: TBRPF-FT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 48 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*********************** LSU_A for SRC(1) ************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[1]) | LSUSEQ for SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(1) | Link Metrics for NBR(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(3) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(3) | Link Metrics for NBR(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(4) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(5) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 63]
INTERNET-DRAFT TBRPF 2 March 2001
********************** LSU_A for SRC(2) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[2]) | LSUSEQ for SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(1) | Link Metrics for NBR(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(3) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(3) | Link Metrics for NBR(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(4) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(5) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
~ ... ~
~ ... ~
********************** LSU_A for SRC(M) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[M]) | LSUSEQ for SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(1) | Link Metrics for NBR(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(3) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Link Metrics for NBR(3) | Link Metrics for NBR(4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(4) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(5) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 64]
INTERNET-DRAFT TBRPF 2 March 2001
The LINK_STATE_UPDATE message consists of a number of LSU_A Blocks
concatenated together. Each LSU_A Block begins with the 4-octet
Router ID (RID) for the Source (SRC) for which the LSU_A Block
applies. The next 2-octet field contains an unsigned 16-bit integer
with the number of neighbors (NNBR) for this SRC. This field is
immediately followed by another 2-octet field containing that LSUSEQ
for the SRC.
Following the LSUSEQ field are NNBR-many 6-octet chunks which con-
tain:
- the 4-octet RID for a NBR of SRC
- the 2-octet Link Metrics for this NBR
The order in which the two elements in each 6-octet chunk are coded
is staggered in the manner shown in the diagram to avoid unused
"holes" in the message. Note that if NNBR is an EVEN number, the
LSU_A chunk will end on an even 4-octet boundary. But, if NNBR is
ODD, the LSU_A chunk will end as follows:
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC RID(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LSUSEQ for SSRC(M) | ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
If Z = '0', the LSU_A chunk is terminated by a 2-octet ZERO PADDING
field as shown above. Otherwise, the ZERO PADDING field is OMITTED,
and the NEXT LSU_A chunk begins immediately after the final LSUSEQ
field. Thus, if NNBR is EVEN, OR if Z = '1', the total length of the
LSU_A Block is calculated as:
length = 4 + 2 + 2 + (NNBR * 6)
Otherwise, if NNBR is ODD AND Z = '0', the length of the LSU_A Block
is calculated as:
length = 4 + 2 + 2 + (NNBR * 6) +2
LSU_A Blocks are processed consecutively, with the total length of
each LSU_A Block deducted from LEN BEFORE the LSU_A Block is pro-
cessed. If LEN is decremented below 0, and UNDERFLOW ERROR is said
to occur, and the receiver MUST stop processing the current TBRPF
packet; discarding the remainder of its contents. The final LSU_A
Block is detected when LEN is decremented to ZERO.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 65]
INTERNET-DRAFT TBRPF 2 March 2001
TREE_UPDATE (TYPE = 49)
- SHORT format alignment requirement: 4n+2
- LONG format alignment requirement: 4n+1
- Applies to: TBRPF-PT ONLY
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 49 |P|L| LEN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*********************** LSU_C for SRC(1) ************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[1]) |A| ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 66]
INTERNET-DRAFT TBRPF 2 March 2001
********************** LSU_C for SRC(2) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[2]) |A| ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
~ ... ~
~ ... ~
********************** LSU_C for SRC(M) *************************
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NNBR (==k[M]) |A| ZERO PADDING |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(1) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(2) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ... ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RID for NBR(k[1]) of SRC(M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The TREE_UPDATE message consists of a number of LSU_C Blocks con-
catenated together. Each LSU_C Block begins with the 4-octet Router
ID (RID) for the Source (SRC) for which the LSU_C Block applies. The
next 2-octet field contains an unsigned 15-bit integer with the
number of neighbors (NNBR) for this SRC. The most significant bit of
this 2-octet field (the 'A' bit) signifies the type of update. If A =
'1', the LSU_C Block encodes an ADD update for this SRC. If A = '0',
the LSU_C Block encodes a DELETE update.
If Z = '0', the 2-octet NNBR field is immediately followed by a 2-
octet ZERO PADDING field as shown above. Otherwise, the ZERO PADDING
field is OMITTED, and the first NBR RID begins immediately after the
NBR field. Following the ZERO PADDING field (if any), are NNBR-many
4-octet RIDs for NBRs of the SRC. If Z = '0', the ZERO PADDING field
is present and the length for the LSU_C Block is calculated as:
length = 4 + 4 + (NNBR * 4)
Otherwise, the ZERO PADDING field is omitted and the length of the
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 67]
INTERNET-DRAFT TBRPF 2 March 2001
LSU_C Block is calculated as:
length = 4 + 2 + (NNBR * 4)
LSU_C Blocks are processed consecutively, with the total length of
each LSU_C Block deducted from LEN BEFORE the LSU_C Block is pro-
cessed. If LEN is decremented below 0, and UNDERFLOW ERROR is said
to occur, and the receiver MUST stop processing the current TBRPF
packet; discarding the remainder of its contents. The final LSU_C
Block is detected when LEN is decremented to ZERO.
TYPE = 50 thru 63 are RESERVED for future use.
10.2.5. Implementation Considerations for SHORT and LONG Format
Encoding
A sender that encodes a T_TLV message with both a LEN field and an
alignment requirement may know a priori whether SHORT format will
suffice or whether LONG format will be necessary. In this case, the
implementation SHOULD choose the appropriate LEN format and MUST
align the T_TLV message properly based on the specific LEN format
chosen.
If the implementation DOES NOT have a priori knowledge of the LEN
requirement, but the current offset within the TBRPF packet would
allow for either SHORT or LONG format T_TLV message alignment with
minimal/no insertion of padding octets, the implementation may first
encode the T_TLV message VALUE at the first properly-aligned octet
beyond the current offset, then prepend the TYPE and LEN fields (pre-
ceded by any Pad0/PadN options required) in the space before the
beginning of the VALUE field.
If the implementation DOES NOT have a priori knowledge of the LEN
requirement, AND the current offset within the TBRPF packet would
allow for a SHORT format T_TLV message with no padding octets but NOT
a LONG format, the implementation may employ one of a number of stra-
tegies to ensure that T_TLV message are both efficiently coded and
properly aligned. The implementation may optionally:
- Insert padding octets into the TBRPF packet body until the padding
requirement for LONG format is met. Then, begin writing the T_TLV
message into the TBRPF packet body using LONG format whether/not
the encoded T_TLV message exceeds 255 octets in length. (May
result in wasted space for padding options if LONG format was
not required.
- Pre-process the T_TLV message into a temporary data buffer. Then,
append the temporary data buffer to the TBRPF packet body using
the appropriate LEN format (SHORT or LONG). (Results in an extra
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 68]
INTERNET-DRAFT TBRPF 2 March 2001
data copy operation if vectored I/O data buffer chaining is not
available.)
- Begin writing the T_TLV message into the TBRPF packet body using SHORT
format. Then, if the maximum length for a SHORT format T_TLV message
is reached, terminate the construction of the current SHORT format
T_TLV message and begin the construction of a NEW T_TLV message *of
the same type*.
Note that this final consideration implies that a "jumbo" TBRPF
message MAY be split into multiple, independently-coded T_TLV messages.
When a jumbo TBRPF message is split in this manner, each T_TLV
message that encodes a portion of the jumbo TBRPF message MUST be
wholly self-contained; that is, a receiver MUST be able to process
any T_TLV message independently of any other T_TLV message(s). In
summary, while a jumbo TBRPF message may be split into multiple T_TLV
messages, each T_TLV message must be self-contained and properly
contained within a single TBRPF packet.
11. IANA Considerations
An application of TBRPF for IPv4-based MANETs will require the fol-
lowing assigned number procurements from IANA:
1. an official IPv4 multicast address assignment for
All_TBRPF_Neighbors,
2. an official UDP service port number for TBRPF protocol messages,
3. an official IEEE Ethertype assignment for TBRPF messages not sent
via UDP (OPTIONAL)
Note that the IPv4 Multicast assignment implied by 1. MAY have gen-
eral application for MANET beyond its anticipated use for TBRPF.
Specifically, IANA designates IPv4 Multicast assignments within the
range 224.0.0.0 thru 224.0.0.255 as "NON-ROUTEABLE", meaning that
messages sent to those addresses MUST NOT be routed to a different
logical IPv4 subnet regardless of the TTL in the IPv4 header. How-
ever, MANET applications may require one or more multicast address
assignments that are "NON-RELAYABLE", meaning that messages sent to
those addresses MUST NOT be relayed beyond a single hop within the
same logical IPv4 subnet.
We therefore propose that MANET consider the procurement of one or
more "NON-RELAYABLE" IPv4 Multicast assignments from IANA. For exam-
ple, MANET could register an "All_MANET_Neighbors" IPv4 multicast
address with IANA, specifying that messages sent to that address MUST
NOT be relayed. The existence of such assignments would obviate the
requirement for an "All_TBRPF_Neighbors" multicast address assign-
ment.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 69]
INTERNET-DRAFT TBRPF 2 March 2001
12. Security Considerations
Authentication issues exist for allowing "foreign" nodes to join a
MANET via TBRPF neighbor discovery. Additionally, privacy issues
exist for any networking protocols run over unencrypted wireless data
links such as IEEE 802.11. Finally, denial-of-service attacks are
possible if rogue nodes join a TBRPF MANET and offer to provide a
multi-hop relay service, but then fail to perform the service when it
is required. We believe that IPSec may be useful in addressing some
or all of these issues.
13. Implementation Status
The TBRPF Version 1 protocol (as described in the previous draft ver-
sion) has been implemented in the FreeBSD V3.2 operating system with
the Merit Multi-Threaded Routing Toolkit daemon (mrtd). The initial
FreeBSD V3.2 implementation has been in use for laboratory and
fielded experiments since June 1999.
As of January 2001, the TBRPF Version 1 protocol has been ported to
Linux. The current port runs on RedHat Version 7.0 and has been
tested under multiple Linux kernel releases including 2.2.16 and a
2.4 pre-release. Additionally, the Linux and FreeBSD ports are fully
interoperable under TBRPF Version 1.
14. Acknowledgments
The authors would like to thank ASEO/CECOM for funding this work, ONR
for funding the Linux port, and the following people for helping in
the development of TBRPF: Mark G. Lewis, Yonael Gorfu, and Julie S.
Wong.
15. References
[1] Bhargav Bellur and Richard G. Ogier. A Reliable, Efficient
Topology Broadcast Protocol for Dynamic Networks. Proc. IEEE
INFOCOM '99, New York, March 1999.
[2] Scott Bradner. Key words for use in RFCs to Indicate Require-
ment Levels. RFC 2119, March 1997.
[3] M. Scott Corson and Joe Macker. Mobile Ad hoc Networking
(MANET): Routing Protocol Performance Issues and Evaluation Con-
sideration. RFC 2501, 1999.
[4] J.J. Garcia-Luna-Aceves and M. Spohn. Efficient Routing in
Packet-Radio Networks Using Link-State Information. Proc. IEEE
WCNC '99, September 1999.
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 70]
INTERNET-DRAFT TBRPF 2 March 2001
[5] C. Hornig. Standard for the Transmission of IP Datagrams over
Ethernet Networks. STD0041, April 1984.
[6] David B. Johnson and David A. Maltz. Protocols for Adaptive
Wireless and Mobile Networking. IEEE Personal Communications,
Vol. 3, No. 1, pp 34-42, February 1996.
[7] Richard G. Ogier. Efficient Routing Protocols for Packet-Radio
Networks Based on Tree Sharing. Proc. Sixth IEEE Intl. Workshop
on Mobile Multimedia Communications (MOMUC'99), November 1999.
[8] Charles E. Perkins, Elizabeth M Royer, and Samir R. Das. Ad Hoc
On-Demand Distance Vector (AODV) Routing. draft-ietf-manet-
aodv-05.txt, March 2000 (work in progress).
[9] D.C. Plummer. An Ethernet address resolution protocol: Or con-
verting network protocol addresses to 48.bit Ethernet addresses
for transmission on Ethernet hardware. RFC 826, November 1982.
[10] J. Postel. Internet Protocol. RFC 791, September 1981.
[11] J. Postel. User Datagram Protocol. RFC 768, August 1980.
[12] J. Reynolds and J. Postel. Assigned Numbers. RFC 1700, October
1994.
[13] Wireless LAN Medium Access Control (MAC) and Physical Layer
(PHY) Specifications, ISO/IEC Std. 8802-11, ANSI/IEEE Std
802.11, 1999.
[14] An Internet MANET Encapsulation Protocol (IMEP) Specification,
draft-ietf-manet-imep-spec-01.txt
[15] S. Deering and R. Hinden. Internet Protocol Version 6 (IPv6)
Specification. RFC 2460, December 1998.
[16] S. Corson. MANET Routing Protocol Applicability Statement,
draft-ietf-manet-appl-00.txt, November 1998 (work in progress).
[17] J. Moy. OSPF Version 2. RFC 1583, March 1994.
[18] P. Jacquet et al. Optimized Link State Routing Protocol,
draft-ietf-manet-olsr-03.txt, November 2000 (work in progress).
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 71]
INTERNET-DRAFT TBRPF 2 March 2001
Authors' Addresses
Bhargav Bellur
SRI International
333 Ravenswood Ave.
Menlo Park, CA 94025
USA
Phone: +1 650 859-6335
Fax: +1 650 859-4812
Email: bhargav@erg.sri.com
Richard Ogier
SRI International
333 Ravenswood Ave.
Menlo Park, CA 94025
USA
Phone: +1 650 859-4216
Fax: +1 650 859-4812
Email: ogier@erg.sri.com
Fred L. Templin
SRI International
333 Ravenswood Ave.
Menlo Park, CA 94025
USA
Phone: +1 650 859-3144
Fax: +1 650 859-4812
Email: templin@erg.sri.com
Bellur, Ogier, and Templin Expires 2 September 2001 [Page 72]