summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorF. Aragon <paco@voltanet.io>2019-04-10 19:08:50 +0200
committerF. Aragon <paco@voltanet.io>2019-04-10 19:20:01 +0200
commit9012df1ada5e85e165da0d079b18a7b6f9033cd4 (patch)
tree271a9de510a41697c94e418e18f68da6f521762d
parent674ab30a5ddda85d77839686ea4cb419256dc234 (diff)
zebra: pseudowire event recovery (DoS fix)
When having a route recovery, because of the route installation cycling and the next hop label check, it could happen that the PW never gets recovered. The original code shows the intention of retrying, but the code was missing. The fix includes the call to the timer programming the recovery attempt. Example for reproducing the issue: |P1| <-> |P2| <-> |P3| - Being P1, P2, P3 nodes, using IS-IS as IGP, and having a pseudowire betwen P1 and P3 (P1, P2, P3 having configured LDP daemons). - After 60 seconds, kill the IS-IS daemon in P2. - Wait 30 seconds - Launch again the IS-IS daemon in P2 - The bug/issue is that after P1 <-> P3 recovering connectivity sometimes the PW is not recovered because the reason explained in the first paragraph. Signed-off-by: F. Aragon <paco@voltanet.io>
-rw-r--r--zebra/zebra_pw.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/zebra/zebra_pw.c b/zebra/zebra_pw.c
index c6db1463f2..24ffa162a6 100644
--- a/zebra/zebra_pw.c
+++ b/zebra/zebra_pw.c
@@ -154,6 +154,7 @@ void zebra_pw_update(struct zebra_pw *pw)
{
if (zebra_pw_check_reachability(pw) < 0) {
zebra_pw_uninstall(pw);
+ zebra_pw_install_failure(pw);
/* wait for NHT and try again later */
} else {
/*