123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # Gitoyen <contact@gitoyen.net>
- #
- # vim: set ts=4:sw=4
- # fonction d'import BGP
- # AS: numero d'AS du partenaire
- # import_type: transit|peering|member|core
- # transit: transitaire
- # peering: session de peering sur un IX (incluant les RS)
- # member: membre de Gitoyen beneficiant du completement du reseau
- # core: session iBGP du backbone
- # community: numero de communaute a utiliser pour tagguer, si =0 alors pas de tag.
- function bgp_import( int AS; string import_type; int community)
- {
- if ! (import_type = "transit" || import_type="peering" || import_type="member" || import_type="core") then {
- print "bgp_import: parametre import_type invalide";
- return false;
- }
- if community > 65535 then {
- print "bgp_import: wrong community number";
- return false;
- }
- # On n'accepte pas les routes bizarres
- if is_default() || is_martians() || is_rfc1918() then return false;
- # On n'accepte pas les routes de Gitoyen
- if is_gitoyen() then return false;
- # On n'accepte pas les routes dans le reseau de Gitoyen provenant des upstreams
- if import_type = "peering" && import_type = "transit" then {
- if is_within_gitoyen() then return false;
- }
-
- # On n'accepte pas les routes autres que celles definies pour les membres
- if import_type = "member" && ! is_net_from_member(AS) then return false;
-
- # Gestion des local pref par defaut
- if import_type = "transit" then bgp_local_pref=100;
- if import_type = "peering" then bgp_local_pref=1000;
- if import_type = "member" then bgp_local_pref=1500;
- # Nettoyage des communautes (On ne garde que les communautes que Gitoyen va traiter)
- if import_type = "transit" then bgp_community.delete( [(20766,*)] );
- if import_type = "peering" then bgp_community.delete( [(20766,*)] );
- if import_type = "membre" then bgp_community.filter( [(20766,9999)] );
- # Ajout d'une communaute pour identifier la source de la route
- if import_type != "core" && community > 0 then bgp_community.add((20766,community));
- return true;
- }
- # fonction d'export BGP
- # AS: numero d'AS du partenaire
- # export_type: full|default|core|member)
- # full: envoi la full-view
- # default: envoi uniquement la route par default
- # members: envoi les routes des membres uniquements
- # core: envoi tout ce qui est connu en bgp
- function bgp_export(int AS; string export_type)
- pair set members_export_communities;
- pair set full_export_communities;
- {
- if ! (export_type = "full" || export_type="default" || export_type="core" || export_type="members") then {
- print "bgp_export: parametre export_type invalide";
- return false;
- }
- # On n'exporte pas les routes bizarres
- if is_martians() || is_rfc1918() then return false;
- # On n'exporte pas la route par default sauf si demandee
- if is_default() && ! (export_type="default") then return false;
- # Filtrage des exports des routes des membres
- members_export_communities = [
- (20766,1),
- (20766,9999),
- (20766,40000..49999),
- (20766,50000..59999)
- ];
- if export_type = "members"
- && filter(bgp_community, members_export_communities).len = 0 then return false;
- # Filtrage des exports de la full view
- full_export_communities = [
- (20766,1),
- (20766,9999),
- (20766,10000..19999),
- (20766,20000..29999),
- (20766,30000..39999),
- (20766,40000..49999),
- (20766,50000..59999)
- ];
- if export_type = "full"
- && filter(bgp_community, full_export_communities).len = 0 then return false;
-
- # Filtrage pour la route par defaut
- if export_type = "default"
- && ! is_default() then return false;
- # Filtrage des exports pour le backbone
- if export_type = "core"
- && source != RTS_BGP then return false;
- # Gestion du blackhole
- case AS {
- # Absolight
- 29608: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((29608,65001));
- # Tata
- 6453: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((64999,0));
- # Ielo
- 29075: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((29075,0));
- }
- return true;
- }
|