From: Maria Matejka Date: Thu, 28 Feb 2019 17:17:06 +0000 (+0100) Subject: Pipe delay scaffolding X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fdelay;p=thirdparty%2Fbird.git Pipe delay scaffolding --- diff --git a/proto/pipe/config.Y b/proto/pipe/config.Y index 18e1d0fca..aa17ab1e9 100644 --- a/proto/pipe/config.Y +++ b/proto/pipe/config.Y @@ -16,7 +16,7 @@ CF_DEFINES CF_DECLS -CF_KEYWORDS(PIPE, PEER, TABLE) +CF_KEYWORDS(PIPE, PEER, TABLE, DELAY) CF_GRAMMAR @@ -41,6 +41,7 @@ pipe_proto: | pipe_proto proto_item ';' | pipe_proto channel_item ';' | pipe_proto PEER TABLE rtable ';' { PIPE_CFG->peer = $4; } + | pipe_proto DELAY expr_us ';' { PIPE_CFG->delay = $3; } ; CF_CODE diff --git a/proto/pipe/pipe.c b/proto/pipe/pipe.c index efb992cab..4bed80b62 100644 --- a/proto/pipe/pipe.c +++ b/proto/pipe/pipe.c @@ -182,6 +182,7 @@ pipe_init(struct proto_config *CF) P->preexport = pipe_preexport; P->reload_routes = pipe_reload_routes; + p->delay = cf->delay; pipe_configure_channels(p, cf); return P; @@ -193,6 +194,9 @@ pipe_reconfigure(struct proto *P, struct proto_config *CF) struct pipe_proto *p = (void *) P; struct pipe_config *cf = (void *) CF; + if (p->delay != cf->delay) + return 0; + return pipe_configure_channels(p, cf); } diff --git a/proto/pipe/pipe.h b/proto/pipe/pipe.h index 038c66667..c116a8817 100644 --- a/proto/pipe/pipe.h +++ b/proto/pipe/pipe.h @@ -12,12 +12,14 @@ struct pipe_config { struct proto_config c; struct rtable_config *peer; /* Table we're connected to */ + btime delay; }; struct pipe_proto { struct proto p; struct channel *pri; struct channel *sec; + btime delay; }; #endif