Project

General

Profile

Feature #3784

Design readvertise

Added by Junxiao Shi over 4 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
RIB
Target version:
Start date:
Due date:
% Done:

100%

Estimated time:
6.00 h

Description

Design a component that readvertises a subset of locally registered routes to another NFD-RIB or routing protocol.


Files

readvertise_20160907.pptx (52.5 KB) readvertise_20160907.pptx Junxiao Shi, 09/16/2016 07:10 AM

Related issues

Blocks NFD - Feature #3818: Readvertise end-host routes into NLSRClosedNicholas Gordon

Actions
#1

Updated by Junxiao Shi over 4 years ago

The original feature request is:
When an end host registers a back-route through AutoPrefixPropagation, the router can advertise the end host's prefix into a routing protocol, so that the end host is still reachable when roaming.
Of course this approach has routing scalability concern, but it can work when the number of roaming end hosts are small.

I presented the attached slides in 20160908 call.
A separate readvertise program is proposed, which receives Notifications about registered routes, filters them by origin, and sends NLSR Management commands to advertise the routes; however, this design requires implementation of a route change notification stream, and there would be latency due to the use of notification stream.

We identify that this feature can be placed into NLSR itself, which simplifies the NLSR commands part, but it still has the same problems with notification stream.

Thus, the plan is to place this feature into NFD-RIB, so that the notification stream is no longer necessary; an implication is that NLSR needs to accept prefix registration commands encoded in NFD-RIB RibMgmt protocol, to avoid NFD codebase having dependency on NLSR libraries.

I recognize a strong similarity between AutoPrefixPropagation and this backroute-to-NLSR feature: both features readvertise a subset of the routes in local RIB into somewhere else.
The differences are:

aspect AutoPrefixPropagation backroute-to-NLSR
RIB location end host gateway router
readvertise into gateway router local NLSR
number of targets one (with feature request for multiple) one
condition before readvertising connected to a gateway router none (assume NLSR is always running)
readvertised prefix shortest identity name (with feature requests for other choices) (undecided)
command signer identity matching readvertised prefix NFD-RIB default identity
periodical refresh yes yes (because NLSR crash does not restart NFD)
retry after failure yes yes

Within a single readvertise feature, the above differences can be abstracted in two places:

  • The destination is configured as a command prefix. AutoPrefixPropagation uses /localhop/nfd/rib; backroute-to-NLSR uses /localhost/nlsr/rib. "condition before readvertising" is evaluated based on whether there's a route matching the configured command prefix.
  • A "policy" component receives signals about route changes into local RIB, and decides readvertised prefix, command signer, and intervals for periodical refreshes and retries.

After 20160915 call, there are still concerns on high level design choices. I won't start low-level design until a consensus is reached.

#2

Updated by Junxiao Shi over 4 years ago

After Junxiao's explanation at 20160922 call, Lan agrees with the high level design choices.

Lan proposes to rename the command verbs between NFD-RIB and NLSR to advertise and withdraw, to better reflect their semantics.
Junxiao stresses that there would be much extra work, because ndn-cxx mgmt client is designed to treat every verb as a separate protocol.
Beichuan explains that one can understand current register and unregister verbs as operating on one hop: NFD-RIB gives NLSR (over one local hop) a RIB prefix, and whether to advertise or not is NLSR's decision.
Lan reluctantly agrees to keep register and unregister verbs, in order to simplify implementation.

Lan has not given clearance on starting implementation. I won't start low-level design until then.

#3

Updated by Junxiao Shi over 4 years ago

  • % Done changed from 0 to 10

Lan has approved high-level design. I'm now working on a header.

#4

Updated by Junxiao Shi over 4 years ago

  • Description updated (diff)
  • Status changed from In Progress to Resolved
  • % Done changed from 10 to 70
#5

Updated by Junxiao Shi over 4 years ago

  • Blocks Feature #3818: Readvertise end-host routes into NLSR added
#6

Updated by Nicholas Gordon over 4 years ago

As I was asked to do, I have been looking over the design for a few days now, and I understand everything well enough to begin implementing.

#7

Updated by Junxiao Shi over 4 years ago

  • Status changed from Resolved to Closed
  • % Done changed from 70 to 100

Thanks for the confirmation.

#8

Updated by Junxiao Shi over 4 years ago

I just want to clarify my understanding of how NLSR actually will hear Readvertise commands. My understanding:

  1. Readvertise will send a RibRegister/RibUnregister command on the normal prefixes (e.g. /localhost/nfd) but will set the route origin to client.
  2. NLSR will be listening for RibRegister/RibUnregister commands on those prefixes, but will only accept those with route origin set to client.
  3. NLSR will add whatever prefix and route are specified by that command.

My main point of confusion is that we aren't making Readvertise target NLSR specifically, rather we are using the RibMgmt protocol as a target and extending NLSR to listen for specialized commands from that protocol. Is that correct?

Then, all that needs to be done is write a module for NLSR to listen for these commands on those prefixes, and to incorporate the information from them?

No, this is completely wrong.

  1. Readvertise will send RibRegister/RibUnregister commands on /localhost/nlsr/rib prefix. The commands are encoded in NFD-RIB format, but they are sent to a prefix controlled by NLSR (NfdRibReadvertiseDestination constructor takes the command prefix).
  2. ClientToNlsrReadvertisePolicy is responsible for filtering the RIB updates, and sends commands to NLSR only origin=client.
  3. NLSR should accept RibRegister/RibUnregister commands on /localhost/nlsr/rib prefix, and process all of them.

Also available in: Atom PDF