diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2018-12-04 15:45:57 +0100 | 
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2018-12-28 18:18:40 +0100 | 
| commit | 03a38493f8b319a3fac139c8898eac53001ad151 (patch) | |
| tree | f90987f91bf09457877e01b1c6d694eec3ec3ee0 /lib/distribute.h | |
| parent | 2569910bb6e5c00ececc60ed15b182e14a88cb9d (diff) | |
lib, rip, ripng, babel, eigrp: add ctx pointer to distribute api
a distribute_ctx context pointer is returned after initialisation to the
calling daemon. this context pointer will be further used to do
discussion with distribute service. Today, there is no specific problem
with old api, since the pointer is the same in all the memory process.
but the pointer will be different if we have multiple instances. Right
now, this is not the case, but if that happens, that work will be used
for that.
distribute-list initialisation is split in two. the vty initialisation
is done at global level, while the context initialisation is done for
each routing daemon instance.
babel daemon is being equipped with a routing returning the main babel
instance.
also, a delete routine is available when the daemon routing instance is
suppressed.
a list of contexts is used inside distribute_list. This will permit
distribute_list utility to handle in the same daemon to handle more than
one context. This will be very useful in the vrf context.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'lib/distribute.h')
| -rw-r--r-- | lib/distribute.h | 36 | 
1 files changed, 29 insertions, 7 deletions
diff --git a/lib/distribute.h b/lib/distribute.h index 35c5e0d6b6..44c699b38a 100644 --- a/lib/distribute.h +++ b/lib/distribute.h @@ -45,14 +45,36 @@ struct distribute {  	char *prefix[DISTRIBUTE_MAX];  }; +struct distribute_ctx { +	/* Hash of distribute list. */ +	struct hash *disthash; + +	/* Hook functions. */ +	void (*distribute_add_hook)(struct distribute_ctx *ctx, +				    struct distribute *dist); +	void (*distribute_delete_hook)(struct distribute_ctx *ctx, +				       struct distribute *dist); + +	/* vrf information */ +	struct vrf *vrf; +}; +  /* Prototypes for distribute-list. */ -extern void distribute_list_init(int); -extern void distribute_list_reset(void); -extern void distribute_list_add_hook(void (*)(struct distribute *)); -extern void distribute_list_delete_hook(void (*)(struct distribute *)); -extern struct distribute *distribute_lookup(const char *); -extern int config_write_distribute(struct vty *); -extern int config_show_distribute(struct vty *); +extern void distribute_list_init(int node); +extern struct distribute_ctx *distribute_list_ctx_create(struct vrf *vrf); +extern void distribute_list_delete(struct distribute_ctx **ctx); +extern void distribute_list_add_hook(struct distribute_ctx *ctx, +				     void (*)(struct distribute_ctx *ctx, +					      struct distribute *)); +extern void distribute_list_delete_hook(struct distribute_ctx *ctx, +					void (*)(struct distribute_ctx *ctx, +						 struct distribute *)); +extern struct distribute *distribute_lookup(struct distribute_ctx *ctx, +					    const char *ifname); +extern int config_write_distribute(struct vty *vty, +				   struct distribute_ctx *ctx); +extern int config_show_distribute(struct vty *vty, +				  struct distribute_ctx *ctx);  extern enum filter_type distribute_apply_in(struct interface *,  					    struct prefix *);  | 
