mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-01 05:14:54 +00:00

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>
85 lines
2.6 KiB
C
85 lines
2.6 KiB
C
/* Distribute list functions header
|
|
* Copyright (C) 1999 Kunihiro Ishiguro
|
|
*
|
|
* This file is part of GNU Zebra.
|
|
*
|
|
* GNU Zebra is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published
|
|
* by the Free Software Foundation; either version 2, or (at your
|
|
* option) any later version.
|
|
*
|
|
* GNU Zebra is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; see the file COPYING; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _ZEBRA_DISTRIBUTE_H
|
|
#define _ZEBRA_DISTRIBUTE_H
|
|
|
|
#include <zebra.h>
|
|
#include "if.h"
|
|
#include "filter.h"
|
|
|
|
/* Disctirubte list types. */
|
|
enum distribute_type {
|
|
DISTRIBUTE_V4_IN,
|
|
DISTRIBUTE_V6_IN,
|
|
DISTRIBUTE_V4_OUT,
|
|
DISTRIBUTE_V6_OUT,
|
|
DISTRIBUTE_MAX
|
|
};
|
|
|
|
struct distribute {
|
|
/* Name of the interface. */
|
|
char *ifname;
|
|
|
|
/* Filter name of `in' and `out' */
|
|
char *list[DISTRIBUTE_MAX];
|
|
|
|
/* prefix-list name of `in' and `out' */
|
|
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 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 *);
|
|
extern enum filter_type distribute_apply_out(struct interface *,
|
|
struct prefix *);
|
|
|
|
#endif /* _ZEBRA_DISTRIBUTE_H */
|