Introduction
Kodo is a flexible C++ network coding library, intended to be used for
commercial applications and research on implementation of Network
Coding. The library enables researchers to implement new codes and
algorithms, perform simulations and benchmark the coding operations
on any platform where a recent C++ compiler is available. The library
provides a multitude of building blocks and parameters that can be combined
to create codes. For convenience, several codes are predefined and high-level
APIs are provided.
Codecs
- Standard RLNC
- All symbols are combined uniformly at random. In general, this type
of coding is “dense”, since the symbols in the data block are mixed
as much as possible. Density is lower for small field sizes.
- Sparse RLNC with uniform density
- Some symbols are excluded with a given probability during encoding.
The remaining symbols are combined as in the standard RLNC case.
This is typically useful when the block size is very high. The density
can be reduced significantly without any negative effect and
the decoding throughput can be increased substantially at the same time.
- Sparse RLNC with fixed density
- A fixed number of symbols are combined at random. This can be used
when feedback is available from the decoder. The encoding process
can be tuned at the encoder according to the state of the decoder.
- Seed-based RLNC
- Instead of sending the full coding vector, a small random seed can
be sent to generate the coding vector. This reduces the overhead,
but makes recoding difficult and in some cases impossible. This is
typically used when recoding is not necessary or used very sparingly.
- On-the-fly RLNC
- Symbols can be encoded as they are made available and data is released from
the decoder as decoding progresses. This is different from traditional block
codes where all data has to be available before encoding or decoding takes
place. This codec is well suited for low-delay services such as messaging,
voice over IP or video streaming.