diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2019-03-15 20:54:01 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2019-03-18 14:29:12 +0100 |
commit | 7e5f769d91319b4130f7d611dd14252806892ace (patch) | |
tree | 232259b8897f8222e638e509871b5bddd06420ec /proto/bgp/packets.c | |
parent | 5d511948cddee415c2f0f1103bda0468a193f2d6 (diff) |
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.
Diffstat (limited to 'proto/bgp/packets.c')
-rw-r--r-- | proto/bgp/packets.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index 26716573..4ae6c5cf 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -217,6 +217,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 */ @@ -394,6 +395,8 @@ bgp_write_capabilities(struct bgp_conn *conn, byte *buf) data[-1] = buf - data; } + caps->length = buf - buf_head; + return buf; } @@ -405,6 +408,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])) |