# moevm/grpc_server architecture

> Architecture diagram of the GitHub repository moevm/grpc_server, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/moevm/grpc_server
- Repository: https://github.com/moevm/grpc_server

## Overview

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: [`worker/src/dpdk_filter/proc_packets.c`](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/proc_packets.c) (Packet processing), [`controller/internal/grpcserver/admin_server.go`](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/admin_server.go) (Admin RPC), [`controller/internal/grpcserver/data_server.go`](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/data_server.go) (Worker data RPC), [`worker/src/worker.cpp`](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/worker.cpp) (Worker runtime)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_controller["Controller"]
  node_controller_main["gRPC server setup<br/>[main.go]"]
  node_admin_rpc["Admin RPC<br/>[admin_server.go]"]
  node_data_rpc["Worker data RPC<br/>[data_server.go]"]
  node_manager["Worker manager<br/>[manager.go]"]
  node_policy["Policy manager<br/>[policy_manager.go]"]
  node_admin_proto["Admin RPC contract"]
  node_comm_proto["Worker RPC contract"]
end

subgraph group_worker["Worker dataplane"]
  node_worker_main["Worker entrypoint<br/>[main.cpp]"]
  node_worker_runtime["Worker runtime<br/>[worker.cpp]"]
  node_packet_loop["DPDK packet loop<br/>[main.c]"]
  node_packet_processing["Packet processing<br/>[proc_packets.c]"]
  node_packet_parsing["Packet parsing<br/>[pars_packets.c]"]
  node_packet_filtering["Policy filtering<br/>[filtr_packets.c]"]
  node_network_ports["Network ports<br/>[net_port.c]"]
  node_dns_cache[("DNS cache<br/>[domain_cache.c]")]
  node_ip_cache[("IP cache<br/>[ip_cache.c]")]
end

subgraph group_classify["Classification"]
  node_classify_service["Category lookup<br/>[service.go]"]
  node_provider_config["Provider and category models<br/>[provider.go]"]
  node_http_client["Provider HTTP client<br/>[http_client.go]"]
  node_json_parser["Response parser<br/>[json_parser.go]"]
end

subgraph group_telemetry["Telemetry"]
  node_metrics["Metrics collector"]
end

node_admin_user(("Admin"))
node_traffic(("Network traffic"))
node_provider_api(("Classification providers"))
node_metrics_gateway(("Metrics gateway"))

node_admin_user -->|"administers"| node_admin_rpc
node_controller_main -->|"registers"| node_admin_rpc
node_controller_main -->|"registers"| node_data_rpc
node_controller_main -->|"constructs"| node_manager
node_admin_rpc -->|"controls"| node_manager
node_admin_rpc -->|"updates config"| node_policy
node_admin_proto -->|"defines RPCs"| node_admin_rpc
node_comm_proto -->|"defines RPCs"| node_data_rpc
node_data_rpc -->|"requests policy"| node_manager
node_data_rpc -->|"requests lookup"| node_classify_service
node_manager -->|"gets policy"| node_policy
node_worker_main -->|"starts"| node_worker_runtime
node_worker_runtime -->|"requests policy and classification"| node_data_rpc
node_worker_runtime -->|"runs dataplane"| node_packet_loop
node_traffic -->|"enters"| node_network_ports
node_packet_loop -->|"receives and forwards"| node_network_ports
node_packet_loop -->|"processes packets"| node_packet_processing
node_packet_processing -->|"parses packets"| node_packet_parsing
node_packet_processing -->|"applies policy"| node_packet_filtering
node_packet_processing -->|"uses cache"| node_dns_cache
node_packet_processing -->|"uses cache"| node_ip_cache
node_classify_service -->|"reads mappings"| node_provider_config
node_classify_service -->|"queries providers"| node_http_client
node_http_client -->|"sends requests"| node_provider_api
node_classify_service -->|"extracts categories"| node_json_parser
node_worker_runtime -->|"records counters"| node_metrics
node_metrics -->|"pushes metrics"| node_metrics_gateway

