From e8ba557c7f66aaf02dd24f554fba8b3607c2b3d5 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Fri, 13 Mar 2009 12:49:44 +0100 Subject: Update capability handshake options Add 'capabilities' option, change default behavior to advertise ipv4, add some checks and ignore incoming capabilities when capabilities are disabled. --- proto/bgp/bgp.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'proto/bgp/bgp.c') diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 558b1e8..f44d016 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -113,7 +113,7 @@ bgp_open(struct bgp_proto *p) } } - p->start_state = BSS_CONNECT; + p->start_state = p->cf->capabilities ? BSS_CONNECT : BSS_CONNECT_NOCAP; return 0; } @@ -823,16 +823,22 @@ bgp_check(struct bgp_config *c) { if (!c->local_as) cf_error("Local AS number must be set"); + if (!c->remote_as) cf_error("Neighbor must be configured"); + if (!bgp_as4_support && c->enable_as4) cf_error("AS4 support disabled globally"); - if (!c->enable_as4 && (c->local_as > 0xFFFF)) + + if (!bgp_as4_support && (c->local_as > 0xFFFF)) cf_error("Local AS number out of range"); - if (!c->enable_as4 && (c->remote_as > 0xFFFF)) - cf_error("Neighbor AS number out of range"); + + if (!(c->capabilities && c->enable_as4) && (c->remote_as > 0xFFFF)) + cf_error("Neighbor AS number out of range (AS4 not available)"); + if ((c->local_as != c->remote_as) && (c->rr_client)) cf_error("Only internal neighbor can be RR client"); + if ((c->local_as == c->remote_as) && (c->rs_client)) cf_error("Only external neighbor can be RS client"); } -- cgit v1.2.3