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
This commit is contained in:
nutcas3
2026-04-25 05:52:57 +03:00
parent e121fb4266
commit 5bb5e37e07
+43
View File
@@ -0,0 +1,43 @@
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,
}
}
}