mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 15:33:56 +00:00
bgpd: Ignore validating the attribute flags if path-attribute is configured
E.g. Cisco sends AIGP attribute as transitive, but it's wrong. Hence, the session is teared down, because of this bgp_attr_flag_invalid() test. Relax this check if we have `neighbor X path-attribute <discard|treat-as-withdraw>` configured. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
48f5d828e3
commit
714e5be9a0
@ -1526,6 +1526,7 @@ static bool bgp_attr_flag_invalid(struct bgp_attr_parser_args *args)
|
|||||||
uint8_t mask = BGP_ATTR_FLAG_EXTLEN;
|
uint8_t mask = BGP_ATTR_FLAG_EXTLEN;
|
||||||
const uint8_t flags = args->flags;
|
const uint8_t flags = args->flags;
|
||||||
const uint8_t attr_code = args->type;
|
const uint8_t attr_code = args->type;
|
||||||
|
struct peer *peer = args->peer;
|
||||||
|
|
||||||
/* there may be attributes we don't know about */
|
/* there may be attributes we don't know about */
|
||||||
if (attr_code > attr_flags_values_max)
|
if (attr_code > attr_flags_values_max)
|
||||||
@ -1533,6 +1534,14 @@ static bool bgp_attr_flag_invalid(struct bgp_attr_parser_args *args)
|
|||||||
if (attr_flags_values[attr_code] == 0)
|
if (attr_flags_values[attr_code] == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* If `neighbor X path-attribute <discard|treat-as-withdraw>` is
|
||||||
|
* configured, then ignore checking optional, trasitive flags.
|
||||||
|
* The attribute/route will be discarded/withdrawned later instead
|
||||||
|
* of dropping the session.
|
||||||
|
*/
|
||||||
|
if (peer->discard_attrs[attr_code] || peer->withdraw_attrs[attr_code])
|
||||||
|
return false;
|
||||||
|
|
||||||
/* RFC4271, "For well-known attributes, the Transitive bit MUST be set
|
/* RFC4271, "For well-known attributes, the Transitive bit MUST be set
|
||||||
* to
|
* to
|
||||||
* 1."
|
* 1."
|
||||||
|
Loading…
Reference in New Issue
Block a user