0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-23 02:01:55 +00:00

fixup! fixup! fixup! partial import seems working

This commit is contained in:
Katerina Kubecova 2023-10-25 14:55:46 +02:00
parent 95c3ac5d8b
commit 283ea03419
3 changed files with 8 additions and 5 deletions

View File

@ -1263,7 +1263,7 @@ This argument can be omitted if there exists only a single instance.
Enable, disable or restart a given protocol instance, instances matching Enable, disable or restart a given protocol instance, instances matching
the <cf><m/pattern/</cf> or <cf/all/ instances. the <cf><m/pattern/</cf> or <cf/all/ instances.
<tag><label id="cli-reload">reload [in|out] <m/name/|"<m/pattern/"|all</tag> <tag><label id="cli-reload">reload [in|out] (<m/name/|"<m/pattern/"|all) [partial <prefix>] </tag>
Reload a given protocol instance, that means re-import routes from the Reload a given protocol instance, that means re-import routes from the
protocol instance and re-export preferred routes to the instance. If protocol instance and re-export preferred routes to the instance. If
<cf/in/ or <cf/out/ options are used, the command is restricted to one <cf/in/ or <cf/out/ options are used, the command is restricted to one
@ -1274,6 +1274,9 @@ This argument can be omitted if there exists only a single instance.
propagates the old set of routes. For example when <cf/configure soft/ propagates the old set of routes. For example when <cf/configure soft/
command was used to change filters. command was used to change filters.
If partial <prefix> option is used, only corresponding routes are reloaded.
Protocol BGP does partial reload only if it has locked table, otherwise partial reload for BGP is refused.
Re-export always succeeds, but re-import is protocol-dependent and might Re-export always succeeds, but re-import is protocol-dependent and might
fail (for example, if BGP neighbor does not support route-refresh fail (for example, if BGP neighbor does not support route-refresh
extension). In that case, re-export is also skipped. Note that for the extension). In that case, re-export is also skipped. Note that for the

View File

@ -921,7 +921,7 @@ partial_opt:
PARTIAL term { PARTIAL term {
struct f_val val; struct f_val val;
if (f_eval(f_linearize($2, 1), &val) > F_RETURN) cf_error("Runtime error"); if (f_eval(f_linearize($2, 1), &val) > F_RETURN) cf_error("Runtime error");
if (val.type != T_PREFIX_SET) cf_error("Partial spec must be trie"); if (val.type != T_PREFIX_SET) cf_error("Partial spec must be prefix set");
$$ = val.val.ti; $$ = val.val.ti;
} }
| /* empty */ { $$ = NULL; } | /* empty */ { $$ = NULL; }
@ -933,7 +933,7 @@ CF_CLI(ENABLE, proto_patt opttext, (<protocol> | \"<pattern>\" | all) [message],
{ proto_apply_cmd($2, proto_cmd_enable, 1, (uintptr_t) $3); } ; { proto_apply_cmd($2, proto_cmd_enable, 1, (uintptr_t) $3); } ;
CF_CLI(RESTART, proto_patt opttext, (<protocol> | \"<pattern>\" | all) [message], [[Restart protocol]]) CF_CLI(RESTART, proto_patt opttext, (<protocol> | \"<pattern>\" | all) [message], [[Restart protocol]])
{ proto_apply_cmd($2, proto_cmd_restart, 1, (uintptr_t) $3); } ; { proto_apply_cmd($2, proto_cmd_restart, 1, (uintptr_t) $3); } ;
CF_CLI(RELOAD, proto_patt partial_opt, <protocol> | \"<pattern>\" | all, [[Reload protocol]]) CF_CLI(RELOAD, proto_patt partial_opt, (<protocol> | \"<pattern>\" | all) [partial <prefix set>], [[Reload protocol]])
{ proto_call_cmd_reload($2, CMD_RELOAD, $3); } ; { proto_call_cmd_reload($2, CMD_RELOAD, $3); } ;
CF_CLI(RELOAD IN, proto_patt partial_opt, <protocol> | \"<pattern>\" | all, [[Reload protocol (just imported routes)]]) CF_CLI(RELOAD IN, proto_patt partial_opt, <protocol> | \"<pattern>\" | all, [[Reload protocol (just imported routes)]])
{ proto_call_cmd_reload($3, CMD_RELOAD_IN, $4); } ; { proto_call_cmd_reload($3, CMD_RELOAD_IN, $4); } ;

View File

@ -1151,7 +1151,7 @@ channel_request_reload(struct channel *c)
if ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER) if ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER)
channel_schedule_reload(c, cir); channel_schedule_reload(c, cir);
else if (! c->proto->reload_routes(c, cir)) else if (! c->proto->reload_routes(c, cir))
bug( "Partial reload was refused. Maybe you tried partial reload on bgp?"); bug( "Partial reload was refused. Maybe you tried partial reload on BGP with unlocked table?");
} }
static void static void
@ -1165,7 +1165,7 @@ channel_request_partial_reload(struct channel *c, struct channel_import_request
if ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER) if ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER)
channel_schedule_reload(c, cir); channel_schedule_reload(c, cir);
else if (! c->proto->reload_routes(c, cir)) else if (! c->proto->reload_routes(c, cir))
cli_msg(-15, "Partial reload was refused. Maybe you tried partial reload on bgp?"); cli_msg(-15, "Partial reload was refused. Maybe you tried partial reload on BGP with unlocked table?");
} }
const struct channel_class channel_basic = { const struct channel_class channel_basic = {