| Propriété | Comportement AIGP |
|---|---|
| Optional | Routeurs ne supportant pas AIGP l'ignorent sans erreur |
| Non-Transitive | Supprimé par défaut aux frontières eBGP (sauf config explicite) |
| Supporté non configuré | Reçu et stocké mais pas utilisé pour la sélection |
| Envoi vers eBGP | Désactivé par défaut — nécessite neighbor X aigp |
| Envoi vers iBGP | Activé quand AIGP est configuré sur le processus BGP |
AS 65001 (SP-A) AS 65002 (SP-B) ┌────────────────────────┐ ┌────────────────────────┐ │ PE1 ── P1 ── ASBR-A │─eBGP ──►│ ASBR-B ── P2 ── PE2 │ │ AIGP=0 AIGP=20 │ │ AIGP=20 AIGP=50 │ └────────────────────────┘ └────────────────────────┘ Option C : ASBR-A envoie AIGP=20 vers ASBR-B (avec neighbor aigp) ASBR-B ajoute son IGP cost (+30) → PE2 voit AIGP=50 PE2 peut comparer les chemins bout-en-bout via AIGP
neighbor X.X.X.X aigp. Sans cette commande, AIGP est supprimé aux frontières AS (comportement Non-Transitive par défaut).
Architecture Seamless MPLS
Dans un réseau SP avec plusieurs niveaux de BGP (access, aggregation, core), AIGP permet de propager le coût IGP cumulé à travers tous les niveaux de hiérarchie BGP, sans que chaque niveau ait à redistribuer ses routes IGP dans le niveau supérieur.
BGP-LU (Labeled Unicast)
AIGP est particulièrement utile avec BGP Labeled Unicast (RFC 3107). Les routes de loopback PE sont annoncées avec des labels et un AIGP, permettant la sélection du meilleur chemin bout-en-bout dans les réseaux MPLS hiérarchiques.
Route Reflector hiérarchique
Dans une topologie RR à plusieurs niveaux, AIGP est propagé entre RR clients et RR supérieurs. Chaque niveau de RR préserve et transmet l'attribut AIGP, permettant une sélection optimale bout-en-bout.
| Use Case | Problème résolu | Condition requise |
|---|---|---|
| BGP-free core | Coût IGP non visible à travers les P routers | AIGP activé sur PE iBGP peers |
| Inter-AS Option B | Coût total inconnu entre ASes | neighbor asbr aigp des deux côtés |
| Inter-AS Option C | Même problème, sur plusieurs AS | AIGP propagé end-to-end sur tous les peerings |
| Seamless MPLS | Hiérarchie BGP sans redistribution IGP | AIGP sur toute la hiérarchie RR |
| BGP-LU multipath | Choix du meilleur label path | AIGP + maximum-paths |
L'attribut AIGP est encodé sous forme de TLV (Type-Length-Value). Un seul type de TLV est défini : AIGP TLV type 1.
| Étape | Action | Valeur AIGP résultante |
|---|---|---|
| ① Origine (PE1 injecte la route) | Pas d'AIGP reçu → initialise AIGP = IGP cost vers NH (ou 0 si NH = 0.0.0.0) | AIGP = 0 (loopback locale) |
| ② PE1 → PE3 (iBGP, via MPLS core) | PE3 reçoit AIGP=0, ajoute son IGP cost vers NH (PE1 loopback) = 30 | AIGP = 0 + 30 = 30 |
| ③ PE3 re-annonce vers un RR | RR reçoit AIGP=30, ajoute son IGP cost vers PE3 loopback = 5 | AIGP = 30 + 5 = 35 |
| ④ RR reflète vers PE5 | PE5 reçoit AIGP=35, compare avec autre chemin AIGP=60 → choisit AIGP=35 | AIGP = 35 → best path #9 |
| Situation | Comportement |
|---|---|
| Route reçue sans AIGP, AIGP activé | Le routeur crée un AIGP = IGP metric vers NH |
| Route reçue avec AIGP, AIGP activé | Le routeur ajoute IGP metric vers NH à la valeur reçue |
| Route locale (NH=0.0.0.0) | AIGP = 0 (pas de coût IGP) |
Envoi vers eBGP peer sans neighbor aigp | AIGP supprimé (Non-Transitive) |
Envoi vers eBGP peer avec neighbor aigp | AIGP propagé (comportement explicite) |
| Routeur ne comprend pas AIGP (type 26 inconnu) | Attribut ignoré silencieusement (Optional) |
! Topologie : PE1 et PE2 sont peers iBGP, cœur MPLS BGP-free ! Activer AIGP sur les peers iBGP PE-to-PE router bgp 65001 neighbor 2.2.2.2 remote-as 65001 neighbor 2.2.2.2 aigp ! Activer AIGP pour ce peer iBGP neighbor 2.2.2.2 update-source Loopback0 neighbor 3.3.3.3 remote-as 65001 neighbor 3.3.3.3 aigp neighbor 3.3.3.3 update-source Loopback0 ! Optionnel : envoyer AIGP vers un peer eBGP (Inter-AS) neighbor 10.0.0.1 remote-as 65002 neighbor 10.0.0.1 aigp ! Propager AIGP vers AS voisin (Inter-AS MPLS)
! Ignorer AIGP dans la sélection du best path (critère #9 sauté) router bgp 65001 bgp bestpath aigp ignore ! L'attribut AIGP est toujours reçu et stocké, mais pas utilisé ! pour comparer les chemins. La sélection passe directement au critère #10.
! Forcer une valeur AIGP spécifique à l'injection d'une route route-map RM-SET-AIGP permit 10 set aigp-metric 100 ! Forcer AIGP=100 pour cette route router bgp 65001 network 172.16.0.0 mask 255.255.0.0 route-map RM-SET-AIGP ! Modifier AIGP sur une route reçue (inbound) route-map RM-AIGP-IN permit 10 set aigp-metric igp-metric ! Utiliser la métrique IGP locale (défaut) route-map RM-AIGP-IN permit 20 set aigp-metric 200 ! Valeur fixe pour les autres routes
! Voir l'attribut AIGP dans la table BGP PE1# show ip bgp 172.16.0.0/16 BGP routing table entry for 172.16.0.0/16 Paths: (2 available, best #1) 65100 2.2.2.2 (metric 30) from 2.2.2.2 (2.2.2.2) Origin IGP, metric 0, localpref 100, valid, internal, best AIGP: 30 ← valeur AIGP affichée 65100 3.3.3.3 (metric 60) from 3.3.3.3 (3.3.3.3) Origin IGP, metric 0, localpref 100, valid, internal AIGP: 60 ← AIGP plus élevé = perd en critère #9 ! Voir les détails AIGP PE1# show ip bgp 172.16.0.0/16 detail ! Vérifier la configuration AIGP par neighbor PE1# show bgp neighbors 2.2.2.2 | include AIGP AIGP is enabled
AS 65001 — BGP-free core MPLS ┌──────────────────────────────────────────────────────────────┐ │ │ │ PE1 ───(cost 10)─── P1 ───(cost 10)─── P2 ─(cost 10)─ PE3 │ │ Lo: 1.1.1.1 Lo: 3.3.3.3 │ │ AIGP=0 AIGP=30 │ │ │ │ │ │ └──────────(cost 50)─── P3 ──(cost 10)── PE4 │ │ │ Lo: 4.4.4.4 │ │ │ AIGP=60 │ │ │ │ │ │ PE1 reçoit via iBGP : │ │ │ - Route 172.16.0.0/16 depuis PE3 : AIGP=30 │ │ │ - Route 172.16.0.0/16 depuis PE4 : AIGP=60 │ │ └──────────────────────────────────────────────────────────────┘
PE1# show ip bgp 172.16.0.0/16 BGP routing table entry for 172.16.0.0/16, version 12 Paths: (2 available, best #1, table Default-IP-Routing-Table) Advertised to update-groups: 1 65100 3.3.3.3 (metric 30) from 3.3.3.3 (3.3.3.3) ← via PE3 Origin IGP, metric 0, localpref 100, valid, internal, best AIGP: 30 ← AIGP=30 → critère #9 : 30 < 60 → best ✅ 65100 4.4.4.4 (metric 60) from 4.4.4.4 (4.4.4.4) ← via PE4 Origin IGP, metric 0, localpref 100, valid, internal AIGP: 60 ← AIGP=60 → critère #9 : 60 > 30 → perd ❌
| Critère | Via PE3 | Via PE4 | Résultat |
|---|---|---|---|
| #1 Weight | 0 | 0 | Égal — suivant |
| #2 LOCAL_PREF | 100 | 100 | Égal — suivant |
| #3 NH=0.0.0.0 | Non | Non | Égal — suivant |
| #4 AS-PATH | 1 hop | 1 hop | Égal — suivant |
| #5 Origin | IGP (i) | IGP (i) | Égal — suivant |
| #6 MED | 0 | 0 | Égal — suivant |
| #7 eBGP/iBGP | internal | internal | Égal — suivant |
| #8 IGP metric | 30 (vers 3.3.3.3) | 60 (vers 4.4.4.4) | ⚠️ Différent mais… |
| Si bgp bestpath igp-metric ignore est configuré → critère #8 sauté → on arrive au critère #9 | |||
| #9 AIGP | 30 | 60 | ✅ PE3 gagne (30 < 60) |
bgp bestpath igp-metric ignore est configuré, ou quand les métriques IGP sont identiques mais les AIGP accumulés différents.
⚡ AIGP supprimé aux frontières eBGP sans config
Par défaut, AIGP est Optional Non-Transitive : il est supprimé quand la route traverse une frontière eBGP. Pour propager AIGP vers un AS voisin (Inter-AS MPLS), il faut configurer neighbor X.X.X.X aigp explicitement des deux côtés.
⚡ Confusion critère #8 et critère #9
Le critère #8 mesure le coût IGP local vers le NEXT_HOP (un seul saut). Le critère #9 mesure le coût total accumulé sur tout le chemin BGP. En pratique, si le critère #8 fait déjà la différence, le critère #9 n'est jamais atteint — sauf si igp-metric ignore est configuré.
⚡ AIGP ignoré si peer ne supporte pas type 26
Un routeur ne reconnaissant pas l'attribut de type 26 l'ignore silencieusement (comportement Optional). La route est quand même acceptée, mais AIGP est perdu. En topologie mixte (anciens IOS), vérifier la compatibilité avant de déployer AIGP.
⚡ Valeur AIGP non initialisée = 0 par défaut
Si une route est injectée sans AIGP et que le routeur a AIGP activé, il crée un AIGP avec la valeur IGP locale vers le NH. Si le NH est local (loopback, réseau directement connecté), AIGP est initialisé à 0. Ne pas confondre AIGP=0 avec "AIGP absent".
⚡ bgp bestpath aigp ignore sans raison
Désactiver le critère #9 avec bgp bestpath aigp ignore dans un réseau BGP-free core supprime l'intérêt principal d'AIGP. Cette commande ne doit être utilisée que dans des cas spécifiques où le coût AIGP n'est pas représentatif (ex: migration, dépannage).
⚡ Boucle de comptage AIGP en Inter-AS
Dans une topologie Inter-AS en anneau, si AIGP est mal configuré (propagé des deux côtés sans contrôle), la valeur AIGP peut s'incrémenter indéfiniment à chaque cycle. Utiliser des route-maps pour limiter l'envoi AIGP aux seuls peers légitimes.
✅ Bonne pratique — AIGP + igp-metric ignore
En BGP-free core, combiner neighbor X aigp + bgp bestpath igp-metric ignore : on ignore la métrique IGP locale (critère #8, souvent 0 car PE peer via loopback MPLS) et on laisse AIGP (critère #9) faire la sélection sur le coût total réel du chemin.
✅ Bonne pratique — Vérifier AIGP dans show ip bgp detail
Toujours vérifier la présence et la valeur AIGP avec show ip bgp X detail après activation. L'absence d'AIGP sur certains chemins (affichage sans la ligne "AIGP:") indique que le peer source ne l'a pas envoyé, ou qu'il a été supprimé en transit.
Cliquez sur une carte pour révéler la réponse.
neighbor X.X.X.X aigp. Sans cette commande, le peer eBGP reçoit la route sans l'attribut AIGP.
neighbor X.X.X.X aigp dans le processus BGP. Cette commande active à la fois l'envoi et la réception d'AIGP pour ce peer. Pour désactiver le critère #9 dans la sélection : bgp bestpath aigp ignore.
bgp bestpath igp-metric ignore est configuré), alors le critère #9 (AIGP) est comparé. AIGP ne peut jamais "court-circuiter" IGP metric.
show ip bgp X.X.X.X/Y affiche la ligne AIGP: <valeur> pour chaque chemin si l'attribut est présent. Utiliser show ip bgp X detail pour plus d'informations. L'absence de la ligne "AIGP:" signifie que l'attribut n'a pas été reçu.