Documentation de référence sur les attributs de règles de routage BGP

Cette page présente des exemples de règles de routage BGP, à l'aide du langage CEL (Common Expression Language) pour Cloud Router.

Les règles de routage BGP sont définies comme une liste ordonnée de termes. Chaque terme est évalué dans l'ordre que vous spécifiez et inclut à la fois une condition et une action correspondante lorsque l'itinéraire correspond à ce terme. Une règle de routage BGP particulière ne peut être appliquée que dans une seule direction, soit entrante pour les routes apprises, soit sortante pour les routes annoncées, mais pas les deux simultanément. Toutefois, les règles de routage BGP peuvent être appliquées à plusieurs pairs BGP sur Cloud Router.

Attributs de mise en correspondance

Le tableau suivant décrit les attributs de correspondance disponibles pour les règles de routage BGP :

Attributs

Description

communities

Liste des communautés attribuées à la route BGP

destination

Plage d'adresses IP pour la route BGP

Opérations de mise en correspondance

Le tableau suivant décrit les opérations de correspondance disponibles pour les règles de routage BGP :

Opération

Description

communities.matchesEvery('65001:1234')

Renvoie "true" si les communautés sont un sur-ensemble de la liste '65001:1234'.

Une valeur community_value est un champ 32 bits divisé en deux sections 16 bits. De manière conventionnelle, les 16 premiers bits de la valeur encodent le numéro de système autonome (SA) du réseau à l'origine de la communauté, mais Cloud Router n'applique pas cette convention. Les 16 bits suivants de la valeur encodent un numéro unique attribué par le SA d'origine.

Réservé à l'importation uniquement.

destination == '192.168.0.0/24'

Renvoie true si une route BGP correspond à 192.168.0.0/24 (correspondance exacte).

destination != '192.168.0.0/24'

Renvoie true si une route BGP ne correspond pas à 192.168.0.0/24 (correspondance exacte).

destination.inAnyRange(r)

Renvoie true si une route BGP est comprise dans la plage r, où r est l'un des éléments suivants:

  • Chaîne avec un préfixe encodé en CIDER, par exemple 192.168.0.0/24.
  • Type abstrait renvoyé par prefix() ou l'une des méthodes fluentes que vous pouvez appeler sur prefix(), comme longer().
  • Liste hétérogène dans laquelle chaque élément doit correspondre à l'une des valeurs précédemment décrites.

Peut être rendue négative avec !.

prefix('192.168.0.0/24')

Renvoie un objet de préfixe représentant la plage CIDR 192.168.0.0/24, utilisée avec destination.inAnyRange().

prefix('192.168.0.0/24').longer()

Renvoie un objet de plage de préfixes qui est une copie de prefix(), dont la fin de la plage est définie sur la valeur maximale par famille d'adresses du préfixe d'entrée (/32 ou /128), et le début de la plage définie sur la longueur du préfixe d'entrée plus un.

prefix().orLonger()

Renvoie un objet de plage de préfixes qui est une copie de prefix(), dont la fin de la plage est définie sur la valeur maximale par famille d'adresses du préfixe d'entrée (/32 ou /128).

prefix().lengthRange(20, 30)

Renvoie un objet de plage de préfixes qui est une copie de prefix(), dont le début de la plage est défini sur /20 et la fin sur /30.

prefix().upTo(30)

Renvoie un objet de plage de préfixes qui est une copie de prefix() dont la fin de la plage est définie sur le préfixe d'entrée /30.

x || y

Renvoie true si x ou y est true.

x et y doivent être des expressions booléennes qui utilisent l'attribut communities ou destination.

En raison des règles concernant les opérations || (OU), toutes les conditions sont en fait zéro ou plusieurs opérations de correspondance destination connectées par OU.

(D0 || D1 || ... || Dm)

Le tableau suivant est un exemple d'utilisation de prefix pour créer des expressions régulières complexes par rapport à certains fournisseurs de routeur :

Cloud Router Cisco Juniper Explication

