This package is part of NDNts, Named Data Networking libraries for the modern web.
This package implements the logical forwarder, the central piece of NDN stack. It exports a Forwarder type that represents the logical forwarder, and a FwFace type that represents a face attached to the logical forwarder.
You may be wondering: why there's a forwarder in my application? The main purpose is to demultiplex incoming packets. Suppose a producer application can serve multiple kinds of data, the logical forwarder can dispatch incoming Interests of each kind of data to the correct Interest handler function in the application, so that the application does not perform this dispatching itself.
This leads to our definition of the face: a face is a duplex stream of packets.
It could be a connection to another network node or standalone forwarder, as implemented in @ndn/l3face package.
It could also be a part of application logic, as implemented in @ndn/endpoint package.
Creating a FwFace for application logic is a cheap operation: if you need to receive different kinds of packets in separate callback functions, you should create one face per callback function, instead of sharing the same face and attempting to dispatch packets yourself.
A packet transmitted or received on an FwFace is typically an Interest or a Data.
From application logic, it is possible to associate arbitrary metadata, called a token, on an outgoing Interest, and receive them back on the corresponding Data.
You can also send a CancelInterest command to cancel a pending Interest, and receive a RejectInterest notice when the Interest is canceled or has expired.
Obviously, these tokens and commands are not encodable, so they are only available for communication between application logic and the logical forwarder, but cannot appear beyond the NDNts application.
It's sad but NDN does not have a formal forwarding behavior specification. This package implements a simplified version of NDN forwarding behavior specified in NDN-LAN dissertation chapter 3. The main differences from a full forwarder include:
@ndn/repo package.These are subject to change.
Unlike many other NDN libraries, NDNts does not hard-wire prefix registration toward a particular forwarder. Instead, the prefix registration functionality is structured more like a router:
FwFace can announce a prefix into the NDNts logical forwarder.NDNts includes several ReadvertiseDestination implementation compatible with other forwarders:
@ndn/nfdmgmt implements the NFD Management protocol, compatible with NFD and NDNd.@ndn/dpdkmgmt implements the NDN-DPDK GraphQL protocol, compatible with NDN-DPDK.After loading either package and attaching to the logical forwarder, prefix registration commands would be transmitted toward the connected forwarder.
In contrast, if no ReadvertiseDestination is attached to a logical forwarder, the producer prefixes from a FwFace are visible within the logical forwarder and no prefix registration commands would be sent.
A FwFace may prevent its prefixes from being readvertised by setting advertiseFrom: false attribute.
If this attribute is set, the prefixes announced by this FwFace are only visible within the logical forwarder but ignored by Readvertise module.
This attribute is normally set on a FwFace that represents an uplink to a remote forwarder, so that its prefixes (often the default route /) do not leak to another uplink that you may be connecting.
In contrast, having advertiseFrom: true attribute (the default) does not magically enable prefix registration commands if you do not have a ReadvertiseDestination attached.
The readvertise module consists of:
Readvertise class instance integrated with the logical forwarder.ReadvertiseDestination subclass instances attached to the Readvertise instance.The Readvertise class is responsible for:
FwFace, send an advertise (register) command to each destination.FwFace, send a withdraw (unregister) command to each destination.FwFaces or by the same FwFace more than once, it is deduplicated automatically and would not cause duplicate advertise commands or premature withdraw commands.The ReadvertiseDestination base class is responsible for:
Each ReadvertiseDestination subclass is responsible for:
TcpTransport reconnects to NFD, it would be seen by NFD as a new face, so that every prefix must be registered again to maintain connectivity.