Skip to content

Commit

Permalink
bgpd: Include capabilities when sending NOTIFICATION(7)
Browse files Browse the repository at this point in the history
RFC5492 says:

This document defines a new Error Subcode, Unsupported Capability.
   The value of this Subcode is 7.  The Data field in the NOTIFICATION
   message MUST list the set of capabilities that causes the speaker to
   send the message.  Each such capability is encoded in the same way as
   it would be encoded in the OPEN message.

Signed-off-by: Donatas Abraitis <[email protected]>
  • Loading branch information
ton31337 committed Apr 18, 2024
1 parent 8e7fb95 commit 79cf651
Showing 1 changed file with 9 additions and 21 deletions.
30 changes: 9 additions & 21 deletions bgpd/bgp_open.c
Original file line number Diff line number Diff line change
Expand Up @@ -1452,23 +1452,17 @@ int bgp_open_option_parse(struct peer *peer, uint16_t length,
/* All OPEN option is parsed. Check capability when strict compare
flag is enabled.*/
if (CHECK_FLAG(peer->flags, PEER_FLAG_STRICT_CAP_MATCH)) {
/* If Unsupported Capability exists. */
if (error != error_data) {
/* If Unsupported Capability exists or local capability does
* not negotiated with remote peer
*/
if (error != error_data || !strict_capability_same(peer)) {
bgp_notify_send_with_data(peer->connection,
BGP_NOTIFY_OPEN_ERR,
BGP_NOTIFY_OPEN_UNSUP_CAPBL,
error_data,
error - error_data);
return -1;
}

/* Check local capability does not negotiated with remote
peer. */
if (!strict_capability_same(peer)) {
bgp_notify_send(peer->connection, BGP_NOTIFY_OPEN_ERR,
BGP_NOTIFY_OPEN_UNSUP_CAPBL);
return -1;
}
}

/* Extended Message Support */
Expand Down Expand Up @@ -1503,17 +1497,11 @@ int bgp_open_option_parse(struct peer *peer, uint16_t length,
"%s [Error] Configured AFI/SAFIs do not overlap with received MP capabilities",
peer->host);

if (error != error_data)
bgp_notify_send_with_data(peer->connection,
BGP_NOTIFY_OPEN_ERR,
BGP_NOTIFY_OPEN_UNSUP_CAPBL,
error_data,
error - error_data);
else
bgp_notify_send(peer->connection,
BGP_NOTIFY_OPEN_ERR,
BGP_NOTIFY_OPEN_UNSUP_CAPBL);
return -1;
bgp_notify_send_with_data(peer->connection,
BGP_NOTIFY_OPEN_ERR,
BGP_NOTIFY_OPEN_UNSUP_CAPBL,
error_data,
error - error_data);
}
}
return 0;
Expand Down

0 comments on commit 79cf651

Please sign in to comment.