Task #2491
closedDesign permanent faces
100%
Description
Socket error in a point-to-point face is treated currently as a face failure and causes NFD to close the face, delete FIB nexthop records referencing the failing face, send face failure Notification, delete Routes referencing the failing face (by RIB Daemon in response to notification).
This behavior is undesirable for backbone links.
Today backbone links are mostly created by NLSR, the routing daemon chosen by NDN testbed.
It is an unfortunate implementation choice due to NFD's inability to make backbone links permanent.
Ideally, creating and maintaining tunnels that represent backbone links shouldn't be the responsibility of routing protocols.
It's also difficult to deploy a network with static routes and no routing protocol.
A permanent face is maintained by NFD, is not affected by failures, and is kept until destroyed by management.
During the period of temporary failure, forwarding should be able to notice the face as down and avoid using it.
Socket errors are handled internally; socket is recreated or reconnected as necessary; FaceId is unchanged.
This Task is to provide a design of permanent faces. The design should include:
- necessity of permanent faces
- guarantees provided by a permanent face
- semantics of up/down state of a permanent face
- how forwarding (pipelines and strategy) could make use of up/down state of a permanent face
- impact on RIB daemon
- impact on NLSR
- impact on network operations
Files
Updated by Davide Pesavento over 9 years ago
The ad-hoc V2V faces (#1217) must be "permanent" too.
Updated by Lan Wang over 9 years ago
Thanks for creating this issue. I was going to bring it up at one of the nfd calls. Without this permanent face, NLSR has to rely on its periodic hello messages to detect when the face can be created again. The default Hello timer value is 60 seconds, so we often see a delay up to 60 seconds to react to the recovery of a failed link. This failure recovery time will be greatly improved if the face is permanent and NLSR can receive a notification when the face is up again. I can assign a student to implement this when Junxiao's design is reviewed.
Updated by Jeff Burke over 9 years ago
I second Lan's comments. This is an extremely valuable feature for deployed applications. Suggest making it "high priority".
Updated by Junxiao Shi over 9 years ago
- File permface_20150610.pptx permface_20150610.pptx added
- Status changed from In Progress to Resolved
- % Done changed from 20 to 60
I have completed the first draft. Please review.
I recognize that permanent faces depend on NDNLPv2 BFD feature, so that this cannot complete until BFD is defined.
Updated by Davide Pesavento over 9 years ago
- Status changed from Resolved to Feedback
Updated by Junxiao Shi over 9 years ago
- File permface_20150623.pptx permface_20150623.pptx added
- Status changed from Feedback to Resolved
- % Done changed from 60 to 100
20150622 conference call reviewed the design.
Changes are made:
- If strategy intends to send an Interest out of a DOWN face, the face should transmit the Interest if the underlying socket allows immediate transmission (eg. TCP established).
- Strategy shouldn't stop trying a retrieval even if all downstreams are DOWN. This is especially important in Delay Tolerant Networks.
We also discussed the possibility of having a partial implementation before NDNLPv2 BFD functionality is ready. The idea is:
- define FacePersistency value "permanent"
- implement in UDP face only: a permanent UDP face ignores all socket errors
- there's no UP/DOWN state transition; an operator who decides to use a permanent face must take care to choose a strategy that is able to try multiple faces (ie. not
best-route
)
Updated by Vince Lehman over 9 years ago
- Blocks Feature #2954: Discover Available Faces added
Updated by Junxiao Shi over 9 years ago
- Related to Feature #2989: Minimal UDP permanent face added
Updated by Junxiao Shi over 9 years ago
- Status changed from Resolved to Closed
Updated by Junxiao Shi about 9 years ago
- Related to Feature #3173: Developer Guide: Face=LinkService+Transport and GenericLinkService added