Rust implementation of DVB-GSE

Overview

dvb-gse

Crates.io Rust

dvg-se is a Rust implementation of the DVB GSE (Generic Stream Encapsulation) protocol and related protocols.

It is mainly intended to be used as a CLI application that receives UDP packets from Longmynd containing fragments of BBFRAMES, obtains IP packets from a continous-mode GSE stream, and sends the IP packets to a TUN device.

The crate can also be used as a library to process GSE Packets and DVB-S2/DVB-S2X BBFRAMES.

Documentation

The documentation for dvb-gse is hosted in docs.rs.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • BBFrame multicast input

    BBFrame multicast input

    To allow easy debugging, it could be helpful that dvb-gse could receive udp/multicast bbframes from longmynd. Thus we could inspect input bbframe and result on tun at same time. (ehancement).

    enhancement 
    opened by F5OEO 6
  • MIS not supported

    MIS not supported

    Multiple Input Stream is not supported yet. However, some equipment indicates MIS even with a single stream. BBFrame parsing should be fine by bypassing the strict condition of SIS. The only drawback is if we have concurent IP of different interfaces which are in collision. Adding a filter on ISI could be a solution and send streams to several tun interfaces.

    Proposal : Remove https://github.com/daniestevez/dvb-gse/blob/e61d18e74166172a5f5ae2aaf2da668c3e27cc42/src/bbframe.rs#L138

    enhancement 
    opened by F5OEO 6
  • gsepacket: add option to skip the total length check

    gsepacket: add option to skip the total length check

    Since some modulators put a wrong value in this field, this adds an option to the CLI and the GSE Packet defragmenter to skip the checking of the total length field.

    This closes #11.

    Signed-off-by: Daniel Estévez [email protected]

    opened by daniestevez 0
  • add option to process single ISI in MIS-mode

    add option to process single ISI in MIS-mode

    This adds a command line option to the CLI to run in MIS mode and process only of single ISI (indicated by the user). The corresponding changes in BBFrametDefrag have been implemented.

    This closes #6.

    Signed-off-by: Daniel Estévez [email protected]

    opened by daniestevez 0
  • cli: join multicast group if listening on multicast address

    cli: join multicast group if listening on multicast address

    If the UDP address in which we listen is a multicast address, we should join the multicast group. The multicast group is left automatically when the application terminates.

    Signed-off-by: Daniel Estévez [email protected]

    opened by daniestevez 0
  • Fix defragmentation of Longmynd UDP packets not containing full BBHEADER

    Fix defragmentation of Longmynd UDP packets not containing full BBHEADER

    During testing I have seen that sometimes Longmynd will output a very small (a few bytes) UDP packet that only contains the beginning of the BBHEADER of a BBFRAME. This matches what happens with the FT2232H USB interface: the corresponding bulk transfer only carries a few bytes.

    Most likely this is caused by the bulk transfer being timed such it is executed very shortly after the STV0910 begins to output a BBFRAME. In this case the FT2232H FIFO would only contain the first few bytes of the BBFRAME.

    This fixes the problem by reading multiple UDP packets if necessary, until enough data for a full BBHEADER has been collected. The BBHEADER is then validated as usual.

    I have tested that a ping -s 1450 -i 0.01 with IPv6 on a 1 Msym/s QPSK 1/2 normal FECFRAME no pilots link (which achieves occupancy of ~70%) doesn't lose any packets after this change. There are no drops or decode errors while streaming audio either.

    opened by daniestevez 0
Releases(v0.3.0)
Owner
Daniel Estévez
Daniel Estévez
Ray Tracing: The Next Week implementation in Rust

rttnw Ray Tracing: The Next Week implementation in Rust How to run Install Rust: Link here. Run project git clone https://github.com/luliic2/rttnw cd

null 20 Apr 26, 2022
Rust implementation of µKanren, a featherweight relational programming language.

µKanren-rs This is a Rust implementation of µKanren, a featherweight relational programming language. See the original Scheme implementation here for

Eric Zhang 99 Dec 8, 2022
An implementation of Olm and Megolm in pure Rust.

