4.1. Правила изменения AS_PATH
При реализации конфедераций BGP параграф 5.1.2 документа [BGP-4] заменяется приведенным ниже текстом.
AS_PATH представляет собой общеизвестный обязательный атрибут. Этот атрибут идентифицирует автономные системы, через которые передается маршрутная информация в данном сообщении UPDATE. Компонентами этого списка могут быть AS_SET, AS_SEQUENCE, AS_CONFED_SET и AS_CONFED_SEQUENCE.
Когда узел BGP распространяет маршрут, который был получен в сообщении UPDATE от другого узла BGP, он изменяет атрибут AS_PATH с учетом размещения узла BGP, которому передается маршрут:
Когда данный узел BGP анонсирует маршрут другому узлу BGP, расположенному в его Member-AS, анонсирующему узлу не следует изменять связанный с этим маршрутом атрибут AS_PATH.
Когда данный узел BGP анонсирует маршрут узлу BGP, расположенному в соседней автономной системе, являющейся членом локальной конфедерации, анонсирующему узлу следует изменить атрибут AS_PATH как показано ниже.
Если первый сегмент AS_PATH имеет тип AS_CONFED_SEQUENCE, локальной системе следует поместить свой номер Member-AS, как последний элемент списка (в крайнюю левую позицию протокольного сообщения). Если при этом будет возникать переполнение сегмента AS_PATH (более 255 номеров АС), узлу следует добавить (prepend) новый сегмент типа AS_CONFED_SEQUENCE и поместить свой номер АС в этот сегмент.
Если первый сегмент AS_PATH имеет тип, отличный от AS_CONFED_SEQUENCE, локальная система помещает (prepend) новый сегмент типа AS_CONFED_SEQUENCE в путь AS_PATH, включив свой номер Member-AS в этот сегмент.
Если значение AS_PATH пусто, локальная система создает сегмент пути типа AS_CONFED_SEQUENCE, включает в него свой номер Member-AS и помещает этот сегмент в AS_PATH.
Когда данный узел BGP анонсирует маршрут узлу BGP, расположенному в соседней автономной системе, которая не входит в локальную конфедерацию, анонсирующему узлу следует изменить атрибут AS_PATH как показано ниже.
Если любые сегменты AS_PATH имеет тип AS_CONFED_SEQUENCE или AS_CONFED_SET, эти сегменты должны удаляться из атрибута AS_PATH и после этого для атрибута выполняется этап 2, 3 или 4 (см. ниже).
Если первый оставшийся сегмент AS_PATH имеет тип AS_SEQUENCE, локальная система добавляет (prepend) свой идентификатор конфедерации (AS Confederation Identifier) в качестве последнего элемента последовательности (в крайнюю левую позицию протокольного сообщения). Если при этом будет возникать переполнение сегмента AS_PATH (более 255 номеров АС), узлу следует добавить (prepend) новый сегмент типа AS_SEQUENCE и поместить свой номер АС в этот сегмент.
Если первый сегмент оставшейся части AS_PATH имеет тип AS_SET, локальная система добавляет (prepend) в AS_PATH новый сегмент типа AS_SET, включая в него свой идентификатор конфедерации.
Если оставшаяся часть AS_PATH пуста, локальная система создает сегмент пути типа AS_SEQUENCE, включает в него свой идентификатор конфедерации и помещает этот сегмент в AS_PATH.