Files
telecom-platform/apps/packet-gateway/src/ebpf_error.rs
T
nutcas3 5bb5e37e07 feat: Add eBPF error types with recoverability classification for packet gateway
- Add EbpfError enum with LoadError, AttachError, MapNotFound, MapAccessError, RedisSyncError, RedisFetchError, NotAttached, Timeout, and InvalidData variants
- Add is_recoverable method returning true for MapAccessError, RedisSyncError, RedisFetchError, and Timeout errors
- Add thiserror::Error derive for automatic error trait implementation
- Add interface and map_name fields to AttachError and MapAccessError variants
2026-04-25 05:52:57 +03:00

44 lines
1.2 KiB
Rust

use thiserror::Error;
#[derive(Debug, Error)]
pub enum EbpfError {
#[error("Failed to load eBPF program: {0}")]
LoadError(String),
#[error("Failed to attach XDP program to interface {interface}: {message}")]
AttachError { interface: String, message: String },
#[error("eBPF map '{map_name}' not found")]
MapNotFound { map_name: String },
#[error("Failed to access eBPF map '{map_name}': {message}")]
MapAccessError { map_name: String, message: String },
#[error("Failed to sync data to Redis: {0}")]
RedisSyncError(String),
#[error("Failed to sync data from Redis: {0}")]
RedisFetchError(String),
#[error("eBPF program detached or not attached")]
NotAttached,
#[error("eBPF operation timeout: {0}")]
Timeout(String),
#[error("Invalid eBPF data: {0}")]
InvalidData(String),
}
impl EbpfError {
pub fn is_recoverable(&self) -> bool {
match self {
EbpfError::MapAccessError { .. } => true,
EbpfError::RedisSyncError(_) => true,
EbpfError::RedisFetchError(_) => true,
EbpfError::Timeout(_) => true,
_ => false,
}
}
}