#endif /* HAVE_IPV6*/
/* Static structure of BGP ORF prefix_list's master. */
-static struct prefix_master prefix_master_orf =
+static struct prefix_master prefix_master_orf_v4 =
+{
+ {NULL, NULL},
+ {NULL, NULL},
+ 1,
+ NULL,
+ NULL,
+};
+
+/* Static structure of BGP ORF prefix_list's master. */
+static struct prefix_master prefix_master_orf_v6 =
{
{NULL, NULL},
{NULL, NULL},
};
static struct prefix_master *
-prefix_master_get (afi_t afi)
+prefix_master_get (afi_t afi, int orf)
{
if (afi == AFI_IP)
- return &prefix_master_ipv4;
-#ifdef HAVE_IPV6
- else if (afi == AFI_IP6)
- return &prefix_master_ipv6;
-#endif /* HAVE_IPV6 */
- else if (afi == AFI_ORF_PREFIX)
- return &prefix_master_orf;
+ return orf ? &prefix_master_orf_v4 : &prefix_master_ipv4;
+ if (afi == AFI_IP6)
+ return orf ? &prefix_master_orf_v6 : &prefix_master_ipv6;
return NULL;
}
}
/* Lookup prefix_list from list of prefix_list by name. */
-struct prefix_list *
-prefix_list_lookup (afi_t afi, const char *name)
+static struct prefix_list *
+prefix_list_lookup_do (afi_t afi, int orf, const char *name)
{
struct prefix_list *plist;
struct prefix_master *master;
if (name == NULL)
return NULL;
- master = prefix_master_get (afi);
+ master = prefix_master_get (afi, orf);
if (master == NULL)
return NULL;
return NULL;
}
+struct prefix_list *
+prefix_list_lookup (afi_t afi, const char *name)
+{
+ return prefix_list_lookup_do (afi, 0, name);
+}
+
+struct prefix_list *
+prefix_bgp_orf_lookup (afi_t afi, const char *name)
+{
+ return prefix_list_lookup_do (afi, 1, name);
+}
+
static struct prefix_list *
prefix_list_new (void)
{
/* Insert new prefix list to list of prefix_list. Each prefix_list
is sorted by the name. */
static struct prefix_list *
-prefix_list_insert (afi_t afi, const char *name)
+prefix_list_insert (afi_t afi, int orf, const char *name)
{
unsigned int i;
long number;
struct prefix_list_list *list;
struct prefix_master *master;
- master = prefix_master_get (afi);
+ master = prefix_master_get (afi, orf);
if (master == NULL)
return NULL;
}
static struct prefix_list *
-prefix_list_get (afi_t afi, const char *name)
+prefix_list_get (afi_t afi, int orf, const char *name)
{
struct prefix_list *plist;
- plist = prefix_list_lookup (afi, name);
+ plist = prefix_list_lookup_do (afi, orf, name);
if (plist == NULL)
- plist = prefix_list_insert (afi, name);
+ plist = prefix_list_insert (afi, orf, name);
return plist;
}
lenum = 0;
/* Get prefix_list with name. */
- plist = prefix_list_get (afi, name);
+ plist = prefix_list_get (afi, 0, name);
/* Make prefix entry. */
pentry = prefix_list_entry_make (&p, type, seqnum, lenum, genum, any);
struct prefix_master *master;
int seqnum = 0;
- master = prefix_master_get (afi);
+ master = prefix_master_get (afi, 0);
if (master == NULL)
return CMD_WARNING;
int ret;
struct prefix p;
- master = prefix_master_get (afi);
+ master = prefix_master_get (afi, 0);
if (master == NULL)
return CMD_WARNING;
{
struct prefix_list *plist;
- plist = prefix_list_get (AFI_IP, argv[0]);
+ plist = prefix_list_get (AFI_IP, 0, argv[0]);
if (plist->desc)
{
{
struct prefix_list *plist;
- plist = prefix_list_get (AFI_IP6, argv[0]);
+ plist = prefix_list_get (AFI_IP6, 0, argv[0]);
if (plist->desc)
{
struct prefix_master *master;
int write = 0;
- master = prefix_master_get (afi);
+ master = prefix_master_get (afi, 0);
if (master == NULL)
return 0;
if (orfp->ge && orfp->le == (afi == AFI_IP ? 32 : 128))
orfp->le = 0;
- plist = prefix_list_get (AFI_ORF_PREFIX, name);
+ plist = prefix_list_get (afi, 1, name);
if (! plist)
return CMD_WARNING;
}
void
-prefix_bgp_orf_remove_all (char *name)
+prefix_bgp_orf_remove_all (afi_t afi, char *name)
{
struct prefix_list *plist;
- plist = prefix_list_lookup (AFI_ORF_PREFIX, name);
+ plist = prefix_bgp_orf_lookup (afi, name);
if (plist)
prefix_list_delete (plist);
}
json_object *json_prefix = NULL;
json_object *json_list = NULL;
- plist = prefix_list_lookup (AFI_ORF_PREFIX, name);
+ plist = prefix_bgp_orf_lookup (afi, name);
if (! plist)
return 0;
}
static void
-prefix_list_reset_orf (void)
+prefix_list_reset_afi (afi_t afi, int orf)
{
struct prefix_list *plist;
struct prefix_list *next;
struct prefix_master *master;
- master = prefix_master_get (AFI_ORF_PREFIX);
+ master = prefix_master_get (afi, orf);
if (master == NULL)
return;
return config_write_prefix_afi (AFI_IP, vty);
}
-static void
-prefix_list_reset_ipv4 (void)
-{
- struct prefix_list *plist;
- struct prefix_list *next;
- struct prefix_master *master;
-
- master = prefix_master_get (AFI_IP);
- if (master == NULL)
- return;
-
- for (plist = master->num.head; plist; plist = next)
- {
- next = plist->next;
- prefix_list_delete (plist);
- }
- for (plist = master->str.head; plist; plist = next)
- {
- next = plist->next;
- prefix_list_delete (plist);
- }
-
- assert (master->num.head == NULL);
- assert (master->num.tail == NULL);
-
- assert (master->str.head == NULL);
- assert (master->str.tail == NULL);
-
- master->seqnum = 1;
- master->recent = NULL;
-}
-
static void
prefix_list_init_ipv4 (void)
{
return config_write_prefix_afi (AFI_IP6, vty);
}
-static void
-prefix_list_reset_ipv6 (void)
-{
- struct prefix_list *plist;
- struct prefix_list *next;
- struct prefix_master *master;
-
- master = prefix_master_get (AFI_IP6);
- if (master == NULL)
- return;
-
- for (plist = master->num.head; plist; plist = next)
- {
- next = plist->next;
- prefix_list_delete (plist);
- }
- for (plist = master->str.head; plist; plist = next)
- {
- next = plist->next;
- prefix_list_delete (plist);
- }
-
- assert (master->num.head == NULL);
- assert (master->num.tail == NULL);
-
- assert (master->str.head == NULL);
- assert (master->str.tail == NULL);
-
- master->seqnum = 1;
- master->recent = NULL;
-}
-
static void
prefix_list_init_ipv6 (void)
{
void
prefix_list_reset ()
{
- prefix_list_reset_ipv4 ();
-#ifdef HAVE_IPV6
- prefix_list_reset_ipv6 ();
-#endif /* HAVE_IPV6 */
- prefix_list_reset_orf ();
+ prefix_list_reset_afi (AFI_IP, 0);
+ prefix_list_reset_afi (AFI_IP6, 0);
+ prefix_list_reset_afi (AFI_IP, 1);
+ prefix_list_reset_afi (AFI_IP6, 1);
}