mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 13:31:48 +00:00
isisd: move management of route flags out of isis_zebra.c
For better modularity, isis_zebra.c should only contain code used to communicate with zebra. The management of route flags belongs to isis_route.c. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
parent
a57c875d73
commit
0a5f3f4fb9
@ -51,6 +51,8 @@
|
||||
|
||||
static struct isis_nexthop *nexthoplookup(struct list *nexthops, int family,
|
||||
union g_addr *ip, ifindex_t ifindex);
|
||||
static void isis_route_update(struct prefix *prefix, struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info);
|
||||
|
||||
static struct isis_nexthop *isis_nexthop_create(int family, union g_addr *ip,
|
||||
ifindex_t ifindex)
|
||||
@ -343,13 +345,34 @@ static void isis_route_delete(struct route_node *rode,
|
||||
UNSET_FLAG(rinfo->flag, ISIS_ROUTE_FLAG_ACTIVE);
|
||||
if (isis->debugs & DEBUG_RTE_EVENTS)
|
||||
zlog_debug("ISIS-Rte: route delete %s", buff);
|
||||
isis_zebra_route_update(prefix, src_p, rinfo);
|
||||
isis_route_update(prefix, src_p, rinfo);
|
||||
}
|
||||
isis_route_info_delete(rinfo);
|
||||
rode->info = NULL;
|
||||
route_unlock_node(rode);
|
||||
}
|
||||
|
||||
static void isis_route_update(struct prefix *prefix, struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
{
|
||||
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ACTIVE)) {
|
||||
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
|
||||
return;
|
||||
|
||||
isis_zebra_route_add_route(prefix, src_p, route_info);
|
||||
|
||||
SET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
|
||||
UNSET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_RESYNC);
|
||||
} else {
|
||||
if (!CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
|
||||
return;
|
||||
|
||||
isis_zebra_route_del_route(prefix, src_p, route_info);
|
||||
|
||||
UNSET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
|
||||
}
|
||||
}
|
||||
|
||||
static void _isis_route_verify_table(struct isis_area *area,
|
||||
struct route_table *table,
|
||||
struct route_table **tables)
|
||||
@ -390,7 +413,7 @@ static void _isis_route_verify_table(struct isis_area *area,
|
||||
buff);
|
||||
}
|
||||
|
||||
isis_zebra_route_update(dst_p, src_p, rinfo);
|
||||
isis_route_update(dst_p, src_p, rinfo);
|
||||
|
||||
if (CHECK_FLAG(rinfo->flag, ISIS_ROUTE_FLAG_ACTIVE))
|
||||
continue;
|
||||
|
@ -219,9 +219,9 @@ static int isis_zebra_link_params(ZAPI_CALLBACK_ARGS)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void isis_zebra_route_add_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
void isis_zebra_route_add_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
{
|
||||
struct zapi_route api;
|
||||
struct zapi_nexthop *api_nh;
|
||||
@ -229,7 +229,7 @@ static void isis_zebra_route_add_route(struct prefix *prefix,
|
||||
struct listnode *node;
|
||||
int count = 0;
|
||||
|
||||
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
|
||||
if (zclient->sock < 0)
|
||||
return;
|
||||
|
||||
memset(&api, 0, sizeof(api));
|
||||
@ -292,17 +292,15 @@ static void isis_zebra_route_add_route(struct prefix *prefix,
|
||||
api.nexthop_num = count;
|
||||
|
||||
zclient_route_send(ZEBRA_ROUTE_ADD, zclient, &api);
|
||||
SET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
|
||||
UNSET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_RESYNC);
|
||||
}
|
||||
|
||||
static void isis_zebra_route_del_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
void isis_zebra_route_del_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
{
|
||||
struct zapi_route api;
|
||||
|
||||
if (!CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
|
||||
if (zclient->sock < 0)
|
||||
return;
|
||||
|
||||
memset(&api, 0, sizeof(api));
|
||||
@ -316,20 +314,6 @@ static void isis_zebra_route_del_route(struct prefix *prefix,
|
||||
}
|
||||
|
||||
zclient_route_send(ZEBRA_ROUTE_DELETE, zclient, &api);
|
||||
UNSET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
|
||||
}
|
||||
|
||||
void isis_zebra_route_update(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info)
|
||||
{
|
||||
if (zclient->sock < 0)
|
||||
return;
|
||||
|
||||
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ACTIVE))
|
||||
isis_zebra_route_add_route(prefix, src_p, route_info);
|
||||
else
|
||||
isis_zebra_route_del_route(prefix, src_p, route_info);
|
||||
}
|
||||
|
||||
static int isis_zebra_read(ZAPI_CALLBACK_ARGS)
|
||||
|
@ -29,9 +29,12 @@ void isis_zebra_stop(void);
|
||||
|
||||
struct isis_route_info;
|
||||
|
||||
void isis_zebra_route_update(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info);
|
||||
void isis_zebra_route_add_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info);
|
||||
void isis_zebra_route_del_route(struct prefix *prefix,
|
||||
struct prefix_ipv6 *src_p,
|
||||
struct isis_route_info *route_info);
|
||||
int isis_distribute_list_update(int routetype);
|
||||
void isis_zebra_redistribute_set(afi_t afi, int type);
|
||||
void isis_zebra_redistribute_unset(afi_t afi, int type);
|
||||
|
Loading…
Reference in New Issue
Block a user