summaryrefslogtreecommitdiff
path: root/proto/pipe/pipe.c
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2011-11-07 00:31:23 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2011-11-07 00:31:23 +0100
commita7f23f581f5e3efe92ec97dfca7d01c66f31ab04 (patch)
tree3a8f7cffb7abce83b7bce8be87d21be8a2fbff72 /proto/pipe/pipe.c
parent74add5df17c386bd109ebea7b1dac04d1651ae51 (diff)
Implements protocol templates.
Based on the patch from Alexander V. Chernikov. Extended to support almost all protocols. Uses 'protocol bgp NAME from TEMPLATE { ... }' syntax.
Diffstat (limited to 'proto/pipe/pipe.c')
-rw-r--r--proto/pipe/pipe.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/proto/pipe/pipe.c b/proto/pipe/pipe.c
index e557097d..420c5a9d 100644
--- a/proto/pipe/pipe.c
+++ b/proto/pipe/pipe.c
@@ -165,14 +165,6 @@ pipe_postconfig(struct proto_config *C)
cf_error("Primary table and peer table must be different");
}
-static void
-pipe_get_status(struct proto *P, byte *buf)
-{
- struct pipe_proto *p = (struct pipe_proto *) P;
-
- bsprintf(buf, "%c> %s", (p->mode == PIPE_OPAQUE) ? '-' : '=', p->peer->name);
-}
-
static int
pipe_reconfigure(struct proto *P, struct proto_config *new)
{
@@ -186,6 +178,21 @@ pipe_reconfigure(struct proto *P, struct proto_config *new)
return 1;
}
+static void
+pipe_copy_config(struct proto_config *dest, struct proto_config *src)
+{
+ /* Just a shallow copy, not many items here */
+ proto_copy_rest(dest, src, sizeof(struct pipe_config));
+}
+
+static void
+pipe_get_status(struct proto *P, byte *buf)
+{
+ struct pipe_proto *p = (struct pipe_proto *) P;
+
+ bsprintf(buf, "%c> %s", (p->mode == PIPE_OPAQUE) ? '-' : '=', p->peer->name);
+}
+
struct protocol proto_pipe = {
name: "Pipe",
@@ -195,5 +202,6 @@ struct protocol proto_pipe = {
start: pipe_start,
cleanup: pipe_cleanup,
reconfigure: pipe_reconfigure,
+ copy_config: pipe_copy_config,
get_status: pipe_get_status,
};