Skip to content

Develop a simplified PGW (Packet Gateway) network component model capable of handling UDP requests, managing subscriber sessions by IMSI, maintaining CDR logs, providing HTTP API, supporting an IMSI blacklist, and ensuring proper shutdown.

Notifications You must be signed in to change notification settings

mor1la/mini_pgw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PGW (Packet Gateway) – Упрощённая модель сетевого компонента

1. Цель проекта

Разработать упрощённую модель PGW, способную:

  • Обрабатывать UDP-запросы с IMSI абонентов
  • Управлять сессиями (создание/удаление)
  • Вести CDR-журнал (Call Detail Record)
  • Предоставлять HTTP API для мониторинга
  • Поддерживать чёрный список IMSI
  • Обеспечивать graceful shutdown

2. Архитектура решения

Основное приложение: pgw_server

Компонент Функционал
UDP-сервер Приём пакетов с IMSI, отправка ответов ('created'/'rejected')
Менеджер сессий Управление жизненным циклом сессий (таймаут)
CDR-журнал Запись действий в формате: timestamp, IMSI, action
HTTP API 2 эндпоинта: /check_subscriber и /stop
Чёрный список Автоматический отказ для IMSI из списка
Логирование Запись ключевых событий в файл лог
Конфигурация Чтение параметров из JSON (порты, таймауты, пути к файлам)

Тестовое приложение: pgw_client

Функционал Описание
CLI-интерфейс Запуск с передачей IMSI (./pgw_client 001010123456789)
UDP-коммуникация Отправка запроса и получение ответа от сервера
Логирование Запись событий в файл лог

3. Форматы данных

UDP-протокол

  • Запрос: IMSI в BCD-кодировке (TS 29.274 §8.3)
  • Ответ: ASCII-строка created или rejected

CDR Состояния (Call Detail Record)

CDR (Call Detail Record) – это структура, содержащая сведения о действиях с идентификатором IMSI. Ниже перечислены возможные действия (Action) и их описание.

Возможные действия

Действие Строковое значение Описание
Create "create" Создание новой записи для указанного IMSI
Reject "reject" Отклонение подключения, например, при недопустимом IMSI или других ошибках
Delete "delete" Удаление записи по таймеру (автоматическое завершение сессии по истечении времени)
Offload "offload" Завершение и выгрузка записи при остановке сервера
Update "update" Повторное подключение с тем же IMSI, ведущее к обновлению текущей сессии

Пример записи

Каждая запись CDR содержит следующие поля:

  • IMSI – идентификатор абонента
  • Action – действие, одно из описанных выше
  • Timestamp – время действия

Пример строки CDR:

2025-07-27 13:32:06,001010123456786,create

2025-07-27 13:32:20,001010123456786,offload

4. Особенности реализации

Многопоточность

Приложение использует отдельные потоки для разных задач:

  • Поток для обработки UDP-запросов
  • Поток для обработки HTTP-запросов
  • Поток для периодической очистки неактивных сессий

Graceful shutdown

Реализована корректная остановка приложения:

  • Использование Crow framework для обработки HTTP-запросов и graceful shutdown
  • Поддержка асинхронного завершения работы сервера через stop() метод
  • Завершение активных соединений
  • Освобождение ресурсов
  • Корректное завершение работы всех потоков
  • Постепенное (rate-limited) отключение активных сессий при получении сигнала /stop

Логирование

Используется библиотека spdlog для многоуровневого логирования:

  • DEBUG – отладочная информация
  • INFO – основная информация о работе приложения
  • WARN – предупреждения о нештатных ситуациях
  • ERROR – критические ошибки

Обработка сигналов

  • Приложение перехватывает и обрабатывает сигналы:
    • SIGINT (Ctrl+C)
    • SIGTERM (сигнал завершения)
  • При получении сигналов выполняется clean stop приложения
  • Для HTTP-интерфейса реализован специальный endpoint /stop для инициации graceful shutdown

5. Тестирование и сборка проекта

Сборка проекта выполняется с использованием CMake под Linux:

mkdir build && cd build
cmake ..
make

Тестирование реализовано с помощью юнит-тестов на базе фреймворка Google Test

Покрытые модули:

  • SessionManager – управление сессиями и их состояниями
  • ConfigLoader – загрузка конфигурации из файла
  • UdpClient – кодировка сообщений
  • UdpServer – корректность декодирования сообщений

Исполняемый файл с тестами: build/bin/unit_tests

6. Примеры использования PGW-сервера и клиента

Запуск сервера

./pgw_server

Создание сессии

./pgw_client 001010123456785

Для проверки активности сессии /check_subscriber

curl "http://localhost:8080/check_subscriber?imsi=001010123456785"

Для остановки сервера /stop

curl "http://localhost:8080/stop"

About

Develop a simplified PGW (Packet Gateway) network component model capable of handling UDP requests, managing subscriber sessions by IMSI, maintaining CDR logs, providing HTTP API, supporting an IMSI blacklist, and ensuring proper shutdown.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published