5adb140efddcfd9750cf5d341c94da5e4dcd8a25
howto/Bird-communities.md
| ... | ... | @@ -43,56 +43,44 @@ For example, if your peer is 12ms away and the link speed between you is 250Mbit |
| 43 | 43 | # This comes from my own experience so let me know if I'm wrong :) -tombii |
| 44 | 44 | protocol bgp tombii from dnpeers { |
| 45 | 45 | neighbor 172.23.102.x as 4242420321; |
| 46 | - import filter { |
|
| 47 | - if is_valid_network() && !is_self_net() then { |
|
| 48 | - update_flags(3,24,33); |
|
| 49 | - accept; |
|
| 50 | - } |
|
| 51 | - reject; |
|
| 52 | - }; |
|
| 53 | - export filter { |
|
| 54 | - if is_valid_network() then { |
|
| 55 | - update_flags(3,24,33); |
|
| 56 | - accept; |
|
| 57 | - } |
|
| 58 | - reject; |
|
| 59 | - }; |
|
| 46 | + import where dn42_import_filter(3,24,33); |
|
| 47 | + export where dn42_export_filter(3,24,33); |
|
| 60 | 48 | }; |
| 61 | 49 | ``` |
| 62 | 50 | ``` |
| 63 | 51 | #/etc/bird/community_filters.conf |
| 64 | 52 | function update_latency(int link_latency) { |
| 65 | - bgp_community.add((64511, link_latency)); |
|
| 66 | - if (64511, 9) ~ bgp_community then { bgp_community.delete([(64511, 1..8)]); return 9; } |
|
| 67 | - else if (64511, 8) ~ bgp_community then { bgp_community.delete([(64511, 1..7)]); return 8; } |
|
| 68 | - else if (64511, 7) ~ bgp_community then { bgp_community.delete([(64511, 1..6)]); return 7; } |
|
| 69 | - else if (64511, 6) ~ bgp_community then { bgp_community.delete([(64511, 1..5)]); return 6; } |
|
| 70 | - else if (64511, 5) ~ bgp_community then { bgp_community.delete([(64511, 1..4)]); return 5; } |
|
| 71 | - else if (64511, 4) ~ bgp_community then { bgp_community.delete([(64511, 1..3)]); return 4; } |
|
| 72 | - else if (64511, 3) ~ bgp_community then { bgp_community.delete([(64511, 1..2)]); return 3; } |
|
| 73 | - else if (64511, 2) ~ bgp_community then { bgp_community.delete([(64511, 1..1)]); return 2; } |
|
| 74 | - else return 1; |
|
| 53 | + bgp_community.add((64511, link_latency)); |
|
| 54 | + if (64511, 9) ~ bgp_community then { bgp_community.delete([(64511, 1..8)]); return 9; } |
|
| 55 | + else if (64511, 8) ~ bgp_community then { bgp_community.delete([(64511, 1..7)]); return 8; } |
|
| 56 | + else if (64511, 7) ~ bgp_community then { bgp_community.delete([(64511, 1..6)]); return 7; } |
|
| 57 | + else if (64511, 6) ~ bgp_community then { bgp_community.delete([(64511, 1..5)]); return 6; } |
|
| 58 | + else if (64511, 5) ~ bgp_community then { bgp_community.delete([(64511, 1..4)]); return 5; } |
|
| 59 | + else if (64511, 4) ~ bgp_community then { bgp_community.delete([(64511, 1..3)]); return 4; } |
|
| 60 | + else if (64511, 3) ~ bgp_community then { bgp_community.delete([(64511, 1..2)]); return 3; } |
|
| 61 | + else if (64511, 2) ~ bgp_community then { bgp_community.delete([(64511, 1..1)]); return 2; } |
|
| 62 | + else return 1; |
|
| 75 | 63 | } |
| 76 | 64 | |
| 77 | 65 | function update_bandwidth(int link_bandwidth) { |
| 78 | - bgp_community.add((64511, link_bandwidth)); |
|
| 79 | - if (64511, 21) ~ bgp_community then { bgp_community.delete([(64511, 22..29)]); return 21; } |
|
| 80 | - else if (64511, 22) ~ bgp_community then { bgp_community.delete([(64511, 23..29)]); return 22; } |
|
| 81 | - else if (64511, 23) ~ bgp_community then { bgp_community.delete([(64511, 24..29)]); return 23; } |
|
| 82 | - else if (64511, 24) ~ bgp_community then { bgp_community.delete([(64511, 25..29)]); return 24; } |
|
| 83 | - else if (64511, 25) ~ bgp_community then { bgp_community.delete([(64511, 26..29)]); return 25; } |
|
| 84 | - else if (64511, 26) ~ bgp_community then { bgp_community.delete([(64511, 27..29)]); return 26; } |
|
| 85 | - else if (64511, 27) ~ bgp_community then { bgp_community.delete([(64511, 28..29)]); return 27; } |
|
| 86 | - else if (64511, 28) ~ bgp_community then { bgp_community.delete([(64511, 29..29)]); return 28; } |
|
| 87 | - else return 29; |
|
| 66 | + bgp_community.add((64511, link_bandwidth)); |
|
| 67 | + if (64511, 21) ~ bgp_community then { bgp_community.delete([(64511, 22..29)]); return 21; } |
|
| 68 | + else if (64511, 22) ~ bgp_community then { bgp_community.delete([(64511, 23..29)]); return 22; } |
|
| 69 | + else if (64511, 23) ~ bgp_community then { bgp_community.delete([(64511, 24..29)]); return 23; } |
|
| 70 | + else if (64511, 24) ~ bgp_community then { bgp_community.delete([(64511, 25..29)]); return 24; } |
|
| 71 | + else if (64511, 25) ~ bgp_community then { bgp_community.delete([(64511, 26..29)]); return 25; } |
|
| 72 | + else if (64511, 26) ~ bgp_community then { bgp_community.delete([(64511, 27..29)]); return 26; } |
|
| 73 | + else if (64511, 27) ~ bgp_community then { bgp_community.delete([(64511, 28..29)]); return 27; } |
|
| 74 | + else if (64511, 28) ~ bgp_community then { bgp_community.delete([(64511, 29..29)]); return 28; } |
|
| 75 | + else return 29; |
|
| 88 | 76 | } |
| 89 | 77 | |
| 90 | 78 | function update_crypto(int link_crypto) { |
| 91 | - bgp_community.add((64511, link_crypto)); |
|
| 92 | - if (64511, 31) ~ bgp_community then { bgp_community.delete([(64511, 32..34)]); return 31; } |
|
| 93 | - else if (64511, 32) ~ bgp_community then { bgp_community.delete([(64511, 33..34)]); return 32; } |
|
| 94 | - else if (64511, 33) ~ bgp_community then { bgp_community.delete([(64511, 34..34)]); return 33; } |
|
| 95 | - else return 34; |
|
| 79 | + bgp_community.add((64511, link_crypto)); |
|
| 80 | + if (64511, 31) ~ bgp_community then { bgp_community.delete([(64511, 32..34)]); return 31; } |
|
| 81 | + else if (64511, 32) ~ bgp_community then { bgp_community.delete([(64511, 33..34)]); return 32; } |
|
| 82 | + else if (64511, 33) ~ bgp_community then { bgp_community.delete([(64511, 34..34)]); return 33; } |
|
| 83 | + else return 34; |
|
| 96 | 84 | } |
| 97 | 85 | |
| 98 | 86 | function update_flags(int link_latency; int link_bandwidth; int link_crypto) |
| ... | ... | @@ -100,15 +88,41 @@ int dn42_latency; |
| 100 | 88 | int dn42_bandwidth; |
| 101 | 89 | int dn42_crypto; |
| 102 | 90 | { |
| 103 | -dn42_latency = update_latency(link_latency); |
|
| 104 | -dn42_bandwidth = update_bandwidth(link_bandwidth) - 20; |
|
| 105 | -dn42_crypto = update_crypto(link_crypto) - 30; |
|
| 106 | -if dn42_bandwidth > 4 then dn42_bandwidth = 4; |
|
| 107 | -return true; |
|
| 108 | -} |
|
| 91 | + dn42_latency = update_latency(link_latency); |
|
| 92 | + dn42_bandwidth = update_bandwidth(link_bandwidth) - 20; |
|
| 93 | + dn42_crypto = update_crypto(link_crypto) - 30; |
|
| 94 | + # replace 4 with your calculated bandwidth value |
|
| 95 | + if dn42_bandwidth > 4 then dn42_bandwidth = 4; |
|
| 96 | + return true; |
|
| 97 | +} |
|
| 98 | + |
|
| 99 | +# Combines filter from local4.conf/local6.conf and filter4.conf/filter6.conf, |
|
| 100 | +# which means, these must included before this file |
|
| 101 | + |
|
| 102 | +function dn42_import_filter(int link_latency; int link_bandwith; int link_crypto) { |
|
| 103 | + if is_valid_network() && !is_self_net() then { |
|
| 104 | + update_flags(link_latency, link_bandwith, link_crypto); |
|
| 105 | + accept; |
|
| 106 | + } |
|
| 107 | + reject; |
|
| 108 | +} |
|
| 109 | + |
|
| 110 | +function dn42_export_filter(int link_latency; int link_bandwith; int link_crypto) { |
|
| 111 | + if is_valid_network() then { |
|
| 112 | + update_flags(link_latency, link_bandwith, link_crypto); |
|
| 113 | + accept; |
|
| 114 | + } |
|
| 115 | + reject; |
|
| 116 | +} |
|
| 117 | + |
|
| 109 | 118 | ``` |
| 110 | 119 | Please remember to include /etc/bird/community_filters.conf in your bird.conf/birdc6.conf |
| 111 | 120 | ``` |
| 121 | + |
|
| 122 | +# local configuration |
|
| 123 | +###################### |
|
| 124 | +include "bird/local4.conf"; |
|
| 125 | + |
|
| 112 | 126 | # filter helpers |
| 113 | 127 | ################# |
| 114 | 128 |