Skip to main content

Crate sciparse

Crate sciparse 

Source
Expand description

§SciParse: Zero-Copy SCION Packets

This library provides functionality to parse and construct SCION packets.

Parsing is performed via zero-copy views over byte buffers, providing direct field access without allocation or data transformation, and with only the validation required to uphold safety.

The library is designed to be efficient and flexible, allowing users to work with SCION packets in a straightforward manner.

SciParse exposes both view-based and model-based representations of SCION packets.

§Overview

§Views

Detailed docs: view

Views are zero-copy projections over byte buffers.

A view provides read access and limited write access to SCION packet fields directly on the underlying buffer, with minimal overhead.

Views do not support modification of dynamically sized fields (e.g., addresses, path segments).

Most relevant structs include:

Most views can be parsed from byte buffers using the View trait, which performs the necessary validation to ensure that the view is safe to use.

let buf: Vec<u8> = vec![/* ... */]; // Buffer containing a SCION packet
let packet_view = ScionRawPacketView::try_from_slice(&buf[..]).expect("Failed to parse SCION packet");

println!("Parsed view: {:?}", packet_view);

The View trait also supplies functions for mutable slices, and boxed buffers, as well as unsafe functions for unchecked parsing when the caller can guarantee the validity of the buffer.

There are some exceptions where views require information found in other parts of the packet, which can not implement the View trait directly.

§Models

Models represent SCION packets as structured Rust types.

They are intended for constructing new packets or performing complex modifications that are impractical or unsafe using views alone.

Most relevant structs include:

Models allow creating new packets from scratch.

Most models can also be created from views or from byte buffers directly, which load the relevant fields of a SCION packet into Rust types.

let model = ScionRawPacket::try_from_slice(&buf[..]).expect("Failed to parse SCION packet");

println!("Parsed model: {:?}", model);

§Control Plane Primitives

In addition to dataplane packet parsing and construction, SciParse also provides primitives for working with SCION control plane messages, such as path segments and beacons.

Modules§

address
Network Addresses used in SCION
checksum
Functions and types to calculate SCION message checksums. XXX(uniquefine): We reuse the ChecksumDigest from scion-proto for now this can be implemented more cleanly later.
core
Core traits and utilities for working with bit-level data Core traits and utilities for zero-copy views, models, encoding, and layouts.
dataplane_path
Path interpretation. SCION dataplane path parsing and interpretation.
header
SCION header interpretation. SCION header interpretation.
identifier
SCION identifier primitives.
packet
Full SCION packet interpretation. SCION packet parsing and construction
path
SCION control plane paths and related functionality.
payload
Payload interpretation. SCION packet payloads (UDP, SCMP) and protocol numbers.
reexport
Re-exports of dependencies for users of this library
rpc
RPC utility types
segment
SCION control plane segment types.
signed_message
Support for signing and validating protobuf messages with ECDSA signatures.
util
Sciparse utility functions.