From 02c1fbddd462fecc6887a44ef67202870bcae7be Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Fri, 3 Dec 1999 11:40:45 +0000 Subject: 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. --- nest/proto.c | 29 +++++++++++++++++++++++++++++ nest/protocol.h | 1 + 2 files changed, 30 insertions(+) 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; -- cgit v1.2.3