Skip to main content

Module generic

Module generic 

Source
Expand description

Generic / custom protocol layer for user-defined protocols.

GenericLayer allows a protocol to be defined entirely at runtime (e.g. from Python via PyO3 bindings) as a flat list of named, typed fields. Field descriptors (GenericFieldDesc) are shared between all packet instances using Arc, so the definition overhead is paid only once.

§Example

use std::sync::Arc;
use stackforge_core::layer::generic::{GenericFieldDesc, GenericLayer};
use stackforge_core::layer::field::{FieldType, FieldValue};
use stackforge_core::layer::LayerIndex;
use stackforge_core::layer::LayerKind;

let descs = Arc::new(vec![
    GenericFieldDesc {
        name: "opcode".to_string(),
        offset: 0,
        size: 1,
        field_type: FieldType::U8,
        default_value: vec![0x00],
    },
    GenericFieldDesc {
        name: "length".to_string(),
        offset: 1,
        size: 2,
        field_type: FieldType::U16,
        default_value: vec![0x00, 0x00],
    },
]);

let buf = vec![0x01u8, 0x00, 0x0A]; // opcode=1, length=10
let index = LayerIndex::new(LayerKind::Generic, 0, 3);
let layer = GenericLayer::new(index, Arc::from("MyProto"), descs);

assert_eq!(
    layer.get_field(&buf, "opcode").unwrap().unwrap(),
    FieldValue::U8(1)
);
assert_eq!(
    layer.get_field(&buf, "length").unwrap().unwrap(),
    FieldValue::U16(10)
);

Re-exports§

pub use builder::GenericLayerBuilder;

Modules§

builder
Builder for dynamically-defined custom protocol layers.

Structs§

GenericFieldDesc
Descriptor for a single field in a dynamically-defined protocol layer.
GenericLayer
A dynamically-defined protocol layer for custom / user-defined protocols.