Commit 28709878b6a7d15362ba63bde01d42c38f88be9d
Committed by
Antonio Quartulli
1 parent
d807f27287
batman-adv: wait multiple periods before activating bla
For some reasons (bridge forward delay, network device setup order, etc) the initial bridge loop avoidance announcement packets may be lost. This may lead to problems in finding other backbone gws, and therfore create loops in the startup time. Fix this by extending the waiting periods to 3 (define can be changed) before allowing broadcast traffic. Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Showing 3 changed files with 10 additions and 1 deletions Side-by-side Diff
net/batman-adv/bridge_loop_avoidance.c
... | ... | @@ -378,6 +378,7 @@ |
378 | 378 | entry->crc = BATADV_BLA_CRC_INIT; |
379 | 379 | entry->bat_priv = bat_priv; |
380 | 380 | atomic_set(&entry->request_sent, 0); |
381 | + atomic_set(&entry->wait_periods, 0); | |
381 | 382 | memcpy(entry->orig, orig, ETH_ALEN); |
382 | 383 | |
383 | 384 | /* one for the hash, one for returning */ |
... | ... | @@ -407,6 +408,7 @@ |
407 | 408 | |
408 | 409 | /* this will be decreased in the worker thread */ |
409 | 410 | atomic_inc(&entry->request_sent); |
411 | + atomic_set(&entry->wait_periods, BATADV_BLA_WAIT_PERIODS); | |
410 | 412 | atomic_inc(&bat_priv->bla.num_requests); |
411 | 413 | } |
412 | 414 | |
413 | 415 | |
... | ... | @@ -1148,10 +1150,15 @@ |
1148 | 1150 | * problems when we are not yet known as backbone gw |
1149 | 1151 | * in the backbone. |
1150 | 1152 | * |
1151 | - * We can reset this now and allow traffic again. | |
1153 | + * We can reset this now after we waited some periods | |
1154 | + * to give bridge forward delays and bla group forming | |
1155 | + * some grace time. | |
1152 | 1156 | */ |
1153 | 1157 | |
1154 | 1158 | if (atomic_read(&backbone_gw->request_sent) == 0) |
1159 | + continue; | |
1160 | + | |
1161 | + if (!atomic_dec_and_test(&backbone_gw->wait_periods)) | |
1155 | 1162 | continue; |
1156 | 1163 | |
1157 | 1164 | atomic_dec(&backbone_gw->bat_priv->bla.num_requests); |
net/batman-adv/main.h
... | ... | @@ -95,6 +95,7 @@ |
95 | 95 | #define BATADV_BLA_PERIOD_LENGTH 10000 /* 10 seconds */ |
96 | 96 | #define BATADV_BLA_BACKBONE_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 3) |
97 | 97 | #define BATADV_BLA_CLAIM_TIMEOUT (BATADV_BLA_PERIOD_LENGTH * 10) |
98 | +#define BATADV_BLA_WAIT_PERIODS 3 | |
98 | 99 | |
99 | 100 | #define BATADV_DUPLIST_SIZE 16 |
100 | 101 | #define BATADV_DUPLIST_TIMEOUT 500 /* 500 ms */ |
net/batman-adv/types.h