-
-
Save welterde/524cc9b37a618e29093d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function update_latency(int link_latency) { | |
bgp_community.add((64511, link_latency)); | |
if (64511, 9) ~ bgp_community then { bgp_community.delete([(64511, 1..8)]); return 9; } | |
else if (64511, 8) ~ bgp_community then { bgp_community.delete([(64511, 1..7)]); return 8; } | |
else if (64511, 7) ~ bgp_community then { bgp_community.delete([(64511, 1..6)]); return 7; } | |
else if (64511, 6) ~ bgp_community then { bgp_community.delete([(64511, 1..5)]); return 6; } | |
else if (64511, 5) ~ bgp_community then { bgp_community.delete([(64511, 1..4)]); return 5; } | |
else if (64511, 4) ~ bgp_community then { bgp_community.delete([(64511, 1..3)]); return 4; } | |
else if (64511, 3) ~ bgp_community then { bgp_community.delete([(64511, 1..2)]); return 3; } | |
else if (64511, 2) ~ bgp_community then { bgp_community.delete([(64511, 1..1)]); return 2; } | |
else return 1; | |
} | |
function update_bandwidth(int link_bandwidth) { | |
bgp_community.add((64511, link_bandwidth)); | |
if (64511, 21) ~ bgp_community then { bgp_community.delete([(64511, 22..29)]); return 21; } | |
else if (64511, 22) ~ bgp_community then { bgp_community.delete([(64511, 23..29)]); return 22; } | |
else if (64511, 23) ~ bgp_community then { bgp_community.delete([(64511, 24..29)]); return 23; } | |
else if (64511, 24) ~ bgp_community then { bgp_community.delete([(64511, 25..29)]); return 24; } | |
else if (64511, 25) ~ bgp_community then { bgp_community.delete([(64511, 26..29)]); return 25; } | |
else if (64511, 26) ~ bgp_community then { bgp_community.delete([(64511, 27..29)]); return 26; } | |
else if (64511, 27) ~ bgp_community then { bgp_community.delete([(64511, 28..29)]); return 27; } | |
else if (64511, 28) ~ bgp_community then { bgp_community.delete([(64511, 29..29)]); return 28; } | |
else return 29; | |
} | |
function update_crypto(int link_crypto) { | |
bgp_community.add((64511, link_crypto)); | |
if (64511, 31) ~ bgp_community then { bgp_community.delete([(64511, 32..34)]); return 31; } | |
else if (64511, 32) ~ bgp_community then { bgp_community.delete([(64511, 33..34)]); return 32; } | |
else if (64511, 33) ~ bgp_community then { bgp_community.delete([(64511, 34..34)]); return 33; } | |
else return 34; | |
} | |
function update_flags(int link_latency; int link_bandwidth; int link_crypto) | |
int latency; | |
int bandwidth; | |
int crypto; | |
{ | |
latency = update_latency(link_latency); | |
bandwidth = update_bandwidth(link_bandwidth) - 20; | |
crypto = update_crypto(link_crypto) - 30; | |
if bandwidth > 4 then bandwidth = 4; | |
bgp_local_pref = 1000*bandwidth - 10*latency; | |
if crypto < 2 then bgp_local_pref = 0; | |
return true; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(64511, 1) :: latency \in [0, 2.7ms] | |
(64511, 2) :: latency \in [2.7ms, 7.3ms] | |
(64511, 3) :: latency \in [7.3ms, 20ms] | |
(64511, x) :: latency \in [exp(x-1), exp(x)] ms (for x < 10) | |
(64511, 21) :: bw >= 0.1mbit | |
(64511, 22) :: bw >= 1mbit | |
(64511, 23) :: bw >= 10mbit | |
(64511, 24) :: bw >= 100mbit | |
(64511, 25) :: bw >= 1000mbit | |
(64511, 2x) :: bw >= 10^(x-2) mbit | |
bw = min(up,down) for asymmetric connections | |
(64511, 31) :: not encrypted | |
(64511, 32) :: encrypted with unsafe vpn solution | |
(64511, 33) :: encrypted with safe vpn solution (but no PFS) | |
(64511, 34) :: encrypted with safe vpn solution with PFS | |
Propagation: | |
- for latency pick max(received_route.latency, link_latency) | |
- for encryption and bw pick min between received BGP community and peer link |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
improve the print message by printing also the func param (from):