Об этом проекте
Пакет bgp реализует протокол граничного шлюза версии 4 (BGP-4), как описано в RFC 4271 и связанных RFC, охватывая формат передачи, конечный автомат и жизненный цикл пиринга. Лицензия MIT, написан на Go.
Библиотека организована по слоям, каждый из которых можно использовать без слоёв выше:
- Типы сообщений, такие как Open, Update и Notification, с их бинарным кодированием.
- Conn, который выполняет кадрирование сообщений поверх соединения.
- FSM, который запускает конечный автомат RFC 4271 поверх Conn: одна попытка сессии на вызов Connect, передача обработчикам заимствованных значений без копирования.
- Peer, который оборачивает FSM циклом повторных попыток и обработчиками, чьи значения полностью принадлежат вызывающему.
- Server, который координирует множество Peer, принимая соединения на общих слушателях.
Ожидается, что большинство вызывающих будут использовать Peer или Server; FSM — это экспертный слой для вызывающих, которым нужна доставка без копирования или собственная политика повторных попыток.
В README приведён пример speaker, который анонсирует один маршрут соседу и регистрирует полученные маршруты. Run управляет жизненным циклом соединения: установлением, обменом OPEN, keepalive и повторными попытками для мёртвых сессий до отмены контекста. Отмена контекста отправляет Cease / Administrative Shutdown. Примеры пакета охватывают многопротокольный IPv6, dual stack, пассивных пиров и усиленную конфигурацию для работы в интернете.
Область применения намеренно ограничена: здесь нет таблицы маршрутизации и нет движка политик, и так будет всегда. Установленная сессия передаёт полученные сообщения UPDATE вызывающему, который принимает все решения о маршрутизации. RIB подключается на уровне Peer через свои обработчики, связывая методы в каждом PeerConfig и вычерпывая его Adj-RIB-Out через путь отправки. Сопутствующие проекты, такие как мониторинг BMP (RFC 7854) и проверка живости BFD (RFC 5880), строятся на тех же стыках и живут в отдельных репозиториях.
Поддержка платформ: слои message, Conn, FSM, Peer и Server — переносимый Go. Опции TCP-сокетов, необходимые production-спикеру BGP, такие как TCP-MD5, GTSM и DSCP, поддерживаются только на Linux; в других местах их установка завершается ошибкой, оборачивающей errors.ErrUnsupported.
Тестирование проводится на реальных данных интернет-маршрутизации и реальных маршрутизаторах: корпусные тесты разбирают каждое сообщение архивов route collector и каждый маршрут полной интернет-таблицы, требуя побайтового round trip маршалинга; fuzz-цели покрывают разбор сообщений, разбор атрибутов и кадрирование соединения, используя корпус как начальные данные; а стенд интероперабельности запускает живые сессии против FRRouting, покрывая установление, согласование возможностей, обмен маршрутами, TCP-MD5 и GTSM.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.