diff options
Diffstat (limited to 'lib/if_rmap.h')
-rw-r--r-- | lib/if_rmap.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/if_rmap.h b/lib/if_rmap.h new file mode 100644 index 0000000..a9f811e --- /dev/null +++ b/lib/if_rmap.h @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* route-map for interface. + * Copyright (C) 1999 Kunihiro Ishiguro + */ + +#ifndef _ZEBRA_IF_RMAP_H +#define _ZEBRA_IF_RMAP_H + +#include "typesafe.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct lyd_node; +struct vty; + +enum if_rmap_type { IF_RMAP_IN, IF_RMAP_OUT, IF_RMAP_MAX }; + +struct if_rmap { + /* Name of the interface. */ + const char *ifname; + + char *routemap[IF_RMAP_MAX]; +}; + +struct if_rmap_ctx { + /* if_rmap */ + struct hash *ifrmaphash; + + /* Hook functions. */ + void (*if_rmap_add_hook)(struct if_rmap_ctx *ctx, + struct if_rmap *ifrmap); + void (*if_rmap_delete_hook)(struct if_rmap_ctx *ctx, + struct if_rmap *ifrmap); + + /* naming information */ + char *name; +}; + +extern struct if_rmap_ctx *if_rmap_ctx_create(const char *name); +extern void if_rmap_ctx_delete(struct if_rmap_ctx *ctx); +extern void if_rmap_init(int node); +extern void if_rmap_terminate(void); +void if_rmap_hook_add(struct if_rmap_ctx *ctx, + void (*func)(struct if_rmap_ctx *ctx, + struct if_rmap *)); +void if_rmap_hook_delete(struct if_rmap_ctx *ctx, + void (*func)(struct if_rmap_ctx *ctx, + struct if_rmap *)); +extern struct if_rmap *if_rmap_lookup(struct if_rmap_ctx *ctx, + const char *ifname); +extern void if_rmap_yang_modify_cb(struct if_rmap_ctx *ctx, + const struct lyd_node *dnode, + enum if_rmap_type type, bool del); +extern void if_rmap_yang_destroy_cb(struct if_rmap_ctx *ctx, + const struct lyd_node *dnode); +extern int config_write_if_rmap(struct vty *, struct if_rmap_ctx *ctx); +void cli_show_if_route_map(struct vty *vty, const struct lyd_node *dnode, + bool show_defaults); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZEBRA_IF_RMAP_H */ |