Files
netrunner-proxy/core/src/rawcast
2026-06-30 18:51:09 +07:00
..
2026-06-30 18:51:09 +07:00
2026-06-30 18:51:09 +07:00
2026-06-30 18:51:09 +07:00
2026-06-30 18:51:09 +07:00

Блок rawcast — локальный протокол сокет ⇄ кадр

Промежуточный формат между «локальной» стороной клиента (реальные TCP/UDP сокеты приложений) и протоколом туннеля nrxp. Когда трафик приходит не из TUN напрямую, а из локальных соединений, его описывают компактным RawCastFrame, а RawCastAdapter переводит это в кадры NRXP и обратно.

Детали — в rustdoc, модуль rawcast.

Файлы

Файл Что внутри
frame.rs RawCastFrame + enum'ы LocalProtocol/RawCastEvent, wire-формат.
adapter.rs RawCastAdapter: трансляция RawCast ⇄ NRXP-Frame.

Формат кадра

┌──────────┬───────┬───────────┬─────────┬──────────┬─────────────┬─────────┐
│ protocol │ event │ socket_id │ dst_ip  │ dst_port │ payload_len │ payload │
│ 1 байт   │ 1 б.  │ 8 байт    │ 4 байта │ 2 байта  │ 2 байта     │ N байт  │
└──────────┴───────┴───────────┴─────────┴──────────┴─────────────┴─────────┘
  └──────────────── LOCAL_HEADER_SIZE = 16 ────────────────┘

Ментальная модель

локальный сокет ─→ RawCastFrame ─to_nrxp──→ NRXP Frame ─→ туннель
туннель ─→ NRXP Frame ─from_nrxp─→ RawCastFrame ─→ локальный сокет

socket_id локальной стороны напрямую отображается в stream_id потока NRXP, так что мультиплексирование «бесплатно» переносится между двумя протоколами. ICMP в формате распознаётся, но ядром NRXP не проксируется.

Связи

Потребитель — клиентская точка входа ClientHandler::connect (net): она гоняет RawCastFrame между локальными соединениями (client) и туннелем.