mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-09 20:58:44 +00:00
BGP: Handle case where capabilites are not used
If peer does not announce capabilities at all, or when we have capabilities disabled, handle that as implicit IPv4 unicast.
This commit is contained in:
parent
37dbd3fc7a
commit
9b73157ea1
@ -487,6 +487,7 @@ bgp_conn_enter_openconfirm_state(struct bgp_conn *conn)
|
||||
}
|
||||
|
||||
static const struct bgp_af_caps dummy_af_caps = { };
|
||||
static const struct bgp_af_caps basic_af_caps = { .ready = 1 };
|
||||
|
||||
void
|
||||
bgp_conn_enter_established_state(struct bgp_conn *conn)
|
||||
@ -530,6 +531,13 @@ bgp_conn_enter_established_state(struct bgp_conn *conn)
|
||||
const struct bgp_af_caps *loc = bgp_find_af_caps(local, c->afi);
|
||||
const struct bgp_af_caps *rem = bgp_find_af_caps(peer, c->afi);
|
||||
|
||||
/* Use default if capabilities were not announced */
|
||||
if (!local->length && (c->afi == BGP_AF_IPV4))
|
||||
loc = &basic_af_caps;
|
||||
|
||||
if (!peer->length && (c->afi == BGP_AF_IPV4))
|
||||
rem = &basic_af_caps;
|
||||
|
||||
/* Ignore AFIs that were not announced in multiprotocol capability */
|
||||
if (!loc || !loc->ready)
|
||||
loc = &dummy_af_caps;
|
||||
|
@ -192,6 +192,7 @@ struct bgp_caps {
|
||||
u16 gr_time; /* Graceful restart time in seconds */
|
||||
|
||||
u16 af_count; /* Number of af_data items */
|
||||
u16 length; /* Length of capabilities in OPEN msg */
|
||||
|
||||
struct bgp_af_caps af_data[0]; /* Per-AF capability data */
|
||||
};
|
||||
|
@ -237,6 +237,7 @@ bgp_write_capabilities(struct bgp_conn *conn, byte *buf)
|
||||
struct bgp_af_caps *ac;
|
||||
uint any_ext_next_hop = 0;
|
||||
uint any_add_path = 0;
|
||||
byte *buf_head = buf;
|
||||
byte *data;
|
||||
|
||||
/* Prepare bgp_caps structure */
|
||||
@ -384,6 +385,8 @@ bgp_write_capabilities(struct bgp_conn *conn, byte *buf)
|
||||
*buf++ = 0; /* Capability data length */
|
||||
}
|
||||
|
||||
caps->length = buf - buf_head;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
@ -395,6 +398,8 @@ bgp_read_capabilities(struct bgp_conn *conn, struct bgp_caps *caps, byte *pos, i
|
||||
int i, cl;
|
||||
u32 af;
|
||||
|
||||
caps->length += len;
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
if (len < 2 || len < (2 + pos[1]))
|
||||
|
Loading…
Reference in New Issue
Block a user