diff options
author | Ondrej Filip <feela@network.cz> | 2012-08-07 11:15:23 +0200 |
---|---|---|
committer | Ondrej Filip <feela@network.cz> | 2012-08-07 11:15:23 +0200 |
commit | 60c412b9368fd7c3b0a8df2200f02140adcb0cf3 (patch) | |
tree | 237d3c0b8aa86c6f3a88a76141ab51ca94b1fcd7 /proto/bgp/bgp.c | |
parent | 3fe1d9e4a40663b93b59f5b6f9d61af9dc6a8ae6 (diff) | |
parent | 94e2f1c111721d6213ea65cac5c53036e38e3973 (diff) |
Merge branch 'master' of ssh://git.nic.cz/birdv1.3.8
Diffstat (limited to 'proto/bgp/bgp.c')
-rw-r--r-- | proto/bgp/bgp.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 3b9f7cc5..dbc59eea 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -870,6 +870,7 @@ bgp_shutdown(struct proto *P) break; case PDC_CMD_DISABLE: + case PDC_CMD_SHUTDOWN: subcode = 2; // Errcode 6, 2 - administrative shutdown break; @@ -923,7 +924,7 @@ bgp_init(struct proto_config *C) struct proto *P = proto_new(C, sizeof(struct bgp_proto)); struct bgp_proto *p = (struct bgp_proto *) P; - P->accept_ra_types = RA_OPTIMAL; + P->accept_ra_types = c->secondary ? RA_ACCEPTED : RA_OPTIMAL; P->rt_notify = bgp_rt_notify; P->rte_better = bgp_rte_better; P->import_control = bgp_import_control; @@ -969,6 +970,7 @@ bgp_check_config(struct bgp_config *c) if (internal && c->rs_client) cf_error("Only external neighbor can be RS client"); + if (c->multihop && (c->gw_mode == GW_DIRECT)) cf_error("Multihop BGP cannot use direct gateway mode"); @@ -976,6 +978,7 @@ bgp_check_config(struct bgp_config *c) ipa_has_link_scope(c->source_addr))) cf_error("Multihop BGP cannot be used with link-local addresses"); + /* Different default based on rs_client */ if (!c->missing_lladdr) c->missing_lladdr = c->rs_client ? MLL_IGNORE : MLL_SELF; @@ -987,6 +990,16 @@ bgp_check_config(struct bgp_config *c) /* Disable after error incompatible with restart limit action */ if (c->c.in_limit && (c->c.in_limit->action == PLA_RESTART) && c->disable_after_error) c->c.in_limit->action = PLA_DISABLE; + + + if ((c->gw_mode == GW_RECURSIVE) && c->c.table->sorted) + cf_error("BGP in recursive mode prohibits sorted table"); + + if (c->deterministic_med && c->c.table->sorted) + cf_error("BGP with deterministic MED prohibits sorted table"); + + if (c->secondary && !c->c.table->sorted) + cf_error("BGP with secondary option requires sorted table"); } static int |