Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
babeld
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
babeld
Commits
f9b34a02
Commit
f9b34a02
authored
Apr 04, 2008
by
Juliusz Chroboczek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Doc updates.
parent
e1f2fd94
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
34 deletions
+40
-34
babel.text
babel.text
+40
-34
No files found.
babel.text
View file @
f9b34a02
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
Juliusz Chroboczek
Juliusz Chroboczek
<jch@pps.jussieu.fr>
<jch@pps.jussieu.fr>
12 March
2008
3 April
2008
1. Introduction
1. Introduction
...
@@ -202,7 +202,7 @@ defined by
...
@@ -202,7 +202,7 @@ defined by
cost = 1/(2/(alpha * beta) + 2/beta)
cost = 1/(2/(alpha * beta) + 2/beta)
or equivalently
or equivalently
cost = (MAX(txcost, 1) * rxcost + rxcost) / 2.
cost = (MAX(txcost, 1) * rxcost + rxcost) / 2.
...
@@ -224,15 +224,15 @@ their use should be considered as experimental.
...
@@ -224,15 +224,15 @@ their use should be considered as experimental.
2.3 Reachability information
2.3 Reachability information
Reachability information is carried in update and prefix messages.
An
Reachability information is carried in update and prefix messages.
update is a quadruple
Conceptually, an
update is a quadruple
(id, prefix, seqno, metric)
(id, prefix, seqno, metric)
where id is the router-id of the router that originates this route, prefix
where id is the router-id of the router that originates this route, prefix
is the destination of the route, seqno is a sequentially increasing
(modulo
is the destination of the route, seqno is a sequentially increasing
2^16) sequence number, and metric is the sum of the costs of the links
(modulo 2^16) sequence number, and metric is the sum of the costs of the
constituting the path.
links
constituting the path.
If the metric is infinite, the update is in fact a retraction.
If the metric is infinite, the update is in fact a retraction.
...
@@ -329,11 +329,13 @@ If such an entry exists:
...
@@ -329,11 +329,13 @@ If such an entry exists:
- if the entry is currently selected, and the update is unfeasible, then
- if the entry is currently selected, and the update is unfeasible, then
the metric of the entry is set to infinity and a different route is
the metric of the entry is set to infinity and a different route is
selected; if no different route exists, the route is retracted;
selected; if no different route exists, the route is retracted;
- if the update's metric is infinite and the entry's is not, then the
- if the update is feasible, then the entry's sequence number,
entry's seqno is incremented, and its metric is set to infinity;
reference metric and metric are updated and the garbage collection
- otherwise, the entry's sequence number, reference metric and metric are
timer for the route is reset;
updated. If the update is feasible, the garbage collection timer for
- otherwise, the update is ignored.
the route is reset.
A node SHOULD send triggered updates when a selected route changes (see
Section 2.3.4 below).
After the RIB is modified, route selection (Section 2.4) is performed for
After the RIB is modified, route selection (Section 2.4) is performed for
the affected destination.
the affected destination.
...
@@ -367,6 +369,9 @@ update for that destination. When the metric of a selected route changes
...
@@ -367,6 +369,9 @@ update for that destination. When the metric of a selected route changes
by more than 2, it SHOULD send an update for that destination. A node MAY
by more than 2, it SHOULD send an update for that destination. A node MAY
also send a spontaneous update when it detects a mobility event.
also send a spontaneous update when it detects a mobility event.
Additionally, a node SHOULD send updates in response to explicit quieries
from its neighbours (see Section 2.5 below).
2.4 Route selection
2.4 Route selection
...
@@ -394,7 +399,7 @@ criteria:
...
@@ -394,7 +399,7 @@ criteria:
- changing source ids should be avoided.
- changing source ids should be avoided.
Choosing a route selection policy for Babel is an open research problem; at
Choosing a route selection policy for Babel is an open research problem; at
any rate, the optimal route selection policy will depend on the
individual
any rate, the optimal route selection policy will depend on the
particular
network being routed. The current version of the sample implementation of
network being routed. The current version of the sample implementation of
Babel uses the following route selection policy:
Babel uses the following route selection policy:
...
@@ -402,8 +407,6 @@ Babel uses the following route selection policy:
...
@@ -402,8 +407,6 @@ Babel uses the following route selection policy:
by at least 1.5;
by at least 1.5;
- routes are not switched unless the new route's metric is smaller by at
- routes are not switched unless the new route's metric is smaller by at
least 0.5;
least 0.5;
- routes are not switched unless the new route has been stable for 30
seconds or its metric is smaller by at least 1.5;
- routes with a smaller metric are preferred;
- routes with a smaller metric are preferred;
- sequence numbers are ignored when performing route selection.
- sequence numbers are ignored when performing route selection.
...
@@ -412,9 +415,10 @@ This strategy is likely to be reconsidered in a future version.
...
@@ -412,9 +415,10 @@ This strategy is likely to be reconsidered in a future version.
2.5 Accelerating convergence
2.5 Accelerating convergence
When a Babel node moves, it is quite likely that most of its routes will
When a Babel node moves or one of its selected successor crashes, it is
become unfeasible; in that case, it looses connectivity to the rest of the
quite likely that some of its selected routes will become unfeasible; in
network until it receives a new sequence number.
that case, it looses connectivity to the rest of the network until it
receives a new sequence number.
In order to recover its routes as promptly as possible, a node that has
In order to recover its routes as promptly as possible, a node that has
lost all feasible routes to a given destination broadcasts a request for
lost all feasible routes to a given destination broadcasts a request for
...
@@ -436,19 +440,20 @@ it receives an unfeasible update with a metric significantly smaller than
...
@@ -436,19 +440,20 @@ it receives an unfeasible update with a metric significantly smaller than
that of its currently selected route.
that of its currently selected route.
A node SHOULD maintain a list of forwarded requests, and forward the reply
A node SHOULD maintain a list of forwarded requests, and forward the reply
(using unicast or multicast) as soon as it arrives.
(using unicast or multicast) as soon as it arrives. A node SHOULD avoid
forwarding redundant requests.
2.6 Simplified implementations
2.6 Simplified implementations
Babel is a very economic protocol. Route updates take between 24 and 48
Babel is a very economic protocol. Route updates take between 24 and 48
octets per destination; and the RIB takes about 50 bytes per entry.
In
octets per destination; and the RIB takes about 50 bytes per entry.
To put
other words, a single Ethernet packet can carry roughly 50 route updates,
these values into perspective, a single Ethernet packet can carry up to
and a megabyte of memory can contain a 20000-entry RIB.
60 route updates,
and a megabyte of memory can contain a 20000-entry RIB.
Babel is also a
simple protocol. The first implementation consisted of
Babel is also a
fairly simple protocol. The sample implementation consists
less than 4000 lines of C code, and compiled to less than 30 kB of code on
of less than 6000 lines of C code, and compiles to less than 50 kB of text
a 32-bit CISC architecture.
on
a 32-bit CISC architecture.
However, in some very constrained environments, such as PDAs, microwave
However, in some very constrained environments, such as PDAs, microwave
ovens or abacuses, it may be desirable to have subset implementations of
ovens or abacuses, it may be desirable to have subset implementations of
...
@@ -480,10 +485,10 @@ a few minutes after it is retracted.
...
@@ -480,10 +485,10 @@ a few minutes after it is retracted.
A parasitic implementation is one that uses a Babel network for routing its
A parasitic implementation is one that uses a Babel network for routing its
packets but does not announce any routes except to itself.
packets but does not announce any routes except to itself.
A parasitic implementation
SHOULD participate in the Hello and IHU
A parasitic implementation
MUST participate in the Hello and IHU protocols.
protocols. It may either maintain a full routing table, or simply select
It may either maintain a full routing table, or simply select one of its
one of its non-parasitic neighbours (i.e. one that does announce routes
non-parasitic neighbours (i.e. one that does announce routes with an id
with an id
that is not its router-id) as its default gateway.
that is not its router-id) as its default gateway.
Since a parasitic implementation cannot possibly participate in routing
Since a parasitic implementation cannot possibly participate in routing
loops, it need not evaluate the feasibility condition, and can instead
loops, it need not evaluate the feasibility condition, and can instead
...
@@ -499,9 +504,10 @@ we say that multiple Babel messages are sent as a single Babel packet.
...
@@ -499,9 +504,10 @@ we say that multiple Babel messages are sent as a single Babel packet.
3.1 Packet format
3.1 Packet format
Babel packets are sent as link-local UDP datagrams to port ????, using
Babel packets are sent as link-local UDP datagrams to port 8475, using
either multicast to group ???? or unicast to a link-local address. The
either multicast to group ff02::cca6:c0f9:e182:5373 or unicast to
meaning of a received message does not depend on the transport being used.
a link-local address. The meaning of a received message does not depend on
the transport being used.
A Babel packet has the following structure:
A Babel packet has the following structure:
...
@@ -723,8 +729,8 @@ least 2, it forwards the request as a unicast packet to the selected
...
@@ -723,8 +729,8 @@ least 2, it forwards the request as a unicast packet to the selected
successor if it is not the requestor, and otherwise to some other successor
successor if it is not the requestor, and otherwise to some other successor
(feasible or not) after decreasing the hop count by one. If the hop count
(feasible or not) after decreasing the hop count by one. If the hop count
is 1, it remains silent. A speaker SHOULD keep track of forwarded
is 1, it remains silent. A speaker SHOULD keep track of forwarded
multi-hop requests,
and forward the replies whenever a request is
multi-hop requests,
forward the replies whenever a request is satisfied,
satisfied
.
and avoid forwarding redundant requests
.
If the receiver has no route to the given destination (feasible or not), it
If the receiver has no route to the given destination (feasible or not), it
remains silent.
remains silent.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment