mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 17:40:04 +00:00
Merge pull request #3295 from pguibert6WIND/ospf_area_unconfigure
ospfd: permit reconfiguring network after area suppressed
This commit is contained in:
commit
cd5b3742d2
@ -245,8 +245,11 @@ DEFUN_NOSH (router_ospf,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ospf_interface_area_set(ospf, ifp);
|
if (!ospf_interface_area_is_already_set(ospf,
|
||||||
ospf->if_ospf_cli_count++;
|
ifp)) {
|
||||||
|
ospf_interface_area_set(ospf, ifp);
|
||||||
|
ospf->if_ospf_cli_count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1149,6 +1149,32 @@ void ospf_interface_area_unset(struct ospf *ospf, struct interface *ifp)
|
|||||||
update_redistributed(ospf, 0); /* interfaces possibly removed */
|
update_redistributed(ospf, 0); /* interfaces possibly removed */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ospf_interface_area_is_already_set(struct ospf *ospf,
|
||||||
|
struct interface *ifp)
|
||||||
|
{
|
||||||
|
struct route_node *rn_oi;
|
||||||
|
|
||||||
|
if (!ospf)
|
||||||
|
return false; /* Ospf not ready yet */
|
||||||
|
|
||||||
|
/* Find interfaces that may need to be removed. */
|
||||||
|
for (rn_oi = route_top(IF_OIFS(ifp)); rn_oi;
|
||||||
|
rn_oi = route_next(rn_oi)) {
|
||||||
|
struct ospf_interface *oi = rn_oi->info;
|
||||||
|
|
||||||
|
if (oi == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
|
||||||
|
continue;
|
||||||
|
/* at least one route covered by interface
|
||||||
|
* that implies already done
|
||||||
|
*/
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check whether interface matches given network
|
/* Check whether interface matches given network
|
||||||
* returns: 1, true. 0, false
|
* returns: 1, true. 0, false
|
||||||
*/
|
*/
|
||||||
|
@ -561,6 +561,8 @@ extern void ospf_area_del_if(struct ospf_area *, struct ospf_interface *);
|
|||||||
|
|
||||||
extern void ospf_interface_area_set(struct ospf *, struct interface *);
|
extern void ospf_interface_area_set(struct ospf *, struct interface *);
|
||||||
extern void ospf_interface_area_unset(struct ospf *, struct interface *);
|
extern void ospf_interface_area_unset(struct ospf *, struct interface *);
|
||||||
|
extern bool ospf_interface_area_is_already_set(struct ospf *ospf,
|
||||||
|
struct interface *ifp);
|
||||||
|
|
||||||
extern void ospf_route_map_init(void);
|
extern void ospf_route_map_init(void);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user