diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
commit | e2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch) | |
tree | f0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /lib/plist.h | |
parent | Initial commit. (diff) | |
download | frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.tar.xz frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.zip |
Adding upstream version 9.1.upstream/9.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/plist.h')
-rw-r--r-- | lib/plist.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/plist.h b/lib/plist.h new file mode 100644 index 0000000..f31d8e8 --- /dev/null +++ b/lib/plist.h @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Prefix list functions. + * Copyright (C) 1999 Kunihiro Ishiguro + */ + +#ifndef _QUAGGA_PLIST_H +#define _QUAGGA_PLIST_H + +#include <zebra.h> + +#include "stream.h" +#include "vty.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum prefix_list_type { + PREFIX_DENY, + PREFIX_PERMIT, +}; + +struct prefix_list; +struct prefix_list_entry; + +struct orf_prefix { + uint32_t seq; + uint8_t ge; + uint8_t le; + struct prefix p; +}; + +/* Prototypes. */ +extern void prefix_list_init(void); +extern void prefix_list_reset(void); +extern void prefix_list_add_hook(void (*func)(struct prefix_list *)); +extern void prefix_list_delete_hook(void (*func)(struct prefix_list *)); + +extern const char *prefix_list_name(struct prefix_list *); +extern afi_t prefix_list_afi(struct prefix_list *); +extern struct prefix_list *prefix_list_lookup(afi_t, const char *); + +/* + * prefix_list_apply_which_prefix + * + * Allow calling function to learn which prefix + * caused the DENY or PERMIT. + * + * If no pointer is sent in, do not return anything. + * If it is a empty plist return a NULL pointer. + * + * address_mode = the "prefix" being passed in is really an address, match + * regardless of prefix length (i.e. ge/le are ignored.) prefix->prefixlen + * must be /32. + */ +extern enum prefix_list_type +prefix_list_apply_ext(struct prefix_list *plist, + const struct prefix_list_entry **matches, + union prefixconstptr prefix, + bool address_mode); +#define prefix_list_apply(A, B) \ + prefix_list_apply_ext((A), NULL, (B), false) + +extern struct prefix_list *prefix_bgp_orf_lookup(afi_t, const char *); +extern struct stream *prefix_bgp_orf_entry(struct stream *, + struct prefix_list *, uint8_t, + uint8_t, uint8_t); +extern int prefix_bgp_orf_set(char *, afi_t, struct orf_prefix *, int, int); +extern void prefix_bgp_orf_remove_all(afi_t, char *); +extern int prefix_bgp_show_prefix_list(struct vty *vty, afi_t afi, char *name, + bool use_json); + +extern struct prefix_list *prefix_list_get(afi_t afi, int orf, + const char *name); +extern void prefix_list_delete(struct prefix_list *plist); +extern int64_t prefix_new_seq_get(struct prefix_list *plist); + +extern struct prefix_list_entry *prefix_list_entry_new(void); +extern void prefix_list_entry_delete(struct prefix_list *plist, + struct prefix_list_entry *pentry, + int update_list); +extern struct prefix_list_entry * +prefix_list_entry_lookup(struct prefix_list *plist, struct prefix *prefix, + enum prefix_list_type type, int64_t seq, int le, + int ge); + +#ifdef __cplusplus +} +#endif + +#endif /* _QUAGGA_PLIST_H */ |