A Rust implementation of Olm and Megolm vodozemac is a Rust implementation of libolm, a cryptographic library used for end-to-end encryption in Matrix

matrix.org 66 Dec 26, 2022
Pure Rust Implementation of secp256k1.

SECP256K1 implementation in pure Rust Cargo Documentation SECP256K1 implementation with no_std support. Currently we have implementation for: Convert

Parity Technologies 141 Dec 21, 2022
A Rust implementation of generic prefix tree (trie) map with wildcard capture support

prefix_tree_map A Rust implementation of generic prefix tree (trie) map with wildcard capture support. Design Trie is a good data structure for storin

EAimTY 3 Dec 6, 2022
fast rust implementation of online nonnegative matrix factorization as laid out in the paper "detect and track latent factors with online nonnegative matrix factorization"

ONMF status: early work in progress. still figuring this out. code still somewhat messy. api still in flux. fast rust implementation of online nonnega

null 2 Apr 10, 2020
A modular implementation of timely dataflow in Rust

Timely Dataflow Timely dataflow is a low-latency cyclic dataflow computational model, introduced in the paper Naiad: a timely dataflow system. This pr

Timely Dataflow 2.7k Dec 30, 2022
An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

Moritz Hedtke 1 Feb 12, 2022
A fast lean and clean modern constraint programming solver implementation (in rust)

MaxiCP-rs This project aims at implementing a fast, and clean constraint programming solver with a focus on correctness, simplicity, maintainability a

Xavier Gillard 5 Dec 10, 2022
Rust implementation of Waku v2 (f.k.a. Whisper)

waku-rs Waku is a p2p messaging protocol tailored for the web3, with origins in Ethereum's Whisper. This Rust implementation is taking reference from

bernardo 12 Jul 11, 2022
The second Rust implementation on GitHub of third-party REST API client for Bilibili.

Bilibili REST API The second Rust implementation on GitHub of third-party REST API client for Bilibili. Designed to be lightweight and efficient. It's

null 4 Aug 25, 2022
Rust-only ext4 implementation without unsafe code.

Rust-Ext4 Rust-only ext4 implementation without unsafe code. Supporting features no_std Direct/Indirect Block Addressing (RO) Extent Tree Addressing (

null 7 Dec 5, 2022
Rust implementation of Surging Object DiGraph (SODG)

This Rust library implements a Surging Object DiGraph (SODG) for reo virtual machine for EO programs. Here is how you can create a di-graph: use sodg:

Objectionary 8 Jan 14, 2023
Tvix - A Rust implementation of Nix

Tvix Tvix is a new implementation of the Nix language and package manager. See the announcement post for information about the background of this proj

The Virus Lounge 49 Feb 17, 2023
Rust library provides a standalone implementation of the ROS (Robot Operating System) core

ROS-core implementation in Rust This Rust library provides a standalone implementation of the ROS (Robot Operating System) core. It allows you to run

Patrick Wieschollek 3 Apr 26, 2023
A Rust implementation of HyperLogLog trying to be parsimonious with memory.

?? HyperLogLog-rs This is a Rust library that provides an implementation of the HyperLogLog (HLL) algorithm, trying to be parsimonious with memory. Wh

Luca Cappelletti 10 May 16, 2023
A Rust implementation of V8's ValueSerializer and ValueDeserializer

v8_valueserializer This module implements the V8 ValueSerializer and ValueDeserializer API in Rust. It can serialize and deserialize any value that ca

Deno 7 Nov 8, 2023
Experimental Quantum Computer Simulator + Quantum Chess Implementation

Quantum Chess A somewhat hacky implementation of this paper (made in a week over a holiday). It's not heavily tested and probably has some bugs still

null 19 Jan 21, 2022
ESP32 implementation of RustZX Spectrum emulator for ESP32-USB-OTG

RustZX for ESP32 - experimental version Goal of the project: Run ZX Spectrum on ESP32 HW: ESP32 OTG USB with ST7789 display References Rust code for E

Juraj Michálek 22 Nov 9, 2022