mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 14:05:31 +00:00
ospfd: Prevent crash if transferring config amongst instances
If we enter: int eth0 ip ospf area 0 ip ospf 10 area 0 ! This will crash ospf. Prevent this from happening. OSPF instances: a) Cannot be mixed with non-instance b) Are their own process. Since in multi-instance world ospf instances are their own process, when an ospf processes receives an instance command we must remove our config( if present ) and allow the new config to be active in the new process. The problem here is that if you have not done a `router ospf` above the lookup of the ospf pointer will fail and we will just crash. Put some code in to prevent a crash in this case. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
parent
d2a516dc7a
commit
2b0a32da60
@ -8135,13 +8135,26 @@ DEFUN (ip_ospf_area,
|
|||||||
ospf = ospf_lookup_instance(instance);
|
ospf = ospf_lookup_instance(instance);
|
||||||
|
|
||||||
if (instance && ospf == NULL) {
|
if (instance && ospf == NULL) {
|
||||||
|
/*
|
||||||
|
* At this point we know we have received
|
||||||
|
* an instance and there is no ospf instance
|
||||||
|
* associated with it. This means we are
|
||||||
|
* in a situation where we have an
|
||||||
|
* ospf command that is setup for a different
|
||||||
|
* process(instance). We need to safely
|
||||||
|
* remove the command from ourselves and
|
||||||
|
* allow the other instance(process) handle
|
||||||
|
* the configuration command.
|
||||||
|
*/
|
||||||
params = IF_DEF_PARAMS(ifp);
|
params = IF_DEF_PARAMS(ifp);
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
|
if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
|
||||||
UNSET_IF_PARAM(params, if_area);
|
UNSET_IF_PARAM(params, if_area);
|
||||||
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
|
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
|
||||||
|
if (ospf) {
|
||||||
ospf_interface_area_unset(ospf, ifp);
|
ospf_interface_area_unset(ospf, ifp);
|
||||||
ospf->if_ospf_cli_count--;
|
ospf->if_ospf_cli_count--;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return CMD_NOT_MY_INSTANCE;
|
return CMD_NOT_MY_INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user