NDNgo is a minimal Named Data Networking library compatible with the NDN-DPDK forwarder. The main purpose of this library is for implementing unit tests and management functionality of NDN-DPDK. It also serves as a demonstration on how to create a library compatible with NDN-DPDK.
NDNgo does not depend on Cgo, and can be used in external projects via Go Modules. It is intended to be cross-platform, and part of the library can be compiled for WebAssembly via TinyGo compiler. However, this is not a high performance library, and there is no API stability guarantees.
Packet encoding and decoding
- General purpose TLV codec (in package tlv)
- Interest and Data: v0.3 format only
- TLV evolvability: yes
- Forwarding hint: yes
- Signed Interest: basic support
- NDNLPv2
- Fragmentation and reassembly: partial
- Nack: yes
- PIT token: yes
- Congestion mark: yes
- Link layer reliability: no
- Naming Convention: rev3 format (TLV-TYPE numbers)
Transports
- Unix stream, UDP unicast, TCP (in package sockettransport)
- Ethernet via GoPacket library (in package packettransport)
- Shared memory with local NDN-DPDK forwarder via memif (in package memiftransport)
- WebSocket for WebAssembly (in package wasmtransport)
KeyChain
- Encryption: no
- Signing algorithms
- SHA256: yes
- ECDSA: yes
- RSA: yes
- HMAC-SHA256: no
- Ed25519: proof of concept only
- Null: yes
- NDN certificates: basic support
- SafeBag: import and export
- Persistent key and certificate storage: no
- Trust schema: no
Application layer services
- Endpoint: yes
- Segmented object: consumer and producer (in package segmented)
- Realtime Data Retrieval (RDR): metadata structure (in package rdr)
Management integration:
- Connecting to NDN-DPDK: yes (in package gqlmgmt)
- Connecting to NFD and YaNFD: yes (in package nfdmgmt)
- NDN-FCH 2021: client (in package fch)
The best places to get started are:
Consume
function in package endpoint: express an Interest and wait for response, with automatic retransmissions and Data verification.Produce
function in package endpoint: start a producer, with automatic Data signing.l3.Face
type in package l3: network layer face abstraction, for low-level programming.
Examples are in command ndndpdk-godemo.