Commit 93c1defd authored by Ondřej Zajíček's avatar Ondřej Zajíček

BGP: Fix parsing of MPLS withdrawals

RFC 3107 was bit vague with regard to labeled withdrawals, RFC 8277
clarified that. The old code was incompatible with some implementations,
namely with Juniper.

Thanks to Vadim Fedorenko for the original patch.
parent daf113ac
......@@ -1165,9 +1165,10 @@ bgp_decode_mpls_labels(struct bgp_parse_state *s, byte **pos, uint *len, uint *p
ADVANCE(*pos, *len, 3);
*pxlen -= 24;
/* Withdraw: Magic label stack value 0x800000 according to RFC 3107, section 3, last paragraph */
if (!a && !s->err_withdraw && (lnum == 1) && (label == BGP_MPLS_MAGIC))
break;
/* RFC 8277 2.4 - withdraw does not have variable-size MPLS stack but
fixed-size 24-bit Compatibility field, which MUST be ignored */
if (!a && !s->err_withdraw)
return;
}
while (!(label & BGP_MPLS_BOS));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment