diff options
author | Martin Mares <mj@ucw.cz> | 1999-12-03 12:40:45 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-12-03 12:40:45 +0100 |
commit | 02c1fbddd462fecc6887a44ef67202870bcae7be (patch) | |
tree | 571deb0c83d55826ec90fe317544bd548ac848d3 | |
parent | 28e01f85c65c536837227829f645818dfa6a2652 (diff) | |
download | bird-02c1fbddd462fecc6887a44ef67202870bcae7be.tar bird-02c1fbddd462fecc6887a44ef67202870bcae7be.zip |
Added proto_get_named() to be used in CLI commands to get protocol instance
of a given protocol with optionally given name. See `show static' for an
example.
-rw-r--r-- | nest/proto.c | 29 | ||||
-rw-r--r-- | nest/protocol.h | 1 |
2 files changed, 30 insertions, 0 deletions
diff --git a/nest/proto.c b/nest/proto.c index 94bbbfd..a0beb5f 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -499,3 +499,32 @@ proto_show(struct symbol *s, int verbose) } cli_msg(0, ""); } + +struct proto * +proto_get_named(struct symbol *sym, struct protocol *pr) +{ + struct proto *p, *q; + + if (sym) + { + if (sym->class != SYM_PROTO) + cf_error("%s: Not a protocol", sym->name); + p = ((struct proto_config *)sym->def)->proto; + if (!p || p->proto != pr) + cf_error("%s: Not a %s protocol", sym->name, pr->name); + } + else + { + p = NULL; + WALK_LIST(q, proto_list) + if (q->proto == pr) + { + if (p) + cf_error("There are multiple %s protocols running", pr->name); + p = q; + } + if (!p) + cf_error("There is no %s protocol running", pr->name); + } + return p; +} diff --git a/nest/protocol.h b/nest/protocol.h index 0962ccf..3e53c86 100644 --- a/nest/protocol.h +++ b/nest/protocol.h @@ -151,6 +151,7 @@ void proto_build(struct proto_config *); void *proto_new(struct proto_config *, unsigned size); void *proto_config_new(struct protocol *, unsigned size); void proto_show(struct symbol *, int); +struct proto *proto_get_named(struct symbol *, struct protocol *); extern list proto_list; |