Files
telecom-platform/apps/packet-gateway/README.md
T
nutcas3 857ca98382 feat: Add comprehensive Redis rate limiter tests with mock client, middleware validation, and multi-tier support
- Add MockRedisClient struct with Eval/Del/ZCount methods for Redis operation mocking
- Add TestRedisRateLimiter_Allow with under/over limit scenarios and mock Redis response validation
- Add TestRedisRateLimitMiddleware with IP-based rate limiting and empty key bypass tests
- Add TestIPKeyExtractor/TestUserKeyExtractor/TestAPIKeyExtractor with valid/invalid input validation
- Add TestEnd
2026-04-23 03:02:00 +03:00

212 lines
4.7 KiB
Markdown

# Packet Gateway with eBPF
A high-performance packet filtering gateway using eBPF XDP programs for real-time traffic control and credit management.
## Architecture
The packet gateway consists of two main components:
1. **eBPF Kernel Program** (`src/ebpf/packet_filter.c`): Runs in kernel space, filters packets at line rate
2. **Userspace Control Plane** (`src/main.rs`): Manages eBPF maps, syncs with Redis, handles configuration
## Features
- **XDP Packet Filtering**: Kernel-space packet filtering for maximum performance
- **Credit Management**: Real-time credit deduction and enforcement
- **Dynamic Blocking**: Block/unblock users via eBPF maps
- **Redis Integration**: Sync stats and configuration with Redis
- **Graceful Shutdown**: Clean up resources and sync final state
## eBPF Maps
### packet_stats
- **Key**: `u32` (IP address)
- **Value**: `u64` (byte count)
- **Purpose**: Track traffic usage per IP
### user_credits
- **Key**: `u32` (IP address)
- **Value**: `i64` (credit balance)
- **Purpose**: Enforce credit limits, block when depleted
### block_list
- **Key**: `u32` (IP address)
- **Value**: `u8` (block flag: 0=allow, 1=block)
- **Purpose**: Manual blocking of specific IPs
## Build Requirements
### Prerequisites
```bash
# Install eBPF development tools
sudo apt-get install -y linux-headers-$(uname -r) clang llvm
# Install Rust eBPF tools
cargo install aya-cli
```
### Build Process
```bash
# Build eBPF program
cargo xtask build-ebpf
# Build userspace application
cargo build --release
```
## Usage
### Basic Usage
```bash
# Run with default settings
sudo ./target/release/packet-gateway
# Specify interface and Redis
sudo ./target/release/packet-gateway \
--interface eth0 \
--redis-url redis://127.0.0.1/ \
--sync-interval 1
```
### Redis Integration
The gateway syncs with Redis using these key patterns:
**Packet Stats:**
```
packet_stats:192.168.1.100 -> 1048576 # bytes transferred
```
**User Credits:**
```
user_credit:192.168.1.100 -> 10485760 # remaining credit in bytes
```
**Blocked Users:**
```
blocked_user:192.168.1.100 -> 1 # blocked flag
```
### Managing Credits
```bash
# Set user credit (Redis)
redis-cli set user_credit:192.168.1.100 10485760
# Block a user
redis-cli set blocked_user:192.168.1.100 1
# Unblock a user
redis-cli del blocked_user:192.168.1.100
```
## eBPF Program Details
### Packet Processing Flow
1. **Parse Packet**: Extract source/destination IPs
2. **Check Block List**: Block if IP is in block list
3. **Check Credit**: Block if insufficient credit
4. **Update Stats**: Increment packet statistics
5. **Deduct Credit**: Decrease user credit balance
6. **Return Action**: `XDP_PASS` or `XDP_DROP`
### Key Functions
- `packet_filter()`: Main XDP program entry point
- `should_block_packet()`: Determine if packet should be blocked
- `update_packet_stats()`: Update traffic statistics
- `update_credit_usage()`: Deduct credit from user balance
## Performance
- **Line Rate Processing**: XDP enables kernel-space packet filtering
- **Map Operations**: O(1) hash map lookups for credit/block checks
- **Atomic Updates**: Lock-free map updates for high concurrency
## Monitoring
### Metrics Available
- Packets processed per second
- Bytes transferred per IP
- Active user count
- Low credit warnings
- Block list size
### Log Levels
```bash
# Debug logging
RUST_LOG=debug ./packet-gateway
# Production logging
RUST_LOG=info ./packet-gateway
```
## Security Considerations
- **Root Required**: eBPF XDP programs require root privileges
- **Network Isolation**: Test in isolated network environments
- **Memory Safety**: eBPF verifier ensures kernel safety
- **Resource Limits**: Map sizes prevent memory exhaustion
## Troubleshooting
### Common Issues
**Permission Denied:**
```bash
# Run with sudo
sudo ./packet-gateway
```
**Interface Not Found:**
```bash
# Check available interfaces
ip link show
```
**Redis Connection Failed:**
```bash
# Verify Redis is running
redis-cli ping
```
**eBPF Program Failed to Load:**
```bash
# Check kernel logs
dmesg | grep -i ebpf
```
### Debug Mode
Enable detailed logging to troubleshoot issues:
```bash
RUST_LOG=debug ./packet-gateway --interface eth0
```
## Development
### Adding New Features
1. **eBPF Side**: Add new maps or modify packet_filter.c
2. **Userspace Side**: Add corresponding methods in EbpfManager
3. **Redis Integration**: Update sync functions
4. **Testing**: Add unit tests and integration tests
### Testing
```bash
# Run unit tests
cargo test
# Run integration tests (requires test environment)
cargo test --test integration
# Build and run in debug mode
cargo build && sudo ./target/debug/packet-gateway
```
## License
This project is licensed under the GPL v2 license, compatible with eBPF kernel requirements.