How moevm/grpc_server works
This repository implements a gRPC controller and packet-filtering workers. Traffic is received by a worker, processed against its current policy, and forwarded or dropped; workers also request policy and classification results from the controller. The controller exposes admin configuration/filter controls and worker data RPCs, with category lookup backed by configurable external providers. The excerpts establish the worker packet loop, policy exchange, and provider-query service; wiring inside unsampled server and packet-processing code is shown only where supported by the documented interfaces or visible calls.
Main entry points: proc_packets.c Packet processing · admin_server.go Admin RPC · data_server.go Worker data RPC · worker.cpp Worker runtime
Components 25
Controller
- gRPC server setup
controller/cmd/grpc_server/main.go - Admin RPC
controller/internal/grpcserver/admin_server.go - Worker data RPC
controller/internal/grpcserver/data_server.go - Worker manager
controller/internal/manager/manager.go - Policy manager
controller/internal/manager/policy_manager.go - Admin RPC contract
admin/admin_service.proto - Worker RPC contract
controller/pkg/proto/communication/communication.proto
Worker dataplane
- Worker entrypoint
worker/src/main.cpp - Worker runtime
worker/src/worker.cpp - DPDK packet loop
worker/src/dpdk_filter/main.c - Packet processing
worker/src/dpdk_filter/proc_packets.c - Packet parsing
worker/src/dpdk_filter/pars_packets.c - Policy filtering
worker/src/dpdk_filter/filtr_packets.c - Network ports
worker/src/dpdk_filter/net_port.c - DNS cache
worker/src/dpdk_filter/domain_cache.c - IP cache
worker/src/dpdk_filter/ip_cache.c
Classification
- Category lookup
controller/internal/service/service/service.go - Provider and category models
controller/internal/service/models/provider.go - Provider HTTP client
controller/internal/service/client/http_client.go - Response parser
controller/internal/service/parser/json_parser.go
Telemetry
- Metrics collector
worker/src/metrics_collector.cpp
Other components
- Admin
- Network traffic
- Classification providers
- Metrics gateway
Connections 27
- Admin → Admin RPC: administers
- gRPC server setup → Admin RPC: registers
- gRPC server setup → Worker data RPC: registers
- gRPC server setup → Worker manager: constructs
- Admin RPC → Worker manager: controls
- Admin RPC → Policy manager: updates config
- Admin RPC contract → Admin RPC: defines RPCs
- Worker RPC contract → Worker data RPC: defines RPCs
- Worker data RPC → Worker manager: requests policy
- Worker data RPC → Category lookup: requests lookup
- Worker manager → Policy manager: gets policy
- Worker entrypoint → Worker runtime: starts
- Worker runtime → Worker data RPC: requests policy and classification
- Worker runtime → DPDK packet loop: runs dataplane
- Network traffic → Network ports: enters
- DPDK packet loop → Network ports: receives and forwards
- DPDK packet loop → Packet processing: processes packets
- Packet processing → Packet parsing: parses packets
- Packet processing → Policy filtering: applies policy
- Packet processing → DNS cache: uses cache
- Packet processing → IP cache: uses cache
- Category lookup → Provider and category models: reads mappings
- Category lookup → Provider HTTP client: queries providers
- Provider HTTP client → Classification providers: sends requests
- Category lookup → Response parser: extracts categories
- Worker runtime → Metrics collector: records counters
- Metrics collector → Metrics gateway: pushes metrics