click node_controller_main "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/cmd/grpc_server/main.go"
click node_admin_rpc "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/admin_server.go"
click node_data_rpc "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/data_server.go"
click node_manager "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/manager/manager.go"
click node_policy "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/manager/policy_manager.go"
click node_admin_proto "https://github.com/moevm/grpc_server/blob/traffic_filtering/admin/admin_service.proto"
click node_comm_proto "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/pkg/proto/communication/communication.proto"
click node_worker_main "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/main.cpp"
click node_worker_runtime "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/worker.cpp"
click node_packet_loop "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/main.c"
click node_packet_processing "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/proc_packets.c"
click node_packet_parsing "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/pars_packets.c"
click node_packet_filtering "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/filtr_packets.c"
click node_network_ports "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/net_port.c"
click node_dns_cache "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/domain_cache.c"
click node_ip_cache "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/ip_cache.c"
click node_classify_service "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/service/service.go"
click node_provider_config "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/models/provider.go"
click node_http_client "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/client/http_client.go"
click node_json_parser "https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/parser/json_parser.go"
click node_metrics "https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/metrics_collector.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controller_main,node_admin_rpc,node_data_rpc,node_manager,node_policy,node_admin_proto,node_comm_proto toneBlue
class node_worker_main,node_worker_runtime,node_packet_loop,node_packet_processing,node_packet_parsing,node_packet_filtering,node_network_ports,node_dns_cache,node_ip_cache toneAmber
class node_classify_service,node_provider_config,node_http_client,node_json_parser toneMint
class node_metrics toneRose
class node_admin_user,node_traffic,node_provider_api,node_metrics_gateway toneIndigo
```

## Components

### Controller

- [gRPC server setup](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/cmd/grpc_server/main.go): `controller/cmd/grpc_server/main.go`
- [Admin RPC](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/admin_server.go): `controller/internal/grpcserver/admin_server.go`
- [Worker data RPC](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/grpcserver/data_server.go): `controller/internal/grpcserver/data_server.go`
- [Worker manager](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/manager/manager.go): `controller/internal/manager/manager.go`
- [Policy manager](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/manager/policy_manager.go): `controller/internal/manager/policy_manager.go`
- [Admin RPC contract](https://github.com/moevm/grpc_server/blob/traffic_filtering/admin/admin_service.proto): `admin/admin_service.proto`
- [Worker RPC contract](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/pkg/proto/communication/communication.proto): `controller/pkg/proto/communication/communication.proto`

### Worker dataplane

- [Worker entrypoint](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/main.cpp): `worker/src/main.cpp`
- [Worker runtime](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/worker.cpp): `worker/src/worker.cpp`
- [DPDK packet loop](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/main.c): `worker/src/dpdk_filter/main.c`
- [Packet processing](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/proc_packets.c): `worker/src/dpdk_filter/proc_packets.c`
- [Packet parsing](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/pars_packets.c): `worker/src/dpdk_filter/pars_packets.c`
- [Policy filtering](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/filtr_packets.c): `worker/src/dpdk_filter/filtr_packets.c`
- [Network ports](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/net_port.c): `worker/src/dpdk_filter/net_port.c`
- [DNS cache](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/domain_cache.c): `worker/src/dpdk_filter/domain_cache.c`
- [IP cache](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/dpdk_filter/ip_cache.c): `worker/src/dpdk_filter/ip_cache.c`

### Classification

- [Category lookup](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/service/service.go): `controller/internal/service/service/service.go`
- [Provider and category models](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/models/provider.go): `controller/internal/service/models/provider.go`
- [Provider HTTP client](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/client/http_client.go): `controller/internal/service/client/http_client.go`
- [Response parser](https://github.com/moevm/grpc_server/blob/traffic_filtering/controller/internal/service/parser/json_parser.go): `controller/internal/service/parser/json_parser.go`

### Telemetry

- [Metrics collector](https://github.com/moevm/grpc_server/blob/traffic_filtering/worker/src/metrics_collector.cpp): `worker/src/metrics_collector.cpp`

### Other components

- **Admin**
- **Network traffic**
- **Classification providers**
- **Metrics gateway**

## Connections

- 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
