т.к. тема BGP в Quagga, а не «bgpd», то расскажите, что происходит дальше с маршрутами в зебре? как она их рекурсивно решает? кто выполняет функции BGP Scanner и как это происходит?
BGP Scanner периодически (по-умолчанию раз в минуту) запускается внутри bgpd и работает следующим образом: последовательно проходится вся таблица BGP, для каждого префикса последовательно проходятся все его маршруты и из каждого маршрута берется его next-hop. Для каждого next-hop делается запрос в zebra, чтобы она его разрешила (в смысле, посмотрела, есть ли у нее маршрут до next-hop). В ответе от zebra содержится в том числе информация о валидности next-hop и IGP метрика до него, которые bgpd обновляет в таблице BGP. В конце запускается перерасчет выбора лучших маршрутов BGP и их рассылка соседям.
В zebra могут храниться рекурсивные next-hop у маршрутов от bgpd (с одним уровнем рекурсии). Т.е. например, у маршрута 10.0.0.1 хранится next-hop 1.1.1.1, а к этому next-hop еще «прикреплены» resolved next-hop, например, 2.2.2.2. В таблицу маршрутизации linux идет маршрут 10.0.0.1 c next-hop 2.2.2.2.
Bgpd по функционалу и синтаксису CLI довольно сильно похож на Cisco. Поскольку bgpd работает по BGP и с другими маршрутизаторами, то, видимо, придерживается RFC.
Протокол BGP в Quagga