# Generic Stream Encapsulation

Generic Stream Encapsulation, or GSE for short, is a Data link layer protocol defined by DVB. GSE provides means to carry packet oriented protocols such as IP on top of uni-directional physical layers such as DVB-S2, DVB-T2 and DVB-C2.
GSE provides additional features beyond the pure carriage of IP datagrams that increase the protocol flexibility and applicability. Some key GSE functions/characteristics are:
* Support for multi-protocol encapsulation (IPv4, IPv6, MPEG, ATM, Ethernet, 802.1pQ VLANs, etc.)
* Transparency to network layer functions, including IP encryption and IP header compression.
* Support of several addressing modes. In addition to the 6-byte MAC address (including multicast and unicast), it supports a MAC address-less mode, and an optional 3-byte address mode.
* A mechanism for fragmenting IP datagrams or other network layer packets over Base Band frames to support ACM/VCM.
* Support for hardware filtering.
* Extensibility: additional link protocols can be included through specific protocol type values (e.g. Layer 2 security, IP Header Compression, etc.).

## Protocol Outline

The protocol specification has been published as ETSI TS 102 606. An accompanying implementation guidelines document has been published as ETSI TS 102 771.
IP datagrams, Ethernet Frames, or other network layer packets are encapsulated in one or more GSE Packets. The encapsulation process adds control information such as the network protocol type and address label, and provides an overall integrity check when needed.
The payload frame may be encapsulated in a single GSE Packet or sliced into fragments and encapsulated in several GSE Packets. GSE Packets have in general variable length, in order to match the input IP traffic with minimum overhead.
GSE Packets may be sent in different Base Band frames, not necessarily consecutive or with the same transmission parameters (modulation format, coding rate). No constraint on the GSE Packet position within the Base Band frame is assumed. However, GSE Packets may not be reordered between the encapsulator and the de-encapsulator. In general, a Base Band frame can contain more than a single GSE Packet. Base Band frames may have fixed, or variable length.
GSE does not provide a mechanism for integrity check of single GSE Packet. A CRC-32 is only appended to the last fragment of a fragmented payload to verify the correctness of the reassembly operation. GSE relies on the physical layer being able to ensure the required error detection and/or correction probability.

### GSE Header

The GSE Packet header is highly dynamic and provides for many options. The minimum header is two bytes, comprising three flags fields, and a 12-bit payload length field. The diagram below shows all possible fields.
Unrolled GSE Header :
| bit offset | 0 | 1 | 2-3 | 2-3 | 4–7 | 4–7 | 4–7 | 4–7 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 |
| 0 | Start | End | Label Type | Label Type | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | GSE Length | Fragment ID | Fragment ID | Fragment ID | Fragment ID | Fragment ID | Fragment ID | Fragment ID | Fragment ID | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length |
| 32 | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length | Total Length | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) | Label (3 bytes) |
| 64 | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 3 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) |
| 96 | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | Label (continuation, length 6 bytes) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) | ULE Extension Headers (Optional) |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | Data | Data | Data | Data | Data | Data | Data | Data |
| ... | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data |

### Fragmentation and Reassembly

The basic mechanism of GSE payload fragmentation uses the Start and End Flags, where the Start flag indicates the beginning of a payload frame, and the End flag indicates its end. This is shown in the diagram below.
Fragmentation Principle :
| Start | End | GSE Packet Content |
| 1 | 0 | Total payload size / Protocol type / Payload start |
| 0 | 0 | Payload continuation |
| 0 | 1 | Payload end / CRC-32 |
On DVB-S2, DVB-T2, and DVB-C2 the ACM/VCM modes may cause the Base Band frames to vary in size depending on the transmission conditions. Hence there may be situations where the first fragments of a payload frame have been sent, but the encapsulator is forced to set aside the current payload frame, and start working on a new one. This may e.g. occur when large fragments have been prepared while transmission conditions were fine, but suddenly the conditions deteriorate, and only small Base Band frames are available.
This is when the Fragment ID field becomes important. It is a short-term identification of the payload frame. Whenever the encapsulator needs to move on to the next payload frame, without having finished transmitting the previous one, it uses the next available Fragment ID. That way, up to 256 payload frames can be "kept open" at any time. The decapsulator uses the Fragment ID to pick the reassembly buffer in which to store the fragment.

### GSE addresses

The "Label Type" (LT) bits determine how the GSE packet address is encoded according to the following table:
Addressing Mode :
| LT bits | Addressing mode |
| 00 | Indicates that a 6 bytes label is present and shall be used for filtering. |
| 01 | Indicates that a 3 bytes label is present and shall be used for filtering. |
| 10 | No label present. All receivers shall process this packet. |
| 11 | Label re-use: no label is present; the label is the same as the previous GSE packet in the same base band frame. LT=11 is also used for intermediate and end packets (i.e. Start bit 0). LT=11 shall not be used for the first GSE packet in a base band frame with Start bit 1. |

### CRC-32 Trailer

Each GSE Packet containing the last fragment for a payload frame, carries a CRC-32 checksum over the payload frame. The checksum is used to detect loss of intermediate fragments.
The checksum is a 32 bit value calculated according to the generator polynomial represented by 0x104C11DB7:
$y=x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^{8}+x^{7}+x^{5}+x^{4}+x^{2}+x^{1}+x^{0}$
If the last fragment of a payload frame is lost, the decapsulator can not directly detect that fact. It never sees the GSE frame with the End flag set and containing the CRC-32. For this situation, the decapsulator must choose a suitable time-out based on the data-rate and application.

## GSE Implementations
### Products Supporting GSE

Since GSE packets are directly inserted into base-band frames of the modulation scheme, GSE products come in the form of "GSE Routers" or "GSE Modems", which - from the outside - act very much like a DSL Router or DSL Modem used by consumers. More generically these devices are also referred to as "GSE Encapsulators". These products have a standard IP network interface (most often Ethernet or a similar LAN interface) to collect IP traffic which is to be forwarded over the uni-directional link on the other end. To optimise the packaging into base-band frames, these devices typically generate complete base-band frames with the GSE packets as payload, which are then transferred to the DVB-S2, DVB-T2 or DVB-C2 modulator through a second interface.
Here is a (very likely incomplete) list of GSE en- and decapsulators:
* Newtec
** EL470 IP Satellite Modem
** EL970 IP Satellite Demodulator
* WORK Microwave GmbH
** Challenge Series Satellite High Speed DVB-S2 IP Modem SK-IP Archived 2011-04-10 at the Wayback Machine
* Tebkom GmbH
** ODG200 IP/DVB-S2 Encapsulator/Modulator with ACM support
* Advantech Wireless Inc.
** AMT 75e DVB-S/S2 High Speed Broadcast Modem
* Comtech EF Data Corporation
** CDM-840 Remote Router
* K.S.Transplaneta Ltd.
** dpi4502 DVB2 (S2/T2/C2) compliant IPv4 / IPv6 Encapsulator
* Computer Modules, Inc.
** DVB Rocket™/S2
* Ayecka Communication systems LTD
** SR1 - Advance DVB-S2 demodulator with hardware based, wire speed, GSE Decapsulator
** ST1 - Advance DVB-S2 modulator with hardware based, wire speed, GSE encapsulator
** SM1 - Advance DVB-S2 Modem with hardware based, wire speed, GSE EnCapsulator / DeCapsulator

### GSE-based IP Service Offerings

There are many IP-over-satellite service offerings, including for instance ASTRA2Connect from SES or Tooway from Eutelsat. Little detail is however known about the protocols used since the receivers are provided as part of the service by the operators and very little technical detail is disclosed.