El protocol Pipe serveix com un enlaç entre dos taules d'encaminament, permetent que les rutes siguin passades des d'una taula declarada com a primaria (p.e., la primera ñes connectada per utilitzar la paraula clau table) a una de secundaria (declarada utilitzant peer table i viceversa, depenent on estan situats els filtres. Els filtres d'exportació controlen les exportacions de les rutes des de la taula primaria a la secundaria, els filtres d'importació controla les de la direcció oposada.
La primaria utilitza multiples taules d'encaminament i el protocol Pipe ñes la política d'encaminament, on la manipulació d'un únic paquet no depen únicament de la seva adreça de destí, però també en la seva adreça d'origen, interfície d'origen, tipus de protocol i altres paràmetres similars. En molts sistemes (Linux 2.2 seria un bon exemple), el kernel permet reforçar polítiques d'encaminament per definit polítiques d'encaminament que escolleixen un de les diferents taules d'encaminament per ser utilitzades per un paquest d'acord amb aquests paràmetres. La composició d'aquestes regles estan fora de l'abast del treball de BIRD (a Linux, pots utilitzar la comanda ip), però pots crear diferents taules d'encaminament a BIRD, connectar-les a les de kernel, utilitzar filtres per controlar quines rutes apareixen en quines taules i també pots utilitzar el protocol Pipe per exportar un subconjunt sel·leccionat d'una taula a una altra.
peer table table
Defineix la taula d'encaminament secundaria a la que es connecta. La primera és sel·leccionada per la paraula clau
table.
El protocol Pipe no defineix atributs de ruta.
Es considera un encaminador que serveix com un encaminador d'extrem de dos sistèmes autònoms diferents, cada un d'ells connectats a un subconjunt d'interfícies de l'encaminador, tenint la seva pròpia connectivitat exterior i desitjos per utilitzar les altres AS com a backup de connectivitat en cas d'interrupció de la seva pròpia linia exterior.
Probablement la solució més simple a aquesta situació és utilitzar dos taules d'encaminament (les em anomenat as1 i as2) i col·locar regles d'encaminament del kernel, així que els paquets que arriven des de interfícies pel primer AS seran encaminats d'acord a as1 i de forma semblant per la segona AS. Així, hem dividit el nostre encaminador en dos encaminadors lògics, cada un actuant en la seva pròpia taula d'encaminament, teint els seus pròpis protocols d'encaminament en les seves pròpies interfícies. Per aconseguir poder utilitzar les rutes de l'altre AS per propòsits de backup, nosaltres podem passar les rutes entre les taules a través d'un protocol Pipe mentre decreixen les seves preferències i corregint els seus camins BGP per reflectir l'encreuament de l'AS extrem.
table as1; # Define the tables
table as2;
protocol kernel kern1 { # Synchronize them with the kernel
table as1;
kernel table 1;
}
protocol kernel kern2 {
table as2;
kernel table 2;
}
protocol bgp bgp1 { # The outside connections
table as1;
local as 1;
neighbor 192.168.0.1 as 1001;
export all;
import all;
}
protocol bgp bgp2 {
table as2;
local as 2;
neighbor 10.0.0.1 as 1002;
export all;
import all;
}
protocol pipe { # The Pipe
table as1;
peer table as2;
export filter {
if net ~ [ 1.0.0.0/8+] then { # Only AS1 networks
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(1);
accept;
}
reject;
};
import filter {
if net ~ [ 2.0.0.0/8+] then { # Only AS2 networks
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(2);
accept;
}
reject;
};
}