diff --git a/proto/pipe/config.Y b/proto/pipe/config.Y index 18e1d0fc..aa17ab1e 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 efb992ca..4bed80b6 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 038c6666..c116a881 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