bgp-filters.conf 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # Gitoyen <contact@gitoyen.net>
  2. #
  3. # vim: set ts=4:sw=4
  4. # fonction d'import BGP
  5. # AS: numero d'AS du partenaire
  6. # import_type: transit|peering|member|core
  7. # transit: transitaire
  8. # peering: session de peering sur un IX (incluant les RS)
  9. # member: membre de Gitoyen beneficiant du completement du reseau
  10. # core: session iBGP du backbone
  11. # community: numero de communaute a utiliser pour tagguer, si =0 alors pas de tag.
  12. function bgp_import( int AS; string import_type; int community)
  13. {
  14. if ! (import_type = "transit" || import_type="peering" || import_type="member" || import_type="core") then {
  15. print "bgp_import: parametre import_type invalide";
  16. return false;
  17. }
  18. if community > 65535 then {
  19. print "bgp_import: wrong community number";
  20. return false;
  21. }
  22. # On n'accepte pas les routes bizarres
  23. if is_default() || is_martians() || is_rfc1918() then return false;
  24. # On n'accepte pas les routes de Gitoyen
  25. if is_gitoyen() then return false;
  26. # On n'accepte pas les routes dans le reseau de Gitoyen provenant des upstreams
  27. if import_type = "peering" && import_type = "transit" then {
  28. if is_within_gitoyen() then return false;
  29. }
  30. # On n'accepte pas les routes autres que celles definies pour les membres
  31. if import_type = "member" && ! is_net_from_member(AS) then return false;
  32. # Gestion des local pref par defaut
  33. if import_type = "transit" then bgp_local_pref=100;
  34. if import_type = "peering" then bgp_local_pref=1000;
  35. if import_type = "member" then bgp_local_pref=1500;
  36. # Nettoyage des communautes (On ne garde que les communautes que Gitoyen va traiter)
  37. if import_type = "transit" then bgp_community.delete( [(20766,*)] );
  38. if import_type = "peering" then bgp_community.delete( [(20766,*)] );
  39. if import_type = "membre" then bgp_community.filter( [(20766,9999)] );
  40. # Ajout d'une communaute pour identifier la source de la route
  41. if import_type != "core" && community > 0 then bgp_community.add((20766,community));
  42. return true;
  43. }
  44. # fonction d'export BGP
  45. # AS: numero d'AS du partenaire
  46. # export_type: full|default|core|member)
  47. # full: envoi la full-view
  48. # default: envoi uniquement la route par default
  49. # members: envoi les routes des membres uniquements
  50. # core: envoi tout ce qui est connu en bgp
  51. function bgp_export(int AS; string export_type)
  52. pair set members_export_communities;
  53. pair set full_export_communities;
  54. {
  55. if ! (export_type = "full" || export_type="default" || export_type="core" || export_type="members") then {
  56. print "bgp_export: parametre export_type invalide";
  57. return false;
  58. }
  59. # On n'exporte pas les routes bizarres
  60. if is_martians() || is_rfc1918() then return false;
  61. # On n'exporte pas la route par default sauf si demandee
  62. if is_default() && ! (export_type="default") then return false;
  63. # Filtrage des exports des routes des membres
  64. members_export_communities = [
  65. (20766,1),
  66. (20766,9999),
  67. (20766,40000..49999),
  68. (20766,50000..59999)
  69. ];
  70. if export_type = "members"
  71. && filter(bgp_community, members_export_communities).len = 0 then return false;
  72. # Filtrage des exports de la full view
  73. full_export_communities = [
  74. (20766,1),
  75. (20766,9999),
  76. (20766,10000..19999),
  77. (20766,20000..29999),
  78. (20766,30000..39999),
  79. (20766,40000..49999),
  80. (20766,50000..59999)
  81. ];
  82. if export_type = "full"
  83. && filter(bgp_community, full_export_communities).len = 0 then return false;
  84. # Filtrage pour la route par defaut
  85. if export_type = "default"
  86. && ! is_default() then return false;
  87. # Filtrage des exports pour le backbone
  88. if export_type = "core"
  89. && source != RTS_BGP then return false;
  90. # Gestion du blackhole
  91. case AS {
  92. # Absolight
  93. 29608: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((29608,65001));
  94. # Tata
  95. 6453: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((64999,0));
  96. # Ielo
  97. 29075: if filter(bgp_community, [ (20766,9999) ]).len > 0 then bgp_community.add ((29075,0));
  98. }
  99. return true;
  100. }