summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/plist.c24
-rw-r--r--lib/plist.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/lib/plist.c b/lib/plist.c
index b01c48f6..9cf099dd 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -2834,6 +2834,30 @@ prefix_bgp_orf_entry (struct stream *s, prefix_list_ref ref,
return s;
}
+/* Get the i'th BGP ORF prefix from the given list.
+ * return 1 - got ORF prefix.
+ * return 0 - no such entry
+ */
+int
+prefix_bgp_orf_get(struct prefix_list *plist, vector_index i,
+ struct orf_prefix *orfpe, enum prefix_list_type *pe_type)
+{
+ struct prefix_list_entry *pe = NULL;
+
+ if (!plist || i >= plist->list.end)
+ return 0;
+
+ pe = vector_slot(&plist->list, i);
+ orfpe->seq = pe->seq;
+ orfpe->ge = pe->ge;
+ orfpe->le = pe->le;
+ orfpe->p = pe->prefix;
+
+ *pe_type = pe->type;
+
+ return 1;
+}
+
/* Set or Unset a BGP ORF entry. */
int
prefix_bgp_orf_set (char *name, afi_t afi, struct orf_prefix *orfp,
diff --git a/lib/plist.h b/lib/plist.h
index 0d9e3ecb..4f383417 100644
--- a/lib/plist.h
+++ b/lib/plist.h
@@ -62,6 +62,8 @@ extern const char* prefix_list_get_name(struct prefix_list* plist) ;
extern struct stream * prefix_bgp_orf_entry (struct stream *,
prefix_list_ref ref,
u_char, u_char, u_char);
+extern int prefix_bgp_orf_get(struct prefix_list *plist, vector_index i,
+ struct orf_prefix *orfpe, enum prefix_list_type *pe_type);
extern int prefix_bgp_orf_set (char *, afi_t, struct orf_prefix *, int, int);
extern void prefix_bgp_orf_remove_all (char *);
extern int prefix_bgp_show_prefix_list (struct vty *, afi_t, char *);