mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 21:54:01 +00:00
* Make updating redistributions work if prefix list is changed and it's
used in route-map used to filter redistributions. * Move ospf_prefix_list_update() function from ospfd.c to ospf_zebra.c.
This commit is contained in:
parent
2a56df976d
commit
dd669bb0e7
@ -1,3 +1,10 @@
|
|||||||
|
2004-05-10 Hasso Tepper <hasso@estpak.ee>
|
||||||
|
|
||||||
|
* ospf_zebra.c, ospfd.c: Move ospf_prefix_list_update() function
|
||||||
|
to ospf_zebra.c from ospfd.c and add redistribution updates if
|
||||||
|
route-map is used in redistribution.
|
||||||
|
* ospf_main.c: Remove now useless call to ospf_init().
|
||||||
|
|
||||||
2004-05-08 Paul Jakma <paul@dishone.st>
|
2004-05-08 Paul Jakma <paul@dishone.st>
|
||||||
|
|
||||||
* ospf_zebra.c: Sync with lib/zclient changes
|
* ospf_zebra.c: Sync with lib/zclient changes
|
||||||
|
@ -268,7 +268,6 @@ main (int argc, char **argv)
|
|||||||
prefix_list_init ();
|
prefix_list_init ();
|
||||||
|
|
||||||
/* OSPFd inits. */
|
/* OSPFd inits. */
|
||||||
ospf_init ();
|
|
||||||
ospf_if_init ();
|
ospf_if_init ();
|
||||||
ospf_zebra_init ();
|
ospf_zebra_init ();
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "zclient.h"
|
#include "zclient.h"
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
|
#include "plist.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#include "ospfd/ospfd.h"
|
#include "ospfd/ospfd.h"
|
||||||
@ -1038,7 +1039,62 @@ ospf_filter_update (struct access_list *access)
|
|||||||
if (IS_OSPF_ABR (ospf) && abr_inv)
|
if (IS_OSPF_ABR (ospf) && abr_inv)
|
||||||
ospf_schedule_abr_task (ospf);
|
ospf_schedule_abr_task (ospf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If prefix-list is updated, do some updates. */
|
||||||
|
void
|
||||||
|
ospf_prefix_list_update (struct prefix_list *plist)
|
||||||
|
{
|
||||||
|
struct ospf *ospf;
|
||||||
|
int type;
|
||||||
|
int abr_inv = 0;
|
||||||
|
struct ospf_area *area;
|
||||||
|
listnode node;
|
||||||
|
|
||||||
|
/* If OSPF instatnce does not exist, return right now. */
|
||||||
|
ospf = ospf_lookup ();
|
||||||
|
if (ospf == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Update all route-maps which are used as redistribution filters.
|
||||||
|
* They might use prefix-list.
|
||||||
|
*/
|
||||||
|
for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
|
||||||
|
{
|
||||||
|
if (ROUTEMAP (ospf, type) != NULL)
|
||||||
|
{
|
||||||
|
/* If route-map is not NULL it may be using this prefix list */
|
||||||
|
ospf_distribute_list_update (ospf, type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update area filter-lists. */
|
||||||
|
for (node = listhead (ospf->areas); node; nextnode (node))
|
||||||
|
if ((area = getdata (node)) != NULL)
|
||||||
|
{
|
||||||
|
/* Update filter-list in. */
|
||||||
|
if (PREFIX_NAME_IN (area))
|
||||||
|
if (strcmp (PREFIX_NAME_IN (area), plist->name) == 0)
|
||||||
|
{
|
||||||
|
PREFIX_LIST_IN (area) =
|
||||||
|
prefix_list_lookup (AFI_IP, PREFIX_NAME_IN (area));
|
||||||
|
abr_inv++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update filter-list out. */
|
||||||
|
if (PREFIX_NAME_OUT (area))
|
||||||
|
if (strcmp (PREFIX_NAME_OUT (area), plist->name) == 0)
|
||||||
|
{
|
||||||
|
PREFIX_LIST_IN (area) =
|
||||||
|
prefix_list_lookup (AFI_IP, PREFIX_NAME_OUT (area));
|
||||||
|
abr_inv++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Schedule ABR task. */
|
||||||
|
if (IS_OSPF_ABR (ospf) && abr_inv)
|
||||||
|
ospf_schedule_abr_task (ospf);
|
||||||
|
}
|
||||||
|
|
||||||
struct ospf_distance *
|
struct ospf_distance *
|
||||||
ospf_distance_new ()
|
ospf_distance_new ()
|
||||||
@ -1203,4 +1259,6 @@ ospf_zebra_init ()
|
|||||||
|
|
||||||
access_list_add_hook (ospf_filter_update);
|
access_list_add_hook (ospf_filter_update);
|
||||||
access_list_delete_hook (ospf_filter_update);
|
access_list_delete_hook (ospf_filter_update);
|
||||||
|
prefix_list_add_hook (ospf_prefix_list_update);
|
||||||
|
prefix_list_delete_hook (ospf_prefix_list_update);
|
||||||
}
|
}
|
||||||
|
@ -1638,49 +1638,6 @@ ospf_nbr_nbma_poll_interval_unset (struct ospf *ospf, struct in_addr addr)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ospf_prefix_list_update (struct prefix_list *plist)
|
|
||||||
{
|
|
||||||
struct ospf *ospf;
|
|
||||||
struct ospf_area *area;
|
|
||||||
listnode node;
|
|
||||||
int abr_inv = 0;
|
|
||||||
|
|
||||||
/* If OSPF instatnce does not exist, return right now. */
|
|
||||||
ospf = ospf_lookup ();
|
|
||||||
if (ospf == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Update Area prefix-list. */
|
|
||||||
for (node = listhead (ospf->areas); node; nextnode (node))
|
|
||||||
{
|
|
||||||
area = getdata (node);
|
|
||||||
|
|
||||||
/* Update filter-list in. */
|
|
||||||
if (PREFIX_NAME_IN (area))
|
|
||||||
if (strcmp (PREFIX_NAME_IN (area), plist->name) == 0)
|
|
||||||
{
|
|
||||||
PREFIX_LIST_IN (area) =
|
|
||||||
prefix_list_lookup (AFI_IP, PREFIX_NAME_IN (area));
|
|
||||||
abr_inv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update filter-list out. */
|
|
||||||
if (PREFIX_NAME_OUT (area))
|
|
||||||
if (strcmp (PREFIX_NAME_OUT (area), plist->name) == 0)
|
|
||||||
{
|
|
||||||
PREFIX_LIST_IN (area) =
|
|
||||||
prefix_list_lookup (AFI_IP, PREFIX_NAME_OUT (area));
|
|
||||||
abr_inv++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Schedule ABR tasks. */
|
|
||||||
if (IS_OSPF_ABR (ospf) && abr_inv)
|
|
||||||
ospf_schedule_abr_task (ospf);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ospf_master_init ()
|
ospf_master_init ()
|
||||||
{
|
{
|
||||||
@ -1691,10 +1648,3 @@ ospf_master_init ()
|
|||||||
om->master = thread_master_create ();
|
om->master = thread_master_create ();
|
||||||
om->start_time = time (NULL);
|
om->start_time = time (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ospf_init ()
|
|
||||||
{
|
|
||||||
prefix_list_add_hook (ospf_prefix_list_update);
|
|
||||||
prefix_list_delete_hook (ospf_prefix_list_update);
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user