https://tools.ietf.org/html/draft-ietf-grow-bgp-gshut-06 (gshut for short) introduces a well-known BGP community 65535:0 to signal to an adjacent network that the path will disappear due to upcoming maintenance, and as such they should hunt for other paths.
Implementing the receiving side is straight forward:
function allow_graceful_shutdown() {
if (65535, 0) ~ bgp_community then {
bgp_local_pref = 0;
}
}
And then just add the appropriate allow_graceful_shutdown(); calls to the filters. I think this can be enabled by default.
This way route server participants can use the graceful shutdown mechanism to signal to the route server that soon the path through them will be unavailable and the route server should select another path (if there is any).
Implementing the sending side
A graceful shutdown of the route server itself would look as following:
attach the 65535:0 BGP community to all route announcements towards all clients
wait a number of minutes to allow time for a) bird to load the config, and b) re-announce all routes to all participants with the added community, and c) allow the clients to reconverge. (say, 10 minutes)
actually shut down the bird daemons
Perhaps a wrapper script would easiest to do the three steps described above.
Intro
https://tools.ietf.org/html/draft-ietf-grow-bgp-gshut-06 (
gshut
for short) introduces a well-known BGP community65535:0
to signal to an adjacent network that the path will disappear due to upcoming maintenance, and as such they should hunt for other paths.Implementing the receiving side is straight forward:
And then just add the appropriate
allow_graceful_shutdown();
calls to the filters. I think this can be enabled by default.This way route server participants can use the graceful shutdown mechanism to signal to the route server that soon the path through them will be unavailable and the route server should select another path (if there is any).
Implementing the sending side
A graceful shutdown of the route server itself would look as following:
65535:0
BGP community to all route announcements towards all clientsPerhaps a wrapper script would easiest to do the three steps described above.