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§
- Generic
Field Desc - Descriptor for a single field in a dynamically-defined protocol layer.
- Generic
Layer - A dynamically-defined protocol layer for custom / user-defined protocols.