Об этом проекте

Пакет 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.