'192.168.0.1'

192.168.0.1

192.168.0.1

Correspond exactement au préfixe 192.168.0.1/32

'192.168.0.0/24'

prefix('192.168.0.0/24')

192.168.0.0/24

192.168.0.0/24 exact

Correspond exactement au préfixe 192.168.0.0/24

prefix('192.168.0.0/24').longer()

192.168.0.0/24 ge 25 le 32

192.168.0.0/24 longer

Faire correspondre la plage comprise dans 192.168.0.0/25 à 192.168.0.0/32

prefix('192.168.0.0/24').orLonger()

192.168.0.0/24 le 32

192.168.0.0/24 orlonger

Faire correspondre la plage comprise dans 192.168.0.0/24 à 192.168.0.0/32

prefix('192.168.0.0/24').lengthRange(25, 30)

192.168.0.0/24 ge 25 le 30

192.168.0.0/24 prefix-length-range /25-/30

Faire correspondre la plage comprise dans 192.168.0.0/25 à 192.168.0.0/30

prefix('192.168.0.0/24').upTo(30)

192.168.0.0/24 le 30

192.168.0.0/24 up to /30

Faire correspondre la plage comprise dans 192.168.0.0/24 à 192.168.0.0/30

Attributs d'action

Le tableau suivant décrit les attributs d'action disponibles pour les règles de routage BGP :

Attribut

Description

Restrictions

asPath

Liste des numéros AS par lesquels la mise à jour de la route BGP est passée

Exporter et importer

communities

Liste des communautés de l'itinéraire

Exporter uniquement

med

Le discriminateur de sortie multichemin (MED) de la route

Exporter et importer

Opérations d'action

Le tableau suivant décrit les opérations d'action disponibles pour les règles de routage BGP :

Opération

Description

Restrictions

accept()

Accepte la route BGP et arrête toute évaluation supplémentaire des règles ou conditions de routage BGP, y compris les actions ultérieures.

Aucune

drop()

Filtre la route BGP et arrête toute évaluation supplémentaire des règles ou conditions BGP, y compris les actions ultérieures.

Aucune

nextPolicy()

Arrête l'exécution des conditions restantes dans cette règle de routage BGP (y compris toute action ultérieure à cette condition), et passe à la prochaine règle de routage BGP appliquée (le cas échéant).

Aucune

asPath.prependSequence([1, 2, 3])

Ajoute une liste de numéros de SA en préfixe à l'attribut AS-PATH, sous forme de séquence.

Les arguments doivent être des entiers compris dans la plage de 32 bits.

Aucune

communities.add('65001:1234')

Ajoute la valeur de la communauté à la liste des communautés.

La valeur de la communauté peut être une communauté unique ou une liste.

Toutes les valeurs de communauté qui sont des communautés privées mappées sur les numéros ASN appartenant à Google suivants sont ignorées par Cloud Router:

6432, 15169, 16550, 16591, 19448, 19527, 22859, 26910, 32381, 36039, 36384, 36385, 36492, 55023

Exporter uniquement

communities.remove('65001:1234')

Supprime la valeur de la communauté de la liste des communautés.

La valeur de la communauté peut être une communauté unique ou une liste.

Toutes les valeurs de communauté qui sont des communautés privées mappées sur les numéros ASN appartenant à Google suivants sont ignorées par Cloud Router:

6432, 15169, 16550, 16591, 19448, 19527, 22859, 26910, 32381, 36039, 36384, 36385, 36492, 55023

Exporter uniquement

communities.replaceAll(['65001:1234'])

Remplace la liste des communautés par la valeur de la communauté, qui peut être vide.

Toutes les valeurs de communauté qui sont des communautés privées mappées sur les numéros ASN appartenant à Google suivants sont ignorées par Cloud Router:

6432, 15169, 16550, 16591, 19448, 19527, 22859, 26910, 32381, 36039, 36384, 36385, 36492, 55023

Exporter uniquement

med.set(12345)

Définit MED sur 12345.

Aucun