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
- SCION Packet Types - SCION packet parsing and construction
- SCION Path Types - SCION path parsing and construction
- SCION Header Types - SCION header parsing and construction
§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:
- ScionRawPacketView
- ScionUdpPacketView
- ScionHeaderView
- ScionDpPathView
- StandardPathView
- OneHopPathView
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.